@plastic-software/three 0.174.0 → 0.175.1
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 +10744 -1476
- package/build/three.core.js +9633 -1096
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +918 -189
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +4 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2658 -1697
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2654 -1709
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +93 -39
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +171 -48
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +71 -29
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +41 -3
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +35 -0
- package/examples/jsm/loaders/DDSLoader.js +24 -0
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +42 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +218 -5
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +86 -18
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +38 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +81 -61
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +79 -2
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +108 -72
- package/examples/jsm/misc/VolumeSlice.js +88 -45
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +70 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +131 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +266 -133
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +1 -1
- package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -1
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
- package/examples/jsm/tsl/math/Bayer.js +14 -1
- package/examples/jsm/tsl/utils/Raymarching.js +4 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +1 -1
- package/src/Three.TSL.js +3 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +168 -18
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/AudioAnalyser.js +1 -1
- package/src/audio/AudioListener.js +2 -2
- package/src/audio/PositionalAudio.js +5 -5
- package/src/constants.js +1432 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +23 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +166 -7
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +16 -1
- package/src/extras/Earcut.js +3 -781
- package/src/extras/ImageUtils.js +3 -2
- package/src/extras/PMREMGenerator.js +22 -17
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +1 -1
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/ConeGeometry.js +2 -2
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/geometries/ExtrudeGeometry.js +71 -39
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/lights/LightShadow.js +1 -1
- package/src/lights/webgpu/IESSpotLight.js +1 -1
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +4 -6
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +58 -1
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +6 -2
- package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
- package/src/loaders/nodes/NodeObjectLoader.js +3 -3
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +1 -1
- package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +7 -3
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
- package/src/math/Color.js +1 -1
- package/src/math/MathUtils.js +223 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/accessors/BatchNode.js +8 -8
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +1 -1
- package/src/nodes/accessors/InstanceNode.js +5 -5
- package/src/nodes/accessors/InstancedMeshNode.js +1 -1
- package/src/nodes/accessors/MorphNode.js +27 -23
- package/src/nodes/accessors/Normal.js +1 -1
- package/src/nodes/accessors/Object3DNode.js +12 -12
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +46 -37
- package/src/nodes/accessors/StorageBufferNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +25 -5
- package/src/nodes/accessors/TextureSizeNode.js +1 -1
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/CodeNode.js +4 -4
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +23 -3
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/code/ScriptableValueNode.js +2 -2
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/CacheNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/Node.js +14 -2
- package/src/nodes/core/NodeBuilder.js +86 -14
- package/src/nodes/core/StackNode.js +5 -5
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/VarNode.js +2 -8
- package/src/nodes/core/VaryingNode.js +3 -3
- package/src/nodes/display/BlendModes.js +4 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PosterizeNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +3 -3
- package/src/nodes/display/ViewportDepthNode.js +2 -2
- package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
- package/src/nodes/display/ViewportTextureNode.js +4 -4
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +30 -2
- package/src/nodes/lighting/AnalyticLightNode.js +9 -1
- package/src/nodes/lighting/LightsNode.js +3 -3
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +20 -3
- package/src/nodes/math/MathNode.js +83 -78
- package/src/nodes/math/OperatorNode.js +171 -82
- package/src/nodes/pmrem/PMREMNode.js +4 -4
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +115 -12
- package/src/nodes/utils/ArrayElementNode.js +3 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/EquirectUVNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +27 -2
- package/src/nodes/utils/LoopNode.js +58 -28
- package/src/nodes/utils/MaxMipLevelNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -2
- package/src/nodes/utils/RemapNode.js +6 -6
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/src/objects/BatchedMesh.js +4 -4
- package/src/objects/InstancedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Skeleton.js +1 -1
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +617 -79
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Attributes.js +2 -2
- package/src/renderers/common/Backend.js +12 -3
- package/src/renderers/common/Background.js +1 -0
- package/src/renderers/common/Color4.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/PostProcessing.js +2 -0
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderObject.js +1 -1
- package/src/renderers/common/RenderObjects.js +2 -2
- package/src/renderers/common/Renderer.js +52 -31
- package/src/renderers/common/XRManager.js +333 -10
- package/src/renderers/common/extras/PMREMGenerator.js +6 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +10 -1
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
- package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
- package/src/renderers/shaders/ShaderChunk.js +2 -0
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +6 -5
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLProgram.js +25 -5
- package/src/renderers/webgl/WebGLPrograms.js +21 -7
- package/src/renderers/webgl/WebGLState.js +9 -9
- package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +128 -87
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
- package/src/renderers/webgpu/WebGPURenderer.js +17 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +173 -1
- package/src/scenes/Scene.js +2 -1
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +5 -5
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BackSide, DoubleSide, CubeUVReflectionMapping, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping, NormalBlending, LinearSRGBColorSpace, SRGBTransfer } from '../../constants.js';
|
|
1
|
+
import { BackSide, DoubleSide, CubeUVReflectionMapping, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping, NormalBlending, LinearSRGBColorSpace, SRGBTransfer, UVMapping } from '../../constants.js';
|
|
2
2
|
import { Layers } from '../../core/Layers.js';
|
|
3
3
|
import { WebGLProgram } from './WebGLProgram.js';
|
|
4
4
|
import { WebGLShaderCache } from './WebGLShaderCache.js';
|
|
@@ -259,21 +259,27 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
259
259
|
|
|
260
260
|
//
|
|
261
261
|
|
|
262
|
-
mapUv: HAS_MAP && getChannel( material.map.channel ),
|
|
263
|
-
|
|
262
|
+
mapUv: HAS_MAP && material.map.mapping === UVMapping && getChannel( material.map.channel ),
|
|
263
|
+
mapMode: HAS_MAP && material.map.mapping,
|
|
264
|
+
aoMapUv: HAS_AOMAP && material.aoMap.mapping === UVMapping && getChannel( material.aoMap.channel ),
|
|
265
|
+
aoMapMode: HAS_AOMAP && material.aoMap.mapping,
|
|
264
266
|
lightMapUv: HAS_LIGHTMAP && getChannel( material.lightMap.channel ),
|
|
265
267
|
bumpMapUv: HAS_BUMPMAP && getChannel( material.bumpMap.channel ),
|
|
266
|
-
normalMapUv: HAS_NORMALMAP && getChannel( material.normalMap.channel ),
|
|
268
|
+
normalMapUv: HAS_NORMALMAP && material.normalMap.mapping === UVMapping && getChannel( material.normalMap.channel ),
|
|
269
|
+
normalMapMode: HAS_NORMALMAP && material.normalMap.mapping,
|
|
267
270
|
displacementMapUv: HAS_DISPLACEMENTMAP && getChannel( material.displacementMap.channel ),
|
|
268
271
|
emissiveMapUv: HAS_EMISSIVEMAP && getChannel( material.emissiveMap.channel ),
|
|
269
272
|
|
|
270
|
-
metalnessMapUv: HAS_METALNESSMAP && getChannel( material.metalnessMap.channel ),
|
|
271
|
-
|
|
273
|
+
metalnessMapUv: HAS_METALNESSMAP && material.metalnessMap.mapping === UVMapping && getChannel( material.metalnessMap.channel ),
|
|
274
|
+
metalnessMapMode: HAS_METALNESSMAP && material.metalnessMap.mapping,
|
|
275
|
+
roughnessMapUv: HAS_ROUGHNESSMAP && material.roughnessMap.mapping === UVMapping && getChannel( material.roughnessMap.channel ),
|
|
276
|
+
roughnessMapMode: HAS_ROUGHNESSMAP && material.roughnessMap.mapping,
|
|
272
277
|
|
|
273
278
|
anisotropyMapUv: HAS_ANISOTROPYMAP && getChannel( material.anisotropyMap.channel ),
|
|
274
279
|
|
|
275
280
|
clearcoatMapUv: HAS_CLEARCOATMAP && getChannel( material.clearcoatMap.channel ),
|
|
276
281
|
clearcoatNormalMapUv: HAS_CLEARCOAT_NORMALMAP && getChannel( material.clearcoatNormalMap.channel ),
|
|
282
|
+
clearcoatNormalMapMode: HAS_CLEARCOAT_NORMALMAP && material.clearcoatNormalMap.mapping,
|
|
277
283
|
clearcoatRoughnessMapUv: HAS_CLEARCOAT_ROUGHNESSMAP && getChannel( material.clearcoatRoughnessMap.channel ),
|
|
278
284
|
|
|
279
285
|
iridescenceMapUv: HAS_IRIDESCENCEMAP && getChannel( material.iridescenceMap.channel ),
|
|
@@ -289,7 +295,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
289
295
|
transmissionMapUv: HAS_TRANSMISSIONMAP && getChannel( material.transmissionMap.channel ),
|
|
290
296
|
thicknessMapUv: HAS_THICKNESSMAP && getChannel( material.thicknessMap.channel ),
|
|
291
297
|
|
|
292
|
-
alphaMapUv: HAS_ALPHAMAP && getChannel( material.alphaMap.channel ),
|
|
298
|
+
alphaMapUv: HAS_ALPHAMAP && material.alphaMap.mapping === UVMapping && getChannel( material.alphaMap.channel ),
|
|
299
|
+
alphaMapMode: HAS_ALPHAMAP && material.alphaMap.mapping,
|
|
293
300
|
|
|
294
301
|
//
|
|
295
302
|
|
|
@@ -421,19 +428,26 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
421
428
|
array.push( parameters.outputColorSpace );
|
|
422
429
|
array.push( parameters.envMapMode );
|
|
423
430
|
array.push( parameters.envMapCubeUVHeight );
|
|
431
|
+
array.push( parameters.mapMode );
|
|
424
432
|
array.push( parameters.mapUv );
|
|
433
|
+
array.push( parameters.alphaMapMode );
|
|
425
434
|
array.push( parameters.alphaMapUv );
|
|
426
435
|
array.push( parameters.lightMapUv );
|
|
427
436
|
array.push( parameters.aoMapUv );
|
|
437
|
+
array.push( parameters.aoMapMode );
|
|
428
438
|
array.push( parameters.bumpMapUv );
|
|
429
439
|
array.push( parameters.normalMapUv );
|
|
440
|
+
array.push( parameters.normalMapMode );
|
|
430
441
|
array.push( parameters.displacementMapUv );
|
|
431
442
|
array.push( parameters.emissiveMapUv );
|
|
432
443
|
array.push( parameters.metalnessMapUv );
|
|
444
|
+
array.push( parameters.metalnessMapMode );
|
|
433
445
|
array.push( parameters.roughnessMapUv );
|
|
446
|
+
array.push( parameters.roughnessMapMode );
|
|
434
447
|
array.push( parameters.anisotropyMapUv );
|
|
435
448
|
array.push( parameters.clearcoatMapUv );
|
|
436
449
|
array.push( parameters.clearcoatNormalMapUv );
|
|
450
|
+
array.push( parameters.clearcoatNormalMapMode);
|
|
437
451
|
array.push( parameters.clearcoatRoughnessMapUv );
|
|
438
452
|
array.push( parameters.iridescenceMapUv );
|
|
439
453
|
array.push( parameters.iridescenceThicknessMapUv );
|
|
@@ -78,17 +78,17 @@ function WebGLState( gl, extensions ) {
|
|
|
78
78
|
function DepthBuffer() {
|
|
79
79
|
|
|
80
80
|
let locked = false;
|
|
81
|
-
let reversed = false;
|
|
82
81
|
|
|
82
|
+
let currentReversed = false;
|
|
83
83
|
let currentDepthMask = null;
|
|
84
84
|
let currentDepthFunc = null;
|
|
85
85
|
let currentDepthClear = null;
|
|
86
86
|
|
|
87
87
|
return {
|
|
88
88
|
|
|
89
|
-
setReversed: function (
|
|
89
|
+
setReversed: function ( reversed ) {
|
|
90
90
|
|
|
91
|
-
if (
|
|
91
|
+
if ( currentReversed !== reversed ) {
|
|
92
92
|
|
|
93
93
|
const ext = extensions.get( 'EXT_clip_control' );
|
|
94
94
|
|
|
@@ -102,19 +102,19 @@ function WebGLState( gl, extensions ) {
|
|
|
102
102
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
+
currentReversed = reversed;
|
|
106
|
+
|
|
105
107
|
const oldDepth = currentDepthClear;
|
|
106
108
|
currentDepthClear = null;
|
|
107
109
|
this.setClear( oldDepth );
|
|
108
110
|
|
|
109
111
|
}
|
|
110
112
|
|
|
111
|
-
reversed = value;
|
|
112
|
-
|
|
113
113
|
},
|
|
114
114
|
|
|
115
115
|
getReversed: function () {
|
|
116
116
|
|
|
117
|
-
return
|
|
117
|
+
return currentReversed;
|
|
118
118
|
|
|
119
119
|
},
|
|
120
120
|
|
|
@@ -145,7 +145,7 @@ function WebGLState( gl, extensions ) {
|
|
|
145
145
|
|
|
146
146
|
setFunc: function ( depthFunc ) {
|
|
147
147
|
|
|
148
|
-
if (
|
|
148
|
+
if ( currentReversed ) depthFunc = reversedFuncs[ depthFunc ];
|
|
149
149
|
|
|
150
150
|
if ( currentDepthFunc !== depthFunc ) {
|
|
151
151
|
|
|
@@ -213,7 +213,7 @@ function WebGLState( gl, extensions ) {
|
|
|
213
213
|
|
|
214
214
|
if ( currentDepthClear !== depth ) {
|
|
215
215
|
|
|
216
|
-
if (
|
|
216
|
+
if ( currentReversed ) {
|
|
217
217
|
|
|
218
218
|
depth = 1 - depth;
|
|
219
219
|
|
|
@@ -233,7 +233,7 @@ function WebGLState( gl, extensions ) {
|
|
|
233
233
|
currentDepthMask = null;
|
|
234
234
|
currentDepthFunc = null;
|
|
235
235
|
currentDepthClear = null;
|
|
236
|
-
|
|
236
|
+
currentReversed = false;
|
|
237
237
|
|
|
238
238
|
}
|
|
239
239
|
|
|
@@ -23,18 +23,24 @@ import WebGLTimestampQueryPool from './utils/WebGLTimestampQueryPool.js';
|
|
|
23
23
|
*/
|
|
24
24
|
class WebGLBackend extends Backend {
|
|
25
25
|
|
|
26
|
+
/**
|
|
27
|
+
* WebGLBackend options.
|
|
28
|
+
*
|
|
29
|
+
* @typedef {Object} WebGLBackend~Options
|
|
30
|
+
* @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
31
|
+
* @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
32
|
+
* @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
33
|
+
* @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
34
|
+
* @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
35
|
+
* @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.
|
|
36
|
+
* @property {boolean} [forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
|
|
37
|
+
* @property {WebGL2RenderingContext} [context=undefined] - A WebGL 2 rendering context.
|
|
38
|
+
*/
|
|
39
|
+
|
|
26
40
|
/**
|
|
27
41
|
* Constructs a new WebGPU backend.
|
|
28
42
|
*
|
|
29
|
-
* @param {
|
|
30
|
-
* @param {boolean} [parameters.logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
31
|
-
* @param {boolean} [parameters.alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
32
|
-
* @param {boolean} [parameters.depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
33
|
-
* @param {boolean} [parameters.stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
34
|
-
* @param {boolean} [parameters.antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
35
|
-
* @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.
|
|
36
|
-
* @param {boolean} [parameters.forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
|
|
37
|
-
* @param {WebGL2RenderingContext} [parameters.context=undefined] - A WebGL 2 rendering context.
|
|
43
|
+
* @param {WebGLBackend~Options} [parameters] - The configuration parameter.
|
|
38
44
|
*/
|
|
39
45
|
constructor( parameters = {} ) {
|
|
40
46
|
|
|
@@ -161,14 +167,6 @@ class WebGLBackend extends Backend {
|
|
|
161
167
|
*/
|
|
162
168
|
this.parallel = null;
|
|
163
169
|
|
|
164
|
-
/**
|
|
165
|
-
* Whether to track timestamps with a Timestamp Query API or not.
|
|
166
|
-
*
|
|
167
|
-
* @type {boolean}
|
|
168
|
-
* @default false
|
|
169
|
-
*/
|
|
170
|
-
this.trackTimestamp = ( parameters.trackTimestamp === true );
|
|
171
|
-
|
|
172
170
|
/**
|
|
173
171
|
* A reference to the current render context.
|
|
174
172
|
*
|
|
@@ -360,16 +358,16 @@ class WebGLBackend extends Backend {
|
|
|
360
358
|
|
|
361
359
|
this.set( renderTarget.depthTexture, { textureGPU: depthTexture, glInternalFormat: glInternalFormat } );
|
|
362
360
|
|
|
363
|
-
renderTarget.autoAllocateDepthBuffer = false;
|
|
364
|
-
|
|
365
361
|
// The multisample_render_to_texture extension doesn't work properly if there
|
|
366
362
|
// are midframe flushes and an external depth texture.
|
|
367
|
-
if ( this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) {
|
|
363
|
+
if ( ( this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) && renderTarget.autoAllocateDepthBuffer ) {
|
|
368
364
|
|
|
369
365
|
console.warn( 'THREE.WebGLBackend: Render-to-texture extension was disabled because an external texture was provided' );
|
|
370
366
|
|
|
371
367
|
}
|
|
372
368
|
|
|
369
|
+
renderTarget.autoAllocateDepthBuffer = false;
|
|
370
|
+
|
|
373
371
|
}
|
|
374
372
|
|
|
375
373
|
}
|
|
@@ -1886,13 +1884,14 @@ class WebGLBackend extends Backend {
|
|
|
1886
1884
|
*
|
|
1887
1885
|
* @param {Texture} srcTexture - The source texture.
|
|
1888
1886
|
* @param {Texture} dstTexture - The destination texture.
|
|
1889
|
-
* @param {?
|
|
1887
|
+
* @param {?(Box3|Box2)} [srcRegion=null] - The region of the source texture to copy.
|
|
1890
1888
|
* @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.
|
|
1891
|
-
* @param {number} [
|
|
1889
|
+
* @param {number} [srcLevel=0] - The source mip level to copy from.
|
|
1890
|
+
* @param {number} [dstLevel=0] - The destination mip level to copy to.
|
|
1892
1891
|
*/
|
|
1893
|
-
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null,
|
|
1892
|
+
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {
|
|
1894
1893
|
|
|
1895
|
-
this.textureUtils.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition,
|
|
1894
|
+
this.textureUtils.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, srcLevel, dstLevel );
|
|
1896
1895
|
|
|
1897
1896
|
}
|
|
1898
1897
|
|
|
@@ -1999,7 +1998,7 @@ class WebGLBackend extends Backend {
|
|
|
1999
1998
|
|
|
2000
1999
|
} else {
|
|
2001
2000
|
|
|
2002
|
-
if ( useMultisampledRTT ) {
|
|
2001
|
+
if ( hasExternalTextures && useMultisampledRTT ) {
|
|
2003
2002
|
|
|
2004
2003
|
multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
|
|
2005
2004
|
|
|
@@ -2032,7 +2031,7 @@ class WebGLBackend extends Backend {
|
|
|
2032
2031
|
textureData.renderTarget = descriptor.renderTarget;
|
|
2033
2032
|
textureData.cacheKey = cacheKey; // required for copyTextureToTexture()
|
|
2034
2033
|
|
|
2035
|
-
if ( useMultisampledRTT ) {
|
|
2034
|
+
if ( hasExternalTextures && useMultisampledRTT ) {
|
|
2036
2035
|
|
|
2037
2036
|
multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
|
|
2038
2037
|
|
|
@@ -79,7 +79,7 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
79
79
|
* An array that holds objects defining the varying and attribute data in
|
|
80
80
|
* context of Transform Feedback.
|
|
81
81
|
*
|
|
82
|
-
* @type {Object<string,
|
|
82
|
+
* @type {Array<Object<string,AttributeNode|string>>}
|
|
83
83
|
*/
|
|
84
84
|
this.transforms = [];
|
|
85
85
|
|
|
@@ -97,14 +97,6 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
97
97
|
*/
|
|
98
98
|
this.builtins = { vertex: [], fragment: [], compute: [] };
|
|
99
99
|
|
|
100
|
-
/**
|
|
101
|
-
* Whether comparison in shader code are generated with methods or not.
|
|
102
|
-
*
|
|
103
|
-
* @type {boolean}
|
|
104
|
-
* @default true
|
|
105
|
-
*/
|
|
106
|
-
this.useComparisonMethod = true;
|
|
107
|
-
|
|
108
100
|
}
|
|
109
101
|
|
|
110
102
|
/**
|
|
@@ -775,7 +767,7 @@ ${ flowData.code }
|
|
|
775
767
|
|
|
776
768
|
const flat = type.includes( 'int' ) || type.includes( 'uv' ) || type.includes( 'iv' ) ? 'flat ' : '';
|
|
777
769
|
|
|
778
|
-
snippet += `${flat}
|
|
770
|
+
snippet += `${flat}out ${type} ${varying.name};\n`;
|
|
779
771
|
|
|
780
772
|
} else {
|
|
781
773
|
|
|
@@ -1073,10 +1065,9 @@ ${ flowData.code }
|
|
|
1073
1065
|
for ( let i = 0; i < transforms.length; i ++ ) {
|
|
1074
1066
|
|
|
1075
1067
|
const transform = transforms[ i ];
|
|
1076
|
-
|
|
1077
1068
|
const attributeName = this.getPropertyName( transform.attributeNode );
|
|
1078
1069
|
|
|
1079
|
-
snippet += `${ transform.varyingName } = ${ attributeName };\n\t`;
|
|
1070
|
+
if ( attributeName ) snippet += `${ transform.varyingName } = ${ attributeName };\n\t`;
|
|
1080
1071
|
|
|
1081
1072
|
}
|
|
1082
1073
|
|
|
@@ -697,33 +697,57 @@ class WebGLTextureUtils {
|
|
|
697
697
|
*
|
|
698
698
|
* @param {Texture} srcTexture - The source texture.
|
|
699
699
|
* @param {Texture} dstTexture - The destination texture.
|
|
700
|
-
* @param {?
|
|
700
|
+
* @param {?(Box3|Box2)} [srcRegion=null] - The region of the source texture to copy.
|
|
701
701
|
* @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.
|
|
702
|
-
* @param {number} [
|
|
702
|
+
* @param {number} [srcLevel=0] - The source mip level to copy from.
|
|
703
|
+
* @param {number} [dstLevel=0] - The destination mip level to copy to.
|
|
703
704
|
*/
|
|
704
|
-
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null,
|
|
705
|
+
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {
|
|
705
706
|
|
|
706
707
|
const { gl, backend } = this;
|
|
707
708
|
const { state } = this.backend;
|
|
708
709
|
|
|
709
710
|
const { textureGPU: dstTextureGPU, glTextureType, glType, glFormat } = backend.get( dstTexture );
|
|
710
711
|
|
|
711
|
-
|
|
712
|
-
|
|
712
|
+
state.bindTexture( glTextureType, dstTextureGPU );
|
|
713
|
+
|
|
714
|
+
// gather the necessary dimensions to copy
|
|
715
|
+
let width, height, depth, minX, minY, minZ;
|
|
716
|
+
let dstX, dstY, dstZ;
|
|
717
|
+
const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ dstLevel ] : srcTexture.image;
|
|
713
718
|
|
|
714
719
|
if ( srcRegion !== null ) {
|
|
715
720
|
|
|
716
721
|
width = srcRegion.max.x - srcRegion.min.x;
|
|
717
722
|
height = srcRegion.max.y - srcRegion.min.y;
|
|
723
|
+
depth = srcRegion.isBox3 ? srcRegion.max.z - srcRegion.min.z : 1;
|
|
718
724
|
minX = srcRegion.min.x;
|
|
719
725
|
minY = srcRegion.min.y;
|
|
726
|
+
minZ = srcRegion.isBox3 ? srcRegion.min.z : 0;
|
|
720
727
|
|
|
721
728
|
} else {
|
|
722
729
|
|
|
723
|
-
|
|
724
|
-
|
|
730
|
+
const levelScale = Math.pow( 2, - srcLevel );
|
|
731
|
+
width = Math.floor( image.width * levelScale );
|
|
732
|
+
height = Math.floor( image.height * levelScale );
|
|
733
|
+
|
|
734
|
+
if ( srcTexture.isDataArrayTexture ) {
|
|
735
|
+
|
|
736
|
+
depth = image.depth;
|
|
737
|
+
|
|
738
|
+
} else if ( srcTexture.isData3DTexture ) {
|
|
739
|
+
|
|
740
|
+
depth = Math.floor( image.depth * levelScale );
|
|
741
|
+
|
|
742
|
+
} else {
|
|
743
|
+
|
|
744
|
+
depth = 1;
|
|
745
|
+
|
|
746
|
+
}
|
|
747
|
+
|
|
725
748
|
minX = 0;
|
|
726
749
|
minY = 0;
|
|
750
|
+
minZ = 0;
|
|
727
751
|
|
|
728
752
|
}
|
|
729
753
|
|
|
@@ -731,36 +755,36 @@ class WebGLTextureUtils {
|
|
|
731
755
|
|
|
732
756
|
dstX = dstPosition.x;
|
|
733
757
|
dstY = dstPosition.y;
|
|
758
|
+
dstZ = dstPosition.z;
|
|
734
759
|
|
|
735
760
|
} else {
|
|
736
761
|
|
|
737
762
|
dstX = 0;
|
|
738
763
|
dstY = 0;
|
|
764
|
+
dstZ = 0;
|
|
739
765
|
|
|
740
766
|
}
|
|
741
767
|
|
|
742
|
-
state.bindTexture( glTextureType, dstTextureGPU );
|
|
743
768
|
|
|
744
|
-
// As another texture upload may have changed pixelStorei
|
|
745
|
-
// parameters, make sure they are correct for the dstTexture
|
|
746
|
-
gl.pixelStorei( gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
|
|
747
769
|
gl.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
|
|
748
770
|
gl.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
|
|
749
771
|
gl.pixelStorei( gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
|
|
750
772
|
|
|
773
|
+
// used for copying data from cpu
|
|
751
774
|
const currentUnpackRowLen = gl.getParameter( gl.UNPACK_ROW_LENGTH );
|
|
752
775
|
const currentUnpackImageHeight = gl.getParameter( gl.UNPACK_IMAGE_HEIGHT );
|
|
753
776
|
const currentUnpackSkipPixels = gl.getParameter( gl.UNPACK_SKIP_PIXELS );
|
|
754
777
|
const currentUnpackSkipRows = gl.getParameter( gl.UNPACK_SKIP_ROWS );
|
|
755
778
|
const currentUnpackSkipImages = gl.getParameter( gl.UNPACK_SKIP_IMAGES );
|
|
756
779
|
|
|
757
|
-
const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;
|
|
758
|
-
|
|
759
780
|
gl.pixelStorei( gl.UNPACK_ROW_LENGTH, image.width );
|
|
760
781
|
gl.pixelStorei( gl.UNPACK_IMAGE_HEIGHT, image.height );
|
|
761
782
|
gl.pixelStorei( gl.UNPACK_SKIP_PIXELS, minX );
|
|
762
783
|
gl.pixelStorei( gl.UNPACK_SKIP_ROWS, minY );
|
|
784
|
+
gl.pixelStorei( gl.UNPACK_SKIP_IMAGES, minZ );
|
|
763
785
|
|
|
786
|
+
// set up the src texture
|
|
787
|
+
const isDst3D = dstTexture.isDataArrayTexture || dstTexture.isData3DTexture;
|
|
764
788
|
if ( srcTexture.isRenderTargetTexture || srcTexture.isDepthTexture ) {
|
|
765
789
|
|
|
766
790
|
const srcTextureData = backend.get( srcTexture );
|
|
@@ -786,19 +810,37 @@ class WebGLTextureUtils {
|
|
|
786
810
|
|
|
787
811
|
} else {
|
|
788
812
|
|
|
789
|
-
if (
|
|
813
|
+
if ( isDst3D ) {
|
|
790
814
|
|
|
791
|
-
|
|
815
|
+
// copy data into the 3d texture
|
|
816
|
+
if ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {
|
|
817
|
+
|
|
818
|
+
gl.texSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image.data );
|
|
819
|
+
|
|
820
|
+
} else if ( dstTexture.isCompressedArrayTexture ) {
|
|
821
|
+
|
|
822
|
+
gl.compressedTexSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, image.data );
|
|
823
|
+
|
|
824
|
+
} else {
|
|
825
|
+
|
|
826
|
+
gl.texSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image );
|
|
827
|
+
|
|
828
|
+
}
|
|
792
829
|
|
|
793
830
|
} else {
|
|
794
831
|
|
|
795
|
-
|
|
832
|
+
// copy data into the 2d texture
|
|
833
|
+
if ( srcTexture.isDataTexture ) {
|
|
834
|
+
|
|
835
|
+
gl.texSubImage2D( glTextureType, dstLevel, dstX, dstY, width, height, glFormat, glType, image.data );
|
|
796
836
|
|
|
797
|
-
|
|
837
|
+
} else if ( srcTexture.isCompressedTexture ) {
|
|
838
|
+
|
|
839
|
+
gl.compressedTexSubImage2D( glTextureType, dstLevel, dstX, dstY, image.width, image.height, glFormat, image.data );
|
|
798
840
|
|
|
799
841
|
} else {
|
|
800
842
|
|
|
801
|
-
gl.texSubImage2D(
|
|
843
|
+
gl.texSubImage2D( glTextureType, dstLevel, dstX, dstY, width, height, glFormat, glType, image );
|
|
802
844
|
|
|
803
845
|
}
|
|
804
846
|
|
|
@@ -806,6 +848,7 @@ class WebGLTextureUtils {
|
|
|
806
848
|
|
|
807
849
|
}
|
|
808
850
|
|
|
851
|
+
// reset values
|
|
809
852
|
gl.pixelStorei( gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );
|
|
810
853
|
gl.pixelStorei( gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );
|
|
811
854
|
gl.pixelStorei( gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );
|
|
@@ -813,12 +856,17 @@ class WebGLTextureUtils {
|
|
|
813
856
|
gl.pixelStorei( gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );
|
|
814
857
|
|
|
815
858
|
// Generate mipmaps only when copying level 0
|
|
816
|
-
if (
|
|
859
|
+
if ( dstLevel === 0 && dstTexture.generateMipmaps ) {
|
|
860
|
+
|
|
861
|
+
gl.generateMipmap( glTextureType );
|
|
862
|
+
|
|
863
|
+
}
|
|
817
864
|
|
|
818
865
|
state.unbindTexture();
|
|
819
866
|
|
|
820
867
|
}
|
|
821
868
|
|
|
869
|
+
|
|
822
870
|
/**
|
|
823
871
|
* Copies the current bound framebuffer to the given texture.
|
|
824
872
|
*
|
|
@@ -45,7 +45,7 @@ class WebGLUtils {
|
|
|
45
45
|
*
|
|
46
46
|
* @param {number} p - The three.js constant.
|
|
47
47
|
* @param {string} [colorSpace=NoColorSpace] - The color space.
|
|
48
|
-
* @return {number} The corresponding WebGL constant.
|
|
48
|
+
* @return {?number} The corresponding WebGL constant.
|
|
49
49
|
*/
|
|
50
50
|
convert( p, colorSpace = NoColorSpace ) {
|
|
51
51
|
|