@plastic-software/three 0.174.0 → 0.175.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/build/three.cjs +10655 -1446
- package/build/three.core.js +9626 -1094
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +834 -157
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +4 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2658 -1697
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2654 -1709
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +93 -39
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +171 -48
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +71 -29
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +41 -3
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +35 -0
- package/examples/jsm/loaders/DDSLoader.js +24 -0
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +42 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +218 -5
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +86 -18
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +38 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +81 -61
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +79 -2
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +108 -72
- package/examples/jsm/misc/VolumeSlice.js +88 -45
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +70 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +131 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +266 -133
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +1 -1
- package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -1
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
- package/examples/jsm/tsl/math/Bayer.js +14 -1
- package/examples/jsm/tsl/utils/Raymarching.js +4 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +1 -1
- package/src/Three.TSL.js +3 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +168 -18
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/AudioAnalyser.js +1 -1
- package/src/audio/AudioListener.js +2 -2
- package/src/audio/PositionalAudio.js +5 -5
- package/src/constants.js +1429 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +23 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +166 -7
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +16 -1
- package/src/extras/Earcut.js +3 -781
- package/src/extras/ImageUtils.js +3 -2
- package/src/extras/PMREMGenerator.js +22 -17
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +1 -1
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/ConeGeometry.js +2 -2
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/geometries/ExtrudeGeometry.js +71 -39
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/lights/LightShadow.js +1 -1
- package/src/lights/webgpu/IESSpotLight.js +1 -1
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +4 -6
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +53 -0
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +6 -2
- package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
- package/src/loaders/nodes/NodeObjectLoader.js +3 -3
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +1 -1
- package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +7 -3
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
- package/src/math/Color.js +1 -1
- package/src/math/MathUtils.js +223 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/accessors/BatchNode.js +8 -8
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +1 -1
- package/src/nodes/accessors/InstanceNode.js +5 -5
- package/src/nodes/accessors/InstancedMeshNode.js +1 -1
- package/src/nodes/accessors/MorphNode.js +27 -23
- package/src/nodes/accessors/Normal.js +1 -1
- package/src/nodes/accessors/Object3DNode.js +12 -12
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +46 -37
- package/src/nodes/accessors/StorageBufferNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +25 -5
- package/src/nodes/accessors/TextureSizeNode.js +1 -1
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/CodeNode.js +4 -4
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +23 -3
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/code/ScriptableValueNode.js +2 -2
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/CacheNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/Node.js +14 -2
- package/src/nodes/core/NodeBuilder.js +86 -14
- package/src/nodes/core/StackNode.js +5 -5
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/VarNode.js +2 -8
- package/src/nodes/core/VaryingNode.js +3 -3
- package/src/nodes/display/BlendModes.js +4 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PosterizeNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +3 -3
- package/src/nodes/display/ViewportDepthNode.js +2 -2
- package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
- package/src/nodes/display/ViewportTextureNode.js +4 -4
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +30 -2
- package/src/nodes/lighting/AnalyticLightNode.js +9 -1
- package/src/nodes/lighting/LightsNode.js +3 -3
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +20 -3
- package/src/nodes/math/MathNode.js +83 -78
- package/src/nodes/math/OperatorNode.js +171 -82
- package/src/nodes/pmrem/PMREMNode.js +4 -4
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +115 -12
- package/src/nodes/utils/ArrayElementNode.js +3 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/EquirectUVNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +27 -2
- package/src/nodes/utils/LoopNode.js +58 -28
- package/src/nodes/utils/MaxMipLevelNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -2
- package/src/nodes/utils/RemapNode.js +6 -6
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/src/objects/BatchedMesh.js +4 -4
- package/src/objects/InstancedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Skeleton.js +1 -1
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +617 -79
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Attributes.js +2 -2
- package/src/renderers/common/Backend.js +12 -3
- package/src/renderers/common/Background.js +1 -0
- package/src/renderers/common/Color4.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/PostProcessing.js +2 -0
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderObject.js +1 -1
- package/src/renderers/common/RenderObjects.js +2 -2
- package/src/renderers/common/Renderer.js +52 -31
- package/src/renderers/common/XRManager.js +333 -10
- package/src/renderers/common/extras/PMREMGenerator.js +6 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/shaders/UniformsLib.js +1 -4
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLState.js +9 -9
- package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +128 -87
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
- package/src/renderers/webgpu/WebGPURenderer.js +17 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +173 -1
- package/src/scenes/Scene.js +2 -1
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +5 -5
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { Quaternion } from '../math/Quaternion.js';
|
|
2
2
|
import { AdditiveAnimationBlendMode } from '../constants.js';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Converts an array to a specific type.
|
|
6
|
+
*
|
|
7
|
+
* @param {TypedArray|Array} array - The array to convert.
|
|
8
|
+
* @param {TypedArray.constructor} type - The constructor of a typed array that defines the new type.
|
|
9
|
+
* @return {TypedArray} The converted array.
|
|
10
|
+
*/
|
|
11
|
+
function convertArray( array, type ) {
|
|
6
12
|
|
|
7
|
-
if ( ! array ||
|
|
8
|
-
! forceClone && array.constructor === type ) return array;
|
|
13
|
+
if ( ! array || array.constructor === type ) return array;
|
|
9
14
|
|
|
10
15
|
if ( typeof type.BYTES_PER_ELEMENT === 'number' ) {
|
|
11
16
|
|
|
@@ -17,14 +22,24 @@ function convertArray( array, type, forceClone ) {
|
|
|
17
22
|
|
|
18
23
|
}
|
|
19
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Returns `true` if the given object is a typed array.
|
|
27
|
+
*
|
|
28
|
+
* @param {any} object - The object to check.
|
|
29
|
+
* @return {boolean} Whether the given object is a typed array.
|
|
30
|
+
*/
|
|
20
31
|
function isTypedArray( object ) {
|
|
21
32
|
|
|
22
|
-
return ArrayBuffer.isView( object ) &&
|
|
23
|
-
! ( object instanceof DataView );
|
|
33
|
+
return ArrayBuffer.isView( object ) && ! ( object instanceof DataView );
|
|
24
34
|
|
|
25
35
|
}
|
|
26
36
|
|
|
27
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Returns an array by which times and values can be sorted.
|
|
39
|
+
*
|
|
40
|
+
* @param {Array<number>} times - The keyframe time values.
|
|
41
|
+
* @return {Array<number>} The array.
|
|
42
|
+
*/
|
|
28
43
|
function getKeyframeOrder( times ) {
|
|
29
44
|
|
|
30
45
|
function compareTime( i, j ) {
|
|
@@ -43,7 +58,14 @@ function getKeyframeOrder( times ) {
|
|
|
43
58
|
|
|
44
59
|
}
|
|
45
60
|
|
|
46
|
-
|
|
61
|
+
/**
|
|
62
|
+
* Sorts the given array by the previously computed order via `getKeyframeOrder()`.
|
|
63
|
+
*
|
|
64
|
+
* @param {Array<number>} values - The values to sort.
|
|
65
|
+
* @param {number} stride - The stride.
|
|
66
|
+
* @param {Array<number>} order - The sort order.
|
|
67
|
+
* @return {Array<number>} The sorted values.
|
|
68
|
+
*/
|
|
47
69
|
function sortedArray( values, stride, order ) {
|
|
48
70
|
|
|
49
71
|
const nValues = values.length;
|
|
@@ -65,7 +87,14 @@ function sortedArray( values, stride, order ) {
|
|
|
65
87
|
|
|
66
88
|
}
|
|
67
89
|
|
|
68
|
-
|
|
90
|
+
/**
|
|
91
|
+
* Used for parsing AOS keyframe formats.
|
|
92
|
+
*
|
|
93
|
+
* @param {Array<number>} jsonKeys - A list of JSON keyframes.
|
|
94
|
+
* @param {Array<number>} times - This array will be filled with keyframe times by this function.
|
|
95
|
+
* @param {Array<number>} values - This array will be filled with keyframe values by this function.
|
|
96
|
+
* @param {string} valuePropertyName - The name of the property to use.
|
|
97
|
+
*/
|
|
69
98
|
function flattenJSON( jsonKeys, times, values, valuePropertyName ) {
|
|
70
99
|
|
|
71
100
|
let i = 1, key = jsonKeys[ 0 ];
|
|
@@ -140,6 +169,16 @@ function flattenJSON( jsonKeys, times, values, valuePropertyName ) {
|
|
|
140
169
|
|
|
141
170
|
}
|
|
142
171
|
|
|
172
|
+
/**
|
|
173
|
+
* Creates a new clip, containing only the segment of the original clip between the given frames.
|
|
174
|
+
*
|
|
175
|
+
* @param {AnimationClip} sourceClip - The values to sort.
|
|
176
|
+
* @param {string} name - The name of the clip.
|
|
177
|
+
* @param {number} startFrame - The start frame.
|
|
178
|
+
* @param {number} endFrame - The end frame.
|
|
179
|
+
* @param {number} [fps=30] - The FPS.
|
|
180
|
+
* @return {AnimationClip} The new sub clip.
|
|
181
|
+
*/
|
|
143
182
|
function subclip( sourceClip, name, startFrame, endFrame, fps = 30 ) {
|
|
144
183
|
|
|
145
184
|
const clip = sourceClip.clone();
|
|
@@ -211,6 +250,15 @@ function subclip( sourceClip, name, startFrame, endFrame, fps = 30 ) {
|
|
|
211
250
|
|
|
212
251
|
}
|
|
213
252
|
|
|
253
|
+
/**
|
|
254
|
+
* Converts the keyframes of the given animation clip to an additive format.
|
|
255
|
+
*
|
|
256
|
+
* @param {AnimationClip} targetClip - The clip to make additive.
|
|
257
|
+
* @param {number} [referenceFrame=0] - The reference frame.
|
|
258
|
+
* @param {AnimationClip} [referenceClip=targetClip] - The reference clip.
|
|
259
|
+
* @param {number} [fps=30] - The FPS.
|
|
260
|
+
* @return {AnimationClip} The updated clip which is now additive.
|
|
261
|
+
*/
|
|
214
262
|
function makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {
|
|
215
263
|
|
|
216
264
|
if ( fps <= 0 ) fps = 30;
|
|
@@ -334,15 +382,117 @@ function makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targe
|
|
|
334
382
|
|
|
335
383
|
}
|
|
336
384
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
385
|
+
/**
|
|
386
|
+
* A class with various methods to assist with animations.
|
|
387
|
+
*
|
|
388
|
+
* @hideconstructor
|
|
389
|
+
*/
|
|
390
|
+
class AnimationUtils {
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Converts an array to a specific type
|
|
394
|
+
*
|
|
395
|
+
* @static
|
|
396
|
+
* @param {TypedArray|Array} array - The array to convert.
|
|
397
|
+
* @param {TypedArray.constructor} type - The constructor of a type array.
|
|
398
|
+
* @return {TypedArray} The converted array
|
|
399
|
+
*/
|
|
400
|
+
static convertArray( array, type ) {
|
|
401
|
+
|
|
402
|
+
return convertArray( array, type );
|
|
403
|
+
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Returns `true` if the given object is a typed array.
|
|
408
|
+
*
|
|
409
|
+
* @static
|
|
410
|
+
* @param {any} object - The object to check.
|
|
411
|
+
* @return {boolean} Whether the given object is a typed array.
|
|
412
|
+
*/
|
|
413
|
+
static isTypedArray( object ) {
|
|
414
|
+
|
|
415
|
+
return isTypedArray( object );
|
|
416
|
+
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* Returns an array by which times and values can be sorted.
|
|
421
|
+
*
|
|
422
|
+
* @static
|
|
423
|
+
* @param {Array<number>} times - The keyframe time values.
|
|
424
|
+
* @return {Array<number>} The array.
|
|
425
|
+
*/
|
|
426
|
+
static getKeyframeOrder( times ) {
|
|
427
|
+
|
|
428
|
+
return getKeyframeOrder( times );
|
|
429
|
+
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* Sorts the given array by the previously computed order via `getKeyframeOrder()`.
|
|
434
|
+
*
|
|
435
|
+
* @static
|
|
436
|
+
* @param {Array<number>} values - The values to sort.
|
|
437
|
+
* @param {number} stride - The stride.
|
|
438
|
+
* @param {Array<number>} order - The sort order.
|
|
439
|
+
* @return {Array<number>} The sorted values.
|
|
440
|
+
*/
|
|
441
|
+
static sortedArray( values, stride, order ) {
|
|
442
|
+
|
|
443
|
+
return sortedArray( values, stride, order );
|
|
444
|
+
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* Used for parsing AOS keyframe formats.
|
|
449
|
+
*
|
|
450
|
+
* @static
|
|
451
|
+
* @param {Array<number>} jsonKeys - A list of JSON keyframes.
|
|
452
|
+
* @param {Array<number>} times - This array will be filled with keyframe times by this method.
|
|
453
|
+
* @param {Array<number>} values - This array will be filled with keyframe values by this method.
|
|
454
|
+
* @param {string} valuePropertyName - The name of the property to use.
|
|
455
|
+
*/
|
|
456
|
+
static flattenJSON( jsonKeys, times, values, valuePropertyName ) {
|
|
457
|
+
|
|
458
|
+
flattenJSON( jsonKeys, times, values, valuePropertyName );
|
|
459
|
+
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* Creates a new clip, containing only the segment of the original clip between the given frames.
|
|
464
|
+
*
|
|
465
|
+
* @static
|
|
466
|
+
* @param {AnimationClip} sourceClip - The values to sort.
|
|
467
|
+
* @param {string} name - The name of the clip.
|
|
468
|
+
* @param {number} startFrame - The start frame.
|
|
469
|
+
* @param {number} endFrame - The end frame.
|
|
470
|
+
* @param {number} [fps=30] - The FPS.
|
|
471
|
+
* @return {AnimationClip} The new sub clip.
|
|
472
|
+
*/
|
|
473
|
+
static subclip( sourceClip, name, startFrame, endFrame, fps = 30 ) {
|
|
474
|
+
|
|
475
|
+
return subclip( sourceClip, name, startFrame, endFrame, fps );
|
|
476
|
+
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* Converts the keyframes of the given animation clip to an additive format.
|
|
481
|
+
*
|
|
482
|
+
* @static
|
|
483
|
+
* @param {AnimationClip} targetClip - The clip to make additive.
|
|
484
|
+
* @param {number} [referenceFrame=0] - The reference frame.
|
|
485
|
+
* @param {AnimationClip} [referenceClip=targetClip] - The reference clip.
|
|
486
|
+
* @param {number} [fps=30] - The FPS.
|
|
487
|
+
* @return {AnimationClip} The updated clip which is now additive.
|
|
488
|
+
*/
|
|
489
|
+
static makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {
|
|
490
|
+
|
|
491
|
+
return makeClipAdditive( targetClip, referenceFrame, referenceClip, fps );
|
|
492
|
+
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
}
|
|
346
496
|
|
|
347
497
|
export {
|
|
348
498
|
convertArray,
|
|
@@ -8,25 +8,60 @@ import { LinearInterpolant } from '../math/interpolants/LinearInterpolant.js';
|
|
|
8
8
|
import { DiscreteInterpolant } from '../math/interpolants/DiscreteInterpolant.js';
|
|
9
9
|
import * as AnimationUtils from './AnimationUtils.js';
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Represents s a timed sequence of keyframes, which are composed of lists of
|
|
13
|
+
* times and related values, and which are used to animate a specific property
|
|
14
|
+
* of an object.
|
|
15
|
+
*/
|
|
11
16
|
class KeyframeTrack {
|
|
12
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Constructs a new keyframe track.
|
|
20
|
+
*
|
|
21
|
+
* @param {string} name - The keyframe track's name.
|
|
22
|
+
* @param {Array<number>} times - A list of keyframe times.
|
|
23
|
+
* @param {Array<number>} values - A list of keyframe values.
|
|
24
|
+
* @param {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth)} [interpolation] - The interpolation type.
|
|
25
|
+
*/
|
|
13
26
|
constructor( name, times, values, interpolation ) {
|
|
14
27
|
|
|
15
28
|
if ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );
|
|
16
29
|
if ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );
|
|
17
30
|
|
|
31
|
+
/**
|
|
32
|
+
* The track's name can refer to morph targets or bones or
|
|
33
|
+
* possibly other values within an animated object. See {@link PropertyBinding#parseTrackName}
|
|
34
|
+
* for the forms of strings that can be parsed for property binding.
|
|
35
|
+
*
|
|
36
|
+
* @type {string}
|
|
37
|
+
*/
|
|
18
38
|
this.name = name;
|
|
19
39
|
|
|
40
|
+
/**
|
|
41
|
+
* The keyframe times.
|
|
42
|
+
*
|
|
43
|
+
* @type {Float32Array}
|
|
44
|
+
*/
|
|
20
45
|
this.times = AnimationUtils.convertArray( times, this.TimeBufferType );
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The keyframe values.
|
|
49
|
+
*
|
|
50
|
+
* @type {Float32Array}
|
|
51
|
+
*/
|
|
21
52
|
this.values = AnimationUtils.convertArray( values, this.ValueBufferType );
|
|
22
53
|
|
|
23
54
|
this.setInterpolation( interpolation || this.DefaultInterpolation );
|
|
24
55
|
|
|
25
56
|
}
|
|
26
57
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
58
|
+
/**
|
|
59
|
+
* Converts the keyframe track to JSON.
|
|
60
|
+
*
|
|
61
|
+
* @static
|
|
62
|
+
* @param {KeyframeTrack} track - The keyframe track to serialize.
|
|
63
|
+
* @return {Object} The serialized keyframe track as JSON.
|
|
64
|
+
*/
|
|
30
65
|
static toJSON( track ) {
|
|
31
66
|
|
|
32
67
|
const trackType = track.constructor;
|
|
@@ -65,24 +100,51 @@ class KeyframeTrack {
|
|
|
65
100
|
|
|
66
101
|
}
|
|
67
102
|
|
|
103
|
+
/**
|
|
104
|
+
* Factory method for creating a new discrete interpolant.
|
|
105
|
+
*
|
|
106
|
+
* @static
|
|
107
|
+
* @param {TypedArray} [result] - The result buffer.
|
|
108
|
+
* @return {DiscreteInterpolant} The new interpolant.
|
|
109
|
+
*/
|
|
68
110
|
InterpolantFactoryMethodDiscrete( result ) {
|
|
69
111
|
|
|
70
112
|
return new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );
|
|
71
113
|
|
|
72
114
|
}
|
|
73
115
|
|
|
116
|
+
/**
|
|
117
|
+
* Factory method for creating a new linear interpolant.
|
|
118
|
+
*
|
|
119
|
+
* @static
|
|
120
|
+
* @param {TypedArray} [result] - The result buffer.
|
|
121
|
+
* @return {LinearInterpolant} The new interpolant.
|
|
122
|
+
*/
|
|
74
123
|
InterpolantFactoryMethodLinear( result ) {
|
|
75
124
|
|
|
76
125
|
return new LinearInterpolant( this.times, this.values, this.getValueSize(), result );
|
|
77
126
|
|
|
78
127
|
}
|
|
79
128
|
|
|
129
|
+
/**
|
|
130
|
+
* Factory method for creating a new smooth interpolant.
|
|
131
|
+
*
|
|
132
|
+
* @static
|
|
133
|
+
* @param {TypedArray} [result] - The result buffer.
|
|
134
|
+
* @return {CubicInterpolant} The new interpolant.
|
|
135
|
+
*/
|
|
80
136
|
InterpolantFactoryMethodSmooth( result ) {
|
|
81
137
|
|
|
82
138
|
return new CubicInterpolant( this.times, this.values, this.getValueSize(), result );
|
|
83
139
|
|
|
84
140
|
}
|
|
85
141
|
|
|
142
|
+
/**
|
|
143
|
+
* Defines the interpolation factor method for this keyframe track.
|
|
144
|
+
*
|
|
145
|
+
* @param {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth)} interpolation - The interpolation type.
|
|
146
|
+
* @return {KeyframeTrack} A reference to this keyframe track.
|
|
147
|
+
*/
|
|
86
148
|
setInterpolation( interpolation ) {
|
|
87
149
|
|
|
88
150
|
let factoryMethod;
|
|
@@ -140,6 +202,11 @@ class KeyframeTrack {
|
|
|
140
202
|
|
|
141
203
|
}
|
|
142
204
|
|
|
205
|
+
/**
|
|
206
|
+
* Returns the current interpolation type.
|
|
207
|
+
*
|
|
208
|
+
* @return {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth)} The interpolation type.
|
|
209
|
+
*/
|
|
143
210
|
getInterpolation() {
|
|
144
211
|
|
|
145
212
|
switch ( this.createInterpolant ) {
|
|
@@ -160,13 +227,23 @@ class KeyframeTrack {
|
|
|
160
227
|
|
|
161
228
|
}
|
|
162
229
|
|
|
230
|
+
/**
|
|
231
|
+
* Returns the value size.
|
|
232
|
+
*
|
|
233
|
+
* @return {number} The value size.
|
|
234
|
+
*/
|
|
163
235
|
getValueSize() {
|
|
164
236
|
|
|
165
237
|
return this.values.length / this.times.length;
|
|
166
238
|
|
|
167
239
|
}
|
|
168
240
|
|
|
169
|
-
|
|
241
|
+
/**
|
|
242
|
+
* Moves all keyframes either forward or backward in time.
|
|
243
|
+
*
|
|
244
|
+
* @param {number} timeOffset - The offset to move the time values.
|
|
245
|
+
* @return {KeyframeTrack} A reference to this keyframe track.
|
|
246
|
+
*/
|
|
170
247
|
shift( timeOffset ) {
|
|
171
248
|
|
|
172
249
|
if ( timeOffset !== 0.0 ) {
|
|
@@ -185,7 +262,12 @@ class KeyframeTrack {
|
|
|
185
262
|
|
|
186
263
|
}
|
|
187
264
|
|
|
188
|
-
|
|
265
|
+
/**
|
|
266
|
+
* Scale all keyframe times by a factor (useful for frame - seconds conversions).
|
|
267
|
+
*
|
|
268
|
+
* @param {number} timeScale - The time scale.
|
|
269
|
+
* @return {KeyframeTrack} A reference to this keyframe track.
|
|
270
|
+
*/
|
|
189
271
|
scale( timeScale ) {
|
|
190
272
|
|
|
191
273
|
if ( timeScale !== 1.0 ) {
|
|
@@ -204,8 +286,16 @@ class KeyframeTrack {
|
|
|
204
286
|
|
|
205
287
|
}
|
|
206
288
|
|
|
207
|
-
|
|
208
|
-
|
|
289
|
+
/**
|
|
290
|
+
* Removes keyframes before and after animation without changing any values within the defined time range.
|
|
291
|
+
*
|
|
292
|
+
* Note: The method does not shift around keys to the start of the track time, because for interpolated
|
|
293
|
+
* keys this will change their values
|
|
294
|
+
*
|
|
295
|
+
* @param {number} startTime - The start time.
|
|
296
|
+
* @param {number} endTime - The end time.
|
|
297
|
+
* @return {KeyframeTrack} A reference to this keyframe track.
|
|
298
|
+
*/
|
|
209
299
|
trim( startTime, endTime ) {
|
|
210
300
|
|
|
211
301
|
const times = this.times,
|
|
@@ -248,7 +338,12 @@ class KeyframeTrack {
|
|
|
248
338
|
|
|
249
339
|
}
|
|
250
340
|
|
|
251
|
-
|
|
341
|
+
/**
|
|
342
|
+
* Performs minimal validation on the keyframe track. Returns `true` if the values
|
|
343
|
+
* are valid.
|
|
344
|
+
*
|
|
345
|
+
* @return {boolean} Whether the keyframes are valid or not.
|
|
346
|
+
*/
|
|
252
347
|
validate() {
|
|
253
348
|
|
|
254
349
|
let valid = true;
|
|
@@ -325,10 +420,16 @@ class KeyframeTrack {
|
|
|
325
420
|
|
|
326
421
|
}
|
|
327
422
|
|
|
328
|
-
|
|
329
|
-
|
|
423
|
+
/**
|
|
424
|
+
* Optimizes this keyframe track by removing equivalent sequential keys (which are
|
|
425
|
+
* common in morph target sequences).
|
|
426
|
+
*
|
|
427
|
+
* @return {AnimationClip} A reference to this animation clip.
|
|
428
|
+
*/
|
|
330
429
|
optimize() {
|
|
331
430
|
|
|
431
|
+
// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)
|
|
432
|
+
|
|
332
433
|
// times or values may be shared with other tracks, so overwriting is unsafe
|
|
333
434
|
const times = this.times.slice(),
|
|
334
435
|
values = this.values.slice(),
|
|
@@ -438,6 +539,11 @@ class KeyframeTrack {
|
|
|
438
539
|
|
|
439
540
|
}
|
|
440
541
|
|
|
542
|
+
/**
|
|
543
|
+
* Returns a new keyframe track with copied values from this instance.
|
|
544
|
+
*
|
|
545
|
+
* @return {KeyframeTrack} A clone of this instance.
|
|
546
|
+
*/
|
|
441
547
|
clone() {
|
|
442
548
|
|
|
443
549
|
const times = this.times.slice();
|
|
@@ -455,8 +561,36 @@ class KeyframeTrack {
|
|
|
455
561
|
|
|
456
562
|
}
|
|
457
563
|
|
|
564
|
+
/**
|
|
565
|
+
* The value type name.
|
|
566
|
+
*
|
|
567
|
+
* @type {String}
|
|
568
|
+
* @default ''
|
|
569
|
+
*/
|
|
570
|
+
KeyframeTrack.prototype.ValueTypeName = '';
|
|
571
|
+
|
|
572
|
+
/**
|
|
573
|
+
* The time buffer type of this keyframe track.
|
|
574
|
+
*
|
|
575
|
+
* @type {TypedArray|Array}
|
|
576
|
+
* @default Float32Array.constructor
|
|
577
|
+
*/
|
|
458
578
|
KeyframeTrack.prototype.TimeBufferType = Float32Array;
|
|
579
|
+
|
|
580
|
+
/**
|
|
581
|
+
* The value buffer type of this keyframe track.
|
|
582
|
+
*
|
|
583
|
+
* @type {TypedArray|Array}
|
|
584
|
+
* @default Float32Array.constructor
|
|
585
|
+
*/
|
|
459
586
|
KeyframeTrack.prototype.ValueBufferType = Float32Array;
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* The default interpolation type of this keyframe track.
|
|
590
|
+
*
|
|
591
|
+
* @type {(InterpolateLinear|InterpolateDiscrete|InterpolateSmooth)}
|
|
592
|
+
* @default InterpolateLinear
|
|
593
|
+
*/
|
|
460
594
|
KeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;
|
|
461
595
|
|
|
462
596
|
export { KeyframeTrack };
|
|
@@ -100,15 +100,48 @@ class Composite {
|
|
|
100
100
|
// prototype version of these methods with one that represents
|
|
101
101
|
// the bound state. When the property is not found, the methods
|
|
102
102
|
// become no-ops.
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* This holds a reference to a real property in the scene graph; used internally.
|
|
107
|
+
*/
|
|
103
108
|
class PropertyBinding {
|
|
104
109
|
|
|
110
|
+
/**
|
|
111
|
+
* Constructs a new property binding.
|
|
112
|
+
*
|
|
113
|
+
* @param {Object} rootNode - The root node.
|
|
114
|
+
* @param {string} path - The path.
|
|
115
|
+
* @param {?Object} [parsedPath] - The parsed path.
|
|
116
|
+
*/
|
|
105
117
|
constructor( rootNode, path, parsedPath ) {
|
|
106
118
|
|
|
119
|
+
/**
|
|
120
|
+
* The object path to the animated property.
|
|
121
|
+
*
|
|
122
|
+
* @type {string}
|
|
123
|
+
*/
|
|
107
124
|
this.path = path;
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* An object holding information about the path.
|
|
128
|
+
*
|
|
129
|
+
* @type {Object}
|
|
130
|
+
*/
|
|
108
131
|
this.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );
|
|
109
132
|
|
|
133
|
+
/**
|
|
134
|
+
* The object owns the animated property.
|
|
135
|
+
*
|
|
136
|
+
* @type {?Object}
|
|
137
|
+
*/
|
|
110
138
|
this.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName );
|
|
111
139
|
|
|
140
|
+
/**
|
|
141
|
+
* The root node.
|
|
142
|
+
*
|
|
143
|
+
* @type {Object3D|Skeleton}
|
|
144
|
+
*/
|
|
112
145
|
this.rootNode = rootNode;
|
|
113
146
|
|
|
114
147
|
// initial state of these methods that calls 'bind'
|
|
@@ -118,6 +151,15 @@ class PropertyBinding {
|
|
|
118
151
|
}
|
|
119
152
|
|
|
120
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Factory method for creating a property binding from the given parameters.
|
|
156
|
+
*
|
|
157
|
+
* @static
|
|
158
|
+
* @param {Object} root - The root node.
|
|
159
|
+
* @param {string} path - The path.
|
|
160
|
+
* @param {?Object} [parsedPath] - The parsed path.
|
|
161
|
+
* @return {PropertyBinding|Composite} The created property binding or composite.
|
|
162
|
+
*/
|
|
121
163
|
static create( root, path, parsedPath ) {
|
|
122
164
|
|
|
123
165
|
if ( ! ( root && root.isAnimationObjectGroup ) ) {
|
|
@@ -136,8 +178,8 @@ class PropertyBinding {
|
|
|
136
178
|
* Replaces spaces with underscores and removes unsupported characters from
|
|
137
179
|
* node names, to ensure compatibility with parseTrackName().
|
|
138
180
|
*
|
|
139
|
-
* @param {string} name Node name to be sanitized.
|
|
140
|
-
* @return {string}
|
|
181
|
+
* @param {string} name - Node name to be sanitized.
|
|
182
|
+
* @return {string} The sanitized node name.
|
|
141
183
|
*/
|
|
142
184
|
static sanitizeNodeName( name ) {
|
|
143
185
|
|
|
@@ -145,6 +187,24 @@ class PropertyBinding {
|
|
|
145
187
|
|
|
146
188
|
}
|
|
147
189
|
|
|
190
|
+
/**
|
|
191
|
+
* Parses the given track name (an object path to an animated property) and
|
|
192
|
+
* returns an object with information about the path. Matches strings in the following forms:
|
|
193
|
+
*
|
|
194
|
+
* - nodeName.property
|
|
195
|
+
* - nodeName.property[accessor]
|
|
196
|
+
* - nodeName.material.property[accessor]
|
|
197
|
+
* - uuid.property[accessor]
|
|
198
|
+
* - uuid.objectName[objectIndex].propertyName[propertyIndex]
|
|
199
|
+
* - parentName/nodeName.property
|
|
200
|
+
* - parentName/parentName/nodeName.property[index]
|
|
201
|
+
* - .bone[Armature.DEF_cog].position
|
|
202
|
+
* - scene:helium_balloon_model:helium_balloon_model.position
|
|
203
|
+
*
|
|
204
|
+
* @static
|
|
205
|
+
* @param {string} trackName - The track name to parse.
|
|
206
|
+
* @return {Object} The parsed track name as an object.
|
|
207
|
+
*/
|
|
148
208
|
static parseTrackName( trackName ) {
|
|
149
209
|
|
|
150
210
|
const matches = _trackRe.exec( trackName );
|
|
@@ -193,6 +253,15 @@ class PropertyBinding {
|
|
|
193
253
|
|
|
194
254
|
}
|
|
195
255
|
|
|
256
|
+
/**
|
|
257
|
+
* Searches for a node in the hierarchy of the given root object by the given
|
|
258
|
+
* node name.
|
|
259
|
+
*
|
|
260
|
+
* @static
|
|
261
|
+
* @param {Object} root - The root object.
|
|
262
|
+
* @param {string|number} nodeName - The name of the node.
|
|
263
|
+
* @return {?Object} The found node. Returns `null` if no object was found.
|
|
264
|
+
*/
|
|
196
265
|
static findNode( root, nodeName ) {
|
|
197
266
|
|
|
198
267
|
if ( nodeName === undefined || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {
|
|
@@ -411,7 +480,9 @@ class PropertyBinding {
|
|
|
411
480
|
|
|
412
481
|
}
|
|
413
482
|
|
|
414
|
-
|
|
483
|
+
/**
|
|
484
|
+
* Creates a getter / setter pair for the property tracked by this binding.
|
|
485
|
+
*/
|
|
415
486
|
bind() {
|
|
416
487
|
|
|
417
488
|
let targetObject = this.node;
|
|
@@ -644,6 +715,9 @@ class PropertyBinding {
|
|
|
644
715
|
|
|
645
716
|
}
|
|
646
717
|
|
|
718
|
+
/**
|
|
719
|
+
* Unbinds the property.
|
|
720
|
+
*/
|
|
647
721
|
unbind() {
|
|
648
722
|
|
|
649
723
|
this.node = null;
|