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
package/src/extras/ImageUtils.js
CHANGED
|
@@ -3,9 +3,21 @@ import { SRGBToLinear } from '../math/ColorManagement.js';
|
|
|
3
3
|
|
|
4
4
|
let _canvas;
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* A class containing utility functions for images.
|
|
8
|
+
*
|
|
9
|
+
* @hideconstructor
|
|
10
|
+
*/
|
|
6
11
|
class ImageUtils {
|
|
7
12
|
|
|
8
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Returns a data URI containing a representation of the given image.
|
|
15
|
+
*
|
|
16
|
+
* @param {(HTMLImageElement|HTMLCanvasElement)} image - The image object.
|
|
17
|
+
* @param {string} [type='image/png'] - Indicates the image format.
|
|
18
|
+
* @return {string} The data URI.
|
|
19
|
+
*/
|
|
20
|
+
static getDataURL( image, type = 'image/png' ) {
|
|
9
21
|
|
|
10
22
|
if ( /^data:/i.test( image.src ) ) {
|
|
11
23
|
|
|
@@ -48,10 +60,16 @@ class ImageUtils {
|
|
|
48
60
|
|
|
49
61
|
}
|
|
50
62
|
|
|
51
|
-
return canvas.toDataURL(
|
|
63
|
+
return canvas.toDataURL( type );
|
|
52
64
|
|
|
53
65
|
}
|
|
54
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Converts the given sRGB image data to linear color space.
|
|
69
|
+
*
|
|
70
|
+
* @param {(HTMLImageElement|HTMLCanvasElement|ImageBitmap|Object)} image - The image object.
|
|
71
|
+
* @return {HTMLCanvasElement|Object} The converted image.
|
|
72
|
+
*/
|
|
55
73
|
static sRGBToLinear( image ) {
|
|
56
74
|
|
|
57
75
|
if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||
|
|
@@ -60,6 +60,8 @@ const _axisDirections = [
|
|
|
60
60
|
/*@__PURE__*/ new Vector3( - 1, 1, 1 ),
|
|
61
61
|
/*@__PURE__*/ new Vector3( 1, 1, 1 ) ];
|
|
62
62
|
|
|
63
|
+
const _origin = /*@__PURE__*/ new Vector3();
|
|
64
|
+
|
|
63
65
|
/**
|
|
64
66
|
* This class generates a Prefiltered, Mipmapped Radiance Environment Map
|
|
65
67
|
* (PMREM) from a cubeMap environment texture. This allows different levels of
|
|
@@ -71,12 +73,16 @@ const _axisDirections = [
|
|
|
71
73
|
* higher roughness levels. In this way we maintain resolution to smoothly
|
|
72
74
|
* interpolate diffuse lighting while limiting sampling computation.
|
|
73
75
|
*
|
|
74
|
-
* Paper: Fast, Accurate Image-Based Lighting
|
|
75
|
-
* https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view
|
|
76
|
+
* Paper: Fast, Accurate Image-Based Lighting:
|
|
77
|
+
* {@link https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view}
|
|
76
78
|
*/
|
|
77
|
-
|
|
78
79
|
class PMREMGenerator {
|
|
79
80
|
|
|
81
|
+
/**
|
|
82
|
+
* Constructs a new PMREM generator.
|
|
83
|
+
*
|
|
84
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
85
|
+
*/
|
|
80
86
|
constructor( renderer ) {
|
|
81
87
|
|
|
82
88
|
this._renderer = renderer;
|
|
@@ -100,16 +106,23 @@ class PMREMGenerator {
|
|
|
100
106
|
* Generates a PMREM from a supplied Scene, which can be faster than using an
|
|
101
107
|
* image if networking bandwidth is low. Optional sigma specifies a blur radius
|
|
102
108
|
* in radians to be applied to the scene before PMREM generation. Optional near
|
|
103
|
-
* and far planes ensure the scene is rendered in its entirety
|
|
104
|
-
* is placed at the origin).
|
|
109
|
+
* and far planes ensure the scene is rendered in its entirety.
|
|
105
110
|
*
|
|
106
|
-
* @param {Scene} scene
|
|
107
|
-
* @param {number} sigma
|
|
108
|
-
* @param {number} near
|
|
109
|
-
* @param {number} far
|
|
110
|
-
* @
|
|
111
|
+
* @param {Scene} scene - The scene to be captured.
|
|
112
|
+
* @param {number} [sigma=0] - The blur radius in radians.
|
|
113
|
+
* @param {number} [near=0.1] - The near plane distance.
|
|
114
|
+
* @param {number} [far=100] - The far plane distance.
|
|
115
|
+
* @param {Object} [options={}] - The configuration options.
|
|
116
|
+
* @param {number} [options.size=256] - The texture size of the PMREM.
|
|
117
|
+
* @param {Vector3} [options.renderTarget=origin] - The position of the internal cube camera that renders the scene.
|
|
118
|
+
* @return {WebGLRenderTarget} The resulting PMREM.
|
|
111
119
|
*/
|
|
112
|
-
fromScene( scene, sigma = 0, near = 0.1, far = 100 ) {
|
|
120
|
+
fromScene( scene, sigma = 0, near = 0.1, far = 100, options = {} ) {
|
|
121
|
+
|
|
122
|
+
const {
|
|
123
|
+
size = 256,
|
|
124
|
+
position = _origin,
|
|
125
|
+
} = options;
|
|
113
126
|
|
|
114
127
|
_oldTarget = this._renderer.getRenderTarget();
|
|
115
128
|
_oldActiveCubeFace = this._renderer.getActiveCubeFace();
|
|
@@ -118,12 +131,12 @@ class PMREMGenerator {
|
|
|
118
131
|
|
|
119
132
|
this._renderer.xr.enabled = false;
|
|
120
133
|
|
|
121
|
-
this._setSize(
|
|
134
|
+
this._setSize( size );
|
|
122
135
|
|
|
123
136
|
const cubeUVRenderTarget = this._allocateTargets();
|
|
124
137
|
cubeUVRenderTarget.depthBuffer = true;
|
|
125
138
|
|
|
126
|
-
this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );
|
|
139
|
+
this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position );
|
|
127
140
|
|
|
128
141
|
if ( sigma > 0 ) {
|
|
129
142
|
|
|
@@ -142,11 +155,10 @@ class PMREMGenerator {
|
|
|
142
155
|
* Generates a PMREM from an equirectangular texture, which can be either LDR
|
|
143
156
|
* or HDR. The ideal input image size is 1k (1024 x 512),
|
|
144
157
|
* as this matches best with the 256 x 256 cubemap output.
|
|
145
|
-
* The smallest supported equirectangular image size is 64 x 32.
|
|
146
158
|
*
|
|
147
|
-
* @param {Texture} equirectangular
|
|
148
|
-
* @param {WebGLRenderTarget} [renderTarget=null] -
|
|
149
|
-
* @return {WebGLRenderTarget}
|
|
159
|
+
* @param {Texture} equirectangular - The equirectangular texture to be converted.
|
|
160
|
+
* @param {?WebGLRenderTarget} [renderTarget=null] - The render target to use.
|
|
161
|
+
* @return {WebGLRenderTarget} The resulting PMREM.
|
|
150
162
|
*/
|
|
151
163
|
fromEquirectangular( equirectangular, renderTarget = null ) {
|
|
152
164
|
|
|
@@ -158,11 +170,10 @@ class PMREMGenerator {
|
|
|
158
170
|
* Generates a PMREM from an cubemap texture, which can be either LDR
|
|
159
171
|
* or HDR. The ideal input cube size is 256 x 256,
|
|
160
172
|
* as this matches best with the 256 x 256 cubemap output.
|
|
161
|
-
* The smallest supported cube size is 16 x 16.
|
|
162
173
|
*
|
|
163
|
-
* @param {Texture} cubemap
|
|
164
|
-
* @param {
|
|
165
|
-
* @return {WebGLRenderTarget}
|
|
174
|
+
* @param {Texture} cubemap - The cubemap texture to be converted.
|
|
175
|
+
* @param {?WebGLRenderTarget} [renderTarget=null] - The render target to use.
|
|
176
|
+
* @return {WebGLRenderTarget} The resulting PMREM.
|
|
166
177
|
*/
|
|
167
178
|
fromCubemap( cubemap, renderTarget = null ) {
|
|
168
179
|
|
|
@@ -320,7 +331,7 @@ class PMREMGenerator {
|
|
|
320
331
|
|
|
321
332
|
}
|
|
322
333
|
|
|
323
|
-
_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {
|
|
334
|
+
_sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position ) {
|
|
324
335
|
|
|
325
336
|
const fov = 90;
|
|
326
337
|
const aspect = 1;
|
|
@@ -372,17 +383,21 @@ class PMREMGenerator {
|
|
|
372
383
|
if ( col === 0 ) {
|
|
373
384
|
|
|
374
385
|
cubeCamera.up.set( 0, upSign[ i ], 0 );
|
|
375
|
-
cubeCamera.
|
|
386
|
+
cubeCamera.position.set( position.x, position.y, position.z );
|
|
387
|
+
cubeCamera.lookAt( position.x + forwardSign[ i ], position.y, position.z );
|
|
376
388
|
|
|
377
389
|
} else if ( col === 1 ) {
|
|
378
390
|
|
|
379
391
|
cubeCamera.up.set( 0, 0, upSign[ i ] );
|
|
380
|
-
cubeCamera.
|
|
392
|
+
cubeCamera.position.set( position.x, position.y, position.z );
|
|
393
|
+
cubeCamera.lookAt( position.x, position.y + forwardSign[ i ], position.z );
|
|
394
|
+
|
|
381
395
|
|
|
382
396
|
} else {
|
|
383
397
|
|
|
384
398
|
cubeCamera.up.set( 0, upSign[ i ], 0 );
|
|
385
|
-
cubeCamera.
|
|
399
|
+
cubeCamera.position.set( position.x, position.y, position.z );
|
|
400
|
+
cubeCamera.lookAt( position.x, position.y, position.z + forwardSign[ i ] );
|
|
386
401
|
|
|
387
402
|
}
|
|
388
403
|
|
|
@@ -481,6 +496,7 @@ class PMREMGenerator {
|
|
|
481
496
|
* the poles) to approximate the orthogonally-separable blur. It is least
|
|
482
497
|
* accurate at the poles, but still does a decent job.
|
|
483
498
|
*
|
|
499
|
+
* @private
|
|
484
500
|
* @param {WebGLRenderTarget} cubeUVRenderTarget
|
|
485
501
|
* @param {number} lodIn
|
|
486
502
|
* @param {number} lodOut
|
package/src/extras/ShapeUtils.js
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { Earcut } from './Earcut.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* A class containing utility functions for shapes.
|
|
5
|
+
*
|
|
6
|
+
* @hideconstructor
|
|
7
|
+
*/
|
|
3
8
|
class ShapeUtils {
|
|
4
9
|
|
|
5
|
-
|
|
6
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Calculate area of a ( 2D ) contour polygon.
|
|
12
|
+
*
|
|
13
|
+
* @param {Array<Vector2>} contour - An array of 2D points.
|
|
14
|
+
* @return {number} The area.
|
|
15
|
+
*/
|
|
7
16
|
static area( contour ) {
|
|
8
17
|
|
|
9
18
|
const n = contour.length;
|
|
@@ -19,12 +28,25 @@ class ShapeUtils {
|
|
|
19
28
|
|
|
20
29
|
}
|
|
21
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Returns `true` if the given contour uses a clockwise winding order.
|
|
33
|
+
*
|
|
34
|
+
* @param {Array<Vector2>} pts - An array of 2D points defining a polygon.
|
|
35
|
+
* @return {boolean} Whether the given contour uses a clockwise winding order or not.
|
|
36
|
+
*/
|
|
22
37
|
static isClockWise( pts ) {
|
|
23
38
|
|
|
24
39
|
return ShapeUtils.area( pts ) < 0;
|
|
25
40
|
|
|
26
41
|
}
|
|
27
42
|
|
|
43
|
+
/**
|
|
44
|
+
* Triangulates the given shape definition.
|
|
45
|
+
*
|
|
46
|
+
* @param {Array<Vector2>} contour - An array of 2D points defining the contour.
|
|
47
|
+
* @param {Array<Array<Vector2>>} holes - An array that holds arrays of 2D points defining the holes.
|
|
48
|
+
* @return {Array<Array<number>>} An array that holds for each face definition an array with three indices.
|
|
49
|
+
*/
|
|
28
50
|
static triangulateShape( contour, holes ) {
|
|
29
51
|
|
|
30
52
|
const vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { AlphaFormat, LuminanceFormat, LuminanceAlphaFormat, RedFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBFormat, RGBAFormat, RGBAIntegerFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, UnsignedByteType, ByteType, UnsignedShortType, ShortType, HalfFloatType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedIntType, IntType, FloatType, UnsignedInt5999Type } from '../constants.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Scales the texture as large as possible within its surface without cropping
|
|
5
|
+
* or stretching the texture. The method preserves the original aspect ratio of
|
|
6
|
+
* the texture. Akin to CSS `object-fit: contain`
|
|
7
|
+
*
|
|
8
|
+
* @param {Texture} texture - The texture.
|
|
9
|
+
* @param {number} aspect - The texture's aspect ratio.
|
|
10
|
+
* @return {Texture} The updated texture.
|
|
11
|
+
*/
|
|
3
12
|
function contain( texture, aspect ) {
|
|
4
13
|
|
|
5
14
|
const imageAspect = ( texture.image && texture.image.width ) ? texture.image.width / texture.image.height : 1;
|
|
@@ -26,6 +35,15 @@ function contain( texture, aspect ) {
|
|
|
26
35
|
|
|
27
36
|
}
|
|
28
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Scales the texture to the smallest possible size to fill the surface, leaving
|
|
40
|
+
* no empty space. The method preserves the original aspect ratio of the texture.
|
|
41
|
+
* Akin to CSS `object-fit: cover`.
|
|
42
|
+
*
|
|
43
|
+
* @param {Texture} texture - The texture.
|
|
44
|
+
* @param {number} aspect - The texture's aspect ratio.
|
|
45
|
+
* @return {Texture} The updated texture.
|
|
46
|
+
*/
|
|
29
47
|
function cover( texture, aspect ) {
|
|
30
48
|
|
|
31
49
|
const imageAspect = ( texture.image && texture.image.width ) ? texture.image.width / texture.image.height : 1;
|
|
@@ -52,6 +70,12 @@ function cover( texture, aspect ) {
|
|
|
52
70
|
|
|
53
71
|
}
|
|
54
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Configures the texture to the default transformation. Akin to CSS `object-fit: fill`.
|
|
75
|
+
*
|
|
76
|
+
* @param {Texture} texture - The texture.
|
|
77
|
+
* @return {Texture} The updated texture.
|
|
78
|
+
*/
|
|
55
79
|
function fill( texture ) {
|
|
56
80
|
|
|
57
81
|
texture.repeat.x = 1;
|
|
@@ -64,17 +88,14 @@ function fill( texture ) {
|
|
|
64
88
|
|
|
65
89
|
}
|
|
66
90
|
|
|
67
|
-
|
|
68
|
-
|
|
69
91
|
/**
|
|
70
|
-
*
|
|
71
|
-
* bytes must be used to represent the texture.
|
|
92
|
+
* Determines how many bytes must be used to represent the texture.
|
|
72
93
|
*
|
|
73
|
-
* @param {
|
|
74
|
-
* @param {
|
|
75
|
-
* @param {
|
|
76
|
-
* @param {
|
|
77
|
-
* @return {
|
|
94
|
+
* @param {number} width - The width of the texture.
|
|
95
|
+
* @param {number} height - The height of the texture.
|
|
96
|
+
* @param {number} format - The texture's format.
|
|
97
|
+
* @param {number} type - The texture's type.
|
|
98
|
+
* @return {number} The byte length.
|
|
78
99
|
*/
|
|
79
100
|
function getByteLength( width, height, format, type ) {
|
|
80
101
|
|
|
@@ -206,11 +227,70 @@ function getTextureTypeByteLength( type ) {
|
|
|
206
227
|
|
|
207
228
|
}
|
|
208
229
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
230
|
+
/**
|
|
231
|
+
* A class containing utility functions for textures.
|
|
232
|
+
*
|
|
233
|
+
* @hideconstructor
|
|
234
|
+
*/
|
|
235
|
+
class TextureUtils {
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Scales the texture as large as possible within its surface without cropping
|
|
239
|
+
* or stretching the texture. The method preserves the original aspect ratio of
|
|
240
|
+
* the texture. Akin to CSS `object-fit: contain`
|
|
241
|
+
*
|
|
242
|
+
* @param {Texture} texture - The texture.
|
|
243
|
+
* @param {number} aspect - The texture's aspect ratio.
|
|
244
|
+
* @return {Texture} The updated texture.
|
|
245
|
+
*/
|
|
246
|
+
static contain( texture, aspect ) {
|
|
247
|
+
|
|
248
|
+
return contain( texture, aspect );
|
|
249
|
+
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Scales the texture to the smallest possible size to fill the surface, leaving
|
|
254
|
+
* no empty space. The method preserves the original aspect ratio of the texture.
|
|
255
|
+
* Akin to CSS `object-fit: cover`.
|
|
256
|
+
*
|
|
257
|
+
* @param {Texture} texture - The texture.
|
|
258
|
+
* @param {number} aspect - The texture's aspect ratio.
|
|
259
|
+
* @return {Texture} The updated texture.
|
|
260
|
+
*/
|
|
261
|
+
static cover( texture, aspect ) {
|
|
262
|
+
|
|
263
|
+
return cover( texture, aspect );
|
|
264
|
+
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Configures the texture to the default transformation. Akin to CSS `object-fit: fill`.
|
|
269
|
+
*
|
|
270
|
+
* @param {Texture} texture - The texture.
|
|
271
|
+
* @return {Texture} The updated texture.
|
|
272
|
+
*/
|
|
273
|
+
static fill( texture ) {
|
|
274
|
+
|
|
275
|
+
return fill( texture );
|
|
276
|
+
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Determines how many bytes must be used to represent the texture.
|
|
281
|
+
*
|
|
282
|
+
* @param {number} width - The width of the texture.
|
|
283
|
+
* @param {number} height - The height of the texture.
|
|
284
|
+
* @param {number} format - The texture's format.
|
|
285
|
+
* @param {number} type - The texture's type.
|
|
286
|
+
* @return {number} The byte length.
|
|
287
|
+
*/
|
|
288
|
+
static getByteLength( width, height, format, type ) {
|
|
289
|
+
|
|
290
|
+
return getByteLength( width, height, format, type );
|
|
291
|
+
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
}
|
|
215
295
|
|
|
216
296
|
export { contain, cover, fill, getByteLength, TextureUtils };
|
package/src/extras/core/Curve.js
CHANGED
|
@@ -4,58 +4,81 @@ import { Vector3 } from '../../math/Vector3.js';
|
|
|
4
4
|
import { Matrix4 } from '../../math/Matrix4.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* An abstract base class for creating an analytic curve object that contains methods
|
|
8
|
+
* for interpolation.
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
|
|
11
|
-
* .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )
|
|
12
|
-
* .getPoints(), .getSpacedPoints()
|
|
13
|
-
* .getLength()
|
|
14
|
-
* .updateArcLengths()
|
|
15
|
-
*
|
|
16
|
-
* This following curves inherit from THREE.Curve:
|
|
17
|
-
*
|
|
18
|
-
* -- 2D curves --
|
|
19
|
-
* THREE.ArcCurve
|
|
20
|
-
* THREE.CubicBezierCurve
|
|
21
|
-
* THREE.EllipseCurve
|
|
22
|
-
* THREE.LineCurve
|
|
23
|
-
* THREE.QuadraticBezierCurve
|
|
24
|
-
* THREE.SplineCurve
|
|
25
|
-
*
|
|
26
|
-
* -- 3D curves --
|
|
27
|
-
* THREE.CatmullRomCurve3
|
|
28
|
-
* THREE.CubicBezierCurve3
|
|
29
|
-
* THREE.LineCurve3
|
|
30
|
-
* THREE.QuadraticBezierCurve3
|
|
31
|
-
*
|
|
32
|
-
* A series of curves can be represented as a THREE.CurvePath.
|
|
33
|
-
*
|
|
34
|
-
**/
|
|
35
|
-
|
|
10
|
+
* @abstract
|
|
11
|
+
*/
|
|
36
12
|
class Curve {
|
|
37
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new curve.
|
|
16
|
+
*/
|
|
38
17
|
constructor() {
|
|
39
18
|
|
|
19
|
+
/**
|
|
20
|
+
* The type property is used for detecting the object type
|
|
21
|
+
* in context of serialization/deserialization.
|
|
22
|
+
*
|
|
23
|
+
* @type {string}
|
|
24
|
+
* @readonly
|
|
25
|
+
*/
|
|
40
26
|
this.type = 'Curve';
|
|
41
27
|
|
|
28
|
+
/**
|
|
29
|
+
* This value determines the amount of divisions when calculating the
|
|
30
|
+
* cumulative segment lengths of a curve via {@link Curve#getLengths}. To ensure
|
|
31
|
+
* precision when using methods like {@link Curve#getSpacedPoints}, it is
|
|
32
|
+
* recommended to increase the value of this property if the curve is very large.
|
|
33
|
+
*
|
|
34
|
+
* @type {number}
|
|
35
|
+
* @default 200
|
|
36
|
+
*/
|
|
42
37
|
this.arcLengthDivisions = 200;
|
|
43
38
|
|
|
44
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Must be set to `true` if the curve parameters have changed.
|
|
41
|
+
*
|
|
42
|
+
* @type {boolean}
|
|
43
|
+
* @default false
|
|
44
|
+
*/
|
|
45
|
+
this.needsUpdate = false;
|
|
45
46
|
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
/**
|
|
48
|
+
* An internal cache that holds precomputed curve length values.
|
|
49
|
+
*
|
|
50
|
+
* @private
|
|
51
|
+
* @type {?Array<number>}
|
|
52
|
+
* @default null
|
|
53
|
+
*/
|
|
54
|
+
this.cacheArcLengths = null;
|
|
48
55
|
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* This method returns a vector in 2D or 3D space (depending on the curve definition)
|
|
60
|
+
* for the given interpolation factor.
|
|
61
|
+
*
|
|
62
|
+
* @abstract
|
|
63
|
+
* @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
|
|
64
|
+
* @param {(Vector2|Vector3)} [optionalTarget] - The optional target vector the result is written to.
|
|
65
|
+
* @return {(Vector2|Vector3)} The position on the curve. It can be a 2D or 3D vector depending on the curve definition.
|
|
66
|
+
*/
|
|
49
67
|
getPoint( /* t, optionalTarget */ ) {
|
|
50
68
|
|
|
51
69
|
console.warn( 'THREE.Curve: .getPoint() not implemented.' );
|
|
52
|
-
return null;
|
|
53
70
|
|
|
54
71
|
}
|
|
55
72
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
73
|
+
/**
|
|
74
|
+
* This method returns a vector in 2D or 3D space (depending on the curve definition)
|
|
75
|
+
* for the given interpolation factor. Unlike {@link Curve#getPoint}, this method honors the length
|
|
76
|
+
* of the curve which equidistant samples.
|
|
77
|
+
*
|
|
78
|
+
* @param {number} u - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
|
|
79
|
+
* @param {(Vector2|Vector3)} [optionalTarget] - The optional target vector the result is written to.
|
|
80
|
+
* @return {(Vector2|Vector3)} The position on the curve. It can be a 2D or 3D vector depending on the curve definition.
|
|
81
|
+
*/
|
|
59
82
|
getPointAt( u, optionalTarget ) {
|
|
60
83
|
|
|
61
84
|
const t = this.getUtoTmapping( u );
|
|
@@ -63,8 +86,13 @@ class Curve {
|
|
|
63
86
|
|
|
64
87
|
}
|
|
65
88
|
|
|
66
|
-
|
|
67
|
-
|
|
89
|
+
/**
|
|
90
|
+
* This method samples the curve via {@link Curve#getPoint} and returns an array of points representing
|
|
91
|
+
* the curve shape.
|
|
92
|
+
*
|
|
93
|
+
* @param {number} [divisions=5] - The number of divisions.
|
|
94
|
+
* @return {Array<(Vector2|Vector3)>} An array holding the sampled curve values. The number of points is `divisions + 1`.
|
|
95
|
+
*/
|
|
68
96
|
getPoints( divisions = 5 ) {
|
|
69
97
|
|
|
70
98
|
const points = [];
|
|
@@ -81,6 +109,14 @@ class Curve {
|
|
|
81
109
|
|
|
82
110
|
// Get sequence of points using getPointAt( u )
|
|
83
111
|
|
|
112
|
+
/**
|
|
113
|
+
* This method samples the curve via {@link Curve#getPointAt} and returns an array of points representing
|
|
114
|
+
* the curve shape. Unlike {@link Curve#getPoints}, this method returns equi-spaced points across the entire
|
|
115
|
+
* curve.
|
|
116
|
+
*
|
|
117
|
+
* @param {number} [divisions=5] - The number of divisions.
|
|
118
|
+
* @return {Array<(Vector2|Vector3)>} An array holding the sampled curve values. The number of points is `divisions + 1`.
|
|
119
|
+
*/
|
|
84
120
|
getSpacedPoints( divisions = 5 ) {
|
|
85
121
|
|
|
86
122
|
const points = [];
|
|
@@ -95,8 +131,11 @@ class Curve {
|
|
|
95
131
|
|
|
96
132
|
}
|
|
97
133
|
|
|
98
|
-
|
|
99
|
-
|
|
134
|
+
/**
|
|
135
|
+
* Returns the total arc length of the curve.
|
|
136
|
+
*
|
|
137
|
+
* @return {number} The length of the curve.
|
|
138
|
+
*/
|
|
100
139
|
getLength() {
|
|
101
140
|
|
|
102
141
|
const lengths = this.getLengths();
|
|
@@ -104,8 +143,12 @@ class Curve {
|
|
|
104
143
|
|
|
105
144
|
}
|
|
106
145
|
|
|
107
|
-
|
|
108
|
-
|
|
146
|
+
/**
|
|
147
|
+
* Returns an array of cumulative segment lengths of the curve.
|
|
148
|
+
*
|
|
149
|
+
* @param {number} [divisions=this.arcLengthDivisions] - The number of divisions.
|
|
150
|
+
* @return {Array<number>} An array holding the cumulative segment lengths.
|
|
151
|
+
*/
|
|
109
152
|
getLengths( divisions = this.arcLengthDivisions ) {
|
|
110
153
|
|
|
111
154
|
if ( this.cacheArcLengths &&
|
|
@@ -139,6 +182,12 @@ class Curve {
|
|
|
139
182
|
|
|
140
183
|
}
|
|
141
184
|
|
|
185
|
+
/**
|
|
186
|
+
* Update the cumulative segment distance cache. The method must be called
|
|
187
|
+
* every time curve parameters are changed. If an updated curve is part of a
|
|
188
|
+
* composed curve like {@link CurvePath}, this method must be called on the
|
|
189
|
+
* composed curve, too.
|
|
190
|
+
*/
|
|
142
191
|
updateArcLengths() {
|
|
143
192
|
|
|
144
193
|
this.needsUpdate = true;
|
|
@@ -146,9 +195,16 @@ class Curve {
|
|
|
146
195
|
|
|
147
196
|
}
|
|
148
197
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
198
|
+
/**
|
|
199
|
+
* Given an interpolation factor in the range `[0,1]`, this method returns an updated
|
|
200
|
+
* interpolation factor in the same range that can be ued to sample equidistant points
|
|
201
|
+
* from a curve.
|
|
202
|
+
*
|
|
203
|
+
* @param {number} u - The interpolation factor.
|
|
204
|
+
* @param {?number} distance - An optional distance on the curve.
|
|
205
|
+
* @return {number} The updated interpolation factor.
|
|
206
|
+
*/
|
|
207
|
+
getUtoTmapping( u, distance = null ) {
|
|
152
208
|
|
|
153
209
|
const arcLengths = this.getLengths();
|
|
154
210
|
|
|
@@ -223,11 +279,16 @@ class Curve {
|
|
|
223
279
|
|
|
224
280
|
}
|
|
225
281
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
282
|
+
/**
|
|
283
|
+
* Returns a unit vector tangent for the given interpolation factor.
|
|
284
|
+
* If the derived curve does not implement its tangent derivation,
|
|
285
|
+
* two points a small delta apart will be used to find its gradient
|
|
286
|
+
* which seems to give a reasonable approximation.
|
|
287
|
+
*
|
|
288
|
+
* @param {number} t - The interpolation factor.
|
|
289
|
+
* @param {(Vector2|Vector3)} [optionalTarget] - The optional target vector the result is written to.
|
|
290
|
+
* @return {(Vector2|Vector3)} The tangent vector.
|
|
291
|
+
*/
|
|
231
292
|
getTangent( t, optionalTarget ) {
|
|
232
293
|
|
|
233
294
|
const delta = 0.0001;
|
|
@@ -250,6 +311,14 @@ class Curve {
|
|
|
250
311
|
|
|
251
312
|
}
|
|
252
313
|
|
|
314
|
+
/**
|
|
315
|
+
* Same as {@link Curve#getTangent} but with equidistant samples.
|
|
316
|
+
*
|
|
317
|
+
* @param {number} u - The interpolation factor.
|
|
318
|
+
* @param {(Vector2|Vector3)} [optionalTarget] - The optional target vector the result is written to.
|
|
319
|
+
* @return {(Vector2|Vector3)} The tangent vector.
|
|
320
|
+
* @see {@link Curve#getPointAt}
|
|
321
|
+
*/
|
|
253
322
|
getTangentAt( u, optionalTarget ) {
|
|
254
323
|
|
|
255
324
|
const t = this.getUtoTmapping( u );
|
|
@@ -257,7 +326,15 @@ class Curve {
|
|
|
257
326
|
|
|
258
327
|
}
|
|
259
328
|
|
|
260
|
-
|
|
329
|
+
/**
|
|
330
|
+
* Generates the Frenet Frames. Requires a curve definition in 3D space. Used
|
|
331
|
+
* in geometries like {@link TubeGeometry} or {@link ExtrudeGeometry}.
|
|
332
|
+
*
|
|
333
|
+
* @param {number} segments - The number of segments.
|
|
334
|
+
* @param {boolean} [closed=false] - Whether the curve is closed or not.
|
|
335
|
+
* @return {{tangents: Array<Vector3>, normals: Array<Vector3>, binormals: Array<Vector3>}} The Frenet Frames.
|
|
336
|
+
*/
|
|
337
|
+
computeFrenetFrames( segments, closed = false ) {
|
|
261
338
|
|
|
262
339
|
// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf
|
|
263
340
|
|
|
@@ -371,12 +448,23 @@ class Curve {
|
|
|
371
448
|
|
|
372
449
|
}
|
|
373
450
|
|
|
451
|
+
/**
|
|
452
|
+
* Returns a new curve with copied values from this instance.
|
|
453
|
+
*
|
|
454
|
+
* @return {Curve} A clone of this instance.
|
|
455
|
+
*/
|
|
374
456
|
clone() {
|
|
375
457
|
|
|
376
458
|
return new this.constructor().copy( this );
|
|
377
459
|
|
|
378
460
|
}
|
|
379
461
|
|
|
462
|
+
/**
|
|
463
|
+
* Copies the values of the given curve to this instance.
|
|
464
|
+
*
|
|
465
|
+
* @param {Curve} source - The curve to copy.
|
|
466
|
+
* @return {Curve} A reference to this curve.
|
|
467
|
+
*/
|
|
380
468
|
copy( source ) {
|
|
381
469
|
|
|
382
470
|
this.arcLengthDivisions = source.arcLengthDivisions;
|
|
@@ -385,6 +473,12 @@ class Curve {
|
|
|
385
473
|
|
|
386
474
|
}
|
|
387
475
|
|
|
476
|
+
/**
|
|
477
|
+
* Serializes the curve into JSON.
|
|
478
|
+
*
|
|
479
|
+
* @return {Object} A JSON object representing the serialized curve.
|
|
480
|
+
* @see {@link ObjectLoader#parse}
|
|
481
|
+
*/
|
|
388
482
|
toJSON() {
|
|
389
483
|
|
|
390
484
|
const data = {
|
|
@@ -402,6 +496,12 @@ class Curve {
|
|
|
402
496
|
|
|
403
497
|
}
|
|
404
498
|
|
|
499
|
+
/**
|
|
500
|
+
* Deserializes the curve from the given JSON.
|
|
501
|
+
*
|
|
502
|
+
* @param {Object} json - The JSON holding the serialized curve.
|
|
503
|
+
* @return {Curve} A reference to this curve.
|
|
504
|
+
*/
|
|
405
505
|
fromJSON( json ) {
|
|
406
506
|
|
|
407
507
|
this.arcLengthDivisions = json.arcLengthDivisions;
|