@plastic-software/three 0.174.0 → 0.175.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +10655 -1446
- package/build/three.core.js +9626 -1094
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +834 -157
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +4 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2658 -1697
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2654 -1709
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +93 -39
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +171 -48
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +71 -29
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +41 -3
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +35 -0
- package/examples/jsm/loaders/DDSLoader.js +24 -0
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +42 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +218 -5
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +86 -18
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +38 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +81 -61
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +79 -2
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +108 -72
- package/examples/jsm/misc/VolumeSlice.js +88 -45
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +70 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +131 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +266 -133
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +1 -1
- package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -1
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
- package/examples/jsm/tsl/math/Bayer.js +14 -1
- package/examples/jsm/tsl/utils/Raymarching.js +4 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +1 -1
- package/src/Three.TSL.js +3 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +168 -18
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/AudioAnalyser.js +1 -1
- package/src/audio/AudioListener.js +2 -2
- package/src/audio/PositionalAudio.js +5 -5
- package/src/constants.js +1429 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +23 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +166 -7
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +16 -1
- package/src/extras/Earcut.js +3 -781
- package/src/extras/ImageUtils.js +3 -2
- package/src/extras/PMREMGenerator.js +22 -17
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +1 -1
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/ConeGeometry.js +2 -2
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/geometries/ExtrudeGeometry.js +71 -39
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/lights/LightShadow.js +1 -1
- package/src/lights/webgpu/IESSpotLight.js +1 -1
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +4 -6
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +53 -0
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +6 -2
- package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
- package/src/loaders/nodes/NodeObjectLoader.js +3 -3
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +1 -1
- package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +7 -3
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
- package/src/math/Color.js +1 -1
- package/src/math/MathUtils.js +223 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/accessors/BatchNode.js +8 -8
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +1 -1
- package/src/nodes/accessors/InstanceNode.js +5 -5
- package/src/nodes/accessors/InstancedMeshNode.js +1 -1
- package/src/nodes/accessors/MorphNode.js +27 -23
- package/src/nodes/accessors/Normal.js +1 -1
- package/src/nodes/accessors/Object3DNode.js +12 -12
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +46 -37
- package/src/nodes/accessors/StorageBufferNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +25 -5
- package/src/nodes/accessors/TextureSizeNode.js +1 -1
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/CodeNode.js +4 -4
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +23 -3
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/code/ScriptableValueNode.js +2 -2
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/CacheNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/Node.js +14 -2
- package/src/nodes/core/NodeBuilder.js +86 -14
- package/src/nodes/core/StackNode.js +5 -5
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/VarNode.js +2 -8
- package/src/nodes/core/VaryingNode.js +3 -3
- package/src/nodes/display/BlendModes.js +4 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PosterizeNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +3 -3
- package/src/nodes/display/ViewportDepthNode.js +2 -2
- package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
- package/src/nodes/display/ViewportTextureNode.js +4 -4
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +30 -2
- package/src/nodes/lighting/AnalyticLightNode.js +9 -1
- package/src/nodes/lighting/LightsNode.js +3 -3
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +20 -3
- package/src/nodes/math/MathNode.js +83 -78
- package/src/nodes/math/OperatorNode.js +171 -82
- package/src/nodes/pmrem/PMREMNode.js +4 -4
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +115 -12
- package/src/nodes/utils/ArrayElementNode.js +3 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/EquirectUVNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +27 -2
- package/src/nodes/utils/LoopNode.js +58 -28
- package/src/nodes/utils/MaxMipLevelNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -2
- package/src/nodes/utils/RemapNode.js +6 -6
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/src/objects/BatchedMesh.js +4 -4
- package/src/objects/InstancedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Skeleton.js +1 -1
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +617 -79
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Attributes.js +2 -2
- package/src/renderers/common/Backend.js +12 -3
- package/src/renderers/common/Background.js +1 -0
- package/src/renderers/common/Color4.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/PostProcessing.js +2 -0
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderObject.js +1 -1
- package/src/renderers/common/RenderObjects.js +2 -2
- package/src/renderers/common/Renderer.js +52 -31
- package/src/renderers/common/XRManager.js +333 -10
- package/src/renderers/common/extras/PMREMGenerator.js +6 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/shaders/UniformsLib.js +1 -4
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLState.js +9 -9
- package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +128 -87
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
- package/src/renderers/webgpu/WebGPURenderer.js +17 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +173 -1
- package/src/scenes/Scene.js +2 -1
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +5 -5
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -81,19 +81,67 @@ function lineToLineClosestPoints( line1, line2, target1 = null, target2 = null )
|
|
|
81
81
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
+
/**
|
|
85
|
+
* An octree is a hierarchical tree data structure used to partition a three-dimensional
|
|
86
|
+
* space by recursively subdividing it into eight octants.
|
|
87
|
+
*
|
|
88
|
+
* This particular implementation can have up to sixteen levels and stores up to eight triangles
|
|
89
|
+
* in leaf nodes.
|
|
90
|
+
*
|
|
91
|
+
* `Octree` can be used in games to compute collision between the game world and colliders from
|
|
92
|
+
* the player or other dynamic 3D objects.
|
|
93
|
+
*
|
|
94
|
+
*
|
|
95
|
+
* ```js
|
|
96
|
+
* const octree = new Octree().fromGraphNode( scene );
|
|
97
|
+
* const result = octree.capsuleIntersect( playerCollider ); // collision detection
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
84
100
|
class Octree {
|
|
85
101
|
|
|
102
|
+
/**
|
|
103
|
+
* Constructs a new Octree.
|
|
104
|
+
*
|
|
105
|
+
* @param {Box3} [box] - The base box with enclose the entire Octree.
|
|
106
|
+
*/
|
|
86
107
|
constructor( box ) {
|
|
87
108
|
|
|
109
|
+
/**
|
|
110
|
+
* The base box with enclose the entire Octree.
|
|
111
|
+
*
|
|
112
|
+
* @type {Box3}
|
|
113
|
+
*/
|
|
88
114
|
this.box = box;
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* The bounds of the Octree. Compared to {@link Octree#box}, no
|
|
118
|
+
* margin is applied.
|
|
119
|
+
*
|
|
120
|
+
* @type {Box3}
|
|
121
|
+
*/
|
|
89
122
|
this.bounds = new Box3();
|
|
90
123
|
|
|
124
|
+
/**
|
|
125
|
+
* Can by used for layers configuration for refine testing.
|
|
126
|
+
*
|
|
127
|
+
* @type {Layers}
|
|
128
|
+
*/
|
|
129
|
+
this.layers = new Layers();
|
|
130
|
+
|
|
131
|
+
// private
|
|
132
|
+
|
|
91
133
|
this.subTrees = [];
|
|
92
134
|
this.triangles = [];
|
|
93
|
-
this.layers = new Layers();
|
|
94
135
|
|
|
95
136
|
}
|
|
96
137
|
|
|
138
|
+
/**
|
|
139
|
+
* Adds the given triangle to the Octree. The triangle vertices are clamped if they exceed
|
|
140
|
+
* the bounds of the Octree.
|
|
141
|
+
*
|
|
142
|
+
* @param {Triangle} triangle - The triangle to add.
|
|
143
|
+
* @return {Octree} A reference to this Octree.
|
|
144
|
+
*/
|
|
97
145
|
addTriangle( triangle ) {
|
|
98
146
|
|
|
99
147
|
this.bounds.min.x = Math.min( this.bounds.min.x, triangle.a.x, triangle.b.x, triangle.c.x );
|
|
@@ -109,6 +157,11 @@ class Octree {
|
|
|
109
157
|
|
|
110
158
|
}
|
|
111
159
|
|
|
160
|
+
/**
|
|
161
|
+
* Prepares {@link Octree#box} for the build.
|
|
162
|
+
*
|
|
163
|
+
* @return {Octree} A reference to this Octree.
|
|
164
|
+
*/
|
|
112
165
|
calcBox() {
|
|
113
166
|
|
|
114
167
|
this.box = this.bounds.clone();
|
|
@@ -122,6 +175,13 @@ class Octree {
|
|
|
122
175
|
|
|
123
176
|
}
|
|
124
177
|
|
|
178
|
+
/**
|
|
179
|
+
* Splits the Octree. This method is used recursively when
|
|
180
|
+
* building the Octree.
|
|
181
|
+
*
|
|
182
|
+
* @param {number} level - The current level.
|
|
183
|
+
* @return {Octree} A reference to this Octree.
|
|
184
|
+
*/
|
|
125
185
|
split( level ) {
|
|
126
186
|
|
|
127
187
|
if ( ! this.box ) return;
|
|
@@ -187,6 +247,11 @@ class Octree {
|
|
|
187
247
|
|
|
188
248
|
}
|
|
189
249
|
|
|
250
|
+
/**
|
|
251
|
+
* Builds the Octree.
|
|
252
|
+
*
|
|
253
|
+
* @return {Octree} A reference to this Octree.
|
|
254
|
+
*/
|
|
190
255
|
build() {
|
|
191
256
|
|
|
192
257
|
this.calcBox();
|
|
@@ -196,6 +261,12 @@ class Octree {
|
|
|
196
261
|
|
|
197
262
|
}
|
|
198
263
|
|
|
264
|
+
/**
|
|
265
|
+
* Computes the triangles that potentially intersect with the given ray.
|
|
266
|
+
*
|
|
267
|
+
* @param {Ray} ray - The ray to test.
|
|
268
|
+
* @param {Array<Triangle>} triangles - The target array that holds the triangles.
|
|
269
|
+
*/
|
|
199
270
|
getRayTriangles( ray, triangles ) {
|
|
200
271
|
|
|
201
272
|
for ( let i = 0; i < this.subTrees.length; i ++ ) {
|
|
@@ -219,10 +290,16 @@ class Octree {
|
|
|
219
290
|
|
|
220
291
|
}
|
|
221
292
|
|
|
222
|
-
return triangles;
|
|
223
|
-
|
|
224
293
|
}
|
|
225
294
|
|
|
295
|
+
/**
|
|
296
|
+
* Computes the intersection between the given capsule and triangle.
|
|
297
|
+
*
|
|
298
|
+
* @param {Capsule} capsule - The capsule to test.
|
|
299
|
+
* @param {Triangle} triangle - The triangle to test.
|
|
300
|
+
* @return {Object|false} The intersection object. If no intersection
|
|
301
|
+
* is detected, the method returns `false`.
|
|
302
|
+
*/
|
|
226
303
|
triangleCapsuleIntersect( capsule, triangle ) {
|
|
227
304
|
|
|
228
305
|
triangle.getPlane( _plane );
|
|
@@ -277,6 +354,14 @@ class Octree {
|
|
|
277
354
|
|
|
278
355
|
}
|
|
279
356
|
|
|
357
|
+
/**
|
|
358
|
+
* Computes the intersection between the given sphere and triangle.
|
|
359
|
+
*
|
|
360
|
+
* @param {Sphere} sphere - The sphere to test.
|
|
361
|
+
* @param {Triangle} triangle - The triangle to test.
|
|
362
|
+
* @return {Object|false} The intersection object. If no intersection
|
|
363
|
+
* is detected, the method returns `false`.
|
|
364
|
+
*/
|
|
280
365
|
triangleSphereIntersect( sphere, triangle ) {
|
|
281
366
|
|
|
282
367
|
triangle.getPlane( _plane );
|
|
@@ -319,6 +404,12 @@ class Octree {
|
|
|
319
404
|
|
|
320
405
|
}
|
|
321
406
|
|
|
407
|
+
/**
|
|
408
|
+
* Computes the triangles that potentially intersect with the given bounding sphere.
|
|
409
|
+
*
|
|
410
|
+
* @param {Sphere} sphere - The sphere to test.
|
|
411
|
+
* @param {Array<Triangle>} triangles - The target array that holds the triangles.
|
|
412
|
+
*/
|
|
322
413
|
getSphereTriangles( sphere, triangles ) {
|
|
323
414
|
|
|
324
415
|
for ( let i = 0; i < this.subTrees.length; i ++ ) {
|
|
@@ -345,6 +436,12 @@ class Octree {
|
|
|
345
436
|
|
|
346
437
|
}
|
|
347
438
|
|
|
439
|
+
/**
|
|
440
|
+
* Computes the triangles that potentially intersect with the given capsule.
|
|
441
|
+
*
|
|
442
|
+
* @param {Capsule} capsule - The capsule to test.
|
|
443
|
+
* @param {Array<Triangle>} triangles - The target array that holds the triangles.
|
|
444
|
+
*/
|
|
348
445
|
getCapsuleTriangles( capsule, triangles ) {
|
|
349
446
|
|
|
350
447
|
for ( let i = 0; i < this.subTrees.length; i ++ ) {
|
|
@@ -371,6 +468,13 @@ class Octree {
|
|
|
371
468
|
|
|
372
469
|
}
|
|
373
470
|
|
|
471
|
+
/**
|
|
472
|
+
* Performs a bounding sphere intersection test with this Octree.
|
|
473
|
+
*
|
|
474
|
+
* @param {Sphere} sphere - The bounding sphere to test.
|
|
475
|
+
* @return {Object|boolean} The intersection object. If no intersection
|
|
476
|
+
* is detected, the method returns `false`.
|
|
477
|
+
*/
|
|
374
478
|
sphereIntersect( sphere ) {
|
|
375
479
|
|
|
376
480
|
_sphere.copy( sphere );
|
|
@@ -405,6 +509,13 @@ class Octree {
|
|
|
405
509
|
|
|
406
510
|
}
|
|
407
511
|
|
|
512
|
+
/**
|
|
513
|
+
* Performs a capsule intersection test with this Octree.
|
|
514
|
+
*
|
|
515
|
+
* @param {Capsule} capsule - The capsule to test.
|
|
516
|
+
* @return {Object|boolean} The intersection object. If no intersection
|
|
517
|
+
* is detected, the method returns `false`.
|
|
518
|
+
*/
|
|
408
519
|
capsuleIntersect( capsule ) {
|
|
409
520
|
|
|
410
521
|
_capsule.copy( capsule );
|
|
@@ -439,10 +550,15 @@ class Octree {
|
|
|
439
550
|
|
|
440
551
|
}
|
|
441
552
|
|
|
553
|
+
/**
|
|
554
|
+
* Performs a ray intersection test with this Octree.
|
|
555
|
+
*
|
|
556
|
+
* @param {Ray} ray - The ray to test.
|
|
557
|
+
* @return {Object|boolean} The nearest intersection object. If no intersection
|
|
558
|
+
* is detected, the method returns `false`.
|
|
559
|
+
*/
|
|
442
560
|
rayIntersect( ray ) {
|
|
443
561
|
|
|
444
|
-
if ( ray.direction.length() === 0 ) return;
|
|
445
|
-
|
|
446
562
|
const triangles = [];
|
|
447
563
|
let triangle, position, distance = 1e100;
|
|
448
564
|
|
|
@@ -472,6 +588,12 @@ class Octree {
|
|
|
472
588
|
|
|
473
589
|
}
|
|
474
590
|
|
|
591
|
+
/**
|
|
592
|
+
* Constructs the Octree from the given 3D object.
|
|
593
|
+
*
|
|
594
|
+
* @param {Object3D} group - The scene graph node.
|
|
595
|
+
* @return {Octree} A reference to this Octree.
|
|
596
|
+
*/
|
|
475
597
|
fromGraphNode( group ) {
|
|
476
598
|
|
|
477
599
|
group.updateWorldMatrix( true, true );
|
|
@@ -529,6 +651,11 @@ class Octree {
|
|
|
529
651
|
|
|
530
652
|
}
|
|
531
653
|
|
|
654
|
+
/**
|
|
655
|
+
* Clears the Octree by making it empty.
|
|
656
|
+
*
|
|
657
|
+
* @return {Octree} A reference to this Octree.
|
|
658
|
+
*/
|
|
532
659
|
clear() {
|
|
533
660
|
|
|
534
661
|
this.box = null;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
// Ported from Stefan Gustavson's java implementation
|
|
2
|
-
// http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf
|
|
3
|
-
// Read Stefan's excellent paper for details on how this code works.
|
|
4
|
-
//
|
|
5
|
-
// Sean McCullough banksean@gmail.com
|
|
6
|
-
//
|
|
7
|
-
// Added 4D noise
|
|
8
|
-
|
|
9
1
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
2
|
+
* A utility class providing noise functions.
|
|
3
|
+
*
|
|
4
|
+
* The code is based on [Simplex noise demystified]{@link https://web.archive.org/web/20210210162332/http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf}
|
|
5
|
+
* by Stefan Gustavson, 2005.
|
|
12
6
|
*/
|
|
13
7
|
class SimplexNoise {
|
|
14
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Constructs a new simplex noise object.
|
|
11
|
+
*
|
|
12
|
+
* @param {Object} [r=Math] - A math utility class that holds a `random()` method. This makes it
|
|
13
|
+
* possible to pass in custom random number generator.
|
|
14
|
+
*/
|
|
15
15
|
constructor( r = Math ) {
|
|
16
16
|
|
|
17
17
|
this.grad3 = [[ 1, 1, 0 ], [ - 1, 1, 0 ], [ 1, - 1, 0 ], [ - 1, - 1, 0 ],
|
|
@@ -58,24 +58,13 @@ class SimplexNoise {
|
|
|
58
58
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
return g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z;
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
dot4( g, x, y, z, w ) {
|
|
74
|
-
|
|
75
|
-
return g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z + g[ 3 ] * w;
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
|
|
61
|
+
/**
|
|
62
|
+
* A 2D simplex noise method.
|
|
63
|
+
*
|
|
64
|
+
* @param {number} xin - The x coordinate.
|
|
65
|
+
* @param {number} yin - The y coordinate.
|
|
66
|
+
* @return {number} The noise value.
|
|
67
|
+
*/
|
|
79
68
|
noise( xin, yin ) {
|
|
80
69
|
|
|
81
70
|
let n0; // Noise contributions from the three corners
|
|
@@ -129,7 +118,7 @@ class SimplexNoise {
|
|
|
129
118
|
else {
|
|
130
119
|
|
|
131
120
|
t0 *= t0;
|
|
132
|
-
n0 = t0 * t0 * this.
|
|
121
|
+
n0 = t0 * t0 * this._dot( this.grad3[ gi0 ], x0, y0 ); // (x,y) of grad3 used for 2D gradient
|
|
133
122
|
|
|
134
123
|
}
|
|
135
124
|
|
|
@@ -138,7 +127,7 @@ class SimplexNoise {
|
|
|
138
127
|
else {
|
|
139
128
|
|
|
140
129
|
t1 *= t1;
|
|
141
|
-
n1 = t1 * t1 * this.
|
|
130
|
+
n1 = t1 * t1 * this._dot( this.grad3[ gi1 ], x1, y1 );
|
|
142
131
|
|
|
143
132
|
}
|
|
144
133
|
|
|
@@ -147,7 +136,7 @@ class SimplexNoise {
|
|
|
147
136
|
else {
|
|
148
137
|
|
|
149
138
|
t2 *= t2;
|
|
150
|
-
n2 = t2 * t2 * this.
|
|
139
|
+
n2 = t2 * t2 * this._dot( this.grad3[ gi2 ], x2, y2 );
|
|
151
140
|
|
|
152
141
|
}
|
|
153
142
|
|
|
@@ -157,7 +146,14 @@ class SimplexNoise {
|
|
|
157
146
|
|
|
158
147
|
}
|
|
159
148
|
|
|
160
|
-
|
|
149
|
+
/**
|
|
150
|
+
* A 3D simplex noise method.
|
|
151
|
+
*
|
|
152
|
+
* @param {number} xin - The x coordinate.
|
|
153
|
+
* @param {number} yin - The y coordinate.
|
|
154
|
+
* @param {number} zin - The z coordinate.
|
|
155
|
+
* @return {number} The noise value.
|
|
156
|
+
*/
|
|
161
157
|
noise3d( xin, yin, zin ) {
|
|
162
158
|
|
|
163
159
|
let n0; // Noise contributions from the four corners
|
|
@@ -257,7 +253,7 @@ class SimplexNoise {
|
|
|
257
253
|
else {
|
|
258
254
|
|
|
259
255
|
t0 *= t0;
|
|
260
|
-
n0 = t0 * t0 * this.
|
|
256
|
+
n0 = t0 * t0 * this._dot3( this.grad3[ gi0 ], x0, y0, z0 );
|
|
261
257
|
|
|
262
258
|
}
|
|
263
259
|
|
|
@@ -266,7 +262,7 @@ class SimplexNoise {
|
|
|
266
262
|
else {
|
|
267
263
|
|
|
268
264
|
t1 *= t1;
|
|
269
|
-
n1 = t1 * t1 * this.
|
|
265
|
+
n1 = t1 * t1 * this._dot3( this.grad3[ gi1 ], x1, y1, z1 );
|
|
270
266
|
|
|
271
267
|
}
|
|
272
268
|
|
|
@@ -275,7 +271,7 @@ class SimplexNoise {
|
|
|
275
271
|
else {
|
|
276
272
|
|
|
277
273
|
t2 *= t2;
|
|
278
|
-
n2 = t2 * t2 * this.
|
|
274
|
+
n2 = t2 * t2 * this._dot3( this.grad3[ gi2 ], x2, y2, z2 );
|
|
279
275
|
|
|
280
276
|
}
|
|
281
277
|
|
|
@@ -284,7 +280,7 @@ class SimplexNoise {
|
|
|
284
280
|
else {
|
|
285
281
|
|
|
286
282
|
t3 *= t3;
|
|
287
|
-
n3 = t3 * t3 * this.
|
|
283
|
+
n3 = t3 * t3 * this._dot3( this.grad3[ gi3 ], x3, y3, z3 );
|
|
288
284
|
|
|
289
285
|
}
|
|
290
286
|
|
|
@@ -294,7 +290,15 @@ class SimplexNoise {
|
|
|
294
290
|
|
|
295
291
|
}
|
|
296
292
|
|
|
297
|
-
|
|
293
|
+
/**
|
|
294
|
+
* A 4D simplex noise method.
|
|
295
|
+
*
|
|
296
|
+
* @param {number} x - The x coordinate.
|
|
297
|
+
* @param {number} y - The y coordinate.
|
|
298
|
+
* @param {number} z - The z coordinate.
|
|
299
|
+
* @param {number} w - The w coordinate.
|
|
300
|
+
* @return {number} The noise value.
|
|
301
|
+
*/
|
|
298
302
|
noise4d( x, y, z, w ) {
|
|
299
303
|
|
|
300
304
|
// For faster and easier lookups
|
|
@@ -394,7 +398,7 @@ class SimplexNoise {
|
|
|
394
398
|
else {
|
|
395
399
|
|
|
396
400
|
t0 *= t0;
|
|
397
|
-
n0 = t0 * t0 * this.
|
|
401
|
+
n0 = t0 * t0 * this._dot4( grad4[ gi0 ], x0, y0, z0, w0 );
|
|
398
402
|
|
|
399
403
|
}
|
|
400
404
|
|
|
@@ -403,7 +407,7 @@ class SimplexNoise {
|
|
|
403
407
|
else {
|
|
404
408
|
|
|
405
409
|
t1 *= t1;
|
|
406
|
-
n1 = t1 * t1 * this.
|
|
410
|
+
n1 = t1 * t1 * this._dot4( grad4[ gi1 ], x1, y1, z1, w1 );
|
|
407
411
|
|
|
408
412
|
}
|
|
409
413
|
|
|
@@ -412,7 +416,7 @@ class SimplexNoise {
|
|
|
412
416
|
else {
|
|
413
417
|
|
|
414
418
|
t2 *= t2;
|
|
415
|
-
n2 = t2 * t2 * this.
|
|
419
|
+
n2 = t2 * t2 * this._dot4( grad4[ gi2 ], x2, y2, z2, w2 );
|
|
416
420
|
|
|
417
421
|
}
|
|
418
422
|
|
|
@@ -421,7 +425,7 @@ class SimplexNoise {
|
|
|
421
425
|
else {
|
|
422
426
|
|
|
423
427
|
t3 *= t3;
|
|
424
|
-
n3 = t3 * t3 * this.
|
|
428
|
+
n3 = t3 * t3 * this._dot4( grad4[ gi3 ], x3, y3, z3, w3 );
|
|
425
429
|
|
|
426
430
|
}
|
|
427
431
|
|
|
@@ -430,7 +434,7 @@ class SimplexNoise {
|
|
|
430
434
|
else {
|
|
431
435
|
|
|
432
436
|
t4 *= t4;
|
|
433
|
-
n4 = t4 * t4 * this.
|
|
437
|
+
n4 = t4 * t4 * this._dot4( grad4[ gi4 ], x4, y4, z4, w4 );
|
|
434
438
|
|
|
435
439
|
}
|
|
436
440
|
|
|
@@ -439,6 +443,26 @@ class SimplexNoise {
|
|
|
439
443
|
|
|
440
444
|
}
|
|
441
445
|
|
|
446
|
+
// private
|
|
447
|
+
|
|
448
|
+
_dot( g, x, y ) {
|
|
449
|
+
|
|
450
|
+
return g[ 0 ] * x + g[ 1 ] * y;
|
|
451
|
+
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
_dot3( g, x, y, z ) {
|
|
455
|
+
|
|
456
|
+
return g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z;
|
|
457
|
+
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
_dot4( g, x, y, z, w ) {
|
|
461
|
+
|
|
462
|
+
return g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z + g[ 3 ] * w;
|
|
463
|
+
|
|
464
|
+
}
|
|
465
|
+
|
|
442
466
|
}
|
|
443
467
|
|
|
444
468
|
export { SimplexNoise };
|
|
@@ -6,39 +6,33 @@ import {
|
|
|
6
6
|
} from 'three';
|
|
7
7
|
import { ConvexGeometry } from '../geometries/ConvexGeometry.js';
|
|
8
8
|
|
|
9
|
+
const _v1 = new Vector3();
|
|
10
|
+
|
|
9
11
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* Usage:
|
|
12
|
+
* This class can be used to subdivide a convex Geometry object into pieces.
|
|
13
13
|
*
|
|
14
14
|
* Use the function prepareBreakableObject to prepare a Mesh object to be broken.
|
|
15
|
-
*
|
|
16
|
-
* Then, call the various functions to subdivide the object (subdivideByImpact, cutByPlane)
|
|
17
|
-
*
|
|
15
|
+
* Then, call the various functions to subdivide the object (subdivideByImpact, cutByPlane).
|
|
18
16
|
* Sub-objects that are product of subdivision don't need prepareBreakableObject to be called on them.
|
|
19
17
|
*
|
|
20
18
|
* Requisites for the object:
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* - The geometry must be convex (this is not checked in the library). You can create convex
|
|
27
|
-
* geometries with ConvexGeometry. The BoxGeometry, SphereGeometry and other convex primitives
|
|
28
|
-
* can also be used.
|
|
19
|
+
* - Mesh object must have a buffer geometry and a material.
|
|
20
|
+
* - Vertex normals must be planar (not smoothed).
|
|
21
|
+
* - The geometry must be convex (this is not checked in the library). You can create convex
|
|
22
|
+
* geometries with {@link ConvexGeometry}. The {@link BoxGeometry}, {@link SphereGeometry} and other
|
|
23
|
+
* convex primitives can also be used.
|
|
29
24
|
*
|
|
30
25
|
* Note: This lib adds member variables to object's userData member (see prepareBreakableObject function)
|
|
31
26
|
* Use with caution and read the code when using with other libs.
|
|
32
|
-
*
|
|
33
|
-
* @param {double} minSizeForBreak Min size a debris can have to break.
|
|
34
|
-
* @param {double} smallDelta Max distance to consider that a point belongs to a plane.
|
|
35
|
-
*
|
|
36
27
|
*/
|
|
37
|
-
|
|
38
|
-
const _v1 = new Vector3();
|
|
39
|
-
|
|
40
28
|
class ConvexObjectBreaker {
|
|
41
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Constructs a new convex object breaker.
|
|
32
|
+
*
|
|
33
|
+
* @param {number} [minSizeForBreak=1.4] - Min size a debris can have to break.
|
|
34
|
+
* @param {number} [smallDelta=0.0001] - Max distance to consider that a point belongs to a plane.
|
|
35
|
+
*/
|
|
42
36
|
constructor( minSizeForBreak = 1.4, smallDelta = 0.0001 ) {
|
|
43
37
|
|
|
44
38
|
this.minSizeForBreak = minSizeForBreak;
|
|
@@ -68,6 +62,15 @@ class ConvexObjectBreaker {
|
|
|
68
62
|
|
|
69
63
|
}
|
|
70
64
|
|
|
65
|
+
/**
|
|
66
|
+
* Must be called for all 3D objects that should be breakable.
|
|
67
|
+
*
|
|
68
|
+
* @param {Object3D} object - The 3D object. It must have a convex geometry.
|
|
69
|
+
* @param {number} mass - The 3D object's mass in kg. Must be greater than `0`.
|
|
70
|
+
* @param {Vector3} velocity - The 3D object's velocity.
|
|
71
|
+
* @param {Vector3} angularVelocity - The 3D object's angular velocity.
|
|
72
|
+
* @param {boolean} breakable - Whether the 3D object is breakable or not.
|
|
73
|
+
*/
|
|
71
74
|
prepareBreakableObject( object, mass, velocity, angularVelocity, breakable ) {
|
|
72
75
|
|
|
73
76
|
// object is a Object3d (normally a Mesh), must have a buffer geometry, and it must be convex.
|
|
@@ -82,11 +85,16 @@ class ConvexObjectBreaker {
|
|
|
82
85
|
|
|
83
86
|
}
|
|
84
87
|
|
|
85
|
-
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
+
/**
|
|
89
|
+
* Subdivides the given 3D object into pieces by an impact (meaning another object hits
|
|
90
|
+
* the given 3D object at a certain surface point).
|
|
88
91
|
*
|
|
89
|
-
*
|
|
92
|
+
* @param {Object3D} object - The 3D object to subdivide.
|
|
93
|
+
* @param {Vector3} pointOfImpact - The point of impact.
|
|
94
|
+
* @param {Vector3} normal - The impact normal.
|
|
95
|
+
* @param {number} maxRadialIterations - Iterations for radial cuts.
|
|
96
|
+
* @param {number} maxRandomIterations - Max random iterations for not-radial cuts.
|
|
97
|
+
* @return {Array<Object3D>} The array of pieces.
|
|
90
98
|
*/
|
|
91
99
|
subdivideByImpact( object, pointOfImpact, normal, maxRadialIterations, maxRandomIterations ) {
|
|
92
100
|
|
|
@@ -168,6 +176,14 @@ class ConvexObjectBreaker {
|
|
|
168
176
|
|
|
169
177
|
}
|
|
170
178
|
|
|
179
|
+
/**
|
|
180
|
+
* Subdivides the given 3D object into pieces by a plane.
|
|
181
|
+
*
|
|
182
|
+
* @param {Object3D} object - The 3D object to subdivide.
|
|
183
|
+
* @param {Plane} plane - The plane to cut the 3D object.
|
|
184
|
+
* @param {{object1:?Mesh,object2:?Mesh}} output - An object that stores the pieces.
|
|
185
|
+
* @return {number} The number of pieces.
|
|
186
|
+
*/
|
|
171
187
|
cutByPlane( object, plane, output ) {
|
|
172
188
|
|
|
173
189
|
// Returns breakable objects in output.object1 and output.object2 members, the resulting 2 pieces of the cut.
|
|
@@ -449,6 +465,8 @@ class ConvexObjectBreaker {
|
|
|
449
465
|
|
|
450
466
|
}
|
|
451
467
|
|
|
468
|
+
// internal helpers
|
|
469
|
+
|
|
452
470
|
static transformFreeVector( v, m ) {
|
|
453
471
|
|
|
454
472
|
// input:
|