light-map.chunk 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. // for legacy effects
  2. void SampleAndDecodeLightMapColor(out vec3 lightmapColor, out float dirShadow, out float ao, sampler2D lightingMap, vec2 luv, float lum, vec3 worldNormal)
  3. {
  4. // has radiant basis
  5. #if CC_LIGHT_MAP_VERSION > 2
  6. // has high precision data
  7. #elif CC_LIGHT_MAP_VERSION > 1
  8. vec4 dataLow = texture(lightingMap, luv);
  9. vec4 dataHigh = texture(lightingMap, luv + vec2(0.5, 0.0));
  10. lightmapColor.xyz = dataLow.xyz + dataHigh.xyz * 0.00392156862745098;
  11. lightmapColor.rgb *= lum;
  12. dirShadow = dataLow.a;
  13. ao = dataHigh.a;
  14. #else
  15. vec4 lightmap = texture(lightingMap, luv);
  16. lightmapColor = lightmap.rgb * lum;
  17. dirShadow = lightmap.a;
  18. ao = 1.0;
  19. #endif
  20. }
  21. // for surface shader
  22. void GetLightMapColor(out vec3 lightmapColor, out float dirShadow, out float ao, sampler2D lightingMap, vec2 luv, float lum, vec3 worldNormal)
  23. {
  24. vec4 lightmap;
  25. vec2 occlusion;
  26. SampleAndDecodeLightMapColor(lightmapColor, dirShadow, ao, lightingMap, luv, lum, worldNormal);
  27. #if CC_USE_HDR
  28. // convert from standard camera exposure parameters to current exposure value
  29. // baked in LDR scene still regarded as exposured with standard camera parameters
  30. lightmapColor.rgb *= cc_exposure.w * cc_exposure.x;
  31. #endif
  32. }