Skip to content

⬅️ Back to Table of Contents

📄 WebGLMaterials.js

📊 Analysis Summary

Metric Count
🔧 Functions 15
📦 Imports 4
📊 Variables & Constants 5

📚 Table of Contents

🛠️ File Location:

📂 src/renderers/webgl/WebGLMaterials.js

📦 Imports

Name Source
BackSide ../../constants.js
getUnlitUniformColorSpace ../shaders/UniformsUtils.js
Euler ../../math/Euler.js
Matrix4 ../../math/Matrix4.js

Variables & Constants

Name Type Kind Value Exported
_e1 Euler let/var new Euler()
_m1 Matrix4 let/var new Matrix4()
envMap any let/var materialProperties.envMap
envMapRotation any let/var materialProperties.envMapRotation
light any let/var properties.get( material ).light

Functions

WebGLMaterials(renderer: any, properties: any): { refreshFogUniforms: (uniforms: any, fog: any) => void; refreshMaterialUniforms: (uniforms: any, material: any, pixelRatio: any, height: any, transmissionRenderTarget: any) => void; }

Parameters:

  • renderer any
  • properties any

Returns: { refreshFogUniforms: (uniforms: any, fog: any) => void; refreshMaterialUniforms: (uniforms: any, material: any, pixelRatio: any, height: any, transmissionRenderTarget: any) => void; }

Calls:

  • map.updateMatrix
  • uniform.value.copy
  • fog.color.getRGB
  • getUnlitUniformColorSpace (from ../shaders/UniformsUtils.js)
  • refreshUniformsCommon
  • refreshUniformsToon
  • refreshUniformsPhong
  • refreshUniformsStandard
  • refreshUniformsPhysical
  • refreshUniformsMatcap
  • refreshUniformsDistance
  • refreshUniformsLine
  • refreshUniformsDash
  • refreshUniformsPoints
  • refreshUniformsSprites
  • uniforms.color.value.copy
  • uniforms.diffuse.value.copy
  • uniforms.emissive.value.copy( material.emissive ).multiplyScalar
  • refreshTransformUniform
  • uniforms.normalScale.value.copy
  • uniforms.normalScale.value.negate
  • properties.get
  • _e1.copy
  • uniforms.envMapRotation.value.setFromMatrix4
  • _m1.makeRotationFromEuler
  • uniforms.specular.value.copy
  • Math.max
  • uniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar
  • uniforms.clearcoatNormalScale.value.copy
  • uniforms.clearcoatNormalScale.value.negate
  • uniforms.transmissionSamplerSize.value.set
  • uniforms.attenuationColor.value.copy
  • uniforms.anisotropyVector.value.set
  • Math.cos
  • Math.sin
  • uniforms.specularColor.value.copy
  • uniforms.referencePosition.value.setFromMatrixPosition

Internal Comments:

// accommodate left-handed frame (x4)
// environment maps which are not cube render targets or PMREMs follow a different convention (x4)
//uniforms.envMap.value = material.envMap; // part of uniforms common (x5)

Code
function WebGLMaterials( renderer, properties ) {

    function refreshTransformUniform( map, uniform ) {

        if ( map.matrixAutoUpdate === true ) {

            map.updateMatrix();

        }

        uniform.value.copy( map.matrix );

    }

    function refreshFogUniforms( uniforms, fog ) {

        fog.color.getRGB( uniforms.fogColor.value, getUnlitUniformColorSpace( renderer ) );

        if ( fog.isFog ) {

            uniforms.fogNear.value = fog.near;
            uniforms.fogFar.value = fog.far;

        } else if ( fog.isFogExp2 ) {

            uniforms.fogDensity.value = fog.density;

        }

    }

    function refreshMaterialUniforms( uniforms, material, pixelRatio, height, transmissionRenderTarget ) {

        if ( material.isMeshBasicMaterial ) {

            refreshUniformsCommon( uniforms, material );

        } else if ( material.isMeshLambertMaterial ) {

            refreshUniformsCommon( uniforms, material );

        } else if ( material.isMeshToonMaterial ) {

            refreshUniformsCommon( uniforms, material );
            refreshUniformsToon( uniforms, material );

        } else if ( material.isMeshPhongMaterial ) {

            refreshUniformsCommon( uniforms, material );
            refreshUniformsPhong( uniforms, material );

        } else if ( material.isMeshStandardMaterial ) {

            refreshUniformsCommon( uniforms, material );
            refreshUniformsStandard( uniforms, material );

            if ( material.isMeshPhysicalMaterial ) {

                refreshUniformsPhysical( uniforms, material, transmissionRenderTarget );

            }

        } else if ( material.isMeshMatcapMaterial ) {

            refreshUniformsCommon( uniforms, material );
            refreshUniformsMatcap( uniforms, material );

        } else if ( material.isMeshDepthMaterial ) {

            refreshUniformsCommon( uniforms, material );

        } else if ( material.isMeshDistanceMaterial ) {

            refreshUniformsCommon( uniforms, material );
            refreshUniformsDistance( uniforms, material );

        } else if ( material.isMeshNormalMaterial ) {

            refreshUniformsCommon( uniforms, material );

        } else if ( material.isLineBasicMaterial ) {

            refreshUniformsLine( uniforms, material );

            if ( material.isLineDashedMaterial ) {

                refreshUniformsDash( uniforms, material );

            }

        } else if ( material.isPointsMaterial ) {

            refreshUniformsPoints( uniforms, material, pixelRatio, height );

        } else if ( material.isSpriteMaterial ) {

            refreshUniformsSprites( uniforms, material );

        } else if ( material.isShadowMaterial ) {

            uniforms.color.value.copy( material.color );
            uniforms.opacity.value = material.opacity;

        } else if ( material.isShaderMaterial ) {

            material.uniformsNeedUpdate = false; // #15581

        }

    }

    function refreshUniformsCommon( uniforms, material ) {

        uniforms.opacity.value = material.opacity;

        if ( material.color ) {

            uniforms.diffuse.value.copy( material.color );

        }

        if ( material.emissive ) {

            uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );

        }

        if ( material.map ) {

            uniforms.map.value = material.map;

            refreshTransformUniform( material.map, uniforms.mapTransform );

        }

        if ( material.alphaMap ) {

            uniforms.alphaMap.value = material.alphaMap;

            refreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );

        }

        if ( material.bumpMap ) {

            uniforms.bumpMap.value = material.bumpMap;

            refreshTransformUniform( material.bumpMap, uniforms.bumpMapTransform );

            uniforms.bumpScale.value = material.bumpScale;

            if ( material.side === BackSide ) {

                uniforms.bumpScale.value *= - 1;

            }

        }

        if ( material.normalMap ) {

            uniforms.normalMap.value = material.normalMap;

            refreshTransformUniform( material.normalMap, uniforms.normalMapTransform );

            uniforms.normalScale.value.copy( material.normalScale );

            if ( material.side === BackSide ) {

                uniforms.normalScale.value.negate();

            }

        }

        if ( material.displacementMap ) {

            uniforms.displacementMap.value = material.displacementMap;

            refreshTransformUniform( material.displacementMap, uniforms.displacementMapTransform );

            uniforms.displacementScale.value = material.displacementScale;
            uniforms.displacementBias.value = material.displacementBias;

        }

        if ( material.emissiveMap ) {

            uniforms.emissiveMap.value = material.emissiveMap;

            refreshTransformUniform( material.emissiveMap, uniforms.emissiveMapTransform );

        }

        if ( material.specularMap ) {

            uniforms.specularMap.value = material.specularMap;

            refreshTransformUniform( material.specularMap, uniforms.specularMapTransform );

        }

        if ( material.alphaTest > 0 ) {

            uniforms.alphaTest.value = material.alphaTest;

        }

        const materialProperties = properties.get( material );

        const envMap = materialProperties.envMap;
        const envMapRotation = materialProperties.envMapRotation;

        if ( envMap ) {

            uniforms.envMap.value = envMap;

            _e1.copy( envMapRotation );

            // accommodate left-handed frame
            _e1.x *= - 1; _e1.y *= - 1; _e1.z *= - 1;

            if ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) {

                // environment maps which are not cube render targets or PMREMs follow a different convention
                _e1.y *= - 1;
                _e1.z *= - 1;

            }

            uniforms.envMapRotation.value.setFromMatrix4( _m1.makeRotationFromEuler( _e1 ) );

            uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;

            uniforms.reflectivity.value = material.reflectivity;
            uniforms.ior.value = material.ior;
            uniforms.refractionRatio.value = material.refractionRatio;

        }

        if ( material.lightMap ) {

            uniforms.lightMap.value = material.lightMap;
            uniforms.lightMapIntensity.value = material.lightMapIntensity;

            refreshTransformUniform( material.lightMap, uniforms.lightMapTransform );

        }

        if ( material.aoMap ) {

            uniforms.aoMap.value = material.aoMap;
            uniforms.aoMapIntensity.value = material.aoMapIntensity;

            refreshTransformUniform( material.aoMap, uniforms.aoMapTransform );

        }

    }

    function refreshUniformsLine( uniforms, material ) {

        uniforms.diffuse.value.copy( material.color );
        uniforms.opacity.value = material.opacity;

        if ( material.map ) {

            uniforms.map.value = material.map;

            refreshTransformUniform( material.map, uniforms.mapTransform );

        }

    }

    function refreshUniformsDash( uniforms, material ) {

        uniforms.dashSize.value = material.dashSize;
        uniforms.totalSize.value = material.dashSize + material.gapSize;
        uniforms.scale.value = material.scale;

    }

    function refreshUniformsPoints( uniforms, material, pixelRatio, height ) {

        uniforms.diffuse.value.copy( material.color );
        uniforms.opacity.value = material.opacity;
        uniforms.size.value = material.size * pixelRatio;
        uniforms.scale.value = height * 0.5;

        if ( material.map ) {

            uniforms.map.value = material.map;

            refreshTransformUniform( material.map, uniforms.uvTransform );

        }

        if ( material.alphaMap ) {

            uniforms.alphaMap.value = material.alphaMap;

            refreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );

        }

        if ( material.alphaTest > 0 ) {

            uniforms.alphaTest.value = material.alphaTest;

        }

    }

    function refreshUniformsSprites( uniforms, material ) {

        uniforms.diffuse.value.copy( material.color );
        uniforms.opacity.value = material.opacity;
        uniforms.rotation.value = material.rotation;

        if ( material.map ) {

            uniforms.map.value = material.map;

            refreshTransformUniform( material.map, uniforms.mapTransform );

        }

        if ( material.alphaMap ) {

            uniforms.alphaMap.value = material.alphaMap;

            refreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );

        }

        if ( material.alphaTest > 0 ) {

            uniforms.alphaTest.value = material.alphaTest;

        }

    }

    function refreshUniformsPhong( uniforms, material ) {

        uniforms.specular.value.copy( material.specular );
        uniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )

    }

    function refreshUniformsToon( uniforms, material ) {

        if ( material.gradientMap ) {

            uniforms.gradientMap.value = material.gradientMap;

        }

    }

    function refreshUniformsStandard( uniforms, material ) {

        uniforms.metalness.value = material.metalness;

        if ( material.metalnessMap ) {

            uniforms.metalnessMap.value = material.metalnessMap;

            refreshTransformUniform( material.metalnessMap, uniforms.metalnessMapTransform );

        }

        uniforms.roughness.value = material.roughness;

        if ( material.roughnessMap ) {

            uniforms.roughnessMap.value = material.roughnessMap;

            refreshTransformUniform( material.roughnessMap, uniforms.roughnessMapTransform );

        }

        if ( material.envMap ) {

            //uniforms.envMap.value = material.envMap; // part of uniforms common

            uniforms.envMapIntensity.value = material.envMapIntensity;

        }

    }

    function refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ) {

        uniforms.ior.value = material.ior; // also part of uniforms common

        if ( material.sheen > 0 ) {

            uniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar( material.sheen );

            uniforms.sheenRoughness.value = material.sheenRoughness;

            if ( material.sheenColorMap ) {

                uniforms.sheenColorMap.value = material.sheenColorMap;

                refreshTransformUniform( material.sheenColorMap, uniforms.sheenColorMapTransform );

            }

            if ( material.sheenRoughnessMap ) {

                uniforms.sheenRoughnessMap.value = material.sheenRoughnessMap;

                refreshTransformUniform( material.sheenRoughnessMap, uniforms.sheenRoughnessMapTransform );

            }

        }

        if ( material.clearcoat > 0 ) {

            uniforms.clearcoat.value = material.clearcoat;
            uniforms.clearcoatRoughness.value = material.clearcoatRoughness;

            if ( material.clearcoatMap ) {

                uniforms.clearcoatMap.value = material.clearcoatMap;

                refreshTransformUniform( material.clearcoatMap, uniforms.clearcoatMapTransform );

            }

            if ( material.clearcoatRoughnessMap ) {

                uniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;

                refreshTransformUniform( material.clearcoatRoughnessMap, uniforms.clearcoatRoughnessMapTransform );

            }

            if ( material.clearcoatNormalMap ) {

                uniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;

                refreshTransformUniform( material.clearcoatNormalMap, uniforms.clearcoatNormalMapTransform );

                uniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );

                if ( material.side === BackSide ) {

                    uniforms.clearcoatNormalScale.value.negate();

                }

            }

        }

        if ( material.dispersion > 0 ) {

            uniforms.dispersion.value = material.dispersion;

        }

        if ( material.iridescence > 0 ) {

            uniforms.iridescence.value = material.iridescence;
            uniforms.iridescenceIOR.value = material.iridescenceIOR;
            uniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessRange[ 0 ];
            uniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessRange[ 1 ];

            if ( material.iridescenceMap ) {

                uniforms.iridescenceMap.value = material.iridescenceMap;

                refreshTransformUniform( material.iridescenceMap, uniforms.iridescenceMapTransform );

            }

            if ( material.iridescenceThicknessMap ) {

                uniforms.iridescenceThicknessMap.value = material.iridescenceThicknessMap;

                refreshTransformUniform( material.iridescenceThicknessMap, uniforms.iridescenceThicknessMapTransform );

            }

        }

        if ( material.transmission > 0 ) {

            uniforms.transmission.value = material.transmission;
            uniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture;
            uniforms.transmissionSamplerSize.value.set( transmissionRenderTarget.width, transmissionRenderTarget.height );

            if ( material.transmissionMap ) {

                uniforms.transmissionMap.value = material.transmissionMap;

                refreshTransformUniform( material.transmissionMap, uniforms.transmissionMapTransform );

            }

            uniforms.thickness.value = material.thickness;

            if ( material.thicknessMap ) {

                uniforms.thicknessMap.value = material.thicknessMap;

                refreshTransformUniform( material.thicknessMap, uniforms.thicknessMapTransform );

            }

            uniforms.attenuationDistance.value = material.attenuationDistance;
            uniforms.attenuationColor.value.copy( material.attenuationColor );

        }

        if ( material.anisotropy > 0 ) {

            uniforms.anisotropyVector.value.set( material.anisotropy * Math.cos( material.anisotropyRotation ), material.anisotropy * Math.sin( material.anisotropyRotation ) );

            if ( material.anisotropyMap ) {

                uniforms.anisotropyMap.value = material.anisotropyMap;

                refreshTransformUniform( material.anisotropyMap, uniforms.anisotropyMapTransform );

            }

        }

        uniforms.specularIntensity.value = material.specularIntensity;
        uniforms.specularColor.value.copy( material.specularColor );

        if ( material.specularColorMap ) {

            uniforms.specularColorMap.value = material.specularColorMap;

            refreshTransformUniform( material.specularColorMap, uniforms.specularColorMapTransform );

        }

        if ( material.specularIntensityMap ) {

            uniforms.specularIntensityMap.value = material.specularIntensityMap;

            refreshTransformUniform( material.specularIntensityMap, uniforms.specularIntensityMapTransform );

        }

    }

    function refreshUniformsMatcap( uniforms, material ) {

        if ( material.matcap ) {

            uniforms.matcap.value = material.matcap;

        }

    }

    function refreshUniformsDistance( uniforms, material ) {

        const light = properties.get( material ).light;

        uniforms.referencePosition.value.setFromMatrixPosition( light.matrixWorld );
        uniforms.nearDistance.value = light.shadow.camera.near;
        uniforms.farDistance.value = light.shadow.camera.far;

    }

    return {
        refreshFogUniforms: refreshFogUniforms,
        refreshMaterialUniforms: refreshMaterialUniforms
    };

}

refreshTransformUniform(map: any, uniform: any): void

Parameters:

  • map any
  • uniform any

Returns: void

Calls:

  • map.updateMatrix
  • uniform.value.copy
Code
function refreshTransformUniform( map, uniform ) {

        if ( map.matrixAutoUpdate === true ) {

            map.updateMatrix();

        }

        uniform.value.copy( map.matrix );

    }

refreshFogUniforms(uniforms: any, fog: any): void

Parameters:

  • uniforms any
  • fog any

Returns: void

Calls:

  • fog.color.getRGB
  • getUnlitUniformColorSpace (from ../shaders/UniformsUtils.js)
Code
function refreshFogUniforms( uniforms, fog ) {

        fog.color.getRGB( uniforms.fogColor.value, getUnlitUniformColorSpace( renderer ) );

        if ( fog.isFog ) {

            uniforms.fogNear.value = fog.near;
            uniforms.fogFar.value = fog.far;

        } else if ( fog.isFogExp2 ) {

            uniforms.fogDensity.value = fog.density;

        }

    }

refreshMaterialUniforms(uniforms: any, material: any, pixelRatio: any, height: any, transmissionRenderTarget: any): void

Parameters:

  • uniforms any
  • material any
  • pixelRatio any
  • height any
  • transmissionRenderTarget any

Returns: void

Calls:

  • refreshUniformsCommon
  • refreshUniformsToon
  • refreshUniformsPhong
  • refreshUniformsStandard
  • refreshUniformsPhysical
  • refreshUniformsMatcap
  • refreshUniformsDistance
  • refreshUniformsLine
  • refreshUniformsDash
  • refreshUniformsPoints
  • refreshUniformsSprites
  • uniforms.color.value.copy
Code
function refreshMaterialUniforms( uniforms, material, pixelRatio, height, transmissionRenderTarget ) {

        if ( material.isMeshBasicMaterial ) {

            refreshUniformsCommon( uniforms, material );

        } else if ( material.isMeshLambertMaterial ) {

            refreshUniformsCommon( uniforms, material );

        } else if ( material.isMeshToonMaterial ) {

            refreshUniformsCommon( uniforms, material );
            refreshUniformsToon( uniforms, material );

        } else if ( material.isMeshPhongMaterial ) {

            refreshUniformsCommon( uniforms, material );
            refreshUniformsPhong( uniforms, material );

        } else if ( material.isMeshStandardMaterial ) {

            refreshUniformsCommon( uniforms, material );
            refreshUniformsStandard( uniforms, material );

            if ( material.isMeshPhysicalMaterial ) {

                refreshUniformsPhysical( uniforms, material, transmissionRenderTarget );

            }

        } else if ( material.isMeshMatcapMaterial ) {

            refreshUniformsCommon( uniforms, material );
            refreshUniformsMatcap( uniforms, material );

        } else if ( material.isMeshDepthMaterial ) {

            refreshUniformsCommon( uniforms, material );

        } else if ( material.isMeshDistanceMaterial ) {

            refreshUniformsCommon( uniforms, material );
            refreshUniformsDistance( uniforms, material );

        } else if ( material.isMeshNormalMaterial ) {

            refreshUniformsCommon( uniforms, material );

        } else if ( material.isLineBasicMaterial ) {

            refreshUniformsLine( uniforms, material );

            if ( material.isLineDashedMaterial ) {

                refreshUniformsDash( uniforms, material );

            }

        } else if ( material.isPointsMaterial ) {

            refreshUniformsPoints( uniforms, material, pixelRatio, height );

        } else if ( material.isSpriteMaterial ) {

            refreshUniformsSprites( uniforms, material );

        } else if ( material.isShadowMaterial ) {

            uniforms.color.value.copy( material.color );
            uniforms.opacity.value = material.opacity;

        } else if ( material.isShaderMaterial ) {

            material.uniformsNeedUpdate = false; // #15581

        }

    }

refreshUniformsCommon(uniforms: any, material: any): void

Parameters:

  • uniforms any
  • material any

Returns: void

Calls:

  • uniforms.diffuse.value.copy
  • uniforms.emissive.value.copy( material.emissive ).multiplyScalar
  • refreshTransformUniform
  • uniforms.normalScale.value.copy
  • uniforms.normalScale.value.negate
  • properties.get
  • _e1.copy
  • uniforms.envMapRotation.value.setFromMatrix4
  • _m1.makeRotationFromEuler

Internal Comments:

// accommodate left-handed frame (x4)
// environment maps which are not cube render targets or PMREMs follow a different convention (x4)

Code
function refreshUniformsCommon( uniforms, material ) {

        uniforms.opacity.value = material.opacity;

        if ( material.color ) {

            uniforms.diffuse.value.copy( material.color );

        }

        if ( material.emissive ) {

            uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );

        }

        if ( material.map ) {

            uniforms.map.value = material.map;

            refreshTransformUniform( material.map, uniforms.mapTransform );

        }

        if ( material.alphaMap ) {

            uniforms.alphaMap.value = material.alphaMap;

            refreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );

        }

        if ( material.bumpMap ) {

            uniforms.bumpMap.value = material.bumpMap;

            refreshTransformUniform( material.bumpMap, uniforms.bumpMapTransform );

            uniforms.bumpScale.value = material.bumpScale;

            if ( material.side === BackSide ) {

                uniforms.bumpScale.value *= - 1;

            }

        }

        if ( material.normalMap ) {

            uniforms.normalMap.value = material.normalMap;

            refreshTransformUniform( material.normalMap, uniforms.normalMapTransform );

            uniforms.normalScale.value.copy( material.normalScale );

            if ( material.side === BackSide ) {

                uniforms.normalScale.value.negate();

            }

        }

        if ( material.displacementMap ) {

            uniforms.displacementMap.value = material.displacementMap;

            refreshTransformUniform( material.displacementMap, uniforms.displacementMapTransform );

            uniforms.displacementScale.value = material.displacementScale;
            uniforms.displacementBias.value = material.displacementBias;

        }

        if ( material.emissiveMap ) {

            uniforms.emissiveMap.value = material.emissiveMap;

            refreshTransformUniform( material.emissiveMap, uniforms.emissiveMapTransform );

        }

        if ( material.specularMap ) {

            uniforms.specularMap.value = material.specularMap;

            refreshTransformUniform( material.specularMap, uniforms.specularMapTransform );

        }

        if ( material.alphaTest > 0 ) {

            uniforms.alphaTest.value = material.alphaTest;

        }

        const materialProperties = properties.get( material );

        const envMap = materialProperties.envMap;
        const envMapRotation = materialProperties.envMapRotation;

        if ( envMap ) {

            uniforms.envMap.value = envMap;

            _e1.copy( envMapRotation );

            // accommodate left-handed frame
            _e1.x *= - 1; _e1.y *= - 1; _e1.z *= - 1;

            if ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) {

                // environment maps which are not cube render targets or PMREMs follow a different convention
                _e1.y *= - 1;
                _e1.z *= - 1;

            }

            uniforms.envMapRotation.value.setFromMatrix4( _m1.makeRotationFromEuler( _e1 ) );

            uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;

            uniforms.reflectivity.value = material.reflectivity;
            uniforms.ior.value = material.ior;
            uniforms.refractionRatio.value = material.refractionRatio;

        }

        if ( material.lightMap ) {

            uniforms.lightMap.value = material.lightMap;
            uniforms.lightMapIntensity.value = material.lightMapIntensity;

            refreshTransformUniform( material.lightMap, uniforms.lightMapTransform );

        }

        if ( material.aoMap ) {

            uniforms.aoMap.value = material.aoMap;
            uniforms.aoMapIntensity.value = material.aoMapIntensity;

            refreshTransformUniform( material.aoMap, uniforms.aoMapTransform );

        }

    }

refreshUniformsLine(uniforms: any, material: any): void

Parameters:

  • uniforms any
  • material any

Returns: void

Calls:

  • uniforms.diffuse.value.copy
  • refreshTransformUniform
Code
function refreshUniformsLine( uniforms, material ) {

        uniforms.diffuse.value.copy( material.color );
        uniforms.opacity.value = material.opacity;

        if ( material.map ) {

            uniforms.map.value = material.map;

            refreshTransformUniform( material.map, uniforms.mapTransform );

        }

    }

refreshUniformsDash(uniforms: any, material: any): void

Parameters:

  • uniforms any
  • material any

Returns: void

Code
function refreshUniformsDash( uniforms, material ) {

        uniforms.dashSize.value = material.dashSize;
        uniforms.totalSize.value = material.dashSize + material.gapSize;
        uniforms.scale.value = material.scale;

    }

refreshUniformsPoints(uniforms: any, material: any, pixelRatio: any, height: any): void

Parameters:

  • uniforms any
  • material any
  • pixelRatio any
  • height any

Returns: void

Calls:

  • uniforms.diffuse.value.copy
  • refreshTransformUniform
Code
function refreshUniformsPoints( uniforms, material, pixelRatio, height ) {

        uniforms.diffuse.value.copy( material.color );
        uniforms.opacity.value = material.opacity;
        uniforms.size.value = material.size * pixelRatio;
        uniforms.scale.value = height * 0.5;

        if ( material.map ) {

            uniforms.map.value = material.map;

            refreshTransformUniform( material.map, uniforms.uvTransform );

        }

        if ( material.alphaMap ) {

            uniforms.alphaMap.value = material.alphaMap;

            refreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );

        }

        if ( material.alphaTest > 0 ) {

            uniforms.alphaTest.value = material.alphaTest;

        }

    }

refreshUniformsSprites(uniforms: any, material: any): void

Parameters:

  • uniforms any
  • material any

Returns: void

Calls:

  • uniforms.diffuse.value.copy
  • refreshTransformUniform
Code
function refreshUniformsSprites( uniforms, material ) {

        uniforms.diffuse.value.copy( material.color );
        uniforms.opacity.value = material.opacity;
        uniforms.rotation.value = material.rotation;

        if ( material.map ) {

            uniforms.map.value = material.map;

            refreshTransformUniform( material.map, uniforms.mapTransform );

        }

        if ( material.alphaMap ) {

            uniforms.alphaMap.value = material.alphaMap;

            refreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );

        }

        if ( material.alphaTest > 0 ) {

            uniforms.alphaTest.value = material.alphaTest;

        }

    }

refreshUniformsPhong(uniforms: any, material: any): void

Parameters:

  • uniforms any
  • material any

Returns: void

Calls:

  • uniforms.specular.value.copy
  • Math.max
Code
function refreshUniformsPhong( uniforms, material ) {

        uniforms.specular.value.copy( material.specular );
        uniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )

    }

refreshUniformsToon(uniforms: any, material: any): void

Parameters:

  • uniforms any
  • material any

Returns: void

Code
function refreshUniformsToon( uniforms, material ) {

        if ( material.gradientMap ) {

            uniforms.gradientMap.value = material.gradientMap;

        }

    }

refreshUniformsStandard(uniforms: any, material: any): void

Parameters:

  • uniforms any
  • material any

Returns: void

Calls:

  • refreshTransformUniform

Internal Comments:

//uniforms.envMap.value = material.envMap; // part of uniforms common (x5)

Code
function refreshUniformsStandard( uniforms, material ) {

        uniforms.metalness.value = material.metalness;

        if ( material.metalnessMap ) {

            uniforms.metalnessMap.value = material.metalnessMap;

            refreshTransformUniform( material.metalnessMap, uniforms.metalnessMapTransform );

        }

        uniforms.roughness.value = material.roughness;

        if ( material.roughnessMap ) {

            uniforms.roughnessMap.value = material.roughnessMap;

            refreshTransformUniform( material.roughnessMap, uniforms.roughnessMapTransform );

        }

        if ( material.envMap ) {

            //uniforms.envMap.value = material.envMap; // part of uniforms common

            uniforms.envMapIntensity.value = material.envMapIntensity;

        }

    }

refreshUniformsPhysical(uniforms: any, material: any, transmissionRenderTarget: any): void

Parameters:

  • uniforms any
  • material any
  • transmissionRenderTarget any

Returns: void

Calls:

  • uniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar
  • refreshTransformUniform
  • uniforms.clearcoatNormalScale.value.copy
  • uniforms.clearcoatNormalScale.value.negate
  • uniforms.transmissionSamplerSize.value.set
  • uniforms.attenuationColor.value.copy
  • uniforms.anisotropyVector.value.set
  • Math.cos
  • Math.sin
  • uniforms.specularColor.value.copy
Code
function refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ) {

        uniforms.ior.value = material.ior; // also part of uniforms common

        if ( material.sheen > 0 ) {

            uniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar( material.sheen );

            uniforms.sheenRoughness.value = material.sheenRoughness;

            if ( material.sheenColorMap ) {

                uniforms.sheenColorMap.value = material.sheenColorMap;

                refreshTransformUniform( material.sheenColorMap, uniforms.sheenColorMapTransform );

            }

            if ( material.sheenRoughnessMap ) {

                uniforms.sheenRoughnessMap.value = material.sheenRoughnessMap;

                refreshTransformUniform( material.sheenRoughnessMap, uniforms.sheenRoughnessMapTransform );

            }

        }

        if ( material.clearcoat > 0 ) {

            uniforms.clearcoat.value = material.clearcoat;
            uniforms.clearcoatRoughness.value = material.clearcoatRoughness;

            if ( material.clearcoatMap ) {

                uniforms.clearcoatMap.value = material.clearcoatMap;

                refreshTransformUniform( material.clearcoatMap, uniforms.clearcoatMapTransform );

            }

            if ( material.clearcoatRoughnessMap ) {

                uniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;

                refreshTransformUniform( material.clearcoatRoughnessMap, uniforms.clearcoatRoughnessMapTransform );

            }

            if ( material.clearcoatNormalMap ) {

                uniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;

                refreshTransformUniform( material.clearcoatNormalMap, uniforms.clearcoatNormalMapTransform );

                uniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );

                if ( material.side === BackSide ) {

                    uniforms.clearcoatNormalScale.value.negate();

                }

            }

        }

        if ( material.dispersion > 0 ) {

            uniforms.dispersion.value = material.dispersion;

        }

        if ( material.iridescence > 0 ) {

            uniforms.iridescence.value = material.iridescence;
            uniforms.iridescenceIOR.value = material.iridescenceIOR;
            uniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessRange[ 0 ];
            uniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessRange[ 1 ];

            if ( material.iridescenceMap ) {

                uniforms.iridescenceMap.value = material.iridescenceMap;

                refreshTransformUniform( material.iridescenceMap, uniforms.iridescenceMapTransform );

            }

            if ( material.iridescenceThicknessMap ) {

                uniforms.iridescenceThicknessMap.value = material.iridescenceThicknessMap;

                refreshTransformUniform( material.iridescenceThicknessMap, uniforms.iridescenceThicknessMapTransform );

            }

        }

        if ( material.transmission > 0 ) {

            uniforms.transmission.value = material.transmission;
            uniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture;
            uniforms.transmissionSamplerSize.value.set( transmissionRenderTarget.width, transmissionRenderTarget.height );

            if ( material.transmissionMap ) {

                uniforms.transmissionMap.value = material.transmissionMap;

                refreshTransformUniform( material.transmissionMap, uniforms.transmissionMapTransform );

            }

            uniforms.thickness.value = material.thickness;

            if ( material.thicknessMap ) {

                uniforms.thicknessMap.value = material.thicknessMap;

                refreshTransformUniform( material.thicknessMap, uniforms.thicknessMapTransform );

            }

            uniforms.attenuationDistance.value = material.attenuationDistance;
            uniforms.attenuationColor.value.copy( material.attenuationColor );

        }

        if ( material.anisotropy > 0 ) {

            uniforms.anisotropyVector.value.set( material.anisotropy * Math.cos( material.anisotropyRotation ), material.anisotropy * Math.sin( material.anisotropyRotation ) );

            if ( material.anisotropyMap ) {

                uniforms.anisotropyMap.value = material.anisotropyMap;

                refreshTransformUniform( material.anisotropyMap, uniforms.anisotropyMapTransform );

            }

        }

        uniforms.specularIntensity.value = material.specularIntensity;
        uniforms.specularColor.value.copy( material.specularColor );

        if ( material.specularColorMap ) {

            uniforms.specularColorMap.value = material.specularColorMap;

            refreshTransformUniform( material.specularColorMap, uniforms.specularColorMapTransform );

        }

        if ( material.specularIntensityMap ) {

            uniforms.specularIntensityMap.value = material.specularIntensityMap;

            refreshTransformUniform( material.specularIntensityMap, uniforms.specularIntensityMapTransform );

        }

    }

refreshUniformsMatcap(uniforms: any, material: any): void

Parameters:

  • uniforms any
  • material any

Returns: void

Code
function refreshUniformsMatcap( uniforms, material ) {

        if ( material.matcap ) {

            uniforms.matcap.value = material.matcap;

        }

    }

refreshUniformsDistance(uniforms: any, material: any): void

Parameters:

  • uniforms any
  • material any

Returns: void

Calls:

  • properties.get
  • uniforms.referencePosition.value.setFromMatrixPosition
Code
function refreshUniformsDistance( uniforms, material ) {

        const light = properties.get( material ).light;

        uniforms.referencePosition.value.setFromMatrixPosition( light.matrixWorld );
        uniforms.nearDistance.value = light.shadow.camera.near;
        uniforms.farDistance.value = light.shadow.camera.far;

    }