UE4/5.1英伟达焦散 解决不跟随透明度变化焦散亮度和半透明焦散亮度过亮的问题
英伟达最近魔改UE源码魔改出了一个焦散分支,效果很惊艳,只是很可惜,并没有将该功能插件化,需要编译一次源码,编译出来的引擎源码文件大概90个G,所以想要使用这个效果还是比较麻烦的,也希望官方能考虑加入正式版。
(隔壁Unity HDRP都开始自带太阳光光线追踪颜色阴影了,虽然没有焦散,但原生的UE到现在都没有光线追踪颜色阴影的相关信息,看来ue的原生光追已经不如Unity了。)

解决过亮问题
我们先确保自己的项目启动光线追踪半透明阴影!!这很重要!
我们在我们项目的config/DefaultEngine.ini文件里面
找到
[/Script/Engine.RendererSettings]
我们在
[/Script/Engine.RendererSettings]的下一行加入一行配置指令
r.RayTracing.Shadows.SupportTranslucency=True
即可解决过亮问题!
解决焦散亮度不根据透明度变化和颜色明度越低就越亮的问题
小编好不容易编译出了焦散分支,却发现不透明度为1焦散的亮度还是很亮,没有变暗,怎么办呢?

这是英伟达员工的一个很大的疏忽导致的,这时候我们需要修改引擎光线追踪的shader文件,我们只需要小小的修改。
引擎文件夹/Engine/Shaders/Private/RayTracing/RayTracingMaterialHitShaders.usf

找到
float3 filterClr = Emissive + BaseColor;
修改为
float3 filterClr = BaseColor;
我们不考虑自发光颜色作为焦散mesh反射颜色,所以删掉Emissive +
再找到以下两行
float filterAvgClr = max(filterClr.r, max(filterClr.g, filterClr.b));
filterClr = filterClr / filterAvgClr;
然后删除这两行
再找到
hitData.color=filterClr * hitData.color;
这行代码修改为
hitData.color*=filterClr * (1-pow(Opacity,2));
然后我们打开引擎等待着色编译完成后,发现已经解决问题了!


