@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/objects/Bone.js
CHANGED
|
@@ -1,11 +1,35 @@
|
|
|
1
1
|
import { Object3D } from '../core/Object3D.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* A bone which is part of a {@link Skeleton}. The skeleton in turn is used by
|
|
5
|
+
* the {@link SkinnedMesh}.
|
|
6
|
+
*
|
|
7
|
+
* ```js
|
|
8
|
+
* const root = new THREE.Bone();
|
|
9
|
+
* const child = new THREE.Bone();
|
|
10
|
+
*
|
|
11
|
+
* root.add( child );
|
|
12
|
+
* child.position.y = 5;
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @augments Object3D
|
|
16
|
+
*/
|
|
3
17
|
class Bone extends Object3D {
|
|
4
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a new bone.
|
|
21
|
+
*/
|
|
5
22
|
constructor() {
|
|
6
23
|
|
|
7
24
|
super();
|
|
8
25
|
|
|
26
|
+
/**
|
|
27
|
+
* This flag can be used for type testing.
|
|
28
|
+
*
|
|
29
|
+
* @type {boolean}
|
|
30
|
+
* @readonly
|
|
31
|
+
* @default true
|
|
32
|
+
*/
|
|
9
33
|
this.isBone = true;
|
|
10
34
|
|
|
11
35
|
this.type = 'Bone';
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Group } from './Group.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* In earlier three.js versions, clipping was defined globally
|
|
5
|
+
* on the renderer or on material level. This special version of
|
|
6
|
+
* `THREE.Group` allows to encode the clipping state into the scene
|
|
7
|
+
* graph. Meaning if you create an instance of this group, all
|
|
8
|
+
* descendant 3D objects will be affected by the respective clipping
|
|
9
|
+
* planes.
|
|
10
|
+
*
|
|
11
|
+
* Note: `ClippingGroup` can only be used with `WebGPURenderer`.
|
|
12
|
+
*
|
|
13
|
+
* @augments Group
|
|
14
|
+
*/
|
|
15
|
+
class ClippingGroup extends Group {
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Constructs a new clipping group.
|
|
19
|
+
*/
|
|
20
|
+
constructor() {
|
|
21
|
+
|
|
22
|
+
super();
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* This flag can be used for type testing.
|
|
26
|
+
*
|
|
27
|
+
* @type {boolean}
|
|
28
|
+
* @readonly
|
|
29
|
+
* @default true
|
|
30
|
+
*/
|
|
31
|
+
this.isClippingGroup = true;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* An array with clipping planes.
|
|
35
|
+
*
|
|
36
|
+
* @type {Array<Plane>}
|
|
37
|
+
*/
|
|
38
|
+
this.clippingPlanes = [];
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Whether clipping should be enabled or not.
|
|
42
|
+
*
|
|
43
|
+
* @type {boolean}
|
|
44
|
+
* @default true
|
|
45
|
+
*/
|
|
46
|
+
this.enabled = true;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Whether the intersection of the clipping planes is used to clip objects, rather than their union.
|
|
50
|
+
*
|
|
51
|
+
* @type {boolean}
|
|
52
|
+
* @default false
|
|
53
|
+
*/
|
|
54
|
+
this.clipIntersection = false;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Whether shadows should be clipped or not.
|
|
58
|
+
*
|
|
59
|
+
* @type {boolean}
|
|
60
|
+
* @default false
|
|
61
|
+
*/
|
|
62
|
+
this.clipShadows = false;
|
|
63
|
+
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export { ClippingGroup };
|
package/src/objects/Group.js
CHANGED
|
@@ -1,11 +1,35 @@
|
|
|
1
1
|
import { Object3D } from '../core/Object3D.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* This is almost identical to an {@link Object3D}. Its purpose is to
|
|
5
|
+
* make working with groups of objects syntactically clearer.
|
|
6
|
+
*
|
|
7
|
+
* ```js
|
|
8
|
+
* // Create a group and add the two cubes.
|
|
9
|
+
* // These cubes can now be rotated / scaled etc as a group.
|
|
10
|
+
* const group = new THREE.Group();
|
|
11
|
+
*
|
|
12
|
+
* group.add( meshA );
|
|
13
|
+
* group.add( meshB );
|
|
14
|
+
*
|
|
15
|
+
* scene.add( group );
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @augments Object3D
|
|
19
|
+
*/
|
|
3
20
|
class Group extends Object3D {
|
|
4
21
|
|
|
5
22
|
constructor() {
|
|
6
23
|
|
|
7
24
|
super();
|
|
8
25
|
|
|
26
|
+
/**
|
|
27
|
+
* This flag can be used for type testing.
|
|
28
|
+
*
|
|
29
|
+
* @type {boolean}
|
|
30
|
+
* @readonly
|
|
31
|
+
* @default true
|
|
32
|
+
*/
|
|
9
33
|
this.isGroup = true;
|
|
10
34
|
|
|
11
35
|
this.type = 'Group';
|
|
@@ -16,21 +16,87 @@ const _identity = /*@__PURE__*/ new Matrix4();
|
|
|
16
16
|
const _mesh = /*@__PURE__*/ new Mesh();
|
|
17
17
|
const _sphere = /*@__PURE__*/ new Sphere();
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* A special version of a mesh with instanced rendering support. Use
|
|
21
|
+
* this class if you have to render a large number of objects with the same
|
|
22
|
+
* geometry and material(s) but with different world transformations. The usage
|
|
23
|
+
* of 'InstancedMesh' will help you to reduce the number of draw calls and thus
|
|
24
|
+
* improve the overall rendering performance in your application.
|
|
25
|
+
*
|
|
26
|
+
* @augments Mesh
|
|
27
|
+
*/
|
|
19
28
|
class InstancedMesh extends Mesh {
|
|
20
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Constructs a new instanced mesh.
|
|
32
|
+
*
|
|
33
|
+
* @param {BufferGeometry} [geometry] - The mesh geometry.
|
|
34
|
+
* @param {Material|Array<Material>} [material] - The mesh material.
|
|
35
|
+
* @param {number} count - The number of instances.
|
|
36
|
+
*/
|
|
21
37
|
constructor( geometry, material, count ) {
|
|
22
38
|
|
|
23
39
|
super( geometry, material );
|
|
24
40
|
|
|
41
|
+
/**
|
|
42
|
+
* This flag can be used for type testing.
|
|
43
|
+
*
|
|
44
|
+
* @type {boolean}
|
|
45
|
+
* @readonly
|
|
46
|
+
* @default true
|
|
47
|
+
*/
|
|
25
48
|
this.isInstancedMesh = true;
|
|
26
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Represents the local transformation of all instances. You have to set its
|
|
52
|
+
* {@link BufferAttribute#needsUpdate} flag to true if you modify instanced data
|
|
53
|
+
* via {@link InstancedMesh#setMatrixAt}.
|
|
54
|
+
*
|
|
55
|
+
* @type {InstancedBufferAttribute}
|
|
56
|
+
*/
|
|
27
57
|
this.instanceMatrix = new InstancedBufferAttribute( new Float32Array( count * 16 ), 16 );
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Represents the color of all instances. You have to set its
|
|
61
|
+
* {@link BufferAttribute#needsUpdate} flag to true if you modify instanced data
|
|
62
|
+
* via {@link InstancedMesh#setColorAt}.
|
|
63
|
+
*
|
|
64
|
+
* @type {?InstancedBufferAttribute}
|
|
65
|
+
* @default null
|
|
66
|
+
*/
|
|
28
67
|
this.instanceColor = null;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Represents the morph target weights of all instances. You have to set its
|
|
71
|
+
* {@link Texture#needsUpdate} flag to true if you modify instanced data
|
|
72
|
+
* via {@link InstancedMesh#setMorphAt}.
|
|
73
|
+
*
|
|
74
|
+
* @type {?InstancedBufferAttribute}
|
|
75
|
+
* @default null
|
|
76
|
+
*/
|
|
29
77
|
this.morphTexture = null;
|
|
30
78
|
|
|
79
|
+
/**
|
|
80
|
+
* The number of instances.
|
|
81
|
+
*
|
|
82
|
+
* @type {number}
|
|
83
|
+
*/
|
|
31
84
|
this.count = count;
|
|
32
85
|
|
|
86
|
+
/**
|
|
87
|
+
* The bounding box of the instanced mesh. Can be computed via {@link InstancedMesh#computeBoundingBox}.
|
|
88
|
+
*
|
|
89
|
+
* @type {?Box3}
|
|
90
|
+
* @default null
|
|
91
|
+
*/
|
|
33
92
|
this.boundingBox = null;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* The bounding sphere of the instanced mesh. Can be computed via {@link InstancedMesh#computeBoundingSphere}.
|
|
96
|
+
*
|
|
97
|
+
* @type {?Sphere}
|
|
98
|
+
* @default null
|
|
99
|
+
*/
|
|
34
100
|
this.boundingSphere = null;
|
|
35
101
|
|
|
36
102
|
for ( let i = 0; i < count; i ++ ) {
|
|
@@ -41,6 +107,11 @@ class InstancedMesh extends Mesh {
|
|
|
41
107
|
|
|
42
108
|
}
|
|
43
109
|
|
|
110
|
+
/**
|
|
111
|
+
* Computes the bounding box of the instanced mesh, and updates {@link InstancedMesh#boundingBox}.
|
|
112
|
+
* The bounding box is not automatically computed by the engine; this method must be called by your app.
|
|
113
|
+
* You may need to recompute the bounding box if an instance is transformed via {@link InstancedMesh#setMatrixAt}.
|
|
114
|
+
*/
|
|
44
115
|
computeBoundingBox() {
|
|
45
116
|
|
|
46
117
|
const geometry = this.geometry;
|
|
@@ -72,6 +143,11 @@ class InstancedMesh extends Mesh {
|
|
|
72
143
|
|
|
73
144
|
}
|
|
74
145
|
|
|
146
|
+
/**
|
|
147
|
+
* Computes the bounding sphere of the instanced mesh, and updates {@link InstancedMesh#boundingSphere}
|
|
148
|
+
* The engine automatically computes the bounding sphere when it is needed, e.g., for ray casting or view frustum culling.
|
|
149
|
+
* You may need to recompute the bounding sphere if an instance is transformed via {@link InstancedMesh#setMatrixAt}.
|
|
150
|
+
*/
|
|
75
151
|
computeBoundingSphere() {
|
|
76
152
|
|
|
77
153
|
const geometry = this.geometry;
|
|
@@ -121,18 +197,36 @@ class InstancedMesh extends Mesh {
|
|
|
121
197
|
|
|
122
198
|
}
|
|
123
199
|
|
|
200
|
+
/**
|
|
201
|
+
* Gets the color of the defined instance.
|
|
202
|
+
*
|
|
203
|
+
* @param {number} index - The instance index.
|
|
204
|
+
* @param {Color} color - The target object that is used to store the method's result.
|
|
205
|
+
*/
|
|
124
206
|
getColorAt( index, color ) {
|
|
125
207
|
|
|
126
208
|
color.fromArray( this.instanceColor.array, index * 3 );
|
|
127
209
|
|
|
128
210
|
}
|
|
129
211
|
|
|
212
|
+
/**
|
|
213
|
+
* Gets the local transformation matrix of the defined instance.
|
|
214
|
+
*
|
|
215
|
+
* @param {number} index - The instance index.
|
|
216
|
+
* @param {Matrix4} matrix - The target object that is used to store the method's result.
|
|
217
|
+
*/
|
|
130
218
|
getMatrixAt( index, matrix ) {
|
|
131
219
|
|
|
132
220
|
matrix.fromArray( this.instanceMatrix.array, index * 16 );
|
|
133
221
|
|
|
134
222
|
}
|
|
135
223
|
|
|
224
|
+
/**
|
|
225
|
+
* Gets the morph target weights of the defined instance.
|
|
226
|
+
*
|
|
227
|
+
* @param {number} index - The instance index.
|
|
228
|
+
* @param {Mesh} object - The target object that is used to store the method's result.
|
|
229
|
+
*/
|
|
136
230
|
getMorphAt( index, object ) {
|
|
137
231
|
|
|
138
232
|
const objectInfluences = object.morphTargetInfluences;
|
|
@@ -203,6 +297,13 @@ class InstancedMesh extends Mesh {
|
|
|
203
297
|
|
|
204
298
|
}
|
|
205
299
|
|
|
300
|
+
/**
|
|
301
|
+
* Sets the given color to the defined instance. Make sure you set the `needsUpdate` flag of
|
|
302
|
+
* {@link InstancedMesh#instanceColor} to `true` after updating all the colors.
|
|
303
|
+
*
|
|
304
|
+
* @param {number} index - The instance index.
|
|
305
|
+
* @param {Color} color - The instance color.
|
|
306
|
+
*/
|
|
206
307
|
setColorAt( index, color ) {
|
|
207
308
|
|
|
208
309
|
if ( this.instanceColor === null ) {
|
|
@@ -215,12 +316,27 @@ class InstancedMesh extends Mesh {
|
|
|
215
316
|
|
|
216
317
|
}
|
|
217
318
|
|
|
319
|
+
/**
|
|
320
|
+
* Sets the given local transformation matrix to the defined instance. Make sure you set the `needsUpdate` flag of
|
|
321
|
+
* {@link InstancedMesh#instanceMatrix} to `true` after updating all the colors.
|
|
322
|
+
*
|
|
323
|
+
* @param {number} index - The instance index.
|
|
324
|
+
* @param {Matrix4} matrix - The the local transformation.
|
|
325
|
+
*/
|
|
218
326
|
setMatrixAt( index, matrix ) {
|
|
219
327
|
|
|
220
328
|
matrix.toArray( this.instanceMatrix.array, index * 16 );
|
|
221
329
|
|
|
222
330
|
}
|
|
223
331
|
|
|
332
|
+
/**
|
|
333
|
+
* Sets the morph target weights to the defined instance. Make sure you set the `needsUpdate` flag of
|
|
334
|
+
* {@link InstancedMesh#morphTexture} to `true` after updating all the influences.
|
|
335
|
+
*
|
|
336
|
+
* @param {number} index - The instance index.
|
|
337
|
+
* @param {Mesh} object - A mesh which `morphTargetInfluences` property containing the morph target weights
|
|
338
|
+
* of a single instance.
|
|
339
|
+
*/
|
|
224
340
|
setMorphAt( index, object ) {
|
|
225
341
|
|
|
226
342
|
const objectInfluences = object.morphTargetInfluences;
|
|
@@ -257,6 +373,10 @@ class InstancedMesh extends Mesh {
|
|
|
257
373
|
|
|
258
374
|
}
|
|
259
375
|
|
|
376
|
+
/**
|
|
377
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
378
|
+
* method whenever this instance is no longer used in your app.
|
|
379
|
+
*/
|
|
260
380
|
dispose() {
|
|
261
381
|
|
|
262
382
|
this.dispatchEvent( { type: 'dispose' } );
|
|
@@ -268,8 +388,6 @@ class InstancedMesh extends Mesh {
|
|
|
268
388
|
|
|
269
389
|
}
|
|
270
390
|
|
|
271
|
-
return this;
|
|
272
|
-
|
|
273
391
|
}
|
|
274
392
|
|
|
275
393
|
}
|
package/src/objects/LOD.js
CHANGED
|
@@ -4,26 +4,82 @@ import { Object3D } from '../core/Object3D.js';
|
|
|
4
4
|
const _v1 = /*@__PURE__*/ new Vector3();
|
|
5
5
|
const _v2 = /*@__PURE__*/ new Vector3();
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* A component for providing a basic Level of Detail (LOD) mechanism.
|
|
9
|
+
*
|
|
10
|
+
* Every LOD level is associated with an object, and rendering can be switched
|
|
11
|
+
* between them at the distances specified. Typically you would create, say,
|
|
12
|
+
* three meshes, one for far away (low detail), one for mid range (medium
|
|
13
|
+
* detail) and one for close up (high detail).
|
|
14
|
+
*
|
|
15
|
+
* ```js
|
|
16
|
+
* const lod = new THREE.LOD();
|
|
17
|
+
* const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
|
|
18
|
+
*
|
|
19
|
+
* //Create spheres with 3 levels of detail and create new LOD levels for them
|
|
20
|
+
* for( let i = 0; i < 3; i++ ) {
|
|
21
|
+
*
|
|
22
|
+
* const geometry = new THREE.IcosahedronGeometry( 10, 3 - i );
|
|
23
|
+
* const mesh = new THREE.Mesh( geometry, material );
|
|
24
|
+
* lod.addLevel( mesh, i * 75 );
|
|
25
|
+
*
|
|
26
|
+
* }
|
|
27
|
+
*
|
|
28
|
+
* scene.add( lod );
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @augments Object3D
|
|
32
|
+
*/
|
|
7
33
|
class LOD extends Object3D {
|
|
8
34
|
|
|
35
|
+
/**
|
|
36
|
+
* Constructs a new LOD.
|
|
37
|
+
*/
|
|
9
38
|
constructor() {
|
|
10
39
|
|
|
11
40
|
super();
|
|
12
41
|
|
|
42
|
+
/**
|
|
43
|
+
* This flag can be used for type testing.
|
|
44
|
+
*
|
|
45
|
+
* @type {boolean}
|
|
46
|
+
* @readonly
|
|
47
|
+
* @default true
|
|
48
|
+
*/
|
|
49
|
+
this.isLOD = true;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The current LOD index.
|
|
53
|
+
*
|
|
54
|
+
* @private
|
|
55
|
+
* @type {number}
|
|
56
|
+
* @default 0
|
|
57
|
+
*/
|
|
13
58
|
this._currentLevel = 0;
|
|
14
59
|
|
|
15
60
|
this.type = 'LOD';
|
|
16
61
|
|
|
17
62
|
Object.defineProperties( this, {
|
|
63
|
+
/**
|
|
64
|
+
* This array holds the LOD levels.
|
|
65
|
+
*
|
|
66
|
+
* @name LOD#levels
|
|
67
|
+
* @type {Array<{object:Object3D,distance:number,hysteresis:number}>}
|
|
68
|
+
*/
|
|
18
69
|
levels: {
|
|
19
70
|
enumerable: true,
|
|
20
71
|
value: []
|
|
21
|
-
},
|
|
22
|
-
isLOD: {
|
|
23
|
-
value: true,
|
|
24
72
|
}
|
|
25
73
|
} );
|
|
26
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Whether the LOD object is updated automatically by the renderer per frame
|
|
77
|
+
* or not. If set to `false`, you have to call {@link LOD#update} in the
|
|
78
|
+
* render loop by yourself.
|
|
79
|
+
*
|
|
80
|
+
* @type {boolean}
|
|
81
|
+
* @default true
|
|
82
|
+
*/
|
|
27
83
|
this.autoUpdate = true;
|
|
28
84
|
|
|
29
85
|
}
|
|
@@ -48,6 +104,15 @@ class LOD extends Object3D {
|
|
|
48
104
|
|
|
49
105
|
}
|
|
50
106
|
|
|
107
|
+
/**
|
|
108
|
+
* Adds a mesh that will display at a certain distance and greater. Typically
|
|
109
|
+
* the further away the distance, the lower the detail on the mesh.
|
|
110
|
+
*
|
|
111
|
+
* @param {Object3D} object - The 3D object to display at this level.
|
|
112
|
+
* @param {number} [distance=0] - The distance at which to display this level of detail.
|
|
113
|
+
* @param {number} [hysteresis=0] - Threshold used to avoid flickering at LOD boundaries, as a fraction of distance.
|
|
114
|
+
* @return {LOD} A reference to this instance.
|
|
115
|
+
*/
|
|
51
116
|
addLevel( object, distance = 0, hysteresis = 0 ) {
|
|
52
117
|
|
|
53
118
|
distance = Math.abs( distance );
|
|
@@ -74,14 +139,52 @@ class LOD extends Object3D {
|
|
|
74
139
|
|
|
75
140
|
}
|
|
76
141
|
|
|
77
|
-
|
|
142
|
+
/**
|
|
143
|
+
* Removes an existing level, based on the distance from the camera.
|
|
144
|
+
* Returns `true` when the level has been removed. Otherwise `false`.
|
|
145
|
+
*
|
|
146
|
+
* @param {number} distance - Distance of the level to remove.
|
|
147
|
+
* @return {boolean} Whether the level has been removed or not.
|
|
148
|
+
*/
|
|
149
|
+
removeLevel( distance ) {
|
|
78
150
|
|
|
79
|
-
|
|
151
|
+
const levels = this.levels;
|
|
152
|
+
|
|
153
|
+
for ( let i = 0; i < levels.length; i ++ ) {
|
|
154
|
+
|
|
155
|
+
if ( levels[ i ].distance === distance ) {
|
|
156
|
+
|
|
157
|
+
const removedElements = levels.splice( i, 1 );
|
|
158
|
+
this.remove( removedElements[ 0 ].object );
|
|
159
|
+
|
|
160
|
+
return true;
|
|
161
|
+
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return false;
|
|
80
167
|
|
|
81
168
|
}
|
|
82
169
|
|
|
170
|
+
/**
|
|
171
|
+
* Returns the currently active LOD level index.
|
|
172
|
+
*
|
|
173
|
+
* @return {number} The current active LOD level index.
|
|
174
|
+
*/
|
|
175
|
+
getCurrentLevel() {
|
|
176
|
+
|
|
177
|
+
return this._currentLevel;
|
|
83
178
|
|
|
179
|
+
}
|
|
84
180
|
|
|
181
|
+
/**
|
|
182
|
+
* Returns a reference to the first 3D object that is greater than
|
|
183
|
+
* the given distance.
|
|
184
|
+
*
|
|
185
|
+
* @param {number} distance - The LOD distance.
|
|
186
|
+
* @return {Object3D|null} The found 3D object. `null` if no 3D object has been found.
|
|
187
|
+
*/
|
|
85
188
|
getObjectForDistance( distance ) {
|
|
86
189
|
|
|
87
190
|
const levels = this.levels;
|
|
@@ -116,6 +219,12 @@ class LOD extends Object3D {
|
|
|
116
219
|
|
|
117
220
|
}
|
|
118
221
|
|
|
222
|
+
/**
|
|
223
|
+
* Computes intersection points between a casted ray and this LOD.
|
|
224
|
+
*
|
|
225
|
+
* @param {Raycaster} raycaster - The raycaster.
|
|
226
|
+
* @param {Array<Object>} intersects - The target array that holds the intersection points.
|
|
227
|
+
*/
|
|
119
228
|
raycast( raycaster, intersects ) {
|
|
120
229
|
|
|
121
230
|
const levels = this.levels;
|
|
@@ -132,6 +241,12 @@ class LOD extends Object3D {
|
|
|
132
241
|
|
|
133
242
|
}
|
|
134
243
|
|
|
244
|
+
/**
|
|
245
|
+
* Updates the LOD by computing which LOD level should be visible according
|
|
246
|
+
* to the current distance of the given camera.
|
|
247
|
+
*
|
|
248
|
+
* @param {Camera} camera - The camera the scene is renderd with.
|
|
249
|
+
*/
|
|
135
250
|
update( camera ) {
|
|
136
251
|
|
|
137
252
|
const levels = this.levels;
|
package/src/objects/Line.js
CHANGED
|
@@ -17,19 +17,84 @@ const _sphere = /*@__PURE__*/ new Sphere();
|
|
|
17
17
|
const _intersectPointOnRay = /*@__PURE__*/ new Vector3();
|
|
18
18
|
const _intersectPointOnSegment = /*@__PURE__*/ new Vector3();
|
|
19
19
|
|
|
20
|
+
/**
|
|
21
|
+
* A continuous line. The line are rendered by connecting consecutive
|
|
22
|
+
* vertices with straight lines.
|
|
23
|
+
*
|
|
24
|
+
* ```js
|
|
25
|
+
* const material = new THREE.LineBasicMaterial( { color: 0x0000ff } );
|
|
26
|
+
*
|
|
27
|
+
* const points = [];
|
|
28
|
+
* points.push( new THREE.Vector3( - 10, 0, 0 ) );
|
|
29
|
+
* points.push( new THREE.Vector3( 0, 10, 0 ) );
|
|
30
|
+
* points.push( new THREE.Vector3( 10, 0, 0 ) );
|
|
31
|
+
*
|
|
32
|
+
* const geometry = new THREE.BufferGeometry().setFromPoints( points );
|
|
33
|
+
*
|
|
34
|
+
* const line = new THREE.Line( geometry, material );
|
|
35
|
+
* scene.add( line );
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @augments Object3D
|
|
39
|
+
*/
|
|
20
40
|
class Line extends Object3D {
|
|
21
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Constructs a new line.
|
|
44
|
+
*
|
|
45
|
+
* @param {BufferGeometry} [geometry] - The line geometry.
|
|
46
|
+
* @param {Material|Array<Material>} [material] - The line material.
|
|
47
|
+
*/
|
|
22
48
|
constructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {
|
|
23
49
|
|
|
24
50
|
super();
|
|
25
51
|
|
|
52
|
+
/**
|
|
53
|
+
* This flag can be used for type testing.
|
|
54
|
+
*
|
|
55
|
+
* @type {boolean}
|
|
56
|
+
* @readonly
|
|
57
|
+
* @default true
|
|
58
|
+
*/
|
|
26
59
|
this.isLine = true;
|
|
27
60
|
|
|
28
61
|
this.type = 'Line';
|
|
29
62
|
|
|
63
|
+
/**
|
|
64
|
+
* The line geometry.
|
|
65
|
+
*
|
|
66
|
+
* @type {BufferGeometry}
|
|
67
|
+
*/
|
|
30
68
|
this.geometry = geometry;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* The line material.
|
|
72
|
+
*
|
|
73
|
+
* @type {Material|Array<Material>}
|
|
74
|
+
* @default LineBasicMaterial
|
|
75
|
+
*/
|
|
31
76
|
this.material = material;
|
|
32
77
|
|
|
78
|
+
/**
|
|
79
|
+
* A dictionary representing the morph targets in the geometry. The key is the
|
|
80
|
+
* morph targets name, the value its attribute index. This member is `undefined`
|
|
81
|
+
* by default and only set when morph targets are detected in the geometry.
|
|
82
|
+
*
|
|
83
|
+
* @type {Object<String,number>|undefined}
|
|
84
|
+
* @default undefined
|
|
85
|
+
*/
|
|
86
|
+
this.morphTargetDictionary = undefined;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* An array of weights typically in the range `[0,1]` that specify how much of the morph
|
|
90
|
+
* is applied. This member is `undefined` by default and only set when morph targets are
|
|
91
|
+
* detected in the geometry.
|
|
92
|
+
*
|
|
93
|
+
* @type {Array<number>|undefined}
|
|
94
|
+
* @default undefined
|
|
95
|
+
*/
|
|
96
|
+
this.morphTargetInfluences = undefined;
|
|
97
|
+
|
|
33
98
|
this.updateMorphTargets();
|
|
34
99
|
|
|
35
100
|
}
|
|
@@ -45,6 +110,13 @@ class Line extends Object3D {
|
|
|
45
110
|
|
|
46
111
|
}
|
|
47
112
|
|
|
113
|
+
/**
|
|
114
|
+
* Computes an array of distance values which are necessary for rendering dashed lines.
|
|
115
|
+
* For each vertex in the geometry, the method calculates the cumulative length from the
|
|
116
|
+
* current point to the very beginning of the line.
|
|
117
|
+
*
|
|
118
|
+
* @return {Line} A reference to this line.
|
|
119
|
+
*/
|
|
48
120
|
computeLineDistances() {
|
|
49
121
|
|
|
50
122
|
const geometry = this.geometry;
|
|
@@ -78,6 +150,12 @@ class Line extends Object3D {
|
|
|
78
150
|
|
|
79
151
|
}
|
|
80
152
|
|
|
153
|
+
/**
|
|
154
|
+
* Computes intersection points between a casted ray and this line.
|
|
155
|
+
*
|
|
156
|
+
* @param {Raycaster} raycaster - The raycaster.
|
|
157
|
+
* @param {Array<Object>} intersects - The target array that holds the intersection points.
|
|
158
|
+
*/
|
|
81
159
|
raycast( raycaster, intersects ) {
|
|
82
160
|
|
|
83
161
|
const geometry = this.geometry;
|
|
@@ -119,7 +197,7 @@ class Line extends Object3D {
|
|
|
119
197
|
const a = index.getX( i );
|
|
120
198
|
const b = index.getX( i + 1 );
|
|
121
199
|
|
|
122
|
-
const intersect = checkIntersection( this, raycaster, _ray, localThresholdSq, a, b );
|
|
200
|
+
const intersect = checkIntersection( this, raycaster, _ray, localThresholdSq, a, b, i );
|
|
123
201
|
|
|
124
202
|
if ( intersect ) {
|
|
125
203
|
|
|
@@ -134,7 +212,7 @@ class Line extends Object3D {
|
|
|
134
212
|
const a = index.getX( end - 1 );
|
|
135
213
|
const b = index.getX( start );
|
|
136
214
|
|
|
137
|
-
const intersect = checkIntersection( this, raycaster, _ray, localThresholdSq, a, b );
|
|
215
|
+
const intersect = checkIntersection( this, raycaster, _ray, localThresholdSq, a, b, end - 1 );
|
|
138
216
|
|
|
139
217
|
if ( intersect ) {
|
|
140
218
|
|
|
@@ -151,7 +229,7 @@ class Line extends Object3D {
|
|
|
151
229
|
|
|
152
230
|
for ( let i = start, l = end - 1; i < l; i += step ) {
|
|
153
231
|
|
|
154
|
-
const intersect = checkIntersection( this, raycaster, _ray, localThresholdSq, i, i + 1 );
|
|
232
|
+
const intersect = checkIntersection( this, raycaster, _ray, localThresholdSq, i, i + 1, i );
|
|
155
233
|
|
|
156
234
|
if ( intersect ) {
|
|
157
235
|
|
|
@@ -163,7 +241,7 @@ class Line extends Object3D {
|
|
|
163
241
|
|
|
164
242
|
if ( this.isLineLoop ) {
|
|
165
243
|
|
|
166
|
-
const intersect = checkIntersection( this, raycaster, _ray, localThresholdSq, end - 1, start );
|
|
244
|
+
const intersect = checkIntersection( this, raycaster, _ray, localThresholdSq, end - 1, start, end - 1 );
|
|
167
245
|
|
|
168
246
|
if ( intersect ) {
|
|
169
247
|
|
|
@@ -177,6 +255,10 @@ class Line extends Object3D {
|
|
|
177
255
|
|
|
178
256
|
}
|
|
179
257
|
|
|
258
|
+
/**
|
|
259
|
+
* Sets the values of {@link Line#morphTargetDictionary} and {@link Line#morphTargetInfluences}
|
|
260
|
+
* to make sure existing morph targets can influence this 3D object.
|
|
261
|
+
*/
|
|
180
262
|
updateMorphTargets() {
|
|
181
263
|
|
|
182
264
|
const geometry = this.geometry;
|
|
@@ -210,7 +292,7 @@ class Line extends Object3D {
|
|
|
210
292
|
|
|
211
293
|
}
|
|
212
294
|
|
|
213
|
-
function checkIntersection( object, raycaster, ray, thresholdSq, a, b ) {
|
|
295
|
+
function checkIntersection( object, raycaster, ray, thresholdSq, a, b, i ) {
|
|
214
296
|
|
|
215
297
|
const positionAttribute = object.geometry.attributes.position;
|
|
216
298
|
|
|
@@ -233,9 +315,10 @@ function checkIntersection( object, raycaster, ray, thresholdSq, a, b ) {
|
|
|
233
315
|
// What do we want? intersection point on the ray or on the segment??
|
|
234
316
|
// point: raycaster.ray.at( distance ),
|
|
235
317
|
point: _intersectPointOnSegment.clone().applyMatrix4( object.matrixWorld ),
|
|
236
|
-
index:
|
|
318
|
+
index: i,
|
|
237
319
|
face: null,
|
|
238
320
|
faceIndex: null,
|
|
321
|
+
barycoord: null,
|
|
239
322
|
object: object
|
|
240
323
|
|
|
241
324
|
};
|