@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
|
@@ -3,42 +3,14 @@ import { AttributeType } from './Constants.js';
|
|
|
3
3
|
|
|
4
4
|
import { DynamicDrawUsage } from '../../constants.js';
|
|
5
5
|
|
|
6
|
+
let _generation = 0;
|
|
7
|
+
|
|
6
8
|
/**
|
|
7
9
|
* This renderer module manages geometry attributes.
|
|
8
10
|
*
|
|
9
11
|
* @private
|
|
10
12
|
* @augments DataMap
|
|
11
13
|
*/
|
|
12
|
-
/**
|
|
13
|
-
* The attribute components of the renderers alive, held weakly. An attribute's dispose listener is
|
|
14
|
-
* this one shared function, which holds no renderer: a module-level geometry or attribute never
|
|
15
|
-
* keeps a disposed renderer from being collected, and attributes dropped without `dispose()` cost
|
|
16
|
-
* nothing to track.
|
|
17
|
-
*
|
|
18
|
-
* @private
|
|
19
|
-
* @type {Set<WeakRef<Attributes>>}
|
|
20
|
-
*/
|
|
21
|
-
const _instances = new Set();
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Frees an attribute's GPU buffer in every renderer that holds one when `dispose()` is called on it.
|
|
25
|
-
*
|
|
26
|
-
* @private
|
|
27
|
-
* @param {Object} event - The dispose event.
|
|
28
|
-
*/
|
|
29
|
-
function onAttributeDispose( event ) {
|
|
30
|
-
|
|
31
|
-
for ( const ref of _instances ) {
|
|
32
|
-
|
|
33
|
-
const attributes = ref.deref();
|
|
34
|
-
|
|
35
|
-
if ( attributes === undefined ) _instances.delete( ref );
|
|
36
|
-
else attributes.delete( event.target );
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
42
14
|
class Attributes extends DataMap {
|
|
43
15
|
|
|
44
16
|
/**
|
|
@@ -65,14 +37,39 @@ class Attributes extends DataMap {
|
|
|
65
37
|
*/
|
|
66
38
|
this.info = info;
|
|
67
39
|
|
|
68
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Stores weak references to the buffer attributes with attached
|
|
42
|
+
* `dispose` event listeners.
|
|
43
|
+
*
|
|
44
|
+
* @private
|
|
45
|
+
* @type {Set<WeakRef<BufferAttribute>>}
|
|
46
|
+
*/
|
|
47
|
+
this._tracked = new Set();
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Removes weak references from `_tracked` when their attribute
|
|
51
|
+
* has been garbage collected without an explicit `dispose()`.
|
|
52
|
+
*
|
|
53
|
+
* @private
|
|
54
|
+
* @type {FinalizationRegistry}
|
|
55
|
+
*/
|
|
56
|
+
this._registry = new FinalizationRegistry( ( ref ) => this._tracked.delete( ref ) );
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Incremented whenever the buffer of an attribute is destroyed. Render objects
|
|
60
|
+
* only have to verify their attributes if this version has changed.
|
|
61
|
+
*
|
|
62
|
+
* @type {number}
|
|
63
|
+
* @default 0
|
|
64
|
+
*/
|
|
65
|
+
this.disposeVersion = 0;
|
|
69
66
|
|
|
70
67
|
}
|
|
71
68
|
|
|
72
69
|
/**
|
|
73
70
|
* Deletes the data for the given attribute.
|
|
74
71
|
*
|
|
75
|
-
* @param {BufferAttribute} attribute - The attribute.
|
|
72
|
+
* @param {BufferAttribute|InterleavedBuffer} attribute - The attribute.
|
|
76
73
|
* @return {?Object} The deleted attribute data.
|
|
77
74
|
*/
|
|
78
75
|
delete( attribute ) {
|
|
@@ -81,7 +78,16 @@ class Attributes extends DataMap {
|
|
|
81
78
|
|
|
82
79
|
if ( attributeData !== null ) {
|
|
83
80
|
|
|
84
|
-
|
|
81
|
+
this.disposeVersion ++;
|
|
82
|
+
|
|
83
|
+
if ( attribute.isBufferAttribute === true ) {
|
|
84
|
+
|
|
85
|
+
attribute.removeEventListener( 'dispose', attributeData.onDispose );
|
|
86
|
+
|
|
87
|
+
this._tracked.delete( attributeData.ref );
|
|
88
|
+
this._registry.unregister( attributeData.ref );
|
|
89
|
+
|
|
90
|
+
}
|
|
85
91
|
|
|
86
92
|
this.backend.destroyAttribute( attribute );
|
|
87
93
|
|
|
@@ -97,7 +103,7 @@ class Attributes extends DataMap {
|
|
|
97
103
|
* Updates the given attribute. This method creates attribute buffers
|
|
98
104
|
* for new attributes and updates data for existing ones.
|
|
99
105
|
*
|
|
100
|
-
* @param {BufferAttribute} attribute - The attribute to update.
|
|
106
|
+
* @param {BufferAttribute|InterleavedBuffer} attribute - The attribute to update.
|
|
101
107
|
* @param {number} type - The attribute type.
|
|
102
108
|
*/
|
|
103
109
|
update( attribute, type ) {
|
|
@@ -128,29 +134,39 @@ class Attributes extends DataMap {
|
|
|
128
134
|
|
|
129
135
|
}
|
|
130
136
|
|
|
131
|
-
data.version =
|
|
137
|
+
data.version = attribute.version;
|
|
138
|
+
data.generation = _generation ++;
|
|
132
139
|
|
|
133
|
-
//
|
|
140
|
+
// interleaved buffer attributes are not event dispatchers
|
|
134
141
|
|
|
135
142
|
if ( attribute.isBufferAttribute === true ) {
|
|
136
143
|
|
|
137
|
-
|
|
138
|
-
|
|
144
|
+
data.onDispose = () => {
|
|
145
|
+
|
|
146
|
+
this.delete( attribute );
|
|
147
|
+
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
attribute.addEventListener( 'dispose', data.onDispose );
|
|
151
|
+
|
|
152
|
+
// see #31798 why tracking separate remove listeners is required right now
|
|
153
|
+
data.ref = new WeakRef( attribute );
|
|
154
|
+
|
|
155
|
+
this._tracked.add( data.ref );
|
|
156
|
+
this._registry.register( attribute, data.ref, data.ref );
|
|
139
157
|
|
|
140
158
|
}
|
|
141
159
|
|
|
142
160
|
} else {
|
|
143
161
|
|
|
144
|
-
const bufferAttribute = this._getBufferAttribute( attribute );
|
|
145
|
-
|
|
146
162
|
// Sent when its version moves (`needsUpdate`), as WebGLRenderer does, whatever its usage: a
|
|
147
163
|
// dynamic buffer went up whole every frame. Only a buffer made around a plain array, which
|
|
148
164
|
// has no version its owner can move, still goes up every frame when dynamic.
|
|
149
|
-
if ( data.version <
|
|
165
|
+
if ( data.version < attribute.version || ( attribute.usage === DynamicDrawUsage && attribute.uploadEveryFrame === true ) ) {
|
|
150
166
|
|
|
151
167
|
this.backend.updateAttribute( attribute );
|
|
152
168
|
|
|
153
|
-
data.version =
|
|
169
|
+
data.version = attribute.version;
|
|
154
170
|
|
|
155
171
|
}
|
|
156
172
|
|
|
@@ -158,27 +174,21 @@ class Attributes extends DataMap {
|
|
|
158
174
|
|
|
159
175
|
}
|
|
160
176
|
|
|
161
|
-
/**
|
|
162
|
-
* Stops freeing buffers on `BufferAttribute.dispose()`, when the renderer is disposed.
|
|
163
|
-
*/
|
|
164
177
|
dispose() {
|
|
165
178
|
|
|
166
|
-
|
|
179
|
+
for ( const ref of this._tracked ) {
|
|
167
180
|
|
|
168
|
-
|
|
181
|
+
const attribute = ref.deref();
|
|
169
182
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
* @return {BufferAttribute|InterleavedBuffer}
|
|
176
|
-
*/
|
|
177
|
-
_getBufferAttribute( attribute ) {
|
|
183
|
+
if ( attribute === undefined || this.has( attribute ) === false ) continue;
|
|
184
|
+
|
|
185
|
+
this.delete( attribute );
|
|
186
|
+
|
|
187
|
+
}
|
|
178
188
|
|
|
179
|
-
|
|
189
|
+
this._tracked.clear();
|
|
180
190
|
|
|
181
|
-
|
|
191
|
+
super.dispose();
|
|
182
192
|
|
|
183
193
|
}
|
|
184
194
|
|
|
@@ -163,6 +163,14 @@ class Backend {
|
|
|
163
163
|
*/
|
|
164
164
|
draw( /*renderObject, info*/ ) { }
|
|
165
165
|
|
|
166
|
+
/**
|
|
167
|
+
* Deletes the vertex state for the given render object.
|
|
168
|
+
*
|
|
169
|
+
* @abstract
|
|
170
|
+
* @param {RenderObject} renderObject - The render object.
|
|
171
|
+
*/
|
|
172
|
+
deleteVertexState( /*renderObject*/ ) { }
|
|
173
|
+
|
|
166
174
|
// compute node
|
|
167
175
|
|
|
168
176
|
/**
|
|
@@ -247,6 +255,14 @@ class Backend {
|
|
|
247
255
|
*/
|
|
248
256
|
createComputePipeline( /*computePipeline, bindings, promises*/ ) { }
|
|
249
257
|
|
|
258
|
+
/**
|
|
259
|
+
* Destroys the given pipeline.
|
|
260
|
+
*
|
|
261
|
+
* @abstract
|
|
262
|
+
* @param {Pipeline} pipeline - The pipeline.
|
|
263
|
+
*/
|
|
264
|
+
destroyPipeline( /*pipeline*/ ) { }
|
|
265
|
+
|
|
250
266
|
// cache key
|
|
251
267
|
|
|
252
268
|
/**
|
|
@@ -406,6 +422,14 @@ class Backend {
|
|
|
406
422
|
*/
|
|
407
423
|
createStorageAttribute( /*attribute*/ ) { }
|
|
408
424
|
|
|
425
|
+
/**
|
|
426
|
+
* Creates the GPU buffer of an indirect storage attribute.
|
|
427
|
+
*
|
|
428
|
+
* @abstract
|
|
429
|
+
* @param {BufferAttribute} attribute - The buffer attribute.
|
|
430
|
+
*/
|
|
431
|
+
createIndirectStorageAttribute( /*attribute*/ ) { }
|
|
432
|
+
|
|
409
433
|
/**
|
|
410
434
|
* Creates a uniform buffer.
|
|
411
435
|
*
|
|
@@ -438,6 +462,21 @@ class Backend {
|
|
|
438
462
|
*/
|
|
439
463
|
destroyAttribute( /*attribute*/ ) { }
|
|
440
464
|
|
|
465
|
+
/**
|
|
466
|
+
* Utility method for handling interleaved buffer attributes correctly.
|
|
467
|
+
* To process them, their `InterleavedBuffer` is returned.
|
|
468
|
+
*
|
|
469
|
+
* @param {BufferAttribute|InterleavedBufferAttribute} attribute - The attribute.
|
|
470
|
+
* @return {BufferAttribute|InterleavedBuffer}
|
|
471
|
+
*/
|
|
472
|
+
getBufferAttribute( attribute ) {
|
|
473
|
+
|
|
474
|
+
if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;
|
|
475
|
+
|
|
476
|
+
return attribute;
|
|
477
|
+
|
|
478
|
+
}
|
|
479
|
+
|
|
441
480
|
// canvas
|
|
442
481
|
|
|
443
482
|
/**
|
|
@@ -464,6 +503,14 @@ class Backend {
|
|
|
464
503
|
*/
|
|
465
504
|
updateViewport( /*renderContext*/ ) {}
|
|
466
505
|
|
|
506
|
+
/**
|
|
507
|
+
* Frees the GPU resources of the given canvas target.
|
|
508
|
+
*
|
|
509
|
+
* @abstract
|
|
510
|
+
* @param {CanvasTarget} canvasTarget - The canvas target.
|
|
511
|
+
*/
|
|
512
|
+
destroyCanvasTarget( /*canvasTarget*/ ) {}
|
|
513
|
+
|
|
467
514
|
// utils
|
|
468
515
|
|
|
469
516
|
/**
|
|
@@ -595,6 +642,31 @@ class Backend {
|
|
|
595
642
|
*/
|
|
596
643
|
isOccluded( /*renderContext, object*/ ) {}
|
|
597
644
|
|
|
645
|
+
/**
|
|
646
|
+
* Returns the occlusion query data of the given render context for its current camera.
|
|
647
|
+
*
|
|
648
|
+
* @param {RenderContext} renderContext - The render context.
|
|
649
|
+
* @return {Object} The occlusion query data.
|
|
650
|
+
*/
|
|
651
|
+
getOcclusionData( renderContext ) {
|
|
652
|
+
|
|
653
|
+
const renderContextData = this.get( renderContext );
|
|
654
|
+
|
|
655
|
+
if ( renderContextData.occlusionData === undefined ) renderContextData.occlusionData = new WeakMap();
|
|
656
|
+
|
|
657
|
+
let occlusionData = renderContextData.occlusionData.get( renderContext.camera );
|
|
658
|
+
|
|
659
|
+
if ( occlusionData === undefined ) {
|
|
660
|
+
|
|
661
|
+
occlusionData = {};
|
|
662
|
+
renderContextData.occlusionData.set( renderContext.camera, occlusionData );
|
|
663
|
+
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
return occlusionData;
|
|
667
|
+
|
|
668
|
+
}
|
|
669
|
+
|
|
598
670
|
/**
|
|
599
671
|
* Resolves the time stamp for the given render context and type.
|
|
600
672
|
*
|
|
@@ -633,10 +705,13 @@ class Backend {
|
|
|
633
705
|
* a storage buffer attribute from the GPU to the CPU.
|
|
634
706
|
*
|
|
635
707
|
* @async
|
|
636
|
-
* @param {
|
|
637
|
-
* @
|
|
708
|
+
* @param {BufferAttribute} attribute - The storage buffer attribute to read from.
|
|
709
|
+
* @param {?(ReadbackBuffer|ArrayBuffer)} [target=null] - The readback buffer or array buffer that receives the data. If `null`, a new array buffer is returned.
|
|
710
|
+
* @param {number} [offset=0] - The byte offset to start reading from. Must be a multiple of 4.
|
|
711
|
+
* @param {number} [count=-1] - The number of bytes to read. Must be a multiple of 4, or `-1` to read to the end of the buffer.
|
|
712
|
+
* @return {Promise<ArrayBuffer|ReadbackBuffer>} A promise that resolves with the buffer data when the data are ready.
|
|
638
713
|
*/
|
|
639
|
-
async getArrayBufferAsync( /* attribute */ ) {}
|
|
714
|
+
async getArrayBufferAsync( /* attribute, target, offset, count */ ) {}
|
|
640
715
|
|
|
641
716
|
/**
|
|
642
717
|
* Checks if the given feature is supported by the backend.
|
|
@@ -40,6 +40,17 @@ class BindGroup {
|
|
|
40
40
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
/**
|
|
44
|
+
* Returns a new bind group with the same name and clones of the bindings.
|
|
45
|
+
*
|
|
46
|
+
* @return {BindGroup} A clone of this bind group.
|
|
47
|
+
*/
|
|
48
|
+
clone() {
|
|
49
|
+
|
|
50
|
+
return new BindGroup( this.name, this.bindings.map( ( binding ) => binding.clone() ) );
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
43
54
|
}
|
|
44
55
|
|
|
45
56
|
export default BindGroup;
|
|
@@ -44,17 +44,6 @@ class Binding {
|
|
|
44
44
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
/**
|
|
48
|
-
* The shader stages in which the binding's resource is visible.
|
|
49
|
-
*
|
|
50
|
-
* @return {number} The visibility bitmask.
|
|
51
|
-
*/
|
|
52
|
-
getVisibility() {
|
|
53
|
-
|
|
54
|
-
return this.visibility;
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
|
|
58
47
|
/**
|
|
59
48
|
* Clones the binding.
|
|
60
49
|
*
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import DataMap from './DataMap.js';
|
|
2
2
|
import { AttributeType } from './Constants.js';
|
|
3
|
+
import { hashString } from '../../nodes/core/NodeUtils.js';
|
|
4
|
+
|
|
5
|
+
const _cacheKeyIds = [];
|
|
3
6
|
|
|
4
7
|
/**
|
|
5
8
|
* This renderer module manages the bindings of the renderer.
|
|
@@ -65,6 +68,14 @@ class Bindings extends DataMap {
|
|
|
65
68
|
*/
|
|
66
69
|
this.info = info;
|
|
67
70
|
|
|
71
|
+
/**
|
|
72
|
+
* Shared bind groups per render context.
|
|
73
|
+
*
|
|
74
|
+
* @private
|
|
75
|
+
* @type {WeakMap<RenderContext|Renderer,Map<number,BindGroup>>}
|
|
76
|
+
*/
|
|
77
|
+
this._sharedBindGroups = new WeakMap();
|
|
78
|
+
|
|
68
79
|
this.pipelines.bindings = this; // assign bindings to pipelines
|
|
69
80
|
|
|
70
81
|
}
|
|
@@ -127,6 +138,82 @@ class Bindings extends DataMap {
|
|
|
127
138
|
|
|
128
139
|
}
|
|
129
140
|
|
|
141
|
+
/**
|
|
142
|
+
* Returns the shared bind group of the given render context that corresponds to the given bind group.
|
|
143
|
+
*
|
|
144
|
+
* @param {BindGroup} bindGroup - The bind group.
|
|
145
|
+
* @param {?RenderContext} [renderContext=null] - The render context. If not set, the current render context is used.
|
|
146
|
+
* @return {BindGroup} The shared bind group.
|
|
147
|
+
*/
|
|
148
|
+
getSharedBindGroup( bindGroup, renderContext = null ) {
|
|
149
|
+
|
|
150
|
+
if ( renderContext === null ) {
|
|
151
|
+
|
|
152
|
+
const renderer = this.backend.renderer;
|
|
153
|
+
renderContext = renderer._currentRenderContext || renderer; // use renderer as fallback until we have a compute context
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// build cache key
|
|
158
|
+
|
|
159
|
+
let cacheKeyString = '';
|
|
160
|
+
|
|
161
|
+
for ( const binding of bindGroup.bindings ) {
|
|
162
|
+
|
|
163
|
+
if ( binding.isNodeUniformsGroup ) {
|
|
164
|
+
|
|
165
|
+
binding.uniforms.sort( ( a, b ) => a.nodeUniform.node.id - b.nodeUniform.node.id );
|
|
166
|
+
|
|
167
|
+
for ( const uniform of binding.uniforms ) {
|
|
168
|
+
|
|
169
|
+
cacheKeyString += uniform.nodeUniform.node.id + ',';
|
|
170
|
+
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
} else {
|
|
174
|
+
|
|
175
|
+
cacheKeyString += binding.nodeUniform.id + ',';
|
|
176
|
+
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const cacheKey = hashString( cacheKeyString );
|
|
182
|
+
|
|
183
|
+
// lookup bind group cache
|
|
184
|
+
|
|
185
|
+
let bindGroupsCache = this._sharedBindGroups.get( renderContext );
|
|
186
|
+
|
|
187
|
+
if ( bindGroupsCache === undefined ) {
|
|
188
|
+
|
|
189
|
+
bindGroupsCache = new Map();
|
|
190
|
+
|
|
191
|
+
this._sharedBindGroups.set( renderContext, bindGroupsCache );
|
|
192
|
+
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// lookup bind group
|
|
196
|
+
|
|
197
|
+
let sharedBindGroup = bindGroupsCache.get( cacheKey );
|
|
198
|
+
|
|
199
|
+
if ( sharedBindGroup === undefined ) {
|
|
200
|
+
|
|
201
|
+
// make sure shared bindings are cloned per render context
|
|
202
|
+
|
|
203
|
+
sharedBindGroup = this.has( bindGroup ) ? bindGroup.clone() : bindGroup;
|
|
204
|
+
|
|
205
|
+
bindGroupsCache.set( cacheKey, sharedBindGroup );
|
|
206
|
+
|
|
207
|
+
const groupData = this.get( sharedBindGroup );
|
|
208
|
+
groupData.renderContext = renderContext;
|
|
209
|
+
groupData.cacheKey = cacheKey;
|
|
210
|
+
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return sharedBindGroup;
|
|
214
|
+
|
|
215
|
+
}
|
|
216
|
+
|
|
130
217
|
/**
|
|
131
218
|
* Updates the bindings for the given compute node.
|
|
132
219
|
*
|
|
@@ -243,11 +330,11 @@ class Bindings extends DataMap {
|
|
|
243
330
|
|
|
244
331
|
} else if ( binding.isSampledTexture ) {
|
|
245
332
|
|
|
246
|
-
this.textures.updateTexture( binding.texture );
|
|
333
|
+
binding.generation = this.textures.updateTexture( binding.texture );
|
|
247
334
|
|
|
248
335
|
} else if ( binding.isSampler ) {
|
|
249
336
|
|
|
250
|
-
this.textures.updateSampler( binding );
|
|
337
|
+
binding.samplerKey = this.textures.updateSampler( binding );
|
|
251
338
|
|
|
252
339
|
} else if ( binding.isStorageBuffer ) {
|
|
253
340
|
|
|
@@ -323,6 +410,13 @@ class Bindings extends DataMap {
|
|
|
323
410
|
|
|
324
411
|
}
|
|
325
412
|
|
|
413
|
+
if ( groupData.cacheKey !== undefined ) {
|
|
414
|
+
|
|
415
|
+
const bindGroupsCache = this._sharedBindGroups.get( groupData.renderContext );
|
|
416
|
+
bindGroupsCache.delete( groupData.cacheKey );
|
|
417
|
+
|
|
418
|
+
}
|
|
419
|
+
|
|
326
420
|
this.backend.deleteBindGroupData( bindGroup );
|
|
327
421
|
this.delete( bindGroup );
|
|
328
422
|
|
|
@@ -385,7 +479,7 @@ class Bindings extends DataMap {
|
|
|
385
479
|
|
|
386
480
|
let needsBindingsUpdate = false;
|
|
387
481
|
let cacheBindings = true;
|
|
388
|
-
let
|
|
482
|
+
let cacheKeyLength = 0;
|
|
389
483
|
let version = 0;
|
|
390
484
|
|
|
391
485
|
// iterate over all bindings and check if buffer updates or a new binding group is required
|
|
@@ -410,15 +504,23 @@ class Bindings extends DataMap {
|
|
|
410
504
|
|
|
411
505
|
this.attributes.update( attribute, attributeType );
|
|
412
506
|
|
|
413
|
-
if
|
|
507
|
+
// generation: a new buffer is created if the attribute has been disposed while in use
|
|
508
|
+
|
|
509
|
+
const generation = this.attributes.get( attribute ).generation;
|
|
510
|
+
|
|
511
|
+
if ( bindingData.attribute !== attribute || bindingData.generation !== generation ) {
|
|
414
512
|
|
|
415
513
|
bindingData.attribute = attribute;
|
|
514
|
+
bindingData.generation = generation;
|
|
416
515
|
|
|
417
516
|
needsBindingsUpdate = true;
|
|
418
517
|
|
|
419
518
|
}
|
|
420
519
|
|
|
421
|
-
|
|
520
|
+
// the generation is part of the version so a re-created buffer replaces the cached bind group
|
|
521
|
+
|
|
522
|
+
_cacheKeyIds[ cacheKeyLength ++ ] = attribute.id;
|
|
523
|
+
version += generation;
|
|
422
524
|
|
|
423
525
|
}
|
|
424
526
|
|
|
@@ -445,13 +547,13 @@ class Bindings extends DataMap {
|
|
|
445
547
|
|
|
446
548
|
// version: update the texture data or create a new one
|
|
447
549
|
|
|
448
|
-
this.textures.updateTexture( texture );
|
|
550
|
+
const generation = this.textures.updateTexture( texture );
|
|
449
551
|
|
|
450
552
|
// generation: update the bindings if the binding refers to a different texture object
|
|
451
553
|
|
|
452
|
-
if ( binding.generation !==
|
|
554
|
+
if ( binding.generation !== generation ) {
|
|
453
555
|
|
|
454
|
-
binding.generation =
|
|
556
|
+
binding.generation = generation;
|
|
455
557
|
|
|
456
558
|
needsBindingsUpdate = true;
|
|
457
559
|
|
|
@@ -471,7 +573,7 @@ class Bindings extends DataMap {
|
|
|
471
573
|
|
|
472
574
|
} else {
|
|
473
575
|
|
|
474
|
-
|
|
576
|
+
_cacheKeyIds[ cacheKeyLength ++ ] = texture.id;
|
|
475
577
|
version += texture.version;
|
|
476
578
|
|
|
477
579
|
}
|
|
@@ -524,7 +626,11 @@ class Bindings extends DataMap {
|
|
|
524
626
|
|
|
525
627
|
if ( needsBindingsUpdate === true ) {
|
|
526
628
|
|
|
527
|
-
|
|
629
|
+
_cacheKeyIds.length = cacheKeyLength;
|
|
630
|
+
|
|
631
|
+
const cacheKey = cacheBindings ? _cacheKeyIds.join( ',' ) : '';
|
|
632
|
+
|
|
633
|
+
this.backend.updateBindings( bindGroup, bindings, cacheKey, version );
|
|
528
634
|
|
|
529
635
|
}
|
|
530
636
|
|
|
@@ -156,7 +156,18 @@ class ClippingContext {
|
|
|
156
156
|
|
|
157
157
|
this.shadowPass = ( scene.overrideMaterial !== null && scene.overrideMaterial.isShadowPassMaterial );
|
|
158
158
|
|
|
159
|
-
|
|
159
|
+
if ( camera.isArrayCamera === true ) {
|
|
160
|
+
|
|
161
|
+
// ArrayCamera sub-cameras share the planes, so keep them in world space.
|
|
162
|
+
|
|
163
|
+
this.viewMatrix.identity();
|
|
164
|
+
|
|
165
|
+
} else {
|
|
166
|
+
|
|
167
|
+
this.viewMatrix.copy( camera.matrixWorldInverse );
|
|
168
|
+
|
|
169
|
+
}
|
|
170
|
+
|
|
160
171
|
this.viewNormalMatrix.getNormalMatrix( this.viewMatrix );
|
|
161
172
|
|
|
162
173
|
}
|
|
@@ -13,8 +13,10 @@ class ComputePipeline extends Pipeline {
|
|
|
13
13
|
*
|
|
14
14
|
* @param {string} cacheKey - The pipeline's cache key.
|
|
15
15
|
* @param {ProgrammableStage} computeProgram - The pipeline's compute shader.
|
|
16
|
+
* @param {?Array<Object>} [transforms=null] - The transforms (only relevant for WebGL 2 which uses Transform Feedback).
|
|
17
|
+
* @param {?Array<Object>} [attributes=null] - The attributes (only relevant for WebGL 2 which uses Transform Feedback).
|
|
16
18
|
*/
|
|
17
|
-
constructor( cacheKey, computeProgram ) {
|
|
19
|
+
constructor( cacheKey, computeProgram, transforms = null, attributes = null ) {
|
|
18
20
|
|
|
19
21
|
super( cacheKey );
|
|
20
22
|
|
|
@@ -25,6 +27,20 @@ class ComputePipeline extends Pipeline {
|
|
|
25
27
|
*/
|
|
26
28
|
this.computeProgram = computeProgram;
|
|
27
29
|
|
|
30
|
+
/**
|
|
31
|
+
* The transforms (only relevant for WebGL 2 which uses Transform Feedback).
|
|
32
|
+
*
|
|
33
|
+
* @type {?Array<Object>}
|
|
34
|
+
*/
|
|
35
|
+
this.transforms = transforms;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The attributes (only relevant for WebGL 2 which uses Transform Feedback).
|
|
39
|
+
*
|
|
40
|
+
* @type {?Array<Object>}
|
|
41
|
+
*/
|
|
42
|
+
this.attributes = attributes;
|
|
43
|
+
|
|
28
44
|
/**
|
|
29
45
|
* This flag can be used for type testing.
|
|
30
46
|
*
|
|
@@ -8,6 +8,7 @@ import RenderPipeline from './RenderPipeline.js';
|
|
|
8
8
|
* material shaders. This avoids the intermediate framebuffer and output pass
|
|
9
9
|
* used by {@link Renderer}, but changes blending and is not compatible with
|
|
10
10
|
* materials that sample the framebuffer, such as transmissive materials.
|
|
11
|
+
* With the WebGL backend, `antialias` has no effect.
|
|
11
12
|
*
|
|
12
13
|
* ```js
|
|
13
14
|
* const renderPipeline = new DirectRenderPipeline( renderer );
|
|
@@ -219,9 +220,12 @@ class DirectRenderPipeline extends RenderPipeline {
|
|
|
219
220
|
|
|
220
221
|
output.assign( materialOutputNode );
|
|
221
222
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
223
|
+
if ( outputColorTransform === false ) return pipelineOutputNode;
|
|
224
|
+
|
|
225
|
+
const renderOutputNode = renderOutput( pipelineOutputNode, toneMapping, outputColorSpace );
|
|
226
|
+
renderOutputNode.premultipliedAlpha = builder.material.premultipliedAlpha;
|
|
227
|
+
|
|
228
|
+
return renderOutputNode;
|
|
225
229
|
|
|
226
230
|
}
|
|
227
231
|
} );
|