ue4.26 forward translucency shadow

对于前向透明材质:

想找到其阴影代码。

首先由于是前向透明物体,所以肯定不是像不透明物体那样有screen space shadow mask图,而是在shader中计算前向光照时顺便计算阴影。所以只需找到相应shader文件。

为此用renderDoc截帧,但默认截帧只显示pass名,而不显示shader名,为了显示shader名,把r.Shaders.Optimize=0和r.Shaders.KeepDebugInfo=1两行注释(分号)去掉:

找到绘制前向透明物体的drawcall:

 在Pipline State标签页点View,跳转到Pixel Shader:

左边File List中Disassembly就是pixel shader的内容,其余是其代码来源文件。

比如Disassembly中的:

1
2
3
   /Engine/Private/Common.ush:85 - MainPS()
   const static  float  PI = 3.1415926535897932f;
0: mov r0.x, l(3.1416)

  意思是说:pixel shader的第0行汇编语句是:mov r0.x, l(3.1416),它是由/Engine/Private/Common.ush第85行,MainPS函数中的语句“const static float PI = 3.1415926535897932f”翻译而来。

如果想看紧凑的pixel shader代码,可以把汇编行及文件名行都删掉,在vs2022中可用正则表达式替换实现:

1
2
3
(以下正则表达式来自gpt)<br>以数字开头,开头允许有空格的行,正则表达式:   ^\s*\d.*\n
以 / 开头,开头允许有空格的行,正则表达式:   ^\s*/.*\n
空行,正则表达式:   ^\s*\n

  但Disassembly中的代码毕竟是展平后的,看不到各种函数名了。

更有用的信息是,由于File List中排在Disassembly下面的文件是BasePassPixelShader.usf,所以可知Pxiel Shader就是BasePassPixelShader.usf中的FPixelShaderInOut_MainPS。

于是就不难找到计算前向透明光照的位置为:

GetForwardDirectLightingSplit中通过ComputeDirectionalLightDynamicShadowing来计算阴影:

在ComputeDirectionalLightDynamicShadowing中可以看到有两种模式,带pcf和不带pcf:

 

posted on   wantnon  阅读(58)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示