Buckets:
ktongue/docker_container / simsite /frontend /node_modules /three /src /renderers /webgl /WebGLMaterials.js
| import { BackSide } from '../../constants.js'; | |
| import { getUnlitUniformColorSpace } from '../shaders/UniformsUtils.js'; | |
| 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 envMap = properties.get( material ).envMap; | |
| if ( envMap ) { | |
| uniforms.envMap.value = envMap; | |
| 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; | |
| // artist-friendly light intensity scaling factor | |
| const scaleFactor = ( renderer._useLegacyLights === true ) ? Math.PI : 1; | |
| uniforms.lightMapIntensity.value = material.lightMapIntensity * scaleFactor; | |
| 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 ); | |
| } | |
| const envMap = properties.get( material ).envMap; | |
| if ( 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.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 | |
| }; | |
| } | |
| export { WebGLMaterials }; | |
Xet Storage Details
- Size:
- 13.4 kB
- Xet hash:
- c7d45874077ead3ebe466d63abfb38234186eb47cb9e42c519028f98495513ac
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.