我有一个自定义渲染器功能,可以创建普通纹理并使用它。 普通纹理可以是视图或世界空间。 如果我创建视图空间法线纹理并使用全屏着色器图的 uv 节点进行采样, 然后将法线变换到世界空间(通过
unity_CameraToWorld
或UNITY_MATRIX_I_V
),并与世界空间法线纹理进行比较,但它们是不同的(反之亦然)。
我使用旋转 x 30、y 45 的正交相机。这可能有关系吗?
添加细节:由着色器图中的法线节点创建的法线纹理,因此我可以创建世界或视图空间法线纹理。 在我的自定义渲染器功能中,使用此着色器图创建法线纹理并将此纹理设置为另一个全屏着色器图的属性。 在全屏着色器图中,正常生成了法线纹理,并对该纹理进行采样以获取 r、g、b 作为向量 3 ViewSpaceNormal。然后做
WorldSpaceNormal = mul((float3x3)unity_CameraToWorld, ViewSpaceNormal)
。我认为,UNITY_MATRIX_I_V 和 unity_CameraToWorld 矩阵似乎与全屏着色器图中世界矩阵的预期视图不同。
我期望采样并更改为世界法线的视图法线纹理与世界法线纹理相同。 如果您需要更多信息,请告诉我。
问题在于普通纹理的颜色格式。就我而言,将颜色格式更改为 ARGB Half/Float 后,效果很好。