复现方式:
使用官方unreal5.6,并开启substrate材质系统,切换到延时mobile preview渲染模式。
并在ConsoleVariable.ini中开启shader debug。
创建一个基础的substrate材质并使用PIX截取一帧,调试basepass的pixel sahder,会非常卡,步进一行需要等几十秒钟。
使用renderdoc截帧debug虽然不会卡,但是有些数据显示不对。
以及本地也做过一些测试,在注释掉一些substrate代码之后使用pix调试速度有一定的提升。
一些疑问:
1.这是否因为substrate过于复杂,比如构建substrate tree以及slab的blend operator之类的?
2.但考虑到之前使用pix截PC的substrate材质并不卡,是否也因为mobile preview使用FXC编译而shading model 6 之后使用DXC编译,也有编译系统的原因?
3.以及对于移动端substrate很多计算根本没必要,这一块是否未来有计划进行优化,弄一个简化版的substrate材质系统给移动端?
<br/>
Liu.Wei
(Liu.Wei)
2
Hi,
我测试了一下,好像的确有这个问题,如果不用源码Debug,就很快,用源码debug,每走一步就会analysis很久,PC上的确不会这样。我觉得跟shader复杂度没什么关系。SM6的pdb都有一个DXIL文件,我怀疑跟这个有关系。我后续会试一下SM5的情况,我感觉应该跟mobile差不多。
substrate接下来会尽量保证性能没有regression,并在5.7作为production ready,如果你发现那里有误,可以明确指出,我可以反馈给开发的同学看一下。
好的,非常感谢!
我这边本地也做了一些测试:优化pix截帧debug的效率
1.比如在MobileBasePassPixelShader.usf的这块,把相关代码注释掉转而使用MaterialParameters内的数据则会快很多
[Image Removed]2.以及对于这个文件SubstrateExport.ush中的这个SubstrateMaterialExportOut函数,我认为有些逻辑不太正确
这里将BSDFType和SSSType放在一起进行选择,这就会导致只要我用了SSS,其他的就走不到,比如eye的slab。
[Image Removed]
Liu.Wei
(Liu.Wei)
4
好的,关于调试性能,我回头在找人问一下,不过总部同学马上放假了,估计不会很快有回复。
关于SubstrateMaterialExportOut,看起来是特意简化做的,只输出一个BSDF,所以没法兼顾SSS和Eye。