采样视图空间法线纹理转世界空间与直接世界空间法线纹理存在差异的问题
视图空间法线纹理转世界空间与直接生成结果不符的问题
我做了一个自定义渲染器特性,用来生成和使用支持视图空间或世界空间格式的法线纹理。但遇到了问题:把生成的视图空间法线纹理在全屏Shader Graph里用UV节点采样后,通过unity_CameraToWorld或者UNITY_MATRIX_I_V转换到世界空间,得到的结果和直接生成的世界空间法线纹理不一样,反向转换也存在同样的问题。
我当前用的是X轴旋转30°、Y轴旋转45°的正交相机,会不会是相机的设置导致了这个问题?
效果对比
视图空间法线纹理转世界空间效果

世界空间法线纹理效果

补充细节
- 法线纹理由Shader Graph里的法线节点生成,可以选择生成世界空间或视图空间版本
- 在自定义渲染器特性中,我用这个Shader Graph生成法线纹理,再把它赋值给另一个全屏Shader Graph的属性
- 在目标全屏Shader Graph里,采样法线纹理得到的RGB值被当作vector3类型的
ViewSpaceNormal,然后执行转换:WorldSpaceNormal = mul((float3x3)unity_CameraToWorld, ViewSpaceNormal) - 我怀疑在全屏Shader Graph中,
UNITY_MATRIX_I_V和unity_CameraToWorld这两个矩阵并不是预期的视图转世界空间的矩阵
我的预期是:采样视图空间法线纹理并转换到世界空间后,结果应该和直接生成的世界空间法线纹理完全一致。如果需要更多信息可以告诉我。
内容的提问来源于stack exchange,提问作者yong
相关产品推荐
相关产品推荐

