super-three 0.173.4 → 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 +22198 -1564
- package/build/three.core.js +21287 -1346
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +882 -189
- 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 +19358 -17482
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +19342 -17482
- 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 +187 -11
- 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
|
@@ -37,7 +37,7 @@ class StereoCompositePassNode extends PassNode {
|
|
|
37
37
|
/**
|
|
38
38
|
* This flag can be used for type testing.
|
|
39
39
|
*
|
|
40
|
-
* @type {
|
|
40
|
+
* @type {boolean}
|
|
41
41
|
* @readonly
|
|
42
42
|
* @default true
|
|
43
43
|
*/
|
|
@@ -92,7 +92,7 @@ class StereoCompositePassNode extends PassNode {
|
|
|
92
92
|
/**
|
|
93
93
|
* Updates the internal stereo camera.
|
|
94
94
|
*
|
|
95
|
-
* @param {
|
|
95
|
+
* @param {number} coordinateSystem - The current coordinate system.
|
|
96
96
|
*/
|
|
97
97
|
updateStereoCamera( coordinateSystem ) {
|
|
98
98
|
|
|
@@ -105,8 +105,8 @@ class StereoCompositePassNode extends PassNode {
|
|
|
105
105
|
/**
|
|
106
106
|
* Sets the size of the pass.
|
|
107
107
|
*
|
|
108
|
-
* @param {
|
|
109
|
-
* @param {
|
|
108
|
+
* @param {number} width - The width of the pass.
|
|
109
|
+
* @param {number} height - The height of the pass.
|
|
110
110
|
*/
|
|
111
111
|
setSize( width, height ) {
|
|
112
112
|
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { StereoCamera, Vector2, PassNode, RendererUtils } from 'three/webgpu';
|
|
2
2
|
import { nodeObject } from 'three/tsl';
|
|
3
3
|
|
|
4
|
-
/** @module StereoPassNode **/
|
|
5
|
-
|
|
6
4
|
const _size = /*@__PURE__*/ new Vector2();
|
|
7
5
|
|
|
8
6
|
let _rendererState;
|
|
@@ -33,7 +31,7 @@ class StereoPassNode extends PassNode {
|
|
|
33
31
|
/**
|
|
34
32
|
* This flag can be used for type testing.
|
|
35
33
|
*
|
|
36
|
-
* @type {
|
|
34
|
+
* @type {boolean}
|
|
37
35
|
* @readonly
|
|
38
36
|
* @default true
|
|
39
37
|
*/
|
|
@@ -112,6 +110,7 @@ export default StereoPassNode;
|
|
|
112
110
|
/**
|
|
113
111
|
* TSL function for creating a stereo pass node for stereoscopic rendering.
|
|
114
112
|
*
|
|
113
|
+
* @tsl
|
|
115
114
|
* @function
|
|
116
115
|
* @param {Scene} scene - The scene to render.
|
|
117
116
|
* @param {Camera} camera - The camera to render the scene with.
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { Color, Vector2, NearestFilter, Matrix4, RendererUtils, PassNode, QuadMesh, NodeMaterial } from 'three/webgpu';
|
|
2
2
|
import { add, float, If, Loop, int, Fn, min, max, clamp, nodeObject, texture, uniform, uv, vec2, vec4, luminance } from 'three/tsl';
|
|
3
3
|
|
|
4
|
-
/** @module TRAAPassNode **/
|
|
5
|
-
|
|
6
4
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
7
5
|
const _size = /*@__PURE__*/ new Vector2();
|
|
8
6
|
|
|
@@ -41,7 +39,7 @@ class TRAAPassNode extends PassNode {
|
|
|
41
39
|
/**
|
|
42
40
|
* This flag can be used for type testing.
|
|
43
41
|
*
|
|
44
|
-
* @type {
|
|
42
|
+
* @type {boolean}
|
|
45
43
|
* @readonly
|
|
46
44
|
* @default true
|
|
47
45
|
*/
|
|
@@ -58,7 +56,7 @@ class TRAAPassNode extends PassNode {
|
|
|
58
56
|
/**
|
|
59
57
|
* The clear alpha of the pass.
|
|
60
58
|
*
|
|
61
|
-
* @type {
|
|
59
|
+
* @type {number}
|
|
62
60
|
* @default 0
|
|
63
61
|
*/
|
|
64
62
|
this.clearAlpha = 0;
|
|
@@ -67,7 +65,7 @@ class TRAAPassNode extends PassNode {
|
|
|
67
65
|
* The jitter index selects the current camera offset value.
|
|
68
66
|
*
|
|
69
67
|
* @private
|
|
70
|
-
* @type {
|
|
68
|
+
* @type {number}
|
|
71
69
|
* @default 0
|
|
72
70
|
*/
|
|
73
71
|
this._jitterIndex = 0;
|
|
@@ -92,7 +90,8 @@ class TRAAPassNode extends PassNode {
|
|
|
92
90
|
* The render target that holds the current sample.
|
|
93
91
|
*
|
|
94
92
|
* @private
|
|
95
|
-
* @type {RenderTarget
|
|
93
|
+
* @type {?RenderTarget}
|
|
94
|
+
* @default null
|
|
96
95
|
*/
|
|
97
96
|
this._sampleRenderTarget = null;
|
|
98
97
|
|
|
@@ -100,7 +99,8 @@ class TRAAPassNode extends PassNode {
|
|
|
100
99
|
* The render target that represents the history of frame data.
|
|
101
100
|
*
|
|
102
101
|
* @private
|
|
103
|
-
* @type {RenderTarget
|
|
102
|
+
* @type {?RenderTarget}
|
|
103
|
+
* @default null
|
|
104
104
|
*/
|
|
105
105
|
this._historyRenderTarget = null;
|
|
106
106
|
|
|
@@ -118,9 +118,9 @@ class TRAAPassNode extends PassNode {
|
|
|
118
118
|
/**
|
|
119
119
|
* Sets the size of the effect.
|
|
120
120
|
*
|
|
121
|
-
* @param {
|
|
122
|
-
* @param {
|
|
123
|
-
* @return {
|
|
121
|
+
* @param {number} width - The width of the effect.
|
|
122
|
+
* @param {number} height - The height of the effect.
|
|
123
|
+
* @return {boolean} Whether the TRAA needs a restart or not. That is required after a resize since buffer data with different sizes can't be resolved.
|
|
124
124
|
*/
|
|
125
125
|
setSize( width, height ) {
|
|
126
126
|
|
|
@@ -442,6 +442,7 @@ const _JitterVectors = [
|
|
|
442
442
|
/**
|
|
443
443
|
* TSL function for creating a TRAA pass node for Temporal Reprojection Anti-Aliasing.
|
|
444
444
|
*
|
|
445
|
+
* @tsl
|
|
445
446
|
* @function
|
|
446
447
|
* @param {Scene} scene - The scene to render.
|
|
447
448
|
* @param {Camera} camera - The camera to render the scene with.
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { TempNode } from 'three/webgpu';
|
|
2
2
|
import { nodeObject, Fn, float, uv, convertToTexture, vec4, If, int, clamp, sub, mix } from 'three/tsl';
|
|
3
3
|
|
|
4
|
-
/** @module TransitionNode **/
|
|
5
|
-
|
|
6
4
|
/**
|
|
7
5
|
* Post processing node for creating a transition effect between scenes.
|
|
8
6
|
*
|
|
@@ -129,13 +127,14 @@ export default TransitionNode;
|
|
|
129
127
|
/**
|
|
130
128
|
* TSL function for creating a transition node for post processing.
|
|
131
129
|
*
|
|
130
|
+
* @tsl
|
|
132
131
|
* @function
|
|
133
132
|
* @param {Node<vec4>} nodeA - A texture node that represents the beauty pass of the first scene.
|
|
134
133
|
* @param {Node<vec4>} nodeB - A texture node that represents the beauty pass of the second scene.
|
|
135
134
|
* @param {Node<vec4>} mixTextureNode - A texture that defines how the transition effect should look like.
|
|
136
|
-
* @param {Node<float> |
|
|
137
|
-
* @param {Node<float> |
|
|
138
|
-
* @param {Node<float> |
|
|
135
|
+
* @param {Node<float> | number} mixRatio - The interpolation factor that controls the mix.
|
|
136
|
+
* @param {Node<float> | number} threshold - Can be used to tweak the linear interpolation.
|
|
137
|
+
* @param {Node<float> | number} useTexture - Whether `mixTextureNode` should influence the transition or not.
|
|
139
138
|
* @returns {TransitionNode}
|
|
140
139
|
*/
|
|
141
140
|
export const transition = ( nodeA, nodeB, mixTextureNode, mixRatio, threshold, useTexture ) => nodeObject( new TransitionNode( convertToTexture( nodeA ), convertToTexture( nodeB ), convertToTexture( mixTextureNode ), nodeObject( mixRatio ), nodeObject( threshold ), nodeObject( useTexture ) ) );
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { float, Fn, vec2, uv, sin, rand, degrees, cos, Loop, vec4 } from 'three/tsl';
|
|
2
2
|
|
|
3
|
-
/** @module HashBlur **/
|
|
4
|
-
|
|
5
3
|
/**
|
|
6
4
|
* Applies a hash blur effect to the given texture node.
|
|
7
5
|
*
|
|
8
6
|
* Reference: {@link https://www.shadertoy.com/view/4lXXWn}.
|
|
9
7
|
*
|
|
8
|
+
* @tsl
|
|
10
9
|
* @function
|
|
11
10
|
* @param {Node<vec4>} textureNode - The texture node that should be blurred.
|
|
12
11
|
* @param {Node<float>} [bluramount=float(0.1)] - This node determines the amount of blur.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DataTexture, FloatType, RGBAFormat, Vector2, Vector3, LightsNode, NodeUpdateType } from 'three/webgpu';
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
-
attributeArray, nodeProxy, int, float, vec2, ivec2, ivec4, uniform, Break, Loop,
|
|
4
|
+
attributeArray, nodeProxy, int, float, vec2, ivec2, ivec4, uniform, Break, Loop, positionView,
|
|
5
5
|
Fn, If, Return, textureLoad, instanceIndex, screenCoordinate, directPointLight
|
|
6
6
|
} from 'three/tsl';
|
|
7
7
|
|
|
@@ -34,6 +34,13 @@ export const circleIntersectsAABB = /*@__PURE__*/ Fn( ( [ circleCenter, radius,
|
|
|
34
34
|
const _vector3 = /*@__PURE__*/ new Vector3();
|
|
35
35
|
const _size = /*@__PURE__*/ new Vector2();
|
|
36
36
|
|
|
37
|
+
/**
|
|
38
|
+
* A custom version of `LightsNode` implementing tiled lighting. This node is used in
|
|
39
|
+
* {@link TiledLighting} to overwrite the renderer's default lighting with
|
|
40
|
+
* a custom implementation.
|
|
41
|
+
*
|
|
42
|
+
* @augments LightsNode
|
|
43
|
+
*/
|
|
37
44
|
class TiledLightsNode extends LightsNode {
|
|
38
45
|
|
|
39
46
|
static get type() {
|
|
@@ -42,6 +49,12 @@ class TiledLightsNode extends LightsNode {
|
|
|
42
49
|
|
|
43
50
|
}
|
|
44
51
|
|
|
52
|
+
/**
|
|
53
|
+
* Constructs a new tiled lights node.
|
|
54
|
+
*
|
|
55
|
+
* @param {number} [maxLights=1024] - The maximum number of lights.
|
|
56
|
+
* @param {number} [tileSize=32] - The tile size.
|
|
57
|
+
*/
|
|
45
58
|
constructor( maxLights = 1024, tileSize = 32 ) {
|
|
46
59
|
|
|
47
60
|
super();
|
|
@@ -49,7 +62,20 @@ class TiledLightsNode extends LightsNode {
|
|
|
49
62
|
this.materialLights = [];
|
|
50
63
|
this.tiledLights = [];
|
|
51
64
|
|
|
65
|
+
/**
|
|
66
|
+
* The maximum number of lights.
|
|
67
|
+
*
|
|
68
|
+
* @type {number}
|
|
69
|
+
* @default 1024
|
|
70
|
+
*/
|
|
52
71
|
this.maxLights = maxLights;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* The tile size.
|
|
75
|
+
*
|
|
76
|
+
* @type {number}
|
|
77
|
+
* @default 32
|
|
78
|
+
*/
|
|
53
79
|
this.tileSize = tileSize;
|
|
54
80
|
|
|
55
81
|
this._bufferSize = null;
|
|
@@ -171,7 +197,7 @@ class TiledLightsNode extends LightsNode {
|
|
|
171
197
|
const tileOffset = element.div( stride );
|
|
172
198
|
const tileIndex = this._screenTileIndex.mul( int( 2 ) ).add( tileOffset );
|
|
173
199
|
|
|
174
|
-
return this._lightIndexes.element( tileIndex ).element( element.
|
|
200
|
+
return this._lightIndexes.element( tileIndex ).element( element.mod( stride ) );
|
|
175
201
|
|
|
176
202
|
}
|
|
177
203
|
|
|
@@ -226,12 +252,12 @@ class TiledLightsNode extends LightsNode {
|
|
|
226
252
|
|
|
227
253
|
const { color, decay, viewPosition, distance } = this.getLightData( lightIndex.sub( 1 ) );
|
|
228
254
|
|
|
229
|
-
directPointLight( {
|
|
255
|
+
builder.lightsNode.setupDirectLight( builder, this, directPointLight( {
|
|
230
256
|
color,
|
|
231
|
-
|
|
257
|
+
lightVector: viewPosition.sub( positionView ),
|
|
232
258
|
cutoffDistance: distance,
|
|
233
259
|
decayExponent: decay
|
|
234
|
-
} )
|
|
260
|
+
} ) );
|
|
235
261
|
|
|
236
262
|
} );
|
|
237
263
|
|
|
@@ -315,7 +341,7 @@ class TiledLightsNode extends LightsNode {
|
|
|
315
341
|
const tileOffset = elementIndex.div( stride );
|
|
316
342
|
const tileIndex = instanceIndex.mul( int( 2 ) ).add( tileOffset );
|
|
317
343
|
|
|
318
|
-
return lightIndexes.element( tileIndex ).element( elementIndex.
|
|
344
|
+
return lightIndexes.element( tileIndex ).element( elementIndex.mod( stride ) );
|
|
319
345
|
|
|
320
346
|
};
|
|
321
347
|
|
|
@@ -326,7 +352,7 @@ class TiledLightsNode extends LightsNode {
|
|
|
326
352
|
const tiledBufferSize = bufferSize.clone().divideScalar( tileSize ).floor();
|
|
327
353
|
|
|
328
354
|
const tileScreen = vec2(
|
|
329
|
-
instanceIndex.
|
|
355
|
+
instanceIndex.mod( tiledBufferSize.width ),
|
|
330
356
|
instanceIndex.div( tiledBufferSize.width )
|
|
331
357
|
).mul( tileSize ).div( screenSize );
|
|
332
358
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { TextureLoader } from 'three';
|
|
2
|
+
import { Fn, int, ivec2, textureLoad } from 'three/tsl';
|
|
3
|
+
|
|
4
|
+
/** @module Bayer */
|
|
5
|
+
|
|
6
|
+
let bayer16Texture = null;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* This TSL function can be used to sample a Bayer16 texture which is a 16x16 texture with a Bayer Matrix pattern.
|
|
10
|
+
* It can be used for dithering effects but also as an alternative to blue-noise. When used with Ray Marching
|
|
11
|
+
* specifically in {@link VolumeNodeMaterial#offsetNode}, it reduces banding problem, thus being able to use
|
|
12
|
+
* fewer steps without affecting the visuals as much.
|
|
13
|
+
*
|
|
14
|
+
* @tsl
|
|
15
|
+
* @function
|
|
16
|
+
* @param {Node<vec2>} uv - The uv to sample the bayer16 texture.
|
|
17
|
+
* @return {Node<vec4>} The sampled bayer value.
|
|
18
|
+
*/
|
|
19
|
+
export const bayer16 = Fn( ( [ uv ] ) => {
|
|
20
|
+
|
|
21
|
+
if ( bayer16Texture === null ) {
|
|
22
|
+
|
|
23
|
+
const bayer16Base64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAAH2ElEQVR4nO3bRW8TAACG4W7LMkJ2oJRSZEg4EU642xhjyJBRSpHh7u4aToQT7hZOhBPu7u7u7u4O/6Pve/3y/IMvbyAQCEyfPr1s2bKrV68uUKDAzJkzy5cvv3bt2uTk5BkzZpQrV27NmjUFCxacNWtWhQoV1q1bp9cnlN+/f3/Dhg3v37/fvXv348ePN23a9Pnz5/379z948GCjRo0ePnzYs2fPkydPNm/e/OXLlwMHDtTrE8kHKlasuH79+kKFCs2ePbtmzZrbt28vVqzY4sWLK1euvHHjxsKFC8+dO7d27do7d+4sUaLE0qVL9fpE8oH3798PHz78/Pnzbdq0+f79+/jx469fv96hQ4ePHz+OHDny4sWLbdu2/fnz58SJE2/evNmpUye9PpF8ckZGRkZGRn5+fn5+fnp6enp6em5ubm5urrs7YQ+cPn06Nzf39evXgwcPPnz4cOPGjR8/fty7d++zZ8+2atXq7du3Q4cOPXr0aJMmTZ4+fdq3b1+9PpF8oG7durt3787IyFi+fHnVqlU3b95cpEiR+fPn169ff+/evaVLl165cmX16tW3bt1atGjRhQsX6vWJ5AO/f/+ePHny7du38/PzP3/+PHr06MuXL7dr1+7v379Tp069e/du165dv379Onbs2KtXr7Zv316vTySfnJaWlpaWlpOTk5OTE4lEIpFIPB6Px+MpKSkpKSlZWVlZWVmhUCgUCkWj0Wg0qtcnkg8cOnQoKyvr0aNHvXr1OnXqVIsWLV69ejVo0KADBw5kZmY+ePCgR48eJ06caNas2YsXLwYMGKDXJ5IPVKlSZdOmTaFQaN68eXXq1Nm1a1fJkiWXLVtWqVKlDRs2BIPBOXPm1KpVa8eOHcWLF1+yZIlen0g+8OnTp1GjRl26dCkajf769WvSpEm3bt3q3Lnzhw8fRowYceHChby8vB8/fkyYMOHGjRsdO3bU6xPJ+wO4o/fAuXPnWrdu/e7du2HDhh07diwnJ+fZs2f9+vU7c+ZMy5Yt37x5M2TIkCNHjmRnZz958qRPnz56fSL5QIMGDfbt21emTJlVq1bVqFFj27ZtkUhk0aJF9erV27NnT6lSpVasWFGtWrUtW7aEw+EFCxbo9YnkA//+/Zs2bdq9e/e6dev27du3cePGXbt2LR6P//nzZ8qUKXfu3OnSpcuXL1/GjBlz5cqVWCym1yeST05KSkpKSsrMzMzMzAwGg8FgMC8vLy8vLzU1NTU1NTs7Ozs7OxwOh8PhWCwWi8X0+kTy9gB6tLcH0KO9PYAe7f0B3NG7PYAe7e0B9GhvD6BHe3sAPdrbA+jR3h5Aj/b2AHq09wdwR+/2AHq0twfQo709gB7t7QH0aG8PoEd7ewA92tsD6NHeH8AdvdsD6NHeHkCP9vYAerS3B9CjvT2AHu3tAfRobw+gR3t/AHf0bg+gR3t7AD3a2wPo0d4eQI/29gB6tLcH0KO9PYAe7f0B3NG7PYAe7e0B9GhvD6BHe3sAPdrbA+jR3h5Aj/b2AHq09wdwR+/2AHq0twfQo709gB7t7QH0aG8PoEd7ewA92tsD6NHeH8AdvdsD6NHeHkCP9vYAerS3B9CjvT2AHu3tAfRobw+gR3t/AHf0bg+gR3t7AD3a2wPo0d4eQI/29gB6tLcH0KO9PYAe7f0B3NG7PYAe7e0B9GhvD6BHe3sAPdrbA+jR3h5Aj/b2AHq09wdwR+/2AHq0twfQo709gB7t7QH0aG8PoEd7ewA92tsD6NHeH8AdvdsD6NHeHkCP9vYAerS3B9CjvT2AHu3tAfRobw+gR3t/AHf0bg+gR3t7AD3a2wPo0d4eQI/29gB6tLcH0KO9PYAe7f0B3NG7PYAe7e0B9GhvD6BHe3sAPdrbA+jR3h5Aj/b2AHq09wdwR+/2AHq0twfQo709gB7t7QH0aG8PoEd7ewA92tsD6NHeH8AdvdsD6NHeHkCP9vYAerS3B9CjvT2AHu3tAfRobw+gR3t/AHf0bg+gR3t7AD3a2wPo0d4eQI/29gB6tLcH0KO9PYAe7f0B3NG7PYAe7e0B9GhvD6BHe3sAPdrbA+jR3h5Aj/b2AHq09wdwR+/2AHq0twfQo709gB7t7QH0aG8PoEd7ewA92tsD6NHeH8AdvdsD6NHeHkCP9vYAerS3B9CjvT2AHu3tAfRobw+gR3t/AHf0bg+gR3t7AD3a2wPo0d4eQI/29gB6tLcH0KO9PYAe7f0B3NG7PYAe7e0B9GhvD6BHe3sAPdrbA+jR3h5Aj/b2AHq09wdwR+/2AHq0twfQo709gB7t7QH0aG8PoEd7ewA92tsD6NHeH8AdvdsD6NHeHkCP9vYAerS3B9CjvT2AHu3tAfRobw+gR3t/AHf0bg+gR3t7AD3a2wPo0d4eQI/29gB6tLcH0KO9PYAe7f0B3NG7PYAe7e0B9GhvD6BHe3sAPdrbA+jR3h5Aj/b2AHq09wdwR+/2AHq0twfQo709gB7t7QH0aG8PoEd7ewA92tsD6NHeH8AdvdsD6NHeHkCP9vYAerS3B9CjvT2AHu3tAfRobw+gR3t/AHf0bg+gR3t7AD3a2wPo0d4eQI/29gB6tLcH0KO9PYAe7f0B3NG7PYAe7e0B9GhvD6BHe3sAPdrbA+jR3h5Aj/b2AHq09wdwR+/2AHq0twfQo709gB7t/wNER3MueNkctwAAAABJRU5ErkJggg==';
|
|
24
|
+
|
|
25
|
+
bayer16Texture = new TextureLoader().load( bayer16Base64 );
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return textureLoad( bayer16Texture, ivec2( uv ).mod( int( 16 ) ) );
|
|
30
|
+
|
|
31
|
+
} );
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { varying, vec4, modelWorldMatrixInverse, cameraPosition, positionGeometry, float, Fn, Loop, max, min, vec2, vec3 } from 'three/tsl';
|
|
2
|
+
|
|
3
|
+
/** @module Raymarching */
|
|
4
|
+
|
|
5
|
+
const hitBox = /*@__PURE__*/ Fn( ( { orig, dir } ) => {
|
|
6
|
+
|
|
7
|
+
const box_min = vec3( - 0.5 );
|
|
8
|
+
const box_max = vec3( 0.5 );
|
|
9
|
+
|
|
10
|
+
const inv_dir = dir.reciprocal();
|
|
11
|
+
|
|
12
|
+
const tmin_tmp = box_min.sub( orig ).mul( inv_dir );
|
|
13
|
+
const tmax_tmp = box_max.sub( orig ).mul( inv_dir );
|
|
14
|
+
|
|
15
|
+
const tmin = min( tmin_tmp, tmax_tmp );
|
|
16
|
+
const tmax = max( tmin_tmp, tmax_tmp );
|
|
17
|
+
|
|
18
|
+
const t0 = max( tmin.x, max( tmin.y, tmin.z ) );
|
|
19
|
+
const t1 = min( tmax.x, min( tmax.y, tmax.z ) );
|
|
20
|
+
|
|
21
|
+
return vec2( t0, t1 );
|
|
22
|
+
|
|
23
|
+
} );
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* TSL function for performing raymarching in a box-area using the specified number of steps
|
|
27
|
+
* and a callback function.
|
|
28
|
+
*
|
|
29
|
+
* ```js
|
|
30
|
+
* RaymarchingBox( count, ( { positionRay } ) => {
|
|
31
|
+
*
|
|
32
|
+
* } );
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @tsl
|
|
36
|
+
* @function
|
|
37
|
+
* @param {number|Node} steps - The number of steps for raymarching.
|
|
38
|
+
* @param {Function|FunctionNode} callback - The callback function to execute at each step.
|
|
39
|
+
*/
|
|
40
|
+
export const RaymarchingBox = ( steps, callback ) => {
|
|
41
|
+
|
|
42
|
+
const vOrigin = varying( vec3( modelWorldMatrixInverse.mul( vec4( cameraPosition, 1.0 ) ) ) );
|
|
43
|
+
const vDirection = varying( positionGeometry.sub( vOrigin ) );
|
|
44
|
+
|
|
45
|
+
const rayDir = vDirection.normalize();
|
|
46
|
+
const bounds = vec2( hitBox( { orig: vOrigin, dir: rayDir } ) ).toVar();
|
|
47
|
+
|
|
48
|
+
bounds.x.greaterThan( bounds.y ).discard();
|
|
49
|
+
|
|
50
|
+
bounds.assign( vec2( max( bounds.x, 0.0 ), bounds.y ) );
|
|
51
|
+
|
|
52
|
+
const inc = vec3( rayDir.abs().reciprocal() ).toVar();
|
|
53
|
+
const delta = float( min( inc.x, min( inc.y, inc.z ) ) ).toVar( 'rayDelta' ); // used 'rayDelta' name in loop
|
|
54
|
+
|
|
55
|
+
delta.divAssign( float( steps ) );
|
|
56
|
+
|
|
57
|
+
const positionRay = vec3( vOrigin.add( bounds.x.mul( rayDir ) ) ).toVar();
|
|
58
|
+
|
|
59
|
+
Loop( { type: 'float', start: bounds.x, end: bounds.y, update: '+= rayDelta' }, () => {
|
|
60
|
+
|
|
61
|
+
callback( { positionRay } );
|
|
62
|
+
|
|
63
|
+
positionRay.addAssign( rayDir.mul( delta ) );
|
|
64
|
+
|
|
65
|
+
} );
|
|
66
|
+
|
|
67
|
+
};
|
|
@@ -11,6 +11,27 @@ import {
|
|
|
11
11
|
Vector3,
|
|
12
12
|
} from 'three';
|
|
13
13
|
|
|
14
|
+
/** @module BufferGeometryUtils */
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Computes vertex tangents using the MikkTSpace algorithm. MikkTSpace generates the same tangents consistently,
|
|
18
|
+
* and is used in most modelling tools and normal map bakers. Use MikkTSpace for materials with normal maps,
|
|
19
|
+
* because inconsistent tangents may lead to subtle visual issues in the normal map, particularly around mirrored
|
|
20
|
+
* UV seams.
|
|
21
|
+
*
|
|
22
|
+
* In comparison to this method, {@link BufferGeometry#computeTangents} (a custom algorithm) generates tangents that
|
|
23
|
+
* probably will not match the tangents in other software. The custom algorithm is sufficient for general use with a
|
|
24
|
+
* custom material, and may be faster than MikkTSpace.
|
|
25
|
+
*
|
|
26
|
+
* Returns the original BufferGeometry. Indexed geometries will be de-indexed. Requires position, normal, and uv attributes.
|
|
27
|
+
*
|
|
28
|
+
* @param {BufferGeometry} geometry - The geometry to compute tangents for.
|
|
29
|
+
* @param {Object} MikkTSpace - Instance of `examples/jsm/libs/mikktspace.module.js`, or `mikktspace` npm package.
|
|
30
|
+
* Await `MikkTSpace.ready` before use.
|
|
31
|
+
* @param {boolean} [negateSign=true] - Whether to negate the sign component (.w) of each tangent.
|
|
32
|
+
* Required for normal map conventions in some formats, including glTF.
|
|
33
|
+
* @return {BufferGeometry} The updated geometry.
|
|
34
|
+
*/
|
|
14
35
|
function computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {
|
|
15
36
|
|
|
16
37
|
if ( ! MikkTSpace || ! MikkTSpace.isReady ) {
|
|
@@ -100,9 +121,11 @@ function computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {
|
|
|
100
121
|
}
|
|
101
122
|
|
|
102
123
|
/**
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
* @
|
|
124
|
+
* Merges a set of geometries into a single instance. All geometries must have compatible attributes.
|
|
125
|
+
*
|
|
126
|
+
* @param {Array<BufferGeometry>} geometries - The geometries to merge.
|
|
127
|
+
* @param {boolean} [useGroups=false] - Whether to use groups or not.
|
|
128
|
+
* @return {?BufferGeometry} The merged geometry. Returns `null` if the merge does not succeed.
|
|
106
129
|
*/
|
|
107
130
|
function mergeGeometries( geometries, useGroups = false ) {
|
|
108
131
|
|
|
@@ -296,8 +319,11 @@ function mergeGeometries( geometries, useGroups = false ) {
|
|
|
296
319
|
}
|
|
297
320
|
|
|
298
321
|
/**
|
|
299
|
-
*
|
|
300
|
-
* @
|
|
322
|
+
* Merges a set of attributes into a single instance. All attributes must have compatible properties and types.
|
|
323
|
+
* Instances of {@link InterleavedBufferAttribute} are not supported.
|
|
324
|
+
*
|
|
325
|
+
* @param {Array<BufferAttribute>} attributes - The attributes to merge.
|
|
326
|
+
* @return {?BufferAttribute} The merged attribute. Returns `null` if the merge does not succeed.
|
|
301
327
|
*/
|
|
302
328
|
function mergeAttributes( attributes ) {
|
|
303
329
|
|
|
@@ -389,10 +415,12 @@ function mergeAttributes( attributes ) {
|
|
|
389
415
|
}
|
|
390
416
|
|
|
391
417
|
/**
|
|
392
|
-
*
|
|
393
|
-
*
|
|
418
|
+
* Performs a deep clone of the given buffer attribute.
|
|
419
|
+
*
|
|
420
|
+
* @param {BufferAttribute} attribute - The attribute to clone.
|
|
421
|
+
* @return {BufferAttribute} The cloned attribute.
|
|
394
422
|
*/
|
|
395
|
-
|
|
423
|
+
function deepCloneAttribute( attribute ) {
|
|
396
424
|
|
|
397
425
|
if ( attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute ) {
|
|
398
426
|
|
|
@@ -411,8 +439,11 @@ export function deepCloneAttribute( attribute ) {
|
|
|
411
439
|
}
|
|
412
440
|
|
|
413
441
|
/**
|
|
414
|
-
*
|
|
415
|
-
* @
|
|
442
|
+
* Interleaves a set of attributes and returns a new array of corresponding attributes that share a
|
|
443
|
+
* single {@link InterleavedBuffer} instance. All attributes must have compatible types.
|
|
444
|
+
*
|
|
445
|
+
* @param {Array<BufferAttribute>} attributes - The attributes to interleave.
|
|
446
|
+
* @return {Array<InterleavedBufferAttribute>} An array of interleaved attributes. If interleave does not succeed, the method returns `null`.
|
|
416
447
|
*/
|
|
417
448
|
function interleaveAttributes( attributes ) {
|
|
418
449
|
|
|
@@ -475,8 +506,13 @@ function interleaveAttributes( attributes ) {
|
|
|
475
506
|
|
|
476
507
|
}
|
|
477
508
|
|
|
478
|
-
|
|
479
|
-
|
|
509
|
+
/**
|
|
510
|
+
* Returns a new, non-interleaved version of the given attribute.
|
|
511
|
+
*
|
|
512
|
+
* @param {InterleavedBufferAttribute} attribute - The interleaved attribute.
|
|
513
|
+
* @return {BufferAttribute} The non-interleaved attribute.
|
|
514
|
+
*/
|
|
515
|
+
function deinterleaveAttribute( attribute ) {
|
|
480
516
|
|
|
481
517
|
const cons = attribute.data.array.constructor;
|
|
482
518
|
const count = attribute.count;
|
|
@@ -523,8 +559,12 @@ export function deinterleaveAttribute( attribute ) {
|
|
|
523
559
|
|
|
524
560
|
}
|
|
525
561
|
|
|
526
|
-
|
|
527
|
-
|
|
562
|
+
/**
|
|
563
|
+
* Deinterleaves all attributes on the given geometry.
|
|
564
|
+
*
|
|
565
|
+
* @param {BufferGeometry} geometry - The geometry to deinterleave.
|
|
566
|
+
*/
|
|
567
|
+
function deinterleaveGeometry( geometry ) {
|
|
528
568
|
|
|
529
569
|
const attributes = geometry.attributes;
|
|
530
570
|
const morphTargets = geometry.morphTargets;
|
|
@@ -567,8 +607,10 @@ export function deinterleaveGeometry( geometry ) {
|
|
|
567
607
|
}
|
|
568
608
|
|
|
569
609
|
/**
|
|
570
|
-
*
|
|
571
|
-
*
|
|
610
|
+
* Returns the amount of bytes used by all attributes to represent the geometry.
|
|
611
|
+
*
|
|
612
|
+
* @param {BufferGeometry} geometry - The geometry.
|
|
613
|
+
* @return {number} The estimate bytes used.
|
|
572
614
|
*/
|
|
573
615
|
function estimateBytesUsed( geometry ) {
|
|
574
616
|
|
|
@@ -590,9 +632,11 @@ function estimateBytesUsed( geometry ) {
|
|
|
590
632
|
}
|
|
591
633
|
|
|
592
634
|
/**
|
|
593
|
-
*
|
|
594
|
-
*
|
|
595
|
-
* @
|
|
635
|
+
* Returns a new geometry with vertices for which all similar vertex attributes (within tolerance) are merged.
|
|
636
|
+
*
|
|
637
|
+
* @param {BufferGeometry} geometry - The geometry to merge vertices for.
|
|
638
|
+
* @param {number} [tolerance=1e-4] - The tolerance value.
|
|
639
|
+
* @return {BufferGeometry} - The new geometry with merged vertices.
|
|
596
640
|
*/
|
|
597
641
|
function mergeVertices( geometry, tolerance = 1e-4 ) {
|
|
598
642
|
|
|
@@ -753,9 +797,12 @@ function mergeVertices( geometry, tolerance = 1e-4 ) {
|
|
|
753
797
|
}
|
|
754
798
|
|
|
755
799
|
/**
|
|
756
|
-
*
|
|
757
|
-
*
|
|
758
|
-
*
|
|
800
|
+
* Returns a new indexed geometry based on `TrianglesDrawMode` draw mode.
|
|
801
|
+
* This mode corresponds to the `gl.TRIANGLES` primitive in WebGL.
|
|
802
|
+
*
|
|
803
|
+
* @param {BufferGeometry} geometry - The geometry to convert.
|
|
804
|
+
* @param {number} drawMode - The current draw mode.
|
|
805
|
+
* @return {BufferGeometry} The new geometry using `TrianglesDrawMode`.
|
|
759
806
|
*/
|
|
760
807
|
function toTrianglesDrawMode( geometry, drawMode ) {
|
|
761
808
|
|
|
@@ -864,9 +911,13 @@ function toTrianglesDrawMode( geometry, drawMode ) {
|
|
|
864
911
|
|
|
865
912
|
/**
|
|
866
913
|
* Calculates the morphed attributes of a morphed/skinned BufferGeometry.
|
|
867
|
-
*
|
|
868
|
-
*
|
|
869
|
-
*
|
|
914
|
+
*
|
|
915
|
+
* Helpful for Raytracing or Decals (i.e. a `DecalGeometry` applied to a morphed Object with a `BufferGeometry`
|
|
916
|
+
* will use the original `BufferGeometry`, not the morphed/skinned one, generating an incorrect result.
|
|
917
|
+
* Using this function to create a shadow `Object3`D the `DecalGeometry` can be correctly generated).
|
|
918
|
+
*
|
|
919
|
+
* @param {Mesh|Line|Points} object - The 3D object to compute morph attributes for.
|
|
920
|
+
* @return {Object} An object with original position/normal attributes and morphed ones.
|
|
870
921
|
*/
|
|
871
922
|
function computeMorphedAttributes( object ) {
|
|
872
923
|
|
|
@@ -1142,6 +1193,12 @@ function computeMorphedAttributes( object ) {
|
|
|
1142
1193
|
|
|
1143
1194
|
}
|
|
1144
1195
|
|
|
1196
|
+
/**
|
|
1197
|
+
* Merges the {@link BufferGeometry#groups} for the given geometry.
|
|
1198
|
+
*
|
|
1199
|
+
* @param {BufferGeometry} geometry - The geometry to modify.
|
|
1200
|
+
* @return {BufferGeometry} - The updated geometry
|
|
1201
|
+
*/
|
|
1145
1202
|
function mergeGroups( geometry ) {
|
|
1146
1203
|
|
|
1147
1204
|
if ( geometry.groups.length === 0 ) {
|
|
@@ -1244,15 +1301,14 @@ function mergeGroups( geometry ) {
|
|
|
1244
1301
|
|
|
1245
1302
|
}
|
|
1246
1303
|
|
|
1247
|
-
|
|
1248
1304
|
/**
|
|
1249
1305
|
* Modifies the supplied geometry if it is non-indexed, otherwise creates a new,
|
|
1250
1306
|
* non-indexed geometry. Returns the geometry with smooth normals everywhere except
|
|
1251
1307
|
* faces that meet at an angle greater than the crease angle.
|
|
1252
1308
|
*
|
|
1253
|
-
* @param {BufferGeometry} geometry
|
|
1254
|
-
* @param {number} [creaseAngle]
|
|
1255
|
-
* @return {BufferGeometry}
|
|
1309
|
+
* @param {BufferGeometry} geometry - The geometry to modify.
|
|
1310
|
+
* @param {number} [creaseAngle=Math.PI/3] - The crease angle in radians.
|
|
1311
|
+
* @return {BufferGeometry} - The updated geometry
|
|
1256
1312
|
*/
|
|
1257
1313
|
function toCreasedNormals( geometry, creaseAngle = Math.PI / 3 /* 60 degrees */ ) {
|
|
1258
1314
|
|
|
@@ -1363,6 +1419,9 @@ export {
|
|
|
1363
1419
|
computeMikkTSpaceTangents,
|
|
1364
1420
|
mergeGeometries,
|
|
1365
1421
|
mergeAttributes,
|
|
1422
|
+
deepCloneAttribute,
|
|
1423
|
+
deinterleaveAttribute,
|
|
1424
|
+
deinterleaveGeometry,
|
|
1366
1425
|
interleaveAttributes,
|
|
1367
1426
|
estimateBytesUsed,
|
|
1368
1427
|
mergeVertices,
|
|
@@ -4,6 +4,8 @@ import {
|
|
|
4
4
|
Vector3
|
|
5
5
|
} from 'three';
|
|
6
6
|
|
|
7
|
+
/** @module CameraUtils */
|
|
8
|
+
|
|
7
9
|
const _va = /*@__PURE__*/ new Vector3(), // from pe to pa
|
|
8
10
|
_vb = /*@__PURE__*/ new Vector3(), // from pe to pb
|
|
9
11
|
_vc = /*@__PURE__*/ new Vector3(), // from pe to pc
|
|
@@ -14,16 +16,17 @@ const _va = /*@__PURE__*/ new Vector3(), // from pe to pa
|
|
|
14
16
|
_quat = /*@__PURE__*/ new Quaternion(); // temporary quaternion
|
|
15
17
|
|
|
16
18
|
|
|
17
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Set projection matrix and the orientation of a perspective camera
|
|
18
21
|
* to exactly frame the corners of an arbitrary rectangle.
|
|
19
22
|
* NOTE: This function ignores the standard parameters;
|
|
20
|
-
* do not call updateProjectionMatrix() after this
|
|
23
|
+
* do not call `updateProjectionMatrix()` after this.
|
|
21
24
|
*
|
|
22
|
-
* @param {PerspectiveCamera} camera
|
|
23
|
-
* @param {Vector3} bottomLeftCorner
|
|
24
|
-
* @param {Vector3} bottomRightCorner
|
|
25
|
-
* @param {Vector3} topLeftCorner
|
|
26
|
-
* @param {boolean} [estimateViewFrustum=false]
|
|
25
|
+
* @param {PerspectiveCamera} camera - The camera.
|
|
26
|
+
* @param {Vector3} bottomLeftCorner - The bottom-left corner point.
|
|
27
|
+
* @param {Vector3} bottomRightCorner - The bottom-right corner point.
|
|
28
|
+
* @param {Vector3} topLeftCorner - The top-left corner point.
|
|
29
|
+
* @param {boolean} [estimateViewFrustum=false] - If set to `true`, the function tries to estimate the camera's FOV.
|
|
27
30
|
*/
|
|
28
31
|
function frameCorners( camera, bottomLeftCorner, bottomRightCorner, topLeftCorner, estimateViewFrustum = false ) {
|
|
29
32
|
|