ReflectionProbeVisualization.azsli 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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 ENABLE_DEBUG_MODIFY_OUTPUT 0
  9. #if MATERIALPIPELINE_SHADER_HAS_PIXEL_STAGE
  10. #define MATERIAL_HAS_UVS 0
  11. VsOutput EvaluateVertexGeometry(
  12. float3 position,
  13. float3 normal,
  14. float4 tangent,
  15. float2 uv0,
  16. float2 uv1,
  17. uint instanceId)
  18. {
  19. VsOutput output;
  20. // TODO: this assumes a forward+ - pipeline
  21. VsSystemValues SV;
  22. SV.m_instanceId = instanceId;
  23. float4x4 objectToWorld = GetObjectToWorldMatrix(SV);
  24. float4 worldPosition = mul(objectToWorld, float4(position, 1.0));
  25. float4x4 viewProjectionMatrix = GetViewProjectionMatrix(SV);
  26. output.worldPosition = worldPosition.xyz;
  27. output.position = mul(viewProjectionMatrix, worldPosition);
  28. output.normal = normal;
  29. return output;
  30. }
  31. VsOutput EvaluateVertexGeometry(VsInput IN, VsSystemValues SV, const MaterialParameters params)
  32. {
  33. VsOutput output;
  34. float4x4 objectToWorld = GetObjectToWorldMatrix(SV);
  35. float4 worldPosition = mul(objectToWorld, float4(IN.position, 1.0));
  36. float4x4 viewProjectionMatrix = GetViewProjectionMatrix(SV);
  37. output.worldPosition = worldPosition.xyz;
  38. output.position = mul(viewProjectionMatrix, worldPosition);
  39. output.normal = IN.normal;
  40. return output;
  41. }
  42. PixelGeometryData EvaluatePixelGeometry(VsOutput IN, VsSystemValues SV, bool isFrontFace, const MaterialParameters params)
  43. {
  44. PixelGeometryData geoData;
  45. geoData.positionWS = IN.worldPosition;
  46. geoData.vertexNormal = normalize(IN.normal);
  47. [unroll]
  48. for(uint i = 0; i < UvSetCount; ++i)
  49. {
  50. geoData.uvs[i] = float2(0, 0);
  51. }
  52. return geoData;
  53. }
  54. Surface EvaluateSurface(VsOutput IN, VsSystemValues SV, PixelGeometryData geoData, const MaterialParameters params)
  55. {
  56. Surface surface;
  57. surface.lightingChannels = GetLightingChannelMask(SV);
  58. surface.position = geoData.positionWS;
  59. surface.vertexNormal = geoData.vertexNormal;
  60. surface.normal = geoData.vertexNormal;
  61. float3 baseColor = float3(1,1,1);
  62. float specularF0Factor = 0.5;
  63. float metallic = 1;
  64. surface.SetAlbedoAndSpecularF0(baseColor, specularF0Factor, metallic);
  65. surface.roughnessLinear = 0;
  66. surface.CalculateRoughnessA();
  67. return surface;
  68. }
  69. // use the lighting model (lightingData, BRDF - function and ApplyLights) from the BasePBR
  70. #include <Atom/Feature/Common/Assets/Shaders/Materials/BasePBR/BasePBR_LightingEval.azsli>
  71. #else
  72. #include <Atom/Feature/Common/Assets/Shaders/Materials/DepthPass_VertexEval.azsli>
  73. #endif