项目在开启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/>