Без опису
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. Pass
  2. {
  3. $splice(PassName)
  4. Tags
  5. {
  6. $splice(LightMode)
  7. }
  8. // Render State
  9. $splice(RenderState)
  10. // Debug
  11. $splice(Debug)
  12. // --------------------------------------------------
  13. // Pass
  14. HLSLPROGRAM
  15. // Pragmas
  16. $splice(PassPragmas)
  17. // Keywords
  18. $splice(PassKeywords)
  19. $splice(GraphKeywords)
  20. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
  21. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl"
  22. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
  23. // Defines
  24. $Attributes.normalOS: #define ATTRIBUTES_NEED_NORMAL
  25. $Attributes.tangentOS: #define ATTRIBUTES_NEED_TANGENT
  26. $Attributes.uv0: #define ATTRIBUTES_NEED_TEXCOORD0
  27. $Attributes.uv1: #define ATTRIBUTES_NEED_TEXCOORD1
  28. $Attributes.uv2: #define ATTRIBUTES_NEED_TEXCOORD2
  29. $Attributes.uv3: #define ATTRIBUTES_NEED_TEXCOORD3
  30. $Attributes.color: #define ATTRIBUTES_NEED_COLOR
  31. $Varyings.positionWS: #define VARYINGS_NEED_POSITION_WS
  32. $Varyings.normalWS: #define VARYINGS_NEED_NORMAL_WS
  33. $Varyings.viewDirectionWS: #define VARYINGS_NEED_VIEWDIRECTION_WS
  34. $Varyings.tangentWS: #define VARYINGS_NEED_TANGENT_WS
  35. $Varyings.texCoord0: #define VARYINGS_NEED_TEXCOORD0
  36. $Varyings.texCoord1: #define VARYINGS_NEED_TEXCOORD1
  37. $Varyings.texCoord2: #define VARYINGS_NEED_TEXCOORD2
  38. $Varyings.texCoord3: #define VARYINGS_NEED_TEXCOORD3
  39. $Varyings.color: #define VARYINGS_NEED_COLOR
  40. $Varyings.fogFactorAndVertexLight: #define VARYINGS_NEED_FOG_AND_VERTEX_LIGHT
  41. $Varyings.sh: #define VARYINGS_NEED_SH
  42. $Varyings.staticLightmapUV: #define VARYINGS_NEED_STATIC_LIGHTMAP_UV
  43. $Varyings.dynamicLightmapUV: #define VARYINGS_NEED_DYNAMIC_LIGHTMAP_UV
  44. $Varyings.shadowCoord: #define VARYINGS_NEED_SHADOW_COORD
  45. $features.graphVertex: #define HAVE_MESH_MODIFICATION
  46. $SurfaceDescriptionInputs.FaceSign: // Define when IsFontFaceNode is included in ShaderGraph
  47. $SurfaceDescriptionInputs.FaceSign: #define VARYINGS_NEED_CULLFACE
  48. $splice(GraphDefines)
  49. // -- Properties used by ScenePickingPass
  50. #ifdef SCENEPICKINGPASS
  51. float4 _SelectionID;
  52. #endif
  53. #if _RENDER_PASS_ENABLED
  54. #define GBUFFER3 0
  55. #define GBUFFER4 1
  56. FRAMEBUFFER_INPUT_X_HALF(GBUFFER3);
  57. FRAMEBUFFER_INPUT_X_HALF(GBUFFER4);
  58. #endif
  59. // Includes
  60. $splice(PreGraphIncludes)
  61. // --------------------------------------------------
  62. // Structs and Packing
  63. $splice(PassStructs)
  64. $splice(InterpolatorPack)
  65. // --------------------------------------------------
  66. // Graph
  67. // Graph Properties
  68. $splice(GraphProperties)
  69. // Graph Includes
  70. $splice(GraphIncludes)
  71. // Graph Functions
  72. $splice(GraphFunctions)
  73. // Graph Vertex
  74. $splice(GraphVertex)
  75. // Graph Pixel
  76. $splice(GraphPixel)
  77. // --------------------------------------------------
  78. // Build Graph Inputs
  79. $features.graphVertex: $include("VertexAnimation.template.hlsl")
  80. $features.graphPixel: $include("SharedCode.template.hlsl")
  81. $features.graphPixel: $include("BuildSurfaceDescriptionInputs.template.hlsl")
  82. // --------------------------------------------------
  83. // Build Surface Data
  84. void GetSurfaceData(Varyings input, float4 positionCS, float angleFadeFactor, out DecalSurfaceData surfaceData)
  85. {
  86. #if (SHADERPASS == SHADERPASS_DBUFFER_PROJECTOR) || (SHADERPASS == SHADERPASS_FORWARD_EMISSIVE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_PROJECTOR)
  87. half4x4 normalToWorld = UNITY_ACCESS_INSTANCED_PROP(Decal, _NormalToWorld);
  88. half fadeFactor = clamp(normalToWorld[0][3], 0.0f, 1.0f) * angleFadeFactor;
  89. float2 scale = float2(normalToWorld[3][0], normalToWorld[3][1]);
  90. float2 offset = float2(normalToWorld[3][2], normalToWorld[3][3]);
  91. $Varyings.texCoord0: input.texCoord0.xy = input.texCoord0.xy * scale + offset;
  92. $Varyings.texCoord1: input.texCoord1.xy = input.texCoord1.xy * scale + offset;
  93. $Varyings.texCoord2: input.texCoord2.xy = input.texCoord2.xy * scale + offset;
  94. $Varyings.texCoord3: input.texCoord3.xy = input.texCoord3.xy * scale + offset;
  95. half3 normalWS = TransformObjectToWorldDir(half3(0, 1, 0));
  96. half3 tangentWS = TransformObjectToWorldDir(half3(1, 0, 0));
  97. half3 bitangentWS = TransformObjectToWorldDir(half3(0, 0, 1));
  98. half sign = dot(cross(normalWS, tangentWS), bitangentWS) > 0 ? 1 : -1;
  99. $Varyings.normalWS: input.normalWS.xyz = normalWS;
  100. $Varyings.tangentWS: input.tangentWS.xyzw = half4(tangentWS, sign);
  101. #else
  102. #if defined(LOD_FADE_CROSSFADE) && USE_UNITY_CROSSFADE
  103. LODFadeCrossFade(positionCS);
  104. #endif
  105. half fadeFactor = half(1.0);
  106. #endif
  107. SurfaceDescriptionInputs surfaceDescriptionInputs = BuildSurfaceDescriptionInputs(input);
  108. SurfaceDescription surfaceDescription = SurfaceDescriptionFunction(surfaceDescriptionInputs);
  109. // setup defaults -- these are used if the graph doesn't output a value
  110. ZERO_INITIALIZE(DecalSurfaceData, surfaceData);
  111. surfaceData.occlusion = half(1.0);
  112. surfaceData.smoothness = half(0);
  113. #ifdef _MATERIAL_AFFECTS_NORMAL
  114. surfaceData.normalWS.w = half(1.0);
  115. #else
  116. surfaceData.normalWS.w = half(0.0);
  117. #endif
  118. $SurfaceDescription.Emission: surfaceData.emissive.rgb = half3(surfaceDescription.Emission.rgb * fadeFactor);
  119. // copy across graph values, if defined
  120. $SurfaceDescription.BaseColor: surfaceData.baseColor.xyz = half3(surfaceDescription.BaseColor);
  121. $SurfaceDescription.Alpha: surfaceData.baseColor.w = half(surfaceDescription.Alpha * fadeFactor);
  122. #if (SHADERPASS == SHADERPASS_DBUFFER_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_PROJECTOR)
  123. #if defined(_MATERIAL_AFFECTS_NORMAL)
  124. $SurfaceDescription.NormalTS: surfaceData.normalWS.xyz = normalize(mul((half3x3)normalToWorld, surfaceDescription.NormalTS.xyz));
  125. #else
  126. surfaceData.normalWS.xyz = normalize(normalToWorld[2].xyz);
  127. #endif
  128. #elif (SHADERPASS == SHADERPASS_DBUFFER_MESH) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_MESH) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_MESH)
  129. #if defined(_MATERIAL_AFFECTS_NORMAL)
  130. float sgn = input.tangentWS.w; // should be either +1 or -1
  131. float3 bitangent = sgn * cross(input.normalWS.xyz, input.tangentWS.xyz);
  132. half3x3 tangentToWorld = half3x3(input.tangentWS.xyz, bitangent.xyz, input.normalWS.xyz);
  133. // We need to normalize as we use mikkt tangent space and this is expected (tangent space is not normalize)
  134. $SurfaceDescription.NormalTS: surfaceData.normalWS.xyz = normalize(TransformTangentToWorld(surfaceDescription.NormalTS, tangentToWorld));
  135. #else
  136. surfaceData.normalWS.xyz = normalize(half3(input.normalWS)); // Default to vertex normal
  137. #endif
  138. #endif
  139. $SurfaceDescription.NormalAlpha: surfaceData.normalWS.w = surfaceDescription.NormalAlpha * fadeFactor;
  140. // In case of Smoothness / AO / Metal, all the three are always computed but color mask can change
  141. $SurfaceDescription.Metallic: surfaceData.metallic = half(surfaceDescription.Metallic);
  142. $SurfaceDescription.Occlusion: surfaceData.occlusion = half(surfaceDescription.Occlusion);
  143. $SurfaceDescription.Smoothness: surfaceData.smoothness = half(surfaceDescription.Smoothness);
  144. $SurfaceDescription.MAOSAlpha: surfaceData.MAOSAlpha = half(surfaceDescription.MAOSAlpha * fadeFactor);
  145. }
  146. // --------------------------------------------------
  147. // Main
  148. $splice(PostGraphIncludes)
  149. ENDHLSL
  150. }