AZSL_HorizontalPattern.txt 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. #include <viewsrg.srgi>
  8. #include <Atom/Features/Pipeline/Forward/ForwardPassSrg.azsli>
  9. #include <Atom/Features/PBR/DefaultObjectSrg.azsli>
  10. #include <Atom/RPI/ShaderResourceGroups/DefaultDrawSrg.azsli>
  11. option bool o_wavyLines = false;
  12. ShaderResourceGroup MaterialSrg : SRG_PerMaterial
  13. {
  14. float4 m_colorA;
  15. float4 m_colorB;
  16. }
  17. struct VertexInput
  18. {
  19. float3 m_position : POSITION;
  20. };
  21. struct VertexOutput
  22. {
  23. float4 m_position : SV_Position;
  24. float3 m_worldPosition : TexCoord;
  25. };
  26. VertexOutput MainVS(VertexInput input)
  27. {
  28. const float4x4 objectToWorldMatrix = ObjectSrg::GetWorldMatrix();
  29. VertexOutput output;
  30. float3 worldPosition = mul(objectToWorldMatrix, float4(input.m_position, 1)).xyz;
  31. output.m_worldPosition = worldPosition;
  32. output.m_position = mul(ViewSrg::m_viewProjectionMatrix, float4(worldPosition, 1.0));
  33. return output;
  34. }
  35. struct PixelOutput
  36. {
  37. float4 m_color : SV_Target0;
  38. };
  39. PixelOutput MainPS(VertexOutput input)
  40. {
  41. PixelOutput output;
  42. float scale = 10;
  43. float stripeThickness = 0.3;
  44. float stripeShift = 0.66;
  45. float position = input.m_worldPosition.z;
  46. if(o_wavyLines)
  47. {
  48. position += sin(input.m_worldPosition.x * 10) * 0.05;
  49. }
  50. float t = step(frac(position * scale + stripeShift), stripeThickness);
  51. output.m_color = lerp(MaterialSrg::m_colorA, MaterialSrg::m_colorB, t);
  52. output.m_color.a = 0.5;
  53. return output;
  54. }