@unikia/upe-renderer 0.186.110 → 0.187.11
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 +5 -7
- package/UPSTREAM.md +4 -4
- package/build/three.core.js +853 -277
- package/build/three.module.js +1098 -1280
- package/build/three.tsl.js +41938 -686
- package/build/three.webgpu.js +10604 -49055
- package/build/three.webgpu.nodes.js +9249 -5788
- package/examples/jsm/Addons.js +2 -0
- package/examples/jsm/animation/CCDIKSolver.js +17 -5
- package/examples/jsm/controls/FirstPersonControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +27 -14
- package/examples/jsm/csm/CSMShader.js +74 -3
- package/examples/jsm/curves/CurveExtras.js +4 -4
- package/examples/jsm/curves/NURBSCurve.js +14 -0
- package/examples/jsm/exporters/EXRExporter.js +673 -16
- package/examples/jsm/exporters/GLTFExporter.js +4 -4
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/OBJExporter.js +48 -5
- package/examples/jsm/exporters/PLYExporter.js +22 -11
- package/examples/jsm/generators/CityGenerator.js +3 -2
- package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
- package/examples/jsm/gpgpu/BitonicSort.js +30 -23
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
- package/examples/jsm/inspector/Extension.js +1 -1
- package/examples/jsm/inspector/Inspector.js +6 -46
- package/examples/jsm/inspector/RendererInspector.js +43 -8
- package/examples/jsm/inspector/Storage.js +49 -0
- package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
- package/examples/jsm/inspector/tabs/Parameters.js +5 -1
- package/examples/jsm/inspector/tabs/Performance.js +22 -7
- package/examples/jsm/inspector/tabs/Settings.js +1 -1
- package/examples/jsm/inspector/tabs/Timeline.js +83 -7
- package/examples/jsm/inspector/tabs/Viewer.js +25 -10
- package/examples/jsm/inspector/ui/Profiler.js +1 -1
- package/examples/jsm/inspector/ui/Style.js +21 -53
- package/examples/jsm/inspector/ui/Values.js +28 -3
- package/examples/jsm/libs/fflate.module.js +83 -56
- package/examples/jsm/libs/mikktspace.README.md +27 -0
- package/examples/jsm/libs/mikktspace.module.js +721 -109
- package/examples/jsm/lighting/ClusteredLighting.js +100 -2
- package/examples/jsm/lighting/LightMapper.js +295 -0
- package/examples/jsm/lighting/LightProbeGrid.js +242 -139
- package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
- package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
- package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
- package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
- package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
- package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
- package/examples/jsm/lights/SunLight.js +9 -4
- package/examples/jsm/lights/SunLightNode.js +3 -3
- package/examples/jsm/lines/LineMaterial.js +26 -10
- package/examples/jsm/loaders/3DMLoader.js +10 -1
- package/examples/jsm/loaders/3MFLoader.js +5 -1
- package/examples/jsm/loaders/AMFLoader.js +2 -0
- package/examples/jsm/loaders/BVHLoader.js +2 -0
- package/examples/jsm/loaders/ColladaLoader.js +8 -0
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +5 -1
- package/examples/jsm/loaders/EXRLoader.js +120 -104
- package/examples/jsm/loaders/FBXLoader.js +4 -0
- package/examples/jsm/loaders/FontLoader.js +2 -0
- package/examples/jsm/loaders/GCodeLoader.js +5 -9
- package/examples/jsm/loaders/GLTFLoader.js +112 -31
- package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
- package/examples/jsm/loaders/IESLoader.js +46 -12
- package/examples/jsm/loaders/JXLLoader.js +159 -0
- package/examples/jsm/loaders/KMZLoader.js +6 -0
- package/examples/jsm/loaders/KSPLATLoader.js +2 -0
- package/examples/jsm/loaders/KTX2Loader.js +49 -4
- package/examples/jsm/loaders/KTXLoader.js +5 -3
- package/examples/jsm/loaders/LDrawLoader.js +15 -22
- package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
- package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
- package/examples/jsm/loaders/LUTImageLoader.js +2 -0
- package/examples/jsm/loaders/LWOLoader.js +6 -0
- package/examples/jsm/loaders/MD2Loader.js +2 -0
- package/examples/jsm/loaders/MDDLoader.js +4 -0
- package/examples/jsm/loaders/MTLLoader.js +8 -0
- package/examples/jsm/loaders/MaterialXLoader.js +57 -5
- package/examples/jsm/loaders/NRRDLoader.js +4 -2
- package/examples/jsm/loaders/OBJLoader.js +10 -4
- package/examples/jsm/loaders/PCDLoader.js +6 -2
- package/examples/jsm/loaders/PDBLoader.js +5 -3
- package/examples/jsm/loaders/PLYLoader.js +39 -15
- package/examples/jsm/loaders/PVRLoader.js +2 -2
- package/examples/jsm/loaders/SPLATLoader.js +2 -0
- package/examples/jsm/loaders/SPZLoader.js +2 -0
- package/examples/jsm/loaders/STLLoader.js +3 -1
- package/examples/jsm/loaders/SVGLoader.js +27 -49
- package/examples/jsm/loaders/TDSLoader.js +4 -0
- package/examples/jsm/loaders/TGALoader.js +6 -5
- package/examples/jsm/loaders/TTFLoader.js +2 -0
- package/examples/jsm/loaders/USDLoader.js +14 -0
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
- package/examples/jsm/loaders/VOXLoader.js +3 -0
- package/examples/jsm/loaders/VRMLLoader.js +4 -0
- package/examples/jsm/loaders/VTKLoader.js +2 -0
- package/examples/jsm/loaders/XYZLoader.js +2 -0
- package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
- package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
- package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
- package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
- package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
- package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
- package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
- package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
- package/examples/jsm/loaders/usd/USDAParser.js +56 -47
- package/examples/jsm/loaders/usd/USDComposer.js +25 -30
- package/examples/jsm/math/ColorConverter.js +7 -3
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/OBB.js +3 -3
- package/examples/jsm/math/Octree.js +20 -17
- package/examples/jsm/objects/GaussianSplat.js +5 -4
- package/examples/jsm/objects/Reflector.js +5 -0
- package/examples/jsm/objects/SkyMesh.js +14 -7
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/physics/RapierPhysics.js +2 -2
- package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
- package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
- package/examples/jsm/postprocessing/BokehPass.js +1 -1
- package/examples/jsm/postprocessing/GTAOPass.js +26 -18
- package/examples/jsm/renderers/SVGRenderer.js +3 -2
- package/examples/jsm/shaders/GTAOShader.js +7 -4
- package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
- package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
- package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
- package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
- package/examples/jsm/tsl/display/BloomNode.js +3 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
- package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
- package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
- package/examples/jsm/tsl/display/FSR1Node.js +3 -3
- package/examples/jsm/tsl/display/FXAANode.js +3 -10
- package/examples/jsm/tsl/display/FilmNode.js +3 -3
- package/examples/jsm/tsl/display/GTAONode.js +33 -25
- package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
- package/examples/jsm/tsl/display/GodraysNode.js +5 -19
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
- package/examples/jsm/tsl/display/LensflareNode.js +3 -3
- package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
- package/examples/jsm/tsl/display/OITPassNode.js +0 -11
- package/examples/jsm/tsl/display/OutlineNode.js +107 -5
- package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
- package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
- package/examples/jsm/tsl/display/SMAANode.js +3 -3
- package/examples/jsm/tsl/display/SSAONode.js +6 -20
- package/examples/jsm/tsl/display/SSGINode.js +36 -29
- package/examples/jsm/tsl/display/SSRNode.js +135 -63
- package/examples/jsm/tsl/display/SSSNode.js +6 -20
- package/examples/jsm/tsl/display/SharpenNode.js +3 -3
- package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
- package/examples/jsm/tsl/display/TAAUNode.js +10 -42
- package/examples/jsm/tsl/display/TRAANode.js +11 -43
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
- package/examples/jsm/tsl/display/TransitionNode.js +3 -3
- package/examples/jsm/tsl/display/lensDirt.js +30 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
- package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
- package/examples/jsm/tsl/utils/Raymarching.js +1 -1
- package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
- package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
- package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
- package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
- package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -1
- package/examples/jsm/utils/SceneUtils.js +1 -1
- package/examples/jsm/utils/unwrapUVs.js +865 -0
- package/examples/jsm/webxr/XREstimatedLight.js +11 -4
- package/package.json +3 -3
- package/src/Three.TSL.js +2 -683
- package/src/Three.WebGPU.Nodes.js +2 -1
- package/src/Three.WebGPU.js +2 -1
- package/src/animation/AnimationAction.js +1 -1
- package/src/animation/AnimationUtils.js +1 -3
- package/src/animation/KeyframeTrack.js +19 -0
- package/src/cameras/ArrayCamera.js +12 -0
- package/src/cameras/CubeCamera.js +3 -3
- package/src/constants.js +1 -9
- package/src/core/BufferAttribute.js +57 -21
- package/src/core/BufferGeometry.js +5 -13
- package/src/core/Clock.js +1 -1
- package/src/core/InterleavedBuffer.js +28 -18
- package/src/core/InterleavedBufferAttribute.js +54 -20
- package/src/core/Object3D.js +19 -9
- package/src/core/Raycaster.js +2 -0
- package/src/core/RenderTarget.js +11 -5
- package/src/core/UniformsGroup.js +7 -3
- package/src/extras/PMREMGenerator.js +392 -685
- package/src/extras/core/Curve.js +4 -0
- package/src/extras/core/CurvePath.js +13 -0
- package/src/extras/core/ShapePath.js +1 -1
- package/src/geometries/EdgesGeometry.js +12 -10
- package/src/geometries/LatheGeometry.js +2 -0
- package/src/helpers/PolarGridHelper.js +1 -1
- package/src/lights/Light.js +11 -0
- package/src/lights/LightProbe.js +2 -0
- package/src/lights/LightShadow.js +2 -0
- package/src/loaders/AnimationLoader.js +2 -0
- package/src/loaders/AudioLoader.js +2 -0
- package/src/loaders/BufferGeometryLoader.js +2 -0
- package/src/loaders/CompressedTextureLoader.js +2 -0
- package/src/loaders/CubeTextureLoader.js +2 -0
- package/src/loaders/DataTextureLoader.js +2 -0
- package/src/loaders/FileLoader.js +2 -0
- package/src/loaders/ImageBitmapLoader.js +3 -1
- package/src/loaders/ImageLoader.js +1 -0
- package/src/loaders/Loader.js +47 -0
- package/src/loaders/MaterialLoader.js +2 -0
- package/src/loaders/ObjectLoader.js +27 -8
- package/src/loaders/TextureLoader.js +5 -3
- package/src/loaders/nodes/NodeLoader.js +2 -0
- package/src/materials/Material.js +21 -2
- package/src/materials/MeshDepthMaterial.js +1 -1
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +1 -1
- package/src/materials/MeshMatcapMaterial.js +1 -1
- package/src/materials/MeshNormalMaterial.js +1 -1
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +90 -11
- package/src/materials/MeshStandardMaterial.js +1 -1
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +32 -10
- package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
- package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
- package/src/materials/nodes/NodeMaterial.js +36 -16
- package/src/materials/nodes/NodeMaterialInstance.js +193 -0
- package/src/materials/nodes/NodeMaterials.js +1 -0
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
- package/src/math/Box3.js +2 -2
- package/src/math/Color.js +8 -8
- package/src/math/ColorManagement.js +2 -21
- package/src/math/FrustumArray.js +12 -0
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +2 -4
- package/src/math/MathUtils.js +33 -46
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +1 -1
- package/src/math/Matrix4.js +1 -1
- package/src/math/Triangle.js +2 -1
- package/src/math/Vector2.js +1 -1
- package/src/math/Vector3.js +1 -1
- package/src/math/Vector4.js +1 -1
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +2 -0
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/Batch.js +29 -23
- package/src/nodes/accessors/BufferAttributeNode.js +21 -1
- package/src/nodes/accessors/BuiltinNode.js +6 -0
- package/src/nodes/accessors/Camera.js +100 -93
- package/src/nodes/accessors/ClippingNode.js +17 -6
- package/src/nodes/accessors/CubeTextureNode.js +12 -24
- package/src/nodes/accessors/Instance.js +198 -160
- package/src/nodes/accessors/Lights.js +19 -6
- package/src/nodes/accessors/MaterialNode.js +33 -4
- package/src/nodes/accessors/Morph.js +81 -22
- package/src/nodes/accessors/Normal.js +0 -42
- package/src/nodes/accessors/Object3DNode.js +6 -0
- package/src/nodes/accessors/PointUVNode.js +6 -0
- package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
- package/src/nodes/accessors/ReferenceNode.js +6 -0
- package/src/nodes/accessors/Skinning.js +57 -52
- package/src/nodes/accessors/StorageBufferNode.js +3 -12
- package/src/nodes/accessors/TextureBicubic.js +30 -27
- package/src/nodes/accessors/TextureNode.js +164 -78
- package/src/nodes/accessors/TextureSizeNode.js +6 -0
- package/src/nodes/accessors/UniformArrayNode.js +8 -15
- package/src/nodes/accessors/VelocityNode.js +13 -8
- package/src/nodes/code/CodeNode.js +6 -0
- package/src/nodes/code/ExpressionNode.js +6 -0
- package/src/nodes/code/FunctionCallNode.js +3 -3
- package/src/nodes/code/FunctionNode.js +15 -13
- package/src/nodes/core/ArrayNode.js +3 -3
- package/src/nodes/core/AssignNode.js +10 -9
- package/src/nodes/core/AttributeNode.js +39 -0
- package/src/nodes/core/BypassNode.js +6 -0
- package/src/nodes/core/ConstNode.js +31 -1
- package/src/nodes/core/ContextNode.js +11 -6
- package/src/nodes/core/IndexNode.js +6 -0
- package/src/nodes/core/InputNode.js +6 -0
- package/src/nodes/core/InspectorNode.js +17 -31
- package/src/nodes/core/IsolateNode.js +8 -0
- package/src/nodes/core/Node.js +367 -67
- package/src/nodes/core/NodeBuilder.js +664 -222
- package/src/nodes/core/NodeUtils.js +25 -0
- package/src/nodes/core/NodeVar.js +10 -1
- package/src/nodes/core/OutputStructNode.js +6 -0
- package/src/nodes/core/OverrideContextNode.js +38 -37
- package/src/nodes/core/PropertyNode.js +14 -0
- package/src/nodes/core/StackNode.js +33 -21
- package/src/nodes/core/StructNode.js +6 -0
- package/src/nodes/core/StructTypeNode.js +6 -0
- package/src/nodes/core/SubBuildNode.js +8 -0
- package/src/nodes/core/TempNode.js +10 -35
- package/src/nodes/core/UniformGroupNode.js +6 -0
- package/src/nodes/core/VarNode.js +43 -135
- package/src/nodes/core/VaryingNode.js +33 -2
- package/src/nodes/display/BlendModes.js +5 -40
- package/src/nodes/display/BumpMapNode.js +17 -7
- package/src/nodes/display/ColorAdjustment.js +22 -10
- package/src/nodes/display/ColorSpaceFunctions.js +2 -14
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +6 -0
- package/src/nodes/display/NormalMapNode.js +3 -3
- package/src/nodes/display/PassNode.js +75 -16
- package/src/nodes/display/RenderOutputNode.js +22 -5
- package/src/nodes/display/ScreenNode.js +6 -0
- package/src/nodes/display/ToneMappingFunctions.js +9 -51
- package/src/nodes/display/ToneMappingNode.js +3 -3
- package/src/nodes/display/ToonOutlinePassNode.js +66 -2
- package/src/nodes/display/ViewportDepthNode.js +34 -4
- package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
- package/src/nodes/functions/BSDF/D_GGX.js +1 -8
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
- package/src/nodes/functions/BSDF/LTC.js +20 -47
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
- package/src/nodes/functions/PhysicalLightingModel.js +84 -51
- package/src/nodes/functions/VolumetricLightingModel.js +1 -1
- package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
- package/src/nodes/functions/material/getRoughness.js +3 -1
- package/src/nodes/geometry/RangeNode.js +52 -69
- package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
- package/src/nodes/gpgpu/BarrierNode.js +6 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
- package/src/nodes/gpgpu/ComputeNode.js +6 -0
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
- package/src/nodes/lighting/AnalyticLightNode.js +7 -14
- package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
- package/src/nodes/lighting/EnvironmentNode.js +58 -8
- package/src/nodes/lighting/IESSpotLightNode.js +19 -4
- package/src/nodes/lighting/LightProbeNode.js +2 -1
- package/src/nodes/lighting/LightUtils.js +2 -2
- package/src/nodes/lighting/LightingNode.js +6 -0
- package/src/nodes/lighting/LightsNode.js +26 -32
- package/src/nodes/lighting/PointShadowNode.js +92 -48
- package/src/nodes/lighting/ProjectorLightNode.js +1 -1
- package/src/nodes/lighting/RectAreaLightNode.js +13 -14
- package/src/nodes/lighting/ShadowBaseNode.js +9 -17
- package/src/nodes/lighting/ShadowFilterNode.js +26 -3
- package/src/nodes/lighting/ShadowNode.js +13 -11
- package/src/nodes/materialx/MaterialXColor.js +2 -14
- package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
- package/src/nodes/materialx/MaterialXNodes.js +8 -11
- package/src/nodes/materialx/MaterialXNoise.js +195 -454
- package/src/nodes/math/BitcastNode.js +5 -5
- package/src/nodes/math/BitcountNode.js +18 -46
- package/src/nodes/math/ConditionalNode.js +92 -22
- package/src/nodes/math/Hash.js +1 -1
- package/src/nodes/math/MathNode.js +86 -64
- package/src/nodes/math/MathUtils.js +2 -2
- package/src/nodes/math/OperatorNode.js +42 -59
- package/src/nodes/math/PackFloatNode.js +9 -9
- package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
- package/src/nodes/math/TriNoise3D.js +3 -23
- package/src/nodes/math/UnpackFloatNode.js +9 -9
- package/src/nodes/pmrem/PMREMNode.js +38 -75
- package/src/nodes/pmrem/PMREMUtils.js +108 -272
- package/src/nodes/procedural/Checker.js +1 -1
- package/src/nodes/tsl/TSLCore.js +199 -74
- package/src/nodes/utils/ArrayElementNode.js +19 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +2 -2
- package/src/nodes/utils/EventNode.js +6 -0
- package/src/nodes/utils/FlipNode.js +3 -3
- package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +14 -9
- package/src/nodes/utils/MemberNode.js +18 -0
- package/src/nodes/utils/PostProcessingUtils.js +20 -25
- package/src/nodes/utils/RTTNode.js +2 -0
- package/src/nodes/utils/ReflectorNode.js +24 -0
- package/src/nodes/utils/RotateNode.js +3 -3
- package/src/nodes/utils/SampleNode.js +6 -0
- package/src/nodes/utils/SetNode.js +3 -3
- package/src/nodes/utils/SplitNode.js +6 -0
- package/src/nodes/utils/UVUtils.js +2 -2
- package/src/objects/BatchedMesh.js +146 -15
- package/src/objects/InstancedMesh.js +12 -4
- package/src/objects/Line.js +20 -0
- package/src/objects/Mesh.js +8 -0
- package/src/objects/Points.js +20 -0
- package/src/objects/Skeleton.js +26 -0
- package/src/objects/SkinnedMesh.js +3 -3
- package/src/objects/Sprite.js +10 -0
- package/src/renderers/WebGLRenderer.js +104 -70
- package/src/renderers/common/Animation.js +5 -1
- package/src/renderers/common/Attributes.js +67 -57
- package/src/renderers/common/Backend.js +78 -3
- package/src/renderers/common/BindGroup.js +11 -0
- package/src/renderers/common/Binding.js +0 -11
- package/src/renderers/common/Bindings.js +116 -10
- package/src/renderers/common/Buffer.js +1 -1
- package/src/renderers/common/ClippingContext.js +12 -1
- package/src/renderers/common/ComputePipeline.js +17 -1
- package/src/renderers/common/DirectRenderPipeline.js +7 -3
- package/src/renderers/common/Geometries.js +170 -132
- package/src/renderers/common/Info.js +1 -1
- package/src/renderers/common/InspectorBase.js +5 -5
- package/src/renderers/common/Lighting.js +59 -0
- package/src/renderers/common/Pipelines.js +26 -12
- package/src/renderers/common/ProgrammableStage.js +1 -17
- package/src/renderers/common/RenderContext.js +21 -0
- package/src/renderers/common/RenderContexts.js +13 -4
- package/src/renderers/common/RenderObject.js +111 -35
- package/src/renderers/common/RenderObjects.js +37 -19
- package/src/renderers/common/Renderer.js +537 -295
- package/src/renderers/common/RendererUtils.js +15 -0
- package/src/renderers/common/StandardDrawingPipeline.js +343 -0
- package/src/renderers/common/Storage3DTexture.js +11 -0
- package/src/renderers/common/StorageArrayTexture.js +10 -0
- package/src/renderers/common/StorageTexture.js +0 -9
- package/src/renderers/common/Textures.js +144 -37
- package/src/renderers/common/UniformsGroup.js +19 -0
- package/src/renderers/common/XRManager.js +10 -91
- package/src/renderers/common/extras/PMREMGenerator.js +298 -576
- package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
- package/src/renderers/common/nodes/NodeLibrary.js +11 -35
- package/src/renderers/common/nodes/NodeManager.js +80 -31
- package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
- package/src/renderers/common/nodes/NodeSampler.js +14 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
- package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk.js +0 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
- package/src/renderers/shaders/ShaderLib.js +3 -0
- package/src/renderers/shaders/UniformsLib.js +4 -5
- package/src/renderers/webgl/WebGLBackground.js +3 -3
- package/src/renderers/webgl/WebGLBindingStates.js +4 -2
- package/src/renderers/webgl/WebGLCapabilities.js +7 -1
- package/src/renderers/webgl/WebGLEnvironments.js +2 -2
- package/src/renderers/webgl/WebGLGeometries.js +42 -14
- package/src/renderers/webgl/WebGLMaterials.js +15 -2
- package/src/renderers/webgl/WebGLOutput.js +37 -1
- package/src/renderers/webgl/WebGLProgram.js +13 -54
- package/src/renderers/webgl/WebGLPrograms.js +22 -8
- package/src/renderers/webgl/WebGLRenderStates.js +11 -8
- package/src/renderers/webgl/WebGLShadowMap.js +6 -4
- package/src/renderers/webgl/WebGLState.js +10 -6
- package/src/renderers/webgl/WebGLTextures.js +129 -77
- package/src/renderers/webgl/WebGLUniforms.js +44 -6
- package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
- package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
- package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
- package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
- package/src/renderers/webgpu/WebGPUBackend.js +140 -82
- package/src/renderers/webgpu/WebGPURenderer.js +1 -1
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
- package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
- package/src/renderers/webxr/WebXRController.js +3 -3
- package/src/renderers/webxr/WebXRManager.js +5 -90
- package/src/scenes/Scene.js +4 -4
- package/src/textures/CompressedTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -2
- package/src/textures/FramebufferTexture.js +11 -0
- package/src/textures/Texture.js +29 -1
- package/src/textures/TextureSource.js +1 -1
- package/src/upe.js +1 -1
- package/src/utils.js +4 -4
- package/examples/jsm/libs/surfaceNet.js +0 -201
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
|
@@ -41,42 +41,46 @@ function getWireframeId( geometry ) {
|
|
|
41
41
|
*/
|
|
42
42
|
function getWireframeIndex( geometry ) {
|
|
43
43
|
|
|
44
|
-
const indices = [];
|
|
45
|
-
|
|
46
44
|
const geometryIndex = geometry.index;
|
|
47
45
|
const geometryPosition = geometry.attributes.position;
|
|
46
|
+
const count = geometryIndex !== null ? geometryIndex.array.length : ( geometryPosition.array.length / 3 ) - 1;
|
|
47
|
+
|
|
48
|
+
const IndexBufferAttribute = geometryPosition.count >= 65535 ? Uint32BufferAttribute : Uint16BufferAttribute;
|
|
49
|
+
const attribute = new IndexBufferAttribute( Math.ceil( count / 3 ) * 6, 1 );
|
|
50
|
+
const indices = attribute.array;
|
|
48
51
|
|
|
49
52
|
if ( geometryIndex !== null ) {
|
|
50
53
|
|
|
51
54
|
const array = geometryIndex.array;
|
|
52
55
|
|
|
53
|
-
for ( let i = 0,
|
|
56
|
+
for ( let i = 0, j = 0; i < count; i += 3 ) {
|
|
54
57
|
|
|
55
58
|
const a = array[ i + 0 ];
|
|
56
59
|
const b = array[ i + 1 ];
|
|
57
60
|
const c = array[ i + 2 ];
|
|
58
61
|
|
|
59
|
-
indices
|
|
62
|
+
indices[ j ++ ] = a; indices[ j ++ ] = b;
|
|
63
|
+
indices[ j ++ ] = b; indices[ j ++ ] = c;
|
|
64
|
+
indices[ j ++ ] = c; indices[ j ++ ] = a;
|
|
60
65
|
|
|
61
66
|
}
|
|
62
67
|
|
|
63
68
|
} else {
|
|
64
69
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
for ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {
|
|
70
|
+
for ( let i = 0, j = 0; i < count; i += 3 ) {
|
|
68
71
|
|
|
69
72
|
const a = i + 0;
|
|
70
73
|
const b = i + 1;
|
|
71
74
|
const c = i + 2;
|
|
72
75
|
|
|
73
|
-
indices
|
|
76
|
+
indices[ j ++ ] = a; indices[ j ++ ] = b;
|
|
77
|
+
indices[ j ++ ] = b; indices[ j ++ ] = c;
|
|
78
|
+
indices[ j ++ ] = c; indices[ j ++ ] = a;
|
|
74
79
|
|
|
75
80
|
}
|
|
76
81
|
|
|
77
82
|
}
|
|
78
83
|
|
|
79
|
-
const attribute = new ( geometryPosition.count >= 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );
|
|
80
84
|
attribute.version = getWireframeVersion( geometry );
|
|
81
85
|
attribute.__id = getWireframeId( geometry );
|
|
82
86
|
|
|
@@ -84,6 +88,69 @@ function getWireframeIndex( geometry ) {
|
|
|
84
88
|
|
|
85
89
|
}
|
|
86
90
|
|
|
91
|
+
/**
|
|
92
|
+
* What of each instanced mesh's instance attribute is on the GPU: the version it was last sent at,
|
|
93
|
+
* and how many of its values were sent.
|
|
94
|
+
*
|
|
95
|
+
* @private
|
|
96
|
+
* @type {WeakMap<BufferAttribute, {version: number, end: number}>}
|
|
97
|
+
*/
|
|
98
|
+
const _sentInstances = /*@__PURE__*/ new WeakMap();
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Limits what goes to the GPU of an instanced mesh's `instanceMatrix` or `instanceColor` to the
|
|
102
|
+
* instances it draws (`count`), not its whole capacity: a change flagged without update ranges
|
|
103
|
+
* sends that prefix, so a culler refilling the first few hundred of thousands of slots sends those.
|
|
104
|
+
* When the mesh comes to draw more, the rest goes up before the draw, as it stands then.
|
|
105
|
+
*
|
|
106
|
+
* @private
|
|
107
|
+
* @param {BufferAttribute} attribute - The instance attribute.
|
|
108
|
+
* @param {InstancedMesh} mesh - The mesh drawing with it.
|
|
109
|
+
*/
|
|
110
|
+
function sendDrawnInstances( attribute, mesh ) {
|
|
111
|
+
|
|
112
|
+
const length = attribute.array.length;
|
|
113
|
+
const drawn = Math.min( mesh.count, attribute.count ) * attribute.itemSize;
|
|
114
|
+
|
|
115
|
+
let sent = _sentInstances.get( attribute );
|
|
116
|
+
|
|
117
|
+
if ( sent === undefined ) {
|
|
118
|
+
|
|
119
|
+
// The first upload sends all of it.
|
|
120
|
+
_sentInstances.set( attribute, { version: attribute.version, end: length } );
|
|
121
|
+
return;
|
|
122
|
+
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if ( sent.version !== attribute.version ) {
|
|
126
|
+
|
|
127
|
+
sent.version = attribute.version;
|
|
128
|
+
|
|
129
|
+
if ( attribute.updateRanges.length > 0 ) return;
|
|
130
|
+
|
|
131
|
+
if ( drawn < length ) {
|
|
132
|
+
|
|
133
|
+
// The drawn prefix; with nothing drawn, an empty range rather than none (which sends all).
|
|
134
|
+
attribute.addUpdateRange( 0, drawn );
|
|
135
|
+
sent.end = drawn;
|
|
136
|
+
|
|
137
|
+
} else {
|
|
138
|
+
|
|
139
|
+
sent.end = length;
|
|
140
|
+
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
} else if ( sent.end < drawn ) {
|
|
144
|
+
|
|
145
|
+
attribute.clearUpdateRanges();
|
|
146
|
+
attribute.addUpdateRange( sent.end, drawn - sent.end );
|
|
147
|
+
sent.end = drawn;
|
|
148
|
+
sent.version = ++ attribute.version;
|
|
149
|
+
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
}
|
|
153
|
+
|
|
87
154
|
/**
|
|
88
155
|
* This renderer module manages geometries.
|
|
89
156
|
*
|
|
@@ -95,13 +162,21 @@ class Geometries extends DataMap {
|
|
|
95
162
|
/**
|
|
96
163
|
* Constructs a new geometry management component.
|
|
97
164
|
*
|
|
165
|
+
* @param {Backend} backend - The renderer's backend.
|
|
98
166
|
* @param {Attributes} attributes - Renderer component for managing attributes.
|
|
99
167
|
* @param {Info} info - Renderer component for managing metrics and monitoring data.
|
|
100
168
|
*/
|
|
101
|
-
constructor( attributes, info ) {
|
|
169
|
+
constructor( backend, attributes, info ) {
|
|
102
170
|
|
|
103
171
|
super();
|
|
104
172
|
|
|
173
|
+
/**
|
|
174
|
+
* The renderer's backend.
|
|
175
|
+
*
|
|
176
|
+
* @type {Backend}
|
|
177
|
+
*/
|
|
178
|
+
this.backend = backend;
|
|
179
|
+
|
|
105
180
|
/**
|
|
106
181
|
* Renderer component for managing attributes.
|
|
107
182
|
*
|
|
@@ -132,34 +207,32 @@ class Geometries extends DataMap {
|
|
|
132
207
|
this.attributeCall = new WeakMap();
|
|
133
208
|
|
|
134
209
|
/**
|
|
135
|
-
* Stores the
|
|
210
|
+
* Stores weak references to the geometries with attached
|
|
211
|
+
* `dispose` event listeners.
|
|
136
212
|
*
|
|
137
213
|
* @private
|
|
138
|
-
* @type {
|
|
214
|
+
* @type {Set<WeakRef<BufferGeometry>>}
|
|
139
215
|
*/
|
|
140
|
-
this.
|
|
216
|
+
this._tracked = new Set();
|
|
141
217
|
|
|
142
218
|
/**
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
* every render object drawing it.
|
|
219
|
+
* Removes weak references from `_tracked` when their geometry
|
|
220
|
+
* has been garbage collected without an explicit `dispose()`.
|
|
146
221
|
*
|
|
147
222
|
* @private
|
|
148
|
-
* @type {
|
|
223
|
+
* @type {FinalizationRegistry}
|
|
149
224
|
*/
|
|
150
|
-
this.
|
|
225
|
+
this._registry = new FinalizationRegistry( ( ref ) => this._tracked.delete( ref ) );
|
|
151
226
|
|
|
152
227
|
}
|
|
153
228
|
|
|
154
229
|
/**
|
|
155
|
-
* Returns `true` if the given
|
|
230
|
+
* Returns `true` if the given geometry is initialized.
|
|
156
231
|
*
|
|
157
|
-
* @param {
|
|
158
|
-
* @return {boolean} Whether if the given
|
|
232
|
+
* @param {BufferGeometry} geometry - The geometry.
|
|
233
|
+
* @return {boolean} Whether if the given geometry is initialized or not.
|
|
159
234
|
*/
|
|
160
|
-
has(
|
|
161
|
-
|
|
162
|
-
const geometry = renderObject.geometry;
|
|
235
|
+
has( geometry ) {
|
|
163
236
|
|
|
164
237
|
return super.has( geometry ) && this.get( geometry ).initialized === true;
|
|
165
238
|
|
|
@@ -172,37 +245,28 @@ class Geometries extends DataMap {
|
|
|
172
245
|
*/
|
|
173
246
|
updateForRender( renderObject ) {
|
|
174
247
|
|
|
175
|
-
|
|
248
|
+
const geometry = renderObject.geometry;
|
|
249
|
+
|
|
250
|
+
if ( this.has( geometry ) === false ) this.initGeometry( geometry );
|
|
176
251
|
|
|
177
252
|
this.updateAttributes( renderObject );
|
|
178
253
|
|
|
179
254
|
}
|
|
180
255
|
|
|
181
256
|
/**
|
|
182
|
-
* Initializes the
|
|
257
|
+
* Initializes the given geometry.
|
|
183
258
|
*
|
|
184
|
-
* @param {
|
|
259
|
+
* @param {BufferGeometry} geometry - The geometry.
|
|
185
260
|
*/
|
|
186
|
-
initGeometry(
|
|
261
|
+
initGeometry( geometry ) {
|
|
187
262
|
|
|
188
|
-
const geometry = renderObject.geometry;
|
|
189
263
|
const geometryData = this.get( geometry );
|
|
190
264
|
|
|
191
265
|
geometryData.initialized = true;
|
|
192
266
|
|
|
193
267
|
this.info.memory.geometries ++;
|
|
194
268
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
const previous = this._geometryDisposeListeners.get( geometry );
|
|
198
|
-
|
|
199
|
-
if ( previous !== undefined ) geometry.removeEventListener( 'dispose', previous );
|
|
200
|
-
|
|
201
|
-
// The listener holds the geometry and nothing drawn with it: holding the first render object
|
|
202
|
-
// (as three.js did) kept that object, and through its parents its whole scene, alive for as
|
|
203
|
-
// long as a shared geometry lived.
|
|
204
|
-
|
|
205
|
-
const onDispose = () => {
|
|
269
|
+
geometryData.onDispose = () => {
|
|
206
270
|
|
|
207
271
|
this.info.memory.geometries --;
|
|
208
272
|
|
|
@@ -220,7 +284,7 @@ class Geometries extends DataMap {
|
|
|
220
284
|
|
|
221
285
|
for ( const attribute of Object.values( geometry.attributes ) ) {
|
|
222
286
|
|
|
223
|
-
this.attributes.delete( attribute );
|
|
287
|
+
this.attributes.delete( this.backend.getBufferAttribute( attribute ) );
|
|
224
288
|
|
|
225
289
|
}
|
|
226
290
|
|
|
@@ -234,81 +298,24 @@ class Geometries extends DataMap {
|
|
|
234
298
|
|
|
235
299
|
}
|
|
236
300
|
|
|
237
|
-
// node attributes of the render objects drawing this geometry (`BufferAttribute.dispose()`
|
|
238
|
-
// and `Renderer.releaseObject()` free them one by one)
|
|
239
|
-
|
|
240
|
-
const users = this._users.get( geometry );
|
|
241
|
-
|
|
242
|
-
if ( users !== undefined ) {
|
|
243
|
-
|
|
244
|
-
const currentAttributes = new Set( Object.values( geometry.attributes ) );
|
|
245
|
-
|
|
246
|
-
for ( const renderObject of users ) {
|
|
247
|
-
|
|
248
|
-
// drawn ones only (render objects clear their attribute list on this same event,
|
|
249
|
-
// so it's built again from their node state)
|
|
250
|
-
|
|
251
|
-
if ( ! renderObject._nodeBuilderState ) continue;
|
|
252
|
-
|
|
253
|
-
for ( const attribute of renderObject.getAttributes() ) {
|
|
254
|
-
|
|
255
|
-
if ( currentAttributes.has( attribute ) === false ) {
|
|
256
|
-
|
|
257
|
-
this.attributes.delete( attribute );
|
|
258
|
-
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
}
|
|
266
|
-
|
|
267
301
|
//
|
|
268
302
|
|
|
269
|
-
geometry.removeEventListener( 'dispose', onDispose );
|
|
303
|
+
geometry.removeEventListener( 'dispose', geometryData.onDispose );
|
|
270
304
|
|
|
271
|
-
this.
|
|
305
|
+
this._tracked.delete( geometryData.ref );
|
|
306
|
+
this._registry.unregister( geometryData.ref );
|
|
272
307
|
|
|
273
308
|
this.delete( geometry );
|
|
274
309
|
|
|
275
310
|
};
|
|
276
311
|
|
|
277
|
-
geometry.addEventListener( 'dispose', onDispose );
|
|
312
|
+
geometry.addEventListener( 'dispose', geometryData.onDispose );
|
|
278
313
|
|
|
279
314
|
// see #31798 why tracking separate remove listeners is required right now
|
|
280
|
-
|
|
281
|
-
this._geometryDisposeListeners.set( geometry, onDispose );
|
|
282
|
-
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
* Records that a render object draws a geometry.
|
|
287
|
-
*
|
|
288
|
-
* @param {RenderObject} renderObject - The render object.
|
|
289
|
-
* @param {BufferGeometry} geometry - The geometry it draws.
|
|
290
|
-
*/
|
|
291
|
-
addUser( renderObject, geometry ) {
|
|
292
|
-
|
|
293
|
-
let users = this._users.get( geometry );
|
|
315
|
+
geometryData.ref = new WeakRef( geometry );
|
|
294
316
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
users.add( renderObject );
|
|
298
|
-
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
/**
|
|
302
|
-
* Records that a render object no longer draws a geometry.
|
|
303
|
-
*
|
|
304
|
-
* @param {RenderObject} renderObject - The render object.
|
|
305
|
-
* @param {BufferGeometry} geometry - The geometry it drew.
|
|
306
|
-
*/
|
|
307
|
-
removeUser( renderObject, geometry ) {
|
|
308
|
-
|
|
309
|
-
const users = this._users.get( geometry );
|
|
310
|
-
|
|
311
|
-
if ( users !== undefined ) users.delete( renderObject );
|
|
317
|
+
this._tracked.add( geometryData.ref );
|
|
318
|
+
this._registry.register( geometry, geometryData.ref, geometryData.ref );
|
|
312
319
|
|
|
313
320
|
}
|
|
314
321
|
|
|
@@ -322,6 +329,7 @@ class Geometries extends DataMap {
|
|
|
322
329
|
// attributes
|
|
323
330
|
|
|
324
331
|
const attributes = renderObject.getAttributes();
|
|
332
|
+
const object = renderObject.object;
|
|
325
333
|
|
|
326
334
|
for ( const attribute of attributes ) {
|
|
327
335
|
|
|
@@ -331,6 +339,14 @@ class Geometries extends DataMap {
|
|
|
331
339
|
|
|
332
340
|
} else {
|
|
333
341
|
|
|
342
|
+
if ( object.isInstancedMesh === true ) {
|
|
343
|
+
|
|
344
|
+
const bufferAttribute = this.backend.getBufferAttribute( attribute );
|
|
345
|
+
|
|
346
|
+
if ( bufferAttribute === object.instanceMatrix || bufferAttribute === object.instanceColor ) sendDrawnInstances( bufferAttribute, object );
|
|
347
|
+
|
|
348
|
+
}
|
|
349
|
+
|
|
334
350
|
this.updateAttribute( attribute, AttributeType.VERTEX );
|
|
335
351
|
|
|
336
352
|
}
|
|
@@ -369,33 +385,13 @@ class Geometries extends DataMap {
|
|
|
369
385
|
|
|
370
386
|
const callId = this.info.render.calls;
|
|
371
387
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
if ( this.attributeCall.get( attribute ) !== callId ) {
|
|
375
|
-
|
|
376
|
-
this.attributes.update( attribute, type );
|
|
377
|
-
|
|
378
|
-
this.attributeCall.set( attribute, callId );
|
|
379
|
-
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
} else {
|
|
383
|
-
|
|
384
|
-
if ( this.attributeCall.get( attribute ) === undefined ) {
|
|
385
|
-
|
|
386
|
-
this.attributes.update( attribute, type );
|
|
388
|
+
const bufferAttribute = this.backend.getBufferAttribute( attribute );
|
|
387
389
|
|
|
388
|
-
|
|
390
|
+
if ( this.attributeCall.get( bufferAttribute ) !== callId ) {
|
|
389
391
|
|
|
390
|
-
|
|
392
|
+
this.attributes.update( bufferAttribute, type );
|
|
391
393
|
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
this.attributeCall.set( attribute.data, callId );
|
|
395
|
-
|
|
396
|
-
this.attributeCall.set( attribute, callId );
|
|
397
|
-
|
|
398
|
-
}
|
|
394
|
+
this.attributeCall.set( bufferAttribute, callId );
|
|
399
395
|
|
|
400
396
|
}
|
|
401
397
|
|
|
@@ -468,15 +464,57 @@ class Geometries extends DataMap {
|
|
|
468
464
|
|
|
469
465
|
}
|
|
470
466
|
|
|
467
|
+
/**
|
|
468
|
+
* Deletes the attributes that are defined via nodes and not on geometry level.
|
|
469
|
+
*
|
|
470
|
+
* @param {RenderObject} renderObject - The render object.
|
|
471
|
+
*/
|
|
472
|
+
deleteNodeAttributes( renderObject ) {
|
|
473
|
+
|
|
474
|
+
const currentAttributes = new Set( Object.values( renderObject.geometry.attributes ) );
|
|
475
|
+
|
|
476
|
+
for ( const attribute of renderObject.getAttributes() ) {
|
|
477
|
+
|
|
478
|
+
if ( currentAttributes.has( attribute ) === false ) {
|
|
479
|
+
|
|
480
|
+
this.attributes.delete( this.backend.getBufferAttribute( attribute ) );
|
|
481
|
+
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* Deletes the vertex state for the given render object.
|
|
490
|
+
*
|
|
491
|
+
* @param {RenderObject} renderObject - The render object.
|
|
492
|
+
*/
|
|
493
|
+
deleteVertexState( renderObject ) {
|
|
494
|
+
|
|
495
|
+
this.backend.deleteVertexState( renderObject );
|
|
496
|
+
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
/**
|
|
500
|
+
* Frees internal resources.
|
|
501
|
+
*/
|
|
471
502
|
dispose() {
|
|
472
503
|
|
|
473
|
-
for ( const
|
|
504
|
+
for ( const ref of this._tracked ) {
|
|
505
|
+
|
|
506
|
+
const geometry = ref.deref();
|
|
474
507
|
|
|
475
|
-
|
|
508
|
+
if ( geometry === undefined ) continue;
|
|
509
|
+
|
|
510
|
+
const geometryData = this.get( geometry );
|
|
511
|
+
geometryData.onDispose();
|
|
476
512
|
|
|
477
513
|
}
|
|
478
514
|
|
|
479
|
-
this.
|
|
515
|
+
this._tracked.clear();
|
|
516
|
+
|
|
517
|
+
super.dispose();
|
|
480
518
|
|
|
481
519
|
}
|
|
482
520
|
|
|
@@ -479,7 +479,7 @@ class Info {
|
|
|
479
479
|
let size = width * height * depth * bytesPerPixel;
|
|
480
480
|
const mipmaps = texture.mipmaps;
|
|
481
481
|
|
|
482
|
-
if ( mipmaps
|
|
482
|
+
if ( mipmaps.length > 0 ) {
|
|
483
483
|
|
|
484
484
|
let mipmapSize = 0;
|
|
485
485
|
for ( let i = 0; i < mipmaps.length; i ++ ) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EventDispatcher } from '../../core/EventDispatcher.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* InspectorBase is the base class for all inspectors.
|
|
4
|
+
* InspectorBase is the base class for all inspectors. Can only be used with {@link WebGPURenderer}.
|
|
5
5
|
*
|
|
6
6
|
* @augments EventDispatcher
|
|
7
7
|
*/
|
|
@@ -17,7 +17,7 @@ class InspectorBase extends EventDispatcher {
|
|
|
17
17
|
/**
|
|
18
18
|
* The renderer associated with this inspector.
|
|
19
19
|
*
|
|
20
|
-
* @type {
|
|
20
|
+
* @type {Renderer}
|
|
21
21
|
* @private
|
|
22
22
|
*/
|
|
23
23
|
this._renderer = null;
|
|
@@ -61,7 +61,7 @@ class InspectorBase extends EventDispatcher {
|
|
|
61
61
|
/**
|
|
62
62
|
* Sets the renderer for this inspector.
|
|
63
63
|
*
|
|
64
|
-
* @param {
|
|
64
|
+
* @param {Renderer} renderer - The renderer to associate with this inspector.
|
|
65
65
|
* @return {InspectorBase} This inspector instance.
|
|
66
66
|
*/
|
|
67
67
|
setRenderer( renderer ) {
|
|
@@ -75,7 +75,7 @@ class InspectorBase extends EventDispatcher {
|
|
|
75
75
|
/**
|
|
76
76
|
* Returns the renderer associated with this inspector.
|
|
77
77
|
*
|
|
78
|
-
* @return {
|
|
78
|
+
* @return {Renderer} The associated renderer.
|
|
79
79
|
*/
|
|
80
80
|
getRenderer() {
|
|
81
81
|
|
|
@@ -138,7 +138,7 @@ class InspectorBase extends EventDispatcher {
|
|
|
138
138
|
* @param {string} uid - A unique identifier for the render context.
|
|
139
139
|
* @param {Scene} scene - The scene being rendered.
|
|
140
140
|
* @param {Camera} camera - The camera being used for rendering.
|
|
141
|
-
* @param {?
|
|
141
|
+
* @param {?RenderTarget} renderTarget - The render target, if any.
|
|
142
142
|
*/
|
|
143
143
|
beginRender( /*uid, scene, camera, renderTarget*/ ) { }
|
|
144
144
|
|
|
@@ -42,6 +42,24 @@ class Lighting {
|
|
|
42
42
|
*/
|
|
43
43
|
this._lightsNodeMap = new WeakMap();
|
|
44
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Weak references to the lights nodes created by this lighting manager, so they
|
|
47
|
+
* can be disposed with {@link Lighting#dispose} without keeping scenes alive.
|
|
48
|
+
*
|
|
49
|
+
* @private
|
|
50
|
+
* @type {Set<WeakRef<LightsNode>>}
|
|
51
|
+
*/
|
|
52
|
+
this._tracked = new Set();
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Removes weak references from `_tracked` when their lights node has been
|
|
56
|
+
* garbage collected without an explicit `dispose()`.
|
|
57
|
+
*
|
|
58
|
+
* @private
|
|
59
|
+
* @type {FinalizationRegistry}
|
|
60
|
+
*/
|
|
61
|
+
this._registry = new FinalizationRegistry( ( ref ) => this._tracked.delete( ref ) );
|
|
62
|
+
|
|
45
63
|
}
|
|
46
64
|
|
|
47
65
|
/**
|
|
@@ -73,6 +91,7 @@ class Lighting {
|
|
|
73
91
|
|
|
74
92
|
node = this.createNode();
|
|
75
93
|
this._lightsNodeMap.set( scene, node );
|
|
94
|
+
this._track( node );
|
|
76
95
|
|
|
77
96
|
}
|
|
78
97
|
|
|
@@ -80,6 +99,22 @@ class Lighting {
|
|
|
80
99
|
|
|
81
100
|
}
|
|
82
101
|
|
|
102
|
+
/**
|
|
103
|
+
* Tracks the given lights node so it is disposed with {@link Lighting#dispose}.
|
|
104
|
+
* Subclasses creating additional lights nodes should track them as well.
|
|
105
|
+
*
|
|
106
|
+
* @private
|
|
107
|
+
* @param {LightsNode} node - The lights node.
|
|
108
|
+
*/
|
|
109
|
+
_track( node ) {
|
|
110
|
+
|
|
111
|
+
const ref = new WeakRef( node );
|
|
112
|
+
|
|
113
|
+
this._tracked.add( ref );
|
|
114
|
+
this._registry.register( node, ref, ref );
|
|
115
|
+
|
|
116
|
+
}
|
|
117
|
+
|
|
83
118
|
/**
|
|
84
119
|
* Saves the current lights of the scene's lights node so they can be restored
|
|
85
120
|
* in {@link Lighting#finishRender}. Must be paired with a `finishRender()` call
|
|
@@ -107,6 +142,30 @@ class Lighting {
|
|
|
107
142
|
|
|
108
143
|
}
|
|
109
144
|
|
|
145
|
+
/**
|
|
146
|
+
* Frees the resources of the lights nodes created by this lighting manager. Called by
|
|
147
|
+
* the renderer when it is disposed, or by the app after replacing the lighting system.
|
|
148
|
+
* The lighting manager must not be used for rendering anymore after this call.
|
|
149
|
+
*/
|
|
150
|
+
dispose() {
|
|
151
|
+
|
|
152
|
+
for ( const ref of this._tracked ) {
|
|
153
|
+
|
|
154
|
+
const node = ref.deref();
|
|
155
|
+
|
|
156
|
+
if ( node !== undefined ) {
|
|
157
|
+
|
|
158
|
+
this._registry.unregister( ref );
|
|
159
|
+
node.dispose();
|
|
160
|
+
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
this._tracked.clear();
|
|
166
|
+
|
|
167
|
+
}
|
|
168
|
+
|
|
110
169
|
}
|
|
111
170
|
|
|
112
171
|
export default Lighting;
|
|
@@ -111,9 +111,7 @@ class Pipelines extends DataMap {
|
|
|
111
111
|
|
|
112
112
|
if ( stageCompute === undefined ) {
|
|
113
113
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
stageCompute = new ProgrammableStage( nodeBuilderState.computeShader, 'compute', computeNode.name, nodeBuilderState.transforms, nodeBuilderState.nodeAttributes );
|
|
114
|
+
stageCompute = new ProgrammableStage( nodeBuilderState.computeShader, 'compute', computeNode.name );
|
|
117
115
|
this.programs.compute.set( nodeBuilderState.computeShader, stageCompute );
|
|
118
116
|
|
|
119
117
|
backend.createProgram( stageCompute );
|
|
@@ -129,8 +127,6 @@ class Pipelines extends DataMap {
|
|
|
129
127
|
|
|
130
128
|
if ( pipeline === undefined ) {
|
|
131
129
|
|
|
132
|
-
if ( previousPipeline && previousPipeline.usedTimes === 0 ) this._releasePipeline( previousPipeline );
|
|
133
|
-
|
|
134
130
|
pipeline = this._getComputePipeline( computeNode, stageCompute, cacheKey, bindings, promises );
|
|
135
131
|
|
|
136
132
|
}
|
|
@@ -140,6 +136,15 @@ class Pipelines extends DataMap {
|
|
|
140
136
|
pipeline.usedTimes ++;
|
|
141
137
|
stageCompute.usedTimes ++;
|
|
142
138
|
|
|
139
|
+
// release previous pipeline and program if they are not used anymore
|
|
140
|
+
|
|
141
|
+
if ( previousPipeline ) {
|
|
142
|
+
|
|
143
|
+
if ( previousPipeline.usedTimes === 0 ) this._releasePipeline( previousPipeline );
|
|
144
|
+
if ( previousPipeline.computeProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.computeProgram );
|
|
145
|
+
|
|
146
|
+
}
|
|
147
|
+
|
|
143
148
|
//
|
|
144
149
|
|
|
145
150
|
data.version = computeNode.version;
|
|
@@ -188,8 +193,6 @@ class Pipelines extends DataMap {
|
|
|
188
193
|
|
|
189
194
|
if ( stageVertex === undefined ) {
|
|
190
195
|
|
|
191
|
-
if ( previousPipeline && previousPipeline.vertexProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.vertexProgram );
|
|
192
|
-
|
|
193
196
|
stageVertex = new ProgrammableStage( nodeBuilderState.vertexShader, 'vertex', name );
|
|
194
197
|
this.programs.vertex.set( nodeBuilderState.vertexShader, stageVertex );
|
|
195
198
|
|
|
@@ -202,8 +205,6 @@ class Pipelines extends DataMap {
|
|
|
202
205
|
|
|
203
206
|
if ( stageFragment === undefined ) {
|
|
204
207
|
|
|
205
|
-
if ( previousPipeline && previousPipeline.fragmentProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.fragmentProgram );
|
|
206
|
-
|
|
207
208
|
stageFragment = new ProgrammableStage( nodeBuilderState.fragmentShader, 'fragment', name );
|
|
208
209
|
this.programs.fragment.set( nodeBuilderState.fragmentShader, stageFragment );
|
|
209
210
|
|
|
@@ -220,8 +221,6 @@ class Pipelines extends DataMap {
|
|
|
220
221
|
|
|
221
222
|
if ( pipeline === undefined ) {
|
|
222
223
|
|
|
223
|
-
if ( previousPipeline && previousPipeline.usedTimes === 0 ) this._releasePipeline( previousPipeline );
|
|
224
|
-
|
|
225
224
|
pipeline = this._getRenderPipeline( renderObject, stageVertex, stageFragment, cacheKey, promises );
|
|
226
225
|
|
|
227
226
|
} else {
|
|
@@ -236,6 +235,16 @@ class Pipelines extends DataMap {
|
|
|
236
235
|
stageVertex.usedTimes ++;
|
|
237
236
|
stageFragment.usedTimes ++;
|
|
238
237
|
|
|
238
|
+
// release previous pipeline and programs if they are not used anymore
|
|
239
|
+
|
|
240
|
+
if ( previousPipeline ) {
|
|
241
|
+
|
|
242
|
+
if ( previousPipeline.usedTimes === 0 ) this._releasePipeline( previousPipeline );
|
|
243
|
+
if ( previousPipeline.vertexProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.vertexProgram );
|
|
244
|
+
if ( previousPipeline.fragmentProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.fragmentProgram );
|
|
245
|
+
|
|
246
|
+
}
|
|
247
|
+
|
|
239
248
|
//
|
|
240
249
|
|
|
241
250
|
data.pipeline = pipeline;
|
|
@@ -356,7 +365,9 @@ class Pipelines extends DataMap {
|
|
|
356
365
|
|
|
357
366
|
if ( pipeline === undefined ) {
|
|
358
367
|
|
|
359
|
-
|
|
368
|
+
const { transforms, nodeAttributes } = this.nodes.getForCompute( computeNode );
|
|
369
|
+
|
|
370
|
+
pipeline = new ComputePipeline( cacheKey, stageCompute, transforms, nodeAttributes );
|
|
360
371
|
|
|
361
372
|
this.caches.set( cacheKey, pipeline );
|
|
362
373
|
|
|
@@ -444,6 +455,8 @@ class Pipelines extends DataMap {
|
|
|
444
455
|
*/
|
|
445
456
|
_releasePipeline( pipeline ) {
|
|
446
457
|
|
|
458
|
+
this.backend.destroyPipeline( pipeline );
|
|
459
|
+
|
|
447
460
|
this.caches.delete( pipeline.cacheKey );
|
|
448
461
|
|
|
449
462
|
}
|
|
@@ -461,6 +474,7 @@ class Pipelines extends DataMap {
|
|
|
461
474
|
|
|
462
475
|
this.programs[ stage ].delete( code );
|
|
463
476
|
|
|
477
|
+
this.backend.destroyProgram( program );
|
|
464
478
|
this.info.destroyProgram( program );
|
|
465
479
|
|
|
466
480
|
}
|