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
|
@@ -15,6 +15,7 @@ import WebGPUTextureUtils from './utils/WebGPUTextureUtils.js';
|
|
|
15
15
|
|
|
16
16
|
import { WebGPUCoordinateSystem } from '../../constants.js';
|
|
17
17
|
import WebGPUTimestampQueryPool from './utils/WebGPUTimestampQueryPool.js';
|
|
18
|
+
import { warnOnce } from '../../utils.js';
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
21
|
* A backend implementation targeting WebGPU.
|
|
@@ -24,22 +25,28 @@ import WebGPUTimestampQueryPool from './utils/WebGPUTimestampQueryPool.js';
|
|
|
24
25
|
*/
|
|
25
26
|
class WebGPUBackend extends Backend {
|
|
26
27
|
|
|
28
|
+
/**
|
|
29
|
+
* WebGPUBackend options.
|
|
30
|
+
*
|
|
31
|
+
* @typedef {Object} WebGPUBackend~Options
|
|
32
|
+
* @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
33
|
+
* @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
34
|
+
* @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
35
|
+
* @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
36
|
+
* @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
37
|
+
* @property {number} [samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
|
|
38
|
+
* @property {boolean} [forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
|
|
39
|
+
* @property {boolean} [trackTimestamp=false] - Whether to track timestamps with a Timestamp Query API or not.
|
|
40
|
+
* @property {string} [powerPreference=undefined] - The power preference.
|
|
41
|
+
* @property {Object} [requiredLimits=undefined] - Specifies the limits that are required by the device request. The request will fail if the adapter cannot provide these limits.
|
|
42
|
+
* @property {GPUDevice} [device=undefined] - If there is an existing GPU device on app level, it can be passed to the renderer as a parameter.
|
|
43
|
+
* @property {number} [outputType=undefined] - Texture type for output to canvas. By default, device's preferred format is used; other formats may incur overhead.
|
|
44
|
+
*/
|
|
45
|
+
|
|
27
46
|
/**
|
|
28
47
|
* Constructs a new WebGPU backend.
|
|
29
48
|
*
|
|
30
|
-
* @param {
|
|
31
|
-
* @param {Boolean} [parameters.logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
32
|
-
* @param {Boolean} [parameters.alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
33
|
-
* @param {Boolean} [parameters.depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
34
|
-
* @param {Boolean} [parameters.stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
35
|
-
* @param {Boolean} [parameters.antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
36
|
-
* @param {Number} [parameters.samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
|
|
37
|
-
* @param {Boolean} [parameters.forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
|
|
38
|
-
* @param {Boolean} [parameters.trackTimestamp=false] - Whether to track timestamps with a Timestamp Query API or not.
|
|
39
|
-
* @param {String} [parameters.powerPreference=undefined] - The power preference.
|
|
40
|
-
* @param {Object} [parameters.requiredLimits=undefined] - Specifies the limits that are required by the device request. The request will fail if the adapter cannot provide these limits.
|
|
41
|
-
* @param {GPUDevice} [parameters.device=undefined] - If there is an existing GPU device on app level, it can be passed to the renderer as a parameter.
|
|
42
|
-
* @param {Number} [parameters.outputType=undefined] - Texture type for output to canvas. By default, device's preferred format is used; other formats may incur overhead.
|
|
49
|
+
* @param {WebGPUBackend~Options} [parameters] - The configuration parameter.
|
|
43
50
|
*/
|
|
44
51
|
constructor( parameters = {} ) {
|
|
45
52
|
|
|
@@ -48,7 +55,7 @@ class WebGPUBackend extends Backend {
|
|
|
48
55
|
/**
|
|
49
56
|
* This flag can be used for type testing.
|
|
50
57
|
*
|
|
51
|
-
* @type {
|
|
58
|
+
* @type {boolean}
|
|
52
59
|
* @readonly
|
|
53
60
|
* @default true
|
|
54
61
|
*/
|
|
@@ -59,18 +66,10 @@ class WebGPUBackend extends Backend {
|
|
|
59
66
|
|
|
60
67
|
this.parameters.requiredLimits = ( parameters.requiredLimits === undefined ) ? {} : parameters.requiredLimits;
|
|
61
68
|
|
|
62
|
-
/**
|
|
63
|
-
* Whether to track timestamps with a Timestamp Query API or not.
|
|
64
|
-
*
|
|
65
|
-
* @type {Boolean}
|
|
66
|
-
* @default false
|
|
67
|
-
*/
|
|
68
|
-
this.trackTimestamp = ( parameters.trackTimestamp === true );
|
|
69
|
-
|
|
70
69
|
/**
|
|
71
70
|
* A reference to the device.
|
|
72
71
|
*
|
|
73
|
-
* @type {GPUDevice
|
|
72
|
+
* @type {?GPUDevice}
|
|
74
73
|
* @default null
|
|
75
74
|
*/
|
|
76
75
|
this.device = null;
|
|
@@ -78,7 +77,7 @@ class WebGPUBackend extends Backend {
|
|
|
78
77
|
/**
|
|
79
78
|
* A reference to the context.
|
|
80
79
|
*
|
|
81
|
-
* @type {GPUCanvasContext
|
|
80
|
+
* @type {?GPUCanvasContext}
|
|
82
81
|
* @default null
|
|
83
82
|
*/
|
|
84
83
|
this.context = null;
|
|
@@ -86,7 +85,7 @@ class WebGPUBackend extends Backend {
|
|
|
86
85
|
/**
|
|
87
86
|
* A reference to the color attachment of the default framebuffer.
|
|
88
87
|
*
|
|
89
|
-
* @type {GPUTexture
|
|
88
|
+
* @type {?GPUTexture}
|
|
90
89
|
* @default null
|
|
91
90
|
*/
|
|
92
91
|
this.colorBuffer = null;
|
|
@@ -94,7 +93,7 @@ class WebGPUBackend extends Backend {
|
|
|
94
93
|
/**
|
|
95
94
|
* A reference to the default render pass descriptor.
|
|
96
95
|
*
|
|
97
|
-
* @type {Object
|
|
96
|
+
* @type {?Object}
|
|
98
97
|
* @default null
|
|
99
98
|
*/
|
|
100
99
|
this.defaultRenderPassdescriptor = null;
|
|
@@ -141,7 +140,7 @@ class WebGPUBackend extends Backend {
|
|
|
141
140
|
/**
|
|
142
141
|
* A map that manages the resolve buffers for occlusion queries.
|
|
143
142
|
*
|
|
144
|
-
* @type {Map<
|
|
143
|
+
* @type {Map<number,GPUBuffer>}
|
|
145
144
|
*/
|
|
146
145
|
this.occludedResolveCache = new Map();
|
|
147
146
|
|
|
@@ -245,7 +244,7 @@ class WebGPUBackend extends Backend {
|
|
|
245
244
|
/**
|
|
246
245
|
* The coordinate system of the backend.
|
|
247
246
|
*
|
|
248
|
-
* @type {
|
|
247
|
+
* @type {number}
|
|
249
248
|
* @readonly
|
|
250
249
|
*/
|
|
251
250
|
get coordinateSystem() {
|
|
@@ -362,10 +361,9 @@ class WebGPUBackend extends Backend {
|
|
|
362
361
|
renderTargetData.width !== renderTarget.width ||
|
|
363
362
|
renderTargetData.height !== renderTarget.height ||
|
|
364
363
|
renderTargetData.dimensions !== renderTarget.dimensions ||
|
|
365
|
-
renderTargetData.activeMipmapLevel !==
|
|
364
|
+
renderTargetData.activeMipmapLevel !== renderContext.activeMipmapLevel ||
|
|
366
365
|
renderTargetData.activeCubeFace !== renderContext.activeCubeFace ||
|
|
367
|
-
renderTargetData.samples !== renderTarget.samples
|
|
368
|
-
renderTargetData.loadOp !== colorAttachmentsConfig.loadOp
|
|
366
|
+
renderTargetData.samples !== renderTarget.samples
|
|
369
367
|
) {
|
|
370
368
|
|
|
371
369
|
descriptors = {};
|
|
@@ -377,23 +375,25 @@ class WebGPUBackend extends Backend {
|
|
|
377
375
|
const onDispose = () => {
|
|
378
376
|
|
|
379
377
|
renderTarget.removeEventListener( 'dispose', onDispose );
|
|
380
|
-
|
|
381
378
|
this.delete( renderTarget );
|
|
382
379
|
|
|
383
380
|
};
|
|
384
381
|
|
|
385
|
-
renderTarget.
|
|
382
|
+
if ( renderTarget.hasEventListener( 'dispose', onDispose ) === false ) {
|
|
383
|
+
|
|
384
|
+
renderTarget.addEventListener( 'dispose', onDispose );
|
|
385
|
+
|
|
386
|
+
}
|
|
386
387
|
|
|
387
388
|
}
|
|
388
389
|
|
|
389
390
|
const cacheKey = renderContext.getCacheKey();
|
|
391
|
+
let descriptorBase = descriptors[ cacheKey ];
|
|
390
392
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
if ( descriptor === undefined ) {
|
|
393
|
+
if ( descriptorBase === undefined ) {
|
|
394
394
|
|
|
395
395
|
const textures = renderContext.textures;
|
|
396
|
-
const
|
|
396
|
+
const textureViews = [];
|
|
397
397
|
|
|
398
398
|
let sliceIndex;
|
|
399
399
|
|
|
@@ -441,34 +441,24 @@ class WebGPUBackend extends Backend {
|
|
|
441
441
|
|
|
442
442
|
}
|
|
443
443
|
|
|
444
|
-
|
|
444
|
+
textureViews.push( {
|
|
445
445
|
view,
|
|
446
|
-
depthSlice: sliceIndex,
|
|
447
446
|
resolveTarget,
|
|
448
|
-
|
|
449
|
-
storeOp: GPUStoreOp.Store,
|
|
450
|
-
...colorAttachmentsConfig
|
|
447
|
+
depthSlice: sliceIndex
|
|
451
448
|
} );
|
|
452
449
|
|
|
453
450
|
}
|
|
454
451
|
|
|
455
|
-
|
|
456
|
-
descriptor = {
|
|
457
|
-
colorAttachments,
|
|
458
|
-
};
|
|
452
|
+
descriptorBase = { textureViews };
|
|
459
453
|
|
|
460
454
|
if ( renderContext.depth ) {
|
|
461
455
|
|
|
462
456
|
const depthTextureData = this.get( renderContext.depthTexture );
|
|
463
|
-
|
|
464
|
-
const depthStencilAttachment = {
|
|
465
|
-
view: depthTextureData.texture.createView()
|
|
466
|
-
};
|
|
467
|
-
descriptor.depthStencilAttachment = depthStencilAttachment;
|
|
457
|
+
descriptorBase.depthStencilView = depthTextureData.texture.createView();
|
|
468
458
|
|
|
469
459
|
}
|
|
470
460
|
|
|
471
|
-
descriptors[ cacheKey ] =
|
|
461
|
+
descriptors[ cacheKey ] = descriptorBase;
|
|
472
462
|
|
|
473
463
|
renderTargetData.width = renderTarget.width;
|
|
474
464
|
renderTargetData.height = renderTarget.height;
|
|
@@ -476,8 +466,41 @@ class WebGPUBackend extends Backend {
|
|
|
476
466
|
renderTargetData.activeMipmapLevel = renderContext.activeMipmapLevel;
|
|
477
467
|
renderTargetData.activeCubeFace = renderContext.activeCubeFace;
|
|
478
468
|
renderTargetData.dimensions = renderTarget.dimensions;
|
|
479
|
-
|
|
480
|
-
|
|
469
|
+
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
const descriptor = {
|
|
473
|
+
colorAttachments: []
|
|
474
|
+
};
|
|
475
|
+
|
|
476
|
+
// Apply dynamic properties to cached views
|
|
477
|
+
for ( let i = 0; i < descriptorBase.textureViews.length; i ++ ) {
|
|
478
|
+
|
|
479
|
+
const viewInfo = descriptorBase.textureViews[ i ];
|
|
480
|
+
|
|
481
|
+
let clearValue = { r: 0, g: 0, b: 0, a: 1 };
|
|
482
|
+
if ( i === 0 && colorAttachmentsConfig.clearValue ) {
|
|
483
|
+
|
|
484
|
+
clearValue = colorAttachmentsConfig.clearValue;
|
|
485
|
+
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
descriptor.colorAttachments.push( {
|
|
489
|
+
view: viewInfo.view,
|
|
490
|
+
depthSlice: viewInfo.depthSlice,
|
|
491
|
+
resolveTarget: viewInfo.resolveTarget,
|
|
492
|
+
loadOp: colorAttachmentsConfig.loadOp || GPULoadOp.Load,
|
|
493
|
+
storeOp: colorAttachmentsConfig.storeOp || GPUStoreOp.Store,
|
|
494
|
+
clearValue: clearValue
|
|
495
|
+
} );
|
|
496
|
+
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
if ( descriptorBase.depthStencilView ) {
|
|
500
|
+
|
|
501
|
+
descriptor.depthStencilAttachment = {
|
|
502
|
+
view: descriptorBase.depthStencilView
|
|
503
|
+
};
|
|
481
504
|
|
|
482
505
|
}
|
|
483
506
|
|
|
@@ -748,7 +771,7 @@ class WebGPUBackend extends Backend {
|
|
|
748
771
|
*
|
|
749
772
|
* @param {RenderContext} renderContext - The render context.
|
|
750
773
|
* @param {Object3D} object - The 3D object to test.
|
|
751
|
-
* @return {
|
|
774
|
+
* @return {boolean} Whether the 3D object is fully occluded or not.
|
|
752
775
|
*/
|
|
753
776
|
isOccluded( renderContext, object ) {
|
|
754
777
|
|
|
@@ -818,13 +841,37 @@ class WebGPUBackend extends Backend {
|
|
|
818
841
|
|
|
819
842
|
}
|
|
820
843
|
|
|
844
|
+
/**
|
|
845
|
+
* Returns the clear color and alpha into a single
|
|
846
|
+
* color object.
|
|
847
|
+
*
|
|
848
|
+
* @return {Color4} The clear color.
|
|
849
|
+
*/
|
|
850
|
+
getClearColor() {
|
|
851
|
+
|
|
852
|
+
const clearColor = super.getClearColor();
|
|
853
|
+
|
|
854
|
+
// only premultiply alpha when alphaMode is "premultiplied"
|
|
855
|
+
|
|
856
|
+
if ( this.renderer.alpha === true ) {
|
|
857
|
+
|
|
858
|
+
clearColor.r *= clearColor.a;
|
|
859
|
+
clearColor.g *= clearColor.a;
|
|
860
|
+
clearColor.b *= clearColor.a;
|
|
861
|
+
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
return clearColor;
|
|
865
|
+
|
|
866
|
+
}
|
|
867
|
+
|
|
821
868
|
/**
|
|
822
869
|
* Performs a clear operation.
|
|
823
870
|
*
|
|
824
|
-
* @param {
|
|
825
|
-
* @param {
|
|
826
|
-
* @param {
|
|
827
|
-
* @param {RenderContext
|
|
871
|
+
* @param {boolean} color - Whether the color buffer should be cleared or not.
|
|
872
|
+
* @param {boolean} depth - Whether the depth buffer should be cleared or not.
|
|
873
|
+
* @param {boolean} stencil - Whether the stencil buffer should be cleared or not.
|
|
874
|
+
* @param {?RenderContext} [renderTargetContext=null] - The render context of the current set render target.
|
|
828
875
|
*/
|
|
829
876
|
clear( color, depth, stencil, renderTargetContext = null ) {
|
|
830
877
|
|
|
@@ -832,7 +879,6 @@ class WebGPUBackend extends Backend {
|
|
|
832
879
|
const renderer = this.renderer;
|
|
833
880
|
|
|
834
881
|
let colorAttachments = [];
|
|
835
|
-
|
|
836
882
|
let depthStencilAttachment;
|
|
837
883
|
let clearValue;
|
|
838
884
|
|
|
@@ -842,20 +888,7 @@ class WebGPUBackend extends Backend {
|
|
|
842
888
|
if ( color ) {
|
|
843
889
|
|
|
844
890
|
const clearColor = this.getClearColor();
|
|
845
|
-
|
|
846
|
-
if ( this.renderer.alpha === true ) {
|
|
847
|
-
|
|
848
|
-
// premultiply alpha
|
|
849
|
-
|
|
850
|
-
const a = clearColor.a;
|
|
851
|
-
|
|
852
|
-
clearValue = { r: clearColor.r * a, g: clearColor.g * a, b: clearColor.b * a, a: a };
|
|
853
|
-
|
|
854
|
-
} else {
|
|
855
|
-
|
|
856
|
-
clearValue = { r: clearColor.r, g: clearColor.g, b: clearColor.b, a: clearColor.a };
|
|
857
|
-
|
|
858
|
-
}
|
|
891
|
+
clearValue = { r: clearColor.r, g: clearColor.g, b: clearColor.b, a: clearColor.a };
|
|
859
892
|
|
|
860
893
|
}
|
|
861
894
|
|
|
@@ -889,29 +922,35 @@ class WebGPUBackend extends Backend {
|
|
|
889
922
|
supportsDepth = renderTargetContext.depth;
|
|
890
923
|
supportsStencil = renderTargetContext.stencil;
|
|
891
924
|
|
|
892
|
-
|
|
925
|
+
const clearConfig = {
|
|
926
|
+
loadOp: color ? GPULoadOp.Clear : GPULoadOp.Load,
|
|
927
|
+
clearValue: color ? clearValue : undefined
|
|
928
|
+
};
|
|
893
929
|
|
|
894
|
-
|
|
930
|
+
if ( supportsDepth ) {
|
|
895
931
|
|
|
896
|
-
|
|
932
|
+
clearConfig.depthLoadOp = depth ? GPULoadOp.Clear : GPULoadOp.Load;
|
|
933
|
+
clearConfig.depthClearValue = depth ? renderer.getClearDepth() : undefined;
|
|
934
|
+
clearConfig.depthStoreOp = GPUStoreOp.Store;
|
|
897
935
|
|
|
898
936
|
}
|
|
899
937
|
|
|
900
|
-
if (
|
|
938
|
+
if ( supportsStencil ) {
|
|
901
939
|
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
view: depthTextureData.texture.createView()
|
|
906
|
-
};
|
|
940
|
+
clearConfig.stencilLoadOp = stencil ? GPULoadOp.Clear : GPULoadOp.Load;
|
|
941
|
+
clearConfig.stencilClearValue = stencil ? renderer.getClearStencil() : undefined;
|
|
942
|
+
clearConfig.stencilStoreOp = GPUStoreOp.Store;
|
|
907
943
|
|
|
908
944
|
}
|
|
909
945
|
|
|
910
|
-
|
|
946
|
+
const descriptor = this._getRenderPassDescriptor( renderTargetContext, clearConfig );
|
|
911
947
|
|
|
912
|
-
|
|
948
|
+
colorAttachments = descriptor.colorAttachments;
|
|
949
|
+
depthStencilAttachment = descriptor.depthStencilAttachment;
|
|
950
|
+
|
|
951
|
+
}
|
|
913
952
|
|
|
914
|
-
if ( supportsDepth ) {
|
|
953
|
+
if ( supportsDepth && depthStencilAttachment && depthStencilAttachment.depthLoadOp === undefined ) {
|
|
915
954
|
|
|
916
955
|
if ( depth ) {
|
|
917
956
|
|
|
@@ -930,7 +969,7 @@ class WebGPUBackend extends Backend {
|
|
|
930
969
|
|
|
931
970
|
//
|
|
932
971
|
|
|
933
|
-
if ( supportsStencil ) {
|
|
972
|
+
if ( supportsStencil && depthStencilAttachment && depthStencilAttachment.stencilLoadOp === undefined ) {
|
|
934
973
|
|
|
935
974
|
if ( stencil ) {
|
|
936
975
|
|
|
@@ -1080,7 +1119,7 @@ class WebGPUBackend extends Backend {
|
|
|
1080
1119
|
*/
|
|
1081
1120
|
draw( renderObject, info ) {
|
|
1082
1121
|
|
|
1083
|
-
const { object, context, pipeline } = renderObject;
|
|
1122
|
+
const { object, material, context, pipeline } = renderObject;
|
|
1084
1123
|
const bindings = renderObject.getBindings();
|
|
1085
1124
|
const renderContextData = this.get( context );
|
|
1086
1125
|
const pipelineGPU = this.get( pipeline ).pipeline;
|
|
@@ -1189,6 +1228,15 @@ class WebGPUBackend extends Backend {
|
|
|
1189
1228
|
|
|
1190
1229
|
}
|
|
1191
1230
|
|
|
1231
|
+
// stencil
|
|
1232
|
+
|
|
1233
|
+
if ( context.stencil === true && material.stencilWrite === true && renderContextData.currentStencilRef !== material.stencilRef ) {
|
|
1234
|
+
|
|
1235
|
+
passEncoderGPU.setStencilReference( material.stencilRef );
|
|
1236
|
+
renderContextData.currentStencilRef = material.stencilRef;
|
|
1237
|
+
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1192
1240
|
// draw
|
|
1193
1241
|
|
|
1194
1242
|
const draw = () => {
|
|
@@ -1200,6 +1248,13 @@ class WebGPUBackend extends Backend {
|
|
|
1200
1248
|
const drawCount = object._multiDrawCount;
|
|
1201
1249
|
const drawInstances = object._multiDrawInstances;
|
|
1202
1250
|
|
|
1251
|
+
if ( drawInstances !== null ) {
|
|
1252
|
+
|
|
1253
|
+
// @deprecated, r174
|
|
1254
|
+
warnOnce( 'THREE.WebGPUBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
|
|
1255
|
+
|
|
1256
|
+
}
|
|
1257
|
+
|
|
1203
1258
|
for ( let i = 0; i < drawCount; i ++ ) {
|
|
1204
1259
|
|
|
1205
1260
|
const count = drawInstances ? drawInstances[ i ] : 1;
|
|
@@ -1215,6 +1270,8 @@ class WebGPUBackend extends Backend {
|
|
|
1215
1270
|
|
|
1216
1271
|
}
|
|
1217
1272
|
|
|
1273
|
+
info.update( object, counts[ i ], count );
|
|
1274
|
+
|
|
1218
1275
|
}
|
|
1219
1276
|
|
|
1220
1277
|
} else if ( hasIndex === true ) {
|
|
@@ -1329,7 +1386,7 @@ class WebGPUBackend extends Backend {
|
|
|
1329
1386
|
* Returns `true` if the render pipeline requires an update.
|
|
1330
1387
|
*
|
|
1331
1388
|
* @param {RenderObject} renderObject - The render object.
|
|
1332
|
-
* @return {
|
|
1389
|
+
* @return {boolean} Whether the render pipeline requires an update or not.
|
|
1333
1390
|
*/
|
|
1334
1391
|
needsRenderUpdate( renderObject ) {
|
|
1335
1392
|
|
|
@@ -1391,7 +1448,7 @@ class WebGPUBackend extends Backend {
|
|
|
1391
1448
|
* Returns a cache key that is used to identify render pipelines.
|
|
1392
1449
|
*
|
|
1393
1450
|
* @param {RenderObject} renderObject - The render object.
|
|
1394
|
-
* @return {
|
|
1451
|
+
* @return {string} The cache key.
|
|
1395
1452
|
*/
|
|
1396
1453
|
getRenderCacheKey( renderObject ) {
|
|
1397
1454
|
|
|
@@ -1506,11 +1563,11 @@ class WebGPUBackend extends Backend {
|
|
|
1506
1563
|
*
|
|
1507
1564
|
* @async
|
|
1508
1565
|
* @param {Texture} texture - The texture to copy.
|
|
1509
|
-
* @param {
|
|
1510
|
-
* @param {
|
|
1511
|
-
* @param {
|
|
1512
|
-
* @param {
|
|
1513
|
-
* @param {
|
|
1566
|
+
* @param {number} x - The x coordinate of the copy origin.
|
|
1567
|
+
* @param {number} y - The y coordinate of the copy origin.
|
|
1568
|
+
* @param {number} width - The width of the copy.
|
|
1569
|
+
* @param {number} height - The height of the copy.
|
|
1570
|
+
* @param {number} faceIndex - The face index.
|
|
1514
1571
|
* @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.
|
|
1515
1572
|
*/
|
|
1516
1573
|
async copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {
|
|
@@ -1681,8 +1738,8 @@ class WebGPUBackend extends Backend {
|
|
|
1681
1738
|
*
|
|
1682
1739
|
* @param {BindGroup} bindGroup - The bind group.
|
|
1683
1740
|
* @param {Array<BindGroup>} bindings - Array of bind groups.
|
|
1684
|
-
* @param {
|
|
1685
|
-
* @param {
|
|
1741
|
+
* @param {number} cacheIndex - The cache index.
|
|
1742
|
+
* @param {number} version - The version.
|
|
1686
1743
|
*/
|
|
1687
1744
|
createBindings( bindGroup, bindings, cacheIndex, version ) {
|
|
1688
1745
|
|
|
@@ -1695,8 +1752,8 @@ class WebGPUBackend extends Backend {
|
|
|
1695
1752
|
*
|
|
1696
1753
|
* @param {BindGroup} bindGroup - The bind group.
|
|
1697
1754
|
* @param {Array<BindGroup>} bindings - Array of bind groups.
|
|
1698
|
-
* @param {
|
|
1699
|
-
* @param {
|
|
1755
|
+
* @param {number} cacheIndex - The cache index.
|
|
1756
|
+
* @param {number} version - The version.
|
|
1700
1757
|
*/
|
|
1701
1758
|
updateBindings( bindGroup, bindings, cacheIndex, version ) {
|
|
1702
1759
|
|
|
@@ -1800,7 +1857,7 @@ class WebGPUBackend extends Backend {
|
|
|
1800
1857
|
/**
|
|
1801
1858
|
* Returns the maximum anisotropy texture filtering value.
|
|
1802
1859
|
*
|
|
1803
|
-
* @return {
|
|
1860
|
+
* @return {number} The maximum anisotropy texture filtering value.
|
|
1804
1861
|
*/
|
|
1805
1862
|
getMaxAnisotropy() {
|
|
1806
1863
|
|
|
@@ -1811,8 +1868,8 @@ class WebGPUBackend extends Backend {
|
|
|
1811
1868
|
/**
|
|
1812
1869
|
* Checks if the given feature is supported by the backend.
|
|
1813
1870
|
*
|
|
1814
|
-
* @param {
|
|
1815
|
-
* @return {
|
|
1871
|
+
* @param {string} name - The feature's name.
|
|
1872
|
+
* @return {boolean} Whether the feature is supported or not.
|
|
1816
1873
|
*/
|
|
1817
1874
|
hasFeature( name ) {
|
|
1818
1875
|
|
|
@@ -1825,38 +1882,56 @@ class WebGPUBackend extends Backend {
|
|
|
1825
1882
|
*
|
|
1826
1883
|
* @param {Texture} srcTexture - The source texture.
|
|
1827
1884
|
* @param {Texture} dstTexture - The destination texture.
|
|
1828
|
-
* @param {
|
|
1829
|
-
* @param {(Vector2|Vector3)
|
|
1830
|
-
* @param {
|
|
1885
|
+
* @param {?(Box3|Box2)} [srcRegion=null] - The region of the source texture to copy.
|
|
1886
|
+
* @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.
|
|
1887
|
+
* @param {number} [srcLevel=0] - The mipmap level to copy.
|
|
1888
|
+
* @param {number} [dstLevel=0] - The destination mip level to copy to.
|
|
1831
1889
|
*/
|
|
1832
|
-
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null,
|
|
1890
|
+
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {
|
|
1833
1891
|
|
|
1834
1892
|
let dstX = 0;
|
|
1835
1893
|
let dstY = 0;
|
|
1836
|
-
let
|
|
1894
|
+
let dstZ = 0;
|
|
1837
1895
|
|
|
1838
1896
|
let srcX = 0;
|
|
1839
1897
|
let srcY = 0;
|
|
1840
|
-
let
|
|
1898
|
+
let srcZ = 0;
|
|
1841
1899
|
|
|
1842
1900
|
let srcWidth = srcTexture.image.width;
|
|
1843
1901
|
let srcHeight = srcTexture.image.height;
|
|
1902
|
+
let srcDepth = 1;
|
|
1903
|
+
|
|
1844
1904
|
|
|
1845
1905
|
if ( srcRegion !== null ) {
|
|
1846
1906
|
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1907
|
+
if ( srcRegion.isBox3 === true ) {
|
|
1908
|
+
|
|
1909
|
+
srcX = srcRegion.min.x;
|
|
1910
|
+
srcY = srcRegion.min.y;
|
|
1911
|
+
srcZ = srcRegion.min.z;
|
|
1912
|
+
srcWidth = srcRegion.max.x - srcRegion.min.x;
|
|
1913
|
+
srcHeight = srcRegion.max.y - srcRegion.min.y;
|
|
1914
|
+
srcDepth = srcRegion.max.z - srcRegion.min.z;
|
|
1915
|
+
|
|
1916
|
+
} else {
|
|
1917
|
+
|
|
1918
|
+
// Assume it's a Box2
|
|
1919
|
+
srcX = srcRegion.min.x;
|
|
1920
|
+
srcY = srcRegion.min.y;
|
|
1921
|
+
srcWidth = srcRegion.max.x - srcRegion.min.x;
|
|
1922
|
+
srcHeight = srcRegion.max.y - srcRegion.min.y;
|
|
1923
|
+
srcDepth = 1;
|
|
1924
|
+
|
|
1925
|
+
}
|
|
1852
1926
|
|
|
1853
1927
|
}
|
|
1854
1928
|
|
|
1929
|
+
|
|
1855
1930
|
if ( dstPosition !== null ) {
|
|
1856
1931
|
|
|
1857
1932
|
dstX = dstPosition.x;
|
|
1858
1933
|
dstY = dstPosition.y;
|
|
1859
|
-
|
|
1934
|
+
dstZ = dstPosition.z || 0;
|
|
1860
1935
|
|
|
1861
1936
|
}
|
|
1862
1937
|
|
|
@@ -1868,23 +1943,29 @@ class WebGPUBackend extends Backend {
|
|
|
1868
1943
|
encoder.copyTextureToTexture(
|
|
1869
1944
|
{
|
|
1870
1945
|
texture: sourceGPU,
|
|
1871
|
-
mipLevel:
|
|
1872
|
-
origin: { x: srcX, y: srcY, z:
|
|
1946
|
+
mipLevel: srcLevel,
|
|
1947
|
+
origin: { x: srcX, y: srcY, z: srcZ }
|
|
1873
1948
|
},
|
|
1874
1949
|
{
|
|
1875
1950
|
texture: destinationGPU,
|
|
1876
|
-
mipLevel:
|
|
1877
|
-
origin: { x: dstX, y: dstY, z:
|
|
1951
|
+
mipLevel: dstLevel,
|
|
1952
|
+
origin: { x: dstX, y: dstY, z: dstZ }
|
|
1878
1953
|
},
|
|
1879
1954
|
[
|
|
1880
1955
|
srcWidth,
|
|
1881
1956
|
srcHeight,
|
|
1882
|
-
|
|
1957
|
+
srcDepth
|
|
1883
1958
|
]
|
|
1884
1959
|
);
|
|
1885
1960
|
|
|
1886
1961
|
this.device.queue.submit( [ encoder.finish() ] );
|
|
1887
1962
|
|
|
1963
|
+
if ( dstLevel === 0 && dstTexture.generateMipmaps ) {
|
|
1964
|
+
|
|
1965
|
+
this.textureUtils.generateMipmaps( dstTexture );
|
|
1966
|
+
|
|
1967
|
+
}
|
|
1968
|
+
|
|
1888
1969
|
}
|
|
1889
1970
|
|
|
1890
1971
|
/**
|
|
@@ -8,24 +8,14 @@ import BasicNodeLibrary from './nodes/BasicNodeLibrary.js';
|
|
|
8
8
|
* So classes like `MeshBasicMaterial` are not compatible.
|
|
9
9
|
*
|
|
10
10
|
* @private
|
|
11
|
-
* @augments
|
|
11
|
+
* @augments Renderer
|
|
12
12
|
*/
|
|
13
13
|
class WebGPURenderer extends Renderer {
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Constructs a new WebGPU renderer.
|
|
17
17
|
*
|
|
18
|
-
* @param {
|
|
19
|
-
* @param {Boolean} [parameters.logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
20
|
-
* @param {Boolean} [parameters.alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
21
|
-
* @param {Boolean} [parameters.depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
22
|
-
* @param {Boolean} [parameters.stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
23
|
-
* @param {Boolean} [parameters.antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
24
|
-
* @param {Number} [parameters.samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
|
|
25
|
-
* @param {Boolean} [parameters.forceWebGL=false] - If set to `true`, the renderer uses it WebGL 2 backend no matter if WebGPU is supported or not.
|
|
26
|
-
* @param {Number} [parameters.outputType=undefined] - Texture type for output to canvas. By default, device's preferred format is used; other formats may incur overhead.
|
|
27
|
-
* @param {Number} [parameters.colorBufferType=HalfFloatType] - Defines the type of color buffers. The default `HalfFloatType` is recommend for best
|
|
28
|
-
* quality. To save memory and bandwidth, `UnsignedByteType` might be used. This will reduce rendering quality though.
|
|
18
|
+
* @param {WebGPURenderer~Options} [parameters] - The configuration parameter.
|
|
29
19
|
*/
|
|
30
20
|
constructor( parameters = {} ) {
|
|
31
21
|
|
|
@@ -65,7 +55,7 @@ class WebGPURenderer extends Renderer {
|
|
|
65
55
|
/**
|
|
66
56
|
* This flag can be used for type testing.
|
|
67
57
|
*
|
|
68
|
-
* @type {
|
|
58
|
+
* @type {boolean}
|
|
69
59
|
* @readonly
|
|
70
60
|
* @default true
|
|
71
61
|
*/
|