Nenhuma descrição
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

TerrainDetailLit.shader 9.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. Shader "Hidden/TerrainEngine/Details/UniversalPipeline/Vertexlit"
  2. {
  3. Properties
  4. {
  5. _MainTex ("Main Texture", 2D) = "white" { }
  6. }
  7. SubShader
  8. {
  9. Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" "UniversalMaterialType" = "Unlit" "IgnoreProjector" = "True"}
  10. LOD 100
  11. ZWrite On
  12. // Lightmapped
  13. Pass
  14. {
  15. Name "TerrainDetailVertex"
  16. HLSLPROGRAM
  17. #pragma target 2.0
  18. // -------------------------------------
  19. // Universal Pipeline keywords
  20. #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
  21. #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS
  22. #pragma multi_compile_fragment _ _SHADOWS_SOFT _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH
  23. #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING
  24. #pragma multi_compile _ SHADOWS_SHADOWMASK
  25. #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION
  26. #pragma multi_compile_fragment _ _LIGHT_COOKIES
  27. #pragma multi_compile _ _FORWARD_PLUS
  28. #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
  29. // -------------------------------------
  30. // Unity defined keywords
  31. #pragma multi_compile _ DIRLIGHTMAP_COMBINED
  32. #pragma multi_compile _ LIGHTMAP_ON
  33. #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl"
  34. #pragma multi_compile_fog
  35. #pragma multi_compile _ DEBUG_DISPLAY
  36. #pragma vertex TerrainLitVertex
  37. #pragma fragment TerrainLitForwardFragment
  38. #include "Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainDetailLitInput.hlsl"
  39. #include "Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainDetailLitPasses.hlsl"
  40. ENDHLSL
  41. }
  42. // GBuffer
  43. Pass
  44. {
  45. Name "TerrainDetailVertex - GBuffer"
  46. Tags{"LightMode" = "UniversalGBuffer"}
  47. HLSLPROGRAM
  48. #pragma target 2.0
  49. #pragma vertex Vert
  50. #pragma fragment Frag
  51. // -------------------------------------
  52. // Universal Pipeline keywords
  53. #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
  54. #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX //_ADDITIONAL_LIGHTS
  55. //#pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS
  56. #pragma multi_compile_fragment _ _SHADOWS_SOFT _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH
  57. #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE
  58. // -------------------------------------
  59. // Unity defined keywords
  60. #pragma multi_compile _ DIRLIGHTMAP_COMBINED
  61. #pragma multi_compile _ LIGHTMAP_ON
  62. #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl"
  63. #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT
  64. #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED
  65. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
  66. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
  67. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl"
  68. TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex);
  69. float4 _MainTex_ST;
  70. struct Attributes
  71. {
  72. float4 PositionOS : POSITION;
  73. float2 UV0 : TEXCOORD0;
  74. float2 UV1 : TEXCOORD1;
  75. half3 NormalOS : NORMAL;
  76. half4 Color : COLOR;
  77. UNITY_VERTEX_INPUT_INSTANCE_ID
  78. };
  79. struct Varyings
  80. {
  81. float2 UV01 : TEXCOORD0; // UV0
  82. DECLARE_LIGHTMAP_OR_SH(staticLightmapUV, vertexSH, 1);
  83. half4 Color : TEXCOORD2; // Vertex Color
  84. half4 LightingFog : TEXCOORD3; // Vetex Lighting, Fog Factor
  85. float4 ShadowCoords : TEXCOORD4; // Shadow UVs
  86. half3 NormalWS : TEXCOORD5; // World Space Normal
  87. float3 PositionWS : TEXCOORD6;
  88. float4 PositionCS : SV_POSITION; // Clip Position
  89. UNITY_VERTEX_INPUT_INSTANCE_ID
  90. UNITY_VERTEX_OUTPUT_STEREO
  91. };
  92. Varyings Vert(Attributes input)
  93. {
  94. Varyings output = (Varyings)0;
  95. UNITY_SETUP_INSTANCE_ID(input);
  96. UNITY_TRANSFER_INSTANCE_ID(input, output);
  97. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
  98. // Vertex attributes
  99. output.UV01 = TRANSFORM_TEX(input.UV0, _MainTex);
  100. OUTPUT_LIGHTMAP_UV(input.UV1, unity_LightmapST, output.staticLightmapUV);
  101. VertexPositionInputs vertexInput = GetVertexPositionInputs(input.PositionOS.xyz);
  102. output.Color = input.Color;
  103. output.PositionCS = vertexInput.positionCS;
  104. // Shadow Coords
  105. output.ShadowCoords = GetShadowCoord(vertexInput);
  106. // Vertex Lighting
  107. output.NormalWS = TransformObjectToWorldNormal(input.NormalOS).xyz;
  108. OUTPUT_SH4(vertexInput.positionWS, output.NormalWS.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), output.vertexSH, NOT_USED);
  109. Light mainLight = GetMainLight();
  110. half3 attenuatedLightColor = mainLight.color * mainLight.distanceAttenuation;
  111. half3 diffuseColor = LightingLambert(attenuatedLightColor, mainLight.direction, output.NormalWS);
  112. #ifdef _ADDITIONAL_LIGHTS
  113. int pixelLightCount = GetAdditionalLightsCount();
  114. for (int i = 0; i < pixelLightCount; ++i)
  115. {
  116. Light light = GetAdditionalLight(i, vertexInput.positionWS);
  117. half3 attenuatedLightColor = light.color * light.distanceAttenuation;
  118. diffuseColor += LightingLambert(attenuatedLightColor, light.direction, output.NormalWS);
  119. }
  120. #endif
  121. output.LightingFog.xyz = diffuseColor;
  122. // Fog factor
  123. output.LightingFog.w = ComputeFogFactor(output.PositionCS.z);
  124. output.PositionWS = vertexInput.positionWS;
  125. return output;
  126. }
  127. FragmentOutput Frag(Varyings input)
  128. {
  129. UNITY_SETUP_INSTANCE_ID(input);
  130. UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
  131. #if !defined(LIGHTMAP_ON) && (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2))
  132. half3 bakedGI = SAMPLE_GI(input.vertexSH,
  133. GetAbsolutePositionWS(input.PositionWS),
  134. input.NormalWS.xyz,
  135. GetWorldSpaceNormalizeViewDir(input.PositionWS),
  136. input.PositionCS.xy,
  137. NOT_USED,
  138. NOT_USED);
  139. #else
  140. half3 bakedGI = SAMPLE_GI(input.staticLightmapUV, input.vertexSH, input.NormalWS);
  141. #endif
  142. half3 lighting = input.LightingFog.rgb * MainLightRealtimeShadow(input.ShadowCoords) + bakedGI;
  143. half4 tex = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.UV01);
  144. half4 color = 1.0;
  145. color.rgb = input.Color.rgb * tex.rgb * lighting;
  146. SurfaceData surfaceData = (SurfaceData)0;
  147. surfaceData.alpha = 1.0;
  148. surfaceData.occlusion = 1.0;
  149. InputData inputData = (InputData)0;
  150. inputData.normalWS = input.NormalWS;
  151. inputData.positionCS = input.PositionCS;
  152. return SurfaceDataToGbuffer(surfaceData, inputData, color.rgb, kLightingInvalid);
  153. }
  154. ENDHLSL
  155. }
  156. Pass
  157. {
  158. Name "DepthOnly"
  159. Tags{"LightMode" = "DepthOnly"}
  160. ZWrite On
  161. ColorMask R
  162. HLSLPROGRAM
  163. #pragma target 2.0
  164. #pragma vertex DepthOnlyVertex
  165. #pragma fragment DepthOnlyFragment
  166. //--------------------------------------
  167. // GPU Instancing
  168. #pragma multi_compile_instancing
  169. #include "Packages/com.unity.render-pipelines.universal/Shaders/UnlitInput.hlsl"
  170. #include "Packages/com.unity.render-pipelines.universal/Shaders/DepthOnlyPass.hlsl"
  171. ENDHLSL
  172. }
  173. Pass
  174. {
  175. Name "DepthNormals"
  176. Tags{"LightMode" = "DepthNormals"}
  177. ZWrite On
  178. HLSLPROGRAM
  179. #pragma target 2.0
  180. #pragma vertex DepthNormalOnlyVertex
  181. #pragma fragment DepthNormalOnlyFragment
  182. //--------------------------------------
  183. // GPU Instancing
  184. #pragma multi_compile_instancing
  185. #include "Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitInput.hlsl"
  186. #include "Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitDepthNormalsPass.hlsl"
  187. ENDHLSL
  188. }
  189. Pass
  190. {
  191. Name "Meta"
  192. Tags{ "LightMode" = "Meta" }
  193. Cull Off
  194. HLSLPROGRAM
  195. #pragma vertex UniversalVertexMeta
  196. #pragma fragment UniversalFragmentMetaSimple
  197. #pragma shader_feature_local_fragment _SPECGLOSSMAP
  198. #include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitInput.hlsl"
  199. #include "Packages/com.unity.render-pipelines.universal/Shaders/SimpleLitMetaPass.hlsl"
  200. ENDHLSL
  201. }
  202. }
  203. //Fallback "VertexLit"
  204. }