@gnsx/three 0.184.20 → 0.185.3
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 +1261 -926
- package/build/three.core.js +1104 -829
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +157 -97
- 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 +7542 -3371
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +7542 -3370
- 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 +67 -58
- 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 +124 -91
- 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 -74
- 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 +92 -37
- package/src/nodes/lighting/PointShadowNode.js +7 -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 +21 -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 +42 -4
- package/src/renderers/common/RenderObject.js +73 -13
- package/src/renderers/common/Renderer.js +282 -109
- 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 +11 -4
- 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
|
@@ -599,6 +599,17 @@ class Renderer {
|
|
|
599
599
|
*/
|
|
600
600
|
this.onDeviceLost = this._onDeviceLost;
|
|
601
601
|
|
|
602
|
+
/**
|
|
603
|
+
* A callback function that defines what should happen when an uncaptured
|
|
604
|
+
* backend error is reported (e.g. a WebGPU validation/out-of-memory/internal
|
|
605
|
+
* error raised outside an error scope). Applications can override this to
|
|
606
|
+
* surface errors in their own UI without letting them escalate to a device
|
|
607
|
+
* loss. The default implementation logs to the console.
|
|
608
|
+
*
|
|
609
|
+
* @type {Function}
|
|
610
|
+
*/
|
|
611
|
+
this.onError = this._onError;
|
|
612
|
+
|
|
602
613
|
/**
|
|
603
614
|
* Defines the type of output buffers. The default `HalfFloatType` is recommend for
|
|
604
615
|
* best quality. To save memory and bandwidth, `UnsignedByteType` might be used.
|
|
@@ -655,6 +666,16 @@ class Renderer {
|
|
|
655
666
|
*/
|
|
656
667
|
this._compilationPromises = null;
|
|
657
668
|
|
|
669
|
+
/**
|
|
670
|
+
* When an override material is in use, this property points to the current
|
|
671
|
+
* source material during the rendering of a render object.
|
|
672
|
+
*
|
|
673
|
+
* @private
|
|
674
|
+
* @type {?Material}
|
|
675
|
+
* @default null
|
|
676
|
+
*/
|
|
677
|
+
this._currentSourceMaterial = null;
|
|
678
|
+
|
|
658
679
|
/**
|
|
659
680
|
* Whether the renderer should render transparent render objects or not.
|
|
660
681
|
*
|
|
@@ -721,10 +742,13 @@ class Renderer {
|
|
|
721
742
|
onShaderError: null,
|
|
722
743
|
getShaderAsync: async ( scene, camera, object ) => {
|
|
723
744
|
|
|
724
|
-
await this.compileAsync(
|
|
745
|
+
await this.compileAsync( object, camera, scene );
|
|
746
|
+
|
|
747
|
+
const useFrameBufferTarget = this.needsFrameBufferTarget && this._renderTarget === null;
|
|
748
|
+
const renderTarget = useFrameBufferTarget ? this._getFrameBufferTarget() : ( this._renderTarget || this._outputRenderTarget );
|
|
725
749
|
|
|
726
750
|
const renderList = this._renderLists.get( scene, camera );
|
|
727
|
-
const renderContext = this._renderContexts.get(
|
|
751
|
+
const renderContext = this._renderContexts.get( renderTarget, this._mrt );
|
|
728
752
|
|
|
729
753
|
const material = scene.overrideMaterial || object.material;
|
|
730
754
|
|
|
@@ -917,10 +941,29 @@ class Renderer {
|
|
|
917
941
|
|
|
918
942
|
//
|
|
919
943
|
|
|
944
|
+
if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
|
|
945
|
+
|
|
946
|
+
camera = this._updateCamera( camera );
|
|
947
|
+
|
|
948
|
+
//
|
|
949
|
+
|
|
920
950
|
sceneRef.onBeforeRender( this, scene, camera, renderTarget );
|
|
921
951
|
|
|
922
952
|
//
|
|
923
953
|
|
|
954
|
+
const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
|
|
955
|
+
|
|
956
|
+
if ( camera.isArrayCamera ) {
|
|
957
|
+
|
|
958
|
+
frustum.setFromArrayCamera( camera );
|
|
959
|
+
|
|
960
|
+
} else {
|
|
961
|
+
|
|
962
|
+
_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
|
|
963
|
+
frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
|
|
964
|
+
|
|
965
|
+
}
|
|
966
|
+
|
|
924
967
|
// Use sceneRef for render list to ensure lightsNode matches between compileAsync and render
|
|
925
968
|
const renderList = this._renderLists.get( sceneRef, camera );
|
|
926
969
|
renderList.begin();
|
|
@@ -1006,12 +1049,11 @@ class Renderer {
|
|
|
1006
1049
|
renderObject.drawRange = item.object.geometry.drawRange;
|
|
1007
1050
|
renderObject.group = item.group;
|
|
1008
1051
|
|
|
1009
|
-
this._geometries.updateForRender( renderObject );
|
|
1010
|
-
|
|
1011
1052
|
// Use async node building to yield to main thread
|
|
1012
1053
|
await this._nodes.getForRenderAsync( renderObject );
|
|
1013
1054
|
|
|
1014
1055
|
this._nodes.updateBefore( renderObject );
|
|
1056
|
+
this._geometries.updateForRender( renderObject );
|
|
1015
1057
|
this._nodes.updateForRender( renderObject );
|
|
1016
1058
|
this._bindings.updateForRender( renderObject );
|
|
1017
1059
|
|
|
@@ -1205,6 +1247,41 @@ class Renderer {
|
|
|
1205
1247
|
|
|
1206
1248
|
}
|
|
1207
1249
|
|
|
1250
|
+
/**
|
|
1251
|
+
* Default implementation of the uncaptured backend error callback.
|
|
1252
|
+
*
|
|
1253
|
+
* @private
|
|
1254
|
+
* @param {Object} info - Information about the uncaptured error.
|
|
1255
|
+
*/
|
|
1256
|
+
_onError( info ) {
|
|
1257
|
+
|
|
1258
|
+
let errorMessage = `WebGPURenderer: Uncaptured ${ info.api } ${ info.type }`;
|
|
1259
|
+
|
|
1260
|
+
if ( info.message ) {
|
|
1261
|
+
|
|
1262
|
+
errorMessage += `: ${ info.message }`;
|
|
1263
|
+
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
error( errorMessage );
|
|
1267
|
+
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1270
|
+
/**
|
|
1271
|
+
* Returns `true` if the cached GPU render bundle for the given bundle group is
|
|
1272
|
+
* out-of-date and must be recorded again.
|
|
1273
|
+
*
|
|
1274
|
+
* @private
|
|
1275
|
+
* @param {BundleGroup} bundleGroup - The bundle group.
|
|
1276
|
+
* @param {Object} renderBundleData - The backend data of the render bundle.
|
|
1277
|
+
* @return {boolean} Whether the cached render bundle needs an update.
|
|
1278
|
+
*/
|
|
1279
|
+
_bundleNeedsUpdate( bundleGroup, renderBundleData ) {
|
|
1280
|
+
|
|
1281
|
+
return renderBundleData.bundleGPU === undefined || bundleGroup.version !== renderBundleData.version;
|
|
1282
|
+
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1208
1285
|
/**
|
|
1209
1286
|
* Renders the given render bundle.
|
|
1210
1287
|
*
|
|
@@ -1227,20 +1304,12 @@ class Renderer {
|
|
|
1227
1304
|
|
|
1228
1305
|
const renderBundle = this._bundles.get( bundleGroup, camera, renderContext );
|
|
1229
1306
|
const renderBundleData = this.backend.get( renderBundle );
|
|
1230
|
-
|
|
1231
|
-
const needsUpdate = bundleGroup.version !== renderBundleData.version;
|
|
1232
|
-
const renderBundleNeedsUpdate = needsUpdate || renderBundleData.bundleGPU === undefined;
|
|
1307
|
+
const renderBundleNeedsUpdate = this._bundleNeedsUpdate( bundleGroup, renderBundleData );
|
|
1233
1308
|
|
|
1234
1309
|
if ( renderBundleNeedsUpdate ) {
|
|
1235
1310
|
|
|
1236
1311
|
this.backend.beginBundle( renderContext );
|
|
1237
1312
|
|
|
1238
|
-
if ( renderBundleData.renderObjects === undefined || needsUpdate ) {
|
|
1239
|
-
|
|
1240
|
-
renderBundleData.renderObjects = [];
|
|
1241
|
-
|
|
1242
|
-
}
|
|
1243
|
-
|
|
1244
1313
|
this._currentRenderBundle = renderBundle;
|
|
1245
1314
|
|
|
1246
1315
|
const {
|
|
@@ -1272,6 +1341,7 @@ class Renderer {
|
|
|
1272
1341
|
|
|
1273
1342
|
this._nodes.updateBefore( renderObject );
|
|
1274
1343
|
|
|
1344
|
+
this._geometries.updateForRender( renderObject );
|
|
1275
1345
|
this._nodes.updateForRender( renderObject );
|
|
1276
1346
|
this._bindings.updateForRender( renderObject );
|
|
1277
1347
|
|
|
@@ -1314,7 +1384,7 @@ class Renderer {
|
|
|
1314
1384
|
|
|
1315
1385
|
if ( this._initialized === false ) {
|
|
1316
1386
|
|
|
1317
|
-
throw new Error( 'Renderer: .render() called before the backend is initialized. Use "await renderer.init();" before rendering.' );
|
|
1387
|
+
throw new Error( 'THREE.Renderer: .render() called before the backend is initialized. Use "await renderer.init();" before rendering.' );
|
|
1318
1388
|
|
|
1319
1389
|
}
|
|
1320
1390
|
|
|
@@ -1338,6 +1408,37 @@ class Renderer {
|
|
|
1338
1408
|
|
|
1339
1409
|
}
|
|
1340
1410
|
|
|
1411
|
+
_renderOutputLayers( quad, renderTarget ) {
|
|
1412
|
+
|
|
1413
|
+
if ( renderTarget.texture.isArrayTexture !== true || renderTarget.texture.image.depth <= 1 ) {
|
|
1414
|
+
|
|
1415
|
+
this._renderScene( quad, quad.camera, false );
|
|
1416
|
+
return;
|
|
1417
|
+
|
|
1418
|
+
}
|
|
1419
|
+
|
|
1420
|
+
const currentActiveCubeFace = this._activeCubeFace;
|
|
1421
|
+
|
|
1422
|
+
try {
|
|
1423
|
+
|
|
1424
|
+
for ( let layer = 0; layer < renderTarget.texture.image.depth; layer ++ ) {
|
|
1425
|
+
|
|
1426
|
+
this._nodes.setOutputLayerIndex( layer );
|
|
1427
|
+
this._activeCubeFace = layer;
|
|
1428
|
+
|
|
1429
|
+
this._renderScene( quad, quad.camera, false );
|
|
1430
|
+
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
} finally {
|
|
1434
|
+
|
|
1435
|
+
this._nodes.setOutputLayerIndex( 0 );
|
|
1436
|
+
this._activeCubeFace = currentActiveCubeFace;
|
|
1437
|
+
|
|
1438
|
+
}
|
|
1439
|
+
|
|
1440
|
+
}
|
|
1441
|
+
|
|
1341
1442
|
/**
|
|
1342
1443
|
* Returns an internal render target which is used when computing the output tone mapping
|
|
1343
1444
|
* and color space conversion. Unlike in `WebGLRenderer`, this is done in a separate render
|
|
@@ -1423,6 +1524,7 @@ class Renderer {
|
|
|
1423
1524
|
frameBufferTarget.scissor.multiplyScalar( pixelRatio );
|
|
1424
1525
|
frameBufferTarget.scissorTest = scissorTest;
|
|
1425
1526
|
frameBufferTarget.multiview = outputRenderTarget !== null ? outputRenderTarget.multiview : false;
|
|
1527
|
+
frameBufferTarget.useArrayDepthTexture = outputRenderTarget !== null ? outputRenderTarget.useArrayDepthTexture : false;
|
|
1426
1528
|
frameBufferTarget.resolveDepthBuffer = outputRenderTarget !== null ? outputRenderTarget.resolveDepthBuffer : true;
|
|
1427
1529
|
frameBufferTarget._autoAllocateDepthBuffer = outputRenderTarget !== null ? outputRenderTarget._autoAllocateDepthBuffer : false;
|
|
1428
1530
|
|
|
@@ -1460,6 +1562,8 @@ class Renderer {
|
|
|
1460
1562
|
const previousRenderObjectFunction = this._currentRenderObjectFunction;
|
|
1461
1563
|
const previousHandleObjectFunction = this._handleObjectFunction;
|
|
1462
1564
|
|
|
1565
|
+
this.lighting.beginRender( scene );
|
|
1566
|
+
|
|
1463
1567
|
//
|
|
1464
1568
|
|
|
1465
1569
|
this._callDepth ++;
|
|
@@ -1533,77 +1637,6 @@ class Renderer {
|
|
|
1533
1637
|
|
|
1534
1638
|
//
|
|
1535
1639
|
|
|
1536
|
-
|
|
1537
|
-
const xr = this.xr;
|
|
1538
|
-
|
|
1539
|
-
if ( xr.isPresenting === false ) {
|
|
1540
|
-
|
|
1541
|
-
let projectionMatrixNeedsUpdate = false;
|
|
1542
|
-
|
|
1543
|
-
// reversed depth
|
|
1544
|
-
|
|
1545
|
-
if ( this.reversedDepthBuffer === true && camera.reversedDepth !== true ) {
|
|
1546
|
-
|
|
1547
|
-
camera._reversedDepth = true;
|
|
1548
|
-
|
|
1549
|
-
if ( camera.isArrayCamera ) {
|
|
1550
|
-
|
|
1551
|
-
for ( const subCamera of camera.cameras ) {
|
|
1552
|
-
|
|
1553
|
-
subCamera._reversedDepth = true;
|
|
1554
|
-
|
|
1555
|
-
}
|
|
1556
|
-
|
|
1557
|
-
}
|
|
1558
|
-
|
|
1559
|
-
projectionMatrixNeedsUpdate = true;
|
|
1560
|
-
|
|
1561
|
-
}
|
|
1562
|
-
|
|
1563
|
-
// WebGPU/WebGL coordinate system
|
|
1564
|
-
|
|
1565
|
-
const coordinateSystem = this.coordinateSystem;
|
|
1566
|
-
|
|
1567
|
-
if ( camera.coordinateSystem !== coordinateSystem ) {
|
|
1568
|
-
|
|
1569
|
-
camera.coordinateSystem = coordinateSystem;
|
|
1570
|
-
|
|
1571
|
-
if ( camera.isArrayCamera ) {
|
|
1572
|
-
|
|
1573
|
-
for ( const subCamera of camera.cameras ) {
|
|
1574
|
-
|
|
1575
|
-
subCamera.coordinateSystem = coordinateSystem;
|
|
1576
|
-
|
|
1577
|
-
}
|
|
1578
|
-
|
|
1579
|
-
}
|
|
1580
|
-
|
|
1581
|
-
projectionMatrixNeedsUpdate = true;
|
|
1582
|
-
|
|
1583
|
-
}
|
|
1584
|
-
|
|
1585
|
-
// camera update
|
|
1586
|
-
|
|
1587
|
-
if ( projectionMatrixNeedsUpdate === true ) {
|
|
1588
|
-
|
|
1589
|
-
camera.updateProjectionMatrix();
|
|
1590
|
-
|
|
1591
|
-
if ( camera.isArrayCamera ) {
|
|
1592
|
-
|
|
1593
|
-
for ( const subCamera of camera.cameras ) {
|
|
1594
|
-
|
|
1595
|
-
subCamera.updateProjectionMatrix();
|
|
1596
|
-
|
|
1597
|
-
}
|
|
1598
|
-
|
|
1599
|
-
}
|
|
1600
|
-
|
|
1601
|
-
}
|
|
1602
|
-
|
|
1603
|
-
}
|
|
1604
|
-
|
|
1605
|
-
//
|
|
1606
|
-
|
|
1607
1640
|
// WITH_GENESYS
|
|
1608
1641
|
ProfilerService.begin( 'scene.updateMatrixWorld' );
|
|
1609
1642
|
// !WITH_GENESYS
|
|
@@ -1612,14 +1645,7 @@ class Renderer {
|
|
|
1612
1645
|
ProfilerService.end( 'scene.updateMatrixWorld' );
|
|
1613
1646
|
// !WITH_GENESYS
|
|
1614
1647
|
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
if ( xr.enabled === true && xr.isPresenting === true ) {
|
|
1618
|
-
|
|
1619
|
-
if ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );
|
|
1620
|
-
camera = xr.getCamera(); // use XR camera for rendering
|
|
1621
|
-
|
|
1622
|
-
}
|
|
1648
|
+
camera = this._updateCamera( camera );
|
|
1623
1649
|
|
|
1624
1650
|
//
|
|
1625
1651
|
|
|
@@ -1667,7 +1693,11 @@ class Renderer {
|
|
|
1667
1693
|
|
|
1668
1694
|
const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
|
|
1669
1695
|
|
|
1670
|
-
if (
|
|
1696
|
+
if ( camera.isArrayCamera ) {
|
|
1697
|
+
|
|
1698
|
+
frustum.setFromArrayCamera( camera );
|
|
1699
|
+
|
|
1700
|
+
} else {
|
|
1671
1701
|
|
|
1672
1702
|
_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
|
|
1673
1703
|
frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
|
|
@@ -1695,7 +1725,7 @@ class Renderer {
|
|
|
1695
1725
|
|
|
1696
1726
|
if ( this.sortObjects === true ) {
|
|
1697
1727
|
|
|
1698
|
-
renderList.sort( this._opaqueSort, this._transparentSort );
|
|
1728
|
+
renderList.sort( this._opaqueSort, this._transparentSort, camera.reversedDepth );
|
|
1699
1729
|
|
|
1700
1730
|
}
|
|
1701
1731
|
|
|
@@ -1782,11 +1812,12 @@ class Renderer {
|
|
|
1782
1812
|
// restore render tree
|
|
1783
1813
|
|
|
1784
1814
|
nodeFrame.renderId = previousRenderId;
|
|
1785
|
-
|
|
1786
1815
|
this._currentRenderContext = previousRenderContext;
|
|
1787
1816
|
this._currentRenderObjectFunction = previousRenderObjectFunction;
|
|
1788
1817
|
this._handleObjectFunction = previousHandleObjectFunction;
|
|
1789
1818
|
|
|
1819
|
+
this.lighting.finishRender( scene );
|
|
1820
|
+
|
|
1790
1821
|
//
|
|
1791
1822
|
|
|
1792
1823
|
this._callDepth --;
|
|
@@ -1892,8 +1923,7 @@ class Renderer {
|
|
|
1892
1923
|
|
|
1893
1924
|
this.autoClear = false;
|
|
1894
1925
|
this.xr.enabled = false;
|
|
1895
|
-
|
|
1896
|
-
this._renderScene( quad, quad.camera, false );
|
|
1926
|
+
this._renderOutputLayers( quad, renderTarget );
|
|
1897
1927
|
|
|
1898
1928
|
this.autoClear = currentAutoClear;
|
|
1899
1929
|
this.xr.enabled = currentXR;
|
|
@@ -2324,7 +2354,7 @@ class Renderer {
|
|
|
2324
2354
|
|
|
2325
2355
|
if ( this._initialized === false ) {
|
|
2326
2356
|
|
|
2327
|
-
throw new Error( 'Renderer: .clear() called before the backend is initialized. Use "await renderer.init();" before
|
|
2357
|
+
throw new Error( 'THREE.Renderer: .clear() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
|
|
2328
2358
|
|
|
2329
2359
|
}
|
|
2330
2360
|
|
|
@@ -2586,7 +2616,7 @@ class Renderer {
|
|
|
2586
2616
|
|
|
2587
2617
|
// WITH_GENESYS
|
|
2588
2618
|
// Drop the strong reference to the active `RenderContext` so module-level
|
|
2589
|
-
// `WeakMap<RenderContext,
|
|
2619
|
+
// `WeakMap<RenderContext, �?>` caches can release entries once
|
|
2590
2620
|
// `_renderContexts.dispose()` has cleared its dictionary.
|
|
2591
2621
|
this._currentRenderContext = null;
|
|
2592
2622
|
// !WITH_GENESYS
|
|
@@ -2931,7 +2961,7 @@ class Renderer {
|
|
|
2931
2961
|
|
|
2932
2962
|
if ( this._initialized === false ) {
|
|
2933
2963
|
|
|
2934
|
-
throw new Error( 'Renderer: .hasFeature() called before the backend is initialized. Use "await renderer.init();" before
|
|
2964
|
+
throw new Error( 'THREE.Renderer: .hasFeature() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
|
|
2935
2965
|
|
|
2936
2966
|
}
|
|
2937
2967
|
|
|
@@ -2981,7 +3011,7 @@ class Renderer {
|
|
|
2981
3011
|
|
|
2982
3012
|
if ( this._initialized === false ) {
|
|
2983
3013
|
|
|
2984
|
-
throw new Error( 'Renderer: .initTexture() called before the backend is initialized. Use "await renderer.init();" before
|
|
3014
|
+
throw new Error( 'THREE.Renderer: .initTexture() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
|
|
2985
3015
|
|
|
2986
3016
|
}
|
|
2987
3017
|
|
|
@@ -2998,7 +3028,7 @@ class Renderer {
|
|
|
2998
3028
|
|
|
2999
3029
|
if ( this._initialized === false ) {
|
|
3000
3030
|
|
|
3001
|
-
throw new Error( 'Renderer: .initRenderTarget() called before the backend is initialized. Use "await renderer.init();" before
|
|
3031
|
+
throw new Error( 'THREE.Renderer: .initRenderTarget() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
|
|
3002
3032
|
|
|
3003
3033
|
}
|
|
3004
3034
|
|
|
@@ -3166,7 +3196,7 @@ class Renderer {
|
|
|
3166
3196
|
|
|
3167
3197
|
const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
|
|
3168
3198
|
|
|
3169
|
-
if ( ! object.frustumCulled || frustum.intersectsSprite( object
|
|
3199
|
+
if ( ! object.frustumCulled || frustum.intersectsSprite( object ) ) {
|
|
3170
3200
|
|
|
3171
3201
|
if ( this.sortObjects === true ) {
|
|
3172
3202
|
|
|
@@ -3192,7 +3222,7 @@ class Renderer {
|
|
|
3192
3222
|
|
|
3193
3223
|
const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
|
|
3194
3224
|
|
|
3195
|
-
if ( ! object.frustumCulled || frustum.intersectsObject( object
|
|
3225
|
+
if ( ! object.frustumCulled || frustum.intersectsObject( object ) ) {
|
|
3196
3226
|
|
|
3197
3227
|
const { geometry, material } = object;
|
|
3198
3228
|
|
|
@@ -3241,9 +3271,40 @@ class Renderer {
|
|
|
3241
3271
|
const baseRenderList = renderList;
|
|
3242
3272
|
|
|
3243
3273
|
// replace render list
|
|
3274
|
+
|
|
3244
3275
|
renderList = this._renderLists.get( object, camera );
|
|
3245
3276
|
|
|
3246
|
-
|
|
3277
|
+
const renderBundle = this._bundles.get( object, camera, this._currentRenderContext );
|
|
3278
|
+
const renderBundleData = this.backend.get( renderBundle );
|
|
3279
|
+
const renderBundleNeedsUpdate = this._bundleNeedsUpdate( object, renderBundleData );
|
|
3280
|
+
|
|
3281
|
+
if ( renderBundleNeedsUpdate ) {
|
|
3282
|
+
|
|
3283
|
+
// update render list if necessary
|
|
3284
|
+
|
|
3285
|
+
renderList.begin();
|
|
3286
|
+
|
|
3287
|
+
if ( renderBundleData.renderObjects === undefined ) {
|
|
3288
|
+
|
|
3289
|
+
renderBundleData.renderObjects = [];
|
|
3290
|
+
|
|
3291
|
+
} else {
|
|
3292
|
+
|
|
3293
|
+
renderBundleData.renderObjects.length = 0;
|
|
3294
|
+
|
|
3295
|
+
}
|
|
3296
|
+
|
|
3297
|
+
const children = object.children;
|
|
3298
|
+
|
|
3299
|
+
for ( let i = 0, l = children.length; i < l; i ++ ) {
|
|
3300
|
+
|
|
3301
|
+
this._projectObject( children[ i ], camera, groupOrder, renderList, clippingContext );
|
|
3302
|
+
|
|
3303
|
+
}
|
|
3304
|
+
|
|
3305
|
+
renderList.finish();
|
|
3306
|
+
|
|
3307
|
+
}
|
|
3247
3308
|
|
|
3248
3309
|
baseRenderList.pushBundle( {
|
|
3249
3310
|
bundleGroup: object,
|
|
@@ -3251,10 +3312,12 @@ class Renderer {
|
|
|
3251
3312
|
renderList,
|
|
3252
3313
|
} );
|
|
3253
3314
|
|
|
3254
|
-
|
|
3315
|
+
return;
|
|
3255
3316
|
|
|
3256
3317
|
}
|
|
3257
3318
|
|
|
3319
|
+
//
|
|
3320
|
+
|
|
3258
3321
|
const children = object.children;
|
|
3259
3322
|
|
|
3260
3323
|
for ( let i = 0, l = children.length; i < l; i ++ ) {
|
|
@@ -3388,7 +3451,7 @@ class Renderer {
|
|
|
3388
3451
|
|
|
3389
3452
|
if ( cache === undefined || cache.version !== version ) {
|
|
3390
3453
|
|
|
3391
|
-
const hasMap = material.map
|
|
3454
|
+
const hasMap = material.map && material.map.isTexture;
|
|
3392
3455
|
const hasColorNode = material.colorNode && material.colorNode.isNode;
|
|
3393
3456
|
const hasCastShadowNode = material.castShadowNode && material.castShadowNode.isNode;
|
|
3394
3457
|
const hasMaskNode = ( material.maskShadowNode && material.maskShadowNode.isNode ) || ( material.maskNode && material.maskNode.isNode );
|
|
@@ -3481,6 +3544,98 @@ class Renderer {
|
|
|
3481
3544
|
|
|
3482
3545
|
}
|
|
3483
3546
|
|
|
3547
|
+
/**
|
|
3548
|
+
* Updates the camera so it's prepared for rendering operations.
|
|
3549
|
+
*
|
|
3550
|
+
* @private
|
|
3551
|
+
* @param {Camera} camera - The camera to update.
|
|
3552
|
+
* @return {Camera} The returned camera might be different depending on whether XR is used or not.
|
|
3553
|
+
*/
|
|
3554
|
+
_updateCamera( camera ) {
|
|
3555
|
+
|
|
3556
|
+
const xr = this.xr;
|
|
3557
|
+
|
|
3558
|
+
if ( xr.isPresenting === false ) {
|
|
3559
|
+
|
|
3560
|
+
let projectionMatrixNeedsUpdate = false;
|
|
3561
|
+
|
|
3562
|
+
// reversed depth
|
|
3563
|
+
|
|
3564
|
+
if ( this.reversedDepthBuffer === true && camera.reversedDepth !== true ) {
|
|
3565
|
+
|
|
3566
|
+
camera._reversedDepth = true;
|
|
3567
|
+
|
|
3568
|
+
if ( camera.isArrayCamera ) {
|
|
3569
|
+
|
|
3570
|
+
for ( const subCamera of camera.cameras ) {
|
|
3571
|
+
|
|
3572
|
+
subCamera._reversedDepth = true;
|
|
3573
|
+
|
|
3574
|
+
}
|
|
3575
|
+
|
|
3576
|
+
}
|
|
3577
|
+
|
|
3578
|
+
projectionMatrixNeedsUpdate = true;
|
|
3579
|
+
|
|
3580
|
+
}
|
|
3581
|
+
|
|
3582
|
+
// WebGPU/WebGL coordinate system
|
|
3583
|
+
|
|
3584
|
+
const coordinateSystem = this.coordinateSystem;
|
|
3585
|
+
|
|
3586
|
+
if ( camera.coordinateSystem !== coordinateSystem ) {
|
|
3587
|
+
|
|
3588
|
+
camera.coordinateSystem = coordinateSystem;
|
|
3589
|
+
|
|
3590
|
+
if ( camera.isArrayCamera ) {
|
|
3591
|
+
|
|
3592
|
+
for ( const subCamera of camera.cameras ) {
|
|
3593
|
+
|
|
3594
|
+
subCamera.coordinateSystem = coordinateSystem;
|
|
3595
|
+
|
|
3596
|
+
}
|
|
3597
|
+
|
|
3598
|
+
}
|
|
3599
|
+
|
|
3600
|
+
projectionMatrixNeedsUpdate = true;
|
|
3601
|
+
|
|
3602
|
+
}
|
|
3603
|
+
|
|
3604
|
+
// camera update
|
|
3605
|
+
|
|
3606
|
+
if ( projectionMatrixNeedsUpdate === true ) {
|
|
3607
|
+
|
|
3608
|
+
camera.updateProjectionMatrix();
|
|
3609
|
+
|
|
3610
|
+
if ( camera.isArrayCamera ) {
|
|
3611
|
+
|
|
3612
|
+
for ( const subCamera of camera.cameras ) {
|
|
3613
|
+
|
|
3614
|
+
subCamera.updateProjectionMatrix();
|
|
3615
|
+
|
|
3616
|
+
}
|
|
3617
|
+
|
|
3618
|
+
}
|
|
3619
|
+
|
|
3620
|
+
}
|
|
3621
|
+
|
|
3622
|
+
}
|
|
3623
|
+
|
|
3624
|
+
if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
|
|
3625
|
+
|
|
3626
|
+
// handle XR
|
|
3627
|
+
|
|
3628
|
+
if ( xr.enabled === true && xr.isPresenting === true ) {
|
|
3629
|
+
|
|
3630
|
+
if ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );
|
|
3631
|
+
camera = xr.getCamera(); // use XR camera for rendering
|
|
3632
|
+
|
|
3633
|
+
}
|
|
3634
|
+
|
|
3635
|
+
return camera;
|
|
3636
|
+
|
|
3637
|
+
}
|
|
3638
|
+
|
|
3484
3639
|
/**
|
|
3485
3640
|
* This method represents the default render object function that manages the render lifecycle
|
|
3486
3641
|
* of the object.
|
|
@@ -3502,6 +3657,11 @@ class Renderer {
|
|
|
3502
3657
|
let materialDepthNode;
|
|
3503
3658
|
let materialPositionNode;
|
|
3504
3659
|
let materialSide;
|
|
3660
|
+
let materialDisplacementMap;
|
|
3661
|
+
let materialDisplacementScale;
|
|
3662
|
+
let materialDisplacementBias;
|
|
3663
|
+
|
|
3664
|
+
const previousSourceMaterial = this._currentSourceMaterial;
|
|
3505
3665
|
|
|
3506
3666
|
//
|
|
3507
3667
|
|
|
@@ -3511,6 +3671,8 @@ class Renderer {
|
|
|
3511
3671
|
|
|
3512
3672
|
if ( material.allowOverride === true && scene.overrideMaterial !== null ) {
|
|
3513
3673
|
|
|
3674
|
+
this._currentSourceMaterial = material;
|
|
3675
|
+
|
|
3514
3676
|
const overrideMaterial = scene.overrideMaterial;
|
|
3515
3677
|
|
|
3516
3678
|
materialOverride = true;
|
|
@@ -3520,6 +3682,9 @@ class Renderer {
|
|
|
3520
3682
|
materialDepthNode = ( overrideMaterial.isNodeMaterial ) ? overrideMaterial.depthNode : null;
|
|
3521
3683
|
materialPositionNode = ( overrideMaterial.isNodeMaterial ) ? overrideMaterial.positionNode : null;
|
|
3522
3684
|
materialSide = scene.overrideMaterial.side;
|
|
3685
|
+
materialDisplacementMap = overrideMaterial.displacementMap;
|
|
3686
|
+
materialDisplacementScale = overrideMaterial.displacementScale;
|
|
3687
|
+
materialDisplacementBias = overrideMaterial.displacementBias;
|
|
3523
3688
|
|
|
3524
3689
|
if ( material.positionNode && material.positionNode.isNode ) {
|
|
3525
3690
|
|
|
@@ -3529,6 +3694,9 @@ class Renderer {
|
|
|
3529
3694
|
|
|
3530
3695
|
overrideMaterial.alphaTest = material.alphaTest;
|
|
3531
3696
|
overrideMaterial.alphaMap = material.alphaMap;
|
|
3697
|
+
overrideMaterial.displacementMap = material.displacementMap;
|
|
3698
|
+
overrideMaterial.displacementScale = material.displacementScale;
|
|
3699
|
+
overrideMaterial.displacementBias = material.displacementBias;
|
|
3532
3700
|
overrideMaterial.transparent = material.transparent || material.transmission > 0 ||
|
|
3533
3701
|
( material.transmissionNode && material.transmissionNode.isNode ) ||
|
|
3534
3702
|
( material.backdropNode && material.backdropNode.isNode );
|
|
@@ -3583,9 +3751,14 @@ class Renderer {
|
|
|
3583
3751
|
scene.overrideMaterial.depthNode = materialDepthNode;
|
|
3584
3752
|
scene.overrideMaterial.positionNode = materialPositionNode;
|
|
3585
3753
|
scene.overrideMaterial.side = materialSide;
|
|
3754
|
+
scene.overrideMaterial.displacementMap = materialDisplacementMap;
|
|
3755
|
+
scene.overrideMaterial.displacementScale = materialDisplacementScale;
|
|
3756
|
+
scene.overrideMaterial.displacementBias = materialDisplacementBias;
|
|
3586
3757
|
|
|
3587
3758
|
}
|
|
3588
3759
|
|
|
3760
|
+
this._currentSourceMaterial = previousSourceMaterial;
|
|
3761
|
+
|
|
3589
3762
|
//
|
|
3590
3763
|
|
|
3591
3764
|
object.onAfterRender( this, scene, camera, geometry, material, group );
|
|
@@ -3602,7 +3775,7 @@ class Renderer {
|
|
|
3602
3775
|
|
|
3603
3776
|
if ( this._initialized === false ) {
|
|
3604
3777
|
|
|
3605
|
-
throw new Error( 'Renderer: .hasCompatibility() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
|
|
3778
|
+
throw new Error( 'THREE.Renderer: .hasCompatibility() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
|
|
3606
3779
|
|
|
3607
3780
|
}
|
|
3608
3781
|
|