#ifndef UNIVERSAL_LIT_INPUT_INCLUDED #define UNIVERSAL_LIT_INPUT_INCLUDED #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SurfaceInput.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DBuffer.hlsl" CBUFFER_START(UnityPerMaterial) float4 _BaseMap_ST; float4 _BumpMap_ST; float4 _MRAE_ST; half4 _BaseColor; half4 _SpecColor; half4 _EmissionColor; half4 _EmissionColorA; half4 _EmissionColorB; half _EmissionIntensity; half _Cutoff; half _Smoothness; half _MinSmoothness; half _MaxSmoothness; half _Metallic; half _BumpScale; half _OcclusionStrength; half _Surface; half _Cull; half _ReceiveShadows; half _QueueOffset; half _SpecularHighlights; half _EnvironmentReflections; CBUFFER_END TEXTURE2D(_MRAE); SAMPLER(sampler_MRAE); half4 SampleMRAE(float2 uv) { return SAMPLE_TEXTURE2D(_MRAE, sampler_MRAE, uv); } half4 SampleMetallicSpecGloss(float2 uv, half albedoAlpha) { half4 specGloss; half4 mrae = SampleMRAE(uv); #if _SPECULAR_SETUP specGloss.rgb = _SpecColor.rgb; #else specGloss.rgb = half3(mrae.r * _Metallic, 0.0h, 0.0h); #endif specGloss.a = saturate(lerp(_MinSmoothness, _MaxSmoothness, mrae.g)); return specGloss; } half SampleOcclusion(float2 uv) { half4 mrae = SampleMRAE(uv); return saturate(LerpWhiteTo(mrae.b, _OcclusionStrength)); } half3 SampleMRAEEmission(float2 uv) { half4 mrae = SampleMRAE(uv); _EmissionColor.rgb = lerp(_EmissionColorA.rgb, _EmissionColorB.rgb, mrae.a) * _EmissionIntensity; return _EmissionColor.rgb * mrae.a; } // 初始化标准PBR表面数据 void InitializeStandardLitSurfaceData(float2 uv, out SurfaceData outSurfaceData) { half4 albedoAlpha = SampleAlbedoAlpha(uv, TEXTURE2D_ARGS(_BaseMap, sampler_BaseMap)); outSurfaceData.alpha = Alpha(albedoAlpha.a, _BaseColor, _Cutoff); half4 specGloss = SampleMetallicSpecGloss(uv, albedoAlpha.a); outSurfaceData.albedo = albedoAlpha.rgb * _BaseColor.rgb; #if _SPECULAR_SETUP outSurfaceData.metallic = 1.0h; outSurfaceData.specular = specGloss.rgb; #else outSurfaceData.metallic = specGloss.r; outSurfaceData.specular = half3(0.0h, 0.0h, 0.0h); #endif outSurfaceData.smoothness = specGloss.a; outSurfaceData.normalTS = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale); outSurfaceData.occlusion = SampleOcclusion(uv); #if defined(_EMISSION) half4 mrae = SampleMRAE(uv); outSurfaceData.emission = lerp(_EmissionColorA.rgb, _EmissionColorB.rgb, mrae.a) * mrae.a * _EmissionIntensity; _EmissionColor.rgb = lerp(_EmissionColorA.rgb, _EmissionColorB.rgb, mrae.a) * _EmissionIntensity; #else outSurfaceData.emission = half3(0, 0, 0); #endif outSurfaceData.clearCoatMask = 0.0h; outSurfaceData.clearCoatSmoothness = 0.0h; } #endif // UNIVERSAL_LIT_INPUT_INCLUDED