LitMetaPass.hlsl 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #ifndef UNIVERSAL_LIT_META_PASS_INCLUDED
  2. #define UNIVERSAL_LIT_META_PASS_INCLUDED
  3. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/MetaInput.hlsl"
  4. struct Attributes
  5. {
  6. float4 positionOS : POSITION;
  7. float3 normalOS : NORMAL;
  8. float2 uv0 : TEXCOORD0;
  9. float2 uv1 : TEXCOORD1;
  10. float2 uv2 : TEXCOORD2;
  11. #ifdef _TANGENT_TO_WORLD
  12. float4 tangentOS : TANGENT;
  13. #endif
  14. };
  15. struct Varyings
  16. {
  17. float4 positionCS : SV_POSITION;
  18. float2 uv : TEXCOORD0;
  19. };
  20. Varyings UniversalVertexMeta(Attributes input)
  21. {
  22. Varyings output;
  23. output.positionCS = MetaVertexPosition(input.positionOS, input.uv1, input.uv2,
  24. unity_LightmapST, unity_DynamicLightmapST);
  25. output.uv = TRANSFORM_TEX(input.uv0, _BaseMap);
  26. return output;
  27. }
  28. half4 UniversalFragmentMeta(Varyings input) : SV_Target
  29. {
  30. SurfaceData surfaceData;
  31. InitializeStandardLitSurfaceData(input.uv, surfaceData);
  32. BRDFData brdfData;
  33. InitializeBRDFData(surfaceData.albedo, surfaceData.metallic, surfaceData.specular, surfaceData.smoothness, surfaceData.alpha, brdfData);
  34. MetaInput metaInput;
  35. metaInput.Albedo = brdfData.diffuse + brdfData.specular * brdfData.roughness * 0.5;
  36. metaInput.SpecularColor = surfaceData.specular;
  37. metaInput.Emission = surfaceData.emission;
  38. return MetaFragment(metaInput);
  39. }
  40. //LWRP -> Universal Backwards Compatibility
  41. Varyings LightweightVertexMeta(Attributes input)
  42. {
  43. return UniversalVertexMeta(input);
  44. }
  45. half4 LightweightFragmentMeta(Varyings input) : SV_Target
  46. {
  47. return UniversalFragmentMeta(input);
  48. }
  49. #endif