super-three 0.173.5 → 0.176.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 +21993 -1359
- package/build/three.core.js +21129 -1188
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +835 -142
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +8 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +19493 -17617
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +19477 -17617
- 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 +144 -42
- 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 +194 -71
- 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 +74 -30
- 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 +51 -5
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +36 -1
- package/examples/jsm/loaders/DDSLoader.js +25 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +71 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +222 -9
- 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 +87 -19
- 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 +56 -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 +90 -70
- 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 +105 -13
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +109 -73
- package/examples/jsm/misc/VolumeSlice.js +91 -48
- 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 +75 -2
- 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 +134 -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 +268 -134
- 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/AST.js +10 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +17 -3
- package/examples/jsm/transpiler/TSLEncoder.js +83 -15
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +24 -25
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +2 -3
- package/examples/jsm/tsl/display/AnamorphicNode.js +8 -9
- package/examples/jsm/tsl/display/BleachBypass.js +1 -2
- package/examples/jsm/tsl/display/BloomNode.js +15 -16
- package/examples/jsm/tsl/display/DenoiseNode.js +9 -10
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +5 -6
- package/examples/jsm/tsl/display/DotScreenNode.js +5 -6
- package/examples/jsm/tsl/display/FXAANode.js +2 -3
- package/examples/jsm/tsl/display/FilmNode.js +9 -8
- package/examples/jsm/tsl/display/GTAONode.js +11 -12
- package/examples/jsm/tsl/display/GaussianBlurNode.js +14 -14
- package/examples/jsm/tsl/display/LensflareNode.js +15 -16
- package/examples/jsm/tsl/display/Lut3DNode.js +4 -5
- package/examples/jsm/tsl/display/MotionBlur.js +1 -2
- package/examples/jsm/tsl/display/OutlineNode.js +7 -8
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -3
- package/examples/jsm/tsl/display/PixelationPassNode.js +14 -15
- package/examples/jsm/tsl/display/RGBShiftNode.js +5 -6
- package/examples/jsm/tsl/display/SMAANode.js +13 -7
- package/examples/jsm/tsl/display/SSAAPassNode.js +7 -7
- package/examples/jsm/tsl/display/SSRNode.js +6 -7
- package/examples/jsm/tsl/display/Sepia.js +1 -2
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -3
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +4 -4
- package/examples/jsm/tsl/display/StereoPassNode.js +2 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +11 -10
- package/examples/jsm/tsl/display/TransitionNode.js +4 -5
- package/examples/jsm/tsl/display/hashBlur.js +1 -2
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +33 -7
- package/examples/jsm/tsl/math/Bayer.js +31 -0
- package/examples/jsm/tsl/utils/Raymarching.js +67 -0
- 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 +3 -4
- package/src/Three.TSL.js +7 -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 +169 -19
- 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/Audio.js +339 -0
- 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 +28 -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 +163 -40
- package/src/cameras/StereoCamera.js +46 -0
- 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/EventDispatcher.js +44 -2
- 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 +593 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +170 -11
- 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 +88 -1
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +13 -780
- package/src/extras/ImageUtils.js +20 -2
- package/src/extras/PMREMGenerator.js +41 -25
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +95 -15
- package/src/extras/core/Curve.js +150 -50
- 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 +63 -0
- 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/extras/lib/earcut.js +685 -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 +39 -0
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +28 -0
- package/src/geometries/ExtrudeGeometry.js +112 -28
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +40 -0
- 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 +45 -5
- 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 +22 -0
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- 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 +130 -0
- 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 +13 -9
- package/src/loaders/nodes/NodeMaterialLoader.js +6 -6
- package/src/loaders/nodes/NodeObjectLoader.js +12 -12
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +481 -4
- 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 +14 -14
- package/src/materials/nodes/LineBasicNodeMaterial.js +3 -3
- package/src/materials/nodes/LineDashedNodeMaterial.js +12 -12
- package/src/materials/nodes/MeshBasicNodeMaterial.js +7 -7
- package/src/materials/nodes/MeshLambertNodeMaterial.js +5 -5
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +3 -3
- package/src/materials/nodes/MeshNormalNodeMaterial.js +8 -4
- package/src/materials/nodes/MeshPhongNodeMaterial.js +9 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +43 -43
- package/src/materials/nodes/MeshSSSNodeMaterial.js +18 -21
- package/src/materials/nodes/MeshStandardNodeMaterial.js +11 -11
- package/src/materials/nodes/MeshToonNodeMaterial.js +4 -4
- package/src/materials/nodes/NodeMaterial.js +66 -47
- package/src/materials/nodes/PointsNodeMaterial.js +6 -6
- package/src/materials/nodes/ShadowNodeMaterial.js +13 -4
- package/src/materials/nodes/SpriteNodeMaterial.js +17 -9
- package/src/materials/nodes/VolumeNodeMaterial.js +25 -128
- package/src/materials/nodes/manager/NodeMaterialObserver.js +8 -8
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- 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 +94 -0
- package/src/math/MathUtils.js +405 -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 +262 -6
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +70 -8
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +206 -2
- package/src/math/Vector2.js +388 -2
- package/src/math/Vector3.js +541 -4
- package/src/math/Vector4.js +393 -0
- 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 +1 -0
- package/src/nodes/TSL.js +1 -0
- package/src/nodes/accessors/AccessorsUtils.js +4 -2
- package/src/nodes/accessors/Arrays.js +6 -6
- package/src/nodes/accessors/BatchNode.js +10 -11
- package/src/nodes/accessors/Bitangent.js +6 -2
- package/src/nodes/accessors/BufferAttributeNode.js +33 -31
- package/src/nodes/accessors/BufferNode.js +12 -13
- package/src/nodes/accessors/BuiltinNode.js +7 -8
- package/src/nodes/accessors/Camera.js +9 -2
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +17 -19
- package/src/nodes/accessors/InstanceNode.js +10 -11
- package/src/nodes/accessors/InstancedMeshNode.js +3 -4
- package/src/nodes/accessors/Lights.js +12 -15
- package/src/nodes/accessors/MaterialNode.js +45 -9
- package/src/nodes/accessors/MaterialProperties.js +51 -2
- package/src/nodes/accessors/MaterialReferenceNode.js +11 -12
- package/src/nodes/accessors/ModelNode.js +20 -3
- package/src/nodes/accessors/ModelViewProjectionNode.js +1 -2
- package/src/nodes/accessors/MorphNode.js +29 -26
- package/src/nodes/accessors/Normal.js +11 -3
- package/src/nodes/accessors/Object3DNode.js +51 -16
- package/src/nodes/accessors/PointUVNode.js +2 -3
- package/src/nodes/accessors/Position.js +8 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +29 -29
- package/src/nodes/accessors/ReferenceNode.js +31 -31
- package/src/nodes/accessors/ReflectVector.js +4 -2
- package/src/nodes/accessors/RendererReferenceNode.js +9 -10
- package/src/nodes/accessors/SceneNode.js +5 -4
- package/src/nodes/accessors/SkinningNode.js +53 -44
- package/src/nodes/accessors/StorageBufferNode.js +24 -24
- package/src/nodes/accessors/StorageTextureNode.js +17 -17
- package/src/nodes/accessors/Tangent.js +6 -2
- package/src/nodes/accessors/Texture3DNode.js +11 -12
- package/src/nodes/accessors/TextureBicubic.js +2 -3
- package/src/nodes/accessors/TextureNode.js +68 -47
- package/src/nodes/accessors/TextureSizeNode.js +5 -6
- package/src/nodes/accessors/UV.js +2 -3
- package/src/nodes/accessors/UniformArrayNode.js +24 -24
- package/src/nodes/accessors/UserDataNode.js +11 -12
- package/src/nodes/accessors/VelocityNode.js +4 -5
- package/src/nodes/accessors/VertexColorNode.js +7 -8
- package/src/nodes/code/CodeNode.js +15 -13
- package/src/nodes/code/ExpressionNode.js +8 -9
- package/src/nodes/code/FunctionCallNode.js +29 -9
- package/src/nodes/code/FunctionNode.js +1 -1
- package/src/nodes/code/ScriptableNode.js +27 -28
- package/src/nodes/code/ScriptableValueNode.js +11 -12
- package/src/nodes/core/ArrayNode.js +29 -12
- package/src/nodes/core/AssignNode.js +4 -5
- package/src/nodes/core/AttributeNode.js +8 -9
- package/src/nodes/core/BypassNode.js +3 -4
- package/src/nodes/core/CacheNode.js +5 -6
- package/src/nodes/core/ConstNode.js +4 -4
- package/src/nodes/core/ContextNode.js +9 -9
- package/src/nodes/core/IndexNode.js +8 -4
- package/src/nodes/core/InputNode.js +7 -7
- package/src/nodes/core/LightingModel.js +17 -17
- package/src/nodes/core/MRTNode.js +9 -10
- package/src/nodes/core/Node.js +49 -37
- package/src/nodes/core/NodeAttribute.js +7 -7
- package/src/nodes/core/NodeBuilder.js +248 -175
- package/src/nodes/core/NodeCache.js +4 -4
- package/src/nodes/core/NodeCode.js +6 -6
- package/src/nodes/core/NodeFrame.js +10 -10
- package/src/nodes/core/NodeFunction.js +8 -8
- package/src/nodes/core/NodeFunctionInput.js +8 -8
- package/src/nodes/core/NodeParser.js +1 -1
- package/src/nodes/core/NodeUniform.js +7 -7
- package/src/nodes/core/NodeUtils.js +22 -24
- package/src/nodes/core/NodeVar.js +9 -9
- package/src/nodes/core/NodeVarying.js +4 -4
- package/src/nodes/core/OutputStructNode.js +2 -3
- package/src/nodes/core/ParameterNode.js +6 -7
- package/src/nodes/core/PropertyNode.js +41 -13
- package/src/nodes/core/StackNode.js +11 -12
- package/src/nodes/core/StructNode.js +2 -3
- package/src/nodes/core/StructTypeNode.js +10 -6
- package/src/nodes/core/TempNode.js +3 -3
- package/src/nodes/core/UniformGroupNode.js +15 -12
- package/src/nodes/core/UniformNode.js +9 -10
- package/src/nodes/core/VarNode.js +14 -18
- package/src/nodes/core/VaryingNode.js +10 -10
- package/src/nodes/core/constants.js +0 -2
- package/src/nodes/display/BlendModes.js +21 -14
- package/src/nodes/display/BumpMapNode.js +5 -6
- package/src/nodes/display/ColorAdjustment.js +13 -9
- package/src/nodes/display/ColorSpaceFunctions.js +4 -4
- package/src/nodes/display/ColorSpaceNode.js +15 -12
- package/src/nodes/display/FrontFacingNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +5 -6
- package/src/nodes/display/PassNode.js +122 -35
- package/src/nodes/display/PosterizeNode.js +2 -3
- package/src/nodes/display/RenderOutputNode.js +8 -9
- package/src/nodes/display/ScreenNode.js +16 -7
- package/src/nodes/display/ToneMappingFunctions.js +12 -8
- package/src/nodes/display/ToneMappingNode.js +8 -8
- package/src/nodes/display/ToonOutlinePassNode.js +3 -4
- package/src/nodes/display/ViewportDepthNode.js +15 -7
- package/src/nodes/display/ViewportDepthTextureNode.js +6 -7
- package/src/nodes/display/ViewportSharedTextureNode.js +6 -7
- package/src/nodes/display/ViewportTextureNode.js +16 -16
- package/src/nodes/fog/Fog.js +5 -2
- package/src/nodes/functions/BSDF/LTC.js +45 -1
- package/src/nodes/functions/BasicLightingModel.js +5 -8
- package/src/nodes/functions/PhongLightingModel.js +6 -8
- package/src/nodes/functions/PhysicalLightingModel.js +40 -42
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/ToonLightingModel.js +5 -6
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +8 -8
- package/src/nodes/geometry/RangeNode.js +4 -5
- package/src/nodes/gpgpu/AtomicFunctionNode.js +33 -48
- package/src/nodes/gpgpu/BarrierNode.js +6 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +26 -31
- package/src/nodes/gpgpu/ComputeNode.js +43 -16
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +16 -17
- package/src/nodes/lighting/AONode.js +2 -2
- package/src/nodes/lighting/AmbientLightNode.js +1 -1
- package/src/nodes/lighting/AnalyticLightNode.js +50 -9
- package/src/nodes/lighting/BasicLightMapNode.js +2 -2
- package/src/nodes/lighting/DirectionalLightNode.js +3 -12
- package/src/nodes/lighting/EnvironmentNode.js +5 -8
- package/src/nodes/lighting/HemisphereLightNode.js +1 -1
- package/src/nodes/lighting/LightProbeNode.js +1 -1
- package/src/nodes/lighting/LightUtils.js +1 -5
- package/src/nodes/lighting/LightingContextNode.js +10 -10
- package/src/nodes/lighting/LightingNode.js +1 -1
- package/src/nodes/lighting/LightsNode.js +68 -25
- package/src/nodes/lighting/PointLightNode.js +12 -27
- package/src/nodes/lighting/PointShadowNode.js +5 -6
- package/src/nodes/lighting/RectAreaLightNode.js +5 -10
- package/src/nodes/lighting/ShadowBaseNode.js +8 -9
- package/src/nodes/lighting/ShadowNode.js +28 -15
- package/src/nodes/lighting/SpotLightNode.js +8 -19
- package/src/nodes/math/ConditionalNode.js +26 -9
- package/src/nodes/math/Hash.js +2 -3
- package/src/nodes/math/MathNode.js +217 -150
- package/src/nodes/math/MathUtils.js +8 -6
- package/src/nodes/math/OperatorNode.js +198 -89
- package/src/nodes/math/TriNoise3D.js +2 -3
- package/src/nodes/parsers/GLSLNodeFunction.js +3 -3
- package/src/nodes/parsers/GLSLNodeParser.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +61 -37
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +2 -3
- package/src/nodes/shapes/Shapes.js +2 -3
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +117 -19
- package/src/nodes/utils/ArrayElementNode.js +5 -3
- package/src/nodes/utils/ConvertNode.js +3 -3
- package/src/nodes/utils/CubeMapNode.js +7 -8
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/Discard.js +5 -5
- package/src/nodes/utils/EquirectUVNode.js +3 -4
- package/src/nodes/utils/FlipNode.js +3 -3
- package/src/nodes/utils/FunctionOverloadingNode.js +3 -4
- package/src/nodes/utils/JoinNode.js +29 -4
- package/src/nodes/utils/LoopNode.js +67 -35
- package/src/nodes/utils/MatcapUVNode.js +1 -2
- package/src/nodes/utils/MaxMipLevelNode.js +4 -5
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Oscillators.js +8 -6
- package/src/nodes/utils/Packing.js +4 -4
- package/src/nodes/utils/PostProcessingUtils.js +6 -5
- package/src/nodes/utils/RTTNode.js +19 -19
- package/src/nodes/utils/ReflectorNode.js +35 -25
- package/src/nodes/utils/RemapNode.js +9 -9
- package/src/nodes/utils/RotateNode.js +3 -4
- package/src/nodes/utils/SetNode.js +3 -3
- package/src/nodes/utils/SplitNode.js +5 -5
- package/src/nodes/utils/SpriteSheetUVNode.js +4 -5
- package/src/nodes/utils/SpriteUtils.js +5 -6
- package/src/nodes/utils/StorageArrayElementNode.js +3 -4
- package/src/nodes/utils/Timer.js +9 -5
- package/src/nodes/utils/TriplanarTexturesNode.js +20 -20
- package/src/nodes/utils/UVUtils.js +4 -4
- package/src/nodes/utils/ViewportUtils.js +3 -4
- package/src/objects/BatchedMesh.js +319 -32
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +4 -4
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +99 -5
- package/src/objects/Line.js +82 -0
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +75 -0
- package/src/objects/Points.js +60 -0
- package/src/objects/Skeleton.js +105 -0
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- 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 +622 -83
- package/src/renderers/common/Animation.js +6 -6
- package/src/renderers/common/Attributes.js +3 -3
- package/src/renderers/common/Backend.js +40 -31
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/BindGroup.js +5 -5
- package/src/renderers/common/Binding.js +4 -4
- package/src/renderers/common/Bindings.js +10 -0
- package/src/renderers/common/Buffer.js +5 -5
- package/src/renderers/common/BufferUtils.js +7 -9
- package/src/renderers/common/BundleGroup.js +6 -6
- package/src/renderers/common/ChainMap.js +3 -3
- package/src/renderers/common/ClippingContext.js +8 -8
- package/src/renderers/common/Color4.js +8 -8
- package/src/renderers/common/ComputePipeline.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +2 -2
- package/src/renderers/common/Geometries.js +6 -6
- package/src/renderers/common/IndirectStorageBufferAttribute.js +3 -3
- package/src/renderers/common/Info.js +17 -17
- package/src/renderers/common/Pipeline.js +3 -3
- package/src/renderers/common/Pipelines.js +12 -12
- package/src/renderers/common/PostProcessing.js +13 -1
- package/src/renderers/common/ProgrammableStage.js +11 -11
- package/src/renderers/common/QuadMesh.js +5 -3
- package/src/renderers/common/RenderContext.js +24 -24
- package/src/renderers/common/RenderContexts.js +4 -4
- package/src/renderers/common/RenderList.js +16 -16
- package/src/renderers/common/RenderObject.js +27 -27
- package/src/renderers/common/RenderObjects.js +4 -4
- package/src/renderers/common/RenderPipeline.js +1 -1
- package/src/renderers/common/Renderer.js +272 -200
- package/src/renderers/common/RendererUtils.js +0 -2
- package/src/renderers/common/SampledTexture.js +20 -20
- package/src/renderers/common/Sampler.js +5 -5
- package/src/renderers/common/StorageBuffer.js +2 -2
- package/src/renderers/common/StorageBufferAttribute.js +4 -4
- package/src/renderers/common/StorageInstancedBufferAttribute.js +4 -4
- package/src/renderers/common/StorageTexture.js +6 -6
- package/src/renderers/common/Textures.js +6 -6
- package/src/renderers/common/TimestampQueryPool.js +66 -7
- package/src/renderers/common/Uniform.js +26 -26
- package/src/renderers/common/UniformBuffer.js +2 -2
- package/src/renderers/common/UniformsGroup.js +18 -18
- package/src/renderers/common/XRManager.js +369 -54
- package/src/renderers/common/XRRenderTarget.js +5 -5
- package/src/renderers/common/extras/PMREMGenerator.js +62 -37
- package/src/renderers/common/nodes/NodeBuilderState.js +7 -7
- package/src/renderers/common/nodes/NodeLibrary.js +13 -13
- package/src/renderers/common/nodes/NodeSampledTexture.js +12 -12
- package/src/renderers/common/nodes/NodeSampler.js +1 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
- package/src/renderers/common/nodes/NodeUniform.js +9 -9
- package/src/renderers/common/nodes/NodeUniformsGroup.js +3 -3
- package/src/renderers/common/nodes/Nodes.js +13 -13
- 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 +19 -19
- package/src/renderers/webgl-fallback/WebGLBackend.js +163 -146
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +4 -4
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +89 -99
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +5 -5
- package/src/renderers/webgl-fallback/utils/WebGLState.js +97 -47
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +79 -31
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +37 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -3
- package/src/renderers/webgpu/WebGPUBackend.js +200 -119
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +3 -13
- package/src/renderers/webgpu/WebGPURenderer.js +19 -13
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +171 -178
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -3
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +43 -9
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +2 -2
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +18 -10
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +9 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +37 -37
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +31 -18
- package/src/renderers/webgpu/utils/WebGPUUtils.js +9 -9
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +185 -9
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +88 -0
- 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 +61 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +362 -3
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -5,8 +5,6 @@ import { positionLocal } from '../accessors/Position.js';
|
|
|
5
5
|
import { texture } from '../accessors/TextureNode.js';
|
|
6
6
|
import { nodeProxy, float, vec3 } from '../tsl/TSLBase.js';
|
|
7
7
|
|
|
8
|
-
/** @module TriplanarTexturesNode **/
|
|
9
|
-
|
|
10
8
|
/**
|
|
11
9
|
* Can be used for triplanar texture mapping.
|
|
12
10
|
*
|
|
@@ -28,11 +26,11 @@ class TriplanarTexturesNode extends Node {
|
|
|
28
26
|
* Constructs a new triplanar textures node.
|
|
29
27
|
*
|
|
30
28
|
* @param {Node} textureXNode - First texture node.
|
|
31
|
-
* @param {Node
|
|
32
|
-
* @param {Node
|
|
33
|
-
* @param {Node<float
|
|
34
|
-
* @param {Node<vec3
|
|
35
|
-
* @param {Node<vec3
|
|
29
|
+
* @param {?Node} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
30
|
+
* @param {?Node} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
31
|
+
* @param {?Node<float>} [scaleNode=float(1)] - The scale node.
|
|
32
|
+
* @param {?Node<vec3>} [positionNode=positionLocal] - Vertex positions in local space.
|
|
33
|
+
* @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.
|
|
36
34
|
*/
|
|
37
35
|
constructor( textureXNode, textureYNode = null, textureZNode = null, scaleNode = float( 1 ), positionNode = positionLocal, normalNode = normalLocal ) {
|
|
38
36
|
|
|
@@ -48,7 +46,7 @@ class TriplanarTexturesNode extends Node {
|
|
|
48
46
|
/**
|
|
49
47
|
* Second texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
50
48
|
*
|
|
51
|
-
* @type {Node}
|
|
49
|
+
* @type {?Node}
|
|
52
50
|
* @default null
|
|
53
51
|
*/
|
|
54
52
|
this.textureYNode = textureYNode;
|
|
@@ -56,7 +54,7 @@ class TriplanarTexturesNode extends Node {
|
|
|
56
54
|
/**
|
|
57
55
|
* Third texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
58
56
|
*
|
|
59
|
-
* @type {Node}
|
|
57
|
+
* @type {?Node}
|
|
60
58
|
* @default null
|
|
61
59
|
*/
|
|
62
60
|
this.textureZNode = textureZNode;
|
|
@@ -122,27 +120,29 @@ export default TriplanarTexturesNode;
|
|
|
122
120
|
/**
|
|
123
121
|
* TSL function for creating a triplanar textures node.
|
|
124
122
|
*
|
|
123
|
+
* @tsl
|
|
125
124
|
* @function
|
|
126
125
|
* @param {Node} textureXNode - First texture node.
|
|
127
|
-
* @param {Node
|
|
128
|
-
* @param {Node
|
|
129
|
-
* @param {Node<float
|
|
130
|
-
* @param {Node<vec3
|
|
131
|
-
* @param {Node<vec3
|
|
126
|
+
* @param {?Node} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
127
|
+
* @param {?Node} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
128
|
+
* @param {?Node<float>} [scaleNode=float(1)] - The scale node.
|
|
129
|
+
* @param {?Node<vec3>} [positionNode=positionLocal] - Vertex positions in local space.
|
|
130
|
+
* @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.
|
|
132
131
|
* @returns {TriplanarTexturesNode}
|
|
133
132
|
*/
|
|
134
|
-
export const triplanarTextures = /*@__PURE__*/ nodeProxy( TriplanarTexturesNode );
|
|
133
|
+
export const triplanarTextures = /*@__PURE__*/ nodeProxy( TriplanarTexturesNode ).setParameterLength( 1, 6 );
|
|
135
134
|
|
|
136
135
|
/**
|
|
137
136
|
* TSL function for creating a triplanar textures node.
|
|
138
137
|
*
|
|
138
|
+
* @tsl
|
|
139
139
|
* @function
|
|
140
140
|
* @param {Node} textureXNode - First texture node.
|
|
141
|
-
* @param {Node
|
|
142
|
-
* @param {Node
|
|
143
|
-
* @param {Node<float
|
|
144
|
-
* @param {Node<vec3
|
|
145
|
-
* @param {Node<vec3
|
|
141
|
+
* @param {?Node} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
142
|
+
* @param {?Node} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
143
|
+
* @param {?Node<float>} [scaleNode=float(1)] - The scale node.
|
|
144
|
+
* @param {?Node<vec3>} [positionNode=positionLocal] - Vertex positions in local space.
|
|
145
|
+
* @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.
|
|
146
146
|
* @returns {TriplanarTexturesNode}
|
|
147
147
|
*/
|
|
148
148
|
export const triplanarTexture = ( ...params ) => triplanarTextures( ...params );
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { Fn, vec2 } from '../tsl/TSLBase.js';
|
|
2
2
|
import { rotate } from './RotateNode.js';
|
|
3
3
|
|
|
4
|
-
/** @module UVUtils **/
|
|
5
|
-
|
|
6
4
|
/**
|
|
7
5
|
* Rotates the given uv coordinates around a center point
|
|
8
6
|
*
|
|
9
|
-
* @
|
|
7
|
+
* @tsl
|
|
8
|
+
* @function
|
|
10
9
|
* @param {Node<vec2>} uv - The uv coordinates.
|
|
11
10
|
* @param {Node<float>} rotation - The rotation defined in radians.
|
|
12
11
|
* @param {Node<vec2>} center - The center of rotation
|
|
@@ -21,7 +20,8 @@ export const rotateUV = /*@__PURE__*/ Fn( ( [ uv, rotation, center = vec2( 0.5 )
|
|
|
21
20
|
/**
|
|
22
21
|
* Applies a spherical warping effect to the given uv coordinates.
|
|
23
22
|
*
|
|
24
|
-
* @
|
|
23
|
+
* @tsl
|
|
24
|
+
* @function
|
|
25
25
|
* @param {Node<vec2>} uv - The uv coordinates.
|
|
26
26
|
* @param {Node<float>} strength - The strength of the effect.
|
|
27
27
|
* @param {Node<vec2>} center - The center point
|
|
@@ -3,8 +3,6 @@ import { screenUV } from '../display/ScreenNode.js';
|
|
|
3
3
|
import { viewportDepthTexture } from '../display/ViewportDepthTextureNode.js';
|
|
4
4
|
import { linearDepth } from '../display/ViewportDepthNode.js';
|
|
5
5
|
|
|
6
|
-
/** @module ViewportUtils **/
|
|
7
|
-
|
|
8
6
|
/**
|
|
9
7
|
* A special version of a screen uv function that involves a depth comparison
|
|
10
8
|
* when computing the final uvs. The function mitigates visual errors when
|
|
@@ -12,8 +10,9 @@ import { linearDepth } from '../display/ViewportDepthNode.js';
|
|
|
12
10
|
* objects in front of a refractive surface might appear on the refractive surface
|
|
13
11
|
* which is incorrect.
|
|
14
12
|
*
|
|
15
|
-
* @
|
|
16
|
-
* @
|
|
13
|
+
* @tsl
|
|
14
|
+
* @function
|
|
15
|
+
* @param {?Node<vec2>} uv - Optional uv coordinates. By default `screenUV` is used.
|
|
17
16
|
* @return {Node<vec2>} The update uv coordinates.
|
|
18
17
|
*/
|
|
19
18
|
export const viewportSafeUV = /*@__PURE__*/ Fn( ( [ uv = null ] ) => {
|
|
@@ -141,41 +141,107 @@ function copyArrayContents( src, target ) {
|
|
|
141
141
|
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
+
/**
|
|
145
|
+
* A special version of a mesh with multi draw batch rendering support. Use
|
|
146
|
+
* this class if you have to render a large number of objects with the same
|
|
147
|
+
* material but with different geometries or world transformations. The usage of
|
|
148
|
+
* `BatchedMesh` will help you to reduce the number of draw calls and thus improve the overall
|
|
149
|
+
* rendering performance in your application.
|
|
150
|
+
*
|
|
151
|
+
* ```js
|
|
152
|
+
* const box = new THREE.BoxGeometry( 1, 1, 1 );
|
|
153
|
+
* const sphere = new THREE.SphereGeometry( 1, 12, 12 );
|
|
154
|
+
* const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
|
|
155
|
+
*
|
|
156
|
+
* // initialize and add geometries into the batched mesh
|
|
157
|
+
* const batchedMesh = new BatchedMesh( 10, 5000, 10000, material );
|
|
158
|
+
* const boxGeometryId = batchedMesh.addGeometry( box );
|
|
159
|
+
* const sphereGeometryId = batchedMesh.addGeometry( sphere );
|
|
160
|
+
*
|
|
161
|
+
* // create instances of those geometries
|
|
162
|
+
* const boxInstancedId1 = batchedMesh.addInstance( boxGeometryId );
|
|
163
|
+
* const boxInstancedId2 = batchedMesh.addInstance( boxGeometryId );
|
|
164
|
+
*
|
|
165
|
+
* const sphereInstancedId1 = batchedMesh.addInstance( sphereGeometryId );
|
|
166
|
+
* const sphereInstancedId2 = batchedMesh.addInstance( sphereGeometryId );
|
|
167
|
+
*
|
|
168
|
+
* // position the geometries
|
|
169
|
+
* batchedMesh.setMatrixAt( boxInstancedId1, boxMatrix1 );
|
|
170
|
+
* batchedMesh.setMatrixAt( boxInstancedId2, boxMatrix2 );
|
|
171
|
+
*
|
|
172
|
+
* batchedMesh.setMatrixAt( sphereInstancedId1, sphereMatrix1 );
|
|
173
|
+
* batchedMesh.setMatrixAt( sphereInstancedId2, sphereMatrix2 );
|
|
174
|
+
*
|
|
175
|
+
* scene.add( batchedMesh );
|
|
176
|
+
* ```
|
|
177
|
+
*
|
|
178
|
+
* @augments Mesh
|
|
179
|
+
*/
|
|
144
180
|
class BatchedMesh extends Mesh {
|
|
145
181
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
return this._instanceInfo.length - this._availableInstanceIds.length;
|
|
155
|
-
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
get unusedVertexCount() {
|
|
159
|
-
|
|
160
|
-
return this._maxVertexCount - this._nextVertexStart;
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
get unusedIndexCount() {
|
|
165
|
-
|
|
166
|
-
return this._maxIndexCount - this._nextIndexStart;
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
|
|
182
|
+
/**
|
|
183
|
+
* Constructs a new batched mesh.
|
|
184
|
+
*
|
|
185
|
+
* @param {number} maxInstanceCount - The maximum number of individual instances planned to be added and rendered.
|
|
186
|
+
* @param {number} maxVertexCount - The maximum number of vertices to be used by all unique geometries.
|
|
187
|
+
* @param {number} [maxIndexCount=maxVertexCount*2] - The maximum number of indices to be used by all unique geometries
|
|
188
|
+
* @param {Material|Array<Material>} [material] - The mesh material.
|
|
189
|
+
*/
|
|
170
190
|
constructor( maxInstanceCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material ) {
|
|
171
191
|
|
|
172
192
|
super( new BufferGeometry(), material );
|
|
173
193
|
|
|
194
|
+
/**
|
|
195
|
+
* This flag can be used for type testing.
|
|
196
|
+
*
|
|
197
|
+
* @type {boolean}
|
|
198
|
+
* @readonly
|
|
199
|
+
* @default true
|
|
200
|
+
*/
|
|
174
201
|
this.isBatchedMesh = true;
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* When set ot `true`, the individual objects of a batch are frustum culled.
|
|
205
|
+
*
|
|
206
|
+
* @type {boolean}
|
|
207
|
+
* @default true
|
|
208
|
+
*/
|
|
175
209
|
this.perObjectFrustumCulled = true;
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* When set to `true`, the individual objects of a batch are sorted to improve overdraw-related artifacts.
|
|
213
|
+
* If the material is marked as "transparent" objects are rendered back to front and if not then they are
|
|
214
|
+
* rendered front to back.
|
|
215
|
+
*
|
|
216
|
+
* @type {boolean}
|
|
217
|
+
* @default true
|
|
218
|
+
*/
|
|
176
219
|
this.sortObjects = true;
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* The bounding box of the batched mesh. Can be computed via {@link BatchedMesh#computeBoundingBox}.
|
|
223
|
+
*
|
|
224
|
+
* @type {?Box3}
|
|
225
|
+
* @default null
|
|
226
|
+
*/
|
|
177
227
|
this.boundingBox = null;
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* The bounding sphere of the batched mesh. Can be computed via {@link BatchedMesh#computeBoundingSphere}.
|
|
231
|
+
*
|
|
232
|
+
* @type {?Sphere}
|
|
233
|
+
* @default null
|
|
234
|
+
*/
|
|
178
235
|
this.boundingSphere = null;
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Takes a sort a function that is run before render. The function takes a list of instances to
|
|
239
|
+
* sort and a camera. The objects in the list include a "z" field to perform a depth-ordered
|
|
240
|
+
* sort with.
|
|
241
|
+
*
|
|
242
|
+
* @type {?Function}
|
|
243
|
+
* @default null
|
|
244
|
+
*/
|
|
179
245
|
this.customSort = null;
|
|
180
246
|
|
|
181
247
|
// stores visible, active, and geometry id per instance and reserved buffer ranges for geometries
|
|
@@ -216,6 +282,54 @@ class BatchedMesh extends Mesh {
|
|
|
216
282
|
|
|
217
283
|
}
|
|
218
284
|
|
|
285
|
+
/**
|
|
286
|
+
* The maximum number of individual instances that can be stored in the batch.
|
|
287
|
+
*
|
|
288
|
+
* @type {number}
|
|
289
|
+
* @readonly
|
|
290
|
+
*/
|
|
291
|
+
get maxInstanceCount() {
|
|
292
|
+
|
|
293
|
+
return this._maxInstanceCount;
|
|
294
|
+
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* The instance count.
|
|
299
|
+
*
|
|
300
|
+
* @type {number}
|
|
301
|
+
* @readonly
|
|
302
|
+
*/
|
|
303
|
+
get instanceCount() {
|
|
304
|
+
|
|
305
|
+
return this._instanceInfo.length - this._availableInstanceIds.length;
|
|
306
|
+
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* The number of unused vertices.
|
|
311
|
+
*
|
|
312
|
+
* @type {number}
|
|
313
|
+
* @readonly
|
|
314
|
+
*/
|
|
315
|
+
get unusedVertexCount() {
|
|
316
|
+
|
|
317
|
+
return this._maxVertexCount - this._nextVertexStart;
|
|
318
|
+
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* The number of unused indices.
|
|
323
|
+
*
|
|
324
|
+
* @type {number}
|
|
325
|
+
* @readonly
|
|
326
|
+
*/
|
|
327
|
+
get unusedIndexCount() {
|
|
328
|
+
|
|
329
|
+
return this._maxIndexCount - this._nextIndexStart;
|
|
330
|
+
|
|
331
|
+
}
|
|
332
|
+
|
|
219
333
|
_initMatricesTexture() {
|
|
220
334
|
|
|
221
335
|
// layout (1 matrix = 4 pixels)
|
|
@@ -329,6 +443,11 @@ class BatchedMesh extends Mesh {
|
|
|
329
443
|
|
|
330
444
|
}
|
|
331
445
|
|
|
446
|
+
/**
|
|
447
|
+
* Validates the instance defined by the given ID.
|
|
448
|
+
*
|
|
449
|
+
* @param {number} instanceId - The instance to validate.
|
|
450
|
+
*/
|
|
332
451
|
validateInstanceId( instanceId ) {
|
|
333
452
|
|
|
334
453
|
const instanceInfo = this._instanceInfo;
|
|
@@ -340,6 +459,11 @@ class BatchedMesh extends Mesh {
|
|
|
340
459
|
|
|
341
460
|
}
|
|
342
461
|
|
|
462
|
+
/**
|
|
463
|
+
* Validates the geometry defined by the given ID.
|
|
464
|
+
*
|
|
465
|
+
* @param {number} geometryId - The geometry to validate.
|
|
466
|
+
*/
|
|
343
467
|
validateGeometryId( geometryId ) {
|
|
344
468
|
|
|
345
469
|
const geometryInfoList = this._geometryInfo;
|
|
@@ -351,7 +475,13 @@ class BatchedMesh extends Mesh {
|
|
|
351
475
|
|
|
352
476
|
}
|
|
353
477
|
|
|
354
|
-
|
|
478
|
+
/**
|
|
479
|
+
* Takes a sort a function that is run before render. The function takes a list of instances to
|
|
480
|
+
* sort and a camera. The objects in the list include a "z" field to perform a depth-ordered sort with.
|
|
481
|
+
*
|
|
482
|
+
* @param {Function} func - The custom sort function.
|
|
483
|
+
* @return {BatchedMesh} A reference to this batched mesh.
|
|
484
|
+
*/
|
|
355
485
|
setCustomSort( func ) {
|
|
356
486
|
|
|
357
487
|
this.customSort = func;
|
|
@@ -359,6 +489,11 @@ class BatchedMesh extends Mesh {
|
|
|
359
489
|
|
|
360
490
|
}
|
|
361
491
|
|
|
492
|
+
/**
|
|
493
|
+
* Computes the bounding box, updating {@link BatchedMesh#boundingBox}.
|
|
494
|
+
* Bounding boxes aren't computed by default. They need to be explicitly computed,
|
|
495
|
+
* otherwise they are `null`.
|
|
496
|
+
*/
|
|
362
497
|
computeBoundingBox() {
|
|
363
498
|
|
|
364
499
|
if ( this.boundingBox === null ) {
|
|
@@ -384,6 +519,11 @@ class BatchedMesh extends Mesh {
|
|
|
384
519
|
|
|
385
520
|
}
|
|
386
521
|
|
|
522
|
+
/**
|
|
523
|
+
* Computes the bounding sphere, updating {@link BatchedMesh#boundingSphere}.
|
|
524
|
+
* Bounding spheres aren't computed by default. They need to be explicitly computed,
|
|
525
|
+
* otherwise they are `null`.
|
|
526
|
+
*/
|
|
387
527
|
computeBoundingSphere() {
|
|
388
528
|
|
|
389
529
|
if ( this.boundingSphere === null ) {
|
|
@@ -409,6 +549,13 @@ class BatchedMesh extends Mesh {
|
|
|
409
549
|
|
|
410
550
|
}
|
|
411
551
|
|
|
552
|
+
/**
|
|
553
|
+
* Adds a new instance to the batch using the geometry of the given ID and returns
|
|
554
|
+
* a new id referring to the new instance to be used by other functions.
|
|
555
|
+
*
|
|
556
|
+
* @param {number} geometryId - The ID of a previously added geometry via {@link BatchedMesh#addGeometry}.
|
|
557
|
+
* @return {number} The instance ID.
|
|
558
|
+
*/
|
|
412
559
|
addInstance( geometryId ) {
|
|
413
560
|
|
|
414
561
|
const atCapacity = this._instanceInfo.length >= this.maxInstanceCount;
|
|
@@ -460,6 +607,21 @@ class BatchedMesh extends Mesh {
|
|
|
460
607
|
|
|
461
608
|
}
|
|
462
609
|
|
|
610
|
+
/**
|
|
611
|
+
* Adds the given geometry to the batch and returns the associated
|
|
612
|
+
* geometry id referring to it to be used in other functions.
|
|
613
|
+
*
|
|
614
|
+
* @param {BufferGeometry} geometry - The geometry to add.
|
|
615
|
+
* @param {number} [reservedVertexCount=-1] - Optional parameter specifying the amount of
|
|
616
|
+
* vertex buffer space to reserve for the added geometry. This is necessary if it is planned
|
|
617
|
+
* to set a new geometry at this index at a later time that is larger than the original geometry.
|
|
618
|
+
* Defaults to the length of the given geometry vertex buffer.
|
|
619
|
+
* @param {number} [reservedIndexCount=-1] - Optional parameter specifying the amount of index
|
|
620
|
+
* buffer space to reserve for the added geometry. This is necessary if it is planned to set a
|
|
621
|
+
* new geometry at this index at a later time that is larger than the original geometry. Defaults to
|
|
622
|
+
* the length of the given geometry index buffer.
|
|
623
|
+
* @return {number} The geometry ID.
|
|
624
|
+
*/
|
|
463
625
|
addGeometry( geometry, reservedVertexCount = - 1, reservedIndexCount = - 1 ) {
|
|
464
626
|
|
|
465
627
|
this._initializeGeometry( geometry );
|
|
@@ -538,6 +700,15 @@ class BatchedMesh extends Mesh {
|
|
|
538
700
|
|
|
539
701
|
}
|
|
540
702
|
|
|
703
|
+
/**
|
|
704
|
+
* Replaces the geometry at the given ID with the provided geometry. Throws an error if there
|
|
705
|
+
* is not enough space reserved for geometry. Calling this will change all instances that are
|
|
706
|
+
* rendering that geometry.
|
|
707
|
+
*
|
|
708
|
+
* @param {number} geometryId - The ID of the geometry that should be replaced with the given geometry.
|
|
709
|
+
* @param {BufferGeometry} geometry - The new geometry.
|
|
710
|
+
* @return {number} The geometry ID.
|
|
711
|
+
*/
|
|
541
712
|
setGeometryAt( geometryId, geometry ) {
|
|
542
713
|
|
|
543
714
|
if ( geometryId >= this._geometryCount ) {
|
|
@@ -643,6 +814,13 @@ class BatchedMesh extends Mesh {
|
|
|
643
814
|
|
|
644
815
|
}
|
|
645
816
|
|
|
817
|
+
/**
|
|
818
|
+
* Deletes the geometry defined by the given ID from this batch. Any instances referencing
|
|
819
|
+
* this geometry will also be removed as a side effect.
|
|
820
|
+
*
|
|
821
|
+
* @param {number} geometryId - The ID of the geometry to remove from the batch.
|
|
822
|
+
* @return {BatchedMesh} A reference to this batched mesh.
|
|
823
|
+
*/
|
|
646
824
|
deleteGeometry( geometryId ) {
|
|
647
825
|
|
|
648
826
|
const geometryInfoList = this._geometryInfo;
|
|
@@ -672,6 +850,12 @@ class BatchedMesh extends Mesh {
|
|
|
672
850
|
|
|
673
851
|
}
|
|
674
852
|
|
|
853
|
+
/**
|
|
854
|
+
* Deletes an existing instance from the batch using the given ID.
|
|
855
|
+
*
|
|
856
|
+
* @param {number} instanceId - The ID of the instance to remove from the batch.
|
|
857
|
+
* @return {BatchedMesh} A reference to this batched mesh.
|
|
858
|
+
*/
|
|
675
859
|
deleteInstance( instanceId ) {
|
|
676
860
|
|
|
677
861
|
this.validateInstanceId( instanceId );
|
|
@@ -684,6 +868,13 @@ class BatchedMesh extends Mesh {
|
|
|
684
868
|
|
|
685
869
|
}
|
|
686
870
|
|
|
871
|
+
/**
|
|
872
|
+
* Repacks the sub geometries in [name] to remove any unused space remaining from
|
|
873
|
+
* previously deleted geometry, freeing up space to add new geometry.
|
|
874
|
+
*
|
|
875
|
+
* @param {number} instanceId - The ID of the instance to remove from the batch.
|
|
876
|
+
* @return {BatchedMesh} A reference to this batched mesh.
|
|
877
|
+
*/
|
|
687
878
|
optimize() {
|
|
688
879
|
|
|
689
880
|
// track the next indices to copy data to
|
|
@@ -773,7 +964,13 @@ class BatchedMesh extends Mesh {
|
|
|
773
964
|
|
|
774
965
|
}
|
|
775
966
|
|
|
776
|
-
|
|
967
|
+
/**
|
|
968
|
+
* Returns the bounding box for the given geometry.
|
|
969
|
+
*
|
|
970
|
+
* @param {number} geometryId - The ID of the geometry to return the bounding box for.
|
|
971
|
+
* @param {Box3} target - The target object that is used to store the method's result.
|
|
972
|
+
* @return {Box3|null} The geometry's bounding box. Returns `null` if no geometry has been found for the given ID.
|
|
973
|
+
*/
|
|
777
974
|
getBoundingBoxAt( geometryId, target ) {
|
|
778
975
|
|
|
779
976
|
if ( geometryId >= this._geometryCount ) {
|
|
@@ -812,7 +1009,13 @@ class BatchedMesh extends Mesh {
|
|
|
812
1009
|
|
|
813
1010
|
}
|
|
814
1011
|
|
|
815
|
-
|
|
1012
|
+
/**
|
|
1013
|
+
* Returns the bounding sphere for the given geometry.
|
|
1014
|
+
*
|
|
1015
|
+
* @param {number} geometryId - The ID of the geometry to return the bounding sphere for.
|
|
1016
|
+
* @param {Sphere} target - The target object that is used to store the method's result.
|
|
1017
|
+
* @return {Sphere|null} The geometry's bounding sphere. Returns `null` if no geometry has been found for the given ID.
|
|
1018
|
+
*/
|
|
816
1019
|
getBoundingSphereAt( geometryId, target ) {
|
|
817
1020
|
|
|
818
1021
|
if ( geometryId >= this._geometryCount ) {
|
|
@@ -858,6 +1061,14 @@ class BatchedMesh extends Mesh {
|
|
|
858
1061
|
|
|
859
1062
|
}
|
|
860
1063
|
|
|
1064
|
+
/**
|
|
1065
|
+
* Sets the given local transformation matrix to the defined instance.
|
|
1066
|
+
* Negatively scaled matrices are not supported.
|
|
1067
|
+
*
|
|
1068
|
+
* @param {number} instanceId - The ID of an instance to set the matrix of.
|
|
1069
|
+
* @param {Matrix4} matrix - A 4x4 matrix representing the local transformation of a single instance.
|
|
1070
|
+
* @return {BatchedMesh} A reference to this batched mesh.
|
|
1071
|
+
*/
|
|
861
1072
|
setMatrixAt( instanceId, matrix ) {
|
|
862
1073
|
|
|
863
1074
|
this.validateInstanceId( instanceId );
|
|
@@ -871,6 +1082,13 @@ class BatchedMesh extends Mesh {
|
|
|
871
1082
|
|
|
872
1083
|
}
|
|
873
1084
|
|
|
1085
|
+
/**
|
|
1086
|
+
* Returns the local transformation matrix of the defined instance.
|
|
1087
|
+
*
|
|
1088
|
+
* @param {number} instanceId - The ID of an instance to get the matrix of.
|
|
1089
|
+
* @param {Matrix4} matrix - The target object that is used to store the method's result.
|
|
1090
|
+
* @return {Matrix4} The instance's local transformation matrix.
|
|
1091
|
+
*/
|
|
874
1092
|
getMatrixAt( instanceId, matrix ) {
|
|
875
1093
|
|
|
876
1094
|
this.validateInstanceId( instanceId );
|
|
@@ -878,6 +1096,13 @@ class BatchedMesh extends Mesh {
|
|
|
878
1096
|
|
|
879
1097
|
}
|
|
880
1098
|
|
|
1099
|
+
/**
|
|
1100
|
+
* Sets the given color to the defined instance.
|
|
1101
|
+
*
|
|
1102
|
+
* @param {number} instanceId - The ID of an instance to set the color of.
|
|
1103
|
+
* @param {Color} color - The color to set the instance to.
|
|
1104
|
+
* @return {BatchedMesh} A reference to this batched mesh.
|
|
1105
|
+
*/
|
|
881
1106
|
setColorAt( instanceId, color ) {
|
|
882
1107
|
|
|
883
1108
|
this.validateInstanceId( instanceId );
|
|
@@ -895,6 +1120,13 @@ class BatchedMesh extends Mesh {
|
|
|
895
1120
|
|
|
896
1121
|
}
|
|
897
1122
|
|
|
1123
|
+
/**
|
|
1124
|
+
* Returns the color of the defined instance.
|
|
1125
|
+
*
|
|
1126
|
+
* @param {number} instanceId - The ID of an instance to get the color of.
|
|
1127
|
+
* @param {Color} color - The target object that is used to store the method's result.
|
|
1128
|
+
* @return {Color} The instance's color.
|
|
1129
|
+
*/
|
|
898
1130
|
getColorAt( instanceId, color ) {
|
|
899
1131
|
|
|
900
1132
|
this.validateInstanceId( instanceId );
|
|
@@ -902,23 +1134,36 @@ class BatchedMesh extends Mesh {
|
|
|
902
1134
|
|
|
903
1135
|
}
|
|
904
1136
|
|
|
905
|
-
|
|
1137
|
+
/**
|
|
1138
|
+
* Sets the visibility of the instance.
|
|
1139
|
+
*
|
|
1140
|
+
* @param {number} instanceId - The id of the instance to set the visibility of.
|
|
1141
|
+
* @param {boolean} visible - Whether the instance is visible or not.
|
|
1142
|
+
* @return {BatchedMesh} A reference to this batched mesh.
|
|
1143
|
+
*/
|
|
1144
|
+
setVisibleAt( instanceId, visible ) {
|
|
906
1145
|
|
|
907
1146
|
this.validateInstanceId( instanceId );
|
|
908
1147
|
|
|
909
|
-
if ( this._instanceInfo[ instanceId ].visible ===
|
|
1148
|
+
if ( this._instanceInfo[ instanceId ].visible === visible ) {
|
|
910
1149
|
|
|
911
1150
|
return this;
|
|
912
1151
|
|
|
913
1152
|
}
|
|
914
1153
|
|
|
915
|
-
this._instanceInfo[ instanceId ].visible =
|
|
1154
|
+
this._instanceInfo[ instanceId ].visible = visible;
|
|
916
1155
|
this._visibilityChanged = true;
|
|
917
1156
|
|
|
918
1157
|
return this;
|
|
919
1158
|
|
|
920
1159
|
}
|
|
921
1160
|
|
|
1161
|
+
/**
|
|
1162
|
+
* Returns the visibility state of the defined instance.
|
|
1163
|
+
*
|
|
1164
|
+
* @param {number} instanceId - The ID of an instance to get the visibility state of.
|
|
1165
|
+
* @return {boolean} Whether the instance is visible or not.
|
|
1166
|
+
*/
|
|
922
1167
|
getVisibleAt( instanceId ) {
|
|
923
1168
|
|
|
924
1169
|
this.validateInstanceId( instanceId );
|
|
@@ -927,6 +1172,13 @@ class BatchedMesh extends Mesh {
|
|
|
927
1172
|
|
|
928
1173
|
}
|
|
929
1174
|
|
|
1175
|
+
/**
|
|
1176
|
+
* Sets the geometry ID of the instance at the given index.
|
|
1177
|
+
*
|
|
1178
|
+
* @param {number} instanceId - The ID of the instance to set the geometry ID of.
|
|
1179
|
+
* @param {number} geometryId - The geometry ID to be use by the instance.
|
|
1180
|
+
* @return {BatchedMesh} A reference to this batched mesh.
|
|
1181
|
+
*/
|
|
930
1182
|
setGeometryIdAt( instanceId, geometryId ) {
|
|
931
1183
|
|
|
932
1184
|
this.validateInstanceId( instanceId );
|
|
@@ -938,6 +1190,12 @@ class BatchedMesh extends Mesh {
|
|
|
938
1190
|
|
|
939
1191
|
}
|
|
940
1192
|
|
|
1193
|
+
/**
|
|
1194
|
+
* Returns the geometry ID of the defined instance.
|
|
1195
|
+
*
|
|
1196
|
+
* @param {number} instanceId - The ID of an instance to get the geometry ID of.
|
|
1197
|
+
* @return {number} The instance's geometry ID.
|
|
1198
|
+
*/
|
|
941
1199
|
getGeometryIdAt( instanceId ) {
|
|
942
1200
|
|
|
943
1201
|
this.validateInstanceId( instanceId );
|
|
@@ -946,6 +1204,18 @@ class BatchedMesh extends Mesh {
|
|
|
946
1204
|
|
|
947
1205
|
}
|
|
948
1206
|
|
|
1207
|
+
/**
|
|
1208
|
+
* Get the range representing the subset of triangles related to the attached geometry,
|
|
1209
|
+
* indicating the starting offset and count, or `null` if invalid.
|
|
1210
|
+
*
|
|
1211
|
+
* @param {number} geometryId - The id of the geometry to get the range of.
|
|
1212
|
+
* @param {Object} [target] - The target object that is used to store the method's result.
|
|
1213
|
+
* @return {{
|
|
1214
|
+
* vertexStart:number,vertexCount:number,reservedVertexCount:number,
|
|
1215
|
+
* indexStart:number,indexCount:number,reservedIndexCount:number,
|
|
1216
|
+
* start:number,count:number
|
|
1217
|
+
* }} The result object with range data.
|
|
1218
|
+
*/
|
|
949
1219
|
getGeometryRangeAt( geometryId, target = {} ) {
|
|
950
1220
|
|
|
951
1221
|
this.validateGeometryId( geometryId );
|
|
@@ -966,6 +1236,13 @@ class BatchedMesh extends Mesh {
|
|
|
966
1236
|
|
|
967
1237
|
}
|
|
968
1238
|
|
|
1239
|
+
/**
|
|
1240
|
+
* Resizes the necessary buffers to support the provided number of instances.
|
|
1241
|
+
* If the provided arguments shrink the number of instances but there are not enough
|
|
1242
|
+
* unused Ids at the end of the list then an error is thrown.
|
|
1243
|
+
*
|
|
1244
|
+
* @param {number} maxInstanceCount - The max number of individual instances that can be added and rendered by the batch.
|
|
1245
|
+
*/
|
|
969
1246
|
setInstanceCount( maxInstanceCount ) {
|
|
970
1247
|
|
|
971
1248
|
// shrink the available instances as much as possible
|
|
@@ -1019,6 +1296,14 @@ class BatchedMesh extends Mesh {
|
|
|
1019
1296
|
|
|
1020
1297
|
}
|
|
1021
1298
|
|
|
1299
|
+
/**
|
|
1300
|
+
* Resizes the available space in the batch's vertex and index buffer attributes to the provided sizes.
|
|
1301
|
+
* If the provided arguments shrink the geometry buffers but there is not enough unused space at the
|
|
1302
|
+
* end of the geometry attributes then an error is thrown.
|
|
1303
|
+
*
|
|
1304
|
+
* @param {number} maxVertexCount - The maximum number of vertices to be used by all unique geometries to resize to.
|
|
1305
|
+
* @param {number} maxIndexCount - The maximum number of indices to be used by all unique geometries to resize to.
|
|
1306
|
+
*/
|
|
1022
1307
|
setGeometrySize( maxVertexCount, maxIndexCount ) {
|
|
1023
1308
|
|
|
1024
1309
|
// Check if we can shrink to the requested vertex attribute size
|
|
@@ -1179,6 +1464,10 @@ class BatchedMesh extends Mesh {
|
|
|
1179
1464
|
|
|
1180
1465
|
}
|
|
1181
1466
|
|
|
1467
|
+
/**
|
|
1468
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
1469
|
+
* method whenever this instance is no longer used in your app.
|
|
1470
|
+
*/
|
|
1182
1471
|
dispose() {
|
|
1183
1472
|
|
|
1184
1473
|
// Assuming the geometry is not shared with other meshes
|
|
@@ -1197,8 +1486,6 @@ class BatchedMesh extends Mesh {
|
|
|
1197
1486
|
|
|
1198
1487
|
}
|
|
1199
1488
|
|
|
1200
|
-
return this;
|
|
1201
|
-
|
|
1202
1489
|
}
|
|
1203
1490
|
|
|
1204
1491
|
onBeforeRender( renderer, scene, camera, geometry, material/*, _group*/ ) {
|