Version: 6000.3
语言: 中文
内置渲染管线中的简单无光照着色器示例
内置渲染管线中的反射着色器示例

内置渲染管线中的网格法线着色器示例

用不同的颜色渲染的类似猫的角色,表示每个表面面向的方向。
用不同的颜色渲染的类似猫的角色,表示每个表面面向的方向。
Shader "Unlit/WorldSpaceNormals"
{
    // no Properties block this time!
    SubShader
    {
        Pass
        {
            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            // include file that contains UnityObjectToWorldNormal helper function
            #include "UnityCG.cginc"

            struct v2f {
                // we'll output world space normal as one of regular ("texcoord") interpolators
                half3 worldNormal : TEXCOORD0;
                float4 pos : SV_POSITION;
            };

            // vertex shader: takes object space normal as input too
            v2f vert (float4 vertex : POSITION, float3 normal : NORMAL)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(vertex);
                // UnityCG.cginc file contains function to transform
                // normal from object to world space, use that
                o.worldNormal = UnityObjectToWorldNormal(normal);
                return o;
            }
            
            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 c = 0;
                // normal is a 3D vector with xyz components; in -1..1
                // range. To display it as color, bring the range into 0..1
                // and put into red, green, blue components
                c.rgb = i.worldNormal*0.5+0.5;
                return c;
            }
            ENDHLSL
        }
    }
}

除了产生漂亮的颜色外,法线还用于各种图形效果——光照、反射、轮廓等。

着色器在 GPU 上运行的程序。更多信息
请参阅术语表
上面,我们开始使用 Unity 的内置着色器包含文件之一。 这里使用了 UnityCG.cginc,其中包含一个方便的函数 UnityObjectToWorldNormal。我们还使用了实用函数 UnityObjectToClipPos,它将顶点从对象空间转换为屏幕。这只是使代码更易于阅读,并且在某些情况下更有效。

我们已经看到,数据可以从顶点传递到所谓的“插值器”(或有时称为“可变器”)中的片段着色器中。在 HLSL 着色语言中,它们通常使用 TEXCOORDn 语义进行标记,并且每个语义最多可以是 4 分量向量 (有关详细信息) ,请参阅将顶点数据输入着色器页。

我们还学习了一种简单的技术,如何将归一化向量(在 –1.0 到 +1.0 范围内)可视化为颜色:只需将它们乘以一半并加一半即可。有关更多顶点数据可视化示例,请参阅可视化顶点数据

内置渲染管线中的简单无光照着色器示例
内置渲染管线中的反射着色器示例