kingBook

导航

URP 编写自定义 Shader (3) 绘制纹理

https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@7.7/manual/writing-shaders-urp-unlit-texture.html

Shader "Example/URPUnlitShaderTexture" {
    Properties {
        _BaseMap("Base Map", 2D)="white"
    }

    SubShader {
        Tags { "RenderType"="Opaque" "RenderPipeline"="UniversalPipeline" }

        Pass {
            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

            struct Attributes {
                float4 positionOS   : POSITION;
                // uv 变量包含给定顶点纹理上的 uv 坐标
                float2 uv           : TEXCOORD0;
            };

            struct Varyings {
                float4 positionCS  : SV_POSITION;
                float2 uv           : TEXCOORD0;
            };

            // 此宏将 _BaseMap 声明为 Texture2D 对象
            TEXTURE2D(_BaseMap);
            // 此宏为 _BaseMap 纹理声明采样器
            SAMPLER(sampler_BaseMap);

            CBUFFER_START(UnityPerMaterial)
                // 下一行声明了 _BaseMap_ST 变量,以便可以在片段着色器中使用 _BaseMap 变量。_ST 后缀是平铺(tiling)和偏移(offset)功能工作所必需的
                float4 _BaseMap_ST;
            CBUFFER_END

            Varyings vert(Attributes input) {
                Varyings output;
                output.positionCS=TransformObjectToHClip(input.positionOS.xyz);
                // TRANSFORM_TEX 宏执行平铺(tiling)和偏移(offset)
                output.uv=TRANSFORM_TEX(input.uv, _BaseMap);
                return output;
            }

            half4 frag(Varyings input): SV_Target {
                // SAMPLE_TEXTURE2D 宏使用给定的采样器对纹理进行采样
                half4 output=SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, input.uv);
                return output;
            }
            ENDHLSL
        }
    }
}

posted on 2022-02-14 22:36  kingBook  阅读(284)  评论(0编辑  收藏  举报