源码 / shaders/Ch10/MinimalLitInput.glsl
shaders/Ch10/MinimalLitInput.glsl
#ifndef COOKBOOK_CH10_MINIMAL_LIT_INPUT_INCLUDED #define COOKBOOK_CH10_MINIMAL_LIT_INPUT_INCLUDED // “最小 Lit”的材质输入。(GLSL 版,对应 Ch10/MinimalLitInput.hlsl) // 三个 Pass(ForwardLit / ShadowCaster / DepthOnly)共用这一份, // 保证 UnityPerMaterial 布局完全一致 —— 这是 SRP Batcher 兼容的前提。 // HLSL 版 include 了 SurfaceInput.hlsl(声明 _BaseMap / _BumpMap / _EmissionMap 以及 SampleAlbedoAlpha、SampleNormal、Alpha); // GLSL 没有 TEXTURE2D_ARGS 这种“贴图 + 采样器”参数宏,下面直接写出这几个函数,采样固定的那张贴图。 uniform vec4 _BaseMap_ST; uniform vec4 _BaseColor; uniform vec4 _EmissionColor; uniform float _Cutoff; // ShadowCasterPass / DepthOnlyPass 在 _ALPHATEST_ON 时会用到 uniform float _Metallic; uniform float _Smoothness; uniform float _BumpScale; // ---- SurfaceInput.hlsl ---- uniform sampler2D _BaseMap; uniform sampler2D _BumpMap; uniform sampler2D _EmissionMap; vec4 SampleAlbedoAlpha(vec2 uv) { return texture(_BaseMap, uv); } float Alpha(float albedoAlpha, vec4 color, float cutoff) { float alpha = albedoAlpha * color.a; #ifdef _ALPHATEST_ON if (alpha - cutoff < 0.0) discard; #endif return alpha; } vec3 SampleNormal(vec2 uv, float scale) { #ifdef _NORMALMAP return UnpackNormalScale(texture(_BumpMap, uv), scale); #else return vec3(0.0, 0.0, 1.0); #endif } #endif