@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/LineLoop.js
CHANGED
|
@@ -1,11 +1,31 @@
|
|
|
1
1
|
import { Line } from './Line.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* A continuous line. This is nearly the same as {@link Line} the only difference
|
|
5
|
+
* is that the last vertex is connected with the first vertex in order to close
|
|
6
|
+
* the line to form a loop.
|
|
7
|
+
*
|
|
8
|
+
* @augments Line
|
|
9
|
+
*/
|
|
3
10
|
class LineLoop extends Line {
|
|
4
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new line loop.
|
|
14
|
+
*
|
|
15
|
+
* @param {BufferGeometry} [geometry] - The line geometry.
|
|
16
|
+
* @param {Material|Array<Material>} [material] - The line material.
|
|
17
|
+
*/
|
|
5
18
|
constructor( geometry, material ) {
|
|
6
19
|
|
|
7
20
|
super( geometry, material );
|
|
8
21
|
|
|
22
|
+
/**
|
|
23
|
+
* This flag can be used for type testing.
|
|
24
|
+
*
|
|
25
|
+
* @type {boolean}
|
|
26
|
+
* @readonly
|
|
27
|
+
* @default true
|
|
28
|
+
*/
|
|
9
29
|
this.isLineLoop = true;
|
|
10
30
|
|
|
11
31
|
this.type = 'LineLoop';
|
|
@@ -5,12 +5,30 @@ import { Float32BufferAttribute } from '../core/BufferAttribute.js';
|
|
|
5
5
|
const _start = /*@__PURE__*/ new Vector3();
|
|
6
6
|
const _end = /*@__PURE__*/ new Vector3();
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* A series of lines drawn between pairs of vertices.
|
|
10
|
+
*
|
|
11
|
+
* @augments Line
|
|
12
|
+
*/
|
|
8
13
|
class LineSegments extends Line {
|
|
9
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Constructs a new line segments.
|
|
17
|
+
*
|
|
18
|
+
* @param {BufferGeometry} [geometry] - The line geometry.
|
|
19
|
+
* @param {Material|Array<Material>} [material] - The line material.
|
|
20
|
+
*/
|
|
10
21
|
constructor( geometry, material ) {
|
|
11
22
|
|
|
12
23
|
super( geometry, material );
|
|
13
24
|
|
|
25
|
+
/**
|
|
26
|
+
* This flag can be used for type testing.
|
|
27
|
+
*
|
|
28
|
+
* @type {boolean}
|
|
29
|
+
* @readonly
|
|
30
|
+
* @default true
|
|
31
|
+
*/
|
|
14
32
|
this.isLineSegments = true;
|
|
15
33
|
|
|
16
34
|
this.type = 'LineSegments';
|
package/src/objects/Mesh.js
CHANGED
|
@@ -21,30 +21,79 @@ const _vC = /*@__PURE__*/ new Vector3();
|
|
|
21
21
|
const _tempA = /*@__PURE__*/ new Vector3();
|
|
22
22
|
const _morphA = /*@__PURE__*/ new Vector3();
|
|
23
23
|
|
|
24
|
-
const _uvA = /*@__PURE__*/ new Vector2();
|
|
25
|
-
const _uvB = /*@__PURE__*/ new Vector2();
|
|
26
|
-
const _uvC = /*@__PURE__*/ new Vector2();
|
|
27
|
-
|
|
28
|
-
const _normalA = /*@__PURE__*/ new Vector3();
|
|
29
|
-
const _normalB = /*@__PURE__*/ new Vector3();
|
|
30
|
-
const _normalC = /*@__PURE__*/ new Vector3();
|
|
31
|
-
|
|
32
24
|
const _intersectionPoint = /*@__PURE__*/ new Vector3();
|
|
33
25
|
const _intersectionPointWorld = /*@__PURE__*/ new Vector3();
|
|
34
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Class representing triangular polygon mesh based objects.
|
|
29
|
+
*
|
|
30
|
+
* ```js
|
|
31
|
+
* const geometry = new THREE.BoxGeometry( 1, 1, 1 );
|
|
32
|
+
* const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
|
|
33
|
+
* const mesh = new THREE.Mesh( geometry, material );
|
|
34
|
+
* scene.add( mesh );
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @augments Object3D
|
|
38
|
+
*/
|
|
35
39
|
class Mesh extends Object3D {
|
|
36
40
|
|
|
41
|
+
/**
|
|
42
|
+
* Constructs a new mesh.
|
|
43
|
+
*
|
|
44
|
+
* @param {BufferGeometry} [geometry] - The mesh geometry.
|
|
45
|
+
* @param {Material|Array<Material>} [material] - The mesh material.
|
|
46
|
+
*/
|
|
37
47
|
constructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {
|
|
38
48
|
|
|
39
49
|
super();
|
|
40
50
|
|
|
51
|
+
/**
|
|
52
|
+
* This flag can be used for type testing.
|
|
53
|
+
*
|
|
54
|
+
* @type {boolean}
|
|
55
|
+
* @readonly
|
|
56
|
+
* @default true
|
|
57
|
+
*/
|
|
41
58
|
this.isMesh = true;
|
|
42
59
|
|
|
43
60
|
this.type = 'Mesh';
|
|
44
61
|
|
|
62
|
+
/**
|
|
63
|
+
* The mesh geometry.
|
|
64
|
+
*
|
|
65
|
+
* @type {BufferGeometry}
|
|
66
|
+
*/
|
|
45
67
|
this.geometry = geometry;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* The mesh material.
|
|
71
|
+
*
|
|
72
|
+
* @type {Material|Array<Material>}
|
|
73
|
+
* @default MeshBasicMaterial
|
|
74
|
+
*/
|
|
46
75
|
this.material = material;
|
|
47
76
|
|
|
77
|
+
/**
|
|
78
|
+
* A dictionary representing the morph targets in the geometry. The key is the
|
|
79
|
+
* morph targets name, the value its attribute index. This member is `undefined`
|
|
80
|
+
* by default and only set when morph targets are detected in the geometry.
|
|
81
|
+
*
|
|
82
|
+
* @type {Object<String,number>|undefined}
|
|
83
|
+
* @default undefined
|
|
84
|
+
*/
|
|
85
|
+
this.morphTargetDictionary = undefined;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* An array of weights typically in the range `[0,1]` that specify how much of the morph
|
|
89
|
+
* is applied. This member is `undefined` by default and only set when morph targets are
|
|
90
|
+
* detected in the geometry.
|
|
91
|
+
*
|
|
92
|
+
* @type {Array<number>|undefined}
|
|
93
|
+
* @default undefined
|
|
94
|
+
*/
|
|
95
|
+
this.morphTargetInfluences = undefined;
|
|
96
|
+
|
|
48
97
|
this.updateMorphTargets();
|
|
49
98
|
|
|
50
99
|
}
|
|
@@ -72,6 +121,10 @@ class Mesh extends Object3D {
|
|
|
72
121
|
|
|
73
122
|
}
|
|
74
123
|
|
|
124
|
+
/**
|
|
125
|
+
* Sets the values of {@link Mesh#morphTargetDictionary} and {@link Mesh#morphTargetInfluences}
|
|
126
|
+
* to make sure existing morph targets can influence this 3D object.
|
|
127
|
+
*/
|
|
75
128
|
updateMorphTargets() {
|
|
76
129
|
|
|
77
130
|
const geometry = this.geometry;
|
|
@@ -103,6 +156,14 @@ class Mesh extends Object3D {
|
|
|
103
156
|
|
|
104
157
|
}
|
|
105
158
|
|
|
159
|
+
/**
|
|
160
|
+
* Returns the local-space position of the vertex at the given index, taking into
|
|
161
|
+
* account the current animation state of both morph targets and skinning.
|
|
162
|
+
*
|
|
163
|
+
* @param {number} index - The vertex index.
|
|
164
|
+
* @param {Vector3} target - The target object that is used to store the method's result.
|
|
165
|
+
* @return {Vector3} The vertex position in local space.
|
|
166
|
+
*/
|
|
106
167
|
getVertexPosition( index, target ) {
|
|
107
168
|
|
|
108
169
|
const geometry = this.geometry;
|
|
@@ -147,6 +208,12 @@ class Mesh extends Object3D {
|
|
|
147
208
|
|
|
148
209
|
}
|
|
149
210
|
|
|
211
|
+
/**
|
|
212
|
+
* Computes intersection points between a casted ray and this line.
|
|
213
|
+
*
|
|
214
|
+
* @param {Raycaster} raycaster - The raycaster.
|
|
215
|
+
* @param {Array<Object>} intersects - The target array that holds the intersection points.
|
|
216
|
+
*/
|
|
150
217
|
raycast( raycaster, intersects ) {
|
|
151
218
|
|
|
152
219
|
const geometry = this.geometry;
|
|
@@ -371,33 +438,24 @@ function checkGeometryIntersection( object, material, raycaster, ray, uv, uv1, n
|
|
|
371
438
|
|
|
372
439
|
if ( intersection ) {
|
|
373
440
|
|
|
374
|
-
|
|
441
|
+
const barycoord = new Vector3();
|
|
442
|
+
Triangle.getBarycoord( _intersectionPoint, _vA, _vB, _vC, barycoord );
|
|
375
443
|
|
|
376
|
-
|
|
377
|
-
_uvB.fromBufferAttribute( uv, b );
|
|
378
|
-
_uvC.fromBufferAttribute( uv, c );
|
|
444
|
+
if ( uv ) {
|
|
379
445
|
|
|
380
|
-
intersection.uv = Triangle.
|
|
446
|
+
intersection.uv = Triangle.getInterpolatedAttribute( uv, a, b, c, barycoord, new Vector2() );
|
|
381
447
|
|
|
382
448
|
}
|
|
383
449
|
|
|
384
450
|
if ( uv1 ) {
|
|
385
451
|
|
|
386
|
-
|
|
387
|
-
_uvB.fromBufferAttribute( uv1, b );
|
|
388
|
-
_uvC.fromBufferAttribute( uv1, c );
|
|
389
|
-
|
|
390
|
-
intersection.uv1 = Triangle.getInterpolation( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );
|
|
452
|
+
intersection.uv1 = Triangle.getInterpolatedAttribute( uv1, a, b, c, barycoord, new Vector2() );
|
|
391
453
|
|
|
392
454
|
}
|
|
393
455
|
|
|
394
456
|
if ( normal ) {
|
|
395
457
|
|
|
396
|
-
|
|
397
|
-
_normalB.fromBufferAttribute( normal, b );
|
|
398
|
-
_normalC.fromBufferAttribute( normal, c );
|
|
399
|
-
|
|
400
|
-
intersection.normal = Triangle.getInterpolation( _intersectionPoint, _vA, _vB, _vC, _normalA, _normalB, _normalC, new Vector3() );
|
|
458
|
+
intersection.normal = Triangle.getInterpolatedAttribute( normal, a, b, c, barycoord, new Vector3() );
|
|
401
459
|
|
|
402
460
|
if ( intersection.normal.dot( ray.direction ) > 0 ) {
|
|
403
461
|
|
|
@@ -418,6 +476,7 @@ function checkGeometryIntersection( object, material, raycaster, ray, uv, uv1, n
|
|
|
418
476
|
Triangle.getNormal( _vA, _vB, _vC, face.normal );
|
|
419
477
|
|
|
420
478
|
intersection.face = face;
|
|
479
|
+
intersection.barycoord = barycoord;
|
|
421
480
|
|
|
422
481
|
}
|
|
423
482
|
|
package/src/objects/Points.js
CHANGED
|
@@ -11,19 +11,69 @@ const _ray = /*@__PURE__*/ new Ray();
|
|
|
11
11
|
const _sphere = /*@__PURE__*/ new Sphere();
|
|
12
12
|
const _position = /*@__PURE__*/ new Vector3();
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
* A class for displaying points or point clouds.
|
|
16
|
+
*
|
|
17
|
+
* @augments Object3D
|
|
18
|
+
*/
|
|
14
19
|
class Points extends Object3D {
|
|
15
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Constructs a new point cloud.
|
|
23
|
+
*
|
|
24
|
+
* @param {BufferGeometry} [geometry] - The points geometry.
|
|
25
|
+
* @param {Material|Array<Material>} [material] - The points material.
|
|
26
|
+
*/
|
|
16
27
|
constructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {
|
|
17
28
|
|
|
18
29
|
super();
|
|
19
30
|
|
|
31
|
+
/**
|
|
32
|
+
* This flag can be used for type testing.
|
|
33
|
+
*
|
|
34
|
+
* @type {boolean}
|
|
35
|
+
* @readonly
|
|
36
|
+
* @default true
|
|
37
|
+
*/
|
|
20
38
|
this.isPoints = true;
|
|
21
39
|
|
|
22
40
|
this.type = 'Points';
|
|
23
41
|
|
|
42
|
+
/**
|
|
43
|
+
* The points geometry.
|
|
44
|
+
*
|
|
45
|
+
* @type {BufferGeometry}
|
|
46
|
+
*/
|
|
24
47
|
this.geometry = geometry;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The line material.
|
|
51
|
+
*
|
|
52
|
+
* @type {Material|Array<Material>}
|
|
53
|
+
* @default PointsMaterial
|
|
54
|
+
*/
|
|
25
55
|
this.material = material;
|
|
26
56
|
|
|
57
|
+
/**
|
|
58
|
+
* A dictionary representing the morph targets in the geometry. The key is the
|
|
59
|
+
* morph targets name, the value its attribute index. This member is `undefined`
|
|
60
|
+
* by default and only set when morph targets are detected in the geometry.
|
|
61
|
+
*
|
|
62
|
+
* @type {Object<String,number>|undefined}
|
|
63
|
+
* @default undefined
|
|
64
|
+
*/
|
|
65
|
+
this.morphTargetDictionary = undefined;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* An array of weights typically in the range `[0,1]` that specify how much of the morph
|
|
69
|
+
* is applied. This member is `undefined` by default and only set when morph targets are
|
|
70
|
+
* detected in the geometry.
|
|
71
|
+
*
|
|
72
|
+
* @type {Array<number>|undefined}
|
|
73
|
+
* @default undefined
|
|
74
|
+
*/
|
|
75
|
+
this.morphTargetInfluences = undefined;
|
|
76
|
+
|
|
27
77
|
this.updateMorphTargets();
|
|
28
78
|
|
|
29
79
|
}
|
|
@@ -39,6 +89,12 @@ class Points extends Object3D {
|
|
|
39
89
|
|
|
40
90
|
}
|
|
41
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Computes intersection points between a casted ray and this point cloud.
|
|
94
|
+
*
|
|
95
|
+
* @param {Raycaster} raycaster - The raycaster.
|
|
96
|
+
* @param {Array<Object>} intersects - The target array that holds the intersection points.
|
|
97
|
+
*/
|
|
42
98
|
raycast( raycaster, intersects ) {
|
|
43
99
|
|
|
44
100
|
const geometry = this.geometry;
|
|
@@ -100,6 +156,10 @@ class Points extends Object3D {
|
|
|
100
156
|
|
|
101
157
|
}
|
|
102
158
|
|
|
159
|
+
/**
|
|
160
|
+
* Sets the values of {@link Points#morphTargetDictionary} and {@link Points#morphTargetInfluences}
|
|
161
|
+
* to make sure existing morph targets can influence this 3D object.
|
|
162
|
+
*/
|
|
103
163
|
updateMorphTargets() {
|
|
104
164
|
|
|
105
165
|
const geometry = this.geometry;
|
|
@@ -155,6 +215,8 @@ function testPoint( point, index, localThresholdSq, matrixWorld, raycaster, inte
|
|
|
155
215
|
point: intersectPoint,
|
|
156
216
|
index: index,
|
|
157
217
|
face: null,
|
|
218
|
+
faceIndex: null,
|
|
219
|
+
barycoord: null,
|
|
158
220
|
object: object
|
|
159
221
|
|
|
160
222
|
} );
|
package/src/objects/Skeleton.js
CHANGED
|
@@ -5,27 +5,88 @@ import {
|
|
|
5
5
|
import { Bone } from './Bone.js';
|
|
6
6
|
import { Matrix4 } from '../math/Matrix4.js';
|
|
7
7
|
import { DataTexture } from '../textures/DataTexture.js';
|
|
8
|
-
import
|
|
8
|
+
import { generateUUID } from '../math/MathUtils.js';
|
|
9
9
|
|
|
10
10
|
const _offsetMatrix = /*@__PURE__*/ new Matrix4();
|
|
11
11
|
const _identityMatrix = /*@__PURE__*/ new Matrix4();
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Class for representing the armatures in `three.js`. The skeleton
|
|
15
|
+
* is defined by a hierarchy of bones.
|
|
16
|
+
*
|
|
17
|
+
* ```js
|
|
18
|
+
* const bones = [];
|
|
19
|
+
*
|
|
20
|
+
* const shoulder = new THREE.Bone();
|
|
21
|
+
* const elbow = new THREE.Bone();
|
|
22
|
+
* const hand = new THREE.Bone();
|
|
23
|
+
*
|
|
24
|
+
* shoulder.add( elbow );
|
|
25
|
+
* elbow.add( hand );
|
|
26
|
+
*
|
|
27
|
+
* bones.push( shoulder , elbow, hand);
|
|
28
|
+
*
|
|
29
|
+
* shoulder.position.y = -5;
|
|
30
|
+
* elbow.position.y = 0;
|
|
31
|
+
* hand.position.y = 5;
|
|
32
|
+
*
|
|
33
|
+
* const armSkeleton = new THREE.Skeleton( bones );
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
13
36
|
class Skeleton {
|
|
14
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Constructs a new skeleton.
|
|
40
|
+
*
|
|
41
|
+
* @param {Array<Bone>} [bones] - An array of bones.
|
|
42
|
+
* @param {Array<Matrix4>} [boneInverses] - An array of bone inverse matrices.
|
|
43
|
+
* If not provided, these matrices will be computed automatically via {@link Skeleton#calculateInverses}.
|
|
44
|
+
*/
|
|
15
45
|
constructor( bones = [], boneInverses = [] ) {
|
|
16
46
|
|
|
17
|
-
this.uuid =
|
|
47
|
+
this.uuid = generateUUID();
|
|
18
48
|
|
|
49
|
+
/**
|
|
50
|
+
* An array of bones defining the skeleton.
|
|
51
|
+
*
|
|
52
|
+
* @type {Array<Bone>}
|
|
53
|
+
*/
|
|
19
54
|
this.bones = bones.slice( 0 );
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* An array of bone inverse matrices.
|
|
58
|
+
*
|
|
59
|
+
* @type {Array<Matrix4>}
|
|
60
|
+
*/
|
|
20
61
|
this.boneInverses = boneInverses;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* An array buffer holding the bone data.
|
|
65
|
+
* Input data for {@link Skeleton#boneTexture}.
|
|
66
|
+
*
|
|
67
|
+
* @type {?Float32Array}
|
|
68
|
+
* @default null
|
|
69
|
+
*/
|
|
21
70
|
this.boneMatrices = null;
|
|
22
71
|
|
|
72
|
+
/**
|
|
73
|
+
* A texture holding the bone data for use
|
|
74
|
+
* in the vertex shader.
|
|
75
|
+
*
|
|
76
|
+
* @type {?DataTexture}
|
|
77
|
+
* @default null
|
|
78
|
+
*/
|
|
23
79
|
this.boneTexture = null;
|
|
24
80
|
|
|
25
81
|
this.init();
|
|
26
82
|
|
|
27
83
|
}
|
|
28
84
|
|
|
85
|
+
/**
|
|
86
|
+
* Initializes the skeleton. This method gets automatically called by the constructor
|
|
87
|
+
* but depending on how the skeleton is created it might be necessary to call this method
|
|
88
|
+
* manually.
|
|
89
|
+
*/
|
|
29
90
|
init() {
|
|
30
91
|
|
|
31
92
|
const bones = this.bones;
|
|
@@ -61,6 +122,10 @@ class Skeleton {
|
|
|
61
122
|
|
|
62
123
|
}
|
|
63
124
|
|
|
125
|
+
/**
|
|
126
|
+
* Computes the bone inverse matrices. This method resets {@link Skeleton#boneInverses}
|
|
127
|
+
* and fills it with new matrices.
|
|
128
|
+
*/
|
|
64
129
|
calculateInverses() {
|
|
65
130
|
|
|
66
131
|
this.boneInverses.length = 0;
|
|
@@ -81,6 +146,9 @@ class Skeleton {
|
|
|
81
146
|
|
|
82
147
|
}
|
|
83
148
|
|
|
149
|
+
/**
|
|
150
|
+
* Resets the skeleton to the base pose.
|
|
151
|
+
*/
|
|
84
152
|
pose() {
|
|
85
153
|
|
|
86
154
|
// recover the bind-time world matrices
|
|
@@ -124,6 +192,9 @@ class Skeleton {
|
|
|
124
192
|
|
|
125
193
|
}
|
|
126
194
|
|
|
195
|
+
/**
|
|
196
|
+
* Resets the skeleton to the base pose.
|
|
197
|
+
*/
|
|
127
198
|
update() {
|
|
128
199
|
|
|
129
200
|
const bones = this.bones;
|
|
@@ -152,12 +223,22 @@ class Skeleton {
|
|
|
152
223
|
|
|
153
224
|
}
|
|
154
225
|
|
|
226
|
+
/**
|
|
227
|
+
* Returns a new skeleton with copied values from this instance.
|
|
228
|
+
*
|
|
229
|
+
* @return {Skeleton} A clone of this instance.
|
|
230
|
+
*/
|
|
155
231
|
clone() {
|
|
156
232
|
|
|
157
233
|
return new Skeleton( this.bones, this.boneInverses );
|
|
158
234
|
|
|
159
235
|
}
|
|
160
236
|
|
|
237
|
+
/**
|
|
238
|
+
* Computes a data texture for passing bone data to the vertex shader.
|
|
239
|
+
*
|
|
240
|
+
* @return {Skeleton} A reference of this instance.
|
|
241
|
+
*/
|
|
161
242
|
computeBoneTexture() {
|
|
162
243
|
|
|
163
244
|
// layout (1 matrix = 4 pixels)
|
|
@@ -184,6 +265,13 @@ class Skeleton {
|
|
|
184
265
|
|
|
185
266
|
}
|
|
186
267
|
|
|
268
|
+
/**
|
|
269
|
+
* Searches through the skeleton's bone array and returns the first with a
|
|
270
|
+
* matching name.
|
|
271
|
+
*
|
|
272
|
+
* @param {string} name - The name of the bone.
|
|
273
|
+
* @return {Bone|undefined} The found bone. `undefined` if no bone has been found.
|
|
274
|
+
*/
|
|
187
275
|
getBoneByName( name ) {
|
|
188
276
|
|
|
189
277
|
for ( let i = 0, il = this.bones.length; i < il; i ++ ) {
|
|
@@ -202,6 +290,10 @@ class Skeleton {
|
|
|
202
290
|
|
|
203
291
|
}
|
|
204
292
|
|
|
293
|
+
/**
|
|
294
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
295
|
+
* method whenever this instance is no longer used in your app.
|
|
296
|
+
*/
|
|
205
297
|
dispose( ) {
|
|
206
298
|
|
|
207
299
|
if ( this.boneTexture !== null ) {
|
|
@@ -214,6 +306,13 @@ class Skeleton {
|
|
|
214
306
|
|
|
215
307
|
}
|
|
216
308
|
|
|
309
|
+
/**
|
|
310
|
+
* Setups the skeleton by the given JSON and bones.
|
|
311
|
+
*
|
|
312
|
+
* @param {Object} json - The skeleton as serialized JSON.
|
|
313
|
+
* @param {Array<Bone>} bones - An array of bones.
|
|
314
|
+
* @return {Skeleton} A reference of this instance.
|
|
315
|
+
*/
|
|
217
316
|
fromJSON( json, bones ) {
|
|
218
317
|
|
|
219
318
|
this.uuid = json.uuid;
|
|
@@ -241,6 +340,12 @@ class Skeleton {
|
|
|
241
340
|
|
|
242
341
|
}
|
|
243
342
|
|
|
343
|
+
/**
|
|
344
|
+
* Serializes the skeleton into JSON.
|
|
345
|
+
*
|
|
346
|
+
* @return {Object} A JSON object representing the serialized skeleton.
|
|
347
|
+
* @see {@link ObjectLoader#parse}
|
|
348
|
+
*/
|
|
244
349
|
toJSON() {
|
|
245
350
|
|
|
246
351
|
const data = {
|
|
@@ -20,25 +20,90 @@ const _sphere = /*@__PURE__*/ new Sphere();
|
|
|
20
20
|
const _inverseMatrix = /*@__PURE__*/ new Matrix4();
|
|
21
21
|
const _ray = /*@__PURE__*/ new Ray();
|
|
22
22
|
|
|
23
|
+
/**
|
|
24
|
+
* A mesh that has a {@link Skeleton} that can then be used to animate the
|
|
25
|
+
* vertices of the geometry with skinning/skeleton animation.
|
|
26
|
+
*
|
|
27
|
+
* Next to a valid skeleton, the skinned mesh requires skin indices and weights
|
|
28
|
+
* as buffer attributes in its geometry. These attribute define which bones affect a single
|
|
29
|
+
* vertex to a certain extend.
|
|
30
|
+
*
|
|
31
|
+
* Typically skinned meshes are not created manually but loaders like {@link GLTFLoader}
|
|
32
|
+
* or {@link FBXLoader } import respective models.
|
|
33
|
+
*
|
|
34
|
+
* @augments Mesh
|
|
35
|
+
*/
|
|
23
36
|
class SkinnedMesh extends Mesh {
|
|
24
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Constructs a new skinned mesh.
|
|
40
|
+
*
|
|
41
|
+
* @param {BufferGeometry} [geometry] - The mesh geometry.
|
|
42
|
+
* @param {Material|Array<Material>} [material] - The mesh material.
|
|
43
|
+
*/
|
|
25
44
|
constructor( geometry, material ) {
|
|
26
45
|
|
|
27
46
|
super( geometry, material );
|
|
28
47
|
|
|
48
|
+
/**
|
|
49
|
+
* This flag can be used for type testing.
|
|
50
|
+
*
|
|
51
|
+
* @type {boolean}
|
|
52
|
+
* @readonly
|
|
53
|
+
* @default true
|
|
54
|
+
*/
|
|
29
55
|
this.isSkinnedMesh = true;
|
|
30
56
|
|
|
31
57
|
this.type = 'SkinnedMesh';
|
|
32
58
|
|
|
59
|
+
/**
|
|
60
|
+
* `AttachedBindMode` means the skinned mesh shares the same world space as the skeleton.
|
|
61
|
+
* This is not true when using `DetachedBindMode` which is useful when sharing a skeleton
|
|
62
|
+
* across multiple skinned meshes.
|
|
63
|
+
*
|
|
64
|
+
* @type {(AttachedBindMode|DetachedBindMode)}
|
|
65
|
+
* @default AttachedBindMode
|
|
66
|
+
*/
|
|
33
67
|
this.bindMode = AttachedBindMode;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* The base matrix that is used for the bound bone transforms.
|
|
71
|
+
*
|
|
72
|
+
* @type {Matrix4}
|
|
73
|
+
*/
|
|
34
74
|
this.bindMatrix = new Matrix4();
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The base matrix that is used for resetting the bound bone transforms.
|
|
78
|
+
*
|
|
79
|
+
* @type {Matrix4}
|
|
80
|
+
*/
|
|
35
81
|
this.bindMatrixInverse = new Matrix4();
|
|
36
82
|
|
|
83
|
+
/**
|
|
84
|
+
* The bounding box of the skinned mesh. Can be computed via {@link SkinnedMesh#computeBoundingBox}.
|
|
85
|
+
*
|
|
86
|
+
* @type {?Box3}
|
|
87
|
+
* @default null
|
|
88
|
+
*/
|
|
37
89
|
this.boundingBox = null;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* The bounding sphere of the skinned mesh. Can be computed via {@link SkinnedMesh#computeBoundingSphere}.
|
|
93
|
+
*
|
|
94
|
+
* @type {?Sphere}
|
|
95
|
+
* @default null
|
|
96
|
+
*/
|
|
38
97
|
this.boundingSphere = null;
|
|
39
98
|
|
|
40
99
|
}
|
|
41
100
|
|
|
101
|
+
/**
|
|
102
|
+
* Computes the bounding box of the skinned mesh, and updates {@link SkinnedMesh#boundingBox}.
|
|
103
|
+
* The bounding box is not automatically computed by the engine; this method must be called by your app.
|
|
104
|
+
* If the skinned mesh is animated, the bounding box should be recomputed per frame in order to reflect
|
|
105
|
+
* the current animation state.
|
|
106
|
+
*/
|
|
42
107
|
computeBoundingBox() {
|
|
43
108
|
|
|
44
109
|
const geometry = this.geometry;
|
|
@@ -62,6 +127,12 @@ class SkinnedMesh extends Mesh {
|
|
|
62
127
|
|
|
63
128
|
}
|
|
64
129
|
|
|
130
|
+
/**
|
|
131
|
+
* Computes the bounding sphere of the skinned mesh, and updates {@link SkinnedMesh#boundingSphere}.
|
|
132
|
+
* The bounding sphere is automatically computed by the engine once when it is needed, e.g., for ray casting
|
|
133
|
+
* and view frustum culling. If the skinned mesh is animated, the bounding sphere should be recomputed
|
|
134
|
+
* per frame in order to reflect the current animation state.
|
|
135
|
+
*/
|
|
65
136
|
computeBoundingSphere() {
|
|
66
137
|
|
|
67
138
|
const geometry = this.geometry;
|
|
@@ -147,6 +218,13 @@ class SkinnedMesh extends Mesh {
|
|
|
147
218
|
|
|
148
219
|
}
|
|
149
220
|
|
|
221
|
+
/**
|
|
222
|
+
* Binds the given skeleton to the skinned mesh.
|
|
223
|
+
*
|
|
224
|
+
* @param {Skeleton} skeleton - The skeleton to bind.
|
|
225
|
+
* @param {Matrix4} [bindMatrix] - The bind matrix. If no bind matrix is provided,
|
|
226
|
+
* the skinned mesh's world matrix will be used instead.
|
|
227
|
+
*/
|
|
150
228
|
bind( skeleton, bindMatrix ) {
|
|
151
229
|
|
|
152
230
|
this.skeleton = skeleton;
|
|
@@ -166,12 +244,19 @@ class SkinnedMesh extends Mesh {
|
|
|
166
244
|
|
|
167
245
|
}
|
|
168
246
|
|
|
247
|
+
/**
|
|
248
|
+
* This method sets the skinned mesh in the rest pose).
|
|
249
|
+
*/
|
|
169
250
|
pose() {
|
|
170
251
|
|
|
171
252
|
this.skeleton.pose();
|
|
172
253
|
|
|
173
254
|
}
|
|
174
255
|
|
|
256
|
+
/**
|
|
257
|
+
* Normalizes the skin weights which are defined as a buffer attribute
|
|
258
|
+
* in the skinned mesh's geometry.
|
|
259
|
+
*/
|
|
175
260
|
normalizeSkinWeights() {
|
|
176
261
|
|
|
177
262
|
const vector = new Vector4();
|
|
@@ -220,7 +305,16 @@ class SkinnedMesh extends Mesh {
|
|
|
220
305
|
|
|
221
306
|
}
|
|
222
307
|
|
|
223
|
-
|
|
308
|
+
/**
|
|
309
|
+
* Applies the bone transform associated with the given index to the given
|
|
310
|
+
* vertex position. Returns the updated vector.
|
|
311
|
+
*
|
|
312
|
+
* @param {number} index - The vertex index.
|
|
313
|
+
* @param {Vector3} target - The target object that is used to store the method's result.
|
|
314
|
+
* the skinned mesh's world matrix will be used instead.
|
|
315
|
+
* @return {Vector3} The updated vertex position.
|
|
316
|
+
*/
|
|
317
|
+
applyBoneTransform( index, target ) {
|
|
224
318
|
|
|
225
319
|
const skeleton = this.skeleton;
|
|
226
320
|
const geometry = this.geometry;
|
|
@@ -228,9 +322,9 @@ class SkinnedMesh extends Mesh {
|
|
|
228
322
|
_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );
|
|
229
323
|
_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );
|
|
230
324
|
|
|
231
|
-
_basePosition.copy(
|
|
325
|
+
_basePosition.copy( target ).applyMatrix4( this.bindMatrix );
|
|
232
326
|
|
|
233
|
-
|
|
327
|
+
target.set( 0, 0, 0 );
|
|
234
328
|
|
|
235
329
|
for ( let i = 0; i < 4; i ++ ) {
|
|
236
330
|
|
|
@@ -242,13 +336,13 @@ class SkinnedMesh extends Mesh {
|
|
|
242
336
|
|
|
243
337
|
_matrix4.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );
|
|
244
338
|
|
|
245
|
-
|
|
339
|
+
target.addScaledVector( _vector3.copy( _basePosition ).applyMatrix4( _matrix4 ), weight );
|
|
246
340
|
|
|
247
341
|
}
|
|
248
342
|
|
|
249
343
|
}
|
|
250
344
|
|
|
251
|
-
return
|
|
345
|
+
return target.applyMatrix4( this.bindMatrixInverse );
|
|
252
346
|
|
|
253
347
|
}
|
|
254
348
|
|