Skip to content

Latest commit

 

History

History
52 lines (45 loc) · 1.29 KB

mesh-refraction-material.mdx

File metadata and controls

52 lines (45 loc) · 1.29 KB
title sourcecode
MeshRefractionMaterial
src/core/MeshRefractionMaterial.tsx
  • A convincing Glass/Diamond refraction material.

    type MeshRefractionMaterialProps = JSX.IntrinsicElements['shaderMaterial'] & {
      /** Environment map */
      envMap: THREE.CubeTexture | THREE.Texture
      /** Number of ray-cast bounces, it can be expensive to have too many, 2 */
      bounces?: number
      /** Refraction index, 2.4 */
      ior?: number
      /** Fresnel (strip light), 0 */
      fresnel?: number
      /** RGB shift intensity, can be expensive, 0 */
      aberrationStrength?: number
      /** Color, white */
      color?: ReactThreeFiber.Color
      /** If this is on it uses fewer ray casts for the RGB shift sacrificing physical accuracy, true */
      fastChroma?: boolean
    }

    If you want it to reflect other objects in the scene you best pair it with a cube-camera.

    <CubeCamera>
      {(texture) => (
        <mesh geometry={diamondGeometry} {...props}>
          <MeshRefractionMaterial envMap={texture} />
        </mesh>
      )}
    </CubeCamera>

    Otherwise just pass it an environment map.

    const texture = useLoader(RGBELoader, "/textures/royal_esplanade_1k.hdr")
    return (
      <mesh geometry={diamondGeometry} {...props}>
        <MeshRefractionMaterial envMap={texture} />