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%是渐变的。那么可以计算出来控制参数
k=1/c
offset = k * 0.7333 - 1
这个offset就是_LightShadowData的w值了
主要是在这里不太会打公式。。。等我弄好公式把pdf放到Gitgub吧…
最新文章
- DIV+CSS:Margin和Padding属性[转载]
- http://blog.csdn.net/czmchen/article/details/42392985
- android 学习(1)
- uva 10491
- asp.net下通过泛解析和伪静态实现二级域名的实现方法
- R2的版本由来
- 《Entity Framework 6 Recipes》中文翻译——第十二章自定义EntityFramework对象(一)
- iOS学习之详解AppDelegate
- jQuery的类数组对象结构
- Qt使用快捷键
- 跟着辛星认识一下PHP的自己主动载入
- Express安装入门与模版引擎ejs
- 七牛整合 ueditor (拦住那头牛,七牛又如何)
- ASP.NET Core 2.x On Ubuntu
- apicloud实现各种自定义弹层组件
- VS2013中Nuget程序包管理器控制台使用入门(二)-如何使用Nuget提供的帮助(原创)
- MAC算法
- 初次使用visual studio
- 第24次Scrum会议(11/12)【欢迎来怼】
- BZOJ 3438 小M的作物 &; BZOJ 1877 [SDOI2009]晨跑
热门文章
- 状压dp 持续更新
- 修改gridfilters.js源码,往后台多传递一个参数,并设置NumericFilter、StringFilter默认提示信息
- JZOJ 5328. 【NOIP2017提高A组模拟8.22】世界线
- SpringBoot入门系列(四)整合模板引擎Thymeleaf
- VUE实现Studio管理后台(完结):标签式输入、名值对输入、对话框(modal dialog)
- Redis系列三 - 缓存雪崩、击穿、穿透
- 看完这篇 HTTPS,和面试官扯皮就没问题了
- 最全Redis基础知识
- 回想笔记 瞎比比 域名注册 解析绑定ip 下载证书 设置证书 重定向http到https请求
- 树链剖分与倍增求LCA