transmission_fragment.glsl.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. export default /* glsl */`
  2. #ifdef USE_TRANSMISSION
  3. material.transmission = transmission;
  4. material.transmissionAlpha = 1.0;
  5. material.thickness = thickness;
  6. material.attenuationDistance = attenuationDistance;
  7. material.attenuationColor = attenuationColor;
  8. #ifdef USE_TRANSMISSIONMAP
  9. material.transmission *= texture2D( transmissionMap, vUv ).r;
  10. #endif
  11. #ifdef USE_THICKNESSMAP
  12. material.thickness *= texture2D( thicknessMap, vUv ).g;
  13. #endif
  14. vec3 pos = vWorldPosition;
  15. vec3 v = normalize( cameraPosition - pos );
  16. vec3 n = inverseTransformDirection( normal, viewMatrix );
  17. vec4 transmission = getIBLVolumeRefraction(
  18. n, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,
  19. pos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness,
  20. material.attenuationColor, material.attenuationDistance );
  21. material.transmissionAlpha = mix( material.transmissionAlpha, transmission.a, material.transmission );
  22. totalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission );
  23. #endif
  24. `;