@plastic-software/three 0.167.3 → 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 +36277 -24023
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46743
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50670
- package/build/three.webgpu.min.js +2 -2
- 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/points.glsl.js +2 -0
- 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/audio/Audio.js
CHANGED
|
@@ -1,48 +1,239 @@
|
|
|
1
1
|
import { Object3D } from '../core/Object3D.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Represents a non-positional ( global ) audio object.
|
|
5
|
+
*
|
|
6
|
+
* This and related audio modules make use of the [Web Audio API]{@link https://www.w3.org/TR/webaudio-1.1/}.
|
|
7
|
+
*
|
|
8
|
+
* ```js
|
|
9
|
+
* // create an AudioListener and add it to the camera
|
|
10
|
+
* const listener = new THREE.AudioListener();
|
|
11
|
+
* camera.add( listener );
|
|
12
|
+
*
|
|
13
|
+
* // create a global audio source
|
|
14
|
+
* const sound = new THREE.Audio( listener );
|
|
15
|
+
*
|
|
16
|
+
* // load a sound and set it as the Audio object's buffer
|
|
17
|
+
* const audioLoader = new THREE.AudioLoader();
|
|
18
|
+
* audioLoader.load( 'sounds/ambient.ogg', function( buffer ) {
|
|
19
|
+
* sound.setBuffer( buffer );
|
|
20
|
+
* sound.setLoop( true );
|
|
21
|
+
* sound.setVolume( 0.5 );
|
|
22
|
+
* sound.play();
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @augments Object3D
|
|
27
|
+
*/
|
|
3
28
|
class Audio extends Object3D {
|
|
4
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Constructs a new audio.
|
|
32
|
+
*
|
|
33
|
+
* @param {AudioListener} listener - The global audio listener.
|
|
34
|
+
*/
|
|
5
35
|
constructor( listener ) {
|
|
6
36
|
|
|
7
37
|
super();
|
|
8
38
|
|
|
9
39
|
this.type = 'Audio';
|
|
10
40
|
|
|
41
|
+
/**
|
|
42
|
+
* The global audio listener.
|
|
43
|
+
*
|
|
44
|
+
* @type {AudioListener}
|
|
45
|
+
* @readonly
|
|
46
|
+
*/
|
|
11
47
|
this.listener = listener;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The audio context.
|
|
51
|
+
*
|
|
52
|
+
* @type {AudioContext}
|
|
53
|
+
* @readonly
|
|
54
|
+
*/
|
|
12
55
|
this.context = listener.context;
|
|
13
56
|
|
|
57
|
+
/**
|
|
58
|
+
* The gain node used for volume control.
|
|
59
|
+
*
|
|
60
|
+
* @type {GainNode}
|
|
61
|
+
* @readonly
|
|
62
|
+
*/
|
|
14
63
|
this.gain = this.context.createGain();
|
|
15
64
|
this.gain.connect( listener.getInput() );
|
|
16
65
|
|
|
66
|
+
/**
|
|
67
|
+
* Whether to start playback automatically or not.
|
|
68
|
+
*
|
|
69
|
+
* @type {boolean}
|
|
70
|
+
* @default false
|
|
71
|
+
*/
|
|
17
72
|
this.autoplay = false;
|
|
18
73
|
|
|
74
|
+
/**
|
|
75
|
+
* A reference to an audio buffer.
|
|
76
|
+
*
|
|
77
|
+
* Defined via {@link Audio#setBuffer}.
|
|
78
|
+
*
|
|
79
|
+
* @type {?AudioBuffer}
|
|
80
|
+
* @default null
|
|
81
|
+
* @readonly
|
|
82
|
+
*/
|
|
19
83
|
this.buffer = null;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Modify pitch, measured in cents. +/- 100 is a semitone.
|
|
87
|
+
* +/- 1200 is an octave.
|
|
88
|
+
*
|
|
89
|
+
* Defined via {@link Audio#setDetune}.
|
|
90
|
+
*
|
|
91
|
+
* @type {number}
|
|
92
|
+
* @default 0
|
|
93
|
+
* @readonly
|
|
94
|
+
*/
|
|
20
95
|
this.detune = 0;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Whether the audio should loop or not.
|
|
99
|
+
*
|
|
100
|
+
* Defined via {@link Audio#setLoop}.
|
|
101
|
+
*
|
|
102
|
+
* @type {boolean}
|
|
103
|
+
* @default false
|
|
104
|
+
* @readonly
|
|
105
|
+
*/
|
|
21
106
|
this.loop = false;
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Defines where in the audio buffer the replay should
|
|
110
|
+
* start, in seconds.
|
|
111
|
+
*
|
|
112
|
+
* @type {number}
|
|
113
|
+
* @default 0
|
|
114
|
+
*/
|
|
22
115
|
this.loopStart = 0;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Defines where in the audio buffer the replay should
|
|
119
|
+
* stop, in seconds.
|
|
120
|
+
*
|
|
121
|
+
* @type {number}
|
|
122
|
+
* @default 0
|
|
123
|
+
*/
|
|
23
124
|
this.loopEnd = 0;
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* An offset to the time within the audio buffer the playback
|
|
128
|
+
* should begin, in seconds.
|
|
129
|
+
*
|
|
130
|
+
* @type {number}
|
|
131
|
+
* @default 0
|
|
132
|
+
*/
|
|
24
133
|
this.offset = 0;
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Overrides the default duration of the audio.
|
|
137
|
+
*
|
|
138
|
+
* @type {undefined|number}
|
|
139
|
+
* @default undefined
|
|
140
|
+
*/
|
|
25
141
|
this.duration = undefined;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* The playback speed.
|
|
145
|
+
*
|
|
146
|
+
* Defined via {@link Audio#setPlaybackRate}.
|
|
147
|
+
*
|
|
148
|
+
* @type {number}
|
|
149
|
+
* @readonly
|
|
150
|
+
* @default 1
|
|
151
|
+
*/
|
|
26
152
|
this.playbackRate = 1;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Indicates whether the audio is playing or not.
|
|
156
|
+
*
|
|
157
|
+
* This flag will be automatically set when using {@link Audio#play},
|
|
158
|
+
* {@link Audio#pause}, {@link Audio#stop}.
|
|
159
|
+
*
|
|
160
|
+
* @type {boolean}
|
|
161
|
+
* @readonly
|
|
162
|
+
* @default false
|
|
163
|
+
*/
|
|
27
164
|
this.isPlaying = false;
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Indicates whether the audio playback can be controlled
|
|
168
|
+
* with method like {@link Audio#play} or {@link Audio#pause}.
|
|
169
|
+
*
|
|
170
|
+
* This flag will be automatically set when audio sources are
|
|
171
|
+
* defined.
|
|
172
|
+
*
|
|
173
|
+
* @type {boolean}
|
|
174
|
+
* @readonly
|
|
175
|
+
* @default true
|
|
176
|
+
*/
|
|
28
177
|
this.hasPlaybackControl = true;
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Holds a reference to the current audio source.
|
|
181
|
+
*
|
|
182
|
+
* The property is automatically by one of the `set*()` methods.
|
|
183
|
+
*
|
|
184
|
+
* @type {?AudioNode}
|
|
185
|
+
* @readonly
|
|
186
|
+
* @default null
|
|
187
|
+
*/
|
|
29
188
|
this.source = null;
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Defines the source type.
|
|
192
|
+
*
|
|
193
|
+
* The property is automatically by one of the `set*()` methods.
|
|
194
|
+
*
|
|
195
|
+
* @type {('empty'|'audioNode'|'mediaNode'|'mediaStreamNode'|'buffer')}
|
|
196
|
+
* @readonly
|
|
197
|
+
* @default 'empty'
|
|
198
|
+
*/
|
|
30
199
|
this.sourceType = 'empty';
|
|
31
200
|
|
|
32
201
|
this._startedAt = 0;
|
|
33
202
|
this._progress = 0;
|
|
34
203
|
this._connected = false;
|
|
35
204
|
|
|
205
|
+
/**
|
|
206
|
+
* Can be used to apply a variety of low-order filters to create
|
|
207
|
+
* more complex sound effects e.g. via `BiquadFilterNode`.
|
|
208
|
+
*
|
|
209
|
+
* The property is automatically set by {@link Audio#setFilters}.
|
|
210
|
+
*
|
|
211
|
+
* @type {Array<AudioNode>}
|
|
212
|
+
* @readonly
|
|
213
|
+
*/
|
|
36
214
|
this.filters = [];
|
|
37
215
|
|
|
38
216
|
}
|
|
39
217
|
|
|
218
|
+
/**
|
|
219
|
+
* Returns the output audio node.
|
|
220
|
+
*
|
|
221
|
+
* @return {GainNode} The output node.
|
|
222
|
+
*/
|
|
40
223
|
getOutput() {
|
|
41
224
|
|
|
42
225
|
return this.gain;
|
|
43
226
|
|
|
44
227
|
}
|
|
45
228
|
|
|
229
|
+
/**
|
|
230
|
+
* Sets the given audio node as the source of this instance.
|
|
231
|
+
*
|
|
232
|
+
* {@link Audio#sourceType} is set to `audioNode` and {@link Audio#hasPlaybackControl} to `false`.
|
|
233
|
+
*
|
|
234
|
+
* @param {AudioNode} audioNode - The audio node like an instance of `OscillatorNode`.
|
|
235
|
+
* @return {Audio} A reference to this instance.
|
|
236
|
+
*/
|
|
46
237
|
setNodeSource( audioNode ) {
|
|
47
238
|
|
|
48
239
|
this.hasPlaybackControl = false;
|
|
@@ -54,6 +245,14 @@ class Audio extends Object3D {
|
|
|
54
245
|
|
|
55
246
|
}
|
|
56
247
|
|
|
248
|
+
/**
|
|
249
|
+
* Sets the given media element as the source of this instance.
|
|
250
|
+
*
|
|
251
|
+
* {@link Audio#sourceType} is set to `mediaNode` and {@link Audio#hasPlaybackControl} to `false`.
|
|
252
|
+
*
|
|
253
|
+
* @param {HTMLMediaElement} mediaElement - The media element.
|
|
254
|
+
* @return {Audio} A reference to this instance.
|
|
255
|
+
*/
|
|
57
256
|
setMediaElementSource( mediaElement ) {
|
|
58
257
|
|
|
59
258
|
this.hasPlaybackControl = false;
|
|
@@ -65,6 +264,14 @@ class Audio extends Object3D {
|
|
|
65
264
|
|
|
66
265
|
}
|
|
67
266
|
|
|
267
|
+
/**
|
|
268
|
+
* Sets the given media stream as the source of this instance.
|
|
269
|
+
*
|
|
270
|
+
* {@link Audio#sourceType} is set to `mediaStreamNode` and {@link Audio#hasPlaybackControl} to `false`.
|
|
271
|
+
*
|
|
272
|
+
* @param {MediaStream} mediaStream - The media stream.
|
|
273
|
+
* @return {Audio} A reference to this instance.
|
|
274
|
+
*/
|
|
68
275
|
setMediaStreamSource( mediaStream ) {
|
|
69
276
|
|
|
70
277
|
this.hasPlaybackControl = false;
|
|
@@ -76,6 +283,14 @@ class Audio extends Object3D {
|
|
|
76
283
|
|
|
77
284
|
}
|
|
78
285
|
|
|
286
|
+
/**
|
|
287
|
+
* Sets the given audio buffer as the source of this instance.
|
|
288
|
+
*
|
|
289
|
+
* {@link Audio#sourceType} is set to `buffer` and {@link Audio#hasPlaybackControl} to `true`.
|
|
290
|
+
*
|
|
291
|
+
* @param {AudioBuffer} audioBuffer - The audio buffer.
|
|
292
|
+
* @return {Audio} A reference to this instance.
|
|
293
|
+
*/
|
|
79
294
|
setBuffer( audioBuffer ) {
|
|
80
295
|
|
|
81
296
|
this.buffer = audioBuffer;
|
|
@@ -87,6 +302,14 @@ class Audio extends Object3D {
|
|
|
87
302
|
|
|
88
303
|
}
|
|
89
304
|
|
|
305
|
+
/**
|
|
306
|
+
* Starts the playback of the audio.
|
|
307
|
+
*
|
|
308
|
+
* Can only be used with compatible audio sources that allow playback control.
|
|
309
|
+
*
|
|
310
|
+
* @param {number} [delay=0] - The delay, in seconds, at which the audio should start playing.
|
|
311
|
+
* @return {Audio|undefined} A reference to this instance.
|
|
312
|
+
*/
|
|
90
313
|
play( delay = 0 ) {
|
|
91
314
|
|
|
92
315
|
if ( this.isPlaying === true ) {
|
|
@@ -124,6 +347,13 @@ class Audio extends Object3D {
|
|
|
124
347
|
|
|
125
348
|
}
|
|
126
349
|
|
|
350
|
+
/**
|
|
351
|
+
* Pauses the playback of the audio.
|
|
352
|
+
*
|
|
353
|
+
* Can only be used with compatible audio sources that allow playback control.
|
|
354
|
+
*
|
|
355
|
+
* @return {Audio|undefined} A reference to this instance.
|
|
356
|
+
*/
|
|
127
357
|
pause() {
|
|
128
358
|
|
|
129
359
|
if ( this.hasPlaybackControl === false ) {
|
|
@@ -158,7 +388,15 @@ class Audio extends Object3D {
|
|
|
158
388
|
|
|
159
389
|
}
|
|
160
390
|
|
|
161
|
-
|
|
391
|
+
/**
|
|
392
|
+
* Stops the playback of the audio.
|
|
393
|
+
*
|
|
394
|
+
* Can only be used with compatible audio sources that allow playback control.
|
|
395
|
+
*
|
|
396
|
+
* @param {number} [delay=0] - The delay, in seconds, at which the audio should stop playing.
|
|
397
|
+
* @return {Audio|undefined} A reference to this instance.
|
|
398
|
+
*/
|
|
399
|
+
stop( delay = 0 ) {
|
|
162
400
|
|
|
163
401
|
if ( this.hasPlaybackControl === false ) {
|
|
164
402
|
|
|
@@ -171,7 +409,7 @@ class Audio extends Object3D {
|
|
|
171
409
|
|
|
172
410
|
if ( this.source !== null ) {
|
|
173
411
|
|
|
174
|
-
this.source.stop();
|
|
412
|
+
this.source.stop( this.context.currentTime + delay );
|
|
175
413
|
this.source.onended = null;
|
|
176
414
|
|
|
177
415
|
}
|
|
@@ -182,6 +420,12 @@ class Audio extends Object3D {
|
|
|
182
420
|
|
|
183
421
|
}
|
|
184
422
|
|
|
423
|
+
/**
|
|
424
|
+
* Connects to the audio source. This is used internally on
|
|
425
|
+
* initialisation and when setting / removing filters.
|
|
426
|
+
*
|
|
427
|
+
* @return {Audio} A reference to this instance.
|
|
428
|
+
*/
|
|
185
429
|
connect() {
|
|
186
430
|
|
|
187
431
|
if ( this.filters.length > 0 ) {
|
|
@@ -208,6 +452,12 @@ class Audio extends Object3D {
|
|
|
208
452
|
|
|
209
453
|
}
|
|
210
454
|
|
|
455
|
+
/**
|
|
456
|
+
* Disconnects to the audio source. This is used internally on
|
|
457
|
+
* initialisation and when setting / removing filters.
|
|
458
|
+
*
|
|
459
|
+
* @return {Audio|undefined} A reference to this instance.
|
|
460
|
+
*/
|
|
211
461
|
disconnect() {
|
|
212
462
|
|
|
213
463
|
if ( this._connected === false ) {
|
|
@@ -240,12 +490,23 @@ class Audio extends Object3D {
|
|
|
240
490
|
|
|
241
491
|
}
|
|
242
492
|
|
|
493
|
+
/**
|
|
494
|
+
* Returns the current set filters.
|
|
495
|
+
*
|
|
496
|
+
* @return {Array<AudioNode>} The list of filters.
|
|
497
|
+
*/
|
|
243
498
|
getFilters() {
|
|
244
499
|
|
|
245
500
|
return this.filters;
|
|
246
501
|
|
|
247
502
|
}
|
|
248
503
|
|
|
504
|
+
/**
|
|
505
|
+
* Sets an array of filters and connects them with the audio source.
|
|
506
|
+
*
|
|
507
|
+
* @param {Array<AudioNode>} [value] - A list of filters.
|
|
508
|
+
* @return {Audio} A reference to this instance.
|
|
509
|
+
*/
|
|
249
510
|
setFilters( value ) {
|
|
250
511
|
|
|
251
512
|
if ( ! value ) value = [];
|
|
@@ -266,6 +527,12 @@ class Audio extends Object3D {
|
|
|
266
527
|
|
|
267
528
|
}
|
|
268
529
|
|
|
530
|
+
/**
|
|
531
|
+
* Defines the detuning of oscillation in cents.
|
|
532
|
+
*
|
|
533
|
+
* @param {number} value - The detuning of oscillation in cents.
|
|
534
|
+
* @return {Audio} A reference to this instance.
|
|
535
|
+
*/
|
|
269
536
|
setDetune( value ) {
|
|
270
537
|
|
|
271
538
|
this.detune = value;
|
|
@@ -280,24 +547,48 @@ class Audio extends Object3D {
|
|
|
280
547
|
|
|
281
548
|
}
|
|
282
549
|
|
|
550
|
+
/**
|
|
551
|
+
* Returns the detuning of oscillation in cents.
|
|
552
|
+
*
|
|
553
|
+
* @return {number} The detuning of oscillation in cents.
|
|
554
|
+
*/
|
|
283
555
|
getDetune() {
|
|
284
556
|
|
|
285
557
|
return this.detune;
|
|
286
558
|
|
|
287
559
|
}
|
|
288
560
|
|
|
561
|
+
/**
|
|
562
|
+
* Returns the first filter in the list of filters.
|
|
563
|
+
*
|
|
564
|
+
* @return {AudioNode|undefined} The first filter in the list of filters.
|
|
565
|
+
*/
|
|
289
566
|
getFilter() {
|
|
290
567
|
|
|
291
568
|
return this.getFilters()[ 0 ];
|
|
292
569
|
|
|
293
570
|
}
|
|
294
571
|
|
|
572
|
+
/**
|
|
573
|
+
* Applies a single filter node to the audio.
|
|
574
|
+
*
|
|
575
|
+
* @param {AudioNode} [filter] - The filter to set.
|
|
576
|
+
* @return {Audio} A reference to this instance.
|
|
577
|
+
*/
|
|
295
578
|
setFilter( filter ) {
|
|
296
579
|
|
|
297
580
|
return this.setFilters( filter ? [ filter ] : [] );
|
|
298
581
|
|
|
299
582
|
}
|
|
300
583
|
|
|
584
|
+
/**
|
|
585
|
+
* Sets the playback rate.
|
|
586
|
+
*
|
|
587
|
+
* Can only be used with compatible audio sources that allow playback control.
|
|
588
|
+
*
|
|
589
|
+
* @param {number} [value] - The playback rate to set.
|
|
590
|
+
* @return {Audio|undefined} A reference to this instance.
|
|
591
|
+
*/
|
|
301
592
|
setPlaybackRate( value ) {
|
|
302
593
|
|
|
303
594
|
if ( this.hasPlaybackControl === false ) {
|
|
@@ -319,18 +610,34 @@ class Audio extends Object3D {
|
|
|
319
610
|
|
|
320
611
|
}
|
|
321
612
|
|
|
613
|
+
/**
|
|
614
|
+
* Returns the current playback rate.
|
|
615
|
+
|
|
616
|
+
* @return {number} The playback rate.
|
|
617
|
+
*/
|
|
322
618
|
getPlaybackRate() {
|
|
323
619
|
|
|
324
620
|
return this.playbackRate;
|
|
325
621
|
|
|
326
622
|
}
|
|
327
623
|
|
|
624
|
+
/**
|
|
625
|
+
* Automatically called when playback finished.
|
|
626
|
+
*/
|
|
328
627
|
onEnded() {
|
|
329
628
|
|
|
330
629
|
this.isPlaying = false;
|
|
630
|
+
this._progress = 0;
|
|
331
631
|
|
|
332
632
|
}
|
|
333
633
|
|
|
634
|
+
/**
|
|
635
|
+
* Returns the loop flag.
|
|
636
|
+
*
|
|
637
|
+
* Can only be used with compatible audio sources that allow playback control.
|
|
638
|
+
*
|
|
639
|
+
* @return {boolean} Whether the audio should loop or not.
|
|
640
|
+
*/
|
|
334
641
|
getLoop() {
|
|
335
642
|
|
|
336
643
|
if ( this.hasPlaybackControl === false ) {
|
|
@@ -344,6 +651,14 @@ class Audio extends Object3D {
|
|
|
344
651
|
|
|
345
652
|
}
|
|
346
653
|
|
|
654
|
+
/**
|
|
655
|
+
* Sets the loop flag.
|
|
656
|
+
*
|
|
657
|
+
* Can only be used with compatible audio sources that allow playback control.
|
|
658
|
+
*
|
|
659
|
+
* @param {boolean} value - Whether the audio should loop or not.
|
|
660
|
+
* @return {Audio|undefined} A reference to this instance.
|
|
661
|
+
*/
|
|
347
662
|
setLoop( value ) {
|
|
348
663
|
|
|
349
664
|
if ( this.hasPlaybackControl === false ) {
|
|
@@ -365,6 +680,13 @@ class Audio extends Object3D {
|
|
|
365
680
|
|
|
366
681
|
}
|
|
367
682
|
|
|
683
|
+
/**
|
|
684
|
+
* Sets the loop start value which defines where in the audio buffer the replay should
|
|
685
|
+
* start, in seconds.
|
|
686
|
+
*
|
|
687
|
+
* @param {number} value - The loop start value.
|
|
688
|
+
* @return {Audio} A reference to this instance.
|
|
689
|
+
*/
|
|
368
690
|
setLoopStart( value ) {
|
|
369
691
|
|
|
370
692
|
this.loopStart = value;
|
|
@@ -373,6 +695,13 @@ class Audio extends Object3D {
|
|
|
373
695
|
|
|
374
696
|
}
|
|
375
697
|
|
|
698
|
+
/**
|
|
699
|
+
* Sets the loop end value which defines where in the audio buffer the replay should
|
|
700
|
+
* stop, in seconds.
|
|
701
|
+
*
|
|
702
|
+
* @param {number} value - The loop end value.
|
|
703
|
+
* @return {Audio} A reference to this instance.
|
|
704
|
+
*/
|
|
376
705
|
setLoopEnd( value ) {
|
|
377
706
|
|
|
378
707
|
this.loopEnd = value;
|
|
@@ -381,12 +710,23 @@ class Audio extends Object3D {
|
|
|
381
710
|
|
|
382
711
|
}
|
|
383
712
|
|
|
713
|
+
/**
|
|
714
|
+
* Returns the volume.
|
|
715
|
+
*
|
|
716
|
+
* @return {number} The volume.
|
|
717
|
+
*/
|
|
384
718
|
getVolume() {
|
|
385
719
|
|
|
386
720
|
return this.gain.gain.value;
|
|
387
721
|
|
|
388
722
|
}
|
|
389
723
|
|
|
724
|
+
/**
|
|
725
|
+
* Sets the volume.
|
|
726
|
+
*
|
|
727
|
+
* @param {number} value - The volume to set.
|
|
728
|
+
* @return {Audio} A reference to this instance.
|
|
729
|
+
*/
|
|
390
730
|
setVolume( value ) {
|
|
391
731
|
|
|
392
732
|
this.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );
|
|
@@ -395,6 +735,43 @@ class Audio extends Object3D {
|
|
|
395
735
|
|
|
396
736
|
}
|
|
397
737
|
|
|
738
|
+
copy( source, recursive ) {
|
|
739
|
+
|
|
740
|
+
super.copy( source, recursive );
|
|
741
|
+
|
|
742
|
+
if ( source.sourceType !== 'buffer' ) {
|
|
743
|
+
|
|
744
|
+
console.warn( 'THREE.Audio: Audio source type cannot be copied.' );
|
|
745
|
+
|
|
746
|
+
return this;
|
|
747
|
+
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
this.autoplay = source.autoplay;
|
|
751
|
+
|
|
752
|
+
this.buffer = source.buffer;
|
|
753
|
+
this.detune = source.detune;
|
|
754
|
+
this.loop = source.loop;
|
|
755
|
+
this.loopStart = source.loopStart;
|
|
756
|
+
this.loopEnd = source.loopEnd;
|
|
757
|
+
this.offset = source.offset;
|
|
758
|
+
this.duration = source.duration;
|
|
759
|
+
this.playbackRate = source.playbackRate;
|
|
760
|
+
this.hasPlaybackControl = source.hasPlaybackControl;
|
|
761
|
+
this.sourceType = source.sourceType;
|
|
762
|
+
|
|
763
|
+
this.filters = source.filters.slice();
|
|
764
|
+
|
|
765
|
+
return this;
|
|
766
|
+
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
clone( recursive ) {
|
|
770
|
+
|
|
771
|
+
return new this.constructor( this.listener ).copy( this, recursive );
|
|
772
|
+
|
|
773
|
+
}
|
|
774
|
+
|
|
398
775
|
}
|
|
399
776
|
|
|
400
777
|
export { Audio };
|
|
@@ -1,17 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This class can be used to analyse audio data.
|
|
3
|
+
*
|
|
4
|
+
* ```js
|
|
5
|
+
* // create an AudioListener and add it to the camera
|
|
6
|
+
* const listener = new THREE.AudioListener();
|
|
7
|
+
* camera.add( listener );
|
|
8
|
+
*
|
|
9
|
+
* // create an Audio source
|
|
10
|
+
* const sound = new THREE.Audio( listener );
|
|
11
|
+
*
|
|
12
|
+
* // load a sound and set it as the Audio object's buffer
|
|
13
|
+
* const audioLoader = new THREE.AudioLoader();
|
|
14
|
+
* audioLoader.load( 'sounds/ambient.ogg', function( buffer ) {
|
|
15
|
+
* sound.setBuffer( buffer );
|
|
16
|
+
* sound.setLoop(true);
|
|
17
|
+
* sound.setVolume(0.5);
|
|
18
|
+
* sound.play();
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* // create an AudioAnalyser, passing in the sound and desired fftSize
|
|
22
|
+
* const analyser = new THREE.AudioAnalyser( sound, 32 );
|
|
23
|
+
*
|
|
24
|
+
* // get the average frequency of the sound
|
|
25
|
+
* const data = analyser.getAverageFrequency();
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
1
28
|
class AudioAnalyser {
|
|
2
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Constructs a new audio analyzer.
|
|
32
|
+
*
|
|
33
|
+
* @param {Audio} audio - The audio to analyze.
|
|
34
|
+
* @param {Audio} [fftSize=2048] - The window size in samples that is used when performing a Fast Fourier Transform (FFT) to get frequency domain data.
|
|
35
|
+
*/
|
|
3
36
|
constructor( audio, fftSize = 2048 ) {
|
|
4
37
|
|
|
38
|
+
/**
|
|
39
|
+
* The global audio listener.
|
|
40
|
+
*
|
|
41
|
+
* @type {AnalyserNode}
|
|
42
|
+
*/
|
|
5
43
|
this.analyser = audio.context.createAnalyser();
|
|
6
44
|
this.analyser.fftSize = fftSize;
|
|
7
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Holds the analyzed data.
|
|
48
|
+
*
|
|
49
|
+
* @type {Uint8Array}
|
|
50
|
+
*/
|
|
8
51
|
this.data = new Uint8Array( this.analyser.frequencyBinCount );
|
|
9
52
|
|
|
10
53
|
audio.getOutput().connect( this.analyser );
|
|
11
54
|
|
|
12
55
|
}
|
|
13
56
|
|
|
14
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Returns an array with frequency data of the audio.
|
|
59
|
+
*
|
|
60
|
+
* Each item in the array represents the decibel value for a specific frequency.
|
|
61
|
+
* The frequencies are spread linearly from 0 to 1/2 of the sample rate.
|
|
62
|
+
* For example, for 48000 sample rate, the last item of the array will represent
|
|
63
|
+
* the decibel value for 24000 Hz.
|
|
64
|
+
*
|
|
65
|
+
* @return {Uint8Array} The frequency data.
|
|
66
|
+
*/
|
|
15
67
|
getFrequencyData() {
|
|
16
68
|
|
|
17
69
|
this.analyser.getByteFrequencyData( this.data );
|
|
@@ -20,6 +72,11 @@ class AudioAnalyser {
|
|
|
20
72
|
|
|
21
73
|
}
|
|
22
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Returns the average of the frequencies returned by {@link AudioAnalyser#getFrequencyData}.
|
|
77
|
+
*
|
|
78
|
+
* @return {number} The average frequency.
|
|
79
|
+
*/
|
|
23
80
|
getAverageFrequency() {
|
|
24
81
|
|
|
25
82
|
let value = 0;
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
let _context;
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Manages the global audio context in the engine.
|
|
5
|
+
*
|
|
6
|
+
* @hideconstructor
|
|
7
|
+
*/
|
|
3
8
|
class AudioContext {
|
|
4
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Returns the global native audio context.
|
|
12
|
+
*
|
|
13
|
+
* @return {AudioContext} The native audio context.
|
|
14
|
+
*/
|
|
5
15
|
static getContext() {
|
|
6
16
|
|
|
7
17
|
if ( _context === undefined ) {
|
|
@@ -14,6 +24,11 @@ class AudioContext {
|
|
|
14
24
|
|
|
15
25
|
}
|
|
16
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Allows to set the global native audio context from outside.
|
|
29
|
+
*
|
|
30
|
+
* @param {AudioContext} value - The native context to set.
|
|
31
|
+
*/
|
|
17
32
|
static setContext( value ) {
|
|
18
33
|
|
|
19
34
|
_context = value;
|