欢迎光临散文网 会员登陆 & 注册

UE4/5.1英伟达焦散 解决不跟随透明度变化焦散亮度和半透明焦散亮度过亮的问题

2021-10-27 17:21 作者:_24kDespair  | 我要投稿

英伟达最近魔改UE源码魔改出了一个焦散分支,效果很惊艳,只是很可惜,并没有将该功能插件化,需要编译一次源码,编译出来的引擎源码文件大概90个G,所以想要使用这个效果还是比较麻烦的,也希望官方能考虑加入正式版。

(隔壁Unity HDRP都开始自带太阳光光线追踪颜色阴影了,虽然没有焦散,但原生的UE到现在都没有光线追踪颜色阴影的相关信息,看来ue的原生光追已经不如Unity了。)

解决过亮问题

我们先确保自己的项目启动光线追踪半透明阴影!!这很重要!

我们在我们项目的config/DefaultEngine.ini文件里面

找到


[/Script/Engine.RendererSettings]


我们在

[/Script/Engine.RendererSettings]的下一行加入一行配置指令

r.RayTracing.Shadows.SupportTranslucency=True

即可解决过亮问题!


解决焦散亮度不根据透明度变化和颜色明度越低就越亮的问题

小编好不容易编译出了焦散分支,却发现不透明度为1焦散的亮度还是很亮,没有变暗,怎么办呢?

黄色部分的不透明度为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));


然后我们打开引擎等待着色编译完成后,发现已经解决问题了!

不透明度0.1
不透明度0.5
不透明度0.9


UE4/5.1英伟达焦散 解决不跟随透明度变化焦散亮度和半透明焦散亮度过亮的问题的评论 (共 条)

分享到微博请遵守国家法律