three
Version:
JavaScript 3D library
121 lines (69 loc) • 2.89 kB
JavaScript
export default /* glsl */`
PhysicalMaterial material;
material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );
vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );
float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );
material.roughness = max( roughnessFactor, 0.0525 );// 0.0525 corresponds to the base mip of a 256 cubemap.
material.roughness += geometryRoughness;
material.roughness = min( material.roughness, 1.0 );
material.ior = ior;
float specularIntensityFactor = specularIntensity;
vec3 specularColorFactor = specularColor;
specularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;
specularColorFactor *= texture2D( specularColorMap, vUv ).rgb;
material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );
float specularIntensityFactor = 1.0;
vec3 specularColorFactor = vec3( 1.0 );
material.specularF90 = 1.0;
material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );
material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );
material.specularF90 = 1.0;
material.clearcoat = clearcoat;
material.clearcoatRoughness = clearcoatRoughness;
material.clearcoatF0 = vec3( 0.04 );
material.clearcoatF90 = 1.0;
material.clearcoat *= texture2D( clearcoatMap, vUv ).x;
material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;
material.clearcoat = saturate( material.clearcoat ); // Burley clearcoat model
material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );
material.clearcoatRoughness += geometryRoughness;
material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );
material.iridescence = iridescence;
material.iridescenceIOR = iridescenceIOR;
material.iridescence *= texture2D( iridescenceMap, vUv ).r;
material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vUv ).g + iridescenceThicknessMinimum;
material.iridescenceThickness = iridescenceThicknessMaximum;
material.sheenColor = sheenColor;
material.sheenColor *= texture2D( sheenColorMap, vUv ).rgb;
material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );
material.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;
`;