// TSL (Three.js Shading Language) Mesh Transmission Node Material
import { meshTransmissionMaterial, float, color, vec3 } from 'three/tsl';
const material = meshTransmissionMaterial();
material.ior = float(2.42);
material.thickness = float(1.20);
material.transmission = float(0.98);
material.roughness = float(0.05);
material.dispersion = float(0.044);
material.attenuationColor = color('#ffffff');
// GLSL Fragment Refraction Fallback
uniform float uIor;
uniform float uDispersion;
uniform float uThickness;
uniform vec3 uTint;
vec3 calculateChromaticDispersion(vec3 normal, vec3 viewDir) {
vec3 refrR = refract(viewDir, normal, 1.0 / (uIor - uDispersion));
vec3 refrG = refract(viewDir, normal, 1.0 / uIor);
vec3 refrB = refract(viewDir, normal, 1.0 / (uIor + uDispersion));
return vec3(refrR.r, refrG.g, refrB.b) * uTint;
}