No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DepthNormalsPass.hlsl 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #ifndef UNIVERSAL_DEPTH_NORMALS_PASS_INCLUDED
  2. #define UNIVERSAL_DEPTH_NORMALS_PASS_INCLUDED
  3. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
  4. #if defined(LOD_FADE_CROSSFADE)
  5. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/LODCrossFade.hlsl"
  6. #endif
  7. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RealtimeLights.hlsl"
  8. struct Attributes
  9. {
  10. float4 positionOS : POSITION;
  11. float4 tangentOS : TANGENT;
  12. float2 texcoord : TEXCOORD0;
  13. float3 normal : NORMAL;
  14. UNITY_VERTEX_INPUT_INSTANCE_ID
  15. };
  16. struct Varyings
  17. {
  18. float4 positionCS : SV_POSITION;
  19. #if defined(_ALPHATEST_ON)
  20. float2 uv : TEXCOORD1;
  21. #endif
  22. float3 normalWS : TEXCOORD2;
  23. UNITY_VERTEX_INPUT_INSTANCE_ID
  24. UNITY_VERTEX_OUTPUT_STEREO
  25. };
  26. Varyings DepthNormalsVertex(Attributes input)
  27. {
  28. Varyings output = (Varyings)0;
  29. UNITY_SETUP_INSTANCE_ID(input);
  30. UNITY_TRANSFER_INSTANCE_ID(input, output);
  31. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
  32. #if defined(_ALPHATEST_ON)
  33. output.uv = TRANSFORM_TEX(input.texcoord, _BaseMap);
  34. #endif
  35. output.positionCS = TransformObjectToHClip(input.positionOS.xyz);
  36. VertexNormalInputs normalInput = GetVertexNormalInputs(input.normal, input.tangentOS);
  37. output.normalWS = NormalizeNormalPerVertex(normalInput.normalWS);
  38. return output;
  39. }
  40. void DepthNormalsFragment(
  41. Varyings input
  42. , out half4 outNormalWS : SV_Target0
  43. #ifdef _WRITE_RENDERING_LAYERS
  44. , out float4 outRenderingLayers : SV_Target1
  45. #endif
  46. )
  47. {
  48. UNITY_SETUP_INSTANCE_ID(input);
  49. UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
  50. #if defined(_ALPHATEST_ON)
  51. Alpha(SampleAlbedoAlpha(input.uv, TEXTURE2D_ARGS(_BaseMap, sampler_BaseMap)).a, _BaseColor, _Cutoff);
  52. #endif
  53. #if defined(LOD_FADE_CROSSFADE)
  54. LODFadeCrossFade(input.positionCS);
  55. #endif
  56. #if defined(_GBUFFER_NORMALS_OCT)
  57. float3 normalWS = normalize(input.normalWS);
  58. float2 octNormalWS = PackNormalOctQuadEncode(normalWS); // values between [-1, +1], must use fp32 on some platforms.
  59. float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5); // values between [ 0, 1]
  60. half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS); // values between [ 0, 1]
  61. outNormalWS = half4(packedNormalWS, 0.0);
  62. #else
  63. float3 normalWS = NormalizeNormalPerPixel(input.normalWS);
  64. outNormalWS = half4(normalWS, 0.0);
  65. #endif
  66. #ifdef _WRITE_RENDERING_LAYERS
  67. uint renderingLayers = GetMeshRenderingLayer();
  68. outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0);
  69. #endif
  70. }
  71. #endif