@plastic-software/three 0.174.0 → 0.175.1
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 +10744 -1476
- package/build/three.core.js +9633 -1096
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +918 -189
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +4 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2658 -1697
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2654 -1709
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +93 -39
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +171 -48
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +71 -29
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +41 -3
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +35 -0
- package/examples/jsm/loaders/DDSLoader.js +24 -0
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +42 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +218 -5
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +86 -18
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +38 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +81 -61
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +79 -2
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +108 -72
- package/examples/jsm/misc/VolumeSlice.js +88 -45
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +70 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +131 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +266 -133
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +1 -1
- package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -1
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
- package/examples/jsm/tsl/math/Bayer.js +14 -1
- package/examples/jsm/tsl/utils/Raymarching.js +4 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +1 -1
- package/src/Three.TSL.js +3 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +168 -18
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/AudioAnalyser.js +1 -1
- package/src/audio/AudioListener.js +2 -2
- package/src/audio/PositionalAudio.js +5 -5
- package/src/constants.js +1432 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +23 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +166 -7
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +16 -1
- package/src/extras/Earcut.js +3 -781
- package/src/extras/ImageUtils.js +3 -2
- package/src/extras/PMREMGenerator.js +22 -17
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +1 -1
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/ConeGeometry.js +2 -2
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/geometries/ExtrudeGeometry.js +71 -39
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/lights/LightShadow.js +1 -1
- package/src/lights/webgpu/IESSpotLight.js +1 -1
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +4 -6
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +58 -1
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +6 -2
- package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
- package/src/loaders/nodes/NodeObjectLoader.js +3 -3
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +1 -1
- package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +7 -3
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
- package/src/math/Color.js +1 -1
- package/src/math/MathUtils.js +223 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/accessors/BatchNode.js +8 -8
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +1 -1
- package/src/nodes/accessors/InstanceNode.js +5 -5
- package/src/nodes/accessors/InstancedMeshNode.js +1 -1
- package/src/nodes/accessors/MorphNode.js +27 -23
- package/src/nodes/accessors/Normal.js +1 -1
- package/src/nodes/accessors/Object3DNode.js +12 -12
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +46 -37
- package/src/nodes/accessors/StorageBufferNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +25 -5
- package/src/nodes/accessors/TextureSizeNode.js +1 -1
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/CodeNode.js +4 -4
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +23 -3
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/code/ScriptableValueNode.js +2 -2
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/CacheNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/Node.js +14 -2
- package/src/nodes/core/NodeBuilder.js +86 -14
- package/src/nodes/core/StackNode.js +5 -5
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/VarNode.js +2 -8
- package/src/nodes/core/VaryingNode.js +3 -3
- package/src/nodes/display/BlendModes.js +4 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PosterizeNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +3 -3
- package/src/nodes/display/ViewportDepthNode.js +2 -2
- package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
- package/src/nodes/display/ViewportTextureNode.js +4 -4
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +30 -2
- package/src/nodes/lighting/AnalyticLightNode.js +9 -1
- package/src/nodes/lighting/LightsNode.js +3 -3
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +20 -3
- package/src/nodes/math/MathNode.js +83 -78
- package/src/nodes/math/OperatorNode.js +171 -82
- package/src/nodes/pmrem/PMREMNode.js +4 -4
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +115 -12
- package/src/nodes/utils/ArrayElementNode.js +3 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/EquirectUVNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +27 -2
- package/src/nodes/utils/LoopNode.js +58 -28
- package/src/nodes/utils/MaxMipLevelNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -2
- package/src/nodes/utils/RemapNode.js +6 -6
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/src/objects/BatchedMesh.js +4 -4
- package/src/objects/InstancedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Skeleton.js +1 -1
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +617 -79
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Attributes.js +2 -2
- package/src/renderers/common/Backend.js +12 -3
- package/src/renderers/common/Background.js +1 -0
- package/src/renderers/common/Color4.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/PostProcessing.js +2 -0
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderObject.js +1 -1
- package/src/renderers/common/RenderObjects.js +2 -2
- package/src/renderers/common/Renderer.js +52 -31
- package/src/renderers/common/XRManager.js +333 -10
- package/src/renderers/common/extras/PMREMGenerator.js +6 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +10 -1
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
- package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
- package/src/renderers/shaders/ShaderChunk.js +2 -0
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +6 -5
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLProgram.js +25 -5
- package/src/renderers/webgl/WebGLPrograms.js +21 -7
- package/src/renderers/webgl/WebGLState.js +9 -9
- package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +128 -87
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
- package/src/renderers/webgpu/WebGPURenderer.js +17 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +173 -1
- package/src/scenes/Scene.js +2 -1
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +5 -5
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -11,6 +11,27 @@ import {
|
|
|
11
11
|
Vector3,
|
|
12
12
|
} from 'three';
|
|
13
13
|
|
|
14
|
+
/** @module BufferGeometryUtils */
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Computes vertex tangents using the MikkTSpace algorithm. MikkTSpace generates the same tangents consistently,
|
|
18
|
+
* and is used in most modelling tools and normal map bakers. Use MikkTSpace for materials with normal maps,
|
|
19
|
+
* because inconsistent tangents may lead to subtle visual issues in the normal map, particularly around mirrored
|
|
20
|
+
* UV seams.
|
|
21
|
+
*
|
|
22
|
+
* In comparison to this method, {@link BufferGeometry#computeTangents} (a custom algorithm) generates tangents that
|
|
23
|
+
* probably will not match the tangents in other software. The custom algorithm is sufficient for general use with a
|
|
24
|
+
* custom material, and may be faster than MikkTSpace.
|
|
25
|
+
*
|
|
26
|
+
* Returns the original BufferGeometry. Indexed geometries will be de-indexed. Requires position, normal, and uv attributes.
|
|
27
|
+
*
|
|
28
|
+
* @param {BufferGeometry} geometry - The geometry to compute tangents for.
|
|
29
|
+
* @param {Object} MikkTSpace - Instance of `examples/jsm/libs/mikktspace.module.js`, or `mikktspace` npm package.
|
|
30
|
+
* Await `MikkTSpace.ready` before use.
|
|
31
|
+
* @param {boolean} [negateSign=true] - Whether to negate the sign component (.w) of each tangent.
|
|
32
|
+
* Required for normal map conventions in some formats, including glTF.
|
|
33
|
+
* @return {BufferGeometry} The updated geometry.
|
|
34
|
+
*/
|
|
14
35
|
function computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {
|
|
15
36
|
|
|
16
37
|
if ( ! MikkTSpace || ! MikkTSpace.isReady ) {
|
|
@@ -100,9 +121,11 @@ function computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {
|
|
|
100
121
|
}
|
|
101
122
|
|
|
102
123
|
/**
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
* @
|
|
124
|
+
* Merges a set of geometries into a single instance. All geometries must have compatible attributes.
|
|
125
|
+
*
|
|
126
|
+
* @param {Array<BufferGeometry>} geometries - The geometries to merge.
|
|
127
|
+
* @param {boolean} [useGroups=false] - Whether to use groups or not.
|
|
128
|
+
* @return {?BufferGeometry} The merged geometry. Returns `null` if the merge does not succeed.
|
|
106
129
|
*/
|
|
107
130
|
function mergeGeometries( geometries, useGroups = false ) {
|
|
108
131
|
|
|
@@ -296,8 +319,11 @@ function mergeGeometries( geometries, useGroups = false ) {
|
|
|
296
319
|
}
|
|
297
320
|
|
|
298
321
|
/**
|
|
299
|
-
*
|
|
300
|
-
* @
|
|
322
|
+
* Merges a set of attributes into a single instance. All attributes must have compatible properties and types.
|
|
323
|
+
* Instances of {@link InterleavedBufferAttribute} are not supported.
|
|
324
|
+
*
|
|
325
|
+
* @param {Array<BufferAttribute>} attributes - The attributes to merge.
|
|
326
|
+
* @return {?BufferAttribute} The merged attribute. Returns `null` if the merge does not succeed.
|
|
301
327
|
*/
|
|
302
328
|
function mergeAttributes( attributes ) {
|
|
303
329
|
|
|
@@ -389,10 +415,12 @@ function mergeAttributes( attributes ) {
|
|
|
389
415
|
}
|
|
390
416
|
|
|
391
417
|
/**
|
|
392
|
-
*
|
|
393
|
-
*
|
|
418
|
+
* Performs a deep clone of the given buffer attribute.
|
|
419
|
+
*
|
|
420
|
+
* @param {BufferAttribute} attribute - The attribute to clone.
|
|
421
|
+
* @return {BufferAttribute} The cloned attribute.
|
|
394
422
|
*/
|
|
395
|
-
|
|
423
|
+
function deepCloneAttribute( attribute ) {
|
|
396
424
|
|
|
397
425
|
if ( attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute ) {
|
|
398
426
|
|
|
@@ -411,8 +439,11 @@ export function deepCloneAttribute( attribute ) {
|
|
|
411
439
|
}
|
|
412
440
|
|
|
413
441
|
/**
|
|
414
|
-
*
|
|
415
|
-
* @
|
|
442
|
+
* Interleaves a set of attributes and returns a new array of corresponding attributes that share a
|
|
443
|
+
* single {@link InterleavedBuffer} instance. All attributes must have compatible types.
|
|
444
|
+
*
|
|
445
|
+
* @param {Array<BufferAttribute>} attributes - The attributes to interleave.
|
|
446
|
+
* @return {Array<InterleavedBufferAttribute>} An array of interleaved attributes. If interleave does not succeed, the method returns `null`.
|
|
416
447
|
*/
|
|
417
448
|
function interleaveAttributes( attributes ) {
|
|
418
449
|
|
|
@@ -475,8 +506,13 @@ function interleaveAttributes( attributes ) {
|
|
|
475
506
|
|
|
476
507
|
}
|
|
477
508
|
|
|
478
|
-
|
|
479
|
-
|
|
509
|
+
/**
|
|
510
|
+
* Returns a new, non-interleaved version of the given attribute.
|
|
511
|
+
*
|
|
512
|
+
* @param {InterleavedBufferAttribute} attribute - The interleaved attribute.
|
|
513
|
+
* @return {BufferAttribute} The non-interleaved attribute.
|
|
514
|
+
*/
|
|
515
|
+
function deinterleaveAttribute( attribute ) {
|
|
480
516
|
|
|
481
517
|
const cons = attribute.data.array.constructor;
|
|
482
518
|
const count = attribute.count;
|
|
@@ -523,8 +559,12 @@ export function deinterleaveAttribute( attribute ) {
|
|
|
523
559
|
|
|
524
560
|
}
|
|
525
561
|
|
|
526
|
-
|
|
527
|
-
|
|
562
|
+
/**
|
|
563
|
+
* Deinterleaves all attributes on the given geometry.
|
|
564
|
+
*
|
|
565
|
+
* @param {BufferGeometry} geometry - The geometry to deinterleave.
|
|
566
|
+
*/
|
|
567
|
+
function deinterleaveGeometry( geometry ) {
|
|
528
568
|
|
|
529
569
|
const attributes = geometry.attributes;
|
|
530
570
|
const morphTargets = geometry.morphTargets;
|
|
@@ -567,8 +607,10 @@ export function deinterleaveGeometry( geometry ) {
|
|
|
567
607
|
}
|
|
568
608
|
|
|
569
609
|
/**
|
|
570
|
-
*
|
|
571
|
-
*
|
|
610
|
+
* Returns the amount of bytes used by all attributes to represent the geometry.
|
|
611
|
+
*
|
|
612
|
+
* @param {BufferGeometry} geometry - The geometry.
|
|
613
|
+
* @return {number} The estimate bytes used.
|
|
572
614
|
*/
|
|
573
615
|
function estimateBytesUsed( geometry ) {
|
|
574
616
|
|
|
@@ -590,9 +632,11 @@ function estimateBytesUsed( geometry ) {
|
|
|
590
632
|
}
|
|
591
633
|
|
|
592
634
|
/**
|
|
593
|
-
*
|
|
594
|
-
*
|
|
595
|
-
* @
|
|
635
|
+
* Returns a new geometry with vertices for which all similar vertex attributes (within tolerance) are merged.
|
|
636
|
+
*
|
|
637
|
+
* @param {BufferGeometry} geometry - The geometry to merge vertices for.
|
|
638
|
+
* @param {number} [tolerance=1e-4] - The tolerance value.
|
|
639
|
+
* @return {BufferGeometry} - The new geometry with merged vertices.
|
|
596
640
|
*/
|
|
597
641
|
function mergeVertices( geometry, tolerance = 1e-4 ) {
|
|
598
642
|
|
|
@@ -753,9 +797,12 @@ function mergeVertices( geometry, tolerance = 1e-4 ) {
|
|
|
753
797
|
}
|
|
754
798
|
|
|
755
799
|
/**
|
|
756
|
-
*
|
|
757
|
-
*
|
|
758
|
-
*
|
|
800
|
+
* Returns a new indexed geometry based on `TrianglesDrawMode` draw mode.
|
|
801
|
+
* This mode corresponds to the `gl.TRIANGLES` primitive in WebGL.
|
|
802
|
+
*
|
|
803
|
+
* @param {BufferGeometry} geometry - The geometry to convert.
|
|
804
|
+
* @param {number} drawMode - The current draw mode.
|
|
805
|
+
* @return {BufferGeometry} The new geometry using `TrianglesDrawMode`.
|
|
759
806
|
*/
|
|
760
807
|
function toTrianglesDrawMode( geometry, drawMode ) {
|
|
761
808
|
|
|
@@ -864,9 +911,13 @@ function toTrianglesDrawMode( geometry, drawMode ) {
|
|
|
864
911
|
|
|
865
912
|
/**
|
|
866
913
|
* Calculates the morphed attributes of a morphed/skinned BufferGeometry.
|
|
867
|
-
*
|
|
868
|
-
*
|
|
869
|
-
*
|
|
914
|
+
*
|
|
915
|
+
* Helpful for Raytracing or Decals (i.e. a `DecalGeometry` applied to a morphed Object with a `BufferGeometry`
|
|
916
|
+
* will use the original `BufferGeometry`, not the morphed/skinned one, generating an incorrect result.
|
|
917
|
+
* Using this function to create a shadow `Object3`D the `DecalGeometry` can be correctly generated).
|
|
918
|
+
*
|
|
919
|
+
* @param {Mesh|Line|Points} object - The 3D object to compute morph attributes for.
|
|
920
|
+
* @return {Object} An object with original position/normal attributes and morphed ones.
|
|
870
921
|
*/
|
|
871
922
|
function computeMorphedAttributes( object ) {
|
|
872
923
|
|
|
@@ -1142,6 +1193,12 @@ function computeMorphedAttributes( object ) {
|
|
|
1142
1193
|
|
|
1143
1194
|
}
|
|
1144
1195
|
|
|
1196
|
+
/**
|
|
1197
|
+
* Merges the {@link BufferGeometry#groups} for the given geometry.
|
|
1198
|
+
*
|
|
1199
|
+
* @param {BufferGeometry} geometry - The geometry to modify.
|
|
1200
|
+
* @return {BufferGeometry} - The updated geometry
|
|
1201
|
+
*/
|
|
1145
1202
|
function mergeGroups( geometry ) {
|
|
1146
1203
|
|
|
1147
1204
|
if ( geometry.groups.length === 0 ) {
|
|
@@ -1244,15 +1301,14 @@ function mergeGroups( geometry ) {
|
|
|
1244
1301
|
|
|
1245
1302
|
}
|
|
1246
1303
|
|
|
1247
|
-
|
|
1248
1304
|
/**
|
|
1249
1305
|
* Modifies the supplied geometry if it is non-indexed, otherwise creates a new,
|
|
1250
1306
|
* non-indexed geometry. Returns the geometry with smooth normals everywhere except
|
|
1251
1307
|
* faces that meet at an angle greater than the crease angle.
|
|
1252
1308
|
*
|
|
1253
|
-
* @param {BufferGeometry} geometry
|
|
1254
|
-
* @param {number} [creaseAngle]
|
|
1255
|
-
* @return {BufferGeometry}
|
|
1309
|
+
* @param {BufferGeometry} geometry - The geometry to modify.
|
|
1310
|
+
* @param {number} [creaseAngle=Math.PI/3] - The crease angle in radians.
|
|
1311
|
+
* @return {BufferGeometry} - The updated geometry
|
|
1256
1312
|
*/
|
|
1257
1313
|
function toCreasedNormals( geometry, creaseAngle = Math.PI / 3 /* 60 degrees */ ) {
|
|
1258
1314
|
|
|
@@ -1363,6 +1419,9 @@ export {
|
|
|
1363
1419
|
computeMikkTSpaceTangents,
|
|
1364
1420
|
mergeGeometries,
|
|
1365
1421
|
mergeAttributes,
|
|
1422
|
+
deepCloneAttribute,
|
|
1423
|
+
deinterleaveAttribute,
|
|
1424
|
+
deinterleaveGeometry,
|
|
1366
1425
|
interleaveAttributes,
|
|
1367
1426
|
estimateBytesUsed,
|
|
1368
1427
|
mergeVertices,
|
|
@@ -4,6 +4,8 @@ import {
|
|
|
4
4
|
Vector3
|
|
5
5
|
} from 'three';
|
|
6
6
|
|
|
7
|
+
/** @module CameraUtils */
|
|
8
|
+
|
|
7
9
|
const _va = /*@__PURE__*/ new Vector3(), // from pe to pa
|
|
8
10
|
_vb = /*@__PURE__*/ new Vector3(), // from pe to pb
|
|
9
11
|
_vc = /*@__PURE__*/ new Vector3(), // from pe to pc
|
|
@@ -14,16 +16,17 @@ const _va = /*@__PURE__*/ new Vector3(), // from pe to pa
|
|
|
14
16
|
_quat = /*@__PURE__*/ new Quaternion(); // temporary quaternion
|
|
15
17
|
|
|
16
18
|
|
|
17
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Set projection matrix and the orientation of a perspective camera
|
|
18
21
|
* to exactly frame the corners of an arbitrary rectangle.
|
|
19
22
|
* NOTE: This function ignores the standard parameters;
|
|
20
|
-
* do not call updateProjectionMatrix() after this
|
|
23
|
+
* do not call `updateProjectionMatrix()` after this.
|
|
21
24
|
*
|
|
22
|
-
* @param {PerspectiveCamera} camera
|
|
23
|
-
* @param {Vector3} bottomLeftCorner
|
|
24
|
-
* @param {Vector3} bottomRightCorner
|
|
25
|
-
* @param {Vector3} topLeftCorner
|
|
26
|
-
* @param {boolean} [estimateViewFrustum=false]
|
|
25
|
+
* @param {PerspectiveCamera} camera - The camera.
|
|
26
|
+
* @param {Vector3} bottomLeftCorner - The bottom-left corner point.
|
|
27
|
+
* @param {Vector3} bottomRightCorner - The bottom-right corner point.
|
|
28
|
+
* @param {Vector3} topLeftCorner - The top-left corner point.
|
|
29
|
+
* @param {boolean} [estimateViewFrustum=false] - If set to `true`, the function tries to estimate the camera's FOV.
|
|
27
30
|
*/
|
|
28
31
|
function frameCorners( camera, bottomLeftCorner, bottomRightCorner, topLeftCorner, estimateViewFrustum = false ) {
|
|
29
32
|
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Octahedron and Quantization encodings based on work by:
|
|
3
|
-
*
|
|
4
|
-
* @link https://github.com/tsherif/mesh-quantization-example
|
|
5
|
-
*
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
1
|
import {
|
|
9
2
|
BufferAttribute,
|
|
10
3
|
Matrix3,
|
|
@@ -12,14 +5,15 @@ import {
|
|
|
12
5
|
Vector3
|
|
13
6
|
} from 'three';
|
|
14
7
|
|
|
8
|
+
/** @module GeometryCompressionUtils */
|
|
15
9
|
|
|
10
|
+
// Octahedron and Quantization encodings based on work by: https://github.com/tsherif/mesh-quantization-example
|
|
16
11
|
|
|
17
12
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* @param {THREE.BufferGeometry} geometry
|
|
21
|
-
* @param {string} encodeMethod "DEFAULT" || "OCT1Byte" || "OCT2Byte" || "ANGLES"
|
|
13
|
+
* Compressed the given geometry's `normal` attribute by the selected encode method.
|
|
22
14
|
*
|
|
15
|
+
* @param {BufferGeometry} geometry - The geometry whose normals should be compressed.
|
|
16
|
+
* @param {('DEFAULT'|'OCT1Byte'|'OCT2Byte'|'ANGLES')} encodeMethod - The compression method.
|
|
23
17
|
*/
|
|
24
18
|
function compressNormals( geometry, encodeMethod ) {
|
|
25
19
|
|
|
@@ -27,7 +21,7 @@ function compressNormals( geometry, encodeMethod ) {
|
|
|
27
21
|
|
|
28
22
|
if ( ! normal ) {
|
|
29
23
|
|
|
30
|
-
console.error( 'Geometry must contain normal attribute.
|
|
24
|
+
console.error( 'THREE.GeometryCompressionUtils.compressNormals(): Geometry must contain normal attribute.' );
|
|
31
25
|
|
|
32
26
|
}
|
|
33
27
|
|
|
@@ -35,7 +29,7 @@ function compressNormals( geometry, encodeMethod ) {
|
|
|
35
29
|
|
|
36
30
|
if ( normal.itemSize != 3 ) {
|
|
37
31
|
|
|
38
|
-
console.error( 'normal.itemSize is not 3, which cannot be encoded.
|
|
32
|
+
console.error( 'THREE.GeometryCompressionUtils.compressNormals(): normal.itemSize is not 3, which cannot be encoded.' );
|
|
39
33
|
|
|
40
34
|
}
|
|
41
35
|
|
|
@@ -63,11 +57,10 @@ function compressNormals( geometry, encodeMethod ) {
|
|
|
63
57
|
|
|
64
58
|
} else if ( encodeMethod == 'OCT1Byte' ) {
|
|
65
59
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
*/
|
|
60
|
+
|
|
61
|
+
// It is not recommended to use 1-byte octahedron normals encoding unless you want to extremely reduce the memory usage
|
|
62
|
+
// As it makes vertex data not aligned to a 4 byte boundary which may harm some WebGL implementations and sometimes the normal distortion is visible
|
|
63
|
+
// Please refer to @zeux 's comments in https://github.com/mrdoob/three.js/pull/18208
|
|
71
64
|
|
|
72
65
|
result = new Int8Array( count * 2 );
|
|
73
66
|
|
|
@@ -127,20 +120,18 @@ function compressNormals( geometry, encodeMethod ) {
|
|
|
127
120
|
|
|
128
121
|
}
|
|
129
122
|
|
|
130
|
-
|
|
131
123
|
/**
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
*/
|
|
124
|
+
* Compressed the given geometry's `position` attribute.
|
|
125
|
+
*
|
|
126
|
+
* @param {BufferGeometry} geometry - The geometry whose position values should be compressed.
|
|
127
|
+
*/
|
|
137
128
|
function compressPositions( geometry ) {
|
|
138
129
|
|
|
139
130
|
const position = geometry.attributes.position;
|
|
140
131
|
|
|
141
132
|
if ( ! position ) {
|
|
142
133
|
|
|
143
|
-
console.error( 'Geometry must contain position attribute.
|
|
134
|
+
console.error( 'THREE.GeometryCompressionUtils.compressPositions(): Geometry must contain position attribute.' );
|
|
144
135
|
|
|
145
136
|
}
|
|
146
137
|
|
|
@@ -148,7 +139,7 @@ function compressPositions( geometry ) {
|
|
|
148
139
|
|
|
149
140
|
if ( position.itemSize != 3 ) {
|
|
150
141
|
|
|
151
|
-
console.error( 'position.itemSize is not 3, which cannot be packed.
|
|
142
|
+
console.error( 'THREE.GeometryCompressionUtils.compressPositions(): position.itemSize is not 3, which cannot be packed.' );
|
|
152
143
|
|
|
153
144
|
}
|
|
154
145
|
|
|
@@ -171,10 +162,9 @@ function compressPositions( geometry ) {
|
|
|
171
162
|
}
|
|
172
163
|
|
|
173
164
|
/**
|
|
174
|
-
*
|
|
175
|
-
*
|
|
176
|
-
* @param {THREE.BufferGeometry} geometry
|
|
165
|
+
* Compressed the given geometry's `uv` attribute.
|
|
177
166
|
*
|
|
167
|
+
* @param {BufferGeometry} geometry - The geometry whose texture coordinates should be compressed.
|
|
178
168
|
*/
|
|
179
169
|
function compressUvs( geometry ) {
|
|
180
170
|
|
|
@@ -182,7 +172,7 @@ function compressUvs( geometry ) {
|
|
|
182
172
|
|
|
183
173
|
if ( ! uvs ) {
|
|
184
174
|
|
|
185
|
-
console.error( 'Geometry must contain uv attribute.
|
|
175
|
+
console.error( 'THREE.GeometryCompressionUtils.compressUvs(): Geometry must contain uv attribute.' );
|
|
186
176
|
|
|
187
177
|
}
|
|
188
178
|
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { Vector3 } from 'three';
|
|
2
2
|
|
|
3
|
+
/** @module GeometryUtils */
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
|
-
* Generates 2D-Coordinates
|
|
6
|
+
* Generates 2D-Coordinates along a Hilbert curve.
|
|
6
7
|
*
|
|
7
|
-
* Based on work by:
|
|
8
|
-
* @link http://www.openprocessing.org/sketch/15493
|
|
8
|
+
* Based on work by: {@link http://www.openprocessing.org/sketch/15493}
|
|
9
9
|
*
|
|
10
|
-
* @param {Vector3} center - Center of Hilbert curve.
|
|
10
|
+
* @param {Vector3} [center] - Center of Hilbert curve.
|
|
11
11
|
* @param {number} [size=10] - Total width of Hilbert curve.
|
|
12
12
|
* @param {number} [iterations=10] - Number of subdivisions.
|
|
13
13
|
* @param {number} [v0=0] - Corner index -X, -Z.
|
|
14
14
|
* @param {number} [v1=1] - Corner index -X, +Z.
|
|
15
15
|
* @param {number} [v2=2] - Corner index +X, +Z.
|
|
16
16
|
* @param {number} [v3=3] - Corner index +X, -Z.
|
|
17
|
-
* @returns {Array<
|
|
17
|
+
* @returns {Array<Vector3>} The Hilbert curve points.
|
|
18
18
|
*/
|
|
19
19
|
function hilbert2D( center = new Vector3( 0, 0, 0 ), size = 10, iterations = 1, v0 = 0, v1 = 1, v2 = 2, v3 = 3 ) {
|
|
20
20
|
|
|
@@ -52,12 +52,11 @@ function hilbert2D( center = new Vector3( 0, 0, 0 ), size = 10, iterations = 1,
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
/**
|
|
55
|
-
* Generates 3D-Coordinates
|
|
55
|
+
* Generates 3D-Coordinates along a Hilbert curve.
|
|
56
56
|
*
|
|
57
|
-
* Based on work by:
|
|
58
|
-
* @link https://openprocessing.org/user/5654
|
|
57
|
+
* Based on work by: {@link https://openprocessing.org/user/5654}
|
|
59
58
|
*
|
|
60
|
-
* @param {Vector3} [center
|
|
59
|
+
* @param {Vector3} [center] - Center of Hilbert curve.
|
|
61
60
|
* @param {number} [size=10] - Total width of Hilbert curve.
|
|
62
61
|
* @param {number} [iterations=1] - Number of subdivisions.
|
|
63
62
|
* @param {number} [v0=0] - Corner index -X, +Y, -Z.
|
|
@@ -68,7 +67,7 @@ function hilbert2D( center = new Vector3( 0, 0, 0 ), size = 10, iterations = 1,
|
|
|
68
67
|
* @param {number} [v5=5] - Corner index +X, -Y, +Z.
|
|
69
68
|
* @param {number} [v6=6] - Corner index +X, +Y, +Z.
|
|
70
69
|
* @param {number} [v7=7] - Corner index +X, +Y, -Z.
|
|
71
|
-
* @returns {Array<
|
|
70
|
+
* @returns {Array<Vector3>} - The Hilbert curve points.
|
|
72
71
|
*/
|
|
73
72
|
function hilbert3D( center = new Vector3( 0, 0, 0 ), size = 10, iterations = 1, v0 = 0, v1 = 1, v2 = 2, v3 = 3, v4 = 4, v5 = 5, v6 = 6, v7 = 7 ) {
|
|
74
73
|
|
|
@@ -119,12 +118,12 @@ function hilbert3D( center = new Vector3( 0, 0, 0 ), size = 10, iterations = 1,
|
|
|
119
118
|
}
|
|
120
119
|
|
|
121
120
|
/**
|
|
122
|
-
* Generates a Gosper curve (lying in the XY plane)
|
|
121
|
+
* Generates a Gosper curve (lying in the XY plane).
|
|
123
122
|
*
|
|
124
|
-
* https://gist.github.com/nitaku/6521802
|
|
123
|
+
* Reference: {@link https://gist.github.com/nitaku/6521802}
|
|
125
124
|
*
|
|
126
125
|
* @param {number} [size=1] - The size of a single gosper island.
|
|
127
|
-
* @return {Array<
|
|
126
|
+
* @return {Array<number>} The gosper island points.
|
|
128
127
|
*/
|
|
129
128
|
function gosper( size = 1 ) {
|
|
130
129
|
|
|
@@ -9,14 +9,21 @@ import {
|
|
|
9
9
|
|
|
10
10
|
import { mergeGeometries } from './BufferGeometryUtils.js';
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Utility class for LDraw models.
|
|
14
|
+
*/
|
|
12
15
|
class LDrawUtils {
|
|
13
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Merges geometries in the given object by materials and returns a new group object.
|
|
19
|
+
* Use on not indexed geometries. The object buffers reference the old object ones.
|
|
20
|
+
* Special treatment is done to the conditional lines generated by LDrawLoader.
|
|
21
|
+
*
|
|
22
|
+
* @param {Object3D} object - The object to merge.
|
|
23
|
+
* @returns {Group} The merged object.
|
|
24
|
+
*/
|
|
14
25
|
static mergeObject( object ) {
|
|
15
26
|
|
|
16
|
-
// Merges geometries in object by materials and returns new object. Use on not indexed geometries.
|
|
17
|
-
// The object buffers reference the old object ones.
|
|
18
|
-
// Special treatment is done to the conditional lines generated by LDrawLoader.
|
|
19
|
-
|
|
20
27
|
function extractGroup( geometry, group, elementSize, isConditionalLine ) {
|
|
21
28
|
|
|
22
29
|
// Extracts a group from a geometry as a new geometry (with attribute buffers referencing original buffers)
|
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* This class can be used to optimized scenes by converting
|
|
5
|
+
* individual meshes into {@link BatchedMesh}. This component
|
|
6
|
+
* is an experimental attempt to implement auto-batching in three.js.
|
|
7
|
+
*/
|
|
3
8
|
class SceneOptimizer {
|
|
4
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Constructs a new scene optimizer.
|
|
12
|
+
*
|
|
13
|
+
* @param {Scene} scene - The scene to optimize.
|
|
14
|
+
* @param {SceneOptimizer~Options} options - The configuration options.
|
|
15
|
+
*/
|
|
5
16
|
constructor( scene, options = {} ) {
|
|
6
17
|
|
|
7
18
|
this.scene = scene;
|
|
@@ -9,7 +20,7 @@ class SceneOptimizer {
|
|
|
9
20
|
|
|
10
21
|
}
|
|
11
22
|
|
|
12
|
-
|
|
23
|
+
_bufferToHash( buffer ) {
|
|
13
24
|
|
|
14
25
|
let hash = 0;
|
|
15
26
|
if ( buffer.byteLength !== 0 ) {
|
|
@@ -43,7 +54,7 @@ class SceneOptimizer {
|
|
|
43
54
|
|
|
44
55
|
}
|
|
45
56
|
|
|
46
|
-
|
|
57
|
+
_getMaterialPropertiesHash( material ) {
|
|
47
58
|
|
|
48
59
|
const mapProps = [
|
|
49
60
|
'map',
|
|
@@ -128,7 +139,7 @@ class SceneOptimizer {
|
|
|
128
139
|
|
|
129
140
|
}
|
|
130
141
|
|
|
131
|
-
|
|
142
|
+
_getAttributesSignature( geometry ) {
|
|
132
143
|
|
|
133
144
|
return Object.keys( geometry.attributes )
|
|
134
145
|
.sort()
|
|
@@ -142,24 +153,24 @@ class SceneOptimizer {
|
|
|
142
153
|
|
|
143
154
|
}
|
|
144
155
|
|
|
145
|
-
|
|
156
|
+
_getGeometryHash( geometry ) {
|
|
146
157
|
|
|
147
158
|
const indexHash = geometry.index
|
|
148
|
-
? this.
|
|
159
|
+
? this._bufferToHash( geometry.index.array )
|
|
149
160
|
: 'noIndex';
|
|
150
|
-
const positionHash = this.
|
|
151
|
-
const attributesSignature = this.
|
|
161
|
+
const positionHash = this._bufferToHash( geometry.attributes.position.array );
|
|
162
|
+
const attributesSignature = this._getAttributesSignature( geometry );
|
|
152
163
|
return `${indexHash}_${positionHash}_${attributesSignature}`;
|
|
153
164
|
|
|
154
165
|
}
|
|
155
166
|
|
|
156
|
-
|
|
167
|
+
_getBatchKey( materialProps, attributesSignature ) {
|
|
157
168
|
|
|
158
169
|
return `${materialProps}_${attributesSignature}`;
|
|
159
170
|
|
|
160
171
|
}
|
|
161
172
|
|
|
162
|
-
|
|
173
|
+
_analyzeModel() {
|
|
163
174
|
|
|
164
175
|
const batchGroups = new Map();
|
|
165
176
|
const singleGroups = new Map();
|
|
@@ -170,10 +181,10 @@ class SceneOptimizer {
|
|
|
170
181
|
|
|
171
182
|
if ( ! node.isMesh ) return;
|
|
172
183
|
|
|
173
|
-
const materialProps = this.
|
|
174
|
-
const attributesSignature = this.
|
|
175
|
-
const batchKey = this.
|
|
176
|
-
const geometryHash = this.
|
|
184
|
+
const materialProps = this._getMaterialPropertiesHash( node.material );
|
|
185
|
+
const attributesSignature = this._getAttributesSignature( node.geometry );
|
|
186
|
+
const batchKey = this._getBatchKey( materialProps, attributesSignature );
|
|
187
|
+
const geometryHash = this._getGeometryHash( node.geometry );
|
|
177
188
|
uniqueGeometries.add( geometryHash );
|
|
178
189
|
|
|
179
190
|
if ( ! batchGroups.has( batchKey ) ) {
|
|
@@ -222,7 +233,7 @@ class SceneOptimizer {
|
|
|
222
233
|
|
|
223
234
|
}
|
|
224
235
|
|
|
225
|
-
|
|
236
|
+
_createBatchedMeshes( batchGroups ) {
|
|
226
237
|
|
|
227
238
|
const meshesToRemove = new Set();
|
|
228
239
|
|
|
@@ -269,7 +280,7 @@ class SceneOptimizer {
|
|
|
269
280
|
|
|
270
281
|
for ( const mesh of group.meshes ) {
|
|
271
282
|
|
|
272
|
-
const geometryHash = this.
|
|
283
|
+
const geometryHash = this._getGeometryHash( mesh.geometry );
|
|
273
284
|
|
|
274
285
|
if ( ! geometryIds.has( geometryHash ) ) {
|
|
275
286
|
|
|
@@ -308,6 +319,11 @@ class SceneOptimizer {
|
|
|
308
319
|
|
|
309
320
|
}
|
|
310
321
|
|
|
322
|
+
/**
|
|
323
|
+
* Removes empty nodes from all descendants of the given 3D object.
|
|
324
|
+
*
|
|
325
|
+
* @param {Object3D} object - The 3D object to process.
|
|
326
|
+
*/
|
|
311
327
|
removeEmptyNodes( object ) {
|
|
312
328
|
|
|
313
329
|
const children = [ ...object.children ];
|
|
@@ -327,6 +343,11 @@ class SceneOptimizer {
|
|
|
327
343
|
|
|
328
344
|
}
|
|
329
345
|
|
|
346
|
+
/**
|
|
347
|
+
* Removes the given array of meshes from the scene.
|
|
348
|
+
*
|
|
349
|
+
* @param {Set<Mesh>} meshesToRemove - The meshes to remove.
|
|
350
|
+
*/
|
|
330
351
|
disposeMeshes( meshesToRemove ) {
|
|
331
352
|
|
|
332
353
|
meshesToRemove.forEach( ( mesh ) => {
|
|
@@ -356,7 +377,7 @@ class SceneOptimizer {
|
|
|
356
377
|
|
|
357
378
|
}
|
|
358
379
|
|
|
359
|
-
|
|
380
|
+
_logDebugInfo( stats ) {
|
|
360
381
|
|
|
361
382
|
console.group( 'Scene Optimization Results' );
|
|
362
383
|
console.log( `Original meshes: ${stats.originalMeshes}` );
|
|
@@ -368,10 +389,18 @@ class SceneOptimizer {
|
|
|
368
389
|
|
|
369
390
|
}
|
|
370
391
|
|
|
392
|
+
/**
|
|
393
|
+
* Performs the auto-baching by identifying groups of meshes in the scene
|
|
394
|
+
* that can be represented as a single {@link BatchedMesh}. The method modifies
|
|
395
|
+
* the scene by adding instances of `BatchedMesh` and removing the now redundant
|
|
396
|
+
* individual meshes.
|
|
397
|
+
*
|
|
398
|
+
* @return {Scene} The optimized scene.
|
|
399
|
+
*/
|
|
371
400
|
toBatchedMesh() {
|
|
372
401
|
|
|
373
|
-
const { batchGroups, singleGroups, uniqueGeometries } = this.
|
|
374
|
-
const meshesToRemove = this.
|
|
402
|
+
const { batchGroups, singleGroups, uniqueGeometries } = this._analyzeModel();
|
|
403
|
+
const meshesToRemove = this._createBatchedMeshes( batchGroups );
|
|
375
404
|
|
|
376
405
|
this.disposeMeshes( meshesToRemove );
|
|
377
406
|
this.removeEmptyNodes( this.scene );
|
|
@@ -390,7 +419,7 @@ class SceneOptimizer {
|
|
|
390
419
|
reductionRatio: ( ( 1 - totalFinalMeshes / totalOriginalMeshes ) * 100 ).toFixed( 1 ),
|
|
391
420
|
};
|
|
392
421
|
|
|
393
|
-
this.
|
|
422
|
+
this._logDebugInfo( stats );
|
|
394
423
|
|
|
395
424
|
}
|
|
396
425
|
|
|
@@ -398,7 +427,17 @@ class SceneOptimizer {
|
|
|
398
427
|
|
|
399
428
|
}
|
|
400
429
|
|
|
401
|
-
|
|
430
|
+
/**
|
|
431
|
+
* Performs the auto-instancing by identifying groups of meshes in the scene
|
|
432
|
+
* that can be represented as a single {@link InstancedMesh}. The method modifies
|
|
433
|
+
* the scene by adding instances of `InstancedMesh` and removing the now redundant
|
|
434
|
+
* individual meshes.
|
|
435
|
+
*
|
|
436
|
+
* This method is not yet implemented.
|
|
437
|
+
*
|
|
438
|
+
* @abstract
|
|
439
|
+
* @return {Scene} The optimized scene.
|
|
440
|
+
*/
|
|
402
441
|
toInstancingMesh() {
|
|
403
442
|
|
|
404
443
|
throw new Error( 'InstancedMesh optimization not implemented yet' );
|
|
@@ -407,4 +446,11 @@ class SceneOptimizer {
|
|
|
407
446
|
|
|
408
447
|
}
|
|
409
448
|
|
|
449
|
+
/**
|
|
450
|
+
* Constructor options of `SceneOptimizer`.
|
|
451
|
+
*
|
|
452
|
+
* @typedef {Object} SceneOptimizer~Options
|
|
453
|
+
* @property {boolean} [debug=false] - Whether to enable debug mode or not.
|
|
454
|
+
**/
|
|
455
|
+
|
|
410
456
|
export { SceneOptimizer };
|