文章目录
- 前言
- 一、计算BulinnPhone的函数有两个重载
- 1、 目前最新使用的是该方法(这是我们之后主要分析的函数)
- 2、 被淘汰的老方法,需要传入一堆数据
- 二、GetMainLight
- 1、Light结构体
- 2、GetMainLight具有4个方法重载
- 3、1号重载干了什么(该函数就是获取我们主光信息的函数)
- 三、测试代码
前言
在上一篇文章中,我们大概了解了SampleLit下的片元着色器主要干了什么。
- Unity中URP下的SimpleLit片元着色器
我们在这篇文章中,来看一下计算BlinnPhone光照时,怎么获取主光的信息。
一、计算BulinnPhone的函数有两个重载
1、 目前最新使用的是该方法(这是我们之后主要分析的函数)
/// Phong lighting...half4 UniversalFragmentBlinnPhong(InputData inputData, SurfaceData surfaceData)
{#if defined(DEBUG_DISPLAY)half4 debugColor;if (CanDebugOverrideOutputColor(inputData, surfaceData, debugColor)){return debugColor;}#endifuint meshRenderingLayers = GetMeshRenderingLayer();half4 shadowMask = CalculateShadowMask(inputData);AmbientOcclusionFactor aoFactor = CreateAmbientOcclusionFactor(inputData, surfaceData);Light mainLight = GetMainLight(inputData, shadowMask, aoFactor);MixRealtimeAndBakedGI(mainLight, inputData.normalWS, inputData.bakedGI, aoFactor);inputData.bakedGI *= surfaceData.albedo;LightingData lightingData = CreateLightingData(inputData, surfaceData);
#ifdef _LIGHT_LAYERSif (IsMatchingLightLayer(mainLight.layerMask, meshRenderingLayers))
#endif{lightingData.mainLightColor += CalculateBlinnPhong(mainLight, inputData, surfaceData);}#if defined(_ADDITIONAL_LIGHTS)uint pixelLightCount = GetAdditionalLightsCount();#if USE_FORWARD_PLUSfor (uint lightIndex = 0; lightIndex < min(URP_FP_DIRECTIONAL_LIGHTS_COUNT, MAX_VISIBLE_LIGHTS); lightIndex++){FORWARD_PLUS_SUBTRACTIVE_LIGHT_CHECKLight light = GetAdditionalLight(lightIndex, inputData, shadowMask, aoFactor);
#ifdef _LIGHT_LAYERSif (IsMatchingLightLayer(light.layerMask, meshRenderingLayers))
#endif{lightingData.additionalLightsColor += CalculateBlinnPhong(light, inputData, surfaceData);}}#endifLIGHT_LOOP_BEGIN(pixelLightCount)Light light = GetAdditionalLight(lightIndex, inputData, shadowMask, aoFactor);
#ifdef _LIGHT_LAYERSif (IsMatchingLightLayer(light.layerMask, meshRenderingLayers))
#endif{lightingData.additionalLightsColor += CalculateBlinnPhong(light, inputData, surfaceData);}LIGHT_LOOP_END#endif#if defined(_ADDITIONAL_LIGHTS_VERTEX)lightingData.vertexLightingColor += inputData.vertexLighting * surfaceData.albedo;#endifreturn CalculateFinalColor(lightingData, surfaceData.alpha);
}
2、 被淘汰的老方法,需要传入一堆数据
二、GetMainLight
- 在 UniversalFragmentBlinnPhong 函数中,一开始就获取了主光的信息,这也是我们这篇文章中,主要分析的,怎么获取主光信息
1、Light结构体
其中最主要的就是:
- direction:主光线方向
- color:主光线颜色
2、GetMainLight具有4个方法重载
-
这里我们为了方便分析,分别叫他们 1号、2号、3号、4号重载
-
带参数的方法重载额外实现了 阴影衰减
-
不带参数的方法重载 主要实现了主光信息的获取
-
BulinnPhone光照计算,调用的是4号重载
-
我们按调用顺序依次展开分析
-
4号重载 调用了3号重载
-
3号重载 调用了 1号重载
-
2号 重载也调用了 1号重载(但是,我们这里没有使用到,不做分析)
-
1号重载(该函数就是获取我们主光信息的函数)
3、1号重载干了什么(该函数就是获取我们主光信息的函数)
- _MainLightPosition 获取主光线方向
light.direction = half3(_MainLightPosition.xyz);
我们输出看看效果:
- _MainLightColor 获取主光颜色
light.color = _MainLightColor.rgb;
我们输出看看效果:
- unity_LightData.z 获取光照距离衰减值
- 因为,主光线是平行灯。所以,没有距离远近的说法,这里值只有 1 和 0
// unity_LightData.z is 1 when not culled by the culling mask, otherwise 0.
//距离衰减,接收光照时为 1。剔除接收光照为 0
light.distanceAttenuation = unity_LightData.z;
- 阴影衰减预先赋值为 1,后面再做处理
light.shadowAttenuation = 1.0;
三、测试代码
// Shader targeted for low end devices. Single Pass Forward Rendering.
Shader "MyShader/URP/P4_7_3"
{// Keep properties of StandardSpecular shader for upgrade reasons.Properties{[MainTexture] _BaseMap("Base Map (RGB) Smoothness / Alpha (A)", 2D) = "white" {}[MainColor] _BaseColor("Base Color", Color) = (1, 1, 1, 1)_Cutoff("Alpha Clipping", Range(0.0, 1.0)) = 0.5_Smoothness("Smoothness", Range(0.0, 1.0)) = 0.5_SpecColor("Specular Color", Color) = (0.5, 0.5, 0.5, 0.5)_SpecGlossMap("Specular Map", 2D) = "white" {}_SmoothnessSource("Smoothness Source", Float) = 0.0_SpecularHighlights("Specular Highlights", Float) = 1.0[HideInInspector] _BumpScale("Scale", Float) = 1.0[NoScaleOffset] _BumpMap("Normal Map", 2D) = "bump" {}[HDR] _EmissionColor("Emission Color", Color) = (0,0,0)[NoScaleOffset]_EmissionMap("Emission Map", 2D) = "white" {}// Blending state_Surface("__surface", Float) = 0.0_Blend("__blend", Float) = 0.0_Cull("__cull", Float) = 2.0[ToggleUI] _AlphaClip("__clip", Float) = 0.0[HideInInspector] _SrcBlend("__src", Float) = 1.0[HideInInspector] _DstBlend("__dst", Float) = 0.0[HideInInspector] _SrcBlendAlpha("__srcA", Float) = 1.0[HideInInspector] _DstBlendAlpha("__dstA", Float) = 0.0[HideInInspector] _ZWrite("__zw", Float) = 1.0[HideInInspector] _BlendModePreserveSpecular("_BlendModePreserveSpecular", Float) = 1.0[HideInInspector] _AlphaToMask("__alphaToMask", Float) = 0.0[ToggleUI] _ReceiveShadows("Receive Shadows", Float) = 1.0// Editmode props_QueueOffset("Queue offset", Float) = 0.0// ObsoleteProperties[HideInInspector] _MainTex("BaseMap", 2D) = "white" {}[HideInInspector] _Color("Base Color", Color) = (1, 1, 1, 1)[HideInInspector] _Shininess("Smoothness", Float) = 0.0[HideInInspector] _GlossinessSource("GlossinessSource", Float) = 0.0[HideInInspector] _SpecSource("SpecularHighlights", Float) = 0.0[HideInInspector][NoScaleOffset]unity_Lightmaps("unity_Lightmaps", 2DArray) = "" {}[HideInInspector][NoScaleOffset]unity_LightmapsInd("unity_LightmapsInd", 2DArray) = "" {}[HideInInspector][NoScaleOffset]unity_ShadowMasks("unity_ShadowMasks", 2DArray) = "" {}}SubShader{Tags{"RenderType" = "Opaque""RenderPipeline" = "UniversalPipeline""UniversalMaterialType" = "SimpleLit""IgnoreProjector" = "True"}LOD 300//ForwardLitPass{Name "ForwardLit"Tags{"LightMode" = "UniversalForward"}// -------------------------------------// Render State Commands// Use same blending / depth states as Standard shaderBlend[_SrcBlend][_DstBlend], [_SrcBlendAlpha][_DstBlendAlpha]ZWrite[_ZWrite]Cull[_Cull]AlphaToMask[_AlphaToMask]HLSLPROGRAM#pragma target 2.0// -------------------------------------// Shader Stages#pragma vertex LitPassVertexSimple#pragma fragment LitPassFragmentSimple// -------------------------------------// Material Keywords#pragma shader_feature_local _NORMALMAP#pragma shader_feature_local_fragment _EMISSION#pragma shader_feature_local _RECEIVE_SHADOWS_OFF#pragma shader_feature_local_fragment _SURFACE_TYPE_TRANSPARENT#pragma shader_feature_local_fragment _ALPHATEST_ON#pragma shader_feature_local_fragment _ _ALPHAPREMULTIPLY_ON _ALPHAMODULATE_ON#pragma shader_feature_local_fragment _ _SPECGLOSSMAP _SPECULAR_COLOR#pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA// -------------------------------------// Universal Pipeline keywords#pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN#pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS#pragma multi_compile _ EVALUATE_SH_MIXED EVALUATE_SH_VERTEX#pragma multi_compile _ LIGHTMAP_SHADOW_MIXING#pragma multi_compile _ SHADOWS_SHADOWMASK#pragma multi_compile _ _LIGHT_LAYERS#pragma multi_compile _ _FORWARD_PLUS#pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS#pragma multi_compile_fragment _ _SHADOWS_SOFT#pragma multi_compile_fragment _ _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH#pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION#pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3#pragma multi_compile_fragment _ _LIGHT_COOKIES#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl"// -------------------------------------// Unity defined keywords#pragma multi_compile _ DIRLIGHTMAP_COMBINED#pragma multi_compile _ LIGHTMAP_ON#pragma multi_compile _ DYNAMICLIGHTMAP_ON#pragma multi_compile_fog#pragma multi_compile_fragment _ DEBUG_DISPLAY#pragma multi_compile_fragment _ LOD_FADE_CROSSFADE//--------------------------------------// GPU Instancing#pragma multi_compile_instancing#pragma instancing_options renderinglayer#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl"//--------------------------------------// Defines#define BUMP_SCALE_NOT_SUPPORTED 1// -------------------------------------// Includes#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SurfaceInput.hlsl"CBUFFER_START(UnityPerMaterial)float4 _BaseMap_ST;half4 _BaseColor;half4 _SpecColor;half4 _EmissionColor;half _Cutoff;half _Surface;CBUFFER_END#ifdef UNITY_DOTS_INSTANCING_ENABLEDUNITY_DOTS_INSTANCING_START(MaterialPropertyMetadata)UNITY_DOTS_INSTANCED_PROP(float4, _BaseColor)UNITY_DOTS_INSTANCED_PROP(float4, _SpecColor)UNITY_DOTS_INSTANCED_PROP(float4, _EmissionColor)UNITY_DOTS_INSTANCED_PROP(float , _Cutoff)UNITY_DOTS_INSTANCED_PROP(float , _Surface)UNITY_DOTS_INSTANCING_END(MaterialPropertyMetadata)static float4 unity_DOTS_Sampled_BaseColor;static float4 unity_DOTS_Sampled_SpecColor;static float4 unity_DOTS_Sampled_EmissionColor;static float unity_DOTS_Sampled_Cutoff;static float unity_DOTS_Sampled_Surface;void SetupDOTSSimpleLitMaterialPropertyCaches(){unity_DOTS_Sampled_BaseColor = UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(float4 , _BaseColor);unity_DOTS_Sampled_SpecColor = UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(float4 , _SpecColor);unity_DOTS_Sampled_EmissionColor = UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(float4 , _EmissionColor);unity_DOTS_Sampled_Cutoff = UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(float , _Cutoff);unity_DOTS_Sampled_Surface = UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(float , _Surface);}#undef UNITY_SETUP_DOTS_MATERIAL_PROPERTY_CACHES#define UNITY_SETUP_DOTS_MATERIAL_PROPERTY_CACHES() SetupDOTSSimpleLitMaterialPropertyCaches()#define _BaseColor unity_DOTS_Sampled_BaseColor#define _SpecColor unity_DOTS_Sampled_SpecColor#define _EmissionColor unity_DOTS_Sampled_EmissionColor#define _Cutoff unity_DOTS_Sampled_Cutoff#define _Surface unity_DOTS_Sampled_Surface#endifTEXTURE2D(_SpecGlossMap);SAMPLER(sampler_SpecGlossMap);half4 SampleSpecularSmoothness(float2 uv, half alpha, half4 specColor,TEXTURE2D_PARAM(specMap, sampler_specMap)){half4 specularSmoothness = half4(0, 0, 0, 1);#ifdef _SPECGLOSSMAPspecularSmoothness = SAMPLE_TEXTURE2D(specMap, sampler_specMap, uv) * specColor;#elif defined(_SPECULAR_COLOR)specularSmoothness = specColor;#endif#ifdef _GLOSSINESS_FROM_BASE_ALPHAspecularSmoothness.a = alpha;#endifreturn specularSmoothness;}inline void InitializeSimpleLitSurfaceData(float2 uv, out SurfaceData outSurfaceData){outSurfaceData = (SurfaceData)0;half4 albedoAlpha = SampleAlbedoAlpha(uv, TEXTURE2D_ARGS(_BaseMap, sampler_BaseMap));outSurfaceData.alpha = albedoAlpha.a * _BaseColor.a;outSurfaceData.alpha = AlphaDiscard(outSurfaceData.alpha, _Cutoff);outSurfaceData.albedo = albedoAlpha.rgb * _BaseColor.rgb;outSurfaceData.albedo = AlphaModulate(outSurfaceData.albedo, outSurfaceData.alpha);half4 specularSmoothness = SampleSpecularSmoothness(uv, outSurfaceData.alpha, _SpecColor,TEXTURE2D_ARGS(_SpecGlossMap, sampler_SpecGlossMap));outSurfaceData.metallic = 0.0; // unusedoutSurfaceData.specular = specularSmoothness.rgb;outSurfaceData.smoothness = specularSmoothness.a;outSurfaceData.normalTS = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap));outSurfaceData.occlusion = 1.0;outSurfaceData.emission = SampleEmission(uv, _EmissionColor.rgb,TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));}#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"#if defined(LOD_FADE_CROSSFADE)#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/LODCrossFade.hlsl"#endifstruct Attributes{float4 positionOS : POSITION;float3 normalOS : NORMAL;float4 tangentOS : TANGENT;float2 texcoord : TEXCOORD0;float2 staticLightmapUV : TEXCOORD1;float2 dynamicLightmapUV : TEXCOORD2;UNITY_VERTEX_INPUT_INSTANCE_ID};struct Varyings{float2 uv : TEXCOORD0;float3 positionWS : TEXCOORD1; // xyz: posWS#ifdef _NORMALMAPhalf4 normalWS : TEXCOORD2; // xyz: normal, w: viewDir.xhalf4 tangentWS : TEXCOORD3; // xyz: tangent, w: viewDir.yhalf4 bitangentWS : TEXCOORD4; // xyz: bitangent, w: viewDir.z#elsehalf3 normalWS : TEXCOORD2;#endif#ifdef _ADDITIONAL_LIGHTS_VERTEXhalf4 fogFactorAndVertexLight : TEXCOORD5; // x: fogFactor, yzw: vertex light#elsehalf fogFactor : TEXCOORD5;#endif#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)float4 shadowCoord : TEXCOORD6;#endifDECLARE_LIGHTMAP_OR_SH(staticLightmapUV, vertexSH, 7);#ifdef DYNAMICLIGHTMAP_ONfloat2 dynamicLightmapUV : TEXCOORD8; // Dynamic lightmap UVs#endiffloat4 positionCS : SV_POSITION;UNITY_VERTEX_INPUT_INSTANCE_IDUNITY_VERTEX_OUTPUT_STEREO};void InitializeInputData(Varyings input, half3 normalTS, out InputData inputData){inputData = (InputData)0;inputData.positionWS = input.positionWS;#ifdef _NORMALMAPhalf3 viewDirWS = half3(input.normalWS.w, input.tangentWS.w, input.bitangentWS.w);inputData.tangentToWorld = half3x3(input.tangentWS.xyz, input.bitangentWS.xyz, input.normalWS.xyz);inputData.normalWS = TransformTangentToWorld(normalTS, inputData.tangentToWorld);#elsehalf3 viewDirWS = GetWorldSpaceNormalizeViewDir(inputData.positionWS);inputData.normalWS = input.normalWS;#endifinputData.normalWS = NormalizeNormalPerPixel(inputData.normalWS);viewDirWS = SafeNormalize(viewDirWS);inputData.viewDirectionWS = viewDirWS;#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)inputData.shadowCoord = input.shadowCoord;#elif defined(MAIN_LIGHT_CALCULATE_SHADOWS)inputData.shadowCoord = TransformWorldToShadowCoord(inputData.positionWS);#elseinputData.shadowCoord = float4(0, 0, 0, 0);#endif#ifdef _ADDITIONAL_LIGHTS_VERTEXinputData.fogCoord = InitializeInputDataFog(float4(inputData.positionWS, 1.0), input.fogFactorAndVertexLight.x);inputData.vertexLighting = input.fogFactorAndVertexLight.yzw;#elseinputData.fogCoord = InitializeInputDataFog(float4(inputData.positionWS, 1.0), input.fogFactor);inputData.vertexLighting = half3(0, 0, 0);#endif#if defined(DYNAMICLIGHTMAP_ON)inputData.bakedGI = SAMPLE_GI(input.staticLightmapUV, input.dynamicLightmapUV, input.vertexSH, inputData.normalWS);#elseinputData.bakedGI = SAMPLE_GI(input.staticLightmapUV, input.vertexSH, inputData.normalWS);#endifinputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(input.positionCS);inputData.shadowMask = SAMPLE_SHADOWMASK(input.staticLightmapUV);#if defined(DEBUG_DISPLAY)#if defined(DYNAMICLIGHTMAP_ON)inputData.dynamicLightmapUV = input.dynamicLightmapUV.xy;#endif#if defined(LIGHTMAP_ON)inputData.staticLightmapUV = input.staticLightmapUV;#elseinputData.vertexSH = input.vertexSH;#endif#endif}///// Light Abstraction /////Light GetMainLight1(){Light light;//通过内置参数获取主光线方向light.direction = half3(_MainLightPosition.xyz);#if USE_FORWARD_PLUS#if defined(LIGHTMAP_ON) && defined(LIGHTMAP_SHADOW_MIXING)light.distanceAttenuation = _MainLightColor.a;#elselight.distanceAttenuation = 1.0;#endif#else// unity_LightData.z is 1 when not culled by the culling mask, otherwise 0.//距离衰减,接收光照时为 1。反之,为0light.distanceAttenuation = unity_LightData.z;#endiflight.shadowAttenuation = 1.0;//通过内置参数获取主光线颜色light.color = _MainLightColor.rgb;light.layerMask = _MainLightLayerMask;return light;}Light GetMainLight1(float4 shadowCoord, float3 positionWS, half4 shadowMask){Light light = GetMainLight1();light.shadowAttenuation = MainLightShadow(shadowCoord, positionWS, shadowMask,_MainLightOcclusionProbes);#if defined(_LIGHT_COOKIES)real3 cookieColor = SampleMainLightCookie(positionWS);light.color *= cookieColor;#endifreturn light;}Light GetMainLight1(InputData inputData, half4 shadowMask, AmbientOcclusionFactor aoFactor){Light light = GetMainLight1(inputData.shadowCoord, inputData.positionWS, shadowMask);#if defined(_SCREEN_SPACE_OCCLUSION) && !defined(_SURFACE_TYPE_TRANSPARENT)if (IsLightingFeatureEnabled(DEBUGLIGHTINGFEATUREFLAGS_AMBIENT_OCCLUSION)){light.color *= aoFactor.directAmbientOcclusion;}#endifreturn light;}/// Phong lighting...half4 UniversalFragmentBlinnPhong1(InputData inputData, SurfaceData surfaceData){#if defined(DEBUG_DISPLAY)half4 debugColor;if (CanDebugOverrideOutputColor(inputData, surfaceData, debugColor)){return debugColor;}#endifuint meshRenderingLayers = GetMeshRenderingLayer();half4 shadowMask = CalculateShadowMask(inputData);AmbientOcclusionFactor aoFactor = CreateAmbientOcclusionFactor(inputData, surfaceData);Light mainLight = GetMainLight1(inputData, shadowMask, aoFactor);MixRealtimeAndBakedGI(mainLight, inputData.normalWS, inputData.bakedGI, aoFactor);inputData.bakedGI *= surfaceData.albedo;LightingData lightingData = CreateLightingData(inputData, surfaceData);#ifdef _LIGHT_LAYERSif (IsMatchingLightLayer(mainLight.layerMask, meshRenderingLayers))#endif{lightingData.mainLightColor += CalculateBlinnPhong(mainLight, inputData, surfaceData);}#if defined(_ADDITIONAL_LIGHTS)uint pixelLightCount = GetAdditionalLightsCount();#if USE_FORWARD_PLUSfor (uint lightIndex = 0; lightIndex < min(URP_FP_DIRECTIONAL_LIGHTS_COUNT, MAX_VISIBLE_LIGHTS); lightIndex++){FORWARD_PLUS_SUBTRACTIVE_LIGHT_CHECKLight light = GetAdditionalLight(lightIndex, inputData, shadowMask, aoFactor);#ifdef _LIGHT_LAYERSif (IsMatchingLightLayer(light.layerMask, meshRenderingLayers))#endif{lightingData.additionalLightsColor += CalculateBlinnPhong(light, inputData, surfaceData);}}#endifLIGHT_LOOP_BEGIN(pixelLightCount)Light light = GetAdditionalLight(lightIndex, inputData, shadowMask, aoFactor);#ifdef _LIGHT_LAYERSif (IsMatchingLightLayer(light.layerMask, meshRenderingLayers))#endif{lightingData.additionalLightsColor += CalculateBlinnPhong(light, inputData, surfaceData);}LIGHT_LOOP_END#endif#if defined(_ADDITIONAL_LIGHTS_VERTEX)lightingData.vertexLightingColor += inputData.vertexLighting * surfaceData.albedo;#endifreturn CalculateFinalColor(lightingData, surfaceData.alpha);}///// Vertex and Fragment functions /////// Used in Standard (Simple Lighting) shaderVaryings LitPassVertexSimple(Attributes input){Varyings output = (Varyings)0;UNITY_SETUP_INSTANCE_ID(input);UNITY_TRANSFER_INSTANCE_ID(input, output);UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);VertexPositionInputs vertexInput = GetVertexPositionInputs(input.positionOS.xyz);VertexNormalInputs normalInput = GetVertexNormalInputs(input.normalOS, input.tangentOS);#if defined(_FOG_FRAGMENT)half fogFactor = 0;#elsehalf fogFactor = ComputeFogFactor(vertexInput.positionCS.z);#endifoutput.uv = TRANSFORM_TEX(input.texcoord, _BaseMap);output.positionWS.xyz = vertexInput.positionWS;output.positionCS = vertexInput.positionCS;#ifdef _NORMALMAPhalf3 viewDirWS = GetWorldSpaceViewDir(vertexInput.positionWS);output.normalWS = half4(normalInput.normalWS, viewDirWS.x);output.tangentWS = half4(normalInput.tangentWS, viewDirWS.y);output.bitangentWS = half4(normalInput.bitangentWS, viewDirWS.z);#elseoutput.normalWS = NormalizeNormalPerVertex(normalInput.normalWS);#endifOUTPUT_LIGHTMAP_UV(input.staticLightmapUV, unity_LightmapST, output.staticLightmapUV);#ifdef DYNAMICLIGHTMAP_ONoutput.dynamicLightmapUV = input.dynamicLightmapUV.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;#endifOUTPUT_SH(output.normalWS.xyz, output.vertexSH);#ifdef _ADDITIONAL_LIGHTS_VERTEXhalf3 vertexLight = VertexLighting(vertexInput.positionWS, normalInput.normalWS);output.fogFactorAndVertexLight = half4(fogFactor, vertexLight);#elseoutput.fogFactor = fogFactor;#endif#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)output.shadowCoord = GetShadowCoord(vertexInput);#endifreturn output;}// Used for StandardSimpleLighting shadervoid LitPassFragmentSimple(Varyings input, out half4 outColor : SV_Target0#ifdef _WRITE_RENDERING_LAYERS, out float4 outRenderingLayers : SV_Target1#endif){UNITY_SETUP_INSTANCE_ID(input);UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);SurfaceData surfaceData;InitializeSimpleLitSurfaceData(input.uv, surfaceData);#ifdef LOD_FADE_CROSSFADELODFadeCrossFade(input.positionCS);#endifInputData inputData;InitializeInputData(input, surfaceData.normalTS, inputData);SETUP_DEBUG_TEXTURE_DATA(inputData, input.uv, _BaseMap);#ifdef _DBUFFERApplyDecalToSurfaceData(input.positionCS, surfaceData, inputData);#endifhalf4 color = UniversalFragmentBlinnPhong1(inputData, surfaceData);outColor = color;color.rgb = MixFog(color.rgb, inputData.fogCoord);color.a = OutputAlpha(color.a, IsSurfaceTypeTransparent(_Surface));outColor = color;#ifdef _WRITE_RENDERING_LAYERSuint renderingLayers = GetMeshRenderingLayer();outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0);#endif}ENDHLSL}//ShadowCasterPass{Name "ShadowCaster"Tags{"LightMode" = "ShadowCaster"}// -------------------------------------// Render State CommandsZWrite OnZTest LEqualColorMask 0Cull[_Cull]HLSLPROGRAM#pragma target 2.0// -------------------------------------// Shader Stages#pragma vertex ShadowPassVertex#pragma fragment ShadowPassFragment// -------------------------------------// Material Keywords#pragma shader_feature_local_fragment _ALPHATEST_ON#pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA// -------------------------------------// Unity defined keywords#pragma multi_compile_fragment _ LOD_FADE_CROSSFADE//--------------------------------------// GPU Instancing#pragma multi_compile_instancing#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl"// This is used during shadow map generation to differentiate between directional and punctual light shadows, as they use different formulas to apply Normal Bias#pragma multi_compile_vertex _ _CASTING_PUNCTUAL_LIGHT_SHADOW// -------------------------------------// Includes#include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitInput.hlsl"#include "Packages/com.unity.render-pipelines.universal/Shaders/ShadowCasterPass.hlsl"ENDHLSL}//GBufferPass{Name "GBuffer"Tags{"LightMode" = "UniversalGBuffer"}// -------------------------------------// Render State CommandsZWrite[_ZWrite]ZTest LEqualCull[_Cull]HLSLPROGRAM#pragma target 4.5// Deferred Rendering Path does not support the OpenGL-based graphics API:// Desktop OpenGL, OpenGL ES 3.0, WebGL 2.0.#pragma exclude_renderers gles3 glcore// -------------------------------------// Shader Stages#pragma vertex LitPassVertexSimple#pragma fragment LitPassFragmentSimple// -------------------------------------// Material Keywords#pragma shader_feature_local_fragment _ALPHATEST_ON//#pragma shader_feature _ALPHAPREMULTIPLY_ON#pragma shader_feature_local_fragment _ _SPECGLOSSMAP _SPECULAR_COLOR#pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA#pragma shader_feature_local _NORMALMAP#pragma shader_feature_local_fragment _EMISSION#pragma shader_feature_local _RECEIVE_SHADOWS_OFF// -------------------------------------// Universal Pipeline keywords#pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN//#pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS//#pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS#pragma multi_compile_fragment _ _SHADOWS_SOFT#pragma multi_compile_fragment _ _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH#pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl"// -------------------------------------// Unity defined keywords#pragma multi_compile _ DIRLIGHTMAP_COMBINED#pragma multi_compile _ LIGHTMAP_ON#pragma multi_compile _ DYNAMICLIGHTMAP_ON#pragma multi_compile _ LIGHTMAP_SHADOW_MIXING#pragma multi_compile _ SHADOWS_SHADOWMASK#pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT#pragma multi_compile_fragment _ _RENDER_PASS_ENABLED#pragma multi_compile_fragment _ LOD_FADE_CROSSFADE//--------------------------------------// GPU Instancing#pragma multi_compile_instancing#pragma instancing_options renderinglayer#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl"//--------------------------------------// Defines#define BUMP_SCALE_NOT_SUPPORTED 1// -------------------------------------// Includes#include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitInput.hlsl"#include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitGBufferPass.hlsl"ENDHLSL}//DepthOnlyPass{Name "DepthOnly"Tags{"LightMode" = "DepthOnly"}// -------------------------------------// Render State CommandsZWrite OnColorMask RCull[_Cull]HLSLPROGRAM#pragma target 2.0// -------------------------------------// Shader Stages#pragma vertex DepthOnlyVertex#pragma fragment DepthOnlyFragment// -------------------------------------// Material Keywords#pragma shader_feature_local_fragment _ALPHATEST_ON#pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA// -------------------------------------// Unity defined keywords#pragma multi_compile_fragment _ LOD_FADE_CROSSFADE//--------------------------------------// GPU Instancing#pragma multi_compile_instancing#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl"// -------------------------------------// Includes#include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitInput.hlsl"#include "Packages/com.unity.render-pipelines.universal/Shaders/DepthOnlyPass.hlsl"ENDHLSL}// This pass is used when drawing to a _CameraNormalsTexture texturePass{Name "DepthNormals"Tags{"LightMode" = "DepthNormals"}// -------------------------------------// Render State CommandsZWrite OnCull[_Cull]HLSLPROGRAM#pragma target 2.0// -------------------------------------// Shader Stages#pragma vertex DepthNormalsVertex#pragma fragment DepthNormalsFragment// -------------------------------------// Material Keywords#pragma shader_feature_local _NORMALMAP#pragma shader_feature_local_fragment _ALPHATEST_ON#pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA// -------------------------------------// Unity defined keywords#pragma multi_compile_fragment _ LOD_FADE_CROSSFADE// Universal Pipeline keywords#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl"//--------------------------------------// GPU Instancing#pragma multi_compile_instancing#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl"// -------------------------------------// Includes#include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitInput.hlsl"#include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitDepthNormalsPass.hlsl"ENDHLSL}// This pass it not used during regular rendering, only for lightmap baking.Pass{Name "Meta"Tags{"LightMode" = "Meta"}// -------------------------------------// Render State CommandsCull OffHLSLPROGRAM#pragma target 2.0// -------------------------------------// Shader Stages#pragma vertex UniversalVertexMeta#pragma fragment UniversalFragmentMetaSimple// -------------------------------------// Material Keywords#pragma shader_feature_local_fragment _EMISSION#pragma shader_feature_local_fragment _SPECGLOSSMAP#pragma shader_feature EDITOR_VISUALIZATION// -------------------------------------// Includes#include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitInput.hlsl"#include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitMetaPass.hlsl"ENDHLSL}//Universal2DPass{Name "Universal2D"Tags{"LightMode" = "Universal2D""RenderType" = "Transparent""Queue" = "Transparent"}HLSLPROGRAM#pragma target 2.0// -------------------------------------// Shader Stages#pragma vertex vert#pragma fragment frag// -------------------------------------// Material Keywords#pragma shader_feature_local_fragment _ALPHATEST_ON#pragma shader_feature_local_fragment _ALPHAPREMULTIPLY_ON// -------------------------------------// Includes#include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitInput.hlsl"#include "Packages/com.unity.render-pipelines.universal/Shaders/Utils/Universal2D.hlsl"ENDHLSL}}Fallback "Hidden/Universal Render Pipeline/FallbackError"CustomEditor "UnityEditor.Rendering.Universal.ShaderGUI.SimpleLitShader"
}