super-three 0.184.0 → 0.185.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/build/three.cjs +1260 -927
- package/build/three.core.js +1104 -829
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +156 -98
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +11 -4
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +7538 -3367
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +7538 -3366
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +3 -0
- package/examples/jsm/controls/ArcballControls.js +6 -2
- package/examples/jsm/controls/FirstPersonControls.js +79 -42
- package/examples/jsm/controls/TransformControls.js +68 -15
- package/examples/jsm/csm/CSMFrustum.js +31 -6
- package/examples/jsm/csm/CSMShadowNode.js +4 -1
- package/examples/jsm/effects/AsciiEffect.js +14 -1
- package/examples/jsm/exporters/DRACOExporter.js +27 -6
- package/examples/jsm/exporters/GLTFExporter.js +114 -12
- package/examples/jsm/exporters/PLYExporter.js +286 -73
- package/examples/jsm/exporters/USDZExporter.js +347 -112
- package/examples/jsm/generators/CityGenerator.js +346 -0
- package/examples/jsm/generators/ForestGenerator.js +347 -0
- package/examples/jsm/generators/TerrainGenerator.js +504 -0
- package/examples/jsm/generators/TreeGenerator.js +377 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
- package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
- package/examples/jsm/geometries/LoftGeometry.js +355 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +1 -1
- package/examples/jsm/helpers/LightProbeHelper.js +5 -4
- package/examples/jsm/helpers/ViewHelper.js +16 -6
- package/examples/jsm/inspector/Inspector.js +53 -15
- package/examples/jsm/inspector/RendererInspector.js +152 -36
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +1 -1
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -1
- package/examples/jsm/inspector/tabs/Console.js +200 -18
- package/examples/jsm/inspector/tabs/Memory.js +8 -0
- package/examples/jsm/inspector/tabs/Parameters.js +64 -4
- package/examples/jsm/inspector/tabs/Performance.js +21 -6
- package/examples/jsm/inspector/tabs/Settings.js +51 -9
- package/examples/jsm/inspector/tabs/Timeline.js +178 -93
- package/examples/jsm/inspector/tabs/Viewer.js +628 -16
- package/examples/jsm/inspector/ui/Graph.js +162 -25
- package/examples/jsm/inspector/ui/Item.js +92 -13
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +90 -45
- package/examples/jsm/inspector/ui/Style.js +1788 -1401
- package/examples/jsm/inspector/ui/Tab.js +5 -3
- package/examples/jsm/inspector/ui/Values.js +71 -6
- package/examples/jsm/inspector/ui/utils.js +130 -10
- package/examples/jsm/libs/basis/README.md +0 -1
- package/examples/jsm/libs/demuxer_mp4.js +3 -3
- package/examples/jsm/libs/draco/README.md +0 -1
- package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
- package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
- package/examples/jsm/libs/mikktspace.module.js +34 -9
- package/examples/jsm/lighting/ClusteredLighting.js +55 -0
- package/examples/jsm/lighting/LightProbeGrid.js +106 -76
- package/examples/jsm/lines/LineMaterial.js +38 -15
- package/examples/jsm/lines/LineSegments2.js +8 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +46 -13
- package/examples/jsm/loaders/EXRLoader.js +27 -55
- package/examples/jsm/loaders/HDRLoader.js +6 -28
- package/examples/jsm/loaders/KTX2Loader.js +31 -12
- package/examples/jsm/loaders/LDrawLoader.js +8 -8
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +4 -0
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MaterialXLoader.js +31 -9
- package/examples/jsm/loaders/NRRDLoader.js +3 -3
- package/examples/jsm/loaders/PCDLoader.js +7 -7
- package/examples/jsm/loaders/PLYLoader.js +218 -55
- package/examples/jsm/loaders/SVGLoader.js +547 -495
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDLoader.js +33 -9
- package/examples/jsm/loaders/VRMLLoader.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +93 -20
- package/examples/jsm/loaders/usd/USDCParser.js +1 -1
- package/examples/jsm/loaders/usd/USDComposer.js +52 -19
- package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
- package/examples/jsm/misc/Volume.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +1 -1
- package/examples/jsm/objects/Reflector.js +2 -3
- package/examples/jsm/objects/Water2Mesh.js +1 -1
- package/examples/jsm/physics/AmmoPhysics.js +15 -8
- package/examples/jsm/physics/RapierPhysics.js +27 -2
- package/examples/jsm/shaders/VolumeShader.js +31 -44
- package/examples/jsm/transpiler/GLSLDecoder.js +6 -6
- package/examples/jsm/transpiler/Linker.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +59 -19
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +2 -2
- package/examples/jsm/tsl/display/FXAANode.js +11 -12
- package/examples/jsm/tsl/display/GTAONode.js +34 -13
- package/examples/jsm/tsl/display/GodraysNode.js +1 -1
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +2 -2
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +13 -25
- package/examples/jsm/tsl/display/SSGINode.js +89 -39
- package/examples/jsm/tsl/display/SSRNode.js +829 -132
- package/examples/jsm/tsl/display/SSSNode.js +2 -2
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +1 -1
- package/examples/jsm/tsl/math/curlNoise.js +107 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
- package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
- package/examples/jsm/tsl/utils/RNoise.js +51 -0
- package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +126 -59
- package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
- package/examples/jsm/utils/SceneOptimizer.js +1 -1
- package/examples/jsm/webxr/ARButton.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
- package/package.json +7 -7
- package/src/Three.TSL.js +10 -3
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationAction.js +15 -11
- package/src/animation/AnimationClip.js +0 -139
- package/src/animation/KeyframeTrack.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/Camera.js +2 -2
- package/src/cameras/StereoCamera.js +5 -2
- package/src/constants.js +1 -1
- package/src/core/BufferGeometry.js +29 -7
- package/src/core/Object3D.js +17 -7
- package/src/core/Raycaster.js +1 -1
- package/src/core/RenderTarget.js +15 -2
- package/src/extras/PMREMGenerator.js +6 -4
- package/src/extras/TextureUtils.js +1 -1
- package/src/extras/core/ShapePath.js +149 -160
- package/src/geometries/SphereGeometry.js +8 -3
- package/src/helpers/DirectionalLightHelper.js +2 -0
- package/src/helpers/HemisphereLightHelper.js +2 -0
- package/src/helpers/PointLightHelper.js +2 -0
- package/src/helpers/SpotLightHelper.js +1 -1
- package/src/loaders/DataTextureLoader.js +69 -38
- package/src/loaders/LoadingManager.js +5 -0
- package/src/loaders/MaterialLoader.js +36 -266
- package/src/loaders/ObjectLoader.js +3 -1
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +196 -1
- package/src/materials/MeshBasicMaterial.js +24 -0
- package/src/materials/MeshDepthMaterial.js +10 -0
- package/src/materials/MeshDistanceMaterial.js +10 -0
- package/src/materials/MeshLambertMaterial.js +40 -1
- package/src/materials/MeshMatcapMaterial.js +25 -1
- package/src/materials/MeshNormalMaterial.js +9 -1
- package/src/materials/MeshPhongMaterial.js +40 -1
- package/src/materials/MeshPhysicalMaterial.js +38 -0
- package/src/materials/MeshStandardMaterial.js +42 -1
- package/src/materials/MeshToonMaterial.js +34 -1
- package/src/materials/PointsMaterial.js +7 -0
- package/src/materials/ShaderMaterial.js +86 -0
- package/src/materials/SpriteMaterial.js +7 -0
- package/src/materials/nodes/Line2NodeMaterial.js +378 -322
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +0 -30
- package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
- package/src/materials/nodes/MeshStandardNodeMaterial.js +0 -11
- package/src/materials/nodes/NodeMaterial.js +115 -71
- package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
- package/src/materials/nodes/manager/NodeMaterialObserver.js +49 -20
- package/src/math/Box3.js +5 -0
- package/src/math/FrustumArray.js +103 -133
- package/src/math/Interpolant.js +1 -1
- package/src/math/MathUtils.js +2 -2
- package/src/math/Matrix3.js +11 -0
- package/src/math/Matrix4.js +28 -3
- package/src/math/Vector2.js +2 -2
- package/src/math/Vector3.js +2 -2
- package/src/math/Vector4.js +2 -2
- package/src/math/interpolants/BezierInterpolant.js +4 -6
- package/src/nodes/Nodes.js +2 -5
- package/src/nodes/TSL.js +8 -6
- package/src/nodes/accessors/Arrays.js +4 -4
- package/src/nodes/accessors/Batch.js +108 -0
- package/src/nodes/accessors/Bitangent.js +2 -2
- package/src/nodes/accessors/BufferAttributeNode.js +13 -2
- package/src/nodes/accessors/Camera.js +7 -7
- package/src/nodes/accessors/ClippingNode.js +1 -1
- package/src/nodes/accessors/Instance.js +264 -0
- package/src/nodes/accessors/MaterialNode.js +18 -2
- package/src/nodes/accessors/MaterialProperties.js +4 -3
- package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
- package/src/nodes/accessors/Normal.js +13 -13
- package/src/nodes/accessors/Position.js +5 -1
- package/src/nodes/accessors/ReferenceNode.js +1 -0
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneProperties.js +1 -1
- package/src/nodes/accessors/Skinning.js +263 -0
- package/src/nodes/accessors/StorageBufferNode.js +2 -2
- package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
- package/src/nodes/accessors/StorageTextureNode.js +39 -7
- package/src/nodes/accessors/Tangent.js +4 -4
- package/src/nodes/accessors/TextureNode.js +60 -5
- package/src/nodes/code/FunctionNode.js +2 -16
- package/src/nodes/core/MRTNode.js +7 -2
- package/src/nodes/core/Node.js +39 -2
- package/src/nodes/core/NodeBuilder.js +201 -41
- package/src/nodes/core/NodeUtils.js +13 -13
- package/src/nodes/core/OutputStructNode.js +1 -1
- package/src/nodes/core/OverrideContextNode.js +153 -0
- package/src/nodes/core/PropertyNode.js +51 -5
- package/src/nodes/core/StackNode.js +56 -34
- package/src/nodes/core/StructNode.js +4 -6
- package/src/nodes/core/StructTypeNode.js +6 -6
- package/src/nodes/core/VarNode.js +8 -0
- package/src/nodes/core/VaryingNode.js +12 -2
- package/src/nodes/display/BlendModes.js +1 -41
- package/src/nodes/display/BumpMapNode.js +6 -1
- package/src/nodes/display/ColorAdjustment.js +10 -9
- package/src/nodes/display/FrontFacingNode.js +38 -9
- package/src/nodes/display/NormalMapNode.js +2 -2
- package/src/nodes/display/PassNode.js +35 -43
- package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
- package/src/nodes/display/RenderOutputNode.js +12 -3
- package/src/nodes/functions/VolumetricLightingModel.js +40 -7
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +1 -1
- package/src/nodes/lighting/EnvironmentNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +40 -2
- package/src/nodes/lighting/LightingContextNode.js +10 -2
- package/src/nodes/lighting/LightsNode.js +90 -37
- package/src/nodes/lighting/PointShadowNode.js +6 -1
- package/src/nodes/lighting/ShadowFilterNode.js +21 -52
- package/src/nodes/lighting/ShadowNode.js +34 -14
- package/src/nodes/materialx/lib/mx_noise.js +2 -2
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +39 -11
- package/src/nodes/math/OperatorNode.js +23 -23
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +33 -2
- package/src/nodes/tsl/TSLCore.js +63 -18
- package/src/nodes/utils/EquirectUV.js +30 -5
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/Packing.js +35 -4
- package/src/nodes/utils/RTTNode.js +40 -24
- package/src/nodes/utils/ReflectorNode.js +1 -0
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/objects/BatchedMesh.js +22 -14
- package/src/objects/InstancedMesh.js +0 -11
- package/src/objects/Skeleton.js +0 -9
- package/src/renderers/WebGLRenderer.js +19 -15
- package/src/renderers/common/Backend.js +49 -5
- package/src/renderers/common/Bindings.js +114 -45
- package/src/renderers/common/Buffer.js +9 -0
- package/src/renderers/common/ClippingContext.js +10 -2
- package/src/renderers/common/Info.js +63 -22
- package/src/renderers/common/Lighting.js +53 -5
- package/src/renderers/common/RenderList.js +41 -4
- package/src/renderers/common/RenderObject.js +73 -13
- package/src/renderers/common/Renderer.js +281 -108
- package/src/renderers/common/Sampler.js +16 -48
- package/src/renderers/common/Textures.js +32 -5
- package/src/renderers/common/TimestampQueryPool.js +1 -1
- package/src/renderers/common/UniformsGroup.js +31 -9
- package/src/renderers/common/XRManager.js +340 -22
- package/src/renderers/common/extras/PMREMGenerator.js +15 -38
- package/src/renderers/common/nodes/NodeBuilderState.js +9 -1
- package/src/renderers/common/nodes/NodeLibrary.js +4 -4
- package/src/renderers/common/nodes/NodeManager.js +63 -14
- package/src/renderers/common/nodes/NodeUniformBuffer.js +13 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/distance.glsl.js +1 -1
- package/src/renderers/webgl/WebGLOutput.js +2 -1
- package/src/renderers/webgl/WebGLProgram.js +5 -4
- package/src/renderers/webgl/WebGLPrograms.js +12 -5
- package/src/renderers/webgl/WebGLRenderLists.js +9 -1
- package/src/renderers/webgl/WebGLShaderCache.js +5 -11
- package/src/renderers/webgl/WebGLTextures.js +20 -7
- package/src/renderers/webgl/WebGLUniformsGroups.js +66 -38
- package/src/renderers/webgl-fallback/WebGLBackend.js +84 -25
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +138 -8
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +52 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +4 -2
- package/src/renderers/webgpu/WebGPUBackend.js +480 -169
- package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
- package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
- package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
- package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
- package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
- package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
- package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
- package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
- package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
- package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
- package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
- package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +164 -7
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +98 -38
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +72 -68
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +164 -69
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +158 -95
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +297 -141
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +33 -18
- package/src/renderers/webgpu/utils/WebGPUUtils.js +38 -3
- package/src/textures/DepthTexture.js +1 -1
- package/src/textures/ExternalTexture.js +0 -3
- package/examples/fonts/LICENSE +0 -13
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
- package/examples/fonts/README.md +0 -11
- package/examples/fonts/droid/NOTICE +0 -190
- package/examples/fonts/droid/README.txt +0 -18
- package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
- package/examples/fonts/gentilis_bold.typeface.json +0 -1
- package/examples/fonts/gentilis_regular.typeface.json +0 -1
- package/examples/fonts/helvetiker_bold.typeface.json +0 -1
- package/examples/fonts/helvetiker_regular.typeface.json +0 -1
- package/examples/fonts/optimer_bold.typeface.json +0 -1
- package/examples/fonts/optimer_regular.typeface.json +0 -1
- package/examples/fonts/ttf/README.md +0 -9
- package/examples/fonts/ttf/kenpixel.ttf +0 -0
- package/examples/jsm/inspector/extensions/extensions.json +0 -6
- package/examples/jsm/libs/ammo.wasm.js +0 -822
- package/examples/jsm/libs/ammo.wasm.wasm +0 -0
- package/examples/jsm/libs/draco/draco_encoder.js +0 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
- package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
- package/examples/jsm/libs/opentype.module.js +0 -14506
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lighting/TiledLighting.js +0 -42
- package/examples/jsm/tsl/display/AnamorphicNode.js +0 -293
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
- package/src/nodes/accessors/BatchNode.js +0 -163
- package/src/nodes/accessors/InstanceNode.js +0 -349
- package/src/nodes/accessors/InstancedMeshNode.js +0 -50
- package/src/nodes/accessors/SkinningNode.js +0 -328
|
@@ -594,6 +594,17 @@ class Renderer {
|
|
|
594
594
|
*/
|
|
595
595
|
this.onDeviceLost = this._onDeviceLost;
|
|
596
596
|
|
|
597
|
+
/**
|
|
598
|
+
* A callback function that defines what should happen when an uncaptured
|
|
599
|
+
* backend error is reported (e.g. a WebGPU validation/out-of-memory/internal
|
|
600
|
+
* error raised outside an error scope). Applications can override this to
|
|
601
|
+
* surface errors in their own UI without letting them escalate to a device
|
|
602
|
+
* loss. The default implementation logs to the console.
|
|
603
|
+
*
|
|
604
|
+
* @type {Function}
|
|
605
|
+
*/
|
|
606
|
+
this.onError = this._onError;
|
|
607
|
+
|
|
597
608
|
/**
|
|
598
609
|
* Defines the type of output buffers. The default `HalfFloatType` is recommend for
|
|
599
610
|
* best quality. To save memory and bandwidth, `UnsignedByteType` might be used.
|
|
@@ -650,6 +661,16 @@ class Renderer {
|
|
|
650
661
|
*/
|
|
651
662
|
this._compilationPromises = null;
|
|
652
663
|
|
|
664
|
+
/**
|
|
665
|
+
* When an override material is in use, this property points to the current
|
|
666
|
+
* source material during the rendering of a render object.
|
|
667
|
+
*
|
|
668
|
+
* @private
|
|
669
|
+
* @type {?Material}
|
|
670
|
+
* @default null
|
|
671
|
+
*/
|
|
672
|
+
this._currentSourceMaterial = null;
|
|
673
|
+
|
|
653
674
|
/**
|
|
654
675
|
* Whether the renderer should render transparent render objects or not.
|
|
655
676
|
*
|
|
@@ -716,10 +737,13 @@ class Renderer {
|
|
|
716
737
|
onShaderError: null,
|
|
717
738
|
getShaderAsync: async ( scene, camera, object ) => {
|
|
718
739
|
|
|
719
|
-
await this.compileAsync(
|
|
740
|
+
await this.compileAsync( object, camera, scene );
|
|
741
|
+
|
|
742
|
+
const useFrameBufferTarget = this.needsFrameBufferTarget && this._renderTarget === null;
|
|
743
|
+
const renderTarget = useFrameBufferTarget ? this._getFrameBufferTarget() : ( this._renderTarget || this._outputRenderTarget );
|
|
720
744
|
|
|
721
745
|
const renderList = this._renderLists.get( scene, camera );
|
|
722
|
-
const renderContext = this._renderContexts.get(
|
|
746
|
+
const renderContext = this._renderContexts.get( renderTarget, this._mrt );
|
|
723
747
|
|
|
724
748
|
const material = scene.overrideMaterial || object.material;
|
|
725
749
|
|
|
@@ -912,10 +936,29 @@ class Renderer {
|
|
|
912
936
|
|
|
913
937
|
//
|
|
914
938
|
|
|
939
|
+
if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
|
|
940
|
+
|
|
941
|
+
camera = this._updateCamera( camera );
|
|
942
|
+
|
|
943
|
+
//
|
|
944
|
+
|
|
915
945
|
sceneRef.onBeforeRender( this, scene, camera, renderTarget );
|
|
916
946
|
|
|
917
947
|
//
|
|
918
948
|
|
|
949
|
+
const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
|
|
950
|
+
|
|
951
|
+
if ( camera.isArrayCamera ) {
|
|
952
|
+
|
|
953
|
+
frustum.setFromArrayCamera( camera );
|
|
954
|
+
|
|
955
|
+
} else {
|
|
956
|
+
|
|
957
|
+
_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
|
|
958
|
+
frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
|
|
959
|
+
|
|
960
|
+
}
|
|
961
|
+
|
|
919
962
|
// Use sceneRef for render list to ensure lightsNode matches between compileAsync and render
|
|
920
963
|
const renderList = this._renderLists.get( sceneRef, camera );
|
|
921
964
|
renderList.begin();
|
|
@@ -997,12 +1040,11 @@ class Renderer {
|
|
|
997
1040
|
renderObject.drawRange = item.object.geometry.drawRange;
|
|
998
1041
|
renderObject.group = item.group;
|
|
999
1042
|
|
|
1000
|
-
this._geometries.updateForRender( renderObject );
|
|
1001
|
-
|
|
1002
1043
|
// Use async node building to yield to main thread
|
|
1003
1044
|
await this._nodes.getForRenderAsync( renderObject );
|
|
1004
1045
|
|
|
1005
1046
|
this._nodes.updateBefore( renderObject );
|
|
1047
|
+
this._geometries.updateForRender( renderObject );
|
|
1006
1048
|
this._nodes.updateForRender( renderObject );
|
|
1007
1049
|
this._bindings.updateForRender( renderObject );
|
|
1008
1050
|
|
|
@@ -1196,6 +1238,41 @@ class Renderer {
|
|
|
1196
1238
|
|
|
1197
1239
|
}
|
|
1198
1240
|
|
|
1241
|
+
/**
|
|
1242
|
+
* Default implementation of the uncaptured backend error callback.
|
|
1243
|
+
*
|
|
1244
|
+
* @private
|
|
1245
|
+
* @param {Object} info - Information about the uncaptured error.
|
|
1246
|
+
*/
|
|
1247
|
+
_onError( info ) {
|
|
1248
|
+
|
|
1249
|
+
let errorMessage = `WebGPURenderer: Uncaptured ${ info.api } ${ info.type }`;
|
|
1250
|
+
|
|
1251
|
+
if ( info.message ) {
|
|
1252
|
+
|
|
1253
|
+
errorMessage += `: ${ info.message }`;
|
|
1254
|
+
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
error( errorMessage );
|
|
1258
|
+
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
/**
|
|
1262
|
+
* Returns `true` if the cached GPU render bundle for the given bundle group is
|
|
1263
|
+
* out-of-date and must be recorded again.
|
|
1264
|
+
*
|
|
1265
|
+
* @private
|
|
1266
|
+
* @param {BundleGroup} bundleGroup - The bundle group.
|
|
1267
|
+
* @param {Object} renderBundleData - The backend data of the render bundle.
|
|
1268
|
+
* @return {boolean} Whether the cached render bundle needs an update.
|
|
1269
|
+
*/
|
|
1270
|
+
_bundleNeedsUpdate( bundleGroup, renderBundleData ) {
|
|
1271
|
+
|
|
1272
|
+
return renderBundleData.bundleGPU === undefined || bundleGroup.version !== renderBundleData.version;
|
|
1273
|
+
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1199
1276
|
/**
|
|
1200
1277
|
* Renders the given render bundle.
|
|
1201
1278
|
*
|
|
@@ -1214,20 +1291,12 @@ class Renderer {
|
|
|
1214
1291
|
|
|
1215
1292
|
const renderBundle = this._bundles.get( bundleGroup, camera, renderContext );
|
|
1216
1293
|
const renderBundleData = this.backend.get( renderBundle );
|
|
1217
|
-
|
|
1218
|
-
const needsUpdate = bundleGroup.version !== renderBundleData.version;
|
|
1219
|
-
const renderBundleNeedsUpdate = needsUpdate || renderBundleData.bundleGPU === undefined;
|
|
1294
|
+
const renderBundleNeedsUpdate = this._bundleNeedsUpdate( bundleGroup, renderBundleData );
|
|
1220
1295
|
|
|
1221
1296
|
if ( renderBundleNeedsUpdate ) {
|
|
1222
1297
|
|
|
1223
1298
|
this.backend.beginBundle( renderContext );
|
|
1224
1299
|
|
|
1225
|
-
if ( renderBundleData.renderObjects === undefined || needsUpdate ) {
|
|
1226
|
-
|
|
1227
|
-
renderBundleData.renderObjects = [];
|
|
1228
|
-
|
|
1229
|
-
}
|
|
1230
|
-
|
|
1231
1300
|
this._currentRenderBundle = renderBundle;
|
|
1232
1301
|
|
|
1233
1302
|
const {
|
|
@@ -1259,6 +1328,7 @@ class Renderer {
|
|
|
1259
1328
|
|
|
1260
1329
|
this._nodes.updateBefore( renderObject );
|
|
1261
1330
|
|
|
1331
|
+
this._geometries.updateForRender( renderObject );
|
|
1262
1332
|
this._nodes.updateForRender( renderObject );
|
|
1263
1333
|
this._bindings.updateForRender( renderObject );
|
|
1264
1334
|
|
|
@@ -1293,7 +1363,7 @@ class Renderer {
|
|
|
1293
1363
|
|
|
1294
1364
|
if ( this._initialized === false ) {
|
|
1295
1365
|
|
|
1296
|
-
throw new Error( 'Renderer: .render() called before the backend is initialized. Use "await renderer.init();" before rendering.' );
|
|
1366
|
+
throw new Error( 'THREE.Renderer: .render() called before the backend is initialized. Use "await renderer.init();" before rendering.' );
|
|
1297
1367
|
|
|
1298
1368
|
}
|
|
1299
1369
|
|
|
@@ -1313,6 +1383,37 @@ class Renderer {
|
|
|
1313
1383
|
|
|
1314
1384
|
}
|
|
1315
1385
|
|
|
1386
|
+
_renderOutputLayers( quad, renderTarget ) {
|
|
1387
|
+
|
|
1388
|
+
if ( renderTarget.texture.isArrayTexture !== true || renderTarget.texture.image.depth <= 1 ) {
|
|
1389
|
+
|
|
1390
|
+
this._renderScene( quad, quad.camera, false );
|
|
1391
|
+
return;
|
|
1392
|
+
|
|
1393
|
+
}
|
|
1394
|
+
|
|
1395
|
+
const currentActiveCubeFace = this._activeCubeFace;
|
|
1396
|
+
|
|
1397
|
+
try {
|
|
1398
|
+
|
|
1399
|
+
for ( let layer = 0; layer < renderTarget.texture.image.depth; layer ++ ) {
|
|
1400
|
+
|
|
1401
|
+
this._nodes.setOutputLayerIndex( layer );
|
|
1402
|
+
this._activeCubeFace = layer;
|
|
1403
|
+
|
|
1404
|
+
this._renderScene( quad, quad.camera, false );
|
|
1405
|
+
|
|
1406
|
+
}
|
|
1407
|
+
|
|
1408
|
+
} finally {
|
|
1409
|
+
|
|
1410
|
+
this._nodes.setOutputLayerIndex( 0 );
|
|
1411
|
+
this._activeCubeFace = currentActiveCubeFace;
|
|
1412
|
+
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
}
|
|
1416
|
+
|
|
1316
1417
|
/**
|
|
1317
1418
|
* Returns an internal render target which is used when computing the output tone mapping
|
|
1318
1419
|
* and color space conversion. Unlike in `WebGLRenderer`, this is done in a separate render
|
|
@@ -1398,6 +1499,7 @@ class Renderer {
|
|
|
1398
1499
|
frameBufferTarget.scissor.multiplyScalar( pixelRatio );
|
|
1399
1500
|
frameBufferTarget.scissorTest = scissorTest;
|
|
1400
1501
|
frameBufferTarget.multiview = outputRenderTarget !== null ? outputRenderTarget.multiview : false;
|
|
1502
|
+
frameBufferTarget.useArrayDepthTexture = outputRenderTarget !== null ? outputRenderTarget.useArrayDepthTexture : false;
|
|
1401
1503
|
frameBufferTarget.resolveDepthBuffer = outputRenderTarget !== null ? outputRenderTarget.resolveDepthBuffer : true;
|
|
1402
1504
|
frameBufferTarget._autoAllocateDepthBuffer = outputRenderTarget !== null ? outputRenderTarget._autoAllocateDepthBuffer : false;
|
|
1403
1505
|
|
|
@@ -1431,6 +1533,8 @@ class Renderer {
|
|
|
1431
1533
|
const previousRenderObjectFunction = this._currentRenderObjectFunction;
|
|
1432
1534
|
const previousHandleObjectFunction = this._handleObjectFunction;
|
|
1433
1535
|
|
|
1536
|
+
this.lighting.beginRender( scene );
|
|
1537
|
+
|
|
1434
1538
|
//
|
|
1435
1539
|
|
|
1436
1540
|
this._callDepth ++;
|
|
@@ -1504,87 +1608,9 @@ class Renderer {
|
|
|
1504
1608
|
|
|
1505
1609
|
//
|
|
1506
1610
|
|
|
1507
|
-
|
|
1508
|
-
const xr = this.xr;
|
|
1509
|
-
|
|
1510
|
-
if ( xr.isPresenting === false ) {
|
|
1511
|
-
|
|
1512
|
-
let projectionMatrixNeedsUpdate = false;
|
|
1513
|
-
|
|
1514
|
-
// reversed depth
|
|
1515
|
-
|
|
1516
|
-
if ( this.reversedDepthBuffer === true && camera.reversedDepth !== true ) {
|
|
1517
|
-
|
|
1518
|
-
camera._reversedDepth = true;
|
|
1519
|
-
|
|
1520
|
-
if ( camera.isArrayCamera ) {
|
|
1521
|
-
|
|
1522
|
-
for ( const subCamera of camera.cameras ) {
|
|
1523
|
-
|
|
1524
|
-
subCamera._reversedDepth = true;
|
|
1525
|
-
|
|
1526
|
-
}
|
|
1527
|
-
|
|
1528
|
-
}
|
|
1529
|
-
|
|
1530
|
-
projectionMatrixNeedsUpdate = true;
|
|
1531
|
-
|
|
1532
|
-
}
|
|
1533
|
-
|
|
1534
|
-
// WebGPU/WebGL coordinate system
|
|
1535
|
-
|
|
1536
|
-
const coordinateSystem = this.coordinateSystem;
|
|
1537
|
-
|
|
1538
|
-
if ( camera.coordinateSystem !== coordinateSystem ) {
|
|
1539
|
-
|
|
1540
|
-
camera.coordinateSystem = coordinateSystem;
|
|
1541
|
-
|
|
1542
|
-
if ( camera.isArrayCamera ) {
|
|
1543
|
-
|
|
1544
|
-
for ( const subCamera of camera.cameras ) {
|
|
1545
|
-
|
|
1546
|
-
subCamera.coordinateSystem = coordinateSystem;
|
|
1547
|
-
|
|
1548
|
-
}
|
|
1549
|
-
|
|
1550
|
-
}
|
|
1551
|
-
|
|
1552
|
-
projectionMatrixNeedsUpdate = true;
|
|
1553
|
-
|
|
1554
|
-
}
|
|
1555
|
-
|
|
1556
|
-
// camera update
|
|
1557
|
-
|
|
1558
|
-
if ( projectionMatrixNeedsUpdate === true ) {
|
|
1559
|
-
|
|
1560
|
-
camera.updateProjectionMatrix();
|
|
1561
|
-
|
|
1562
|
-
if ( camera.isArrayCamera ) {
|
|
1563
|
-
|
|
1564
|
-
for ( const subCamera of camera.cameras ) {
|
|
1565
|
-
|
|
1566
|
-
subCamera.updateProjectionMatrix();
|
|
1567
|
-
|
|
1568
|
-
}
|
|
1569
|
-
|
|
1570
|
-
}
|
|
1571
|
-
|
|
1572
|
-
}
|
|
1573
|
-
|
|
1574
|
-
}
|
|
1575
|
-
|
|
1576
|
-
//
|
|
1577
|
-
|
|
1578
1611
|
if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
|
|
1579
1612
|
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
if ( xr.enabled === true && xr.isPresenting === true ) {
|
|
1583
|
-
|
|
1584
|
-
if ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );
|
|
1585
|
-
camera = xr.getCamera(); // use XR camera for rendering
|
|
1586
|
-
|
|
1587
|
-
}
|
|
1613
|
+
camera = this._updateCamera( camera );
|
|
1588
1614
|
|
|
1589
1615
|
//
|
|
1590
1616
|
|
|
@@ -1632,7 +1658,11 @@ class Renderer {
|
|
|
1632
1658
|
|
|
1633
1659
|
const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
|
|
1634
1660
|
|
|
1635
|
-
if (
|
|
1661
|
+
if ( camera.isArrayCamera ) {
|
|
1662
|
+
|
|
1663
|
+
frustum.setFromArrayCamera( camera );
|
|
1664
|
+
|
|
1665
|
+
} else {
|
|
1636
1666
|
|
|
1637
1667
|
_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
|
|
1638
1668
|
frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
|
|
@@ -1648,7 +1678,7 @@ class Renderer {
|
|
|
1648
1678
|
|
|
1649
1679
|
if ( this.sortObjects === true ) {
|
|
1650
1680
|
|
|
1651
|
-
renderList.sort( this._opaqueSort, this._transparentSort );
|
|
1681
|
+
renderList.sort( this._opaqueSort, this._transparentSort, camera.reversedDepth );
|
|
1652
1682
|
|
|
1653
1683
|
}
|
|
1654
1684
|
|
|
@@ -1731,11 +1761,12 @@ class Renderer {
|
|
|
1731
1761
|
// restore render tree
|
|
1732
1762
|
|
|
1733
1763
|
nodeFrame.renderId = previousRenderId;
|
|
1734
|
-
|
|
1735
1764
|
this._currentRenderContext = previousRenderContext;
|
|
1736
1765
|
this._currentRenderObjectFunction = previousRenderObjectFunction;
|
|
1737
1766
|
this._handleObjectFunction = previousHandleObjectFunction;
|
|
1738
1767
|
|
|
1768
|
+
this.lighting.finishRender( scene );
|
|
1769
|
+
|
|
1739
1770
|
//
|
|
1740
1771
|
|
|
1741
1772
|
this._callDepth --;
|
|
@@ -1837,8 +1868,7 @@ class Renderer {
|
|
|
1837
1868
|
|
|
1838
1869
|
this.autoClear = false;
|
|
1839
1870
|
this.xr.enabled = false;
|
|
1840
|
-
|
|
1841
|
-
this._renderScene( quad, quad.camera, false );
|
|
1871
|
+
this._renderOutputLayers( quad, renderTarget );
|
|
1842
1872
|
|
|
1843
1873
|
this.autoClear = currentAutoClear;
|
|
1844
1874
|
this.xr.enabled = currentXR;
|
|
@@ -2269,7 +2299,7 @@ class Renderer {
|
|
|
2269
2299
|
|
|
2270
2300
|
if ( this._initialized === false ) {
|
|
2271
2301
|
|
|
2272
|
-
throw new Error( 'Renderer: .clear() called before the backend is initialized. Use "await renderer.init();" before
|
|
2302
|
+
throw new Error( 'THREE.Renderer: .clear() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
|
|
2273
2303
|
|
|
2274
2304
|
}
|
|
2275
2305
|
|
|
@@ -2842,7 +2872,7 @@ class Renderer {
|
|
|
2842
2872
|
|
|
2843
2873
|
if ( this._initialized === false ) {
|
|
2844
2874
|
|
|
2845
|
-
throw new Error( 'Renderer: .hasFeature() called before the backend is initialized. Use "await renderer.init();" before
|
|
2875
|
+
throw new Error( 'THREE.Renderer: .hasFeature() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
|
|
2846
2876
|
|
|
2847
2877
|
}
|
|
2848
2878
|
|
|
@@ -2892,7 +2922,7 @@ class Renderer {
|
|
|
2892
2922
|
|
|
2893
2923
|
if ( this._initialized === false ) {
|
|
2894
2924
|
|
|
2895
|
-
throw new Error( 'Renderer: .initTexture() called before the backend is initialized. Use "await renderer.init();" before
|
|
2925
|
+
throw new Error( 'THREE.Renderer: .initTexture() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
|
|
2896
2926
|
|
|
2897
2927
|
}
|
|
2898
2928
|
|
|
@@ -2909,7 +2939,7 @@ class Renderer {
|
|
|
2909
2939
|
|
|
2910
2940
|
if ( this._initialized === false ) {
|
|
2911
2941
|
|
|
2912
|
-
throw new Error( 'Renderer: .initRenderTarget() called before the backend is initialized. Use "await renderer.init();" before
|
|
2942
|
+
throw new Error( 'THREE.Renderer: .initRenderTarget() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
|
|
2913
2943
|
|
|
2914
2944
|
}
|
|
2915
2945
|
|
|
@@ -3073,7 +3103,7 @@ class Renderer {
|
|
|
3073
3103
|
|
|
3074
3104
|
const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
|
|
3075
3105
|
|
|
3076
|
-
if ( ! object.frustumCulled || frustum.intersectsSprite( object
|
|
3106
|
+
if ( ! object.frustumCulled || frustum.intersectsSprite( object ) ) {
|
|
3077
3107
|
|
|
3078
3108
|
if ( this.sortObjects === true ) {
|
|
3079
3109
|
|
|
@@ -3099,7 +3129,7 @@ class Renderer {
|
|
|
3099
3129
|
|
|
3100
3130
|
const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
|
|
3101
3131
|
|
|
3102
|
-
if ( ! object.frustumCulled || frustum.intersectsObject( object
|
|
3132
|
+
if ( ! object.frustumCulled || frustum.intersectsObject( object ) ) {
|
|
3103
3133
|
|
|
3104
3134
|
const { geometry, material } = object;
|
|
3105
3135
|
|
|
@@ -3148,9 +3178,40 @@ class Renderer {
|
|
|
3148
3178
|
const baseRenderList = renderList;
|
|
3149
3179
|
|
|
3150
3180
|
// replace render list
|
|
3181
|
+
|
|
3151
3182
|
renderList = this._renderLists.get( object, camera );
|
|
3152
3183
|
|
|
3153
|
-
|
|
3184
|
+
const renderBundle = this._bundles.get( object, camera, this._currentRenderContext );
|
|
3185
|
+
const renderBundleData = this.backend.get( renderBundle );
|
|
3186
|
+
const renderBundleNeedsUpdate = this._bundleNeedsUpdate( object, renderBundleData );
|
|
3187
|
+
|
|
3188
|
+
if ( renderBundleNeedsUpdate ) {
|
|
3189
|
+
|
|
3190
|
+
// update render list if necessary
|
|
3191
|
+
|
|
3192
|
+
renderList.begin();
|
|
3193
|
+
|
|
3194
|
+
if ( renderBundleData.renderObjects === undefined ) {
|
|
3195
|
+
|
|
3196
|
+
renderBundleData.renderObjects = [];
|
|
3197
|
+
|
|
3198
|
+
} else {
|
|
3199
|
+
|
|
3200
|
+
renderBundleData.renderObjects.length = 0;
|
|
3201
|
+
|
|
3202
|
+
}
|
|
3203
|
+
|
|
3204
|
+
const children = object.children;
|
|
3205
|
+
|
|
3206
|
+
for ( let i = 0, l = children.length; i < l; i ++ ) {
|
|
3207
|
+
|
|
3208
|
+
this._projectObject( children[ i ], camera, groupOrder, renderList, clippingContext );
|
|
3209
|
+
|
|
3210
|
+
}
|
|
3211
|
+
|
|
3212
|
+
renderList.finish();
|
|
3213
|
+
|
|
3214
|
+
}
|
|
3154
3215
|
|
|
3155
3216
|
baseRenderList.pushBundle( {
|
|
3156
3217
|
bundleGroup: object,
|
|
@@ -3158,10 +3219,12 @@ class Renderer {
|
|
|
3158
3219
|
renderList,
|
|
3159
3220
|
} );
|
|
3160
3221
|
|
|
3161
|
-
|
|
3222
|
+
return;
|
|
3162
3223
|
|
|
3163
3224
|
}
|
|
3164
3225
|
|
|
3226
|
+
//
|
|
3227
|
+
|
|
3165
3228
|
const children = object.children;
|
|
3166
3229
|
|
|
3167
3230
|
for ( let i = 0, l = children.length; i < l; i ++ ) {
|
|
@@ -3278,7 +3341,7 @@ class Renderer {
|
|
|
3278
3341
|
|
|
3279
3342
|
if ( cache === undefined || cache.version !== version ) {
|
|
3280
3343
|
|
|
3281
|
-
const hasMap = material.map
|
|
3344
|
+
const hasMap = material.map && material.map.isTexture;
|
|
3282
3345
|
const hasColorNode = material.colorNode && material.colorNode.isNode;
|
|
3283
3346
|
const hasCastShadowNode = material.castShadowNode && material.castShadowNode.isNode;
|
|
3284
3347
|
const hasMaskNode = ( material.maskShadowNode && material.maskShadowNode.isNode ) || ( material.maskNode && material.maskNode.isNode );
|
|
@@ -3371,6 +3434,98 @@ class Renderer {
|
|
|
3371
3434
|
|
|
3372
3435
|
}
|
|
3373
3436
|
|
|
3437
|
+
/**
|
|
3438
|
+
* Updates the camera so it's prepared for rendering operations.
|
|
3439
|
+
*
|
|
3440
|
+
* @private
|
|
3441
|
+
* @param {Camera} camera - The camera to update.
|
|
3442
|
+
* @return {Camera} The returned camera might be different depending on whether XR is used or not.
|
|
3443
|
+
*/
|
|
3444
|
+
_updateCamera( camera ) {
|
|
3445
|
+
|
|
3446
|
+
const xr = this.xr;
|
|
3447
|
+
|
|
3448
|
+
if ( xr.isPresenting === false ) {
|
|
3449
|
+
|
|
3450
|
+
let projectionMatrixNeedsUpdate = false;
|
|
3451
|
+
|
|
3452
|
+
// reversed depth
|
|
3453
|
+
|
|
3454
|
+
if ( this.reversedDepthBuffer === true && camera.reversedDepth !== true ) {
|
|
3455
|
+
|
|
3456
|
+
camera._reversedDepth = true;
|
|
3457
|
+
|
|
3458
|
+
if ( camera.isArrayCamera ) {
|
|
3459
|
+
|
|
3460
|
+
for ( const subCamera of camera.cameras ) {
|
|
3461
|
+
|
|
3462
|
+
subCamera._reversedDepth = true;
|
|
3463
|
+
|
|
3464
|
+
}
|
|
3465
|
+
|
|
3466
|
+
}
|
|
3467
|
+
|
|
3468
|
+
projectionMatrixNeedsUpdate = true;
|
|
3469
|
+
|
|
3470
|
+
}
|
|
3471
|
+
|
|
3472
|
+
// WebGPU/WebGL coordinate system
|
|
3473
|
+
|
|
3474
|
+
const coordinateSystem = this.coordinateSystem;
|
|
3475
|
+
|
|
3476
|
+
if ( camera.coordinateSystem !== coordinateSystem ) {
|
|
3477
|
+
|
|
3478
|
+
camera.coordinateSystem = coordinateSystem;
|
|
3479
|
+
|
|
3480
|
+
if ( camera.isArrayCamera ) {
|
|
3481
|
+
|
|
3482
|
+
for ( const subCamera of camera.cameras ) {
|
|
3483
|
+
|
|
3484
|
+
subCamera.coordinateSystem = coordinateSystem;
|
|
3485
|
+
|
|
3486
|
+
}
|
|
3487
|
+
|
|
3488
|
+
}
|
|
3489
|
+
|
|
3490
|
+
projectionMatrixNeedsUpdate = true;
|
|
3491
|
+
|
|
3492
|
+
}
|
|
3493
|
+
|
|
3494
|
+
// camera update
|
|
3495
|
+
|
|
3496
|
+
if ( projectionMatrixNeedsUpdate === true ) {
|
|
3497
|
+
|
|
3498
|
+
camera.updateProjectionMatrix();
|
|
3499
|
+
|
|
3500
|
+
if ( camera.isArrayCamera ) {
|
|
3501
|
+
|
|
3502
|
+
for ( const subCamera of camera.cameras ) {
|
|
3503
|
+
|
|
3504
|
+
subCamera.updateProjectionMatrix();
|
|
3505
|
+
|
|
3506
|
+
}
|
|
3507
|
+
|
|
3508
|
+
}
|
|
3509
|
+
|
|
3510
|
+
}
|
|
3511
|
+
|
|
3512
|
+
}
|
|
3513
|
+
|
|
3514
|
+
if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
|
|
3515
|
+
|
|
3516
|
+
// handle XR
|
|
3517
|
+
|
|
3518
|
+
if ( xr.enabled === true && xr.isPresenting === true ) {
|
|
3519
|
+
|
|
3520
|
+
if ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );
|
|
3521
|
+
camera = xr.getCamera(); // use XR camera for rendering
|
|
3522
|
+
|
|
3523
|
+
}
|
|
3524
|
+
|
|
3525
|
+
return camera;
|
|
3526
|
+
|
|
3527
|
+
}
|
|
3528
|
+
|
|
3374
3529
|
/**
|
|
3375
3530
|
* This method represents the default render object function that manages the render lifecycle
|
|
3376
3531
|
* of the object.
|
|
@@ -3392,6 +3547,11 @@ class Renderer {
|
|
|
3392
3547
|
let materialDepthNode;
|
|
3393
3548
|
let materialPositionNode;
|
|
3394
3549
|
let materialSide;
|
|
3550
|
+
let materialDisplacementMap;
|
|
3551
|
+
let materialDisplacementScale;
|
|
3552
|
+
let materialDisplacementBias;
|
|
3553
|
+
|
|
3554
|
+
const previousSourceMaterial = this._currentSourceMaterial;
|
|
3395
3555
|
|
|
3396
3556
|
//
|
|
3397
3557
|
|
|
@@ -3401,6 +3561,8 @@ class Renderer {
|
|
|
3401
3561
|
|
|
3402
3562
|
if ( material.allowOverride === true && scene.overrideMaterial !== null ) {
|
|
3403
3563
|
|
|
3564
|
+
this._currentSourceMaterial = material;
|
|
3565
|
+
|
|
3404
3566
|
const overrideMaterial = scene.overrideMaterial;
|
|
3405
3567
|
|
|
3406
3568
|
materialOverride = true;
|
|
@@ -3410,6 +3572,9 @@ class Renderer {
|
|
|
3410
3572
|
materialDepthNode = ( overrideMaterial.isNodeMaterial ) ? overrideMaterial.depthNode : null;
|
|
3411
3573
|
materialPositionNode = ( overrideMaterial.isNodeMaterial ) ? overrideMaterial.positionNode : null;
|
|
3412
3574
|
materialSide = scene.overrideMaterial.side;
|
|
3575
|
+
materialDisplacementMap = overrideMaterial.displacementMap;
|
|
3576
|
+
materialDisplacementScale = overrideMaterial.displacementScale;
|
|
3577
|
+
materialDisplacementBias = overrideMaterial.displacementBias;
|
|
3413
3578
|
|
|
3414
3579
|
if ( material.positionNode && material.positionNode.isNode ) {
|
|
3415
3580
|
|
|
@@ -3419,6 +3584,9 @@ class Renderer {
|
|
|
3419
3584
|
|
|
3420
3585
|
overrideMaterial.alphaTest = material.alphaTest;
|
|
3421
3586
|
overrideMaterial.alphaMap = material.alphaMap;
|
|
3587
|
+
overrideMaterial.displacementMap = material.displacementMap;
|
|
3588
|
+
overrideMaterial.displacementScale = material.displacementScale;
|
|
3589
|
+
overrideMaterial.displacementBias = material.displacementBias;
|
|
3422
3590
|
overrideMaterial.transparent = material.transparent || material.transmission > 0 ||
|
|
3423
3591
|
( material.transmissionNode && material.transmissionNode.isNode ) ||
|
|
3424
3592
|
( material.backdropNode && material.backdropNode.isNode );
|
|
@@ -3473,9 +3641,14 @@ class Renderer {
|
|
|
3473
3641
|
scene.overrideMaterial.depthNode = materialDepthNode;
|
|
3474
3642
|
scene.overrideMaterial.positionNode = materialPositionNode;
|
|
3475
3643
|
scene.overrideMaterial.side = materialSide;
|
|
3644
|
+
scene.overrideMaterial.displacementMap = materialDisplacementMap;
|
|
3645
|
+
scene.overrideMaterial.displacementScale = materialDisplacementScale;
|
|
3646
|
+
scene.overrideMaterial.displacementBias = materialDisplacementBias;
|
|
3476
3647
|
|
|
3477
3648
|
}
|
|
3478
3649
|
|
|
3650
|
+
this._currentSourceMaterial = previousSourceMaterial;
|
|
3651
|
+
|
|
3479
3652
|
//
|
|
3480
3653
|
|
|
3481
3654
|
object.onAfterRender( this, scene, camera, geometry, material, group );
|
|
@@ -3492,7 +3665,7 @@ class Renderer {
|
|
|
3492
3665
|
|
|
3493
3666
|
if ( this._initialized === false ) {
|
|
3494
3667
|
|
|
3495
|
-
throw new Error( 'Renderer: .hasCompatibility() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
|
|
3668
|
+
throw new Error( 'THREE.Renderer: .hasCompatibility() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
|
|
3496
3669
|
|
|
3497
3670
|
}
|
|
3498
3671
|
|