envmap_fragment.glsl.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. export default /* glsl */`
  2. #ifdef USE_ENVMAP
  3. #ifdef ENV_WORLDPOS
  4. vec3 cameraToFrag;
  5. if ( isOrthographic ) {
  6. cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );
  7. } else {
  8. cameraToFrag = normalize( vWorldPosition - cameraPosition );
  9. }
  10. // Transforming Normal Vectors with the Inverse Transformation
  11. vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
  12. #ifdef ENVMAP_MODE_REFLECTION
  13. vec3 reflectVec = reflect( cameraToFrag, worldNormal );
  14. #else
  15. vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );
  16. #endif
  17. #else
  18. vec3 reflectVec = vReflect;
  19. #endif
  20. #ifdef ENVMAP_TYPE_CUBE
  21. vec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );
  22. #elif defined( ENVMAP_TYPE_CUBE_UV )
  23. vec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );
  24. #elif defined( ENVMAP_TYPE_EQUIREC )
  25. reflectVec = normalize( reflectVec );
  26. vec2 sampleUV = equirectUv( reflectVec );
  27. vec4 envColor = texture2D( envMap, sampleUV );
  28. #elif defined( ENVMAP_TYPE_SPHERE )
  29. reflectVec = normalize( reflectVec );
  30. vec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );
  31. vec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );
  32. #else
  33. vec4 envColor = vec4( 0.0 );
  34. #endif
  35. #ifndef ENVMAP_TYPE_CUBE_UV
  36. envColor = envMapTexelToLinear( envColor );
  37. #endif
  38. #ifdef ENVMAP_BLENDING_MULTIPLY
  39. outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );
  40. #elif defined( ENVMAP_BLENDING_MIX )
  41. outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );
  42. #elif defined( ENVMAP_BLENDING_ADD )
  43. outgoingLight += envColor.xyz * specularStrength * reflectivity;
  44. #endif
  45. #endif
  46. `;