TerrainLitMetaPass.hlsl 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #ifndef TERRAIN_LIT_META_PASS_INCLUDED
  2. #define TERRAIN_LIT_META_PASS_INCLUDED
  3. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/MetaInput.hlsl"
  4. // Not needed in LWRP – but URP
  5. struct Attributes
  6. {
  7. float4 positionOS : POSITION;
  8. float3 normalOS : NORMAL;
  9. float2 uv0 : TEXCOORD0;
  10. float2 uv1 : TEXCOORD1;
  11. float2 uv2 : TEXCOORD2;
  12. };
  13. struct Varyings
  14. {
  15. float4 positionCS : SV_POSITION;
  16. float2 uv : TEXCOORD0;
  17. };
  18. Varyings TerrainVertexMeta(Attributes input)
  19. {
  20. Varyings output;
  21. output.positionCS = MetaVertexPosition(input.positionOS, input.uv1, input.uv2,
  22. unity_LightmapST, unity_DynamicLightmapST);
  23. output.uv = TRANSFORM_TEX(input.uv0, _MainTex);
  24. // Fix UVs (Unity 2019.3.0b6)
  25. output.uv = ( (output.positionCS.xy) + 1 ) * 0.5;
  26. return output;
  27. }
  28. half4 TerrainFragmentMeta(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. #endif