unreal5.6移动端substrate材质pix截帧debug pixel shader很卡问题

复现方式:

使用官方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/>

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]

好的,关于调试性能,我回头在找人问一下,不过总部同学马上放假了,估计不会很快有回复。

关于SubstrateMaterialExportOut,看起来是特意简化做的,只输出一个BSDF,所以没法兼顾SSS和Eye。