@gnsx/three 0.185.15 → 0.186.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +10 -82600
- package/build/three.core.js +1303 -728
- package/build/three.module.js +439 -338
- package/build/three.tsl.js +74 -44
- package/build/three.webgpu.js +6036 -2184
- package/build/three.webgpu.nodes.js +6020 -2184
- package/examples/jsm/Addons.js +6 -6
- package/examples/jsm/controls/ArcballControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +44 -20
- package/examples/jsm/controls/OrbitControls.js +9 -0
- package/examples/jsm/controls/TrackballControls.js +109 -4
- package/examples/jsm/csm/CSMShadowNode.js +13 -0
- package/examples/jsm/exporters/GLTFExporter.js +23 -7
- package/examples/jsm/exporters/USDZExporter.js +2 -2
- package/examples/jsm/generators/CityGenerator.js +377 -45
- package/examples/jsm/generators/ForestGenerator.js +12 -12
- package/examples/jsm/generators/TerrainGenerator.js +49 -37
- package/examples/jsm/generators/TreeGenerator.js +70 -76
- package/examples/jsm/generators/city/BenchGenerator.js +127 -0
- package/examples/jsm/generators/city/CarGenerator.js +479 -0
- package/examples/jsm/generators/city/CityGeneratorUtils.js +31 -0
- package/examples/jsm/generators/city/HydrantGenerator.js +106 -0
- package/examples/jsm/generators/city/InstancedMeshGenerator.js +86 -0
- package/examples/jsm/generators/city/PersonGenerator.js +447 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +33 -38
- package/examples/jsm/generators/city/SkyscraperGenerator.js +448 -48
- package/examples/jsm/generators/city/StreetTreeGenerator.js +231 -0
- package/examples/jsm/generators/city/StreetlightGenerator.js +100 -0
- package/examples/jsm/generators/city/TrafficlightGenerator.js +106 -0
- package/examples/jsm/generators/city/TrashcanGenerator.js +100 -0
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +1 -1
- package/examples/jsm/gpgpu/CountingSort.js +271 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +60 -239
- package/examples/jsm/helpers/LightProbeGridHelperWebGL.js +221 -0
- package/examples/jsm/inspector/Extension.js +94 -0
- package/examples/jsm/inspector/Inspector.js +145 -41
- package/examples/jsm/inspector/RendererInspector.js +100 -52
- package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +2609 -0
- package/examples/jsm/inspector/extensions/color-grading/ColorWheel.js +352 -0
- package/examples/jsm/inspector/extensions/color-grading/CurveEditor.js +599 -0
- package/examples/jsm/inspector/extensions/color-grading/LUT3DStyle.js +1201 -0
- package/examples/jsm/inspector/extensions/color-grading/LUTMath.js +788 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/BrightnessModule.js +72 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ColorWheelModule.js +112 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ContrastModule.js +82 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/CurvesModule.js +109 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ExposureHueModule.js +110 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ExposureModule.js +73 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/HueModule.js +78 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ImportedCubeModule.js +89 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/Module.js +285 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/OutputModule.js +101 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/RendererModule.js +225 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/SatVibranceModule.js +102 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/SaturationModule.js +76 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/VibranceModule.js +76 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/WhiteBalanceModule.js +86 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +26 -31
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -0
- package/examples/jsm/inspector/tabs/Memory.js +0 -2
- package/examples/jsm/inspector/tabs/Settings.js +4 -0
- package/examples/jsm/inspector/tabs/Timeline.js +223 -171
- package/examples/jsm/inspector/tabs/Viewer.js +515 -21
- package/examples/jsm/inspector/ui/List.js +15 -9
- package/examples/jsm/inspector/ui/Profiler.js +170 -14
- package/examples/jsm/inspector/ui/Style.js +269 -23
- package/examples/jsm/inspector/ui/Tab.js +2 -0
- package/examples/jsm/inspector/ui/Values.js +14 -2
- package/examples/jsm/interactive/HTMLMesh.js +19 -3
- package/examples/jsm/lighting/LightProbeGrid.js +484 -889
- package/examples/jsm/lighting/LightProbeGridUtils.js +107 -0
- package/examples/jsm/lighting/LightProbeGridWebGL.js +841 -0
- package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +194 -0
- package/examples/jsm/lighting/vxgi/VXGINode.js +660 -0
- package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +478 -0
- package/examples/jsm/lighting/vxgi/VXGIVolume.js +1430 -0
- package/examples/jsm/lights/SunLight.js +95 -0
- package/examples/jsm/lights/SunLightNode.js +56 -0
- package/examples/jsm/lights/SunLightShadow.js +319 -0
- package/examples/jsm/lights/SunShadowNode.js +312 -0
- package/examples/jsm/loaders/3DMLoader.js +150 -49
- package/examples/jsm/loaders/3MFLoader.js +202 -1
- package/examples/jsm/loaders/FBXLoader.js +81 -5
- package/examples/jsm/loaders/GLTFGaussianSplatLoaderExtension.js +330 -0
- package/examples/jsm/loaders/GLTFLoader.js +79 -14
- package/examples/jsm/loaders/GaussianSplatPLYLoader.js +386 -0
- package/examples/jsm/loaders/KSPLATLoader.js +463 -0
- package/examples/jsm/loaders/MaterialXLoader.js +111 -1010
- package/examples/jsm/loaders/PCDLoader.js +1 -1
- package/examples/jsm/loaders/SPLATLoader.js +139 -0
- package/examples/jsm/loaders/SPZLoader.js +561 -0
- package/examples/jsm/loaders/materialx/MaterialXArchive.js +108 -0
- package/examples/jsm/loaders/materialx/MaterialXDocument.js +878 -0
- package/examples/jsm/loaders/materialx/MaterialXHextile.js +183 -0
- package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +376 -0
- package/examples/jsm/loaders/materialx/MaterialXLog.js +75 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +4 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +1021 -0
- package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +661 -0
- package/examples/jsm/loaders/materialx/MaterialXUtils.js +57 -0
- package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +997 -0
- package/examples/jsm/loaders/materialx/parse/MaterialXParser.js +28 -0
- package/examples/jsm/loaders/usd/USDAParser.js +15 -2
- package/examples/jsm/loaders/usd/USDCParser.js +1 -4
- package/examples/jsm/loaders/usd/USDComposer.js +80 -42
- package/examples/jsm/materials/WoodNodeMaterial.js +6 -108
- package/examples/jsm/misc/RollerCoaster.js +2 -2
- package/examples/jsm/misc/SculptGL.LICENSE.txt +21 -0
- package/examples/jsm/misc/Sculptor.js +1679 -0
- package/examples/jsm/misc/SculptorMesh.js +1504 -0
- package/examples/jsm/misc/SculptorTools.js +1180 -0
- package/examples/jsm/misc/SculptorUtils.js +345 -0
- package/examples/jsm/misc/TubePainter.js +28 -16
- package/examples/jsm/misc/VolumeSlice.js +24 -24
- package/examples/jsm/modifiers/SimplifyModifier.js +63 -556
- package/examples/jsm/objects/GaussianSplat.js +1039 -0
- package/examples/jsm/objects/Sky.js +66 -45
- package/examples/jsm/objects/SkyMesh.js +70 -51
- package/examples/jsm/physics/JoltPhysics.js +1 -1
- package/examples/jsm/postprocessing/AfterimagePass.js +4 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/GTAOPass.js +1 -1
- package/examples/jsm/postprocessing/OutlinePass.js +5 -5
- package/examples/jsm/postprocessing/SAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +4 -2
- package/examples/jsm/postprocessing/SavePass.js +1 -1
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +30 -13
- package/examples/jsm/renderers/CSS2DRenderer.js +29 -5
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +1 -1
- package/examples/jsm/shaders/FilmShader.js +2 -1
- package/examples/jsm/transpiler/AST.js +21 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +498 -8
- package/examples/jsm/transpiler/TSLEncoder.js +82 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +33 -4
- package/examples/jsm/tsl/WebGLNodesHandler.js +29 -39
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +3 -2
- package/examples/jsm/tsl/display/BilateralBlurNode.js +5 -2
- package/examples/jsm/tsl/display/BloomNode.js +55 -30
- package/examples/jsm/tsl/display/DenoiseNode.js +21 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +24 -6
- package/examples/jsm/tsl/display/DotScreenNode.js +11 -11
- package/examples/jsm/tsl/display/FSR1Node.js +8 -4
- package/examples/jsm/tsl/display/GTAONode.js +199 -86
- package/examples/jsm/tsl/display/GaussianBlurNode.js +65 -52
- package/examples/jsm/tsl/display/GodraysNode.js +5 -2
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +2 -2
- package/examples/jsm/tsl/display/LensflareNode.js +5 -2
- package/examples/jsm/tsl/display/OITPassNode.js +352 -0
- package/examples/jsm/tsl/display/OutlineNode.js +2 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +3 -2
- package/examples/jsm/tsl/display/RGBShiftNode.js +9 -9
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +7 -4
- package/examples/jsm/tsl/display/RetroPassNode.js +1 -1
- package/examples/jsm/tsl/display/SMAANode.js +22 -61
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -4
- package/examples/jsm/tsl/display/SSAONode.js +436 -0
- package/examples/jsm/tsl/display/SSGINode.js +5 -2
- package/examples/jsm/tsl/display/SSRNode.js +7 -2
- package/examples/jsm/tsl/display/SSSNode.js +5 -2
- package/examples/jsm/tsl/display/SharpenNode.js +5 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -3
- package/examples/jsm/tsl/display/TAAUNode.js +22 -125
- package/examples/jsm/tsl/display/TRAANode.js +16 -142
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +21 -15
- package/examples/jsm/tsl/display/depthAwareBlur.js +63 -0
- package/examples/jsm/tsl/display/hashBlur.js +3 -2
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +38 -27
- package/examples/jsm/tsl/lighting/LightProbeGridNode.js +136 -0
- package/examples/jsm/tsl/math/voronoiNoise.js +112 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +4 -6
- package/examples/jsm/tsl/utils/Raymarching.js +5 -5
- package/examples/jsm/tsl/utils/SoftParticles.js +60 -0
- package/examples/jsm/tsl/utils/TAAUtils.js +195 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +14 -14
- package/examples/jsm/utils/GaussianSplatUtils.js +229 -0
- package/examples/jsm/utils/WebGLTextureUtils.js +1 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +2 -16
- package/examples/jsm/webxr/XRControllerModelFactory.js +16 -4
- package/package.json +9 -16
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +73 -43
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +1 -0
- package/src/animation/AnimationClip.js +15 -2
- package/src/animation/AnimationObjectGroup.js +18 -6
- package/src/animation/AnimationUtils.js +26 -0
- package/src/animation/KeyframeTrack.js +37 -0
- package/src/constants.js +23 -1
- package/src/core/BufferAttribute.js +3 -2
- package/src/core/BufferGeometry.js +1 -1
- package/src/core/InterleavedBuffer.js +5 -1
- package/src/core/Object3D.js +40 -12
- package/src/core/Raycaster.js +4 -0
- package/src/core/RenderTarget.js +99 -9
- package/src/core/RenderTarget3D.js +12 -8
- package/src/extras/Controls.js +0 -8
- package/src/extras/PMREMGenerator.js +99 -205
- package/src/geometries/TorusGeometry.js +1 -1
- package/src/helpers/ArrowHelper.js +2 -0
- package/src/helpers/AxesHelper.js +2 -0
- package/src/helpers/Box3Helper.js +2 -0
- package/src/helpers/BoxHelper.js +2 -0
- package/src/helpers/CameraHelper.js +2 -0
- package/src/helpers/DirectionalLightHelper.js +2 -0
- package/src/helpers/GridHelper.js +2 -0
- package/src/helpers/HemisphereLightHelper.js +2 -0
- package/src/helpers/PlaneHelper.js +2 -0
- package/src/helpers/PointLightHelper.js +2 -0
- package/src/helpers/PolarGridHelper.js +2 -0
- package/src/helpers/SkeletonHelper.js +2 -0
- package/src/helpers/SpotLightHelper.js +2 -0
- package/src/lights/Light.js +0 -10
- package/src/lights/LightShadow.js +43 -12
- package/src/lights/SpotLightShadow.js +18 -0
- package/src/loaders/BufferGeometryLoader.js +5 -0
- package/src/loaders/ImageBitmapLoader.js +3 -1
- package/src/loaders/ObjectLoader.js +8 -5
- package/src/materials/Material.js +80 -57
- package/src/materials/MeshPhysicalMaterial.js +32 -0
- package/src/materials/nodes/Line2NodeMaterial.js +17 -8
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +42 -5
- package/src/materials/nodes/NodeMaterial.js +19 -13
- package/src/materials/nodes/PointsNodeMaterial.js +2 -1
- package/src/materials/nodes/manager/NodeMaterialObserver.js +282 -55
- package/src/math/Frustum.js +9 -0
- package/src/math/FrustumArray.js +1 -1
- package/src/math/MathUtils.js +5 -3
- package/src/math/Matrix4.js +2 -9
- package/src/math/Plane.js +30 -1
- package/src/math/Quaternion.js +0 -10
- package/src/math/Ray.js +95 -45
- package/src/math/Triangle.js +0 -2
- package/src/math/Vector3.js +2 -2
- package/src/math/Vector4.js +0 -4
- package/src/math/interpolants/BezierInterpolant.js +36 -23
- package/src/nodes/Nodes.js +2 -0
- package/src/nodes/TSL.js +11 -3
- package/src/nodes/accessors/Batch.js +85 -13
- package/src/nodes/accessors/BufferAttributeNode.js +1 -1
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/Instance.js +19 -18
- package/src/nodes/accessors/MaterialNode.js +9 -0
- package/src/nodes/accessors/ModelNode.js +85 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -70
- package/src/nodes/accessors/ReferenceElementNode.js +72 -0
- package/src/nodes/accessors/ReferenceNode.js +1 -70
- package/src/nodes/accessors/Skinning.js +124 -12
- package/src/nodes/accessors/StorageTextureNode.js +7 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +51 -21
- package/src/nodes/accessors/TextureSizeNode.js +4 -2
- package/src/nodes/accessors/UniformArrayNode.js +30 -5
- package/src/nodes/code/CodeNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +12 -2
- package/src/nodes/core/ArrayNode.js +2 -2
- package/src/nodes/core/ContextNode.js +57 -4
- package/src/nodes/core/IndexNode.js +69 -4
- package/src/nodes/core/InspectorNode.js +2 -2
- package/src/nodes/core/MRTNode.js +44 -2
- package/src/nodes/core/Node.js +6 -3
- package/src/nodes/core/NodeBuilder.js +65 -50
- package/src/nodes/core/NodeFrame.js +11 -3
- package/src/nodes/core/NodeUtils.js +88 -0
- package/src/nodes/core/PropertyNode.js +8 -0
- package/src/nodes/core/StackNode.js +0 -1
- package/src/nodes/core/StructNode.js +4 -3
- package/src/nodes/core/UniformGroupNode.js +3 -2
- package/src/nodes/core/UniformNode.js +26 -12
- package/src/nodes/core/VarNode.js +0 -1
- package/src/nodes/display/BumpMapNode.js +2 -2
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/PassNode.js +76 -15
- package/src/nodes/display/ScreenNode.js +22 -65
- package/src/nodes/fog/Fog.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_GGX.js +6 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +1 -1
- package/src/nodes/functions/BSDF/DFGLUT.js +2 -1
- package/src/nodes/functions/BSDF/LTC.js +1 -1
- package/src/nodes/functions/PhongLightingModel.js +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +83 -25
- package/src/nodes/functions/ToonLightingModel.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +3 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +64 -13
- package/src/nodes/gpgpu/BarrierNode.js +13 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +20 -17
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +165 -37
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +44 -6
- package/src/nodes/lighting/EnvironmentNode.js +40 -4
- package/src/nodes/lighting/LightsNode.js +20 -4
- package/src/nodes/lighting/ShadowBaseNode.js +158 -1
- package/src/nodes/lighting/ShadowFilterNode.js +2 -106
- package/src/nodes/lighting/ShadowNode.js +22 -91
- package/src/nodes/materialx/{lib/mx_hsv.js → MaterialXColor.js} +3 -6
- package/src/nodes/materialx/{lib/mx_transform_color.js → MaterialXColorTransform.js} +3 -6
- package/src/nodes/materialx/MaterialXCore.js +37 -0
- package/src/nodes/materialx/MaterialXNodes.js +64 -72
- package/src/nodes/materialx/{lib/mx_noise.js → MaterialXNoise.js} +426 -197
- package/src/nodes/math/BitcountNode.js +24 -4
- package/src/nodes/math/MathNode.js +4 -4
- package/src/nodes/math/MathUtils.js +15 -4
- package/src/nodes/math/OperatorNode.js +2 -2
- package/src/nodes/math/PackFloatNode.js +29 -1
- package/src/nodes/math/Packed4x8IntegerNode.js +433 -0
- package/src/nodes/math/UnpackFloatNode.js +30 -2
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +31 -74
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLCore.js +1 -31
- package/src/nodes/utils/EventNode.js +75 -0
- package/src/nodes/utils/LoopNode.js +54 -13
- package/src/nodes/utils/PostProcessingUtils.js +23 -2
- package/src/nodes/utils/RTTNode.js +97 -32
- package/src/nodes/utils/ReflectorNode.js +8 -4
- package/src/nodes/utils/RotateNode.js +85 -8
- package/src/nodes/utils/SpriteUtils.js +58 -23
- package/src/objects/BatchedMesh.js +6 -0
- package/src/objects/InstancedMesh.js +1 -1
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +12 -0
- package/src/objects/Mesh.js +12 -0
- package/src/objects/Points.js +12 -0
- package/src/objects/Sprite.js +12 -0
- package/src/renderers/WebGLRenderer.js +93 -27
- package/src/renderers/common/Animation.js +12 -2
- package/src/renderers/common/Backend.js +38 -10
- package/src/renderers/common/BindGroup.js +0 -1
- package/src/renderers/common/Bindings.js +50 -4
- package/src/renderers/common/BundleGroup.js +4 -0
- package/src/renderers/common/ClippingContext.js +11 -1
- package/src/renderers/common/Color4.js +9 -0
- package/src/renderers/common/Constants.js +0 -5
- package/src/renderers/common/DirectRenderPipeline.js +233 -0
- package/src/renderers/common/Geometries.js +24 -3
- package/src/renderers/common/Info.js +3 -3
- package/src/renderers/common/InspectorBase.js +37 -8
- package/src/renderers/common/Lighting.js +11 -4
- package/src/renderers/common/Pipelines.js +6 -4
- package/src/renderers/common/QuadMesh.js +16 -2
- package/src/renderers/common/RenderContext.js +8 -0
- package/src/renderers/common/RenderList.js +53 -19
- package/src/renderers/common/RenderLists.js +58 -11
- package/src/renderers/common/RenderObject.js +14 -0
- package/src/renderers/common/RenderObjects.js +14 -9
- package/src/renderers/common/RenderPipeline.js +52 -44
- package/src/renderers/common/Renderer.js +226 -55
- package/src/renderers/common/Storage3DTexture.js +16 -0
- package/src/renderers/common/Textures.js +3 -3
- package/src/renderers/common/XRManager.js +79 -72
- package/src/renderers/common/extras/PMREMGenerator.js +76 -144
- package/src/renderers/common/nodes/NodeManager.js +144 -6
- package/src/renderers/common/nodes/NodeStorageBuffer.js +3 -1
- package/src/renderers/common/nodes/NodeUniformBuffer.js +3 -1
- package/src/renderers/shaders/DFGLUTData.js +2 -1
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +4 -2
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +48 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +53 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +20 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +61 -57
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +9 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +15 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
- package/src/renderers/shaders/ShaderLib.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +16 -0
- package/src/renderers/webgl/WebGLAnimation.js +2 -2
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLLights.js +74 -4
- package/src/renderers/webgl/WebGLMaterials.js +6 -0
- package/src/renderers/webgl/WebGLOutput.js +36 -24
- package/src/renderers/webgl/WebGLProgram.js +3 -0
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLRenderLists.js +6 -10
- package/src/renderers/webgl/WebGLShadowMap.js +47 -44
- package/src/renderers/webgl/WebGLTextures.js +7 -7
- package/src/renderers/webgl-fallback/WebGLBackend.js +153 -45
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +83 -29
- package/src/renderers/webgl-fallback/utils/WebGLState.js +163 -17
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +32 -5
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +11 -4
- package/src/renderers/webgpu/WebGPUBackend.js +513 -145
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +99 -20
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -12
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +24 -14
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +80 -14
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +62 -7
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +9 -3
- package/src/renderers/webgpu/utils/WebGPUUtils.js +16 -4
- package/src/renderers/webxr/WebXRManager.js +25 -2
- package/src/scenes/Scene.js +3 -3
- package/src/textures/CompressedArrayTexture.js +16 -0
- package/src/textures/Data3DTexture.js +16 -0
- package/src/textures/DataArrayTexture.js +16 -0
- package/src/textures/DepthTexture.js +3 -3
- package/src/textures/Texture.js +3 -3
- package/src/textures/{Source.js → TextureSource.js} +39 -8
- package/build/three.core.min.js +0 -6
- package/build/three.module.min.js +0 -6
- package/build/three.tsl.min.js +0 -6
- package/build/three.webgpu.min.js +0 -6
- package/build/three.webgpu.nodes.min.js +0 -6
- package/examples/jsm/libs/ecsy.module.js +0 -1792
- package/examples/jsm/loaders/LottieLoader.js +0 -130
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +0 -52
|
@@ -183,6 +183,14 @@ class WebGLRenderer {
|
|
|
183
183
|
* @type {boolean}
|
|
184
184
|
*/
|
|
185
185
|
checkShaderErrors: true,
|
|
186
|
+
/**
|
|
187
|
+
* Diagnostics configuration for the shader generation. Only relevant for TSL.
|
|
188
|
+
* @type {Object}
|
|
189
|
+
* @property {boolean} keywords - Whether declaration names that collide with reserved keywords of the shading language should be renamed or not.
|
|
190
|
+
*/
|
|
191
|
+
diagnostics: {
|
|
192
|
+
keywords: false
|
|
193
|
+
},
|
|
186
194
|
/**
|
|
187
195
|
* Callback for custom error reporting.
|
|
188
196
|
* @type {?Function}
|
|
@@ -370,6 +378,14 @@ class WebGLRenderer {
|
|
|
370
378
|
|
|
371
379
|
}
|
|
372
380
|
|
|
381
|
+
let extensions, capabilities, state, info;
|
|
382
|
+
let properties, textures, environments, attributes, geometries, objects;
|
|
383
|
+
let programCache, materials, renderLists, renderStates, clipping, shadowMap;
|
|
384
|
+
|
|
385
|
+
let background, morphtargets, bufferRenderer, indexedBufferRenderer;
|
|
386
|
+
|
|
387
|
+
let utils, bindingStates, uniformsGroups;
|
|
388
|
+
|
|
373
389
|
try {
|
|
374
390
|
|
|
375
391
|
const contextAttributes = {
|
|
@@ -413,21 +429,19 @@ class WebGLRenderer {
|
|
|
413
429
|
|
|
414
430
|
}
|
|
415
431
|
|
|
432
|
+
initGLContext();
|
|
433
|
+
|
|
416
434
|
} catch ( e ) {
|
|
417
435
|
|
|
436
|
+
canvas.removeEventListener( 'webglcontextlost', onContextLost, false );
|
|
437
|
+
canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );
|
|
438
|
+
canvas.removeEventListener( 'webglcontextcreationerror', onContextCreationError, false );
|
|
439
|
+
|
|
418
440
|
error( 'WebGLRenderer: ' + e.message );
|
|
419
441
|
throw e;
|
|
420
442
|
|
|
421
443
|
}
|
|
422
444
|
|
|
423
|
-
let extensions, capabilities, state, info;
|
|
424
|
-
let properties, textures, environments, attributes, geometries, objects;
|
|
425
|
-
let programCache, materials, renderLists, renderStates, clipping, shadowMap;
|
|
426
|
-
|
|
427
|
-
let background, morphtargets, bufferRenderer, indexedBufferRenderer;
|
|
428
|
-
|
|
429
|
-
let utils, bindingStates, uniformsGroups;
|
|
430
|
-
|
|
431
445
|
function initGLContext() {
|
|
432
446
|
|
|
433
447
|
extensions = new WebGLExtensions( _gl );
|
|
@@ -549,8 +563,6 @@ class WebGLRenderer {
|
|
|
549
563
|
|
|
550
564
|
}
|
|
551
565
|
|
|
552
|
-
initGLContext();
|
|
553
|
-
|
|
554
566
|
// initialize internal render target for non-UnsignedByteType color buffer
|
|
555
567
|
|
|
556
568
|
if ( _outputBufferType !== UnsignedByteType ) {
|
|
@@ -1346,7 +1358,11 @@ class WebGLRenderer {
|
|
|
1346
1358
|
|
|
1347
1359
|
// Compile
|
|
1348
1360
|
|
|
1349
|
-
function prepareMaterial( material, scene, object ) {
|
|
1361
|
+
function prepareMaterial( material, scene, camera, object ) {
|
|
1362
|
+
|
|
1363
|
+
if ( _nodesHandler !== null && material.isNodeMaterial ) _nodesHandler.setObject( object, material );
|
|
1364
|
+
|
|
1365
|
+
if ( _clippingEnabled === true ) clipping.setState( material, camera, false );
|
|
1350
1366
|
|
|
1351
1367
|
if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {
|
|
1352
1368
|
|
|
@@ -1383,6 +1399,7 @@ class WebGLRenderer {
|
|
|
1383
1399
|
this.compile = function ( scene, camera, targetScene = null ) {
|
|
1384
1400
|
|
|
1385
1401
|
if ( targetScene === null ) targetScene = scene;
|
|
1402
|
+
if ( _nodesHandler !== null ) _nodesHandler.renderStart( scene, camera, targetScene );
|
|
1386
1403
|
|
|
1387
1404
|
currentRenderState = renderStates.get( targetScene );
|
|
1388
1405
|
currentRenderState.init( camera );
|
|
@@ -1428,6 +1445,16 @@ class WebGLRenderer {
|
|
|
1428
1445
|
}
|
|
1429
1446
|
|
|
1430
1447
|
currentRenderState.setupLights();
|
|
1448
|
+
if ( _nodesHandler !== null ) _nodesHandler.updateLights( currentRenderState.state.lightsArray );
|
|
1449
|
+
|
|
1450
|
+
_localClippingEnabled = this.localClippingEnabled;
|
|
1451
|
+
_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );
|
|
1452
|
+
|
|
1453
|
+
if ( _clippingEnabled === true ) clipping.setGlobalState( this.clippingPlanes, camera );
|
|
1454
|
+
|
|
1455
|
+
// node materials reference the shadow map when they are built, so it must exist by now
|
|
1456
|
+
|
|
1457
|
+
if ( _nodesHandler !== null ) shadowMap.render( currentRenderState.state.shadowsArray, targetScene, camera );
|
|
1431
1458
|
|
|
1432
1459
|
// Only initialize materials in the new scene, not the targetScene.
|
|
1433
1460
|
|
|
@@ -1451,14 +1478,14 @@ class WebGLRenderer {
|
|
|
1451
1478
|
|
|
1452
1479
|
const material2 = material[ i ];
|
|
1453
1480
|
|
|
1454
|
-
prepareMaterial( material2, targetScene, object );
|
|
1481
|
+
prepareMaterial( material2, targetScene, camera, object );
|
|
1455
1482
|
materials.add( material2 );
|
|
1456
1483
|
|
|
1457
1484
|
}
|
|
1458
1485
|
|
|
1459
1486
|
} else {
|
|
1460
1487
|
|
|
1461
|
-
prepareMaterial( material, targetScene, object );
|
|
1488
|
+
prepareMaterial( material, targetScene, camera, object );
|
|
1462
1489
|
materials.add( material );
|
|
1463
1490
|
|
|
1464
1491
|
}
|
|
@@ -1468,6 +1495,7 @@ class WebGLRenderer {
|
|
|
1468
1495
|
} );
|
|
1469
1496
|
|
|
1470
1497
|
currentRenderState = renderStateStack.pop();
|
|
1498
|
+
if ( _nodesHandler !== null ) _nodesHandler.renderEnd();
|
|
1471
1499
|
|
|
1472
1500
|
return materials;
|
|
1473
1501
|
|
|
@@ -1503,9 +1531,9 @@ class WebGLRenderer {
|
|
|
1503
1531
|
const materialProperties = properties.get( material );
|
|
1504
1532
|
const program = materialProperties.currentProgram;
|
|
1505
1533
|
|
|
1506
|
-
if ( program.isReady() ) {
|
|
1534
|
+
if ( program === undefined || program.isReady() ) {
|
|
1507
1535
|
|
|
1508
|
-
//
|
|
1536
|
+
// stop waiting for materials that are ready to use or have been disposed
|
|
1509
1537
|
materials.delete( material );
|
|
1510
1538
|
|
|
1511
1539
|
}
|
|
@@ -1716,6 +1744,7 @@ class WebGLRenderer {
|
|
|
1716
1744
|
// !WITH_GENESYS
|
|
1717
1745
|
|
|
1718
1746
|
currentRenderList.finish();
|
|
1747
|
+
if ( _nodesHandler !== null ) _nodesHandler.updateLights( currentRenderState.state.lightsArray );
|
|
1719
1748
|
|
|
1720
1749
|
if ( _this.sortObjects === true ) {
|
|
1721
1750
|
|
|
@@ -1723,7 +1752,7 @@ class WebGLRenderer {
|
|
|
1723
1752
|
ProfilerService.begin( 'sortRenderList' );
|
|
1724
1753
|
// !WITH_GENESYS
|
|
1725
1754
|
|
|
1726
|
-
currentRenderList.sort( _opaqueSort, _transparentSort
|
|
1755
|
+
currentRenderList.sort( _opaqueSort, _transparentSort );
|
|
1727
1756
|
|
|
1728
1757
|
// WITH_GENESYS
|
|
1729
1758
|
ProfilerService.end( 'sortRenderList' );
|
|
@@ -1931,7 +1960,7 @@ class WebGLRenderer {
|
|
|
1931
1960
|
|
|
1932
1961
|
} else if ( object.isSprite ) {
|
|
1933
1962
|
|
|
1934
|
-
if ( ! object.frustumCulled ||
|
|
1963
|
+
if ( ! object.frustumCulled || object.intersectsFrustum( _frustum ) ) {
|
|
1935
1964
|
|
|
1936
1965
|
if ( sortObjects ) {
|
|
1937
1966
|
|
|
@@ -1945,7 +1974,7 @@ class WebGLRenderer {
|
|
|
1945
1974
|
|
|
1946
1975
|
if ( material.visible ) {
|
|
1947
1976
|
|
|
1948
|
-
currentRenderList.push( object, geometry, material, groupOrder, _vector4.z, null );
|
|
1977
|
+
currentRenderList.push( object, geometry, material, groupOrder, _vector4.z, null, camera );
|
|
1949
1978
|
|
|
1950
1979
|
}
|
|
1951
1980
|
|
|
@@ -1953,7 +1982,7 @@ class WebGLRenderer {
|
|
|
1953
1982
|
|
|
1954
1983
|
} else if ( object.isMesh || object.isLine || object.isPoints ) {
|
|
1955
1984
|
|
|
1956
|
-
if ( ! object.frustumCulled ||
|
|
1985
|
+
if ( ! object.frustumCulled || object.intersectsFrustum( _frustum ) ) {
|
|
1957
1986
|
|
|
1958
1987
|
const geometry = objects.update( object );
|
|
1959
1988
|
const material = object.material;
|
|
@@ -1989,7 +2018,7 @@ class WebGLRenderer {
|
|
|
1989
2018
|
|
|
1990
2019
|
if ( groupMaterial && groupMaterial.visible ) {
|
|
1991
2020
|
|
|
1992
|
-
currentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector4.z, group );
|
|
2021
|
+
currentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector4.z, group, camera );
|
|
1993
2022
|
|
|
1994
2023
|
}
|
|
1995
2024
|
|
|
@@ -1997,7 +2026,7 @@ class WebGLRenderer {
|
|
|
1997
2026
|
|
|
1998
2027
|
} else if ( material.visible ) {
|
|
1999
2028
|
|
|
2000
|
-
currentRenderList.push( object, geometry, material, groupOrder, _vector4.z, null );
|
|
2029
|
+
currentRenderList.push( object, geometry, material, groupOrder, _vector4.z, null, camera );
|
|
2001
2030
|
|
|
2002
2031
|
}
|
|
2003
2032
|
|
|
@@ -2070,6 +2099,8 @@ class WebGLRenderer {
|
|
|
2070
2099
|
stencilBuffer: stencil,
|
|
2071
2100
|
resolveDepthBuffer: false,
|
|
2072
2101
|
resolveStencilBuffer: false,
|
|
2102
|
+
storeMultisampledDepthBuffer: false,
|
|
2103
|
+
storeMultisampledStencilBuffer: false,
|
|
2073
2104
|
colorSpace: ColorManagement.workingColorSpace,
|
|
2074
2105
|
} );
|
|
2075
2106
|
|
|
@@ -2214,6 +2245,7 @@ class WebGLRenderer {
|
|
|
2214
2245
|
|
|
2215
2246
|
function renderObject( object, scene, camera, geometry, material, group ) {
|
|
2216
2247
|
|
|
2248
|
+
if ( _nodesHandler !== null && material.isNodeMaterial ) _nodesHandler.setObject( object, material );
|
|
2217
2249
|
object.onBeforeRender( _this, scene, camera, geometry, material, group );
|
|
2218
2250
|
|
|
2219
2251
|
object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
|
|
@@ -2334,6 +2366,8 @@ class WebGLRenderer {
|
|
|
2334
2366
|
|
|
2335
2367
|
uniforms.ambientLightColor.value = lights.state.ambient;
|
|
2336
2368
|
uniforms.lightProbe.value = lights.state.probe;
|
|
2369
|
+
uniforms.sunLights.value = lights.state.sun;
|
|
2370
|
+
uniforms.sunLightShadows.value = lights.state.sunShadow;
|
|
2337
2371
|
uniforms.directionalLights.value = lights.state.directional;
|
|
2338
2372
|
uniforms.directionalLightShadows.value = lights.state.directionalShadow;
|
|
2339
2373
|
uniforms.spotLights.value = lights.state.spot;
|
|
@@ -2345,6 +2379,8 @@ class WebGLRenderer {
|
|
|
2345
2379
|
uniforms.pointLightShadows.value = lights.state.pointShadow;
|
|
2346
2380
|
uniforms.hemisphereLights.value = lights.state.hemi;
|
|
2347
2381
|
|
|
2382
|
+
uniforms.sunShadowMatrix.value = lights.state.sunShadowMatrix;
|
|
2383
|
+
uniforms.sunShadowCascade.value = lights.state.sunShadowCascade;
|
|
2348
2384
|
uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;
|
|
2349
2385
|
uniforms.spotLightMatrix.value = lights.state.spotLightMatrix;
|
|
2350
2386
|
uniforms.spotLightMap.value = lights.state.spotLightMap;
|
|
@@ -2496,11 +2532,11 @@ class WebGLRenderer {
|
|
|
2496
2532
|
|
|
2497
2533
|
needsProgramChange = true;
|
|
2498
2534
|
|
|
2499
|
-
} else if ( object.isBatchedMesh && materialProperties.batchingColor === true && object.
|
|
2535
|
+
} else if ( object.isBatchedMesh && materialProperties.batchingColor === true && object._colorsTexture === null ) {
|
|
2500
2536
|
|
|
2501
2537
|
needsProgramChange = true;
|
|
2502
2538
|
|
|
2503
|
-
} else if ( object.isBatchedMesh && materialProperties.batchingColor === false && object.
|
|
2539
|
+
} else if ( object.isBatchedMesh && materialProperties.batchingColor === false && object._colorsTexture !== null ) {
|
|
2504
2540
|
|
|
2505
2541
|
needsProgramChange = true;
|
|
2506
2542
|
|
|
@@ -2709,6 +2745,12 @@ class WebGLRenderer {
|
|
|
2709
2745
|
if ( materialProperties.needsLights ) {
|
|
2710
2746
|
|
|
2711
2747
|
// Set shadow map uniforms first to ensure they get the first texture units
|
|
2748
|
+
if ( lights.state.sunShadowMap.length > 0 ) {
|
|
2749
|
+
|
|
2750
|
+
p_uniforms.setValue( _gl, 'sunShadowMap', lights.state.sunShadowMap, textures );
|
|
2751
|
+
|
|
2752
|
+
}
|
|
2753
|
+
|
|
2712
2754
|
if ( lights.state.directionalShadowMap.length > 0 ) {
|
|
2713
2755
|
|
|
2714
2756
|
p_uniforms.setValue( _gl, 'directionalShadowMap', lights.state.directionalShadowMap, textures );
|
|
@@ -2888,6 +2930,8 @@ class WebGLRenderer {
|
|
|
2888
2930
|
uniforms.ambientLightColor.needsUpdate = value;
|
|
2889
2931
|
uniforms.lightProbe.needsUpdate = value;
|
|
2890
2932
|
|
|
2933
|
+
uniforms.sunLights.needsUpdate = value;
|
|
2934
|
+
uniforms.sunLightShadows.needsUpdate = value;
|
|
2891
2935
|
uniforms.directionalLights.needsUpdate = value;
|
|
2892
2936
|
uniforms.directionalLightShadows.needsUpdate = value;
|
|
2893
2937
|
uniforms.pointLights.needsUpdate = value;
|
|
@@ -3147,6 +3191,23 @@ class WebGLRenderer {
|
|
|
3147
3191
|
|
|
3148
3192
|
};
|
|
3149
3193
|
|
|
3194
|
+
function getReadableState( texture ) {
|
|
3195
|
+
|
|
3196
|
+
const textureProperties = properties.get( texture );
|
|
3197
|
+
|
|
3198
|
+
if ( textureProperties.__readFormat !== texture.format || textureProperties.__readType !== texture.type ) {
|
|
3199
|
+
|
|
3200
|
+
textureProperties.__readFormat = texture.format;
|
|
3201
|
+
textureProperties.__readType = texture.type;
|
|
3202
|
+
textureProperties.__formatReadable = capabilities.textureFormatReadable( texture.format );
|
|
3203
|
+
textureProperties.__typeReadable = capabilities.textureTypeReadable( texture.type );
|
|
3204
|
+
|
|
3205
|
+
}
|
|
3206
|
+
|
|
3207
|
+
return textureProperties;
|
|
3208
|
+
|
|
3209
|
+
}
|
|
3210
|
+
|
|
3150
3211
|
/**
|
|
3151
3212
|
* Reads the pixel data from the given render target into the given buffer.
|
|
3152
3213
|
*
|
|
@@ -3190,14 +3251,16 @@ class WebGLRenderer {
|
|
|
3190
3251
|
|
|
3191
3252
|
if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
|
|
3192
3253
|
|
|
3193
|
-
|
|
3254
|
+
const readableState = getReadableState( texture );
|
|
3255
|
+
|
|
3256
|
+
if ( readableState.__formatReadable === false ) {
|
|
3194
3257
|
|
|
3195
3258
|
error( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );
|
|
3196
3259
|
return;
|
|
3197
3260
|
|
|
3198
3261
|
}
|
|
3199
3262
|
|
|
3200
|
-
if (
|
|
3263
|
+
if ( readableState.__typeReadable === false ) {
|
|
3201
3264
|
|
|
3202
3265
|
error( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );
|
|
3203
3266
|
return;
|
|
@@ -3272,14 +3335,15 @@ class WebGLRenderer {
|
|
|
3272
3335
|
|
|
3273
3336
|
if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
|
|
3274
3337
|
|
|
3338
|
+
const readableState = getReadableState( texture );
|
|
3275
3339
|
|
|
3276
|
-
if (
|
|
3340
|
+
if ( readableState.__formatReadable === false ) {
|
|
3277
3341
|
|
|
3278
3342
|
throw new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.' );
|
|
3279
3343
|
|
|
3280
3344
|
}
|
|
3281
3345
|
|
|
3282
|
-
if (
|
|
3346
|
+
if ( readableState.__typeReadable === false ) {
|
|
3283
3347
|
|
|
3284
3348
|
throw new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.' );
|
|
3285
3349
|
|
|
@@ -3290,6 +3354,7 @@ class WebGLRenderer {
|
|
|
3290
3354
|
_gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );
|
|
3291
3355
|
|
|
3292
3356
|
_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), 0 );
|
|
3357
|
+
_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, null );
|
|
3293
3358
|
|
|
3294
3359
|
// reset the frame buffer to the currently set buffer before waiting
|
|
3295
3360
|
const currFramebuffer = _currentRenderTarget !== null ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;
|
|
@@ -3305,6 +3370,7 @@ class WebGLRenderer {
|
|
|
3305
3370
|
// read the data and delete the buffer
|
|
3306
3371
|
_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );
|
|
3307
3372
|
_gl.getBufferSubData( _gl.PIXEL_PACK_BUFFER, 0, buffer );
|
|
3373
|
+
_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, null );
|
|
3308
3374
|
_gl.deleteBuffer( glBuffer );
|
|
3309
3375
|
_gl.deleteSync( sync );
|
|
3310
3376
|
|
|
@@ -72,6 +72,12 @@ class Animation {
|
|
|
72
72
|
|
|
73
73
|
this._requestId = this._context.requestAnimationFrame( update );
|
|
74
74
|
|
|
75
|
+
if ( this.renderer._inspector.isRunning ) {
|
|
76
|
+
|
|
77
|
+
this.renderer._inspector.finish();
|
|
78
|
+
|
|
79
|
+
}
|
|
80
|
+
|
|
75
81
|
if ( this.info.autoReset === true ) this.info.reset();
|
|
76
82
|
|
|
77
83
|
this.nodes.nodeFrame.update();
|
|
@@ -80,9 +86,11 @@ class Animation {
|
|
|
80
86
|
|
|
81
87
|
this.renderer._inspector.begin();
|
|
82
88
|
|
|
83
|
-
if ( this._animationLoop !== null )
|
|
89
|
+
if ( this._animationLoop !== null ) {
|
|
84
90
|
|
|
85
|
-
|
|
91
|
+
this._animationLoop( time, xrFrame );
|
|
92
|
+
|
|
93
|
+
}
|
|
86
94
|
|
|
87
95
|
};
|
|
88
96
|
|
|
@@ -95,6 +103,8 @@ class Animation {
|
|
|
95
103
|
*/
|
|
96
104
|
stop() {
|
|
97
105
|
|
|
106
|
+
if ( this.renderer._inspector.isRunning ) this.renderer._inspector.finish();
|
|
107
|
+
|
|
98
108
|
if ( this._context !== null ) this._context.cancelAnimationFrame( this._requestId );
|
|
99
109
|
|
|
100
110
|
this._requestId = null;
|
|
@@ -211,10 +211,10 @@ class Backend {
|
|
|
211
211
|
* @abstract
|
|
212
212
|
* @param {BindGroup} bindGroup - The bind group.
|
|
213
213
|
* @param {Array<BindGroup>} bindings - Array of bind groups.
|
|
214
|
-
* @param {
|
|
214
|
+
* @param {string} cacheKey - The cache key.
|
|
215
215
|
* @param {number} version - The version.
|
|
216
216
|
*/
|
|
217
|
-
createBindings( /*bindGroup, bindings,
|
|
217
|
+
createBindings( /*bindGroup, bindings, cacheKey, version*/ ) { }
|
|
218
218
|
|
|
219
219
|
/**
|
|
220
220
|
* Updates the given bind group definition.
|
|
@@ -222,10 +222,10 @@ class Backend {
|
|
|
222
222
|
* @abstract
|
|
223
223
|
* @param {BindGroup} bindGroup - The bind group.
|
|
224
224
|
* @param {Array<BindGroup>} bindings - Array of bind groups.
|
|
225
|
-
* @param {
|
|
225
|
+
* @param {string} cacheKey - The cache key.
|
|
226
226
|
* @param {number} version - The version.
|
|
227
227
|
*/
|
|
228
|
-
updateBindings( /*bindGroup, bindings,
|
|
228
|
+
updateBindings( /*bindGroup, bindings, cacheKey, version*/ ) { }
|
|
229
229
|
|
|
230
230
|
/**
|
|
231
231
|
* Updates a buffer binding.
|
|
@@ -252,8 +252,9 @@ class Backend {
|
|
|
252
252
|
* @abstract
|
|
253
253
|
* @param {ComputePipeline} computePipeline - The compute pipeline.
|
|
254
254
|
* @param {Array<BindGroup>} bindings - The bindings.
|
|
255
|
+
* @param {?Array<Promise>} [promises=null] - Optional compilation promises.
|
|
255
256
|
*/
|
|
256
|
-
createComputePipeline( /*computePipeline, bindings*/ ) { }
|
|
257
|
+
createComputePipeline( /*computePipeline, bindings, promises*/ ) { }
|
|
257
258
|
|
|
258
259
|
// cache key
|
|
259
260
|
|
|
@@ -360,7 +361,7 @@ class Backend {
|
|
|
360
361
|
* @param {number} y - The y coordinate of the copy origin.
|
|
361
362
|
* @param {number} width - The width of the copy.
|
|
362
363
|
* @param {number} height - The height of the copy.
|
|
363
|
-
* @param {number} faceIndex - The face index.
|
|
364
|
+
* @param {number} faceIndex - The cube face, depth slice or array layer index.
|
|
364
365
|
* @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.
|
|
365
366
|
*/
|
|
366
367
|
async copyTextureToBuffer( /*texture, x, y, width, height, faceIndex*/ ) {}
|
|
@@ -478,7 +479,7 @@ class Backend {
|
|
|
478
479
|
* Updates a unique identifier for the given render context that can be used
|
|
479
480
|
* to allocate resources like occlusion queries or timestamp queries.
|
|
480
481
|
*
|
|
481
|
-
* @param {RenderContext|ComputeNode} abstractRenderContext - The render context.
|
|
482
|
+
* @param {RenderContext|ComputeNode|Array<ComputeNode>} abstractRenderContext - The render context.
|
|
482
483
|
*/
|
|
483
484
|
updateTimeStampUID( abstractRenderContext ) {
|
|
484
485
|
|
|
@@ -487,7 +488,15 @@ class Backend {
|
|
|
487
488
|
|
|
488
489
|
let prefix;
|
|
489
490
|
|
|
490
|
-
|
|
491
|
+
let id = abstractRenderContext.id;
|
|
492
|
+
|
|
493
|
+
if ( Array.isArray( abstractRenderContext ) ) {
|
|
494
|
+
|
|
495
|
+
id = abstractRenderContext.map( c => c.id ).join( ',' );
|
|
496
|
+
|
|
497
|
+
prefix = 'c:' + this.renderer.info.compute.frameCalls;
|
|
498
|
+
|
|
499
|
+
} else if ( abstractRenderContext.isComputeNode === true ) {
|
|
491
500
|
|
|
492
501
|
prefix = 'c:' + this.renderer.info.compute.frameCalls;
|
|
493
502
|
|
|
@@ -497,7 +506,7 @@ class Backend {
|
|
|
497
506
|
|
|
498
507
|
}
|
|
499
508
|
|
|
500
|
-
contextData.timestampUID = prefix + ':' +
|
|
509
|
+
contextData.timestampUID = prefix + ':' + id + ':f' + frame;
|
|
501
510
|
|
|
502
511
|
}
|
|
503
512
|
|
|
@@ -729,6 +738,13 @@ class Backend {
|
|
|
729
738
|
*/
|
|
730
739
|
setScissorTest( /*boolean*/ ) { }
|
|
731
740
|
|
|
741
|
+
/**
|
|
742
|
+
* Resets the backend's internal state. A no-op for backends without a state cache (e.g. WebGPU).
|
|
743
|
+
*
|
|
744
|
+
* @abstract
|
|
745
|
+
*/
|
|
746
|
+
resetState() { }
|
|
747
|
+
|
|
732
748
|
/**
|
|
733
749
|
* Returns the clear color and alpha into a single
|
|
734
750
|
* color object.
|
|
@@ -866,7 +882,19 @@ class Backend {
|
|
|
866
882
|
*
|
|
867
883
|
* @abstract
|
|
868
884
|
*/
|
|
869
|
-
dispose() {
|
|
885
|
+
async dispose() {
|
|
886
|
+
|
|
887
|
+
for ( const queryPool of Object.values( this.timestampQueryPool ) ) {
|
|
888
|
+
|
|
889
|
+
if ( queryPool !== null ) {
|
|
890
|
+
|
|
891
|
+
await queryPool.dispose();
|
|
892
|
+
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
}
|
|
870
898
|
|
|
871
899
|
}
|
|
872
900
|
|
|
@@ -149,6 +149,43 @@ class Bindings extends DataMap {
|
|
|
149
149
|
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
+
/**
|
|
153
|
+
* Updates only the shared uniform buffers of the given render object.
|
|
154
|
+
*
|
|
155
|
+
* @param {RenderObject} renderObject - The render object.
|
|
156
|
+
*/
|
|
157
|
+
updateSharedForRender( renderObject ) {
|
|
158
|
+
|
|
159
|
+
const bindings = this.getForRender( renderObject );
|
|
160
|
+
|
|
161
|
+
for ( const bindGroup of bindings ) {
|
|
162
|
+
|
|
163
|
+
for ( const binding of bindGroup.bindings ) {
|
|
164
|
+
|
|
165
|
+
if ( ( binding.isNodeUniformsGroup === true || binding.isNodeUniformBuffer === true ) && binding.groupNode.shared === true ) {
|
|
166
|
+
|
|
167
|
+
const updatedGroup = this.nodes.updateGroup( binding );
|
|
168
|
+
|
|
169
|
+
if ( updatedGroup === false ) continue;
|
|
170
|
+
|
|
171
|
+
const updated = binding.update();
|
|
172
|
+
|
|
173
|
+
if ( updated ) {
|
|
174
|
+
|
|
175
|
+
this.backend.updateBinding( binding );
|
|
176
|
+
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if ( binding.updateRanges.length > 0 ) binding.clearUpdateRanges();
|
|
180
|
+
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
}
|
|
188
|
+
|
|
152
189
|
/**
|
|
153
190
|
* Deletes the bindings for the given compute node.
|
|
154
191
|
*
|
|
@@ -225,7 +262,7 @@ class Bindings extends DataMap {
|
|
|
225
262
|
|
|
226
263
|
// each object defines an array of bindings (ubos, textures, samplers etc.)
|
|
227
264
|
|
|
228
|
-
this.backend.createBindings( bindGroup, bindings,
|
|
265
|
+
this.backend.createBindings( bindGroup, bindings, '' );
|
|
229
266
|
|
|
230
267
|
groupData.bindGroup = bindGroup;
|
|
231
268
|
groupData.usedTimes = 1;
|
|
@@ -271,6 +308,13 @@ class Bindings extends DataMap {
|
|
|
271
308
|
|
|
272
309
|
this.backend.destroySampler( binding );
|
|
273
310
|
|
|
311
|
+
} else if ( binding.texture !== null ) {
|
|
312
|
+
|
|
313
|
+
// untrack destroyed bind group from its texture
|
|
314
|
+
|
|
315
|
+
const textureData = this.textures.get( binding.texture );
|
|
316
|
+
if ( textureData.bindGroups !== undefined ) textureData.bindGroups.delete( bindGroup );
|
|
317
|
+
|
|
274
318
|
}
|
|
275
319
|
|
|
276
320
|
binding.release();
|
|
@@ -315,7 +359,7 @@ class Bindings extends DataMap {
|
|
|
315
359
|
|
|
316
360
|
let needsBindingsUpdate = false;
|
|
317
361
|
let cacheBindings = true;
|
|
318
|
-
let
|
|
362
|
+
let cacheKey = '';
|
|
319
363
|
let version = 0;
|
|
320
364
|
|
|
321
365
|
// iterate over all bindings and check if buffer updates or a new binding group is required
|
|
@@ -348,6 +392,8 @@ class Bindings extends DataMap {
|
|
|
348
392
|
|
|
349
393
|
}
|
|
350
394
|
|
|
395
|
+
cacheKey += attribute.id + ',';
|
|
396
|
+
|
|
351
397
|
}
|
|
352
398
|
|
|
353
399
|
if ( binding.isUniformBuffer ) {
|
|
@@ -399,7 +445,7 @@ class Bindings extends DataMap {
|
|
|
399
445
|
|
|
400
446
|
} else {
|
|
401
447
|
|
|
402
|
-
|
|
448
|
+
cacheKey += texture.id + ',';
|
|
403
449
|
version += texture.version;
|
|
404
450
|
|
|
405
451
|
}
|
|
@@ -452,7 +498,7 @@ class Bindings extends DataMap {
|
|
|
452
498
|
|
|
453
499
|
if ( needsBindingsUpdate === true ) {
|
|
454
500
|
|
|
455
|
-
this.backend.updateBindings( bindGroup, bindings, cacheBindings ?
|
|
501
|
+
this.backend.updateBindings( bindGroup, bindings, cacheBindings ? cacheKey : '', version );
|
|
456
502
|
|
|
457
503
|
}
|
|
458
504
|
|
|
@@ -6,6 +6,10 @@ import { Group } from '../../objects/Group.js';
|
|
|
6
6
|
* are considered as one render bundle and processed as such by
|
|
7
7
|
* the renderer.
|
|
8
8
|
*
|
|
9
|
+
* Only renderable 3D objects are allowed in a bundle group. Other
|
|
10
|
+
* types like lights are not supported and must be added to the scene
|
|
11
|
+
* outside of the group.
|
|
12
|
+
*
|
|
9
13
|
* This module is only fully supported by `WebGPURenderer` with a WebGPU backend.
|
|
10
14
|
* With a WebGL backend, the group can technically be rendered but without
|
|
11
15
|
* any performance improvements.
|
|
@@ -5,6 +5,8 @@ import { Vector4 } from '../../math/Vector4.js';
|
|
|
5
5
|
|
|
6
6
|
const _plane = /*@__PURE__*/ new Plane();
|
|
7
7
|
|
|
8
|
+
let _clippingContextId = 0;
|
|
9
|
+
|
|
8
10
|
/**
|
|
9
11
|
* Represents the state that is used to perform clipping via clipping planes.
|
|
10
12
|
* There is a default clipping context for each render context. When the
|
|
@@ -22,6 +24,14 @@ class ClippingContext {
|
|
|
22
24
|
*/
|
|
23
25
|
constructor( parentContext = null ) {
|
|
24
26
|
|
|
27
|
+
/**
|
|
28
|
+
* The id of the clipping context.
|
|
29
|
+
*
|
|
30
|
+
* @type {number}
|
|
31
|
+
* @readonly
|
|
32
|
+
*/
|
|
33
|
+
this.id = _clippingContextId ++;
|
|
34
|
+
|
|
25
35
|
/**
|
|
26
36
|
* The clipping context's version.
|
|
27
37
|
*
|
|
@@ -222,7 +232,7 @@ class ClippingContext {
|
|
|
222
232
|
if ( update ) {
|
|
223
233
|
|
|
224
234
|
this.version ++;
|
|
225
|
-
this.cacheKey = `${ this.intersectionPlanes.length }:${ this.unionPlanes.length }`;
|
|
235
|
+
this.cacheKey = `${ this.id }:${ this.intersectionPlanes.length }:${ this.unionPlanes.length }`;
|
|
226
236
|
|
|
227
237
|
}
|
|
228
238
|
|