Diffuse.bsl 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include "$ENGINE$\BasePass.bslinc"
  2. #include "$ENGINE$\GBufferOutput.bslinc"
  3. shader Surface
  4. {
  5. mixin BasePass;
  6. mixin GBufferOutput;
  7. variations
  8. {
  9. WRITE_VELOCITY = { false, true };
  10. };
  11. code
  12. {
  13. [alias(gAlbedoTex)]
  14. SamplerState gAlbedoSamp;
  15. [alias(gNormalTex)]
  16. SamplerState gNormalSamp;
  17. [alias(gRoughnessTex)]
  18. SamplerState gRoughnessSamp;
  19. [alias(gMetalnessTex)]
  20. SamplerState gMetalnessSamp;
  21. [alias(gEmissiveMaskTex)]
  22. SamplerState gEmissiveMaskSamp;
  23. Texture2D gAlbedoTex = white;
  24. Texture2D gNormalTex = normal;
  25. Texture2D gRoughnessTex = white;
  26. Texture2D gMetalnessTex = black;
  27. Texture2D gEmissiveMaskTex = black;
  28. cbuffer MaterialParams
  29. {
  30. float2 gUVOffset = { 0.0f, 0.0f };
  31. float2 gUVTile = { 1.0f, 1.0f };
  32. [color][hdr]
  33. float3 gEmissiveColor = { 1.0f, 1.0f, 1.0f };
  34. };
  35. void fsmain(
  36. in VStoFS input,
  37. out float4 OutSceneColor : SV_Target0,
  38. out GBufferData OutGBuffer)
  39. {
  40. float2 uv = input.uv0 * gUVTile + gUVOffset;
  41. float3 normal = normalize(gNormalTex.Sample(gNormalSamp, uv) * 2.0f - float3(1, 1, 1));
  42. float3 worldNormal = calcWorldNormal(input, normal);
  43. SurfaceData surfaceData;
  44. surfaceData.albedo = gAlbedoTex.Sample(gAlbedoSamp, uv);
  45. surfaceData.worldNormal.xyz = worldNormal;
  46. surfaceData.roughness = gRoughnessTex.Sample(gRoughnessSamp, uv).x;
  47. surfaceData.metalness = gMetalnessTex.Sample(gMetalnessSamp, uv).x;
  48. surfaceData.mask = gLayer;
  49. #if WRITE_VELOCITY
  50. float2 ndcPos = input.clipPos.xy / input.clipPos.w;
  51. float2 prevNdcPos = input.prevClipPos.xy / input.prevClipPos.w;
  52. surfaceData.velocity = ndcPos - prevNdcPos;
  53. #else
  54. surfaceData.velocity = 0.0f;
  55. #endif
  56. OutSceneColor = float4(gEmissiveColor * gEmissiveMaskTex.Sample(gEmissiveMaskSamp, uv).x, 1.0f);
  57. OutGBuffer = encodeGBuffer(surfaceData);
  58. }
  59. };
  60. };