@plastic-software/three 0.175.14 → 0.179.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/build/three.cjs +8402 -6787
- package/build/three.core.js +8007 -6688
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +397 -102
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +84 -27
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6831 -2838
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6648 -2838
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -3
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -27
- package/examples/jsm/capabilities/WebGPU.js +2 -1
- package/examples/jsm/controls/ArcballControls.js +15 -4
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +62 -14
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +22 -8
- package/examples/jsm/curves/CurveExtras.js +14 -0
- package/examples/jsm/curves/NURBSCurve.js +1 -0
- package/examples/jsm/curves/NURBSSurface.js +2 -0
- package/examples/jsm/curves/NURBSUtils.js +4 -1
- package/examples/jsm/curves/NURBSVolume.js +2 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -0
- package/examples/jsm/effects/AsciiEffect.js +2 -0
- package/examples/jsm/effects/OutlineEffect.js +2 -0
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
- package/examples/jsm/effects/StereoEffect.js +2 -0
- package/examples/jsm/environments/DebugEnvironment.js +1 -0
- package/examples/jsm/environments/RoomEnvironment.js +57 -38
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -0
- package/examples/jsm/exporters/GLTFExporter.js +7 -4
- package/examples/jsm/exporters/KTX2Exporter.js +2 -0
- package/examples/jsm/exporters/OBJExporter.js +3 -1
- package/examples/jsm/exporters/PLYExporter.js +4 -2
- package/examples/jsm/exporters/STLExporter.js +2 -0
- package/examples/jsm/exporters/USDZExporter.js +679 -300
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -0
- package/examples/jsm/geometries/ParametricFunctions.js +4 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -0
- package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
- package/examples/jsm/geometries/TeapotGeometry.js +1 -0
- package/examples/jsm/geometries/TextGeometry.js +1 -0
- package/examples/jsm/helpers/LightProbeHelper.js +1 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
- package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +1 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -2
- package/examples/jsm/interactive/InteractiveGroup.js +1 -0
- package/examples/jsm/interactive/SelectionBox.js +2 -0
- package/examples/jsm/interactive/SelectionHelper.js +2 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +15 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
- package/examples/jsm/lines/Line2.js +1 -0
- package/examples/jsm/lines/LineGeometry.js +1 -0
- package/examples/jsm/lines/LineMaterial.js +4 -4
- package/examples/jsm/lines/LineSegments2.js +1 -0
- package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
- package/examples/jsm/lines/Wireframe.js +1 -0
- package/examples/jsm/lines/WireframeGeometry2.js +1 -0
- package/examples/jsm/lines/webgpu/Line2.js +1 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +1 -0
- package/examples/jsm/loaders/AMFLoader.js +1 -0
- package/examples/jsm/loaders/BVHLoader.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +6 -5
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +211 -22
- package/examples/jsm/loaders/FBXLoader.js +25 -23
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +213 -30
- package/examples/jsm/loaders/NRRDLoader.js +1 -0
- package/examples/jsm/loaders/OBJLoader.js +1 -0
- package/examples/jsm/loaders/PCDLoader.js +122 -19
- package/examples/jsm/loaders/PDBLoader.js +1 -0
- package/examples/jsm/loaders/PLYLoader.js +1 -0
- package/examples/jsm/loaders/PVRLoader.js +1 -0
- package/examples/jsm/loaders/RGBELoader.js +1 -0
- package/examples/jsm/loaders/RGBMLoader.js +1 -0
- package/examples/jsm/loaders/STLLoader.js +1 -0
- package/examples/jsm/loaders/SVGLoader.js +1 -0
- package/examples/jsm/loaders/TDSLoader.js +1 -0
- package/examples/jsm/loaders/TGALoader.js +1 -0
- package/examples/jsm/loaders/TIFFLoader.js +1 -0
- package/examples/jsm/loaders/TTFLoader.js +14 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -891
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +3 -2
- package/examples/jsm/loaders/VTKLoader.js +1 -0
- package/examples/jsm/loaders/XYZLoader.js +1 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
- package/examples/jsm/math/Capsule.js +2 -0
- package/examples/jsm/math/ColorConverter.js +1 -0
- package/examples/jsm/math/ConvexHull.js +2 -0
- package/examples/jsm/math/ImprovedNoise.js +19 -14
- package/examples/jsm/math/Lut.js +2 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
- package/examples/jsm/math/OBB.js +2 -0
- package/examples/jsm/math/Octree.js +20 -1
- package/examples/jsm/math/SimplexNoise.js +2 -0
- package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/Gyroscope.js +1 -0
- package/examples/jsm/misc/MD2Character.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
- package/examples/jsm/misc/MorphAnimMesh.js +1 -0
- package/examples/jsm/misc/MorphBlendMesh.js +1 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +5 -0
- package/examples/jsm/misc/TubePainter.js +1 -0
- package/examples/jsm/misc/Volume.js +2 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/modifiers/CurveModifier.js +3 -0
- package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
- package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
- package/examples/jsm/modifiers/TessellateModifier.js +2 -0
- package/examples/jsm/objects/GroundedSkybox.js +1 -0
- package/examples/jsm/objects/Lensflare.js +3 -0
- package/examples/jsm/objects/LensflareMesh.js +4 -3
- package/examples/jsm/objects/MarchingCubes.js +2 -0
- package/examples/jsm/objects/Reflector.js +1 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Refractor.js +1 -0
- package/examples/jsm/objects/ShadowMesh.js +1 -0
- package/examples/jsm/objects/Sky.js +2 -1
- package/examples/jsm/objects/SkyMesh.js +22 -19
- package/examples/jsm/objects/Water.js +1 -0
- package/examples/jsm/objects/Water2.js +1 -0
- package/examples/jsm/objects/Water2Mesh.js +3 -1
- package/examples/jsm/objects/WaterMesh.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +1 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +149 -13
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -2
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +14 -12
- package/examples/jsm/postprocessing/GlitchPass.js +2 -1
- package/examples/jsm/postprocessing/HalftonePass.js +2 -1
- package/examples/jsm/postprocessing/LUTPass.js +1 -0
- package/examples/jsm/postprocessing/MaskPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +22 -19
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +3 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +3 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
- package/examples/jsm/postprocessing/SSAOPass.js +12 -10
- package/examples/jsm/postprocessing/SSRPass.js +4 -3
- package/examples/jsm/postprocessing/SavePass.js +2 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
- package/examples/jsm/postprocessing/TexturePass.js +1 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
- package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
- package/examples/jsm/renderers/Projector.js +2 -0
- package/examples/jsm/renderers/SVGRenderer.js +3 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
- package/examples/jsm/shaders/AfterimageShader.js +4 -1
- package/examples/jsm/shaders/BasicShader.js +4 -1
- package/examples/jsm/shaders/BleachBypassShader.js +4 -1
- package/examples/jsm/shaders/BlendShader.js +4 -1
- package/examples/jsm/shaders/BokehShader.js +4 -1
- package/examples/jsm/shaders/BokehShader2.js +4 -1
- package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
- package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
- package/examples/jsm/shaders/ColorifyShader.js +4 -1
- package/examples/jsm/shaders/ConvolutionShader.js +4 -1
- package/examples/jsm/shaders/CopyShader.js +4 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/DigitalGlitch.js +4 -1
- package/examples/jsm/shaders/DotScreenShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +4 -1
- package/examples/jsm/shaders/FXAAShader.js +4 -1
- package/examples/jsm/shaders/FilmShader.js +4 -1
- package/examples/jsm/shaders/FocusShader.js +4 -1
- package/examples/jsm/shaders/FreiChenShader.js +4 -1
- package/examples/jsm/shaders/GTAOShader.js +4 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
- package/examples/jsm/shaders/GodRaysShader.js +4 -1
- package/examples/jsm/shaders/HalftoneShader.js +4 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/HueSaturationShader.js +4 -1
- package/examples/jsm/shaders/KaleidoShader.js +4 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
- package/examples/jsm/shaders/LuminosityShader.js +4 -1
- package/examples/jsm/shaders/MirrorShader.js +4 -1
- package/examples/jsm/shaders/NormalMapShader.js +4 -1
- package/examples/jsm/shaders/OutputShader.js +4 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
- package/examples/jsm/shaders/RGBShiftShader.js +4 -1
- package/examples/jsm/shaders/SAOShader.js +4 -1
- package/examples/jsm/shaders/SMAAShader.js +1 -0
- package/examples/jsm/shaders/SSAOShader.js +4 -1
- package/examples/jsm/shaders/SSRShader.js +1 -0
- package/examples/jsm/shaders/SepiaShader.js +4 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
- package/examples/jsm/shaders/TechnicolorShader.js +4 -1
- package/examples/jsm/shaders/ToonShader.js +2 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
- package/examples/jsm/shaders/VelocityShader.js +4 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/VignetteShader.js +4 -1
- package/examples/jsm/shaders/VolumeShader.js +5 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
- package/examples/jsm/textures/FlakesTexture.js +2 -0
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +9 -7
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
- package/examples/jsm/tsl/display/TransitionNode.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +28 -6
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
- package/examples/jsm/tsl/math/Bayer.js +4 -1
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +6 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +4 -1
- package/examples/jsm/utils/LDrawUtils.js +2 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +4 -1
- package/examples/jsm/utils/ShadowMapViewer.js +2 -0
- package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
- package/examples/jsm/utils/SkeletonUtils.js +4 -1
- package/examples/jsm/utils/SortUtils.js +4 -1
- package/examples/jsm/utils/UVsDebug.js +4 -1
- package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
- package/examples/jsm/utils/WorkerPool.js +2 -0
- package/examples/jsm/webxr/ARButton.js +1 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
- package/examples/jsm/webxr/Text2D.js +4 -1
- package/examples/jsm/webxr/VRButton.js +1 -0
- package/examples/jsm/webxr/XRButton.js +1 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
- package/examples/jsm/webxr/XREstimatedLight.js +1 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
- package/examples/jsm/webxr/XRPlanes.js +1 -0
- package/package.json +6 -4
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +83 -26
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/{examples/jsm/misc → src/core}/Timer.js +4 -40
- package/src/extras/PMREMGenerator.js +11 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/CameraHelper.js +41 -11
- package/src/helpers/SkeletonHelper.js +36 -7
- package/src/lights/LightShadow.js +34 -7
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/SpotLightShadow.js +9 -1
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/BufferGeometryLoader.js +1 -10
- package/src/loaders/FileLoader.js +27 -4
- package/src/loaders/ImageBitmapLoader.js +48 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/Loader.js +14 -0
- package/src/loaders/LoadingManager.js +23 -0
- package/src/loaders/ObjectLoader.js +44 -16
- package/src/loaders/nodes/NodeObjectLoader.js +2 -2
- package/src/materials/Material.js +1 -7
- package/src/materials/MeshBasicMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +0 -8
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +106 -20
- package/src/materials/nodes/PointsNodeMaterial.js +5 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Line3.js +129 -2
- package/src/math/Matrix4.js +48 -27
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/math/Spherical.js +2 -2
- package/src/nodes/Nodes.js +3 -3
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +40 -13
- package/src/nodes/accessors/CubeTextureNode.js +50 -2
- package/src/nodes/accessors/InstanceNode.js +5 -4
- package/src/nodes/accessors/Lights.js +2 -2
- package/src/nodes/accessors/MaterialNode.js +4 -0
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +110 -24
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +19 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +15 -4
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +71 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/ArrayNode.js +12 -0
- package/src/nodes/core/AssignNode.js +30 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +27 -4
- package/src/nodes/core/Node.js +83 -22
- package/src/nodes/core/NodeBuilder.js +273 -49
- package/src/nodes/core/NodeUtils.js +46 -1
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +171 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +63 -5
- package/src/nodes/core/VarNode.js +102 -4
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +165 -20
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/display/ViewportTextureNode.js +67 -7
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +16 -16
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +68 -24
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/ConditionalNode.js +1 -20
- package/src/nodes/math/MathNode.js +146 -75
- package/src/nodes/math/OperatorNode.js +129 -119
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +222 -72
- package/src/nodes/utils/DebugNode.js +16 -4
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +83 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +22 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +20 -6
- package/src/objects/Mesh.js +9 -0
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/Sprite.js +9 -0
- package/src/renderers/WebGL3DRenderTarget.js +1 -0
- package/src/renderers/WebGLArrayRenderTarget.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +2 -4
- package/src/renderers/WebGLRenderer.js +45 -32
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/Bindings.js +19 -18
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/PostProcessing.js +60 -5
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +133 -22
- package/src/renderers/common/SampledTexture.js +3 -71
- package/src/renderers/common/Sampler.js +79 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +19 -0
- package/src/renderers/common/Textures.js +34 -24
- package/src/renderers/common/TimestampQueryPool.js +1 -0
- package/src/renderers/common/Uniform.js +1 -1
- package/src/renderers/common/UniformsGroup.js +14 -18
- package/src/renderers/common/XRManager.js +183 -35
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLMaterials.js +6 -6
- package/src/renderers/webgl/WebGLProgram.js +22 -16
- package/src/renderers/webgl/WebGLPrograms.js +8 -6
- package/src/renderers/webgl/WebGLShadowMap.js +14 -3
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +163 -11
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +505 -143
- package/src/renderers/webgpu/WebGPURenderer.js +7 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
- package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +70 -9
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/ExternalTexture.js +45 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +32 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +31 -3
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
DataUtils,
|
|
4
4
|
FloatType,
|
|
5
5
|
HalfFloatType,
|
|
6
|
-
NoColorSpace,
|
|
7
6
|
LinearFilter,
|
|
8
7
|
LinearSRGBColorSpace,
|
|
9
8
|
RedFormat,
|
|
9
|
+
RGFormat,
|
|
10
10
|
RGBAFormat
|
|
11
11
|
} from 'three';
|
|
12
12
|
import * as fflate from '../libs/fflate.module.js';
|
|
@@ -92,6 +92,7 @@ import * as fflate from '../libs/fflate.module.js';
|
|
|
92
92
|
* ```
|
|
93
93
|
*
|
|
94
94
|
* @augments DataTextureLoader
|
|
95
|
+
* @three_import import { EXRLoader } from 'three/addons/loaders/EXRLoader.js';
|
|
95
96
|
*/
|
|
96
97
|
class EXRLoader extends DataTextureLoader {
|
|
97
98
|
|
|
@@ -112,6 +113,14 @@ class EXRLoader extends DataTextureLoader {
|
|
|
112
113
|
*/
|
|
113
114
|
this.type = HalfFloatType;
|
|
114
115
|
|
|
116
|
+
/**
|
|
117
|
+
* Texture output format.
|
|
118
|
+
*
|
|
119
|
+
* @type {(RGBAFormat|RGFormat|RedFormat)}
|
|
120
|
+
* @default RGBAFormat
|
|
121
|
+
*/
|
|
122
|
+
this.outputFormat = RGBAFormat;
|
|
123
|
+
|
|
115
124
|
}
|
|
116
125
|
|
|
117
126
|
/**
|
|
@@ -1021,6 +1030,81 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1021
1030
|
|
|
1022
1031
|
}
|
|
1023
1032
|
|
|
1033
|
+
function lossyDctChannelDecode( channelIndex, rowPtrs, channelData, acBuffer, dcBuffer, outBuffer ) {
|
|
1034
|
+
|
|
1035
|
+
const dataView = new DataView( outBuffer.buffer );
|
|
1036
|
+
const cd = channelData[ channelIndex ];
|
|
1037
|
+
const width = cd.width;
|
|
1038
|
+
const height = cd.height;
|
|
1039
|
+
|
|
1040
|
+
const numBlocksX = Math.ceil( width / 8.0 );
|
|
1041
|
+
const numBlocksY = Math.ceil( height / 8.0 );
|
|
1042
|
+
const numFullBlocksX = Math.floor( width / 8.0 );
|
|
1043
|
+
const leftoverX = width - ( numBlocksX - 1 ) * 8;
|
|
1044
|
+
const leftoverY = height - ( numBlocksY - 1 ) * 8;
|
|
1045
|
+
|
|
1046
|
+
const currAcComp = { value: 0 };
|
|
1047
|
+
let currDcComp = 0;
|
|
1048
|
+
const dctData = new Float32Array( 64 );
|
|
1049
|
+
const halfZigBlock = new Uint16Array( 64 );
|
|
1050
|
+
const rowBlock = new Uint16Array( numBlocksX * 64 );
|
|
1051
|
+
|
|
1052
|
+
for ( let blocky = 0; blocky < numBlocksY; ++ blocky ) {
|
|
1053
|
+
|
|
1054
|
+
let maxY = 8;
|
|
1055
|
+
|
|
1056
|
+
if ( blocky == numBlocksY - 1 ) maxY = leftoverY;
|
|
1057
|
+
|
|
1058
|
+
for ( let blockx = 0; blockx < numBlocksX; ++ blockx ) {
|
|
1059
|
+
|
|
1060
|
+
halfZigBlock.fill( 0 );
|
|
1061
|
+
halfZigBlock[ 0 ] = dcBuffer[ currDcComp ++ ];
|
|
1062
|
+
unRleAC( currAcComp, acBuffer, halfZigBlock );
|
|
1063
|
+
unZigZag( halfZigBlock, dctData );
|
|
1064
|
+
dctInverse( dctData );
|
|
1065
|
+
convertToHalf( dctData, rowBlock, blockx * 64 );
|
|
1066
|
+
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
// Write decoded data to output buffer
|
|
1070
|
+
for ( let y = 8 * blocky; y < 8 * blocky + maxY; ++ y ) {
|
|
1071
|
+
|
|
1072
|
+
let offset = rowPtrs[ channelIndex ][ y ];
|
|
1073
|
+
|
|
1074
|
+
for ( let blockx = 0; blockx < numFullBlocksX; ++ blockx ) {
|
|
1075
|
+
|
|
1076
|
+
const src = blockx * 64 + ( ( y & 0x7 ) * 8 );
|
|
1077
|
+
|
|
1078
|
+
for ( let x = 0; x < 8; ++ x ) {
|
|
1079
|
+
|
|
1080
|
+
dataView.setUint16( offset + x * INT16_SIZE * cd.type, rowBlock[ src + x ], true );
|
|
1081
|
+
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
offset += 8 * INT16_SIZE * cd.type;
|
|
1085
|
+
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
if ( numBlocksX != numFullBlocksX ) {
|
|
1089
|
+
|
|
1090
|
+
const src = numFullBlocksX * 64 + ( ( y & 0x7 ) * 8 );
|
|
1091
|
+
|
|
1092
|
+
for ( let x = 0; x < leftoverX; ++ x ) {
|
|
1093
|
+
|
|
1094
|
+
dataView.setUint16( offset + x * INT16_SIZE * cd.type, rowBlock[ src + x ], true );
|
|
1095
|
+
|
|
1096
|
+
}
|
|
1097
|
+
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1100
|
+
}
|
|
1101
|
+
|
|
1102
|
+
}
|
|
1103
|
+
|
|
1104
|
+
cd.decoded = true;
|
|
1105
|
+
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1024
1108
|
function unRleAC( currAcComp, acBuffer, halfZigBlock ) {
|
|
1025
1109
|
|
|
1026
1110
|
let acValue;
|
|
@@ -1633,8 +1717,12 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1633
1717
|
|
|
1634
1718
|
}
|
|
1635
1719
|
|
|
1636
|
-
//
|
|
1637
|
-
|
|
1720
|
+
// Decode lossy DCT data if we have a valid color space conversion set with the first RGB channel present
|
|
1721
|
+
if ( cscSet.idx[ 0 ] !== undefined && channelData[ cscSet.idx[ 0 ] ] ) {
|
|
1722
|
+
|
|
1723
|
+
lossyDctDecode( cscSet, rowOffsets, channelData, acBuffer, dcBuffer, outBuffer );
|
|
1724
|
+
|
|
1725
|
+
}
|
|
1638
1726
|
|
|
1639
1727
|
// Decode other channels
|
|
1640
1728
|
for ( let i = 0; i < channelData.length; ++ i ) {
|
|
@@ -1672,7 +1760,11 @@ class EXRLoader extends DataTextureLoader {
|
|
|
1672
1760
|
|
|
1673
1761
|
break;
|
|
1674
1762
|
|
|
1675
|
-
case LOSSY_DCT:
|
|
1763
|
+
case LOSSY_DCT:
|
|
1764
|
+
|
|
1765
|
+
lossyDctChannelDecode( i, rowOffsets, channelData, acBuffer, dcBuffer, outBuffer );
|
|
1766
|
+
|
|
1767
|
+
break;
|
|
1676
1768
|
|
|
1677
1769
|
default:
|
|
1678
1770
|
throw new Error( 'EXRLoader.parse: unsupported channel compression' );
|
|
@@ -2290,7 +2382,7 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2290
2382
|
|
|
2291
2383
|
}
|
|
2292
2384
|
|
|
2293
|
-
function setupDecoder( EXRHeader, dataView, uInt8Array, offset, outputType ) {
|
|
2385
|
+
function setupDecoder( EXRHeader, dataView, uInt8Array, offset, outputType, outputFormat ) {
|
|
2294
2386
|
|
|
2295
2387
|
const EXRDecoder = {
|
|
2296
2388
|
size: 0,
|
|
@@ -2301,6 +2393,7 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2301
2393
|
height: EXRHeader.dataWindow.yMax - EXRHeader.dataWindow.yMin + 1,
|
|
2302
2394
|
inputChannels: EXRHeader.channels,
|
|
2303
2395
|
channelByteOffsets: {},
|
|
2396
|
+
shouldExpand: false,
|
|
2304
2397
|
scanOrder: null,
|
|
2305
2398
|
totalBytes: null,
|
|
2306
2399
|
columns: null,
|
|
@@ -2378,17 +2471,16 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2378
2471
|
|
|
2379
2472
|
// RGB images will be converted to RGBA format, preventing software emulation in select devices.
|
|
2380
2473
|
let fillAlpha = false;
|
|
2474
|
+
let invalidOutput = false;
|
|
2381
2475
|
|
|
2476
|
+
// Validate if input texture contain supported channels
|
|
2382
2477
|
if ( channels.R && channels.G && channels.B ) {
|
|
2383
2478
|
|
|
2384
|
-
fillAlpha = ! channels.A;
|
|
2385
2479
|
EXRDecoder.outputChannels = 4;
|
|
2386
|
-
EXRDecoder.decodeChannels = { R: 0, G: 1, B: 2, A: 3 };
|
|
2387
2480
|
|
|
2388
2481
|
} else if ( channels.Y ) {
|
|
2389
2482
|
|
|
2390
2483
|
EXRDecoder.outputChannels = 1;
|
|
2391
|
-
EXRDecoder.decodeChannels = { Y: 0 };
|
|
2392
2484
|
|
|
2393
2485
|
} else {
|
|
2394
2486
|
|
|
@@ -2396,6 +2488,83 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2396
2488
|
|
|
2397
2489
|
}
|
|
2398
2490
|
|
|
2491
|
+
// Setup output texture configuration
|
|
2492
|
+
switch ( EXRDecoder.outputChannels ) {
|
|
2493
|
+
|
|
2494
|
+
case 4:
|
|
2495
|
+
|
|
2496
|
+
if ( outputFormat == RGBAFormat ) {
|
|
2497
|
+
|
|
2498
|
+
fillAlpha = ! channels.A;
|
|
2499
|
+
EXRDecoder.format = RGBAFormat;
|
|
2500
|
+
EXRDecoder.colorSpace = LinearSRGBColorSpace;
|
|
2501
|
+
EXRDecoder.outputChannels = 4;
|
|
2502
|
+
EXRDecoder.decodeChannels = { R: 0, G: 1, B: 2, A: 3 };
|
|
2503
|
+
|
|
2504
|
+
} else if ( outputFormat == RGFormat ) {
|
|
2505
|
+
|
|
2506
|
+
EXRDecoder.format = RGFormat;
|
|
2507
|
+
EXRDecoder.colorSpace = LinearSRGBColorSpace;
|
|
2508
|
+
EXRDecoder.outputChannels = 2;
|
|
2509
|
+
EXRDecoder.decodeChannels = { R: 0, G: 1 };
|
|
2510
|
+
|
|
2511
|
+
} else if ( outputFormat == RedFormat ) {
|
|
2512
|
+
|
|
2513
|
+
EXRDecoder.format = RedFormat;
|
|
2514
|
+
EXRDecoder.colorSpace = LinearSRGBColorSpace;
|
|
2515
|
+
EXRDecoder.outputChannels = 1;
|
|
2516
|
+
EXRDecoder.decodeChannels = { R: 0 };
|
|
2517
|
+
|
|
2518
|
+
} else {
|
|
2519
|
+
|
|
2520
|
+
invalidOutput = true;
|
|
2521
|
+
|
|
2522
|
+
}
|
|
2523
|
+
|
|
2524
|
+
break;
|
|
2525
|
+
|
|
2526
|
+
case 1:
|
|
2527
|
+
|
|
2528
|
+
if ( outputFormat == RGBAFormat ) {
|
|
2529
|
+
|
|
2530
|
+
fillAlpha = true;
|
|
2531
|
+
EXRDecoder.format = RGBAFormat;
|
|
2532
|
+
EXRDecoder.colorSpace = LinearSRGBColorSpace;
|
|
2533
|
+
EXRDecoder.outputChannels = 4;
|
|
2534
|
+
EXRDecoder.shouldExpand = true;
|
|
2535
|
+
EXRDecoder.decodeChannels = { Y: 0 };
|
|
2536
|
+
|
|
2537
|
+
} else if ( outputFormat == RGFormat ) {
|
|
2538
|
+
|
|
2539
|
+
EXRDecoder.format = RGFormat;
|
|
2540
|
+
EXRDecoder.colorSpace = LinearSRGBColorSpace;
|
|
2541
|
+
EXRDecoder.outputChannels = 2;
|
|
2542
|
+
EXRDecoder.shouldExpand = true;
|
|
2543
|
+
EXRDecoder.decodeChannels = { Y: 0 };
|
|
2544
|
+
|
|
2545
|
+
} else if ( outputFormat == RedFormat ) {
|
|
2546
|
+
|
|
2547
|
+
EXRDecoder.format = RedFormat;
|
|
2548
|
+
EXRDecoder.colorSpace = LinearSRGBColorSpace;
|
|
2549
|
+
EXRDecoder.outputChannels = 1;
|
|
2550
|
+
EXRDecoder.decodeChannels = { Y: 0 };
|
|
2551
|
+
|
|
2552
|
+
} else {
|
|
2553
|
+
|
|
2554
|
+
invalidOutput = true;
|
|
2555
|
+
|
|
2556
|
+
}
|
|
2557
|
+
|
|
2558
|
+
break;
|
|
2559
|
+
|
|
2560
|
+
default:
|
|
2561
|
+
|
|
2562
|
+
invalidOutput = true;
|
|
2563
|
+
|
|
2564
|
+
}
|
|
2565
|
+
|
|
2566
|
+
if (invalidOutput) throw new Error( 'EXRLoader.parse: invalid output format for specified file.' );
|
|
2567
|
+
|
|
2399
2568
|
if ( EXRDecoder.type == 1 ) {
|
|
2400
2569
|
|
|
2401
2570
|
// half
|
|
@@ -2485,18 +2654,6 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2485
2654
|
|
|
2486
2655
|
}
|
|
2487
2656
|
|
|
2488
|
-
if ( EXRDecoder.outputChannels == 4 ) {
|
|
2489
|
-
|
|
2490
|
-
EXRDecoder.format = RGBAFormat;
|
|
2491
|
-
EXRDecoder.colorSpace = LinearSRGBColorSpace;
|
|
2492
|
-
|
|
2493
|
-
} else {
|
|
2494
|
-
|
|
2495
|
-
EXRDecoder.format = RedFormat;
|
|
2496
|
-
EXRDecoder.colorSpace = NoColorSpace;
|
|
2497
|
-
|
|
2498
|
-
}
|
|
2499
|
-
|
|
2500
2657
|
if ( EXRHeader.spec.singleTile ) {
|
|
2501
2658
|
|
|
2502
2659
|
EXRDecoder.blockHeight = EXRHeader.tiles.ySize;
|
|
@@ -2542,11 +2699,30 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2542
2699
|
const EXRHeader = parseHeader( bufferDataView, buffer, offset );
|
|
2543
2700
|
|
|
2544
2701
|
// get input compression information and prepare decoding.
|
|
2545
|
-
const EXRDecoder = setupDecoder( EXRHeader, bufferDataView, uInt8Array, offset, this.type );
|
|
2702
|
+
const EXRDecoder = setupDecoder( EXRHeader, bufferDataView, uInt8Array, offset, this.type, this.outputFormat );
|
|
2546
2703
|
|
|
2547
2704
|
// parse input data
|
|
2548
2705
|
EXRDecoder.decode();
|
|
2549
2706
|
|
|
2707
|
+
// output texture post-processing
|
|
2708
|
+
if ( EXRDecoder.shouldExpand ) {
|
|
2709
|
+
|
|
2710
|
+
const byteArray = EXRDecoder.byteArray;
|
|
2711
|
+
|
|
2712
|
+
if ( this.outputFormat == RGBAFormat ) {
|
|
2713
|
+
|
|
2714
|
+
for ( let i = 0; i < byteArray.length; i += 4 )
|
|
2715
|
+
byteArray [i + 2 ] = ( byteArray [ i + 1 ] = byteArray[ i ] );
|
|
2716
|
+
|
|
2717
|
+
} else if ( this.outputFormat == RGFormat ) {
|
|
2718
|
+
|
|
2719
|
+
for ( let i = 0; i < byteArray.length; i += 2 )
|
|
2720
|
+
byteArray [ i + 1 ] = byteArray[ i ] ;
|
|
2721
|
+
|
|
2722
|
+
}
|
|
2723
|
+
|
|
2724
|
+
}
|
|
2725
|
+
|
|
2550
2726
|
return {
|
|
2551
2727
|
header: EXRHeader,
|
|
2552
2728
|
width: EXRDecoder.width,
|
|
@@ -2563,7 +2739,7 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2563
2739
|
* Sets the texture type.
|
|
2564
2740
|
*
|
|
2565
2741
|
* @param {(HalfFloatType|FloatType)} value - The texture type to set.
|
|
2566
|
-
* @return {
|
|
2742
|
+
* @return {EXRLoader} A reference to this loader.
|
|
2567
2743
|
*/
|
|
2568
2744
|
setDataType( value ) {
|
|
2569
2745
|
|
|
@@ -2572,6 +2748,19 @@ class EXRLoader extends DataTextureLoader {
|
|
|
2572
2748
|
|
|
2573
2749
|
}
|
|
2574
2750
|
|
|
2751
|
+
/**
|
|
2752
|
+
* Sets texture output format. Defaults to `RGBAFormat`.
|
|
2753
|
+
*
|
|
2754
|
+
* @param {(RGBAFormat|RGFormat|RedFormat)} value - Texture output format.
|
|
2755
|
+
* @return {EXRLoader} A reference to this loader.
|
|
2756
|
+
*/
|
|
2757
|
+
setOutputFormat( value ) {
|
|
2758
|
+
|
|
2759
|
+
this.outputFormat = value;
|
|
2760
|
+
return this;
|
|
2761
|
+
|
|
2762
|
+
}
|
|
2763
|
+
|
|
2575
2764
|
load( url, onLoad, onProgress, onError ) {
|
|
2576
2765
|
|
|
2577
2766
|
function onLoadCallback( texture, texData ) {
|
|
@@ -73,6 +73,7 @@ let sceneGraph;
|
|
|
73
73
|
* ```
|
|
74
74
|
*
|
|
75
75
|
* @augments Loader
|
|
76
|
+
* @three_import import { FBXLoader } from 'three/addons/loaders/FBXLoader.js';
|
|
76
77
|
*/
|
|
77
78
|
class FBXLoader extends Loader {
|
|
78
79
|
|
|
@@ -137,7 +138,7 @@ class FBXLoader extends Loader {
|
|
|
137
138
|
/**
|
|
138
139
|
* Parses the given FBX data and returns the resulting group.
|
|
139
140
|
*
|
|
140
|
-
* @param {
|
|
141
|
+
* @param {ArrayBuffer} FBXBuffer - The raw FBX data as an array buffer.
|
|
141
142
|
* @param {string} path - The URL base path.
|
|
142
143
|
* @return {Group} An object representing the parsed asset.
|
|
143
144
|
*/
|
|
@@ -347,6 +348,11 @@ class FBXTreeParser {
|
|
|
347
348
|
type = 'image/tga';
|
|
348
349
|
break;
|
|
349
350
|
|
|
351
|
+
case 'webp':
|
|
352
|
+
|
|
353
|
+
type = 'image/webp';
|
|
354
|
+
break;
|
|
355
|
+
|
|
350
356
|
default:
|
|
351
357
|
|
|
352
358
|
console.warn( 'FBXLoader: Image type "' + extension + '" is not supported.' );
|
|
@@ -436,21 +442,10 @@ class FBXTreeParser {
|
|
|
436
442
|
// load a texture specified as a blob or data URI, or via an external URL using TextureLoader
|
|
437
443
|
loadTexture( textureNode, images ) {
|
|
438
444
|
|
|
439
|
-
const nonNativeExtensions = new Set( [ 'tga', 'tif', 'tiff', 'exr', 'dds', 'hdr', 'ktx2' ] );
|
|
440
|
-
|
|
441
445
|
const extension = textureNode.FileName.split( '.' ).pop().toLowerCase();
|
|
442
446
|
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
if ( ! loader ) {
|
|
446
|
-
|
|
447
|
-
console.warn(
|
|
448
|
-
`FBXLoader: ${extension.toUpperCase()} loader not found, creating placeholder texture for`,
|
|
449
|
-
textureNode.RelativeFilename
|
|
450
|
-
);
|
|
451
|
-
return new Texture();
|
|
452
|
-
|
|
453
|
-
}
|
|
447
|
+
let loader = this.manager.getHandler( `.${extension}` );
|
|
448
|
+
if ( loader === null ) loader = this.textureLoader;
|
|
454
449
|
|
|
455
450
|
const loaderPath = loader.path;
|
|
456
451
|
|
|
@@ -476,6 +471,13 @@ class FBXTreeParser {
|
|
|
476
471
|
|
|
477
472
|
}
|
|
478
473
|
|
|
474
|
+
if ( fileName === undefined ) {
|
|
475
|
+
|
|
476
|
+
console.warn( 'FBXLoader: Undefined filename, creating placeholder texture.' );
|
|
477
|
+
return new Texture();
|
|
478
|
+
|
|
479
|
+
}
|
|
480
|
+
|
|
479
481
|
const texture = loader.load( fileName );
|
|
480
482
|
|
|
481
483
|
// revert to initial path
|
|
@@ -567,12 +569,12 @@ class FBXTreeParser {
|
|
|
567
569
|
|
|
568
570
|
if ( materialNode.Diffuse ) {
|
|
569
571
|
|
|
570
|
-
parameters.color = ColorManagement.
|
|
572
|
+
parameters.color = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.Diffuse.value ), SRGBColorSpace );
|
|
571
573
|
|
|
572
574
|
} else if ( materialNode.DiffuseColor && ( materialNode.DiffuseColor.type === 'Color' || materialNode.DiffuseColor.type === 'ColorRGB' ) ) {
|
|
573
575
|
|
|
574
576
|
// The blender exporter exports diffuse here instead of in materialNode.Diffuse
|
|
575
|
-
parameters.color = ColorManagement.
|
|
577
|
+
parameters.color = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.DiffuseColor.value ), SRGBColorSpace );
|
|
576
578
|
|
|
577
579
|
}
|
|
578
580
|
|
|
@@ -584,12 +586,12 @@ class FBXTreeParser {
|
|
|
584
586
|
|
|
585
587
|
if ( materialNode.Emissive ) {
|
|
586
588
|
|
|
587
|
-
parameters.emissive = ColorManagement.
|
|
589
|
+
parameters.emissive = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.Emissive.value ), SRGBColorSpace );
|
|
588
590
|
|
|
589
591
|
} else if ( materialNode.EmissiveColor && ( materialNode.EmissiveColor.type === 'Color' || materialNode.EmissiveColor.type === 'ColorRGB' ) ) {
|
|
590
592
|
|
|
591
593
|
// The blender exporter exports emissive color here instead of in materialNode.Emissive
|
|
592
|
-
parameters.emissive = ColorManagement.
|
|
594
|
+
parameters.emissive = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.EmissiveColor.value ), SRGBColorSpace );
|
|
593
595
|
|
|
594
596
|
}
|
|
595
597
|
|
|
@@ -635,12 +637,12 @@ class FBXTreeParser {
|
|
|
635
637
|
|
|
636
638
|
if ( materialNode.Specular ) {
|
|
637
639
|
|
|
638
|
-
parameters.specular = ColorManagement.
|
|
640
|
+
parameters.specular = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.Specular.value ), SRGBColorSpace );
|
|
639
641
|
|
|
640
642
|
} else if ( materialNode.SpecularColor && materialNode.SpecularColor.type === 'Color' ) {
|
|
641
643
|
|
|
642
644
|
// The blender exporter exports specular color here instead of in materialNode.Specular
|
|
643
|
-
parameters.specular = ColorManagement.
|
|
645
|
+
parameters.specular = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.SpecularColor.value ), SRGBColorSpace );
|
|
644
646
|
|
|
645
647
|
}
|
|
646
648
|
|
|
@@ -1191,7 +1193,7 @@ class FBXTreeParser {
|
|
|
1191
1193
|
|
|
1192
1194
|
if ( lightAttribute.Color !== undefined ) {
|
|
1193
1195
|
|
|
1194
|
-
color = ColorManagement.
|
|
1196
|
+
color = ColorManagement.colorSpaceToWorking( new Color().fromArray( lightAttribute.Color.value ), SRGBColorSpace );
|
|
1195
1197
|
|
|
1196
1198
|
}
|
|
1197
1199
|
|
|
@@ -1782,7 +1784,7 @@ class GeometryParser {
|
|
|
1782
1784
|
geoInfo.vertexPositions = ( geoNode.Vertices !== undefined ) ? geoNode.Vertices.a : [];
|
|
1783
1785
|
geoInfo.vertexIndices = ( geoNode.PolygonVertexIndex !== undefined ) ? geoNode.PolygonVertexIndex.a : [];
|
|
1784
1786
|
|
|
1785
|
-
if ( geoNode.LayerElementColor ) {
|
|
1787
|
+
if ( geoNode.LayerElementColor && geoNode.LayerElementColor[ 0 ].Colors ) {
|
|
1786
1788
|
|
|
1787
1789
|
geoInfo.color = this.parseVertexColors( geoNode.LayerElementColor[ 0 ] );
|
|
1788
1790
|
|
|
@@ -2389,7 +2391,7 @@ class GeometryParser {
|
|
|
2389
2391
|
for ( let i = 0, c = new Color(); i < buffer.length; i += 4 ) {
|
|
2390
2392
|
|
|
2391
2393
|
c.fromArray( buffer, i );
|
|
2392
|
-
ColorManagement.
|
|
2394
|
+
ColorManagement.colorSpaceToWorking( c, SRGBColorSpace );
|
|
2393
2395
|
c.toArray( buffer, i );
|
|
2394
2396
|
|
|
2395
2397
|
}
|
|
@@ -115,6 +115,7 @@ import { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';
|
|
|
115
115
|
* ```
|
|
116
116
|
*
|
|
117
117
|
* @augments Loader
|
|
118
|
+
* @three_import import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
|
|
118
119
|
*/
|
|
119
120
|
class GLTFLoader extends Loader {
|
|
120
121
|
|
|
@@ -1580,7 +1581,6 @@ class GLTFTextureWebPExtension {
|
|
|
1580
1581
|
|
|
1581
1582
|
this.parser = parser;
|
|
1582
1583
|
this.name = EXTENSIONS.EXT_TEXTURE_WEBP;
|
|
1583
|
-
this.isSupported = null;
|
|
1584
1584
|
|
|
1585
1585
|
}
|
|
1586
1586
|
|
|
@@ -1609,46 +1609,7 @@ class GLTFTextureWebPExtension {
|
|
|
1609
1609
|
|
|
1610
1610
|
}
|
|
1611
1611
|
|
|
1612
|
-
return
|
|
1613
|
-
|
|
1614
|
-
if ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );
|
|
1615
|
-
|
|
1616
|
-
if ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {
|
|
1617
|
-
|
|
1618
|
-
throw new Error( 'THREE.GLTFLoader: WebP required by asset but unsupported.' );
|
|
1619
|
-
|
|
1620
|
-
}
|
|
1621
|
-
|
|
1622
|
-
// Fall back to PNG or JPEG.
|
|
1623
|
-
return parser.loadTexture( textureIndex );
|
|
1624
|
-
|
|
1625
|
-
} );
|
|
1626
|
-
|
|
1627
|
-
}
|
|
1628
|
-
|
|
1629
|
-
detectSupport() {
|
|
1630
|
-
|
|
1631
|
-
if ( ! this.isSupported ) {
|
|
1632
|
-
|
|
1633
|
-
this.isSupported = new Promise( function ( resolve ) {
|
|
1634
|
-
|
|
1635
|
-
const image = new Image();
|
|
1636
|
-
|
|
1637
|
-
// Lossy test image. Support for lossy images doesn't guarantee support for all
|
|
1638
|
-
// WebP images, unfortunately.
|
|
1639
|
-
image.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';
|
|
1640
|
-
|
|
1641
|
-
image.onload = image.onerror = function () {
|
|
1642
|
-
|
|
1643
|
-
resolve( image.height === 1 );
|
|
1644
|
-
|
|
1645
|
-
};
|
|
1646
|
-
|
|
1647
|
-
} );
|
|
1648
|
-
|
|
1649
|
-
}
|
|
1650
|
-
|
|
1651
|
-
return this.isSupported;
|
|
1612
|
+
return parser.loadTextureImage( textureIndex, extension.source, loader );
|
|
1652
1613
|
|
|
1653
1614
|
}
|
|
1654
1615
|
|
|
@@ -1667,7 +1628,6 @@ class GLTFTextureAVIFExtension {
|
|
|
1667
1628
|
|
|
1668
1629
|
this.parser = parser;
|
|
1669
1630
|
this.name = EXTENSIONS.EXT_TEXTURE_AVIF;
|
|
1670
|
-
this.isSupported = null;
|
|
1671
1631
|
|
|
1672
1632
|
}
|
|
1673
1633
|
|
|
@@ -1696,44 +1656,7 @@ class GLTFTextureAVIFExtension {
|
|
|
1696
1656
|
|
|
1697
1657
|
}
|
|
1698
1658
|
|
|
1699
|
-
return
|
|
1700
|
-
|
|
1701
|
-
if ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );
|
|
1702
|
-
|
|
1703
|
-
if ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {
|
|
1704
|
-
|
|
1705
|
-
throw new Error( 'THREE.GLTFLoader: AVIF required by asset but unsupported.' );
|
|
1706
|
-
|
|
1707
|
-
}
|
|
1708
|
-
|
|
1709
|
-
// Fall back to PNG or JPEG.
|
|
1710
|
-
return parser.loadTexture( textureIndex );
|
|
1711
|
-
|
|
1712
|
-
} );
|
|
1713
|
-
|
|
1714
|
-
}
|
|
1715
|
-
|
|
1716
|
-
detectSupport() {
|
|
1717
|
-
|
|
1718
|
-
if ( ! this.isSupported ) {
|
|
1719
|
-
|
|
1720
|
-
this.isSupported = new Promise( function ( resolve ) {
|
|
1721
|
-
|
|
1722
|
-
const image = new Image();
|
|
1723
|
-
|
|
1724
|
-
// Lossy test image.
|
|
1725
|
-
image.src = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=';
|
|
1726
|
-
image.onload = image.onerror = function () {
|
|
1727
|
-
|
|
1728
|
-
resolve( image.height === 1 );
|
|
1729
|
-
|
|
1730
|
-
};
|
|
1731
|
-
|
|
1732
|
-
} );
|
|
1733
|
-
|
|
1734
|
-
}
|
|
1735
|
-
|
|
1736
|
-
return this.isSupported;
|
|
1659
|
+
return parser.loadTextureImage( textureIndex, extension.source, loader );
|
|
1737
1660
|
|
|
1738
1661
|
}
|
|
1739
1662
|
|
|
@@ -2294,7 +2217,7 @@ class GLTFCubicSplineInterpolant extends Interpolant {
|
|
|
2294
2217
|
|
|
2295
2218
|
}
|
|
2296
2219
|
|
|
2297
|
-
const
|
|
2220
|
+
const _quaternion = new Quaternion();
|
|
2298
2221
|
|
|
2299
2222
|
class GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {
|
|
2300
2223
|
|
|
@@ -2302,7 +2225,7 @@ class GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {
|
|
|
2302
2225
|
|
|
2303
2226
|
const result = super.interpolate_( i1, t0, t, t1 );
|
|
2304
2227
|
|
|
2305
|
-
|
|
2228
|
+
_quaternion.fromArray( result ).normalize().toArray( result );
|
|
2306
2229
|
|
|
2307
2230
|
return result;
|
|
2308
2231
|
|
|
@@ -4528,6 +4451,11 @@ class GLTFParser {
|
|
|
4528
4451
|
|
|
4529
4452
|
parser.associations.set( node, {} );
|
|
4530
4453
|
|
|
4454
|
+
} else if ( nodeDef.mesh !== undefined && parser.meshCache.refs[ nodeDef.mesh ] > 1 ) {
|
|
4455
|
+
|
|
4456
|
+
const mapping = parser.associations.get( node );
|
|
4457
|
+
parser.associations.set( node, { ...mapping } );
|
|
4458
|
+
|
|
4531
4459
|
}
|
|
4532
4460
|
|
|
4533
4461
|
parser.associations.get( node ).nodes = nodeIndex;
|