@plastic-software/three 0.167.4 → 0.174.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/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +36217 -23964
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46744
- package/build/three.module.min.js +2 -3
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50671
- package/build/three.webgpu.min.js +2 -3
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
package/src/math/Box3.js
CHANGED
|
@@ -1,16 +1,51 @@
|
|
|
1
1
|
import { Vector3 } from './Vector3.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Represents an axis-aligned bounding box (AABB) in 3D space.
|
|
5
|
+
*/
|
|
3
6
|
class Box3 {
|
|
4
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Constructs a new bounding box.
|
|
10
|
+
*
|
|
11
|
+
* @param {Vector3} [min=(Infinity,Infinity,Infinity)] - A vector representing the lower boundary of the box.
|
|
12
|
+
* @param {Vector3} [max=(-Infinity,-Infinity,-Infinity)] - A vector representing the upper boundary of the box.
|
|
13
|
+
*/
|
|
5
14
|
constructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {
|
|
6
15
|
|
|
16
|
+
/**
|
|
17
|
+
* This flag can be used for type testing.
|
|
18
|
+
*
|
|
19
|
+
* @type {boolean}
|
|
20
|
+
* @readonly
|
|
21
|
+
* @default true
|
|
22
|
+
*/
|
|
7
23
|
this.isBox3 = true;
|
|
8
24
|
|
|
25
|
+
/**
|
|
26
|
+
* The lower boundary of the box.
|
|
27
|
+
*
|
|
28
|
+
* @type {Vector3}
|
|
29
|
+
*/
|
|
9
30
|
this.min = min;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The upper boundary of the box.
|
|
34
|
+
*
|
|
35
|
+
* @type {Vector3}
|
|
36
|
+
*/
|
|
10
37
|
this.max = max;
|
|
11
38
|
|
|
12
39
|
}
|
|
13
40
|
|
|
41
|
+
/**
|
|
42
|
+
* Sets the lower and upper boundaries of this box.
|
|
43
|
+
* Please note that this method only copies the values from the given objects.
|
|
44
|
+
*
|
|
45
|
+
* @param {Vector3} min - The lower boundary of the box.
|
|
46
|
+
* @param {Vector3} max - The upper boundary of the box.
|
|
47
|
+
* @return {Box3} A reference to this bounding box.
|
|
48
|
+
*/
|
|
14
49
|
set( min, max ) {
|
|
15
50
|
|
|
16
51
|
this.min.copy( min );
|
|
@@ -20,6 +55,13 @@ class Box3 {
|
|
|
20
55
|
|
|
21
56
|
}
|
|
22
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Sets the upper and lower bounds of this box so it encloses the position data
|
|
60
|
+
* in the given array.
|
|
61
|
+
*
|
|
62
|
+
* @param {Array<number>} array - An array holding 3D position data.
|
|
63
|
+
* @return {Box3} A reference to this bounding box.
|
|
64
|
+
*/
|
|
23
65
|
setFromArray( array ) {
|
|
24
66
|
|
|
25
67
|
this.makeEmpty();
|
|
@@ -34,6 +76,13 @@ class Box3 {
|
|
|
34
76
|
|
|
35
77
|
}
|
|
36
78
|
|
|
79
|
+
/**
|
|
80
|
+
* Sets the upper and lower bounds of this box so it encloses the position data
|
|
81
|
+
* in the given buffer attribute.
|
|
82
|
+
*
|
|
83
|
+
* @param {BufferAttribute} attribute - A buffer attribute holding 3D position data.
|
|
84
|
+
* @return {Box3} A reference to this bounding box.
|
|
85
|
+
*/
|
|
37
86
|
setFromBufferAttribute( attribute ) {
|
|
38
87
|
|
|
39
88
|
this.makeEmpty();
|
|
@@ -48,6 +97,13 @@ class Box3 {
|
|
|
48
97
|
|
|
49
98
|
}
|
|
50
99
|
|
|
100
|
+
/**
|
|
101
|
+
* Sets the upper and lower bounds of this box so it encloses the position data
|
|
102
|
+
* in the given array.
|
|
103
|
+
*
|
|
104
|
+
* @param {Array<Vector3>} points - An array holding 3D position data as instances of {@link Vector3}.
|
|
105
|
+
* @return {Box3} A reference to this bounding box.
|
|
106
|
+
*/
|
|
51
107
|
setFromPoints( points ) {
|
|
52
108
|
|
|
53
109
|
this.makeEmpty();
|
|
@@ -62,6 +118,14 @@ class Box3 {
|
|
|
62
118
|
|
|
63
119
|
}
|
|
64
120
|
|
|
121
|
+
/**
|
|
122
|
+
* Centers this box on the given center vector and sets this box's width, height and
|
|
123
|
+
* depth to the given size values.
|
|
124
|
+
*
|
|
125
|
+
* @param {Vector3} center - The center of the box.
|
|
126
|
+
* @param {Vector3} size - The x, y and z dimensions of the box.
|
|
127
|
+
* @return {Box3} A reference to this bounding box.
|
|
128
|
+
*/
|
|
65
129
|
setFromCenterAndSize( center, size ) {
|
|
66
130
|
|
|
67
131
|
const halfSize = _vector.copy( size ).multiplyScalar( 0.5 );
|
|
@@ -73,6 +137,16 @@ class Box3 {
|
|
|
73
137
|
|
|
74
138
|
}
|
|
75
139
|
|
|
140
|
+
/**
|
|
141
|
+
* Computes the world-axis-aligned bounding box for the given 3D object
|
|
142
|
+
* (including its children), accounting for the object's, and children's,
|
|
143
|
+
* world transforms. The function may result in a larger box than strictly necessary.
|
|
144
|
+
*
|
|
145
|
+
* @param {Object3D} object - The 3D object to compute the bounding box for.
|
|
146
|
+
* @param {boolean} [precise=false] - If set to `true`, the method computes the smallest
|
|
147
|
+
* world-axis-aligned bounding box at the expense of more computation.
|
|
148
|
+
* @return {Box3} A reference to this bounding box.
|
|
149
|
+
*/
|
|
76
150
|
setFromObject( object, precise = false ) {
|
|
77
151
|
|
|
78
152
|
this.makeEmpty();
|
|
@@ -81,12 +155,23 @@ class Box3 {
|
|
|
81
155
|
|
|
82
156
|
}
|
|
83
157
|
|
|
158
|
+
/**
|
|
159
|
+
* Returns a new box with copied values from this instance.
|
|
160
|
+
*
|
|
161
|
+
* @return {Box3} A clone of this instance.
|
|
162
|
+
*/
|
|
84
163
|
clone() {
|
|
85
164
|
|
|
86
165
|
return new this.constructor().copy( this );
|
|
87
166
|
|
|
88
167
|
}
|
|
89
168
|
|
|
169
|
+
/**
|
|
170
|
+
* Copies the values of the given box to this instance.
|
|
171
|
+
*
|
|
172
|
+
* @param {Box3} box - The box to copy.
|
|
173
|
+
* @return {Box3} A reference to this bounding box.
|
|
174
|
+
*/
|
|
90
175
|
copy( box ) {
|
|
91
176
|
|
|
92
177
|
this.min.copy( box.min );
|
|
@@ -96,6 +181,11 @@ class Box3 {
|
|
|
96
181
|
|
|
97
182
|
}
|
|
98
183
|
|
|
184
|
+
/**
|
|
185
|
+
* Makes this box empty which means in encloses a zero space in 3D.
|
|
186
|
+
*
|
|
187
|
+
* @return {Box3} A reference to this bounding box.
|
|
188
|
+
*/
|
|
99
189
|
makeEmpty() {
|
|
100
190
|
|
|
101
191
|
this.min.x = this.min.y = this.min.z = + Infinity;
|
|
@@ -105,6 +195,13 @@ class Box3 {
|
|
|
105
195
|
|
|
106
196
|
}
|
|
107
197
|
|
|
198
|
+
/**
|
|
199
|
+
* Returns true if this box includes zero points within its bounds.
|
|
200
|
+
* Note that a box with equal lower and upper bounds still includes one
|
|
201
|
+
* point, the one both bounds share.
|
|
202
|
+
*
|
|
203
|
+
* @return {boolean} Whether this box is empty or not.
|
|
204
|
+
*/
|
|
108
205
|
isEmpty() {
|
|
109
206
|
|
|
110
207
|
// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes
|
|
@@ -113,18 +210,36 @@ class Box3 {
|
|
|
113
210
|
|
|
114
211
|
}
|
|
115
212
|
|
|
213
|
+
/**
|
|
214
|
+
* Returns the center point of this box.
|
|
215
|
+
*
|
|
216
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
217
|
+
* @return {Vector3} The center point.
|
|
218
|
+
*/
|
|
116
219
|
getCenter( target ) {
|
|
117
220
|
|
|
118
221
|
return this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );
|
|
119
222
|
|
|
120
223
|
}
|
|
121
224
|
|
|
225
|
+
/**
|
|
226
|
+
* Returns the dimensions of this box.
|
|
227
|
+
*
|
|
228
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
229
|
+
* @return {Vector3} The size.
|
|
230
|
+
*/
|
|
122
231
|
getSize( target ) {
|
|
123
232
|
|
|
124
233
|
return this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );
|
|
125
234
|
|
|
126
235
|
}
|
|
127
236
|
|
|
237
|
+
/**
|
|
238
|
+
* Expands the boundaries of this box to include the given point.
|
|
239
|
+
*
|
|
240
|
+
* @param {Vector3} point - The point that should be included by the bounding box.
|
|
241
|
+
* @return {Box3} A reference to this bounding box.
|
|
242
|
+
*/
|
|
128
243
|
expandByPoint( point ) {
|
|
129
244
|
|
|
130
245
|
this.min.min( point );
|
|
@@ -134,6 +249,16 @@ class Box3 {
|
|
|
134
249
|
|
|
135
250
|
}
|
|
136
251
|
|
|
252
|
+
/**
|
|
253
|
+
* Expands this box equilaterally by the given vector. The width of this
|
|
254
|
+
* box will be expanded by the x component of the vector in both
|
|
255
|
+
* directions. The height of this box will be expanded by the y component of
|
|
256
|
+
* the vector in both directions. The depth of this box will be
|
|
257
|
+
* expanded by the z component of the vector in both directions.
|
|
258
|
+
*
|
|
259
|
+
* @param {Vector3} vector - The vector that should expand the bounding box.
|
|
260
|
+
* @return {Box3} A reference to this bounding box.
|
|
261
|
+
*/
|
|
137
262
|
expandByVector( vector ) {
|
|
138
263
|
|
|
139
264
|
this.min.sub( vector );
|
|
@@ -143,6 +268,13 @@ class Box3 {
|
|
|
143
268
|
|
|
144
269
|
}
|
|
145
270
|
|
|
271
|
+
/**
|
|
272
|
+
* Expands each dimension of the box by the given scalar. If negative, the
|
|
273
|
+
* dimensions of the box will be contracted.
|
|
274
|
+
*
|
|
275
|
+
* @param {number} scalar - The scalar value that should expand the bounding box.
|
|
276
|
+
* @return {Box3} A reference to this bounding box.
|
|
277
|
+
*/
|
|
146
278
|
expandByScalar( scalar ) {
|
|
147
279
|
|
|
148
280
|
this.min.addScalar( - scalar );
|
|
@@ -152,6 +284,17 @@ class Box3 {
|
|
|
152
284
|
|
|
153
285
|
}
|
|
154
286
|
|
|
287
|
+
/**
|
|
288
|
+
* Expands the boundaries of this box to include the given 3D object and
|
|
289
|
+
* its children, accounting for the object's, and children's, world
|
|
290
|
+
* transforms. The function may result in a larger box than strictly
|
|
291
|
+
* necessary (unless the precise parameter is set to true).
|
|
292
|
+
*
|
|
293
|
+
* @param {Object3D} object - The 3D object that should expand the bounding box.
|
|
294
|
+
* @param {boolean} precise - If set to `true`, the method expands the bounding box
|
|
295
|
+
* as little as necessary at the expense of more computation.
|
|
296
|
+
* @return {Box3} A reference to this bounding box.
|
|
297
|
+
*/
|
|
155
298
|
expandByObject( object, precise = false ) {
|
|
156
299
|
|
|
157
300
|
// Computes the world-axis-aligned bounding box of an object (including its children),
|
|
@@ -236,6 +379,12 @@ class Box3 {
|
|
|
236
379
|
|
|
237
380
|
}
|
|
238
381
|
|
|
382
|
+
/**
|
|
383
|
+
* Returns `true` if the given point lies within or on the boundaries of this box.
|
|
384
|
+
*
|
|
385
|
+
* @param {Vector3} point - The point to test.
|
|
386
|
+
* @return {boolean} Whether the bounding box contains the given point or not.
|
|
387
|
+
*/
|
|
239
388
|
containsPoint( point ) {
|
|
240
389
|
|
|
241
390
|
return point.x >= this.min.x && point.x <= this.max.x &&
|
|
@@ -244,6 +393,13 @@ class Box3 {
|
|
|
244
393
|
|
|
245
394
|
}
|
|
246
395
|
|
|
396
|
+
/**
|
|
397
|
+
* Returns `true` if this bounding box includes the entirety of the given bounding box.
|
|
398
|
+
* If this box and the given one are identical, this function also returns `true`.
|
|
399
|
+
*
|
|
400
|
+
* @param {Box3} box - The bounding box to test.
|
|
401
|
+
* @return {boolean} Whether the bounding box contains the given bounding box or not.
|
|
402
|
+
*/
|
|
247
403
|
containsBox( box ) {
|
|
248
404
|
|
|
249
405
|
return this.min.x <= box.min.x && box.max.x <= this.max.x &&
|
|
@@ -252,6 +408,13 @@ class Box3 {
|
|
|
252
408
|
|
|
253
409
|
}
|
|
254
410
|
|
|
411
|
+
/**
|
|
412
|
+
* Returns a point as a proportion of this box's width, height and depth.
|
|
413
|
+
*
|
|
414
|
+
* @param {Vector3} point - A point in 3D space.
|
|
415
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
416
|
+
* @return {Vector3} A point as a proportion of this box's width, height and depth.
|
|
417
|
+
*/
|
|
255
418
|
getParameter( point, target ) {
|
|
256
419
|
|
|
257
420
|
// This can potentially have a divide by zero if the box
|
|
@@ -265,6 +428,12 @@ class Box3 {
|
|
|
265
428
|
|
|
266
429
|
}
|
|
267
430
|
|
|
431
|
+
/**
|
|
432
|
+
* Returns `true` if the given bounding box intersects with this bounding box.
|
|
433
|
+
*
|
|
434
|
+
* @param {Box3} box - The bounding box to test.
|
|
435
|
+
* @return {boolean} Whether the given bounding box intersects with this bounding box.
|
|
436
|
+
*/
|
|
268
437
|
intersectsBox( box ) {
|
|
269
438
|
|
|
270
439
|
// using 6 splitting planes to rule out intersections.
|
|
@@ -274,6 +443,12 @@ class Box3 {
|
|
|
274
443
|
|
|
275
444
|
}
|
|
276
445
|
|
|
446
|
+
/**
|
|
447
|
+
* Returns `true` if the given bounding sphere intersects with this bounding box.
|
|
448
|
+
*
|
|
449
|
+
* @param {Sphere} sphere - The bounding sphere to test.
|
|
450
|
+
* @return {boolean} Whether the given bounding sphere intersects with this bounding box.
|
|
451
|
+
*/
|
|
277
452
|
intersectsSphere( sphere ) {
|
|
278
453
|
|
|
279
454
|
// Find the point on the AABB closest to the sphere center.
|
|
@@ -284,6 +459,12 @@ class Box3 {
|
|
|
284
459
|
|
|
285
460
|
}
|
|
286
461
|
|
|
462
|
+
/**
|
|
463
|
+
* Returns `true` if the given plane intersects with this bounding box.
|
|
464
|
+
*
|
|
465
|
+
* @param {Plane} plane - The plane to test.
|
|
466
|
+
* @return {boolean} Whether the given plane intersects with this bounding box.
|
|
467
|
+
*/
|
|
287
468
|
intersectsPlane( plane ) {
|
|
288
469
|
|
|
289
470
|
// We compute the minimum and maximum dot product values. If those values
|
|
@@ -331,6 +512,12 @@ class Box3 {
|
|
|
331
512
|
|
|
332
513
|
}
|
|
333
514
|
|
|
515
|
+
/**
|
|
516
|
+
* Returns `true` if the given triangle intersects with this bounding box.
|
|
517
|
+
*
|
|
518
|
+
* @param {Triangle} triangle - The triangle to test.
|
|
519
|
+
* @return {boolean} Whether the given triangle intersects with this bounding box.
|
|
520
|
+
*/
|
|
334
521
|
intersectsTriangle( triangle ) {
|
|
335
522
|
|
|
336
523
|
if ( this.isEmpty() ) {
|
|
@@ -384,18 +571,38 @@ class Box3 {
|
|
|
384
571
|
|
|
385
572
|
}
|
|
386
573
|
|
|
574
|
+
/**
|
|
575
|
+
* Clamps the given point within the bounds of this box.
|
|
576
|
+
*
|
|
577
|
+
* @param {Vector3} point - The point to clamp.
|
|
578
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
579
|
+
* @return {Vector3} The clamped point.
|
|
580
|
+
*/
|
|
387
581
|
clampPoint( point, target ) {
|
|
388
582
|
|
|
389
583
|
return target.copy( point ).clamp( this.min, this.max );
|
|
390
584
|
|
|
391
585
|
}
|
|
392
586
|
|
|
587
|
+
/**
|
|
588
|
+
* Returns the euclidean distance from any edge of this box to the specified point. If
|
|
589
|
+
* the given point lies inside of this box, the distance will be `0`.
|
|
590
|
+
*
|
|
591
|
+
* @param {Vector3} point - The point to compute the distance to.
|
|
592
|
+
* @return {number} The euclidean distance.
|
|
593
|
+
*/
|
|
393
594
|
distanceToPoint( point ) {
|
|
394
595
|
|
|
395
596
|
return this.clampPoint( point, _vector ).distanceTo( point );
|
|
396
597
|
|
|
397
598
|
}
|
|
398
599
|
|
|
600
|
+
/**
|
|
601
|
+
* Returns a bounding sphere that encloses this bounding box.
|
|
602
|
+
*
|
|
603
|
+
* @param {Sphere} target - The target sphere that is used to store the method's result.
|
|
604
|
+
* @return {Sphere} The bounding sphere that encloses this bounding box.
|
|
605
|
+
*/
|
|
399
606
|
getBoundingSphere( target ) {
|
|
400
607
|
|
|
401
608
|
if ( this.isEmpty() ) {
|
|
@@ -414,6 +621,15 @@ class Box3 {
|
|
|
414
621
|
|
|
415
622
|
}
|
|
416
623
|
|
|
624
|
+
/**
|
|
625
|
+
* Computes the intersection of this bounding box and the given one, setting the upper
|
|
626
|
+
* bound of this box to the lesser of the two boxes' upper bounds and the
|
|
627
|
+
* lower bound of this box to the greater of the two boxes' lower bounds. If
|
|
628
|
+
* there's no overlap, makes this box empty.
|
|
629
|
+
*
|
|
630
|
+
* @param {Box3} box - The bounding box to intersect with.
|
|
631
|
+
* @return {Box3} A reference to this bounding box.
|
|
632
|
+
*/
|
|
417
633
|
intersect( box ) {
|
|
418
634
|
|
|
419
635
|
this.min.max( box.min );
|
|
@@ -426,6 +642,14 @@ class Box3 {
|
|
|
426
642
|
|
|
427
643
|
}
|
|
428
644
|
|
|
645
|
+
/**
|
|
646
|
+
* Computes the union of this box and another and the given one, setting the upper
|
|
647
|
+
* bound of this box to the greater of the two boxes' upper bounds and the
|
|
648
|
+
* lower bound of this box to the lesser of the two boxes' lower bounds.
|
|
649
|
+
*
|
|
650
|
+
* @param {Box3} box - The bounding box that will be unioned with this instance.
|
|
651
|
+
* @return {Box3} A reference to this bounding box.
|
|
652
|
+
*/
|
|
429
653
|
union( box ) {
|
|
430
654
|
|
|
431
655
|
this.min.min( box.min );
|
|
@@ -435,6 +659,12 @@ class Box3 {
|
|
|
435
659
|
|
|
436
660
|
}
|
|
437
661
|
|
|
662
|
+
/**
|
|
663
|
+
* Transforms this bounding box by the given 4x4 transformation matrix.
|
|
664
|
+
*
|
|
665
|
+
* @param {Matrix4} matrix - The transformation matrix.
|
|
666
|
+
* @return {Box3} A reference to this bounding box.
|
|
667
|
+
*/
|
|
438
668
|
applyMatrix4( matrix ) {
|
|
439
669
|
|
|
440
670
|
// transform of empty box is an empty box.
|
|
@@ -456,6 +686,13 @@ class Box3 {
|
|
|
456
686
|
|
|
457
687
|
}
|
|
458
688
|
|
|
689
|
+
/**
|
|
690
|
+
* Adds the given offset to both the upper and lower bounds of this bounding box,
|
|
691
|
+
* effectively moving it in 3D space.
|
|
692
|
+
*
|
|
693
|
+
* @param {Vector3} offset - The offset that should be used to translate the bounding box.
|
|
694
|
+
* @return {Box3} A reference to this bounding box.
|
|
695
|
+
*/
|
|
459
696
|
translate( offset ) {
|
|
460
697
|
|
|
461
698
|
this.min.add( offset );
|
|
@@ -465,6 +702,12 @@ class Box3 {
|
|
|
465
702
|
|
|
466
703
|
}
|
|
467
704
|
|
|
705
|
+
/**
|
|
706
|
+
* Returns `true` if this bounding box is equal with the given one.
|
|
707
|
+
*
|
|
708
|
+
* @param {Box3} box - The box to test for equality.
|
|
709
|
+
* @return {boolean} Whether this bounding box is equal with the given one.
|
|
710
|
+
*/
|
|
468
711
|
equals( box ) {
|
|
469
712
|
|
|
470
713
|
return box.min.equals( this.min ) && box.max.equals( this.max );
|