DeferredMaterialPass.azsli 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #define MATERIALPIPELINE_SHADER_HAS_PIXEL_STAGE 1
  9. //TODO(DeferredPOC): Support clear coat
  10. #define ENABLE_CLEAR_COAT 0
  11. #define ENABLE_TRANSMISSION 0
  12. //////////////////////////////////////////////////////////////////////////////////////////////////
  13. #ifdef MATERIAL_TYPE_DEFINES_AZSLI_FILE_PATH
  14. #include MATERIAL_TYPE_DEFINES_AZSLI_FILE_PATH
  15. #endif
  16. //////////////////////////////////////////////////////////////////////////////////////////////////
  17. #include <viewsrg_all.srgi>
  18. #include <scenesrg_all.srgi>
  19. #include <Atom/Features/Pipeline/Forward/ForwardPassSrg.azsli>
  20. #include <Atom/Features/Pipeline/Forward/ForwardPassVertexData.azsli>
  21. #include <Atom/Features/Pipeline/Forward/ForwardPassPipelineCallbacks.azsli>
  22. //////////////////////////////////////////////////////////////////////////////////////////////////
  23. #include MATERIAL_TYPE_AZSLI_FILE_PATH
  24. //////////////////////////////////////////////////////////////////////////////////////////////////
  25. #include <Atom/Features/ColorManagement/TransformColor.azsli>
  26. #include <Atom/Features/PBR/LightingOptions.azsli>
  27. VsOutput MaterialVS(VsInput IN, uint instanceId : SV_InstanceID)
  28. {
  29. VsSystemValues SV;
  30. SV.m_instanceId = instanceId;
  31. VsOutput OUT = EvaluateVertexGeometry(IN, SV, GetMaterialParameters());
  32. OUT.m_instanceId = instanceId;
  33. return OUT;
  34. }
  35. struct DeferredMaterialOutput
  36. {
  37. float4 m_baseColor : SV_Target0;
  38. float4 m_roughnessMetal : SV_Target1;
  39. float4 m_normal : SV_Target2;
  40. #if OUTPUT_DEPTH
  41. float m_depth : SV_Depth;
  42. #endif
  43. };
  44. // TODO(MaterialPipeline): Probably replace this with FORCE_EARLY_DEPTH_STENCIL like how it's done in MultiViewForwardPassVertexAndPixel.azsli
  45. #if !OUTPUT_DEPTH
  46. [earlydepthstencil]
  47. #endif
  48. DeferredMaterialOutput MaterialPS(VsOutput IN, bool isFrontFace : SV_IsFrontFace)
  49. {
  50. VsSystemValues SV;
  51. SV.m_instanceId = IN.m_instanceId;
  52. // ------- Geometry -> Surface -------
  53. PixelGeometryData geoData = EvaluatePixelGeometry(IN, SV, isFrontFace, GetMaterialParameters());
  54. Surface surface = EvaluateSurface(IN, geoData, GetMaterialParameters());
  55. // ------- Output -------
  56. DeferredMaterialOutput OUT;
  57. OUT.m_baseColor = float4(surface.baseColor, 1);
  58. OUT.m_roughnessMetal = float4(surface.roughnessLinear, surface.metallic, 0, 0);
  59. OUT.m_normal.rgb = EncodeNormalSignedOctahedron(surface.normal);
  60. OUT.m_normal.a = EncodeUnorm2BitFlags(o_enableIBL, o_specularF0_enableMultiScatterCompensation);
  61. #if OUTPUT_DEPTH
  62. // Can be modified in Parallax calculations in EvaluatePixelGeometry
  63. OUT.m_depth = IN.position.z;
  64. #endif
  65. return OUT;
  66. }