LitInput.hlsl 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #ifndef UNIVERSAL_LIT_INPUT_INCLUDED
  2. #define UNIVERSAL_LIT_INPUT_INCLUDED
  3. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
  4. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl"
  5. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SurfaceInput.hlsl"
  6. CBUFFER_START(UnityPerMaterial)
  7. float4 _BaseMap_ST;
  8. half4 _BaseColor;
  9. half4 _SpecColor;
  10. half4 _EmissionColor;
  11. half _Cutoff;
  12. half _Smoothness;
  13. half _Metallic;
  14. half _BumpScale;
  15. half _OcclusionStrength;
  16. CBUFFER_END
  17. TEXTURE2D(_OcclusionMap); SAMPLER(sampler_OcclusionMap);
  18. TEXTURE2D(_MetallicGlossMap); SAMPLER(sampler_MetallicGlossMap);
  19. TEXTURE2D(_SpecGlossMap); SAMPLER(sampler_SpecGlossMap);
  20. #ifdef _SPECULAR_SETUP
  21. #define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_SpecGlossMap, sampler_SpecGlossMap, uv)
  22. #else
  23. #define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_MetallicGlossMap, sampler_MetallicGlossMap, uv)
  24. #endif
  25. half4 SampleMetallicSpecGloss(float2 uv, half albedoAlpha)
  26. {
  27. half4 specGloss;
  28. #ifdef _METALLICSPECGLOSSMAP
  29. specGloss = SAMPLE_METALLICSPECULAR(uv);
  30. #ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
  31. specGloss.a = albedoAlpha * _Smoothness;
  32. #else
  33. specGloss.a *= _Smoothness;
  34. #endif
  35. #else // _METALLICSPECGLOSSMAP
  36. #if _SPECULAR_SETUP
  37. specGloss.rgb = _SpecColor.rgb;
  38. #else
  39. specGloss.rgb = _Metallic.rrr;
  40. #endif
  41. #ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
  42. specGloss.a = albedoAlpha * _Smoothness;
  43. #else
  44. specGloss.a = _Smoothness;
  45. #endif
  46. #endif
  47. return specGloss;
  48. }
  49. half SampleOcclusion(float2 uv)
  50. {
  51. #ifdef _OCCLUSIONMAP
  52. // TODO: Controls things like these by exposing SHADER_QUALITY levels (low, medium, high)
  53. #if defined(SHADER_API_GLES)
  54. return SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
  55. #else
  56. half occ = SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
  57. return LerpWhiteTo(occ, _OcclusionStrength);
  58. #endif
  59. #else
  60. return 1.0;
  61. #endif
  62. }
  63. inline void InitializeStandardLitSurfaceData(float2 uv, out SurfaceData outSurfaceData)
  64. {
  65. half4 albedoAlpha = SampleAlbedoAlpha(uv, TEXTURE2D_ARGS(_BaseMap, sampler_BaseMap));
  66. outSurfaceData.alpha = Alpha(albedoAlpha.a, _BaseColor, _Cutoff);
  67. half4 specGloss = SampleMetallicSpecGloss(uv, albedoAlpha.a);
  68. outSurfaceData.albedo = albedoAlpha.rgb * _BaseColor.rgb;
  69. #if _SPECULAR_SETUP
  70. outSurfaceData.metallic = 1.0h;
  71. outSurfaceData.specular = specGloss.rgb;
  72. #else
  73. outSurfaceData.metallic = specGloss.r;
  74. outSurfaceData.specular = half3(0.0h, 0.0h, 0.0h);
  75. #endif
  76. outSurfaceData.smoothness = specGloss.a;
  77. outSurfaceData.normalTS = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
  78. outSurfaceData.occlusion = SampleOcclusion(uv);
  79. outSurfaceData.emission = SampleEmission(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
  80. }
  81. #endif // UNIVERSAL_INPUT_SURFACE_PBR_INCLUDED