暫無描述
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.

SimpleLitInput.hlsl 3.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #ifndef UNIVERSAL_SIMPLE_LIT_INPUT_INCLUDED
  2. #define UNIVERSAL_SIMPLE_LIT_INPUT_INCLUDED
  3. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
  4. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SurfaceInput.hlsl"
  5. #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/DebugMipmapStreamingMacros.hlsl"
  6. CBUFFER_START(UnityPerMaterial)
  7. float4 _BaseMap_ST;
  8. half4 _BaseColor;
  9. half4 _SpecColor;
  10. half4 _EmissionColor;
  11. half _Cutoff;
  12. half _Surface;
  13. UNITY_TEXTURE_STREAMING_DEBUG_VARS;
  14. CBUFFER_END
  15. #ifdef UNITY_DOTS_INSTANCING_ENABLED
  16. UNITY_DOTS_INSTANCING_START(MaterialPropertyMetadata)
  17. UNITY_DOTS_INSTANCED_PROP(float4, _BaseColor)
  18. UNITY_DOTS_INSTANCED_PROP(float4, _SpecColor)
  19. UNITY_DOTS_INSTANCED_PROP(float4, _EmissionColor)
  20. UNITY_DOTS_INSTANCED_PROP(float , _Cutoff)
  21. UNITY_DOTS_INSTANCED_PROP(float , _Surface)
  22. UNITY_DOTS_INSTANCING_END(MaterialPropertyMetadata)
  23. static float4 unity_DOTS_Sampled_BaseColor;
  24. static float4 unity_DOTS_Sampled_SpecColor;
  25. static float4 unity_DOTS_Sampled_EmissionColor;
  26. static float unity_DOTS_Sampled_Cutoff;
  27. static float unity_DOTS_Sampled_Surface;
  28. void SetupDOTSSimpleLitMaterialPropertyCaches()
  29. {
  30. unity_DOTS_Sampled_BaseColor = UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(float4 , _BaseColor);
  31. unity_DOTS_Sampled_SpecColor = UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(float4 , _SpecColor);
  32. unity_DOTS_Sampled_EmissionColor = UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(float4 , _EmissionColor);
  33. unity_DOTS_Sampled_Cutoff = UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(float , _Cutoff);
  34. unity_DOTS_Sampled_Surface = UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(float , _Surface);
  35. }
  36. #undef UNITY_SETUP_DOTS_MATERIAL_PROPERTY_CACHES
  37. #define UNITY_SETUP_DOTS_MATERIAL_PROPERTY_CACHES() SetupDOTSSimpleLitMaterialPropertyCaches()
  38. #define _BaseColor unity_DOTS_Sampled_BaseColor
  39. #define _SpecColor unity_DOTS_Sampled_SpecColor
  40. #define _EmissionColor unity_DOTS_Sampled_EmissionColor
  41. #define _Cutoff unity_DOTS_Sampled_Cutoff
  42. #define _Surface unity_DOTS_Sampled_Surface
  43. #endif
  44. TEXTURE2D(_SpecGlossMap); SAMPLER(sampler_SpecGlossMap);
  45. half4 SampleSpecularSmoothness(float2 uv, half alpha, half4 specColor, TEXTURE2D_PARAM(specMap, sampler_specMap))
  46. {
  47. half4 specularSmoothness = half4(0, 0, 0, 1);
  48. #ifdef _SPECGLOSSMAP
  49. specularSmoothness = SAMPLE_TEXTURE2D(specMap, sampler_specMap, uv) * specColor;
  50. #elif defined(_SPECULAR_COLOR)
  51. specularSmoothness = specColor;
  52. #endif
  53. #ifdef _GLOSSINESS_FROM_BASE_ALPHA
  54. specularSmoothness.a = alpha;
  55. #endif
  56. return specularSmoothness;
  57. }
  58. inline void InitializeSimpleLitSurfaceData(float2 uv, out SurfaceData outSurfaceData)
  59. {
  60. outSurfaceData = (SurfaceData)0;
  61. half4 albedoAlpha = SampleAlbedoAlpha(uv, TEXTURE2D_ARGS(_BaseMap, sampler_BaseMap));
  62. outSurfaceData.alpha = albedoAlpha.a * _BaseColor.a;
  63. outSurfaceData.alpha = AlphaDiscard(outSurfaceData.alpha, _Cutoff);
  64. outSurfaceData.albedo = albedoAlpha.rgb * _BaseColor.rgb;
  65. outSurfaceData.albedo = AlphaModulate(outSurfaceData.albedo, outSurfaceData.alpha);
  66. half4 specularSmoothness = SampleSpecularSmoothness(uv, outSurfaceData.alpha, _SpecColor, TEXTURE2D_ARGS(_SpecGlossMap, sampler_SpecGlossMap));
  67. outSurfaceData.metallic = 0.0; // unused
  68. outSurfaceData.specular = specularSmoothness.rgb;
  69. outSurfaceData.smoothness = specularSmoothness.a;
  70. outSurfaceData.normalTS = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap));
  71. outSurfaceData.occlusion = 1.0;
  72. outSurfaceData.emission = SampleEmission(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
  73. }
  74. #endif