sh.chunk 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #pragma define-meta CC_USE_LIGHT_PROBE default(false)
  2. #if CC_USE_LIGHT_PROBE
  3. vec3 SHEvaluate(vec3 normal)
  4. {
  5. vec3 result;
  6. #if USE_INSTANCING
  7. // calculate linear and const terms
  8. vec4 normal4 = vec4(normal, 1.0);
  9. result.r = dot(v_sh_linear_const_r, normal4);
  10. result.g = dot(v_sh_linear_const_g, normal4);
  11. result.b = dot(v_sh_linear_const_b, normal4);
  12. #else
  13. // calculate linear and const terms
  14. vec4 normal4 = vec4(normal, 1.0);
  15. result.r = dot(cc_sh_linear_const_r, normal4);
  16. result.g = dot(cc_sh_linear_const_g, normal4);
  17. result.b = dot(cc_sh_linear_const_b, normal4);
  18. // calculate quadratic terms
  19. vec4 n14 = normal.xyzz * normal.yzzx;
  20. float n5 = normal.x * normal.x - normal.y * normal.y;
  21. result.r += dot(cc_sh_quadratic_r, n14);
  22. result.g += dot(cc_sh_quadratic_g, n14);
  23. result.b += dot(cc_sh_quadratic_b, n14);
  24. result += (cc_sh_quadratic_a.rgb * n5);
  25. #endif
  26. #if CC_USE_HDR
  27. // convert from standard camera exposure parameters to current exposure value
  28. // baked in LDR scene still regarded as exposured with standard camera parameters
  29. result *= cc_exposure.w * cc_exposure.x;
  30. #endif
  31. return result;
  32. }
  33. #endif