super-three 0.173.5 → 0.175.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +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
|
@@ -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 };
|
|
@@ -10,9 +10,19 @@ import {
|
|
|
10
10
|
|
|
11
11
|
import { mergeGroups, deepCloneAttribute } from './BufferGeometryUtils.js';
|
|
12
12
|
|
|
13
|
+
/** @module SceneUtils */
|
|
14
|
+
|
|
13
15
|
const _color = /*@__PURE__*/new Color();
|
|
14
16
|
const _matrix = /*@__PURE__*/new Matrix4();
|
|
15
17
|
|
|
18
|
+
/**
|
|
19
|
+
* This function creates a mesh for each instance of the given instanced mesh and
|
|
20
|
+
* adds it to a group. Each mesh will honor the current 3D transformation of its
|
|
21
|
+
* corresponding instance.
|
|
22
|
+
*
|
|
23
|
+
* @param {InstancedMesh} instancedMesh - The instanced mesh.
|
|
24
|
+
* @return {Group} A group of meshes.
|
|
25
|
+
*/
|
|
16
26
|
function createMeshesFromInstancedMesh( instancedMesh ) {
|
|
17
27
|
|
|
18
28
|
const group = new Group();
|
|
@@ -39,6 +49,13 @@ function createMeshesFromInstancedMesh( instancedMesh ) {
|
|
|
39
49
|
|
|
40
50
|
}
|
|
41
51
|
|
|
52
|
+
/**
|
|
53
|
+
* This function creates a mesh for each geometry-group of the given multi-material mesh and
|
|
54
|
+
* adds it to a group.
|
|
55
|
+
*
|
|
56
|
+
* @param {Mesh} mesh - The multi-material mesh.
|
|
57
|
+
* @return {Group} A group of meshes.
|
|
58
|
+
*/
|
|
42
59
|
function createMeshesFromMultiMaterialMesh( mesh ) {
|
|
43
60
|
|
|
44
61
|
if ( Array.isArray( mesh.material ) === false ) {
|
|
@@ -110,6 +127,16 @@ function createMeshesFromMultiMaterialMesh( mesh ) {
|
|
|
110
127
|
|
|
111
128
|
}
|
|
112
129
|
|
|
130
|
+
/**
|
|
131
|
+
* This function represents an alternative way to create 3D objects with multiple materials.
|
|
132
|
+
* Normally, {@link BufferGeometry#groups} are used which might introduce issues e.g. when
|
|
133
|
+
* exporting the object to a 3D format. This function accepts a geometry and an array of
|
|
134
|
+
* materials and creates for each material a mesh that is added to a group.
|
|
135
|
+
*
|
|
136
|
+
* @param {BufferGeometry} geometry - The geometry.
|
|
137
|
+
* @param {Array<Material>} materials - An array of materials.
|
|
138
|
+
* @return {Group} A group representing a multi-material object.
|
|
139
|
+
*/
|
|
113
140
|
function createMultiMaterialObject( geometry, materials ) {
|
|
114
141
|
|
|
115
142
|
const group = new Group();
|
|
@@ -124,6 +151,18 @@ function createMultiMaterialObject( geometry, materials ) {
|
|
|
124
151
|
|
|
125
152
|
}
|
|
126
153
|
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Executes a reducer function for each vertex of the given 3D object.
|
|
157
|
+
* `reduceVertices()` returns a single value: the function's accumulated result.
|
|
158
|
+
*
|
|
159
|
+
* @param {Object3D} object - The 3D object that should be processed. It must have a
|
|
160
|
+
* geometry with a `position` attribute.
|
|
161
|
+
* @param {function(number,Vector3):number} func - The reducer function. First argument
|
|
162
|
+
* is the current value, second argument the current vertex.
|
|
163
|
+
* @param {any} initialValue - The initial value.
|
|
164
|
+
* @return {any} The result.
|
|
165
|
+
*/
|
|
127
166
|
function reduceVertices( object, func, initialValue ) {
|
|
128
167
|
|
|
129
168
|
let value = initialValue;
|
|
@@ -174,8 +213,10 @@ function reduceVertices( object, func, initialValue ) {
|
|
|
174
213
|
}
|
|
175
214
|
|
|
176
215
|
/**
|
|
177
|
-
*
|
|
178
|
-
*
|
|
216
|
+
* Sorts the instances of the given instanced mesh.
|
|
217
|
+
*
|
|
218
|
+
* @param {InstancedMesh} mesh - The instanced mesh to sort.
|
|
219
|
+
* @param {function(number, number):number} compareFn - A custom compare function for the sort.
|
|
179
220
|
*/
|
|
180
221
|
function sortInstancedMesh( mesh, compareFn ) {
|
|
181
222
|
|
|
@@ -246,7 +287,9 @@ function sortInstancedMesh( mesh, compareFn ) {
|
|
|
246
287
|
}
|
|
247
288
|
|
|
248
289
|
/**
|
|
249
|
-
*
|
|
290
|
+
* Generator based alternative to {@link Object3D#traverse}.
|
|
291
|
+
*
|
|
292
|
+
* @param {Object3D} object - Object to traverse.
|
|
250
293
|
* @yields {Object3D} Objects that passed the filter condition.
|
|
251
294
|
*/
|
|
252
295
|
function* traverseGenerator( object ) {
|
|
@@ -264,6 +307,8 @@ function* traverseGenerator( object ) {
|
|
|
264
307
|
}
|
|
265
308
|
|
|
266
309
|
/**
|
|
310
|
+
* Generator based alternative to {@link Object3D#traverseVisible}.
|
|
311
|
+
*
|
|
267
312
|
* @param {Object3D} object Object to traverse.
|
|
268
313
|
* @yields {Object3D} Objects that passed the filter condition.
|
|
269
314
|
*/
|
|
@@ -284,6 +329,8 @@ function* traverseVisibleGenerator( object ) {
|
|
|
284
329
|
}
|
|
285
330
|
|
|
286
331
|
/**
|
|
332
|
+
* Generator based alternative to {@link Object3D#traverseAncestors}.
|
|
333
|
+
*
|
|
287
334
|
* @param {Object3D} object Object to traverse.
|
|
288
335
|
* @yields {Object3D} Objects that passed the filter condition.
|
|
289
336
|
*/
|
|
@@ -16,30 +16,25 @@ import { UnpackDepthRGBAShader } from '../shaders/UnpackDepthRGBAShader.js';
|
|
|
16
16
|
* It works for shadow casting lights: DirectionalLight and SpotLight.
|
|
17
17
|
* It renders out the shadow map and displays it on a HUD.
|
|
18
18
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
19
|
+
* This module can only be used with {@link WebGLRenderer}. When using {@link WebGPURenderer},
|
|
20
|
+
* import the class from `ShadowMapViewerGPU.js`.
|
|
21
21
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* shadowMapViewer.position.set( 10, 10 ); //x, y in pixel default: 0, 0 (top left corner)
|
|
31
|
-
*
|
|
32
|
-
* 4) Render the shadow map viewer in your render loop:
|
|
33
|
-
* shadowMapViewer.render( renderer );
|
|
34
|
-
*
|
|
35
|
-
* 5) Optionally: Update the shadow map viewer on window resize:
|
|
36
|
-
* shadowMapViewer.updateForWindowResize();
|
|
37
|
-
*
|
|
38
|
-
* 6) If you set the position or size members directly, you need to call shadowMapViewer.update();
|
|
22
|
+
* ```js
|
|
23
|
+
* const lightShadowMapViewer = new ShadowMapViewer( light );
|
|
24
|
+
* lightShadowMapViewer.position.x = 10;
|
|
25
|
+
* lightShadowMapViewer.position.y = SCREEN_HEIGHT - ( SHADOW_MAP_HEIGHT / 4 ) - 10;
|
|
26
|
+
* lightShadowMapViewer.size.width = SHADOW_MAP_WIDTH / 4;
|
|
27
|
+
* lightShadowMapViewer.size.height = SHADOW_MAP_HEIGHT / 4;
|
|
28
|
+
* lightShadowMapViewer.update();
|
|
29
|
+
* ```
|
|
39
30
|
*/
|
|
40
|
-
|
|
41
31
|
class ShadowMapViewer {
|
|
42
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Constructs a new shadow map viewer.
|
|
35
|
+
*
|
|
36
|
+
* @param {Light} light - The shadow casting light.
|
|
37
|
+
*/
|
|
43
38
|
constructor( light ) {
|
|
44
39
|
|
|
45
40
|
//- Internals
|
|
@@ -110,11 +105,21 @@ class ShadowMapViewer {
|
|
|
110
105
|
|
|
111
106
|
}
|
|
112
107
|
|
|
113
|
-
|
|
114
|
-
|
|
108
|
+
/**
|
|
109
|
+
* Whether to display the shadow map viewer or not.
|
|
110
|
+
*
|
|
111
|
+
* @type {boolean}
|
|
112
|
+
* @default true
|
|
113
|
+
*/
|
|
115
114
|
this.enabled = true;
|
|
116
115
|
|
|
117
|
-
|
|
116
|
+
/**
|
|
117
|
+
* The size of the viewer. When changing this property, make sure
|
|
118
|
+
* to call {@link ShadowMapViewer#update}.
|
|
119
|
+
*
|
|
120
|
+
* @type {{width:number,height:number}}
|
|
121
|
+
* @default true
|
|
122
|
+
*/
|
|
118
123
|
this.size = {
|
|
119
124
|
width: frame.width,
|
|
120
125
|
height: frame.height,
|
|
@@ -131,7 +136,13 @@ class ShadowMapViewer {
|
|
|
131
136
|
}
|
|
132
137
|
};
|
|
133
138
|
|
|
134
|
-
|
|
139
|
+
/**
|
|
140
|
+
* The position of the viewer. When changing this property, make sure
|
|
141
|
+
* to call {@link ShadowMapViewer#update}.
|
|
142
|
+
*
|
|
143
|
+
* @type {{x:number,y:number, set:function(number,number)}}
|
|
144
|
+
* @default true
|
|
145
|
+
*/
|
|
135
146
|
this.position = {
|
|
136
147
|
x: frame.x,
|
|
137
148
|
y: frame.y,
|
|
@@ -150,6 +161,11 @@ class ShadowMapViewer {
|
|
|
150
161
|
}
|
|
151
162
|
};
|
|
152
163
|
|
|
164
|
+
/**
|
|
165
|
+
* Renders the viewer. This method must be called in the app's animation loop.
|
|
166
|
+
*
|
|
167
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
168
|
+
*/
|
|
153
169
|
this.render = function ( renderer ) {
|
|
154
170
|
|
|
155
171
|
if ( this.enabled ) {
|
|
@@ -171,6 +187,10 @@ class ShadowMapViewer {
|
|
|
171
187
|
|
|
172
188
|
};
|
|
173
189
|
|
|
190
|
+
/**
|
|
191
|
+
* Resizes the viewer. This method should be called whenever the app's
|
|
192
|
+
* window is resized.
|
|
193
|
+
*/
|
|
174
194
|
this.updateForWindowResize = function () {
|
|
175
195
|
|
|
176
196
|
if ( this.enabled ) {
|
|
@@ -187,6 +207,9 @@ class ShadowMapViewer {
|
|
|
187
207
|
|
|
188
208
|
};
|
|
189
209
|
|
|
210
|
+
/**
|
|
211
|
+
* Updates the viewer.
|
|
212
|
+
*/
|
|
190
213
|
this.update = function () {
|
|
191
214
|
|
|
192
215
|
this.position.set( this.position.x, this.position.y );
|