fog.chunk 1008 B

12345678910111213141516171819202122232425262728293031
  1. #pragma define-meta CC_USE_FOG range([0, 4])
  2. #pragma define CC_FOG_LINEAR 0
  3. #pragma define CC_FOG_EXP 1
  4. #pragma define CC_FOG_EXP_SQUARED 2
  5. #pragma define CC_FOG_LAYERED 3
  6. #pragma define CC_FOG_NONE 4
  7. #include <builtin/uniforms/cc-global>
  8. #if CC_USE_FOG != CC_FOG_NONE
  9. #include <common/effect/fog>
  10. #endif
  11. // Fog helper functions
  12. void CC_TRANSFER_FOG_BASE(vec4 pos, out float factor)
  13. {
  14. #if CC_USE_FOG == CC_FOG_LINEAR
  15. factor = LinearFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.y);
  16. #elif CC_USE_FOG == CC_FOG_EXP
  17. factor = ExpFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.z, cc_fogAdd.z);
  18. #elif CC_USE_FOG == CC_FOG_EXP_SQUARED
  19. factor = ExpSquaredFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.z, cc_fogAdd.z);
  20. #elif CC_USE_FOG == CC_FOG_LAYERED
  21. factor = LayeredFog(pos, cc_cameraPos.xyz, cc_fogAdd.x, cc_fogAdd.y, cc_fogAdd.z);
  22. #else
  23. factor = 1.0;
  24. #endif
  25. }
  26. void CC_APPLY_FOG_BASE(inout vec4 color, float factor) {
  27. color = vec4(mix(cc_fogColor.rgb, color.rgb, factor), color.a);
  28. }