super-three 0.164.0 → 0.167.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/build/three.cjs +1273 -503
- package/build/three.module.js +1269 -504
- package/build/three.module.min.js +1 -1
- package/build/three.webgpu.js +76086 -0
- package/build/three.webgpu.min.js +6 -0
- package/examples/jsm/Addons.js +2 -1
- package/examples/jsm/controls/TransformControls.js +1 -1
- package/examples/jsm/csm/CSMShader.js +4 -4
- package/examples/jsm/environments/RoomEnvironment.js +1 -5
- package/examples/jsm/exporters/GLTFExporter.js +8 -4
- package/examples/jsm/exporters/USDZExporter.js +6 -4
- package/examples/jsm/geometries/TeapotGeometry.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +75 -61
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
- package/examples/jsm/lines/LineMaterial.js +1 -15
- package/examples/jsm/lines/LineSegments2.js +15 -0
- package/examples/jsm/lines/Wireframe.js +16 -1
- package/examples/jsm/lines/webgpu/Line2.js +20 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
- package/examples/jsm/loaders/DRACOLoader.js +1 -1
- package/examples/jsm/loaders/FBXLoader.js +47 -58
- package/examples/jsm/loaders/GLTFLoader.js +12 -4
- package/examples/jsm/loaders/LDrawLoader.js +3 -2
- package/examples/jsm/loaders/MMDLoader.js +31 -12
- package/examples/jsm/loaders/MaterialXLoader.js +2 -9
- package/examples/jsm/loaders/USDZLoader.js +124 -76
- package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
- package/examples/jsm/loaders/VTKLoader.js +76 -3
- package/examples/jsm/misc/GPUComputationRenderer.js +9 -19
- package/examples/jsm/modifiers/CurveModifier.js +11 -9
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
- package/examples/jsm/objects/InstancedPoints.js +2 -2
- package/examples/jsm/objects/Lensflare.js +2 -2
- package/examples/jsm/postprocessing/RenderPass.js +1 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +13 -38
- package/examples/jsm/postprocessing/SSAOPass.js +6 -9
- package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
- package/examples/jsm/renderers/CSS2DRenderer.js +25 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +24 -3
- package/examples/jsm/shaders/ColorifyShader.js +1 -2
- package/examples/jsm/shaders/FXAAShader.js +0 -2
- package/examples/jsm/shaders/GTAOShader.js +1 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
- package/examples/jsm/transpiler/GLSLDecoder.js +46 -4
- package/examples/jsm/transpiler/TSLEncoder.js +17 -15
- package/examples/jsm/utils/BufferGeometryUtils.js +18 -16
- package/examples/jsm/utils/GPUStatsPanel.js +2 -0
- package/examples/jsm/utils/SortUtils.js +8 -5
- package/package.json +9 -7
- package/src/Three.WebGPU.js +194 -0
- package/src/Three.js +2 -0
- package/src/animation/tracks/BooleanKeyframeTrack.js +10 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -2
- package/src/animation/tracks/StringKeyframeTrack.js +10 -1
- package/src/constants.js +4 -1
- package/src/core/Object3D.js +24 -22
- package/src/core/Raycaster.js +6 -2
- package/src/extras/TextureUtils.js +210 -0
- package/src/lights/Light.js +1 -0
- package/src/lights/LightShadow.js +5 -0
- package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
- package/src/loaders/FileLoader.js +4 -0
- package/src/loaders/LoaderUtils.js +3 -1
- package/src/loaders/ObjectLoader.js +34 -2
- package/src/materials/Material.js +13 -4
- package/src/math/Box2.js +4 -4
- package/src/math/Box3.js +6 -6
- package/src/math/ColorManagement.js +10 -0
- package/src/math/Matrix2.js +54 -0
- package/src/math/Vector4.js +13 -0
- package/{examples/jsm → src}/nodes/Nodes.js +39 -20
- package/{examples/jsm → src}/nodes/accessors/BatchNode.js +28 -10
- package/src/nodes/accessors/BitangentNode.js +13 -0
- package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +36 -1
- package/{examples/jsm → src}/nodes/accessors/BufferNode.js +6 -0
- package/src/nodes/accessors/CameraNode.js +19 -0
- package/{examples/jsm → src}/nodes/accessors/CubeTextureNode.js +22 -5
- package/src/nodes/accessors/InstanceNode.js +140 -0
- package/{examples/jsm → src}/nodes/accessors/MaterialNode.js +24 -2
- package/{examples/jsm → src}/nodes/accessors/ModelNode.js +4 -0
- package/{examples/jsm → src}/nodes/accessors/MorphNode.js +24 -20
- package/src/nodes/accessors/NormalNode.js +14 -0
- package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/PositionNode.js +10 -0
- package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +7 -1
- package/src/nodes/accessors/ReflectVectorNode.js +10 -0
- package/{examples/jsm → src}/nodes/accessors/StorageBufferNode.js +50 -1
- package/{examples/jsm/nodes/accessors/TextureStoreNode.js → src/nodes/accessors/StorageTextureNode.js} +28 -6
- package/src/nodes/accessors/TangentNode.js +23 -0
- package/src/nodes/accessors/Texture3DNode.js +100 -0
- package/{examples/jsm → src}/nodes/accessors/TextureNode.js +55 -18
- package/src/nodes/accessors/UVNode.js +3 -0
- package/{examples/jsm → src}/nodes/accessors/UniformsNode.js +7 -1
- package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +2 -1
- package/{examples/jsm → src}/nodes/code/ScriptableNode.js +14 -0
- package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +2 -1
- package/{examples/jsm → src}/nodes/core/AttributeNode.js +34 -8
- package/{examples/jsm → src}/nodes/core/CacheNode.js +7 -10
- package/{examples/jsm → src}/nodes/core/ContextNode.js +6 -0
- package/{examples/jsm → src}/nodes/core/IndexNode.js +6 -0
- package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
- package/src/nodes/core/MRTNode.js +76 -0
- package/{examples/jsm → src}/nodes/core/Node.js +33 -14
- package/{examples/jsm → src}/nodes/core/NodeBuilder.js +194 -45
- package/src/nodes/core/NodeCache.js +36 -0
- package/{examples/jsm → src}/nodes/core/NodeFrame.js +42 -0
- package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
- package/{examples/jsm → src}/nodes/core/NodeKeywords.js +1 -1
- package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
- package/{examples/jsm → src}/nodes/core/NodeUtils.js +6 -1
- package/{examples/jsm → src}/nodes/core/OutputStructNode.js +1 -5
- package/{examples/jsm → src}/nodes/core/PropertyNode.js +2 -0
- package/{examples/jsm → src}/nodes/core/TempNode.js +2 -2
- package/{examples/jsm → src}/nodes/core/UniformGroupNode.js +20 -0
- package/{examples/jsm → src}/nodes/core/UniformNode.js +10 -1
- package/{examples/jsm → src}/nodes/core/VarNode.js +2 -6
- package/src/nodes/core/VaryingNode.js +104 -0
- package/{examples/jsm → src}/nodes/display/AfterImageNode.js +24 -20
- package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +18 -21
- package/src/nodes/display/BloomNode.js +333 -0
- package/{examples/jsm → src}/nodes/display/ColorAdjustmentNode.js +7 -2
- package/{examples/jsm → src}/nodes/display/ColorSpaceNode.js +1 -1
- package/src/nodes/display/DenoiseNode.js +198 -0
- package/src/nodes/display/DepthOfFieldNode.js +119 -0
- package/src/nodes/display/DotScreenNode.js +75 -0
- package/src/nodes/display/FXAANode.js +327 -0
- package/src/nodes/display/FilmNode.js +52 -0
- package/{examples/jsm → src}/nodes/display/FrontFacingNode.js +2 -1
- package/src/nodes/display/GTAONode.js +324 -0
- package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +34 -17
- package/src/nodes/display/Lut3DNode.js +53 -0
- package/{examples/jsm → src}/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PassNode.js +291 -0
- package/src/nodes/display/PixelationPassNode.js +201 -0
- package/src/nodes/display/RGBShiftNode.js +49 -0
- package/src/nodes/display/RenderOutputNode.js +56 -0
- package/src/nodes/display/SobelOperatorNode.js +121 -0
- package/{examples/jsm → src}/nodes/display/ToneMappingNode.js +44 -5
- package/src/nodes/display/TransitionNode.js +76 -0
- package/{examples/jsm → src}/nodes/display/ViewportDepthNode.js +39 -16
- package/{examples/jsm → src}/nodes/display/ViewportDepthTextureNode.js +2 -1
- package/{examples/jsm → src}/nodes/display/ViewportNode.js +3 -2
- package/{examples/jsm → src}/nodes/display/ViewportSharedTextureNode.js +2 -1
- package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +5 -2
- package/src/nodes/functions/BSDF/LTC.js +131 -0
- package/src/nodes/functions/BasicLightingModel.js +78 -0
- package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +5 -3
- package/{examples/jsm → src}/nodes/functions/PhysicalLightingModel.js +103 -18
- package/src/nodes/functions/ToonLightingModel.js +51 -0
- package/{examples/jsm → src}/nodes/geometry/RangeNode.js +19 -6
- package/{examples/jsm → src}/nodes/lighting/AONode.js +1 -4
- package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +1 -1
- package/src/nodes/lighting/AnalyticLightNode.js +333 -0
- package/src/nodes/lighting/BasicEnvironmentNode.js +26 -0
- package/src/nodes/lighting/BasicLightMapNode.js +29 -0
- package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +2 -3
- package/{examples/jsm → src}/nodes/lighting/EnvironmentNode.js +5 -4
- package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +2 -1
- package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +1 -1
- package/{examples/jsm → src}/nodes/lighting/LightingNode.js +2 -0
- package/{examples/jsm → src}/nodes/lighting/LightsNode.js +18 -3
- package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +2 -3
- package/src/nodes/lighting/RectAreaLightNode.js +97 -0
- package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +2 -3
- package/{examples/jsm → src}/nodes/loaders/NodeLoader.js +3 -1
- package/{examples/jsm → src}/nodes/loaders/NodeMaterialLoader.js +2 -1
- package/{examples/jsm → src}/nodes/loaders/NodeObjectLoader.js +2 -1
- package/{examples/jsm → src}/nodes/materials/InstancedPointsNodeMaterial.js +3 -3
- package/{examples/jsm → src}/nodes/materials/Line2NodeMaterial.js +4 -4
- package/{examples/jsm → src}/nodes/materials/LineBasicNodeMaterial.js +3 -3
- package/{examples/jsm → src}/nodes/materials/LineDashedNodeMaterial.js +4 -3
- package/{examples/jsm → src}/nodes/materials/Materials.js +3 -0
- package/src/nodes/materials/MeshBasicNodeMaterial.js +73 -0
- package/{examples/jsm → src}/nodes/materials/MeshLambertNodeMaterial.js +12 -3
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +53 -0
- package/{examples/jsm → src}/nodes/materials/MeshNormalNodeMaterial.js +5 -3
- package/{examples/jsm → src}/nodes/materials/MeshPhongNodeMaterial.js +11 -3
- package/{examples/jsm → src}/nodes/materials/MeshPhysicalNodeMaterial.js +26 -8
- package/{examples/jsm → src}/nodes/materials/MeshStandardNodeMaterial.js +14 -3
- package/src/nodes/materials/MeshToonNodeMaterial.js +34 -0
- package/{examples/jsm → src}/nodes/materials/NodeMaterial.js +97 -24
- package/{examples/jsm → src}/nodes/materials/PointsNodeMaterial.js +3 -3
- package/{examples/jsm → src}/nodes/materials/ShadowNodeMaterial.js +3 -3
- package/{examples/jsm → src}/nodes/materials/SpriteNodeMaterial.js +3 -3
- package/src/nodes/materials/VolumeNodeMaterial.js +106 -0
- package/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +9 -17
- package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +474 -577
- package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +2 -8
- package/{examples/jsm → src}/nodes/math/CondNode.js +13 -6
- package/{examples/jsm → src}/nodes/math/HashNode.js +2 -2
- package/{examples/jsm → src}/nodes/math/MathNode.js +14 -1
- package/{examples/jsm → src}/nodes/math/OperatorNode.js +6 -6
- package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
- package/{examples/jsm → src}/nodes/pmrem/PMREMNode.js +2 -1
- package/{examples/jsm → src}/nodes/shadernode/ShaderNode.js +57 -33
- package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +1 -1
- package/{examples/jsm → src}/nodes/utils/DiscardNode.js +1 -0
- package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +2 -0
- package/{examples/jsm → src}/nodes/utils/LoopNode.js +7 -6
- package/{examples/jsm → src}/nodes/utils/MatcapUVNode.js +1 -1
- package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +8 -2
- package/src/nodes/utils/RTTNode.js +130 -0
- package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +9 -1
- package/{examples/jsm → src}/nodes/utils/TimerNode.js +1 -1
- package/src/objects/BatchedMesh.js +232 -162
- package/src/objects/InstancedMesh.js +1 -1
- package/src/renderers/WebGLRenderer.js +312 -68
- package/{examples/jsm → src}/renderers/common/Attributes.js +4 -1
- package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
- package/{examples/jsm → src}/renderers/common/Background.js +9 -3
- package/src/renderers/common/BindGroup.js +16 -0
- package/{examples/jsm → src}/renderers/common/Bindings.js +54 -22
- package/src/renderers/common/ChainMap.js +59 -0
- package/{examples/jsm → src}/renderers/common/ClippingContext.js +8 -6
- package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
- package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +7 -1
- package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
- package/{examples/jsm → src}/renderers/common/Info.js +34 -6
- package/{examples/jsm → src}/renderers/common/Pipelines.js +2 -2
- package/src/renderers/common/PostProcessing.js +87 -0
- package/{examples/jsm/objects → src/renderers/common}/QuadMesh.js +6 -3
- package/src/renderers/common/RenderBundle.js +18 -0
- package/src/renderers/common/RenderBundles.js +38 -0
- package/{examples/jsm → src}/renderers/common/RenderContext.js +1 -1
- package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
- package/{examples/jsm → src}/renderers/common/RenderList.js +9 -0
- package/{examples/jsm → src}/renderers/common/RenderObject.js +50 -11
- package/{examples/jsm → src}/renderers/common/Renderer.js +220 -40
- package/{examples/jsm → src}/renderers/common/SampledTexture.js +2 -2
- package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
- package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
- package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
- package/{examples/jsm → src}/renderers/common/Textures.js +6 -2
- package/{examples/jsm → src}/renderers/common/Uniform.js +10 -5
- package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
- package/{examples/jsm → src}/renderers/common/extras/PMREMGenerator.js +13 -12
- package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
- package/{examples/jsm → src}/renderers/common/nodes/NodeSampledTexture.js +19 -4
- package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +8 -1
- package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
- package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
- package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
- package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
- package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +37 -16
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +31 -1
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
- package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +10 -31
- package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -4
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
- package/src/renderers/shaders/UniformsLib.js +3 -0
- package/src/renderers/webgl/WebGLAttributes.js +2 -2
- package/src/renderers/webgl/WebGLBackground.js +6 -0
- package/src/renderers/webgl/WebGLBufferRenderer.js +6 -19
- package/src/renderers/webgl/WebGLExtensions.js +3 -1
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +6 -18
- package/src/renderers/webgl/WebGLLights.js +15 -12
- package/src/renderers/webgl/WebGLMaterials.js +1 -5
- package/src/renderers/webgl/WebGLMorphtargets.js +1 -2
- package/src/renderers/webgl/WebGLProgram.js +28 -31
- package/src/renderers/webgl/WebGLPrograms.js +15 -15
- package/src/renderers/webgl/WebGLRenderStates.js +2 -2
- package/src/renderers/webgl/WebGLTextures.js +100 -70
- package/src/renderers/webgl/WebGLUniforms.js +12 -2
- package/src/renderers/webgl/WebGLUniformsGroups.js +7 -7
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +156 -54
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +188 -41
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +2 -2
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +1 -0
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +1 -1
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +126 -7
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +1 -1
- package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +212 -78
- package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +2 -2
- package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +245 -49
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +30 -14
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +9 -1
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +74 -24
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +101 -25
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +24 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +9 -3
- package/src/renderers/webxr/WebXRManager.js +12 -2
- package/src/textures/CompressedArrayTexture.js +14 -0
- package/src/textures/DataArrayTexture.js +14 -0
- package/src/textures/DepthTexture.js +1 -3
- package/src/utils.js +30 -1
- package/examples/jsm/nodes/accessors/BitangentNode.js +0 -89
- package/examples/jsm/nodes/accessors/CameraNode.js +0 -119
- package/examples/jsm/nodes/accessors/InstanceNode.js +0 -94
- package/examples/jsm/nodes/accessors/NormalNode.js +0 -106
- package/examples/jsm/nodes/accessors/PositionNode.js +0 -104
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -35
- package/examples/jsm/nodes/accessors/TangentNode.js +0 -109
- package/examples/jsm/nodes/accessors/UVNode.js +0 -47
- package/examples/jsm/nodes/core/NodeCache.js +0 -26
- package/examples/jsm/nodes/core/VaryingNode.js +0 -65
- package/examples/jsm/nodes/display/PassNode.js +0 -199
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -255
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
- package/examples/jsm/renderers/common/ChainMap.js +0 -89
- package/examples/jsm/renderers/common/PostProcessing.js +0 -33
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
- /package/{examples/jsm → src}/nodes/accessors/AccessorsUtils.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/InstancedPointsMaterialNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/ModelViewProjectionNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/PointUVNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/RendererReferenceNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/SceneNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/SkinningNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/TextureBicubicNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/TextureSizeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +0 -0
- /package/{examples/jsm → src}/nodes/code/CodeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/code/ExpressionNode.js +0 -0
- /package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +0 -0
- /package/{examples/jsm → src}/nodes/code/FunctionNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/AssignNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/BypassNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/ConstNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/InputNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
- /package/{examples/jsm → src}/nodes/core/ParameterNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/StackNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/StructTypeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
- /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
- /package/{examples/jsm → src}/nodes/display/BlendModeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/display/BumpMapNode.js +0 -0
- /package/{examples/jsm → src}/nodes/display/PosterizeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/fog/FogExp2Node.js +0 -0
- /package/{examples/jsm → src}/nodes/fog/FogNode.js +0 -0
- /package/{examples/jsm → src}/nodes/fog/FogRangeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_GGX.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX_Anisotropic.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/ShadowMaskModel.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/material/getGeometryRoughness.js +0 -0
- /package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +0 -0
- /package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +0 -0
- /package/{examples/jsm → src}/nodes/lighting/IrradianceNode.js +0 -0
- /package/{examples/jsm → src}/nodes/lighting/LightNode.js +0 -0
- /package/{examples/jsm → src}/nodes/lighting/LightUtils.js +0 -0
- /package/{examples/jsm → src}/nodes/lighting/LightingContextNode.js +0 -0
- /package/{examples/jsm → src}/nodes/materials/MeshSSSNodeMaterial.js +0 -0
- /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
- /package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +0 -0
- /package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -0
- /package/{examples/jsm → src}/nodes/math/TriNoise3D.js +0 -0
- /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
- /package/{examples/jsm → src}/nodes/pmrem/PMREMUtils.js +0 -0
- /package/{examples/jsm → src}/nodes/procedural/CheckerNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/ConvertNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/EquirectUVNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/JoinNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/OscNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/PackingNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/RemapNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/RotateNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/RotateUVNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/SetNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/SplitNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +0 -0
- /package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Animation.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
- /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
- /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
- /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
- /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderObjects.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
- /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
- /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
- /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBufferRenderer.js +0 -0
- /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
- /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
- /package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +0 -0
|
@@ -68,7 +68,7 @@ IncidentLight directLight;
|
|
|
68
68
|
|
|
69
69
|
#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )
|
|
70
70
|
pointLightShadow = pointLightShadows[ i ];
|
|
71
|
-
directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;
|
|
71
|
+
directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;
|
|
72
72
|
#endif
|
|
73
73
|
|
|
74
74
|
RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
|
|
@@ -116,7 +116,7 @@ IncidentLight directLight;
|
|
|
116
116
|
|
|
117
117
|
#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )
|
|
118
118
|
spotLightShadow = spotLightShadows[ i ];
|
|
119
|
-
directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;
|
|
119
|
+
directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;
|
|
120
120
|
#endif
|
|
121
121
|
|
|
122
122
|
RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
|
|
@@ -142,7 +142,7 @@ IncidentLight directLight;
|
|
|
142
142
|
|
|
143
143
|
#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )
|
|
144
144
|
directionalLightShadow = directionalLightShadows[ i ];
|
|
145
|
-
directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
|
|
145
|
+
directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
|
|
146
146
|
#endif
|
|
147
147
|
|
|
148
148
|
RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
|
|
@@ -55,32 +55,18 @@ vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {
|
|
|
55
55
|
|
|
56
56
|
float getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
// based upon Frostbite 3 Moving to Physically-based Rendering
|
|
59
|
+
// page 32, equation 26: E[window1]
|
|
60
|
+
// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf
|
|
61
|
+
float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );
|
|
59
62
|
|
|
60
|
-
|
|
63
|
+
if ( cutoffDistance > 0.0 ) {
|
|
61
64
|
|
|
62
|
-
|
|
65
|
+
distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );
|
|
63
66
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
return 1.0;
|
|
67
|
-
|
|
68
|
-
#else
|
|
69
|
-
|
|
70
|
-
// based upon Frostbite 3 Moving to Physically-based Rendering
|
|
71
|
-
// page 32, equation 26: E[window1]
|
|
72
|
-
// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf
|
|
73
|
-
float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );
|
|
74
|
-
|
|
75
|
-
if ( cutoffDistance > 0.0 ) {
|
|
76
|
-
|
|
77
|
-
distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return distanceFalloff;
|
|
67
|
+
}
|
|
82
68
|
|
|
83
|
-
|
|
69
|
+
return distanceFalloff;
|
|
84
70
|
|
|
85
71
|
}
|
|
86
72
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export default /* glsl */`
|
|
2
|
-
#if defined( USE_MORPHCOLORS )
|
|
2
|
+
#if defined( USE_MORPHCOLORS )
|
|
3
3
|
|
|
4
4
|
// morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:
|
|
5
5
|
// When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in normal = sum((target - base) * influence)
|
|
@@ -6,22 +6,11 @@ export default /* glsl */`
|
|
|
6
6
|
// When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting
|
|
7
7
|
objectNormal *= morphTargetBaseInfluence;
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
#else
|
|
18
|
-
|
|
19
|
-
objectNormal += morphNormal0 * morphTargetInfluences[ 0 ];
|
|
20
|
-
objectNormal += morphNormal1 * morphTargetInfluences[ 1 ];
|
|
21
|
-
objectNormal += morphNormal2 * morphTargetInfluences[ 2 ];
|
|
22
|
-
objectNormal += morphNormal3 * morphTargetInfluences[ 3 ];
|
|
23
|
-
|
|
24
|
-
#endif
|
|
13
|
+
}
|
|
25
14
|
|
|
26
15
|
#endif
|
|
27
16
|
`;
|
|
@@ -4,44 +4,23 @@ export default /* glsl */`
|
|
|
4
4
|
#ifndef USE_INSTANCING_MORPH
|
|
5
5
|
|
|
6
6
|
uniform float morphTargetBaseInfluence;
|
|
7
|
+
uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];
|
|
7
8
|
|
|
8
9
|
#endif
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
uniform sampler2DArray morphTargetsTexture;
|
|
12
|
+
uniform ivec2 morphTargetsTextureSize;
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;
|
|
17
|
+
int y = texelIndex / morphTargetsTextureSize.x;
|
|
18
|
+
int x = texelIndex - y * morphTargetsTextureSize.x;
|
|
15
19
|
|
|
16
|
-
|
|
20
|
+
ivec3 morphUV = ivec3( x, y, morphTargetIndex );
|
|
21
|
+
return texelFetch( morphTargetsTexture, morphUV, 0 );
|
|
17
22
|
|
|
18
|
-
|
|
19
|
-
uniform ivec2 morphTargetsTextureSize;
|
|
20
|
-
|
|
21
|
-
vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {
|
|
22
|
-
|
|
23
|
-
int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;
|
|
24
|
-
int y = texelIndex / morphTargetsTextureSize.x;
|
|
25
|
-
int x = texelIndex - y * morphTargetsTextureSize.x;
|
|
26
|
-
|
|
27
|
-
ivec3 morphUV = ivec3( x, y, morphTargetIndex );
|
|
28
|
-
return texelFetch( morphTargetsTexture, morphUV, 0 );
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
#else
|
|
33
|
-
|
|
34
|
-
#ifndef USE_MORPHNORMALS
|
|
35
|
-
|
|
36
|
-
uniform float morphTargetInfluences[ 8 ];
|
|
37
|
-
|
|
38
|
-
#else
|
|
39
|
-
|
|
40
|
-
uniform float morphTargetInfluences[ 4 ];
|
|
41
|
-
|
|
42
|
-
#endif
|
|
43
|
-
|
|
44
|
-
#endif
|
|
23
|
+
}
|
|
45
24
|
|
|
46
25
|
#endif
|
|
47
26
|
`;
|
|
@@ -6,31 +6,11 @@ export default /* glsl */`
|
|
|
6
6
|
// When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting
|
|
7
7
|
transformed *= morphTargetBaseInfluence;
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
#else
|
|
18
|
-
|
|
19
|
-
transformed += morphTarget0 * morphTargetInfluences[ 0 ];
|
|
20
|
-
transformed += morphTarget1 * morphTargetInfluences[ 1 ];
|
|
21
|
-
transformed += morphTarget2 * morphTargetInfluences[ 2 ];
|
|
22
|
-
transformed += morphTarget3 * morphTargetInfluences[ 3 ];
|
|
23
|
-
|
|
24
|
-
#ifndef USE_MORPHNORMALS
|
|
25
|
-
|
|
26
|
-
transformed += morphTarget4 * morphTargetInfluences[ 4 ];
|
|
27
|
-
transformed += morphTarget5 * morphTargetInfluences[ 5 ];
|
|
28
|
-
transformed += morphTarget6 * morphTargetInfluences[ 6 ];
|
|
29
|
-
transformed += morphTarget7 * morphTargetInfluences[ 7 ];
|
|
30
|
-
|
|
31
|
-
#endif
|
|
32
|
-
|
|
33
|
-
#endif
|
|
13
|
+
}
|
|
34
14
|
|
|
35
15
|
#endif
|
|
36
16
|
`;
|
|
@@ -9,36 +9,68 @@ vec3 unpackRGBToNormal( const in vec3 rgb ) {
|
|
|
9
9
|
|
|
10
10
|
const float PackUpscale = 256. / 255.; // fraction -> 0..1 (including 1)
|
|
11
11
|
const float UnpackDownscale = 255. / 256.; // 0..1 -> fraction (excluding 1)
|
|
12
|
+
const float ShiftRight8 = 1. / 256.;
|
|
13
|
+
const float Inv255 = 1. / 255.;
|
|
12
14
|
|
|
13
|
-
const
|
|
14
|
-
const vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );
|
|
15
|
+
const vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );
|
|
15
16
|
|
|
16
|
-
const
|
|
17
|
+
const vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );
|
|
18
|
+
const vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );
|
|
19
|
+
const vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );
|
|
17
20
|
|
|
18
21
|
vec4 packDepthToRGBA( const in float v ) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
if( v <= 0.0 )
|
|
23
|
+
return vec4( 0., 0., 0., 0. );
|
|
24
|
+
if( v >= 1.0 )
|
|
25
|
+
return vec4( 1., 1., 1., 1. );
|
|
26
|
+
float vuf;
|
|
27
|
+
float af = modf( v * PackFactors.a, vuf );
|
|
28
|
+
float bf = modf( vuf * ShiftRight8, vuf );
|
|
29
|
+
float gf = modf( vuf * ShiftRight8, vuf );
|
|
30
|
+
return vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
vec3 packDepthToRGB( const in float v ) {
|
|
34
|
+
if( v <= 0.0 )
|
|
35
|
+
return vec3( 0., 0., 0. );
|
|
36
|
+
if( v >= 1.0 )
|
|
37
|
+
return vec3( 1., 1., 1. );
|
|
38
|
+
float vuf;
|
|
39
|
+
float bf = modf( v * PackFactors.b, vuf );
|
|
40
|
+
float gf = modf( vuf * ShiftRight8, vuf );
|
|
41
|
+
// the 0.9999 tweak is unimportant, very tiny empirical improvement
|
|
42
|
+
// return vec3( vuf * Inv255, gf * PackUpscale, bf * 0.9999 );
|
|
43
|
+
return vec3( vuf * Inv255, gf * PackUpscale, bf );
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
vec2 packDepthToRG( const in float v ) {
|
|
47
|
+
if( v <= 0.0 )
|
|
48
|
+
return vec2( 0., 0. );
|
|
49
|
+
if( v >= 1.0 )
|
|
50
|
+
return vec2( 1., 1. );
|
|
51
|
+
float vuf;
|
|
52
|
+
float gf = modf( v * 256., vuf );
|
|
53
|
+
return vec2( vuf * Inv255, gf );
|
|
22
54
|
}
|
|
23
55
|
|
|
24
56
|
float unpackRGBAToDepth( const in vec4 v ) {
|
|
25
|
-
return dot( v,
|
|
57
|
+
return dot( v, UnpackFactors4 );
|
|
26
58
|
}
|
|
27
59
|
|
|
28
|
-
|
|
29
|
-
return
|
|
60
|
+
float unpackRGBToDepth( const in vec3 v ) {
|
|
61
|
+
return dot( v, UnpackFactors3 );
|
|
30
62
|
}
|
|
31
63
|
|
|
32
|
-
float unpackRGToDepth( const in
|
|
33
|
-
return
|
|
64
|
+
float unpackRGToDepth( const in vec2 v ) {
|
|
65
|
+
return v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;
|
|
34
66
|
}
|
|
35
67
|
|
|
36
|
-
vec4 pack2HalfToRGBA( vec2 v ) {
|
|
68
|
+
vec4 pack2HalfToRGBA( const in vec2 v ) {
|
|
37
69
|
vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );
|
|
38
70
|
return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );
|
|
39
71
|
}
|
|
40
72
|
|
|
41
|
-
vec2 unpackRGBATo2Half( vec4 v ) {
|
|
73
|
+
vec2 unpackRGBATo2Half( const in vec4 v ) {
|
|
42
74
|
return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );
|
|
43
75
|
}
|
|
44
76
|
|
|
@@ -19,6 +19,7 @@ export default /* glsl */`
|
|
|
19
19
|
varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];
|
|
20
20
|
|
|
21
21
|
struct DirectionalLightShadow {
|
|
22
|
+
float shadowIntensity;
|
|
22
23
|
float shadowBias;
|
|
23
24
|
float shadowNormalBias;
|
|
24
25
|
float shadowRadius;
|
|
@@ -34,6 +35,7 @@ export default /* glsl */`
|
|
|
34
35
|
uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];
|
|
35
36
|
|
|
36
37
|
struct SpotLightShadow {
|
|
38
|
+
float shadowIntensity;
|
|
37
39
|
float shadowBias;
|
|
38
40
|
float shadowNormalBias;
|
|
39
41
|
float shadowRadius;
|
|
@@ -50,6 +52,7 @@ export default /* glsl */`
|
|
|
50
52
|
varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];
|
|
51
53
|
|
|
52
54
|
struct PointLightShadow {
|
|
55
|
+
float shadowIntensity;
|
|
53
56
|
float shadowBias;
|
|
54
57
|
float shadowNormalBias;
|
|
55
58
|
float shadowRadius;
|
|
@@ -103,7 +106,7 @@ export default /* glsl */`
|
|
|
103
106
|
|
|
104
107
|
}
|
|
105
108
|
|
|
106
|
-
float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {
|
|
109
|
+
float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {
|
|
107
110
|
|
|
108
111
|
float shadow = 1.0;
|
|
109
112
|
|
|
@@ -196,7 +199,7 @@ export default /* glsl */`
|
|
|
196
199
|
|
|
197
200
|
}
|
|
198
201
|
|
|
199
|
-
return shadow;
|
|
202
|
+
return mix( 1.0, shadow, shadowIntensity );
|
|
200
203
|
|
|
201
204
|
}
|
|
202
205
|
|
|
@@ -271,7 +274,7 @@ export default /* glsl */`
|
|
|
271
274
|
|
|
272
275
|
}
|
|
273
276
|
|
|
274
|
-
float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {
|
|
277
|
+
float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {
|
|
275
278
|
|
|
276
279
|
float shadow = 1.0;
|
|
277
280
|
|
|
@@ -316,7 +319,7 @@ export default /* glsl */`
|
|
|
316
319
|
|
|
317
320
|
}
|
|
318
321
|
|
|
319
|
-
return shadow;
|
|
322
|
+
return mix( 1.0, shadow, shadowIntensity );
|
|
320
323
|
|
|
321
324
|
}
|
|
322
325
|
|
|
@@ -15,6 +15,7 @@ export default /* glsl */`
|
|
|
15
15
|
varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];
|
|
16
16
|
|
|
17
17
|
struct DirectionalLightShadow {
|
|
18
|
+
float shadowIntensity;
|
|
18
19
|
float shadowBias;
|
|
19
20
|
float shadowNormalBias;
|
|
20
21
|
float shadowRadius;
|
|
@@ -28,6 +29,7 @@ export default /* glsl */`
|
|
|
28
29
|
#if NUM_SPOT_LIGHT_SHADOWS > 0
|
|
29
30
|
|
|
30
31
|
struct SpotLightShadow {
|
|
32
|
+
float shadowIntensity;
|
|
31
33
|
float shadowBias;
|
|
32
34
|
float shadowNormalBias;
|
|
33
35
|
float shadowRadius;
|
|
@@ -44,6 +46,7 @@ export default /* glsl */`
|
|
|
44
46
|
varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];
|
|
45
47
|
|
|
46
48
|
struct PointLightShadow {
|
|
49
|
+
float shadowIntensity;
|
|
47
50
|
float shadowBias;
|
|
48
51
|
float shadowNormalBias;
|
|
49
52
|
float shadowRadius;
|
|
@@ -13,7 +13,7 @@ float getShadowMask() {
|
|
|
13
13
|
for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {
|
|
14
14
|
|
|
15
15
|
directionalLight = directionalLightShadows[ i ];
|
|
16
|
-
shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
|
|
16
|
+
shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
|
|
17
17
|
|
|
18
18
|
}
|
|
19
19
|
#pragma unroll_loop_end
|
|
@@ -28,7 +28,7 @@ float getShadowMask() {
|
|
|
28
28
|
for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {
|
|
29
29
|
|
|
30
30
|
spotLight = spotLightShadows[ i ];
|
|
31
|
-
shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;
|
|
31
|
+
shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;
|
|
32
32
|
|
|
33
33
|
}
|
|
34
34
|
#pragma unroll_loop_end
|
|
@@ -43,7 +43,7 @@ float getShadowMask() {
|
|
|
43
43
|
for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {
|
|
44
44
|
|
|
45
45
|
pointLight = pointLightShadows[ i ];
|
|
46
|
-
shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;
|
|
46
|
+
shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;
|
|
47
47
|
|
|
48
48
|
}
|
|
49
49
|
#pragma unroll_loop_end
|
|
@@ -91,6 +91,14 @@ void main() {
|
|
|
91
91
|
|
|
92
92
|
gl_FragColor = packDepthToRGBA( fragCoordZ );
|
|
93
93
|
|
|
94
|
+
#elif DEPTH_PACKING == 3202
|
|
95
|
+
|
|
96
|
+
gl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );
|
|
97
|
+
|
|
98
|
+
#elif DEPTH_PACKING == 3203
|
|
99
|
+
|
|
100
|
+
gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );
|
|
101
|
+
|
|
94
102
|
#endif
|
|
95
103
|
|
|
96
104
|
}
|
|
@@ -130,6 +130,7 @@ const UniformsLib = {
|
|
|
130
130
|
} },
|
|
131
131
|
|
|
132
132
|
directionalLightShadows: { value: [], properties: {
|
|
133
|
+
shadowIntensity: 1,
|
|
133
134
|
shadowBias: {},
|
|
134
135
|
shadowNormalBias: {},
|
|
135
136
|
shadowRadius: {},
|
|
@@ -150,6 +151,7 @@ const UniformsLib = {
|
|
|
150
151
|
} },
|
|
151
152
|
|
|
152
153
|
spotLightShadows: { value: [], properties: {
|
|
154
|
+
shadowIntensity: 1,
|
|
153
155
|
shadowBias: {},
|
|
154
156
|
shadowNormalBias: {},
|
|
155
157
|
shadowRadius: {},
|
|
@@ -168,6 +170,7 @@ const UniformsLib = {
|
|
|
168
170
|
} },
|
|
169
171
|
|
|
170
172
|
pointLightShadows: { value: [], properties: {
|
|
173
|
+
shadowIntensity: 1,
|
|
171
174
|
shadowBias: {},
|
|
172
175
|
shadowNormalBias: {},
|
|
173
176
|
shadowRadius: {},
|
|
@@ -145,6 +145,8 @@ function WebGLAttributes( gl ) {
|
|
|
145
145
|
|
|
146
146
|
function update( attribute, bufferType ) {
|
|
147
147
|
|
|
148
|
+
if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;
|
|
149
|
+
|
|
148
150
|
if ( attribute.isGLBufferAttribute ) {
|
|
149
151
|
|
|
150
152
|
const cached = buffers.get( attribute );
|
|
@@ -164,8 +166,6 @@ function WebGLAttributes( gl ) {
|
|
|
164
166
|
|
|
165
167
|
}
|
|
166
168
|
|
|
167
|
-
if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;
|
|
168
|
-
|
|
169
169
|
const data = buffers.get( attribute );
|
|
170
170
|
|
|
171
171
|
if ( data === undefined ) {
|
|
@@ -71,6 +71,12 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
|
|
|
71
71
|
|
|
72
72
|
if ( renderer.autoClear || forceClear ) {
|
|
73
73
|
|
|
74
|
+
// buffers might not be writable which is required to ensure a correct clear
|
|
75
|
+
|
|
76
|
+
state.buffers.depth.setTest( true );
|
|
77
|
+
state.buffers.depth.setMask( true );
|
|
78
|
+
state.buffers.color.setMask( true );
|
|
79
|
+
|
|
74
80
|
renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );
|
|
75
81
|
|
|
76
82
|
}
|
|
@@ -31,30 +31,17 @@ function WebGLBufferRenderer( gl, extensions, info ) {
|
|
|
31
31
|
if ( drawCount === 0 ) return;
|
|
32
32
|
|
|
33
33
|
const extension = extensions.get( 'WEBGL_multi_draw' );
|
|
34
|
+
extension.multiDrawArraysWEBGL( mode, starts, 0, counts, 0, drawCount );
|
|
34
35
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
for ( let i = 0; i < drawCount; i ++ ) {
|
|
36
|
+
let elementCount = 0;
|
|
37
|
+
for ( let i = 0; i < drawCount; i ++ ) {
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
} else {
|
|
44
|
-
|
|
45
|
-
extension.multiDrawArraysWEBGL( mode, starts, 0, counts, 0, drawCount );
|
|
46
|
-
|
|
47
|
-
let elementCount = 0;
|
|
48
|
-
for ( let i = 0; i < drawCount; i ++ ) {
|
|
49
|
-
|
|
50
|
-
elementCount += counts[ i ];
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
info.update( elementCount, mode, 1 );
|
|
39
|
+
elementCount += counts[ i ];
|
|
55
40
|
|
|
56
41
|
}
|
|
57
42
|
|
|
43
|
+
info.update( elementCount, mode, 1 );
|
|
44
|
+
|
|
58
45
|
}
|
|
59
46
|
|
|
60
47
|
function renderMultiDrawInstances( starts, counts, drawCount, primcount ) {
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { warnOnce } from '../../utils.js';
|
|
2
|
+
|
|
1
3
|
function WebGLExtensions( gl ) {
|
|
2
4
|
|
|
3
5
|
const extensions = {};
|
|
@@ -66,7 +68,7 @@ function WebGLExtensions( gl ) {
|
|
|
66
68
|
|
|
67
69
|
if ( extension === null ) {
|
|
68
70
|
|
|
69
|
-
|
|
71
|
+
warnOnce( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );
|
|
70
72
|
|
|
71
73
|
}
|
|
72
74
|
|
|
@@ -40,29 +40,17 @@ function WebGLIndexedBufferRenderer( gl, extensions, info ) {
|
|
|
40
40
|
if ( drawCount === 0 ) return;
|
|
41
41
|
|
|
42
42
|
const extension = extensions.get( 'WEBGL_multi_draw' );
|
|
43
|
+
extension.multiDrawElementsWEBGL( mode, counts, 0, type, starts, 0, drawCount );
|
|
43
44
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
for ( let i = 0; i < drawCount; i ++ ) {
|
|
47
|
-
|
|
48
|
-
this.render( starts[ i ] / bytesPerElement, counts[ i ] );
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
} else {
|
|
45
|
+
let elementCount = 0;
|
|
46
|
+
for ( let i = 0; i < drawCount; i ++ ) {
|
|
53
47
|
|
|
54
|
-
|
|
48
|
+
elementCount += counts[ i ];
|
|
55
49
|
|
|
56
|
-
|
|
57
|
-
for ( let i = 0; i < drawCount; i ++ ) {
|
|
58
|
-
|
|
59
|
-
elementCount += counts[ i ];
|
|
60
|
-
|
|
61
|
-
}
|
|
50
|
+
}
|
|
62
51
|
|
|
63
|
-
|
|
52
|
+
info.update( elementCount, mode, 1 );
|
|
64
53
|
|
|
65
|
-
}
|
|
66
54
|
|
|
67
55
|
}
|
|
68
56
|
|
|
@@ -99,6 +99,7 @@ function ShadowUniformsCache() {
|
|
|
99
99
|
|
|
100
100
|
case 'DirectionalLight':
|
|
101
101
|
uniforms = {
|
|
102
|
+
shadowIntensity: 1,
|
|
102
103
|
shadowBias: 0,
|
|
103
104
|
shadowNormalBias: 0,
|
|
104
105
|
shadowRadius: 1,
|
|
@@ -108,6 +109,7 @@ function ShadowUniformsCache() {
|
|
|
108
109
|
|
|
109
110
|
case 'SpotLight':
|
|
110
111
|
uniforms = {
|
|
112
|
+
shadowIntensity: 1,
|
|
111
113
|
shadowBias: 0,
|
|
112
114
|
shadowNormalBias: 0,
|
|
113
115
|
shadowRadius: 1,
|
|
@@ -117,6 +119,7 @@ function ShadowUniformsCache() {
|
|
|
117
119
|
|
|
118
120
|
case 'PointLight':
|
|
119
121
|
uniforms = {
|
|
122
|
+
shadowIntensity: 1,
|
|
120
123
|
shadowBias: 0,
|
|
121
124
|
shadowNormalBias: 0,
|
|
122
125
|
shadowRadius: 1,
|
|
@@ -205,7 +208,7 @@ function WebGLLights( extensions ) {
|
|
|
205
208
|
const matrix4 = new Matrix4();
|
|
206
209
|
const matrix42 = new Matrix4();
|
|
207
210
|
|
|
208
|
-
function setup( lights
|
|
211
|
+
function setup( lights ) {
|
|
209
212
|
|
|
210
213
|
let r = 0, g = 0, b = 0;
|
|
211
214
|
|
|
@@ -228,9 +231,6 @@ function WebGLLights( extensions ) {
|
|
|
228
231
|
// ordering : [shadow casting + map texturing, map texturing, shadow casting, none ]
|
|
229
232
|
lights.sort( shadowCastingAndTexturingLightsFirst );
|
|
230
233
|
|
|
231
|
-
// artist-friendly light intensity scaling factor
|
|
232
|
-
const scaleFactor = ( useLegacyLights === true ) ? Math.PI : 1;
|
|
233
|
-
|
|
234
234
|
for ( let i = 0, l = lights.length; i < l; i ++ ) {
|
|
235
235
|
|
|
236
236
|
const light = lights[ i ];
|
|
@@ -243,9 +243,9 @@ function WebGLLights( extensions ) {
|
|
|
243
243
|
|
|
244
244
|
if ( light.isAmbientLight ) {
|
|
245
245
|
|
|
246
|
-
r += color.r * intensity
|
|
247
|
-
g += color.g * intensity
|
|
248
|
-
b += color.b * intensity
|
|
246
|
+
r += color.r * intensity;
|
|
247
|
+
g += color.g * intensity;
|
|
248
|
+
b += color.b * intensity;
|
|
249
249
|
|
|
250
250
|
} else if ( light.isLightProbe ) {
|
|
251
251
|
|
|
@@ -261,7 +261,7 @@ function WebGLLights( extensions ) {
|
|
|
261
261
|
|
|
262
262
|
const uniforms = cache.get( light );
|
|
263
263
|
|
|
264
|
-
uniforms.color.copy( light.color ).multiplyScalar( light.intensity
|
|
264
|
+
uniforms.color.copy( light.color ).multiplyScalar( light.intensity );
|
|
265
265
|
|
|
266
266
|
if ( light.castShadow ) {
|
|
267
267
|
|
|
@@ -269,6 +269,7 @@ function WebGLLights( extensions ) {
|
|
|
269
269
|
|
|
270
270
|
const shadowUniforms = shadowCache.get( light );
|
|
271
271
|
|
|
272
|
+
shadowUniforms.shadowIntensity = shadow.intensity;
|
|
272
273
|
shadowUniforms.shadowBias = shadow.bias;
|
|
273
274
|
shadowUniforms.shadowNormalBias = shadow.normalBias;
|
|
274
275
|
shadowUniforms.shadowRadius = shadow.radius;
|
|
@@ -292,7 +293,7 @@ function WebGLLights( extensions ) {
|
|
|
292
293
|
|
|
293
294
|
uniforms.position.setFromMatrixPosition( light.matrixWorld );
|
|
294
295
|
|
|
295
|
-
uniforms.color.copy( color ).multiplyScalar( intensity
|
|
296
|
+
uniforms.color.copy( color ).multiplyScalar( intensity );
|
|
296
297
|
uniforms.distance = distance;
|
|
297
298
|
|
|
298
299
|
uniforms.coneCos = Math.cos( light.angle );
|
|
@@ -322,6 +323,7 @@ function WebGLLights( extensions ) {
|
|
|
322
323
|
|
|
323
324
|
const shadowUniforms = shadowCache.get( light );
|
|
324
325
|
|
|
326
|
+
shadowUniforms.shadowIntensity = shadow.intensity;
|
|
325
327
|
shadowUniforms.shadowBias = shadow.bias;
|
|
326
328
|
shadowUniforms.shadowNormalBias = shadow.normalBias;
|
|
327
329
|
shadowUniforms.shadowRadius = shadow.radius;
|
|
@@ -353,7 +355,7 @@ function WebGLLights( extensions ) {
|
|
|
353
355
|
|
|
354
356
|
const uniforms = cache.get( light );
|
|
355
357
|
|
|
356
|
-
uniforms.color.copy( light.color ).multiplyScalar( light.intensity
|
|
358
|
+
uniforms.color.copy( light.color ).multiplyScalar( light.intensity );
|
|
357
359
|
uniforms.distance = light.distance;
|
|
358
360
|
uniforms.decay = light.decay;
|
|
359
361
|
|
|
@@ -363,6 +365,7 @@ function WebGLLights( extensions ) {
|
|
|
363
365
|
|
|
364
366
|
const shadowUniforms = shadowCache.get( light );
|
|
365
367
|
|
|
368
|
+
shadowUniforms.shadowIntensity = shadow.intensity;
|
|
366
369
|
shadowUniforms.shadowBias = shadow.bias;
|
|
367
370
|
shadowUniforms.shadowNormalBias = shadow.normalBias;
|
|
368
371
|
shadowUniforms.shadowRadius = shadow.radius;
|
|
@@ -386,8 +389,8 @@ function WebGLLights( extensions ) {
|
|
|
386
389
|
|
|
387
390
|
const uniforms = cache.get( light );
|
|
388
391
|
|
|
389
|
-
uniforms.skyColor.copy( light.color ).multiplyScalar( intensity
|
|
390
|
-
uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity
|
|
392
|
+
uniforms.skyColor.copy( light.color ).multiplyScalar( intensity );
|
|
393
|
+
uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );
|
|
391
394
|
|
|
392
395
|
state.hemi[ hemiLength ] = uniforms;
|
|
393
396
|
|