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 positionHCS : 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 IN) {
Varyings OUT;
OUT.positionHCS=TransformObjectToHClip(IN.positionOS.xyz);
// TRANSFORM_TEX 宏执行平铺(tiling)和偏移(offset)
OUT.uv=TRANSFORM_TEX(IN.uv, _BaseMap);
return OUT;
}
half4 frag(Varyings IN): SV_Target {
// SAMPLE_TEXTURE2D 宏使用给定的采样器对纹理进行采样
half4 color=SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, IN.uv);
return color;
}
ENDHLSL
}
}
}