版本:Unity 6 (6000.0)
语言:英语
内置渲染管线中的雾着色器示例
着色器故障排除

在内置渲染管线中可视化顶点数据着色器示例

这些针对内置渲染管线一系列操作,将场景内容显示在屏幕上。Unity 允许您从预构建的渲染管线中选择,或编写自己的渲染管线。 更多信息
参见 术语表
的示例着色器在 GPU 上运行的程序。 更多信息
参见 术语表
演示了可视化顶点数据的不同方法。

有关编写着色器的信息,请参见 编写着色器

可视化 UV

以下示例着色器可视化了网格Unity 的主要图形基元。网格构成了 3D 世界的很大一部分。Unity 支持三角形或四边形多边形网格。Nurbs、Nurms、细分曲面必须转换为多边形。 更多信息
参见 术语表
的第一组 UV。此着色器对调试坐标非常有用。

代码定义了一个名为 appdata 的结构作为其顶点着色器在渲染 3D 模型时在模型的每个顶点上运行的程序。 更多信息
参见 术语表
输入。此结构以顶点位置和第一个纹理坐标作为输入。

Shader "Debug/UV 1" {
SubShader {
    Pass {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
            #include "UnityCG.cginc"

        // vertex input: position, UV
        struct appdata {
            float4 vertex : POSITION;
            float4 texcoord : TEXCOORD0;
        };

        struct v2f {
            float4 pos : SV_POSITION;
            float4 uv : TEXCOORD0;
        };
        
        v2f vert (appdata v) {
            v2f o;
            o.pos = UnityObjectToClipPos(v.vertex);
            o.uv = float4( v.texcoord.xy, 0, 0 );
            return o;
        }
        
        half4 frag( v2f i ) : SV_Target {
            half4 c = frac( i.uv );
            if (any(saturate(i.uv) - i.uv))
                c.b = 0.5;
            return c;
        }
        ENDCG
    }
}
}

在这里,UV 坐标被可视化为红色和绿色,同时对 0 到 1 范围之外的坐标应用了额外的蓝色色调。

Debug UV1 shader applied to a torus knot model
应用于环面结模型的 Debug UV1 着色器

此着色器的变体可视化了第二组 UV。

Shader "Debug/UV 2" {
SubShader {
    Pass {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
            #include "UnityCG.cginc"

        // vertex input: position, second UV
        struct appdata {
            float4 vertex : POSITION;
            float4 texcoord1 : TEXCOORD1;
        };

        struct v2f {
            float4 pos : SV_POSITION;
            float4 uv : TEXCOORD0;
        };
        
        v2f vert (appdata v) {
            v2f o;
            o.pos = UnityObjectToClipPos(v.vertex );
            o.uv = float4( v.texcoord1.xy, 0, 0 );
            return o;
        }
        
        half4 frag( v2f i ) : SV_Target {
            half4 c = frac( i.uv );
            if (any(saturate(i.uv) - i.uv))
                c.b = 0.5;
            return c;
        }
        ENDCG
    }
}
}

可视化顶点颜色

以下着色器使用顶点位置和每个顶点颜色作为顶点着色器输入(定义在结构 appdata 中)。

Shader "Debug/Vertex color" {
SubShader {
    Pass {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #include "UnityCG.cginc"

        // vertex input: position, color
        struct appdata {
            float4 vertex : POSITION;
            fixed4 color : COLOR;
        };

        struct v2f {
            float4 pos : SV_POSITION;
            fixed4 color : COLOR;
        };
        
        v2f vert (appdata v) {
            v2f o;
            o.pos = UnityObjectToClipPos(v.vertex );
            o.color = v.color;
            return o;
        }
        
        fixed4 frag (v2f i) : SV_Target { return i.color; }
        ENDCG
    }
}
}
Debug Colors shader applied to a torus knot model that has illumination baked into colors
应用于将照明烘焙到颜色的环面结模型的 Debug Colors 着色器

可视化法线

以下着色器使用顶点位置和法线作为顶点着色器输入(定义在结构 appdata 中)。法线的 X、Y 和 Z 分量被可视化为 RGB 颜色。由于法线分量在 –1 到 1 范围内,因此我们将它们缩放和偏差,以便输出颜色在可显示的 0 到 1 范围内。

Shader "Debug/Normals" {
SubShader {
    Pass {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #include "UnityCG.cginc"

        // vertex input: position, normal
        struct appdata {
            float4 vertex : POSITION;
            float3 normal : NORMAL;
        };

        struct v2f {
            float4 pos : SV_POSITION;
            fixed4 color : COLOR;
        };
        
        v2f vert (appdata v) {
            v2f o;
            o.pos = UnityObjectToClipPos(v.vertex );
            o.color.xyz = v.normal * 0.5 + 0.5;
            o.color.w = 1.0;
            return o;
        }
        
        fixed4 frag (v2f i) : SV_Target { return i.color; }
        ENDCG
    }
}
}
Debug Normals shader applied to a torus knot model. You can see that the model has hard shading edges.
应用于环面结模型的 Debug Normals 着色器。您可以看到模型具有硬阴影边。

可视化切线和副法线

切线和副法线向量用于法线贴图。在 Unity 中,只有切线向量存储在顶点中,副法线从法线和切线值派生而来。

以下着色器使用顶点位置和切线作为顶点着色器输入(定义在结构 appdata 中)。切线的 x、y 和 z 分量被可视化为 RGB 颜色。由于法线分量在 –1 到 1 范围内,因此我们将它们缩放和偏差,以便输出颜色在可显示的 0 到 1 范围内。

Shader "Debug/Tangents" {
SubShader {
    Pass {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #include "UnityCG.cginc"

        // vertex input: position, tangent
        struct appdata {
            float4 vertex : POSITION;
            float4 tangent : TANGENT;
        };

        struct v2f {
            float4 pos : SV_POSITION;
            fixed4 color : COLOR;
        };
        
        v2f vert (appdata v) {
            v2f o;
            o.pos = UnityObjectToClipPos(v.vertex );
            o.color = v.tangent * 0.5 + 0.5;
            return o;
        }
        
        fixed4 frag (v2f i) : SV_Target { return i.color; }
        ENDCG
    }
}
}
Debug Tangents shader applied to a torus knot model.
应用于环面结模型的 Debug Tangents 着色器。

以下着色器可视化副切线。它使用顶点位置、法线和切线值作为顶点输入。副切线(有时称为副法线)是从法线和切线值计算得出的。它需要被缩放和偏差到可显示的 0 到 1 范围内。

Shader "Debug/Bitangents" {
SubShader {
    Pass {
        Fog { Mode Off }
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #include "UnityCG.cginc"

        // vertex input: position, normal, tangent
        struct appdata {
            float4 vertex : POSITION;
            float3 normal : NORMAL;
            float4 tangent : TANGENT;
        };

        struct v2f {
            float4 pos : SV_POSITION;
            float4 color : COLOR;
        };
        
        v2f vert (appdata v) {
            v2f o;
            o.pos = UnityObjectToClipPos(v.vertex );
            // calculate bitangent
            float3 bitangent = cross( v.normal, v.tangent.xyz ) * v.tangent.w;
            o.color.xyz = bitangent * 0.5 + 0.5;
            o.color.w = 1.0;
            return o;
        }
        
        fixed4 frag (v2f i) : SV_Target { return i.color; }
        ENDCG
    }
}
}
Debug Bitangents shader applied to a torus knot model.
应用于环面结模型的 Debug Bitangents 着色器。
内置渲染管线中的雾着色器示例
着色器故障排除