@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
|
@@ -19,10 +19,11 @@ import {
|
|
|
19
19
|
/**
|
|
20
20
|
* Make a new DataTexture to store the descriptions of the curves.
|
|
21
21
|
*
|
|
22
|
-
* @
|
|
23
|
-
* @
|
|
22
|
+
* @private
|
|
23
|
+
* @param {number} numberOfCurves - The number of curves needed to be described by this texture.
|
|
24
|
+
* @returns {DataTexture}
|
|
24
25
|
*/
|
|
25
|
-
|
|
26
|
+
function initSplineTexture( numberOfCurves = 1 ) {
|
|
26
27
|
|
|
27
28
|
const dataArray = new Uint16Array( TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves * CHANNELS );
|
|
28
29
|
const dataTexture = new DataTexture(
|
|
@@ -44,13 +45,14 @@ export function initSplineTexture( numberOfCurves = 1 ) {
|
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
/**
|
|
47
|
-
* Write the curve description to the data texture
|
|
48
|
+
* Write the curve description to the data texture.
|
|
48
49
|
*
|
|
49
|
-
* @
|
|
50
|
-
* @param {
|
|
51
|
-
* @param {
|
|
50
|
+
* @private
|
|
51
|
+
* @param {DataTexture} texture - The data texture to write to.
|
|
52
|
+
* @param {Curve} splineCurve - The curve to describe.
|
|
53
|
+
* @param {number} offset - Which curve slot to write to.
|
|
52
54
|
*/
|
|
53
|
-
|
|
55
|
+
function updateSplineTexture( texture, splineCurve, offset = 0 ) {
|
|
54
56
|
|
|
55
57
|
const numberOfPoints = Math.floor( TEXTURE_WIDTH * ( TEXTURE_HEIGHT / 4 ) );
|
|
56
58
|
splineCurve.arcLengthDivisions = numberOfPoints / 2;
|
|
@@ -78,7 +80,6 @@ export function updateSplineTexture( texture, splineCurve, offset = 0 ) {
|
|
|
78
80
|
|
|
79
81
|
}
|
|
80
82
|
|
|
81
|
-
|
|
82
83
|
function setTextureValue( texture, index, x, y, z, o ) {
|
|
83
84
|
|
|
84
85
|
const image = texture.image;
|
|
@@ -92,12 +93,12 @@ function setTextureValue( texture, index, x, y, z, o ) {
|
|
|
92
93
|
}
|
|
93
94
|
|
|
94
95
|
/**
|
|
95
|
-
* Create a new set of uniforms for describing the curve modifier
|
|
96
|
+
* Create a new set of uniforms for describing the curve modifier.
|
|
96
97
|
*
|
|
97
|
-
* @param {
|
|
98
|
-
* @returns {
|
|
98
|
+
* @param {DataTexture} splineTexture - Which holds the curve description.
|
|
99
|
+
* @returns {Object} The uniforms object to be used in the shader.
|
|
99
100
|
*/
|
|
100
|
-
|
|
101
|
+
function getUniforms( splineTexture ) {
|
|
101
102
|
|
|
102
103
|
const uniforms = {
|
|
103
104
|
spineTexture: { value: splineTexture },
|
|
@@ -111,7 +112,7 @@ export function getUniforms( splineTexture ) {
|
|
|
111
112
|
|
|
112
113
|
}
|
|
113
114
|
|
|
114
|
-
|
|
115
|
+
function modifyShader( material, uniforms, numberOfCurves = 1 ) {
|
|
115
116
|
|
|
116
117
|
if ( material.__ok ) return;
|
|
117
118
|
material.__ok = true;
|
|
@@ -198,13 +199,18 @@ vec3 transformedNormal = normalMatrix * (basis * objectNormal);
|
|
|
198
199
|
}
|
|
199
200
|
|
|
200
201
|
/**
|
|
201
|
-
* A
|
|
202
|
+
* A modifier for making meshes bend around curves.
|
|
203
|
+
*
|
|
204
|
+
* This module can only be used with {@link WebGLRenderer}. When using {@link WebGPURenderer},
|
|
205
|
+
* import the class from `CurveModifierGPU.js`.
|
|
202
206
|
*/
|
|
203
207
|
export class Flow {
|
|
204
208
|
|
|
205
209
|
/**
|
|
206
|
-
*
|
|
207
|
-
*
|
|
210
|
+
* Constructs a new Flow instance.
|
|
211
|
+
*
|
|
212
|
+
* @param {Mesh} mesh - The mesh to clone and modify to bend around the curve.
|
|
213
|
+
* @param {number} numberOfCurves - The amount of space that should preallocated for additional curves.
|
|
208
214
|
*/
|
|
209
215
|
constructor( mesh, numberOfCurves = 1 ) {
|
|
210
216
|
|
|
@@ -252,9 +258,15 @@ export class Flow {
|
|
|
252
258
|
|
|
253
259
|
}
|
|
254
260
|
|
|
261
|
+
/**
|
|
262
|
+
* Updates the curve for the given curve index.
|
|
263
|
+
*
|
|
264
|
+
* @param {number} index - The curve index.
|
|
265
|
+
* @param {Curve} curve - The curve that should be used to bend the mesh.
|
|
266
|
+
*/
|
|
255
267
|
updateCurve( index, curve ) {
|
|
256
268
|
|
|
257
|
-
if ( index >= this.curveArray.length ) throw Error( 'Index out of range
|
|
269
|
+
if ( index >= this.curveArray.length ) throw Error( 'Flow: Index out of range.' );
|
|
258
270
|
const curveLength = curve.getLength();
|
|
259
271
|
this.uniforms.spineLength.value = curveLength;
|
|
260
272
|
this.curveLengthArray[ index ] = curveLength;
|
|
@@ -263,6 +275,11 @@ export class Flow {
|
|
|
263
275
|
|
|
264
276
|
}
|
|
265
277
|
|
|
278
|
+
/**
|
|
279
|
+
* Moves the mesh along the curve.
|
|
280
|
+
*
|
|
281
|
+
* @param {number} amount - The offset.
|
|
282
|
+
*/
|
|
266
283
|
moveAlongCurve( amount ) {
|
|
267
284
|
|
|
268
285
|
this.uniforms.pathOffset.value += amount;
|
|
@@ -270,19 +287,25 @@ export class Flow {
|
|
|
270
287
|
}
|
|
271
288
|
|
|
272
289
|
}
|
|
273
|
-
|
|
290
|
+
|
|
291
|
+
const _matrix = new Matrix4();
|
|
274
292
|
|
|
275
293
|
/**
|
|
276
|
-
*
|
|
294
|
+
* An instanced version of {@link Flow} for making meshes bend around curves, where the instances are placed on the curve.
|
|
295
|
+
*
|
|
296
|
+
* This module can only be used with {@link WebGLRenderer}.
|
|
297
|
+
*
|
|
298
|
+
* @augments Flow
|
|
277
299
|
*/
|
|
278
300
|
export class InstancedFlow extends Flow {
|
|
279
301
|
|
|
280
302
|
/**
|
|
303
|
+
* Constructs a new InstancedFlow instance.
|
|
281
304
|
*
|
|
282
|
-
* @param {number} count The number of instanced elements
|
|
283
|
-
* @param {number} curveCount The number of curves to preallocate for
|
|
284
|
-
* @param {Geometry} geometry The geometry to use for the instanced mesh
|
|
285
|
-
* @param {Material} material The material to use for the instanced mesh
|
|
305
|
+
* @param {number} count - The number of instanced elements.
|
|
306
|
+
* @param {number} curveCount - The number of curves to preallocate for.
|
|
307
|
+
* @param {Geometry} geometry - The geometry to use for the instanced mesh.
|
|
308
|
+
* @param {Material} material - The material to use for the instanced mesh.
|
|
286
309
|
*/
|
|
287
310
|
constructor( count, curveCount, geometry, material ) {
|
|
288
311
|
|
|
@@ -304,25 +327,25 @@ export class InstancedFlow extends Flow {
|
|
|
304
327
|
* The extra information about which curve and curve position is stored in the translation components of the matrix for the instanced objects
|
|
305
328
|
* This writes that information to the matrix and marks it as needing update.
|
|
306
329
|
*
|
|
307
|
-
* @param {number} index of
|
|
330
|
+
* @param {number} index - The index of tge instanced element to update.
|
|
308
331
|
*/
|
|
309
332
|
writeChanges( index ) {
|
|
310
333
|
|
|
311
|
-
|
|
334
|
+
_matrix.makeTranslation(
|
|
312
335
|
this.curveLengthArray[ this.whichCurve[ index ] ],
|
|
313
336
|
this.whichCurve[ index ],
|
|
314
337
|
this.offsets[ index ]
|
|
315
338
|
);
|
|
316
|
-
this.object3D.setMatrixAt( index,
|
|
339
|
+
this.object3D.setMatrixAt( index, _matrix );
|
|
317
340
|
this.object3D.instanceMatrix.needsUpdate = true;
|
|
318
341
|
|
|
319
342
|
}
|
|
320
343
|
|
|
321
344
|
/**
|
|
322
|
-
* Move an individual element along the curve by a specific amount
|
|
345
|
+
* Move an individual element along the curve by a specific amount.
|
|
323
346
|
*
|
|
324
|
-
* @param {number} index Which element to update
|
|
325
|
-
* @param {number} offset
|
|
347
|
+
* @param {number} index - Which element to update.
|
|
348
|
+
* @param {number} offset - The offset.
|
|
326
349
|
*/
|
|
327
350
|
moveIndividualAlongCurve( index, offset ) {
|
|
328
351
|
|
|
@@ -332,14 +355,14 @@ export class InstancedFlow extends Flow {
|
|
|
332
355
|
}
|
|
333
356
|
|
|
334
357
|
/**
|
|
335
|
-
* Select which curve to use for an element
|
|
358
|
+
* Select which curve to use for an element.
|
|
336
359
|
*
|
|
337
|
-
* @param {number} index
|
|
338
|
-
* @param {number} curveNo
|
|
360
|
+
* @param {number} index - The index of the instanced element to update.
|
|
361
|
+
* @param {number} curveNo - The index of the curve it should use.
|
|
339
362
|
*/
|
|
340
363
|
setCurve( index, curveNo ) {
|
|
341
364
|
|
|
342
|
-
if ( isNaN( curveNo ) ) throw Error( '
|
|
365
|
+
if ( isNaN( curveNo ) ) throw Error( 'InstancedFlow: Curve index being set is Not a Number (NaN).' );
|
|
343
366
|
this.whichCurve[ index ] = curveNo;
|
|
344
367
|
this.writeChanges( index );
|
|
345
368
|
|
|
@@ -19,10 +19,11 @@ import { modelWorldMatrix, normalLocal, vec2, vec3, vec4, mat3, varyingProperty,
|
|
|
19
19
|
/**
|
|
20
20
|
* Make a new DataTexture to store the descriptions of the curves.
|
|
21
21
|
*
|
|
22
|
-
* @
|
|
23
|
-
* @
|
|
22
|
+
* @private
|
|
23
|
+
* @param {number} [numberOfCurves=1] - The number of curves needed to be described by this texture.
|
|
24
|
+
* @returns {DataTexture} The new data texture.
|
|
24
25
|
*/
|
|
25
|
-
|
|
26
|
+
function initSplineTexture( numberOfCurves = 1 ) {
|
|
26
27
|
|
|
27
28
|
const dataArray = new Uint16Array( TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves * CHANNELS );
|
|
28
29
|
const dataTexture = new DataTexture(
|
|
@@ -44,13 +45,14 @@ export function initSplineTexture( numberOfCurves = 1 ) {
|
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
/**
|
|
47
|
-
* Write the curve description to the data texture
|
|
48
|
+
* Write the curve description to the data texture.
|
|
48
49
|
*
|
|
49
|
-
* @
|
|
50
|
-
* @param {
|
|
51
|
-
* @param {
|
|
50
|
+
* @private
|
|
51
|
+
* @param {DataTexture} texture - The data texture to write to.
|
|
52
|
+
* @param {Curve} splineCurve - The curve to describe.
|
|
53
|
+
* @param {number} [offset=0] - Which curve slot to write to.
|
|
52
54
|
*/
|
|
53
|
-
|
|
55
|
+
function updateSplineTexture( texture, splineCurve, offset = 0 ) {
|
|
54
56
|
|
|
55
57
|
const numberOfPoints = Math.floor( TEXTURE_WIDTH * ( TEXTURE_HEIGHT / 4 ) );
|
|
56
58
|
splineCurve.arcLengthDivisions = numberOfPoints / 2;
|
|
@@ -93,12 +95,13 @@ function setTextureValue( texture, index, x, y, z, o ) {
|
|
|
93
95
|
}
|
|
94
96
|
|
|
95
97
|
/**
|
|
96
|
-
* Create a new set of uniforms for describing the curve modifier
|
|
98
|
+
* Create a new set of uniforms for describing the curve modifier.
|
|
97
99
|
*
|
|
98
|
-
* @
|
|
99
|
-
* @
|
|
100
|
+
* @private
|
|
101
|
+
* @param {DataTexture} splineTexture - Which holds the curve description.
|
|
102
|
+
* @returns {Object} The uniforms object.
|
|
100
103
|
*/
|
|
101
|
-
|
|
104
|
+
function getUniforms( splineTexture ) {
|
|
102
105
|
|
|
103
106
|
return {
|
|
104
107
|
spineTexture: splineTexture,
|
|
@@ -111,7 +114,7 @@ export function getUniforms( splineTexture ) {
|
|
|
111
114
|
|
|
112
115
|
}
|
|
113
116
|
|
|
114
|
-
|
|
117
|
+
function modifyShader( material, uniforms, numberOfCurves ) {
|
|
115
118
|
|
|
116
119
|
const spineTexture = uniforms.spineTexture;
|
|
117
120
|
|
|
@@ -157,13 +160,18 @@ export function modifyShader( material, uniforms, numberOfCurves ) {
|
|
|
157
160
|
}
|
|
158
161
|
|
|
159
162
|
/**
|
|
160
|
-
* A
|
|
163
|
+
* A modifier for making meshes bend around curves.
|
|
164
|
+
*
|
|
165
|
+
* This module can only be used with {@link WebGPURenderer}. When using {@link WebGLRenderer},
|
|
166
|
+
* import the class from `CurveModifier.js`.
|
|
161
167
|
*/
|
|
162
168
|
export class Flow {
|
|
163
169
|
|
|
164
170
|
/**
|
|
165
|
-
*
|
|
166
|
-
*
|
|
171
|
+
* Constructs a new Flow instance.
|
|
172
|
+
*
|
|
173
|
+
* @param {Mesh} mesh - The mesh to clone and modify to bend around the curve.
|
|
174
|
+
* @param {number} numberOfCurves - The amount of space that should preallocated for additional curves.
|
|
167
175
|
*/
|
|
168
176
|
constructor( mesh, numberOfCurves = 1 ) {
|
|
169
177
|
|
|
@@ -212,9 +220,15 @@ export class Flow {
|
|
|
212
220
|
|
|
213
221
|
}
|
|
214
222
|
|
|
223
|
+
/**
|
|
224
|
+
* Updates the curve for the given curve index.
|
|
225
|
+
*
|
|
226
|
+
* @param {number} index - The curve index.
|
|
227
|
+
* @param {Curve} curve - The curve that should be used to bend the mesh.
|
|
228
|
+
*/
|
|
215
229
|
updateCurve( index, curve ) {
|
|
216
230
|
|
|
217
|
-
if ( index >= this.curveArray.length ) throw Error( 'Index out of range
|
|
231
|
+
if ( index >= this.curveArray.length ) throw Error( 'Flow: Index out of range.' );
|
|
218
232
|
|
|
219
233
|
const curveLength = curve.getLength();
|
|
220
234
|
|
|
@@ -226,6 +240,11 @@ export class Flow {
|
|
|
226
240
|
|
|
227
241
|
}
|
|
228
242
|
|
|
243
|
+
/**
|
|
244
|
+
* Moves the mesh along the curve.
|
|
245
|
+
*
|
|
246
|
+
* @param {number} amount - The offset.
|
|
247
|
+
*/
|
|
229
248
|
moveAlongCurve( amount ) {
|
|
230
249
|
|
|
231
250
|
this.uniforms.pathOffset += amount;
|
|
@@ -9,8 +9,26 @@ const _A = new Vector3();
|
|
|
9
9
|
const _B = new Vector3();
|
|
10
10
|
const _C = new Vector3();
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* The modifier can be used to split faces at sharp edges. This allows to compute
|
|
14
|
+
* normals without smoothing the edges which can lead to an improved visual result.
|
|
15
|
+
*
|
|
16
|
+
* ```js
|
|
17
|
+
* const modifier = new EdgeSplitModifier();
|
|
18
|
+
* geometry = modifier.modify( geometry, Math.PI * 0.4 );
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
12
21
|
class EdgeSplitModifier {
|
|
13
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Returns a new, modified version of the given geometry by applying an edge-split operation.
|
|
25
|
+
* Please note that the resulting geometry is always indexed.
|
|
26
|
+
*
|
|
27
|
+
* @param {BufferGeometry} geometry - The geometry to modify.
|
|
28
|
+
* @param {number} cutOffAngle - The cut off angle in radians.
|
|
29
|
+
* @param {boolean} [tryKeepNormals=true] - Whether to try to keep normals or not.
|
|
30
|
+
* @return {BufferGeometry} A new, modified geometry.
|
|
31
|
+
*/
|
|
14
32
|
modify( geometry, cutOffAngle, tryKeepNormals = true ) {
|
|
15
33
|
|
|
16
34
|
function computeNormals() {
|
|
@@ -8,18 +8,30 @@ import {
|
|
|
8
8
|
} from 'three';
|
|
9
9
|
import * as BufferGeometryUtils from '../utils/BufferGeometryUtils.js';
|
|
10
10
|
|
|
11
|
-
/**
|
|
12
|
-
* Simplification Geometry Modifier
|
|
13
|
-
* - based on code and technique
|
|
14
|
-
* - by Stan Melax in 1998
|
|
15
|
-
* - Progressive Mesh type Polygon Reduction Algorithm
|
|
16
|
-
* - http://www.melax.com/polychop/
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
11
|
const _cb = new Vector3(), _ab = new Vector3();
|
|
20
12
|
|
|
13
|
+
/**
|
|
14
|
+
* This class can be used to modify a geometry by simplifying it. A typical use
|
|
15
|
+
* case for such a modifier is automatic LOD generation.
|
|
16
|
+
*
|
|
17
|
+
* The implementation is based on [Progressive Mesh type Polygon Reduction Algorithm]{@link https://web.archive.org/web/20230610044040/http://www.melax.com/polychop/}
|
|
18
|
+
* by Stan Melax in 1998.
|
|
19
|
+
*
|
|
20
|
+
* ```js
|
|
21
|
+
* const modifier = new SimplifyModifier();
|
|
22
|
+
* geometry = modifier.modify( geometry );
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
21
25
|
class SimplifyModifier {
|
|
22
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Returns a new, modified version of the given geometry by applying a simplification.
|
|
29
|
+
* Please note that the resulting geometry is always non-indexed.
|
|
30
|
+
*
|
|
31
|
+
* @param {BufferGeometry} geometry - The geometry to modify.
|
|
32
|
+
* @param {number} count - The number of vertices to remove.
|
|
33
|
+
* @return {BufferGeometry} A new, modified geometry.
|
|
34
|
+
*/
|
|
23
35
|
modify( geometry, count ) {
|
|
24
36
|
|
|
25
37
|
geometry = geometry.clone();
|
|
@@ -7,18 +7,49 @@ import {
|
|
|
7
7
|
} from 'three';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* This class can be used to modify a geometry by breaking its edges if they
|
|
11
|
+
* are longer than maximum length.
|
|
12
|
+
*
|
|
13
|
+
* ```js
|
|
14
|
+
* const modifier = new TessellateModifier( 8, 6 );
|
|
15
|
+
* geometry = modifier.modify( geometry );
|
|
16
|
+
* ```
|
|
11
17
|
*/
|
|
12
|
-
|
|
13
18
|
class TessellateModifier {
|
|
14
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new Tessellate modifier.
|
|
22
|
+
*
|
|
23
|
+
* @param {number} [maxEdgeLength=0.1] - The maximum edge length.
|
|
24
|
+
* @param {number} [maxIterations=6] - The number of iterations.
|
|
25
|
+
*/
|
|
15
26
|
constructor( maxEdgeLength = 0.1, maxIterations = 6 ) {
|
|
16
27
|
|
|
28
|
+
/**
|
|
29
|
+
* The maximum edge length.
|
|
30
|
+
*
|
|
31
|
+
* @type {number}
|
|
32
|
+
* @default 0.1
|
|
33
|
+
*/
|
|
17
34
|
this.maxEdgeLength = maxEdgeLength;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The maximum edge length.
|
|
38
|
+
*
|
|
39
|
+
* @type {number}
|
|
40
|
+
* @default 0.1
|
|
41
|
+
*/
|
|
18
42
|
this.maxIterations = maxIterations;
|
|
19
43
|
|
|
20
44
|
}
|
|
21
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Returns a new, modified version of the given geometry by applying a tesselation.
|
|
48
|
+
* Please note that the resulting geometry is always non-indexed.
|
|
49
|
+
*
|
|
50
|
+
* @param {BufferGeometry} geometry - The geometry to modify.
|
|
51
|
+
* @return {BufferGeometry} A new, modified geometry.
|
|
52
|
+
*/
|
|
22
53
|
modify( geometry ) {
|
|
23
54
|
|
|
24
55
|
if ( geometry.index !== null ) {
|
|
@@ -1,14 +1,32 @@
|
|
|
1
1
|
import { Mesh, MeshBasicMaterial, SphereGeometry, Vector3 } from 'three';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* A ground-projected skybox.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* A ground-projected skybox.
|
|
5
|
+
*
|
|
6
|
+
* By default the object is centered at the camera, so it is often helpful to set
|
|
7
|
+
* `skybox.position.y = height` to put the ground at the origin.
|
|
8
|
+
*
|
|
9
|
+
* ```js
|
|
10
|
+
* const height = 15, radius = 100;
|
|
11
|
+
*
|
|
12
|
+
* const skybox = new GroundedSkybox( envMap, height, radius );
|
|
13
|
+
* skybox.position.y = height;
|
|
14
|
+
* scene.add( skybox );
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @augments Mesh
|
|
8
18
|
*/
|
|
9
|
-
|
|
10
19
|
class GroundedSkybox extends Mesh {
|
|
11
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Constructs a new ground-projected skybox.
|
|
23
|
+
*
|
|
24
|
+
* @param {Texture} map - The environment map to use.
|
|
25
|
+
* @param {number} height - The height is how far the camera that took the photo was above the ground.
|
|
26
|
+
* A larger value will magnify the downward part of the image.
|
|
27
|
+
* @param {number} radius - The radius of the skybox. Must be large enough to ensure the scene's camera stays inside.
|
|
28
|
+
* @param {number} [resolution=128] - The geometry resolution of the skybox.
|
|
29
|
+
*/
|
|
12
30
|
constructor( map, height, radius, resolution = 128 ) {
|
|
13
31
|
|
|
14
32
|
if ( height <= 0 || radius <= 0 || resolution <= 0 ) {
|
|
@@ -15,16 +15,59 @@ import {
|
|
|
15
15
|
Vector4
|
|
16
16
|
} from 'three';
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Creates a simulated lens flare that tracks a light.
|
|
20
|
+
*
|
|
21
|
+
* Note that this class can only be used with {@link WebGLRenderer}.
|
|
22
|
+
* When using {@link WebGPURenderer}, use {@link LensflareMesh}.
|
|
23
|
+
*
|
|
24
|
+
* ```js
|
|
25
|
+
* const light = new THREE.PointLight( 0xffffff, 1.5, 2000 );
|
|
26
|
+
*
|
|
27
|
+
* const lensflare = new Lensflare();
|
|
28
|
+
* lensflare.addElement( new LensflareElement( textureFlare0, 512, 0 ) );
|
|
29
|
+
* lensflare.addElement( new LensflareElement( textureFlare1, 512, 0 ) );
|
|
30
|
+
* lensflare.addElement( new LensflareElement( textureFlare2, 60, 0.6 ) );
|
|
31
|
+
*
|
|
32
|
+
* light.add( lensflare );
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @augments Mesh
|
|
36
|
+
*/
|
|
18
37
|
class Lensflare extends Mesh {
|
|
19
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Constructs a new lensflare.
|
|
41
|
+
*/
|
|
20
42
|
constructor() {
|
|
21
43
|
|
|
22
44
|
super( Lensflare.Geometry, new MeshBasicMaterial( { opacity: 0, transparent: true } ) );
|
|
23
45
|
|
|
46
|
+
/**
|
|
47
|
+
* This flag can be used for type testing.
|
|
48
|
+
*
|
|
49
|
+
* @type {boolean}
|
|
50
|
+
* @readonly
|
|
51
|
+
* @default true
|
|
52
|
+
*/
|
|
24
53
|
this.isLensflare = true;
|
|
25
54
|
|
|
26
55
|
this.type = 'Lensflare';
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Overwritten to disable view-frustum culling by default.
|
|
59
|
+
*
|
|
60
|
+
* @type {boolean}
|
|
61
|
+
* @default false
|
|
62
|
+
*/
|
|
27
63
|
this.frustumCulled = false;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Overwritten to make sure lensflares a rendered last.
|
|
67
|
+
*
|
|
68
|
+
* @type {number}
|
|
69
|
+
* @default Infinity
|
|
70
|
+
*/
|
|
28
71
|
this.renderOrder = Infinity;
|
|
29
72
|
|
|
30
73
|
//
|
|
@@ -149,6 +192,11 @@ class Lensflare extends Mesh {
|
|
|
149
192
|
|
|
150
193
|
const mesh2 = new Mesh( geometry, material2 );
|
|
151
194
|
|
|
195
|
+
/**
|
|
196
|
+
* Adds the given lensflare element to this instance.
|
|
197
|
+
*
|
|
198
|
+
* @param {LensflareElement} element - The element to add.
|
|
199
|
+
*/
|
|
152
200
|
this.addElement = function ( element ) {
|
|
153
201
|
|
|
154
202
|
elements.push( element );
|
|
@@ -263,6 +311,10 @@ class Lensflare extends Mesh {
|
|
|
263
311
|
|
|
264
312
|
};
|
|
265
313
|
|
|
314
|
+
/**
|
|
315
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
316
|
+
* method whenever this instance is no longer used in your app.
|
|
317
|
+
*/
|
|
266
318
|
this.dispose = function () {
|
|
267
319
|
|
|
268
320
|
material1a.dispose();
|
|
@@ -284,15 +336,52 @@ class Lensflare extends Mesh {
|
|
|
284
336
|
|
|
285
337
|
}
|
|
286
338
|
|
|
287
|
-
|
|
288
|
-
|
|
339
|
+
/**
|
|
340
|
+
* Represents a single flare that can be added to a {@link Lensflare} container.
|
|
341
|
+
*/
|
|
289
342
|
class LensflareElement {
|
|
290
343
|
|
|
344
|
+
/**
|
|
345
|
+
* Constructs a new lensflare element.
|
|
346
|
+
*
|
|
347
|
+
* @param {Texture} texture - The flare's texture.
|
|
348
|
+
* @param {number} [size=1] - The size in pixels.
|
|
349
|
+
* @param {number} [distance=0] - The normalized distance (`[0,1]`) from the light source.
|
|
350
|
+
* A value of `0` means the flare is located at light source.
|
|
351
|
+
* @param {Color} [color] - The flare's color
|
|
352
|
+
*/
|
|
291
353
|
constructor( texture, size = 1, distance = 0, color = new Color( 0xffffff ) ) {
|
|
292
354
|
|
|
355
|
+
/**
|
|
356
|
+
* The flare's texture.
|
|
357
|
+
*
|
|
358
|
+
* @type {Texture}
|
|
359
|
+
*/
|
|
293
360
|
this.texture = texture;
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* The size in pixels.
|
|
364
|
+
*
|
|
365
|
+
* @type {number}
|
|
366
|
+
* @default 1
|
|
367
|
+
*/
|
|
294
368
|
this.size = size;
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* The normalized distance (`[0,1]`) from the light source.
|
|
372
|
+
* A value of `0` means the flare is located at light source.
|
|
373
|
+
*
|
|
374
|
+
* @type {number}
|
|
375
|
+
* @default 0
|
|
376
|
+
*/
|
|
295
377
|
this.distance = distance;
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* The flare's color
|
|
381
|
+
*
|
|
382
|
+
* @type {Color}
|
|
383
|
+
* @default (1,1,1)
|
|
384
|
+
*/
|
|
296
385
|
this.color = color;
|
|
297
386
|
|
|
298
387
|
}
|
|
@@ -18,16 +18,59 @@ import {
|
|
|
18
18
|
|
|
19
19
|
import { texture, textureLoad, uv, ivec2, vec2, vec4, positionGeometry, reference, varyingProperty, materialReference, Fn } from 'three/tsl';
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Creates a simulated lens flare that tracks a light.
|
|
23
|
+
*
|
|
24
|
+
* Note that this class can only be used with {@link WebGPURenderer}.
|
|
25
|
+
* When using {@link WebGLRenderer}, use {@link Lensflare}.
|
|
26
|
+
*
|
|
27
|
+
* ```js
|
|
28
|
+
* const light = new THREE.PointLight( 0xffffff, 1.5, 2000 );
|
|
29
|
+
*
|
|
30
|
+
* const lensflare = new LensflareMesh();
|
|
31
|
+
* lensflare.addElement( new LensflareElement( textureFlare0, 512, 0 ) );
|
|
32
|
+
* lensflare.addElement( new LensflareElement( textureFlare1, 512, 0 ) );
|
|
33
|
+
* lensflare.addElement( new LensflareElement( textureFlare2, 60, 0.6 ) );
|
|
34
|
+
*
|
|
35
|
+
* light.add( lensflare );
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @augments Mesh
|
|
39
|
+
*/
|
|
21
40
|
class LensflareMesh extends Mesh {
|
|
22
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Constructs a new lensflare mesh.
|
|
44
|
+
*/
|
|
23
45
|
constructor() {
|
|
24
46
|
|
|
25
47
|
super( LensflareMesh.Geometry, new MeshBasicNodeMaterial( { opacity: 0, transparent: true } ) );
|
|
26
48
|
|
|
27
|
-
|
|
49
|
+
/**
|
|
50
|
+
* This flag can be used for type testing.
|
|
51
|
+
*
|
|
52
|
+
* @type {boolean}
|
|
53
|
+
* @readonly
|
|
54
|
+
* @default true
|
|
55
|
+
*/
|
|
56
|
+
this.isLensflareMesh = true;
|
|
28
57
|
|
|
29
58
|
this.type = 'LensflareMesh';
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Overwritten to disable view-frustum culling by default.
|
|
62
|
+
*
|
|
63
|
+
* @type {boolean}
|
|
64
|
+
* @default false
|
|
65
|
+
*/
|
|
30
66
|
this.frustumCulled = false;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Overwritten to make sure lensflares a rendered last.
|
|
70
|
+
*
|
|
71
|
+
* @type {number}
|
|
72
|
+
* @default Infinity
|
|
73
|
+
*/
|
|
31
74
|
this.renderOrder = Infinity;
|
|
32
75
|
|
|
33
76
|
//
|
|
@@ -146,7 +189,11 @@ class LensflareMesh extends Mesh {
|
|
|
146
189
|
|
|
147
190
|
} )();
|
|
148
191
|
|
|
149
|
-
|
|
192
|
+
/**
|
|
193
|
+
* Adds the given lensflare element to this instance.
|
|
194
|
+
*
|
|
195
|
+
* @param {LensflareElement} element - The element to add.
|
|
196
|
+
*/
|
|
150
197
|
this.addElement = function ( element ) {
|
|
151
198
|
|
|
152
199
|
elements.push( element );
|
|
@@ -264,6 +311,10 @@ class LensflareMesh extends Mesh {
|
|
|
264
311
|
|
|
265
312
|
};
|
|
266
313
|
|
|
314
|
+
/**
|
|
315
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
316
|
+
* method whenever this instance is no longer used in your app.
|
|
317
|
+
*/
|
|
267
318
|
this.dispose = function () {
|
|
268
319
|
|
|
269
320
|
material1a.dispose();
|