|
@@ -1,9 +1,12 @@
|
|
|
export default /* glsl */`
|
|
|
#ifdef USE_TRANSMISSION
|
|
|
|
|
|
+ float transmissionFactor = transmission;
|
|
|
+ float thicknessFactor = thickness;
|
|
|
+
|
|
|
#ifdef USE_TRANSMISSIONMAP
|
|
|
|
|
|
- totalTransmission *= texture2D( transmissionMap, vUv ).r;
|
|
|
+ transmissionFactor *= texture2D( transmissionMap, vUv ).r;
|
|
|
|
|
|
#endif
|
|
|
|
|
@@ -15,19 +18,13 @@ export default /* glsl */`
|
|
|
|
|
|
vec3 pos = vWorldPosition.xyz / vWorldPosition.w;
|
|
|
vec3 v = normalize( cameraPosition - pos );
|
|
|
- vec3 viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );
|
|
|
float ior = ( 1.0 + 0.4 * reflectivity ) / ( 1.0 - 0.4 * reflectivity );
|
|
|
|
|
|
- // From https://google.github.io/filament/Filament.html#materialsystem/parameterization/remapping
|
|
|
- vec3 f0 = vec3( pow( ior - 1.0, 2.0 ) / pow( ior + 1.0, 2.0 ) );
|
|
|
- vec3 f90 = vec3( 1.0 );
|
|
|
-
|
|
|
- vec3 f_transmission = totalTransmission * getIBLVolumeRefraction(
|
|
|
- normal, v, viewDir, roughnessFactor, diffuseColor.rgb, f0, f90,
|
|
|
+ vec3 transmission = transmissionFactor * getIBLVolumeRefraction(
|
|
|
+ normal, v, roughnessFactor, material.diffuseColor, totalSpecular,
|
|
|
pos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,
|
|
|
- attenuationColor, attenuationDistance);
|
|
|
-
|
|
|
- diffuseColor.rgb = mix( diffuseColor.rgb, f_transmission, totalTransmission );
|
|
|
+ attenuationColor, attenuationDistance );
|
|
|
|
|
|
+ totalDiffuse = mix( totalDiffuse, transmission, transmissionFactor );
|
|
|
#endif
|
|
|
`;
|