ForwardShadingFog.ankiprog 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma anki technique ForwardLegacy vert pixel
  6. #include <AnKi/Shaders/ForwardShadingCommon.hlsl>
  7. #include <AnKi/Shaders/Functions.hlsl>
  8. #pragma anki struct AnKiLocalConstants
  9. #pragma anki member Vec3 m_fogColor
  10. #pragma anki member F32 m_fogAlphaScale
  11. #pragma anki member F32 m_fogDistanceOfMaxThikness
  12. #pragma anki struct_end
  13. struct VertIn
  14. {
  15. U32 m_svVertexId : SV_VERTEXID;
  16. };
  17. struct VertOut
  18. {
  19. Vec4 m_svPosition : SV_POSITION;
  20. F32 m_zVSpace : ZVSPACE;
  21. nointerpolation U32 m_constantsOffset : CONSTANTS_OFFSET;
  22. };
  23. #if ANKI_VERTEX_SHADER
  24. VertOut main(VertIn input)
  25. {
  26. VertOut output;
  27. const GpuScenePerDraw perDraw = getGpuScenePerDraw();
  28. const GpuSceneMeshLod mesh = g_meshLods[perDraw.m_meshLodIndex];
  29. const Mat3x4 worldTransform = g_transforms[perDraw.m_worldTransformsIndex];
  30. const UnpackedMeshVertex vertex = loadVertex(mesh, input.m_svVertexId, false);
  31. const Vec3 worldPos = mul(worldTransform, Vec4(vertex.m_position, 1.0));
  32. output.m_svPosition = mul(g_globalConstants.m_viewProjectionMatrix, Vec4(worldPos, 1.0));
  33. const Vec3 viewPos = mul(g_globalConstants.m_viewTransform, Vec4(worldPos, 1.0));
  34. output.m_zVSpace = viewPos.z;
  35. output.m_constantsOffset = perDraw.m_constantsOffset;
  36. return output;
  37. }
  38. #endif // ANKI_VERTEX_SHADER
  39. #if ANKI_PIXEL_SHADER
  40. PixelOut main(VertOut input)
  41. {
  42. PixelOut output = (PixelOut)0;
  43. const AnKiLocalConstants localConstants = loadAnKiLocalConstants(g_gpuScene, input.m_constantsOffset);
  44. fog(localConstants.m_fogColor, localConstants.m_fogAlphaScale, localConstants.m_fogDistanceOfMaxThikness, input.m_svPosition, input.m_zVSpace,
  45. output);
  46. return output;
  47. }
  48. #endif // ANKI_PIXEL_SHADER