RVT使用WorldPosition在某些连线情况下,Derivative OP相关材质解析错误,导致地形效果异常

项目在开启Nanite,并走CS渲染BasePass的时候,某些连线翻译错误,导致RVT采样效果异常。

1)回退至PS渲染BasePass的管线,渲染效果正常。

尝试走PS管线渲染Nanite Base Pass,效果正常。开始怀疑Derivative OP。

2)Shader对比

发现在使用World Position采样RVT的时候,如果对World Position叠加采样某张贴图的UV扰动之后,shader会被翻译成“TextureLoadVirtualPageTable”、“VirtualTextureWorldToUV”等非Derivative版本。如果剔除掉World Position的扰动,Shader翻译为"TextureLoadVirtualPageTableGrad"、“VirtualTextureWorldToUVDeriv”,效果表现正常。但是,我们项目就是需要这个UV流动。

3)RVT错误。

错误效果时,RVT采样异常,表现为RVT溢出,RVT请求似乎非常随机,原本只有十几个Page的场景,直接飙到了一千多个page需求。所以RVT错误只是表象,本质还是上面的Shader翻译错误。

4)对比Shader以添加至附件

(错误效果)

[Image Removed]

(正确效果)

[Image Removed]

<br/>

重现步骤
RVT采用的时候,给WorldPosition一个采样贴图的扰动,就能复现

[Image Removed]这条提交的记录,提到RVT错误的采样Mip0,与我们的错误感觉相似。但是看这条提交,似乎没有log里说的代码。

找到了,漏掉了这个宏 [Image Removed]

感谢提供信息,我已经把情况反馈给开发的同学了。等他回复了,我再在这里回复。

Hi,

能否把Runtime Virtual Texture Sample节点的Mip Value Mode改成Derivatives (World Space),看看是否能满足需求。

稍等我试一下,回复你

这个试了,有效。

好的,可以先用这种方式来解决,相关信息我也反馈给开发的同学了,他后续可能会考虑如何修复默认的情况。