Unity 阴影淡入淡出效果中Shader常量 unity_ShadowFadeCenterAndType和_LightShadowData的问题

由于Universal Render Pipeline目前(2020年4月1日)把阴影淡入淡出这个功能竟然给取消了…我自己拿片元位置到相机位置的距离进行了一个淡化,但是阴影边缘老是被裁切…后来研究了一下Unity里面这个CBuffer是干嘛的。有一些结论,鉴于似乎没搜到,就发个博客吧。。。

至于这些东西为啥是这样…,我也不知道。。。反正人家Unity就是这么干的

unity_ShadowFadeCenterAndType决定了阴影消散的中心:xyz保存的是camPos +  normalize( camFront ) * 0.26666f * shadowDistance, type是1或者0(没细研究,这里不需要)。

_LightShadowData决定了淡化的范围:z: 5/_ShadowDistance,  w保存了一个被z决定的值(2.66666)。需要细说一下。。。

根据阴影中心的计算方式,阴影中心坐标在相机位置的前方0.2666(1/3.75)倍阴影距离处,以这个中心画一个(1-0.266666)的圆,当作阴影的边界,使得正前方的阴影距离刚好是设置好的阴影距离(对,两侧的距离确实不够shadowDistance,要不然不会被裁掉)。这个时候可以用ComputeShadowFade函数里面的式子算一下,直接代入完全散尽的阴影处距离(2.75/3.75=0.73333)shadowDistance:

(2.75/3.75)*_shadowDistance  * 5/ shadowDistance  = (2.75*5)/3.75 = 3.666666 = 2.6666666+1

阴影渐变开始的最远近距离处(圆心偏了…所以会这样)为0。这里的新的常数5是控制阴影衰减范围的一个参数,后面另它为变量k,改变k可以控制阴影淡入淡出范围。

这里可以明显看出来,这个_LightShadowData.w就是让最远处为1的一个偏移修正值。既然是这样,那么这个5也可以用来改变控制阴影淡入淡出的范围,假定我们需要让阴影的c%是渐变的(从[c, 1]渐变)。那么可以计算出来控制参数

k=1/c (即Unity默认的那个5意味着20%的阴影被淡化了)

offset = k * 0.7333 - 1

这个offset就是_LightShadowData的w值了

主要是在这里不太会打公式。。。详细的推导步骤等我弄好公式把pdf放到Github吧…

原文地址:https://www.cnblogs.com/hyapp/p/12608758.html

时间: 2024-11-02 02:47:30

Unity 阴影淡入淡出效果中Shader常量 unity_ShadowFadeCenterAndType和_LightShadowData的问题的相关文章

Jquery中淡入淡出效果fadeIn()、fadeOut()、fadeToggle()、fadeTo()学习引发的思考----关于Jquery函数传参数

一.基本语法 1.fadeIn淡入.fadeOut淡出.fadeToggle淡入淡出切换(已经淡出点击淡入,或者相反): $(selector).fadeIn(duration,complete); $(selector).fadeOut(duration,complete); $(selector).fadeToggle(duration,complete); 可选的 speed 参数规定效果的时长.它可以取以下值:"slow"(200ms)."fast"(600

淡入淡出效果 (jQuery)

1jQuery中淡出动画fadeOut 让元素在页面不可见,常用的办法就是通过设置样式的display:none.除此之外还可以一些类似的办法可以达到这个目的.这里要提一个透明度的方法,设置元素透明度为0,可以让元素不可见,透明度的参数是0~1之间的值,通过改变这个值可以让元素有一个透明度的效果.常见的淡入淡出动画正是这样的原理. fadeOut()函数用于隐藏所有匹配的元素,并带有淡出的过渡动画效果 所谓"淡出"隐藏的,元素是隐藏状态不对作任何改变,元素是可见的,则将其隐藏. .fa

javascript 图片淡入淡出效果 实例源代码

? 1 代码说明:把代码粘贴好之后,需要更改html代码中的图片路径,即可执行成功.<br>后面还有对js代码的详细说明,希望大家好好消化,好好理解.<br><br>html源代码: 1 <head> 2 <title>图片切换</title> 3 <script type="text/javascript" src="图片切换.js"></script> 4 <l

(转)winform Form 淡入淡出效果

原文地址:http://blog.csdn.net/a237428367/article/details/5933565 using System.Runtime.InteropServices; public class Win32 { public const Int32 AW_HOR_POSITIVE = 0x00000001; // 从左到右打开窗口 public const Int32 AW_HOR_NEGATIVE = 0x00000002; // 从右到左打开窗口 public c

h5+css3最简单的图片飞入以及淡入淡出效果

正如很多小伙伴们所知道的,楼主最近在开发移动端的响应式布局的自适应页面了,现在分享一个刚写完的小demo html: <!doctype html> <html lang="en"> <head> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-sca

【jQuery】利用淡入淡出效果实现兼容IE6的告警提示

其实我觉得告警提示的话,直接用一个Alert就最好的.开门见山,直接让用户明白你当前系统的意思,关键是Alert这东西就是再破的浏览器都必须兼容,不然你它丫的做毛浏览器啊?但是,在现在越来越觉得Alert不美观,而且开始有"弹窗挺吓人"的思潮,因此,告警提示你必须做得好看一点.在Javascript的透明度的操控比较艰难的前提下,jQuery的简单淡入淡出效果是你的选择.之所以选择jQuery,是因为这东西能够很好地兼容IE6. 一.基本目标 当输入框的输入内容的字符数无论中文与英文大

js淡入淡出效果实例代码

js淡入淡出效果实例代码:现在的网页要求美观平滑,所以很多让元素消失的效果也也需要有一个过渡过程,这样看起来更为平缓美观,本章节提供了一个代码实例,可以轻松的实现让元素淡入淡出效果.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com

淡入淡出效果的js原生实现

淡入淡出效果,在日常项目中经常用到,可惜原生JS没有类似的方法,而有时小的页面并不值得引入一个jQuery库,所以就自己写了一个,已封装, 有用得着的朋友, 可以直接使用. 代码中另附有一个设置元素透明度的方法, 是按IE规则(0~100)设置, 若改成标准设置方法(0.00~1.00), 下面使用时请考虑浮点精确表达差值. 参数说明: fadeIn()与fadeOut()均有三个参数,第一个是事件, 必填; 第二个是淡入淡出速度, 正整数, 大小自己权衡, 可选参数; 第三个, 是指定淡入淡出

TextView淡入淡出效果

经常看到有些应用里面TextView会有淡入淡出效果,给人一种眼前一亮的感觉,如下图: 这篇文章简单介绍下它的代码实现. 首先,可以先将此动画分解成两部分,即淡入和淡出,淡入的时候,从底部向中心点移动,移动的过程中,文字越变越清晰: 淡出的时候,从中心点向顶部移动,移动过程中,文字越变越模糊.这其中涉及到两个属性:translationY(控件在纵向上的移动距离).alpha(控件的不透明度) 本章将利用属性动画实现其效果. 首先,看淡出的实现: private ObjectAnimator m