@plastic-software/three 0.175.14 → 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 +8402 -6787
- package/build/three.core.js +8007 -6688
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +397 -102
- 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 +6831 -2838
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6648 -2838
- 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 +4 -2
- 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/WebGLMaterials.js +6 -6
- package/src/renderers/webgl/WebGLProgram.js +22 -16
- package/src/renderers/webgl/WebGLPrograms.js +8 -6
- package/src/renderers/webgl/WebGLShadowMap.js +14 -3
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +163 -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 -9
- 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
|
@@ -52,7 +52,7 @@ import { WebGLUtils } from './webgl/WebGLUtils.js';
|
|
|
52
52
|
import { WebXRManager } from './webxr/WebXRManager.js';
|
|
53
53
|
import { WebGLMaterials } from './webgl/WebGLMaterials.js';
|
|
54
54
|
import { WebGLUniformsGroups } from './webgl/WebGLUniformsGroups.js';
|
|
55
|
-
import { createCanvasElement, probeAsync,
|
|
55
|
+
import { createCanvasElement, probeAsync, warnOnce } from '../utils.js';
|
|
56
56
|
import { ColorManagement } from '../math/ColorManagement.js';
|
|
57
57
|
|
|
58
58
|
/**
|
|
@@ -80,7 +80,7 @@ class WebGLRenderer {
|
|
|
80
80
|
preserveDrawingBuffer = false,
|
|
81
81
|
powerPreference = 'default',
|
|
82
82
|
failIfMajorPerformanceCaveat = false,
|
|
83
|
-
|
|
83
|
+
reversedDepthBuffer = false,
|
|
84
84
|
} = parameters;
|
|
85
85
|
|
|
86
86
|
/**
|
|
@@ -313,7 +313,6 @@ class WebGLRenderer {
|
|
|
313
313
|
|
|
314
314
|
// camera matrices cache
|
|
315
315
|
|
|
316
|
-
const _currentProjectionMatrix = new Matrix4();
|
|
317
316
|
const _projScreenMatrix = new Matrix4();
|
|
318
317
|
|
|
319
318
|
const _vector3 = new Vector3();
|
|
@@ -409,7 +408,7 @@ class WebGLRenderer {
|
|
|
409
408
|
|
|
410
409
|
state = new WebGLState( _gl, extensions );
|
|
411
410
|
|
|
412
|
-
if ( capabilities.
|
|
411
|
+
if ( capabilities.reversedDepthBuffer && reversedDepthBuffer ) {
|
|
413
412
|
|
|
414
413
|
state.buffers.depth.setReversed( true );
|
|
415
414
|
|
|
@@ -1297,7 +1296,7 @@ class WebGLRenderer {
|
|
|
1297
1296
|
* @param {Object3D} scene - The scene or another type of 3D object to precompile.
|
|
1298
1297
|
* @param {Camera} camera - The camera.
|
|
1299
1298
|
* @param {?Scene} [targetScene=null] - The target scene.
|
|
1300
|
-
* @return {
|
|
1299
|
+
* @return {Set<Material>} The precompiled materials.
|
|
1301
1300
|
*/
|
|
1302
1301
|
this.compile = function ( scene, camera, targetScene = null ) {
|
|
1303
1302
|
|
|
@@ -1557,7 +1556,7 @@ class WebGLRenderer {
|
|
|
1557
1556
|
renderStateStack.push( currentRenderState );
|
|
1558
1557
|
|
|
1559
1558
|
_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
|
|
1560
|
-
_frustum.setFromProjectionMatrix( _projScreenMatrix );
|
|
1559
|
+
_frustum.setFromProjectionMatrix( _projScreenMatrix, WebGLCoordinateSystem, camera.reversedDepth );
|
|
1561
1560
|
|
|
1562
1561
|
_localClippingEnabled = this.localClippingEnabled;
|
|
1563
1562
|
_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );
|
|
@@ -1890,6 +1889,9 @@ class WebGLRenderer {
|
|
|
1890
1889
|
//
|
|
1891
1890
|
|
|
1892
1891
|
const currentRenderTarget = _this.getRenderTarget();
|
|
1892
|
+
const currentActiveCubeFace = _this.getActiveCubeFace();
|
|
1893
|
+
const currentActiveMipmapLevel = _this.getActiveMipmapLevel();
|
|
1894
|
+
|
|
1893
1895
|
_this.setRenderTarget( transmissionRenderTarget );
|
|
1894
1896
|
|
|
1895
1897
|
_this.getClearColor( _currentClearColor );
|
|
@@ -1959,7 +1961,7 @@ class WebGLRenderer {
|
|
|
1959
1961
|
|
|
1960
1962
|
}
|
|
1961
1963
|
|
|
1962
|
-
_this.setRenderTarget( currentRenderTarget );
|
|
1964
|
+
_this.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel );
|
|
1963
1965
|
|
|
1964
1966
|
_this.setClearColor( _currentClearColor, _currentClearAlpha );
|
|
1965
1967
|
|
|
@@ -2385,23 +2387,17 @@ class WebGLRenderer {
|
|
|
2385
2387
|
|
|
2386
2388
|
// common camera uniforms
|
|
2387
2389
|
|
|
2388
|
-
const
|
|
2389
|
-
|
|
2390
|
-
if ( reverseDepthBuffer ) {
|
|
2391
|
-
|
|
2392
|
-
_currentProjectionMatrix.copy( camera.projectionMatrix );
|
|
2390
|
+
const reversedDepthBuffer = state.buffers.depth.getReversed();
|
|
2393
2391
|
|
|
2394
|
-
|
|
2395
|
-
toReversedProjectionMatrix( _currentProjectionMatrix );
|
|
2392
|
+
if ( reversedDepthBuffer && camera.reversedDepth !== true ) {
|
|
2396
2393
|
|
|
2397
|
-
|
|
2398
|
-
|
|
2399
|
-
} else {
|
|
2400
|
-
|
|
2401
|
-
p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );
|
|
2394
|
+
camera._reversedDepth = true;
|
|
2395
|
+
camera.updateProjectionMatrix();
|
|
2402
2396
|
|
|
2403
2397
|
}
|
|
2404
2398
|
|
|
2399
|
+
p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );
|
|
2400
|
+
|
|
2405
2401
|
p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );
|
|
2406
2402
|
|
|
2407
2403
|
const uCamPos = p_uniforms.map.cameraPosition;
|
|
@@ -2831,9 +2827,15 @@ class WebGLRenderer {
|
|
|
2831
2827
|
|
|
2832
2828
|
} else if ( isRenderTarget3D ) {
|
|
2833
2829
|
|
|
2834
|
-
const textureProperties = properties.get( renderTarget.texture );
|
|
2835
2830
|
const layer = activeCubeFace;
|
|
2836
|
-
|
|
2831
|
+
|
|
2832
|
+
for ( let i = 0; i < renderTarget.textures.length; i ++ ) {
|
|
2833
|
+
|
|
2834
|
+
const textureProperties = properties.get( renderTarget.textures[ i ] );
|
|
2835
|
+
|
|
2836
|
+
_gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, textureProperties.__webglTexture, activeMipmapLevel, layer );
|
|
2837
|
+
|
|
2838
|
+
}
|
|
2837
2839
|
|
|
2838
2840
|
} else if ( renderTarget !== null && activeMipmapLevel !== 0 ) {
|
|
2839
2841
|
|
|
@@ -2858,8 +2860,9 @@ class WebGLRenderer {
|
|
|
2858
2860
|
* @param {number} height - The height of the copy region.
|
|
2859
2861
|
* @param {TypedArray} buffer - The result buffer.
|
|
2860
2862
|
* @param {number} [activeCubeFaceIndex] - The active cube face index.
|
|
2863
|
+
* @param {number} [textureIndex=0] - The texture index of an MRT render target.
|
|
2861
2864
|
*/
|
|
2862
|
-
this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {
|
|
2865
|
+
this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex, textureIndex = 0 ) {
|
|
2863
2866
|
|
|
2864
2867
|
if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
|
|
2865
2868
|
|
|
@@ -2882,7 +2885,7 @@ class WebGLRenderer {
|
|
|
2882
2885
|
|
|
2883
2886
|
try {
|
|
2884
2887
|
|
|
2885
|
-
const texture = renderTarget.
|
|
2888
|
+
const texture = renderTarget.textures[ textureIndex ];
|
|
2886
2889
|
const textureFormat = texture.format;
|
|
2887
2890
|
const textureType = texture.type;
|
|
2888
2891
|
|
|
@@ -2904,6 +2907,10 @@ class WebGLRenderer {
|
|
|
2904
2907
|
|
|
2905
2908
|
if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {
|
|
2906
2909
|
|
|
2910
|
+
// when using MRT, select the correct color buffer for the subsequent read command
|
|
2911
|
+
|
|
2912
|
+
if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
|
|
2913
|
+
|
|
2907
2914
|
_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );
|
|
2908
2915
|
|
|
2909
2916
|
}
|
|
@@ -2934,9 +2941,10 @@ class WebGLRenderer {
|
|
|
2934
2941
|
* @param {number} height - The height of the copy region.
|
|
2935
2942
|
* @param {TypedArray} buffer - The result buffer.
|
|
2936
2943
|
* @param {number} [activeCubeFaceIndex] - The active cube face index.
|
|
2944
|
+
* @param {number} [textureIndex=0] - The texture index of an MRT render target.
|
|
2937
2945
|
* @return {Promise<TypedArray>} A Promise that resolves when the read has been finished. The resolve provides the read data as a typed array.
|
|
2938
2946
|
*/
|
|
2939
|
-
this.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {
|
|
2947
|
+
this.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex, textureIndex = 0 ) {
|
|
2940
2948
|
|
|
2941
2949
|
if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
|
|
2942
2950
|
|
|
@@ -2959,7 +2967,7 @@ class WebGLRenderer {
|
|
|
2959
2967
|
// set the active frame buffer to the one we want to read
|
|
2960
2968
|
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
2961
2969
|
|
|
2962
|
-
const texture = renderTarget.
|
|
2970
|
+
const texture = renderTarget.textures[ textureIndex ];
|
|
2963
2971
|
const textureFormat = texture.format;
|
|
2964
2972
|
const textureType = texture.type;
|
|
2965
2973
|
|
|
@@ -2978,6 +2986,11 @@ class WebGLRenderer {
|
|
|
2978
2986
|
const glBuffer = _gl.createBuffer();
|
|
2979
2987
|
_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );
|
|
2980
2988
|
_gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );
|
|
2989
|
+
|
|
2990
|
+
// when using MRT, select the correct color buffer for the subsequent read command
|
|
2991
|
+
|
|
2992
|
+
if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
|
|
2993
|
+
|
|
2981
2994
|
_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), 0 );
|
|
2982
2995
|
|
|
2983
2996
|
// reset the frame buffer to the currently set buffer before waiting
|
|
@@ -3013,7 +3026,7 @@ class WebGLRenderer {
|
|
|
3013
3026
|
* Copies pixels from the current bound framebuffer into the given texture.
|
|
3014
3027
|
*
|
|
3015
3028
|
* @param {FramebufferTexture} texture - The texture.
|
|
3016
|
-
* @param {Vector2} position - The start position of the copy operation.
|
|
3029
|
+
* @param {?Vector2} [position=null] - The start position of the copy operation.
|
|
3017
3030
|
* @param {number} [level=0] - The mip level. The default represents the base mip.
|
|
3018
3031
|
*/
|
|
3019
3032
|
this.copyFramebufferToTexture = function ( texture, position = null, level = 0 ) {
|
|
@@ -3044,10 +3057,10 @@ class WebGLRenderer {
|
|
|
3044
3057
|
*
|
|
3045
3058
|
* @param {Texture} srcTexture - The source texture.
|
|
3046
3059
|
* @param {Texture} dstTexture - The destination texture.
|
|
3047
|
-
* @param {Box2|Box3} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.
|
|
3048
|
-
* @param {Vector2|Vector3} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.
|
|
3049
|
-
* @param {number} srcLevel - The source mipmap level to copy.
|
|
3050
|
-
* @param {number} dstLevel - The destination mipmap level.
|
|
3060
|
+
* @param {?(Box2|Box3)} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.
|
|
3061
|
+
* @param {?(Vector2|Vector3)} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.
|
|
3062
|
+
* @param {number} [srcLevel=0] - The source mipmap level to copy.
|
|
3063
|
+
* @param {?number} [dstLevel=null] - The destination mipmap level.
|
|
3051
3064
|
*/
|
|
3052
3065
|
this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = null ) {
|
|
3053
3066
|
|
|
@@ -3439,7 +3452,7 @@ class WebGLRenderer {
|
|
|
3439
3452
|
* @property {boolean} [depth=true] Whether the drawing buffer has a depth buffer of at least 16 bits.
|
|
3440
3453
|
* @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.
|
|
3441
3454
|
* Note that this setting uses `gl_FragDepth` if available which disables the Early Fragment Test optimization and can cause a decrease in performance.
|
|
3442
|
-
* @property {boolean} [
|
|
3455
|
+
* @property {boolean} [reversedDepthBuffer=false] Whether to use a reverse depth buffer. Requires the `EXT_clip_control` extension.
|
|
3443
3456
|
* This is a more faster and accurate version than logarithmic depth buffer.
|
|
3444
3457
|
**/
|
|
3445
3458
|
|
|
@@ -3460,7 +3473,7 @@ class WebGLRenderer {
|
|
|
3460
3473
|
* @property {number} maxVertexTextures - The number of textures that can be used in a vertex shader.
|
|
3461
3474
|
* @property {number} maxVertexUniforms - The maximum number of uniforms that can be used in a vertex shader.
|
|
3462
3475
|
* @property {string} precision - The shader precision currently being used by the renderer.
|
|
3463
|
-
* @property {boolean}
|
|
3476
|
+
* @property {boolean} reversedDepthBuffer - `true` if `reversedDepthBuffer` was set to `true` in the constructor
|
|
3464
3477
|
* and the rendering context supports `EXT_clip_control`.
|
|
3465
3478
|
* @property {boolean} vertexTextures - `true` if vertex textures can be used.
|
|
3466
3479
|
**/
|
|
@@ -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
|
|