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

内置渲染管线中的棋盘图案着色器示例

用棋盘图案渲染的类似猫的角色。
用棋盘图案渲染的类似猫的角色。

这是一个着色器在 GPU 上运行的程序。更多信息
请参阅术语表
根据纹理坐标输出棋盘图案meshUnity 的主要图形原语。网格体构成了 3D 世界的很大一部分。Unity 支持三角或四边形多边形网格。Nurbs、Nurms、Subdiv 曲面必须转换为多边形。更多信息
请参阅术语表
:

Shader "Unlit/Checkerboard"
{
    Properties
    {
        _Density ("Density", Range(2,50)) = 30
    }
    SubShader
    {
        Pass
        {
            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            float _Density;

            v2f vert (float4 pos : POSITION, float2 uv : TEXCOORD0)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(pos);
                o.uv = uv * _Density;
                return o;
            }
            
            fixed4 frag (v2f i) : SV_Target
            {
                float2 c = i.uv;
                c = floor(c) / 2;
                float checker = frac(c.x + c.y) * 2;
                return checker;
            }
            ENDHLSL
        }
    }
}

属性”块中的密度滑块控制棋盘格的密度。在顶点着色器 渲染模型时在 3D 模型的每个顶点上运行的程序。更多信息
请参阅术语表
,网格体UV乘以密度值,使其从0到1的范围到0的密度范围。假设密度设置为 30 - 这将使片段着色器的 i.uv 输入包含从零到 30 的浮点值,用于渲染网格的各个位置。

然后,片段着色器代码使用 HLSL 的内置 floor 函数仅获取输入坐标的整数部分,并将其除以 2。回想一下,输入坐标是从 0 到 30 之间的数字;这使得它们都被“量化”为 0、0.5、1、1.5、2、2.5 等值。这是在输入坐标的 x 和 y 分量上完成的。

接下来,我们将这些 x 和 y 坐标相加(每个坐标只有 0、0.5、1、1.5 等可能的值),并且仅使用另一个内置 HLSL 函数 frac 取小数部分。其结果只能是 0.0 或 0.5。然后,我们将其乘以 2 使其成为 0.0 或 1.0,并输出为颜色(这分别导致黑色或白色)。

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