super-three 0.176.0 → 0.179.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/README.md +4 -4
- package/build/three.cjs +8377 -6761
- package/build/three.core.js +8001 -6682
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +378 -82
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +84 -27
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6829 -2835
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6646 -2835
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -3
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -27
- package/examples/jsm/capabilities/WebGPU.js +2 -1
- package/examples/jsm/controls/ArcballControls.js +15 -4
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +62 -14
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +22 -8
- package/examples/jsm/curves/CurveExtras.js +14 -0
- package/examples/jsm/curves/NURBSCurve.js +1 -0
- package/examples/jsm/curves/NURBSSurface.js +2 -0
- package/examples/jsm/curves/NURBSUtils.js +4 -1
- package/examples/jsm/curves/NURBSVolume.js +2 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -0
- package/examples/jsm/effects/AsciiEffect.js +2 -0
- package/examples/jsm/effects/OutlineEffect.js +2 -0
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
- package/examples/jsm/effects/StereoEffect.js +2 -0
- package/examples/jsm/environments/DebugEnvironment.js +1 -0
- package/examples/jsm/environments/RoomEnvironment.js +57 -38
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -0
- package/examples/jsm/exporters/GLTFExporter.js +7 -4
- package/examples/jsm/exporters/KTX2Exporter.js +2 -0
- package/examples/jsm/exporters/OBJExporter.js +3 -1
- package/examples/jsm/exporters/PLYExporter.js +4 -2
- package/examples/jsm/exporters/STLExporter.js +2 -0
- package/examples/jsm/exporters/USDZExporter.js +679 -300
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -0
- package/examples/jsm/geometries/ParametricFunctions.js +4 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -0
- package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
- package/examples/jsm/geometries/TeapotGeometry.js +1 -0
- package/examples/jsm/geometries/TextGeometry.js +1 -0
- package/examples/jsm/helpers/LightProbeHelper.js +1 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
- package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +1 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -2
- package/examples/jsm/interactive/InteractiveGroup.js +1 -0
- package/examples/jsm/interactive/SelectionBox.js +2 -0
- package/examples/jsm/interactive/SelectionHelper.js +2 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +15 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
- package/examples/jsm/lines/Line2.js +1 -0
- package/examples/jsm/lines/LineGeometry.js +1 -0
- package/examples/jsm/lines/LineMaterial.js +4 -4
- package/examples/jsm/lines/LineSegments2.js +1 -0
- package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
- package/examples/jsm/lines/Wireframe.js +1 -0
- package/examples/jsm/lines/WireframeGeometry2.js +1 -0
- package/examples/jsm/lines/webgpu/Line2.js +1 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +1 -0
- package/examples/jsm/loaders/AMFLoader.js +1 -0
- package/examples/jsm/loaders/BVHLoader.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +6 -5
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +211 -22
- package/examples/jsm/loaders/FBXLoader.js +25 -23
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +213 -30
- package/examples/jsm/loaders/NRRDLoader.js +1 -0
- package/examples/jsm/loaders/OBJLoader.js +1 -0
- package/examples/jsm/loaders/PCDLoader.js +122 -19
- package/examples/jsm/loaders/PDBLoader.js +1 -0
- package/examples/jsm/loaders/PLYLoader.js +1 -0
- package/examples/jsm/loaders/PVRLoader.js +1 -0
- package/examples/jsm/loaders/RGBELoader.js +1 -0
- package/examples/jsm/loaders/RGBMLoader.js +1 -0
- package/examples/jsm/loaders/STLLoader.js +1 -0
- package/examples/jsm/loaders/SVGLoader.js +1 -0
- package/examples/jsm/loaders/TDSLoader.js +1 -0
- package/examples/jsm/loaders/TGALoader.js +1 -0
- package/examples/jsm/loaders/TIFFLoader.js +1 -0
- package/examples/jsm/loaders/TTFLoader.js +14 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -891
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +3 -2
- package/examples/jsm/loaders/VTKLoader.js +1 -0
- package/examples/jsm/loaders/XYZLoader.js +1 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
- package/examples/jsm/math/Capsule.js +2 -0
- package/examples/jsm/math/ColorConverter.js +1 -0
- package/examples/jsm/math/ConvexHull.js +2 -0
- package/examples/jsm/math/ImprovedNoise.js +19 -14
- package/examples/jsm/math/Lut.js +2 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
- package/examples/jsm/math/OBB.js +2 -0
- package/examples/jsm/math/Octree.js +20 -1
- package/examples/jsm/math/SimplexNoise.js +2 -0
- package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/Gyroscope.js +1 -0
- package/examples/jsm/misc/MD2Character.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
- package/examples/jsm/misc/MorphAnimMesh.js +1 -0
- package/examples/jsm/misc/MorphBlendMesh.js +1 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +5 -0
- package/examples/jsm/misc/TubePainter.js +1 -0
- package/examples/jsm/misc/Volume.js +2 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/modifiers/CurveModifier.js +3 -0
- package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
- package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
- package/examples/jsm/modifiers/TessellateModifier.js +2 -0
- package/examples/jsm/objects/GroundedSkybox.js +1 -0
- package/examples/jsm/objects/Lensflare.js +3 -0
- package/examples/jsm/objects/LensflareMesh.js +4 -3
- package/examples/jsm/objects/MarchingCubes.js +2 -0
- package/examples/jsm/objects/Reflector.js +1 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Refractor.js +1 -0
- package/examples/jsm/objects/ShadowMesh.js +1 -0
- package/examples/jsm/objects/Sky.js +2 -1
- package/examples/jsm/objects/SkyMesh.js +22 -19
- package/examples/jsm/objects/Water.js +1 -0
- package/examples/jsm/objects/Water2.js +1 -0
- package/examples/jsm/objects/Water2Mesh.js +3 -1
- package/examples/jsm/objects/WaterMesh.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +1 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +149 -13
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +5 -6
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +14 -12
- package/examples/jsm/postprocessing/GlitchPass.js +2 -1
- package/examples/jsm/postprocessing/HalftonePass.js +2 -1
- package/examples/jsm/postprocessing/LUTPass.js +1 -0
- package/examples/jsm/postprocessing/MaskPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +22 -19
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +3 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +3 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
- package/examples/jsm/postprocessing/SSAOPass.js +12 -10
- package/examples/jsm/postprocessing/SSRPass.js +4 -3
- package/examples/jsm/postprocessing/SavePass.js +2 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
- package/examples/jsm/postprocessing/TexturePass.js +1 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
- package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
- package/examples/jsm/renderers/Projector.js +2 -0
- package/examples/jsm/renderers/SVGRenderer.js +3 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
- package/examples/jsm/shaders/AfterimageShader.js +4 -1
- package/examples/jsm/shaders/BasicShader.js +4 -1
- package/examples/jsm/shaders/BleachBypassShader.js +4 -1
- package/examples/jsm/shaders/BlendShader.js +4 -1
- package/examples/jsm/shaders/BokehShader.js +4 -1
- package/examples/jsm/shaders/BokehShader2.js +4 -1
- package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
- package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
- package/examples/jsm/shaders/ColorifyShader.js +4 -1
- package/examples/jsm/shaders/ConvolutionShader.js +4 -1
- package/examples/jsm/shaders/CopyShader.js +4 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/DigitalGlitch.js +4 -1
- package/examples/jsm/shaders/DotScreenShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +4 -1
- package/examples/jsm/shaders/FXAAShader.js +4 -1
- package/examples/jsm/shaders/FilmShader.js +4 -1
- package/examples/jsm/shaders/FocusShader.js +4 -1
- package/examples/jsm/shaders/FreiChenShader.js +4 -1
- package/examples/jsm/shaders/GTAOShader.js +4 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
- package/examples/jsm/shaders/GodRaysShader.js +4 -1
- package/examples/jsm/shaders/HalftoneShader.js +4 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/HueSaturationShader.js +4 -1
- package/examples/jsm/shaders/KaleidoShader.js +4 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
- package/examples/jsm/shaders/LuminosityShader.js +4 -1
- package/examples/jsm/shaders/MirrorShader.js +4 -1
- package/examples/jsm/shaders/NormalMapShader.js +4 -1
- package/examples/jsm/shaders/OutputShader.js +4 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
- package/examples/jsm/shaders/RGBShiftShader.js +4 -1
- package/examples/jsm/shaders/SAOShader.js +4 -1
- package/examples/jsm/shaders/SMAAShader.js +1 -0
- package/examples/jsm/shaders/SSAOShader.js +4 -1
- package/examples/jsm/shaders/SSRShader.js +1 -0
- package/examples/jsm/shaders/SepiaShader.js +4 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
- package/examples/jsm/shaders/TechnicolorShader.js +4 -1
- package/examples/jsm/shaders/ToonShader.js +2 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
- package/examples/jsm/shaders/VelocityShader.js +4 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/VignetteShader.js +4 -1
- package/examples/jsm/shaders/VolumeShader.js +5 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
- package/examples/jsm/textures/FlakesTexture.js +2 -0
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +9 -7
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
- package/examples/jsm/tsl/display/TransitionNode.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +28 -6
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
- package/examples/jsm/tsl/math/Bayer.js +4 -1
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +6 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +4 -1
- package/examples/jsm/utils/LDrawUtils.js +2 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +4 -1
- package/examples/jsm/utils/ShadowMapViewer.js +2 -0
- package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
- package/examples/jsm/utils/SkeletonUtils.js +4 -1
- package/examples/jsm/utils/SortUtils.js +4 -1
- package/examples/jsm/utils/UVsDebug.js +4 -1
- package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
- package/examples/jsm/utils/WorkerPool.js +2 -0
- package/examples/jsm/webxr/ARButton.js +1 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
- package/examples/jsm/webxr/Text2D.js +4 -1
- package/examples/jsm/webxr/VRButton.js +1 -0
- package/examples/jsm/webxr/XRButton.js +1 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
- package/examples/jsm/webxr/XREstimatedLight.js +1 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
- package/examples/jsm/webxr/XRPlanes.js +1 -0
- package/package.json +6 -4
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +83 -26
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/{examples/jsm/misc → src/core}/Timer.js +4 -40
- package/src/extras/PMREMGenerator.js +11 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/CameraHelper.js +41 -11
- package/src/helpers/SkeletonHelper.js +36 -7
- package/src/lights/LightShadow.js +34 -7
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/SpotLightShadow.js +9 -1
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/BufferGeometryLoader.js +1 -10
- package/src/loaders/FileLoader.js +27 -4
- package/src/loaders/ImageBitmapLoader.js +48 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/Loader.js +14 -0
- package/src/loaders/LoadingManager.js +23 -0
- package/src/loaders/ObjectLoader.js +44 -16
- package/src/loaders/nodes/NodeObjectLoader.js +2 -2
- package/src/materials/Material.js +1 -7
- package/src/materials/MeshBasicMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +0 -8
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +106 -20
- package/src/materials/nodes/PointsNodeMaterial.js +5 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Line3.js +129 -2
- package/src/math/Matrix4.js +48 -27
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/math/Spherical.js +2 -2
- package/src/nodes/Nodes.js +3 -3
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +40 -13
- package/src/nodes/accessors/CubeTextureNode.js +50 -2
- package/src/nodes/accessors/InstanceNode.js +5 -4
- package/src/nodes/accessors/Lights.js +2 -2
- package/src/nodes/accessors/MaterialNode.js +4 -0
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +110 -24
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +19 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +15 -4
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +71 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/ArrayNode.js +12 -0
- package/src/nodes/core/AssignNode.js +30 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +27 -4
- package/src/nodes/core/Node.js +83 -22
- package/src/nodes/core/NodeBuilder.js +273 -49
- package/src/nodes/core/NodeUtils.js +46 -1
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +171 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +63 -5
- package/src/nodes/core/VarNode.js +102 -4
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +165 -20
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/display/ViewportTextureNode.js +67 -7
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +16 -16
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +68 -24
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/ConditionalNode.js +1 -20
- package/src/nodes/math/MathNode.js +146 -75
- package/src/nodes/math/OperatorNode.js +129 -119
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +222 -72
- package/src/nodes/utils/DebugNode.js +16 -4
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +83 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +22 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +20 -6
- package/src/objects/Mesh.js +9 -0
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/Sprite.js +9 -0
- package/src/renderers/WebGL3DRenderTarget.js +1 -0
- package/src/renderers/WebGLArrayRenderTarget.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +2 -4
- package/src/renderers/WebGLRenderer.js +45 -32
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/Bindings.js +19 -18
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/PostProcessing.js +60 -5
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +133 -22
- package/src/renderers/common/SampledTexture.js +3 -71
- package/src/renderers/common/Sampler.js +79 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +19 -0
- package/src/renderers/common/Textures.js +34 -24
- package/src/renderers/common/TimestampQueryPool.js +1 -0
- package/src/renderers/common/Uniform.js +1 -1
- package/src/renderers/common/UniformsGroup.js +14 -18
- package/src/renderers/common/XRManager.js +183 -35
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLProgram.js +12 -6
- package/src/renderers/webgl/WebGLPrograms.js +6 -4
- package/src/renderers/webgl/WebGLShadowMap.js +14 -3
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +162 -11
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +505 -143
- package/src/renderers/webgpu/WebGPURenderer.js +7 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
- package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +70 -7
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/ExternalTexture.js +45 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +32 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +31 -3
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -53,7 +53,7 @@ import { WebGLUtils } from './webgl/WebGLUtils.js';
|
|
|
53
53
|
import { WebXRManager } from './webxr/WebXRManager.js';
|
|
54
54
|
import { WebGLMaterials } from './webgl/WebGLMaterials.js';
|
|
55
55
|
import { WebGLUniformsGroups } from './webgl/WebGLUniformsGroups.js';
|
|
56
|
-
import { createCanvasElement, probeAsync,
|
|
56
|
+
import { createCanvasElement, probeAsync, warnOnce } from '../utils.js';
|
|
57
57
|
import { ColorManagement } from '../math/ColorManagement.js';
|
|
58
58
|
|
|
59
59
|
/**
|
|
@@ -81,7 +81,7 @@ class WebGLRenderer {
|
|
|
81
81
|
preserveDrawingBuffer = false,
|
|
82
82
|
powerPreference = 'default',
|
|
83
83
|
failIfMajorPerformanceCaveat = false,
|
|
84
|
-
|
|
84
|
+
reversedDepthBuffer = false,
|
|
85
85
|
multiviewStereo = false,
|
|
86
86
|
} = parameters;
|
|
87
87
|
|
|
@@ -315,7 +315,6 @@ class WebGLRenderer {
|
|
|
315
315
|
|
|
316
316
|
// camera matrices cache
|
|
317
317
|
|
|
318
|
-
const _currentProjectionMatrix = new Matrix4();
|
|
319
318
|
const _projScreenMatrix = new Matrix4();
|
|
320
319
|
|
|
321
320
|
const _vector3 = new Vector3();
|
|
@@ -412,7 +411,7 @@ class WebGLRenderer {
|
|
|
412
411
|
|
|
413
412
|
state = new WebGLState( _gl, extensions );
|
|
414
413
|
|
|
415
|
-
if ( capabilities.
|
|
414
|
+
if ( capabilities.reversedDepthBuffer && reversedDepthBuffer ) {
|
|
416
415
|
|
|
417
416
|
state.buffers.depth.setReversed( true );
|
|
418
417
|
|
|
@@ -1301,7 +1300,7 @@ class WebGLRenderer {
|
|
|
1301
1300
|
* @param {Object3D} scene - The scene or another type of 3D object to precompile.
|
|
1302
1301
|
* @param {Camera} camera - The camera.
|
|
1303
1302
|
* @param {?Scene} [targetScene=null] - The target scene.
|
|
1304
|
-
* @return {
|
|
1303
|
+
* @return {Set<Material>} The precompiled materials.
|
|
1305
1304
|
*/
|
|
1306
1305
|
this.compile = function ( scene, camera, targetScene = null ) {
|
|
1307
1306
|
|
|
@@ -1561,7 +1560,7 @@ class WebGLRenderer {
|
|
|
1561
1560
|
renderStateStack.push( currentRenderState );
|
|
1562
1561
|
|
|
1563
1562
|
_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
|
|
1564
|
-
_frustum.setFromProjectionMatrix( _projScreenMatrix );
|
|
1563
|
+
_frustum.setFromProjectionMatrix( _projScreenMatrix, WebGLCoordinateSystem, camera.reversedDepth );
|
|
1565
1564
|
|
|
1566
1565
|
_localClippingEnabled = this.localClippingEnabled;
|
|
1567
1566
|
_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );
|
|
@@ -1904,6 +1903,9 @@ class WebGLRenderer {
|
|
|
1904
1903
|
//
|
|
1905
1904
|
|
|
1906
1905
|
const currentRenderTarget = _this.getRenderTarget();
|
|
1906
|
+
const currentActiveCubeFace = _this.getActiveCubeFace();
|
|
1907
|
+
const currentActiveMipmapLevel = _this.getActiveMipmapLevel();
|
|
1908
|
+
|
|
1907
1909
|
_this.setRenderTarget( transmissionRenderTarget );
|
|
1908
1910
|
|
|
1909
1911
|
_this.getClearColor( _currentClearColor );
|
|
@@ -1973,7 +1975,7 @@ class WebGLRenderer {
|
|
|
1973
1975
|
|
|
1974
1976
|
}
|
|
1975
1977
|
|
|
1976
|
-
_this.setRenderTarget( currentRenderTarget );
|
|
1978
|
+
_this.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel );
|
|
1977
1979
|
|
|
1978
1980
|
_this.setClearColor( _currentClearColor, _currentClearAlpha );
|
|
1979
1981
|
|
|
@@ -2405,23 +2407,17 @@ class WebGLRenderer {
|
|
|
2405
2407
|
|
|
2406
2408
|
} else {
|
|
2407
2409
|
|
|
2408
|
-
const
|
|
2409
|
-
|
|
2410
|
-
if ( reverseDepthBuffer ) {
|
|
2411
|
-
|
|
2412
|
-
_currentProjectionMatrix.copy( camera.projectionMatrix );
|
|
2410
|
+
const reversedDepthBuffer = state.buffers.depth.getReversed();
|
|
2413
2411
|
|
|
2414
|
-
|
|
2415
|
-
toReversedProjectionMatrix( _currentProjectionMatrix );
|
|
2412
|
+
if ( reversedDepthBuffer && camera.reversedDepth !== true ) {
|
|
2416
2413
|
|
|
2417
|
-
|
|
2418
|
-
|
|
2419
|
-
} else {
|
|
2420
|
-
|
|
2421
|
-
p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );
|
|
2414
|
+
camera._reversedDepth = true;
|
|
2415
|
+
camera.updateProjectionMatrix();
|
|
2422
2416
|
|
|
2423
2417
|
}
|
|
2424
2418
|
|
|
2419
|
+
p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );
|
|
2420
|
+
|
|
2425
2421
|
p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );
|
|
2426
2422
|
|
|
2427
2423
|
}
|
|
@@ -2887,9 +2883,15 @@ class WebGLRenderer {
|
|
|
2887
2883
|
|
|
2888
2884
|
} else if ( isRenderTarget3D ) {
|
|
2889
2885
|
|
|
2890
|
-
const textureProperties = properties.get( renderTarget.texture );
|
|
2891
2886
|
const layer = activeCubeFace;
|
|
2892
|
-
|
|
2887
|
+
|
|
2888
|
+
for ( let i = 0; i < renderTarget.textures.length; i ++ ) {
|
|
2889
|
+
|
|
2890
|
+
const textureProperties = properties.get( renderTarget.textures[ i ] );
|
|
2891
|
+
|
|
2892
|
+
_gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, textureProperties.__webglTexture, activeMipmapLevel, layer );
|
|
2893
|
+
|
|
2894
|
+
}
|
|
2893
2895
|
|
|
2894
2896
|
} else if ( renderTarget !== null && activeMipmapLevel !== 0 ) {
|
|
2895
2897
|
|
|
@@ -2914,8 +2916,9 @@ class WebGLRenderer {
|
|
|
2914
2916
|
* @param {number} height - The height of the copy region.
|
|
2915
2917
|
* @param {TypedArray} buffer - The result buffer.
|
|
2916
2918
|
* @param {number} [activeCubeFaceIndex] - The active cube face index.
|
|
2919
|
+
* @param {number} [textureIndex=0] - The texture index of an MRT render target.
|
|
2917
2920
|
*/
|
|
2918
|
-
this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {
|
|
2921
|
+
this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex, textureIndex = 0 ) {
|
|
2919
2922
|
|
|
2920
2923
|
if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
|
|
2921
2924
|
|
|
@@ -2938,7 +2941,7 @@ class WebGLRenderer {
|
|
|
2938
2941
|
|
|
2939
2942
|
try {
|
|
2940
2943
|
|
|
2941
|
-
const texture = renderTarget.
|
|
2944
|
+
const texture = renderTarget.textures[ textureIndex ];
|
|
2942
2945
|
const textureFormat = texture.format;
|
|
2943
2946
|
const textureType = texture.type;
|
|
2944
2947
|
|
|
@@ -2960,6 +2963,10 @@ class WebGLRenderer {
|
|
|
2960
2963
|
|
|
2961
2964
|
if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {
|
|
2962
2965
|
|
|
2966
|
+
// when using MRT, select the correct color buffer for the subsequent read command
|
|
2967
|
+
|
|
2968
|
+
if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
|
|
2969
|
+
|
|
2963
2970
|
_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );
|
|
2964
2971
|
|
|
2965
2972
|
}
|
|
@@ -2990,9 +2997,10 @@ class WebGLRenderer {
|
|
|
2990
2997
|
* @param {number} height - The height of the copy region.
|
|
2991
2998
|
* @param {TypedArray} buffer - The result buffer.
|
|
2992
2999
|
* @param {number} [activeCubeFaceIndex] - The active cube face index.
|
|
3000
|
+
* @param {number} [textureIndex=0] - The texture index of an MRT render target.
|
|
2993
3001
|
* @return {Promise<TypedArray>} A Promise that resolves when the read has been finished. The resolve provides the read data as a typed array.
|
|
2994
3002
|
*/
|
|
2995
|
-
this.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {
|
|
3003
|
+
this.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex, textureIndex = 0 ) {
|
|
2996
3004
|
|
|
2997
3005
|
if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
|
|
2998
3006
|
|
|
@@ -3015,7 +3023,7 @@ class WebGLRenderer {
|
|
|
3015
3023
|
// set the active frame buffer to the one we want to read
|
|
3016
3024
|
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
3017
3025
|
|
|
3018
|
-
const texture = renderTarget.
|
|
3026
|
+
const texture = renderTarget.textures[ textureIndex ];
|
|
3019
3027
|
const textureFormat = texture.format;
|
|
3020
3028
|
const textureType = texture.type;
|
|
3021
3029
|
|
|
@@ -3034,6 +3042,11 @@ class WebGLRenderer {
|
|
|
3034
3042
|
const glBuffer = _gl.createBuffer();
|
|
3035
3043
|
_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );
|
|
3036
3044
|
_gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );
|
|
3045
|
+
|
|
3046
|
+
// when using MRT, select the correct color buffer for the subsequent read command
|
|
3047
|
+
|
|
3048
|
+
if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
|
|
3049
|
+
|
|
3037
3050
|
_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), 0 );
|
|
3038
3051
|
|
|
3039
3052
|
// reset the frame buffer to the currently set buffer before waiting
|
|
@@ -3069,7 +3082,7 @@ class WebGLRenderer {
|
|
|
3069
3082
|
* Copies pixels from the current bound framebuffer into the given texture.
|
|
3070
3083
|
*
|
|
3071
3084
|
* @param {FramebufferTexture} texture - The texture.
|
|
3072
|
-
* @param {Vector2} position - The start position of the copy operation.
|
|
3085
|
+
* @param {?Vector2} [position=null] - The start position of the copy operation.
|
|
3073
3086
|
* @param {number} [level=0] - The mip level. The default represents the base mip.
|
|
3074
3087
|
*/
|
|
3075
3088
|
this.copyFramebufferToTexture = function ( texture, position = null, level = 0 ) {
|
|
@@ -3100,10 +3113,10 @@ class WebGLRenderer {
|
|
|
3100
3113
|
*
|
|
3101
3114
|
* @param {Texture} srcTexture - The source texture.
|
|
3102
3115
|
* @param {Texture} dstTexture - The destination texture.
|
|
3103
|
-
* @param {Box2|Box3} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.
|
|
3104
|
-
* @param {Vector2|Vector3} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.
|
|
3105
|
-
* @param {number} srcLevel - The source mipmap level to copy.
|
|
3106
|
-
* @param {number} dstLevel - The destination mipmap level.
|
|
3116
|
+
* @param {?(Box2|Box3)} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.
|
|
3117
|
+
* @param {?(Vector2|Vector3)} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.
|
|
3118
|
+
* @param {number} [srcLevel=0] - The source mipmap level to copy.
|
|
3119
|
+
* @param {?number} [dstLevel=null] - The destination mipmap level.
|
|
3107
3120
|
*/
|
|
3108
3121
|
this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = null ) {
|
|
3109
3122
|
|
|
@@ -3495,7 +3508,7 @@ class WebGLRenderer {
|
|
|
3495
3508
|
* @property {boolean} [depth=true] Whether the drawing buffer has a depth buffer of at least 16 bits.
|
|
3496
3509
|
* @property {boolean} [logarithmicDepthBuffer=false] Whether to use a logarithmic depth buffer. It may be necessary to use this if dealing with huge differences in scale in a single scene.
|
|
3497
3510
|
* Note that this setting uses `gl_FragDepth` if available which disables the Early Fragment Test optimization and can cause a decrease in performance.
|
|
3498
|
-
* @property {boolean} [
|
|
3511
|
+
* @property {boolean} [reversedDepthBuffer=false] Whether to use a reverse depth buffer. Requires the `EXT_clip_control` extension.
|
|
3499
3512
|
* This is a more faster and accurate version than logarithmic depth buffer.
|
|
3500
3513
|
**/
|
|
3501
3514
|
|
|
@@ -3516,7 +3529,7 @@ class WebGLRenderer {
|
|
|
3516
3529
|
* @property {number} maxVertexTextures - The number of textures that can be used in a vertex shader.
|
|
3517
3530
|
* @property {number} maxVertexUniforms - The maximum number of uniforms that can be used in a vertex shader.
|
|
3518
3531
|
* @property {string} precision - The shader precision currently being used by the renderer.
|
|
3519
|
-
* @property {boolean}
|
|
3532
|
+
* @property {boolean} reversedDepthBuffer - `true` if `reversedDepthBuffer` was set to `true` in the constructor
|
|
3520
3533
|
* and the rendering context supports `EXT_clip_control`.
|
|
3521
3534
|
* @property {boolean} vertexTextures - `true` if vertex textures can be used.
|
|
3522
3535
|
**/
|
|
@@ -32,9 +32,9 @@ class Animation {
|
|
|
32
32
|
* A reference to the context from `requestAnimationFrame()` can
|
|
33
33
|
* be called (usually `window`).
|
|
34
34
|
*
|
|
35
|
-
* @type {Window|XRSession}
|
|
35
|
+
* @type {?(Window|XRSession)}
|
|
36
36
|
*/
|
|
37
|
-
this._context = self;
|
|
37
|
+
this._context = typeof self !== 'undefined' ? self : null;
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
40
|
* The user-defined animation loop.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import DataMap from './DataMap.js';
|
|
2
2
|
import Color4 from './Color4.js';
|
|
3
|
-
import { vec4, context,
|
|
3
|
+
import { vec4, context, normalWorldGeometry, backgroundBlurriness, backgroundIntensity, backgroundRotation, modelViewProjection } from '../../nodes/TSL.js';
|
|
4
4
|
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
5
5
|
|
|
6
6
|
import { Mesh } from '../../objects/Mesh.js';
|
|
@@ -89,7 +89,7 @@ class Background extends DataMap {
|
|
|
89
89
|
|
|
90
90
|
const backgroundMeshNode = context( vec4( backgroundNode ).mul( backgroundIntensity ), {
|
|
91
91
|
// @TODO: Add Texture2D support using node context
|
|
92
|
-
getUV: () => backgroundRotation.mul(
|
|
92
|
+
getUV: () => backgroundRotation.mul( normalWorldGeometry ),
|
|
93
93
|
getTextureLevel: () => backgroundBlurriness
|
|
94
94
|
} );
|
|
95
95
|
|
|
@@ -118,6 +118,17 @@ class Background extends DataMap {
|
|
|
118
118
|
|
|
119
119
|
};
|
|
120
120
|
|
|
121
|
+
function onBackgroundDispose() {
|
|
122
|
+
|
|
123
|
+
background.removeEventListener( 'dispose', onBackgroundDispose );
|
|
124
|
+
|
|
125
|
+
backgroundMesh.material.dispose();
|
|
126
|
+
backgroundMesh.geometry.dispose();
|
|
127
|
+
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
background.addEventListener( 'dispose', onBackgroundDispose );
|
|
131
|
+
|
|
121
132
|
}
|
|
122
133
|
|
|
123
134
|
const backgroundCacheKey = backgroundNode.getCacheKey();
|
|
@@ -244,24 +244,31 @@ class Bindings extends DataMap {
|
|
|
244
244
|
|
|
245
245
|
}
|
|
246
246
|
|
|
247
|
-
} else if ( binding.isSampler ) {
|
|
248
|
-
|
|
249
|
-
binding.update();
|
|
250
|
-
|
|
251
247
|
} else if ( binding.isSampledTexture ) {
|
|
252
248
|
|
|
253
|
-
const texturesTextureData = this.textures.get( binding.texture );
|
|
254
|
-
|
|
255
|
-
if ( binding.needsBindingsUpdate( texturesTextureData.generation ) ) needsBindingsUpdate = true;
|
|
256
|
-
|
|
257
249
|
const updated = binding.update();
|
|
258
250
|
|
|
251
|
+
// get the texture data after the update, to sync the texture reference from node
|
|
252
|
+
|
|
259
253
|
const texture = binding.texture;
|
|
254
|
+
const texturesTextureData = this.textures.get( texture );
|
|
260
255
|
|
|
261
256
|
if ( updated ) {
|
|
262
257
|
|
|
258
|
+
// version: update the texture data or create a new one
|
|
259
|
+
|
|
263
260
|
this.textures.updateTexture( texture );
|
|
264
261
|
|
|
262
|
+
// generation: update the bindings if a new texture has been created
|
|
263
|
+
|
|
264
|
+
if ( binding.generation !== texturesTextureData.generation ) {
|
|
265
|
+
|
|
266
|
+
binding.generation = texturesTextureData.generation;
|
|
267
|
+
|
|
268
|
+
needsBindingsUpdate = true;
|
|
269
|
+
|
|
270
|
+
}
|
|
271
|
+
|
|
265
272
|
}
|
|
266
273
|
|
|
267
274
|
const textureData = backend.get( texture );
|
|
@@ -277,16 +284,6 @@ class Bindings extends DataMap {
|
|
|
277
284
|
|
|
278
285
|
}
|
|
279
286
|
|
|
280
|
-
if ( backend.isWebGPUBackend === true && textureData.texture === undefined && textureData.externalTexture === undefined ) {
|
|
281
|
-
|
|
282
|
-
// TODO: Remove this once we found why updated === false isn't bound to a texture in the WebGPU backend
|
|
283
|
-
console.error( 'Bindings._update: binding should be available:', binding, updated, texture, binding.textureNode.value, needsBindingsUpdate );
|
|
284
|
-
|
|
285
|
-
this.textures.updateTexture( texture );
|
|
286
|
-
needsBindingsUpdate = true;
|
|
287
|
-
|
|
288
|
-
}
|
|
289
|
-
|
|
290
287
|
if ( texture.isStorageTexture === true ) {
|
|
291
288
|
|
|
292
289
|
const textureData = this.get( texture );
|
|
@@ -305,6 +302,10 @@ class Bindings extends DataMap {
|
|
|
305
302
|
|
|
306
303
|
}
|
|
307
304
|
|
|
305
|
+
} else if ( binding.isSampler ) {
|
|
306
|
+
|
|
307
|
+
binding.update();
|
|
308
|
+
|
|
308
309
|
}
|
|
309
310
|
|
|
310
311
|
}
|
|
@@ -34,8 +34,8 @@ class Color4 extends Color {
|
|
|
34
34
|
* string argument to this method.
|
|
35
35
|
*
|
|
36
36
|
* @param {number|string|Color} r - The red value.
|
|
37
|
-
* @param {number} g - The green value.
|
|
38
|
-
* @param {number} b - The blue value.
|
|
37
|
+
* @param {number} [g] - The green value.
|
|
38
|
+
* @param {number} [b] - The blue value.
|
|
39
39
|
* @param {number} [a=1] - The alpha value.
|
|
40
40
|
* @return {Color4} A reference to this object.
|
|
41
41
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { equirectUV } from '../../nodes/utils/
|
|
1
|
+
import { equirectUV } from '../../nodes/utils/EquirectUV.js';
|
|
2
2
|
import { texture as TSL_Texture } from '../../nodes/accessors/TextureNode.js';
|
|
3
3
|
import { positionWorldDirection } from '../../nodes/accessors/Position.js';
|
|
4
4
|
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
2
|
+
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
2
3
|
import { vec4, renderOutput } from '../../nodes/TSL.js';
|
|
3
|
-
import {
|
|
4
|
+
import { NoToneMapping } from '../../constants.js';
|
|
4
5
|
import QuadMesh from '../../renderers/common/QuadMesh.js';
|
|
5
6
|
|
|
6
7
|
/**
|
|
@@ -82,6 +83,15 @@ class PostProcessing {
|
|
|
82
83
|
*/
|
|
83
84
|
this._quadMesh = new QuadMesh( material );
|
|
84
85
|
|
|
86
|
+
/**
|
|
87
|
+
* The context of the post processing stack.
|
|
88
|
+
*
|
|
89
|
+
* @private
|
|
90
|
+
* @type {?Object}
|
|
91
|
+
* @default null
|
|
92
|
+
*/
|
|
93
|
+
this._context = null;
|
|
94
|
+
|
|
85
95
|
}
|
|
86
96
|
|
|
87
97
|
/**
|
|
@@ -91,15 +101,17 @@ class PostProcessing {
|
|
|
91
101
|
*/
|
|
92
102
|
render() {
|
|
93
103
|
|
|
104
|
+
const renderer = this.renderer;
|
|
105
|
+
|
|
94
106
|
this._update();
|
|
95
107
|
|
|
96
|
-
|
|
108
|
+
if ( this._context.onBeforePostProcessing !== null ) this._context.onBeforePostProcessing();
|
|
97
109
|
|
|
98
110
|
const toneMapping = renderer.toneMapping;
|
|
99
111
|
const outputColorSpace = renderer.outputColorSpace;
|
|
100
112
|
|
|
101
113
|
renderer.toneMapping = NoToneMapping;
|
|
102
|
-
renderer.outputColorSpace =
|
|
114
|
+
renderer.outputColorSpace = ColorManagement.workingColorSpace;
|
|
103
115
|
|
|
104
116
|
//
|
|
105
117
|
|
|
@@ -115,6 +127,20 @@ class PostProcessing {
|
|
|
115
127
|
renderer.toneMapping = toneMapping;
|
|
116
128
|
renderer.outputColorSpace = outputColorSpace;
|
|
117
129
|
|
|
130
|
+
if ( this._context.onAfterPostProcessing !== null ) this._context.onAfterPostProcessing();
|
|
131
|
+
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Returns the current context of the post processing stack.
|
|
136
|
+
*
|
|
137
|
+
* @readonly
|
|
138
|
+
* @type {?Object}
|
|
139
|
+
*/
|
|
140
|
+
get context() {
|
|
141
|
+
|
|
142
|
+
return this._context;
|
|
143
|
+
|
|
118
144
|
}
|
|
119
145
|
|
|
120
146
|
/**
|
|
@@ -140,7 +166,32 @@ class PostProcessing {
|
|
|
140
166
|
const toneMapping = renderer.toneMapping;
|
|
141
167
|
const outputColorSpace = renderer.outputColorSpace;
|
|
142
168
|
|
|
143
|
-
|
|
169
|
+
const context = {
|
|
170
|
+
postProcessing: this,
|
|
171
|
+
onBeforePostProcessing: null,
|
|
172
|
+
onAfterPostProcessing: null
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
let outputNode = this.outputNode;
|
|
176
|
+
|
|
177
|
+
if ( this.outputColorTransform === true ) {
|
|
178
|
+
|
|
179
|
+
outputNode = outputNode.context( context );
|
|
180
|
+
|
|
181
|
+
outputNode = renderOutput( outputNode, toneMapping, outputColorSpace );
|
|
182
|
+
|
|
183
|
+
} else {
|
|
184
|
+
|
|
185
|
+
context.toneMapping = toneMapping;
|
|
186
|
+
context.outputColorSpace = outputColorSpace;
|
|
187
|
+
|
|
188
|
+
outputNode = outputNode.context( context );
|
|
189
|
+
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
this._context = context;
|
|
193
|
+
|
|
194
|
+
this._quadMesh.material.fragmentNode = outputNode;
|
|
144
195
|
this._quadMesh.material.needsUpdate = true;
|
|
145
196
|
|
|
146
197
|
this.needsUpdate = false;
|
|
@@ -161,13 +212,15 @@ class PostProcessing {
|
|
|
161
212
|
|
|
162
213
|
this._update();
|
|
163
214
|
|
|
215
|
+
if ( this._context.onBeforePostProcessing !== null ) this._context.onBeforePostProcessing();
|
|
216
|
+
|
|
164
217
|
const renderer = this.renderer;
|
|
165
218
|
|
|
166
219
|
const toneMapping = renderer.toneMapping;
|
|
167
220
|
const outputColorSpace = renderer.outputColorSpace;
|
|
168
221
|
|
|
169
222
|
renderer.toneMapping = NoToneMapping;
|
|
170
|
-
renderer.outputColorSpace =
|
|
223
|
+
renderer.outputColorSpace = ColorManagement.workingColorSpace;
|
|
171
224
|
|
|
172
225
|
//
|
|
173
226
|
|
|
@@ -183,6 +236,8 @@ class PostProcessing {
|
|
|
183
236
|
renderer.toneMapping = toneMapping;
|
|
184
237
|
renderer.outputColorSpace = outputColorSpace;
|
|
185
238
|
|
|
239
|
+
if ( this._context.onAfterPostProcessing !== null ) this._context.onAfterPostProcessing();
|
|
240
|
+
|
|
186
241
|
}
|
|
187
242
|
|
|
188
243
|
}
|
|
@@ -171,6 +171,16 @@ class RenderObject {
|
|
|
171
171
|
*/
|
|
172
172
|
this.attributes = null;
|
|
173
173
|
|
|
174
|
+
/**
|
|
175
|
+
* An object holding the version of the
|
|
176
|
+
* attributes. The keys are the attribute names
|
|
177
|
+
* and the values are the attribute versions.
|
|
178
|
+
*
|
|
179
|
+
* @type {?Object<string, number>}
|
|
180
|
+
* @default null
|
|
181
|
+
*/
|
|
182
|
+
this.attributesId = null;
|
|
183
|
+
|
|
174
184
|
/**
|
|
175
185
|
* A reference to a render pipeline the render
|
|
176
186
|
* object is processed with.
|
|
@@ -290,7 +300,7 @@ class RenderObject {
|
|
|
290
300
|
|
|
291
301
|
/**
|
|
292
302
|
* An event listener which is executed when `dispose()` is called on
|
|
293
|
-
* the render object
|
|
303
|
+
* the material of this render object.
|
|
294
304
|
*
|
|
295
305
|
* @method
|
|
296
306
|
*/
|
|
@@ -300,7 +310,23 @@ class RenderObject {
|
|
|
300
310
|
|
|
301
311
|
};
|
|
302
312
|
|
|
313
|
+
/**
|
|
314
|
+
* An event listener which is executed when `dispose()` is called on
|
|
315
|
+
* the geometry of this render object.
|
|
316
|
+
*
|
|
317
|
+
* @method
|
|
318
|
+
*/
|
|
319
|
+
this.onGeometryDispose = () => {
|
|
320
|
+
|
|
321
|
+
// clear geometry cache attributes
|
|
322
|
+
|
|
323
|
+
this.attributes = null;
|
|
324
|
+
this.attributesId = null;
|
|
325
|
+
|
|
326
|
+
};
|
|
327
|
+
|
|
303
328
|
this.material.addEventListener( 'dispose', this.onMaterialDispose );
|
|
329
|
+
this.geometry.addEventListener( 'dispose', this.onGeometryDispose );
|
|
304
330
|
|
|
305
331
|
}
|
|
306
332
|
|
|
@@ -439,6 +465,7 @@ class RenderObject {
|
|
|
439
465
|
|
|
440
466
|
this.geometry = geometry;
|
|
441
467
|
this.attributes = null;
|
|
468
|
+
this.attributesId = null;
|
|
442
469
|
|
|
443
470
|
}
|
|
444
471
|
|
|
@@ -458,9 +485,25 @@ class RenderObject {
|
|
|
458
485
|
const attributes = [];
|
|
459
486
|
const vertexBuffers = new Set();
|
|
460
487
|
|
|
488
|
+
const attributesId = {};
|
|
489
|
+
|
|
461
490
|
for ( const nodeAttribute of nodeAttributes ) {
|
|
462
491
|
|
|
463
|
-
|
|
492
|
+
let attribute;
|
|
493
|
+
|
|
494
|
+
if ( nodeAttribute.node && nodeAttribute.node.attribute ) {
|
|
495
|
+
|
|
496
|
+
// node attribute
|
|
497
|
+
attribute = nodeAttribute.node.attribute;
|
|
498
|
+
|
|
499
|
+
} else {
|
|
500
|
+
|
|
501
|
+
// geometry attribute
|
|
502
|
+
attribute = geometry.getAttribute( nodeAttribute.name );
|
|
503
|
+
|
|
504
|
+
attributesId[ nodeAttribute.name ] = attribute.version;
|
|
505
|
+
|
|
506
|
+
}
|
|
464
507
|
|
|
465
508
|
if ( attribute === undefined ) continue;
|
|
466
509
|
|
|
@@ -472,6 +515,7 @@ class RenderObject {
|
|
|
472
515
|
}
|
|
473
516
|
|
|
474
517
|
this.attributes = attributes;
|
|
518
|
+
this.attributesId = attributesId;
|
|
475
519
|
this.vertexBuffers = Array.from( vertexBuffers.values() );
|
|
476
520
|
|
|
477
521
|
return attributes;
|
|
@@ -509,7 +553,18 @@ class RenderObject {
|
|
|
509
553
|
|
|
510
554
|
const index = this.getIndex();
|
|
511
555
|
const hasIndex = ( index !== null );
|
|
512
|
-
|
|
556
|
+
|
|
557
|
+
let instanceCount = 1;
|
|
558
|
+
|
|
559
|
+
if ( geometry.isInstancedBufferGeometry === true ) {
|
|
560
|
+
|
|
561
|
+
instanceCount = geometry.instanceCount;
|
|
562
|
+
|
|
563
|
+
} else if ( object.count !== undefined ) {
|
|
564
|
+
|
|
565
|
+
instanceCount = Math.max( 0, object.count );
|
|
566
|
+
|
|
567
|
+
}
|
|
513
568
|
|
|
514
569
|
if ( instanceCount === 0 ) return null;
|
|
515
570
|
|
|
@@ -725,7 +780,27 @@ class RenderObject {
|
|
|
725
780
|
*/
|
|
726
781
|
get needsGeometryUpdate() {
|
|
727
782
|
|
|
728
|
-
|
|
783
|
+
if ( this.geometry.id !== this.object.geometry.id ) return true;
|
|
784
|
+
|
|
785
|
+
if ( this.attributes !== null ) {
|
|
786
|
+
|
|
787
|
+
const attributesId = this.attributesId;
|
|
788
|
+
|
|
789
|
+
for ( const name in attributesId ) {
|
|
790
|
+
|
|
791
|
+
const attribute = this.geometry.getAttribute( name );
|
|
792
|
+
|
|
793
|
+
if ( attribute === undefined || attributesId[ name ] !== attribute.id ) {
|
|
794
|
+
|
|
795
|
+
return true;
|
|
796
|
+
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
return false;
|
|
729
804
|
|
|
730
805
|
}
|
|
731
806
|
|
|
@@ -803,6 +878,7 @@ class RenderObject {
|
|
|
803
878
|
dispose() {
|
|
804
879
|
|
|
805
880
|
this.material.removeEventListener( 'dispose', this.onMaterialDispose );
|
|
881
|
+
this.geometry.removeEventListener( 'dispose', this.onGeometryDispose );
|
|
806
882
|
|
|
807
883
|
this.onDispose();
|
|
808
884
|
|