@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
|
@@ -9,6 +9,7 @@ import { Settings } from './tabs/Settings.js';
|
|
|
9
9
|
import { Viewer } from './tabs/Viewer.js';
|
|
10
10
|
import { Timeline } from './tabs/Timeline.js';
|
|
11
11
|
import { setText } from './ui/utils.js';
|
|
12
|
+
import { getItem, setItem } from './Storage.js';
|
|
12
13
|
|
|
13
14
|
import { setConsoleFunction, getConsoleFunction, REVISION } from 'three/webgpu';
|
|
14
15
|
|
|
@@ -467,9 +468,9 @@ class Inspector extends RendererInspector {
|
|
|
467
468
|
|
|
468
469
|
data.cpu = this.getAverageDeltaTime( data, 'cpu' );
|
|
469
470
|
data.gpu = this.getAverageDeltaTime( data, 'gpu' );
|
|
470
|
-
data.total = data.cpu + data.gpu;
|
|
471
471
|
|
|
472
|
-
// children
|
|
472
|
+
// children: the CPU time of a render or compute call includes the calls nested in it, the GPU time of each
|
|
473
|
+
// pass is measured separately
|
|
473
474
|
|
|
474
475
|
for ( const child of stats.children ) {
|
|
475
476
|
|
|
@@ -477,12 +478,12 @@ class Inspector extends RendererInspector {
|
|
|
477
478
|
|
|
478
479
|
const childData = this.getStatsData( child.cid );
|
|
479
480
|
|
|
480
|
-
data.cpu += childData.cpu;
|
|
481
481
|
data.gpu += childData.gpu;
|
|
482
|
-
data.total += childData.total;
|
|
483
482
|
|
|
484
483
|
}
|
|
485
484
|
|
|
485
|
+
data.total = data.cpu + data.gpu;
|
|
486
|
+
|
|
486
487
|
}
|
|
487
488
|
|
|
488
489
|
getNodes() {
|
|
@@ -566,9 +567,8 @@ class Inspector extends RendererInspector {
|
|
|
566
567
|
|
|
567
568
|
}
|
|
568
569
|
|
|
569
|
-
//
|
|
570
|
+
// the time since the last frame which rendered, see RendererInspector.finish()
|
|
570
571
|
|
|
571
|
-
frame.deltaTime = frame.startTime - previousFrame.startTime;
|
|
572
572
|
frame.miscellaneous = frame.deltaTime - frame.total;
|
|
573
573
|
|
|
574
574
|
if ( frame.miscellaneous < 0 ) {
|
|
@@ -641,44 +641,4 @@ class Inspector extends RendererInspector {
|
|
|
641
641
|
|
|
642
642
|
}
|
|
643
643
|
|
|
644
|
-
function getItem( id ) {
|
|
645
|
-
|
|
646
|
-
const data = JSON.parse( localStorage.getItem( 'threejs-inspector' ) || '{}' );
|
|
647
|
-
|
|
648
|
-
if ( data.version !== REVISION ||
|
|
649
|
-
data.settings && ( data.settings.storage === 'url' && data.settings.url !== location.href ) ) {
|
|
650
|
-
|
|
651
|
-
localStorage.removeItem( 'threejs-inspector' );
|
|
652
|
-
|
|
653
|
-
return {};
|
|
654
|
-
|
|
655
|
-
}
|
|
656
|
-
|
|
657
|
-
return data[ id ] || {};
|
|
658
|
-
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
function setItem( id, state ) {
|
|
662
|
-
|
|
663
|
-
const data = JSON.parse( localStorage.getItem( 'threejs-inspector' ) || '{}' );
|
|
664
|
-
|
|
665
|
-
if ( state === null ) {
|
|
666
|
-
|
|
667
|
-
delete data[ id ];
|
|
668
|
-
|
|
669
|
-
} else {
|
|
670
|
-
|
|
671
|
-
data[ id ] = state;
|
|
672
|
-
|
|
673
|
-
}
|
|
674
|
-
|
|
675
|
-
data.settings = data.settings || {};
|
|
676
|
-
data.settings.url = data.settings.url || location.href;
|
|
677
|
-
data.settings.storage = data.settings.storage || 'url';
|
|
678
|
-
data.version = REVISION;
|
|
679
|
-
|
|
680
|
-
localStorage.setItem( 'threejs-inspector', JSON.stringify( data ) );
|
|
681
|
-
|
|
682
|
-
}
|
|
683
|
-
|
|
684
644
|
export { Inspector, getItem, setItem };
|
|
@@ -69,6 +69,14 @@ class ComputeStats extends ObjectStats {
|
|
|
69
69
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
+
// returns true if the frame of the animation loop rendered or computed
|
|
73
|
+
|
|
74
|
+
function isRenderedFrame( frame ) {
|
|
75
|
+
|
|
76
|
+
return frame.renders.length > 0 || frame.computes.length > 0;
|
|
77
|
+
|
|
78
|
+
}
|
|
79
|
+
|
|
72
80
|
export class RendererInspector extends InspectorBase {
|
|
73
81
|
|
|
74
82
|
constructor() {
|
|
@@ -87,11 +95,13 @@ export class RendererInspector extends InspectorBase {
|
|
|
87
95
|
this.maxFrames = 512;
|
|
88
96
|
|
|
89
97
|
this._lastFinishTime = 0;
|
|
98
|
+
this._lastRenderedFinishTime = 0;
|
|
90
99
|
this._resolveTimestampPromise = null;
|
|
91
100
|
this._rAFId = null;
|
|
92
101
|
|
|
93
102
|
this.overdraw = false;
|
|
94
103
|
this._overdrawMaterial = null;
|
|
104
|
+
this._renderingOverdraw = false;
|
|
95
105
|
|
|
96
106
|
this.isRendererInspector = true;
|
|
97
107
|
|
|
@@ -123,7 +133,22 @@ export class RendererInspector extends InspectorBase {
|
|
|
123
133
|
|
|
124
134
|
const frame = this.currentFrame;
|
|
125
135
|
frame.finishTime = now;
|
|
126
|
-
|
|
136
|
+
|
|
137
|
+
// frames of the animation loop which didn't render or compute, like frames skipped by the application
|
|
138
|
+
// while the GPU is busy, are not frames of the application: the time is measured since the last frame
|
|
139
|
+
// which rendered
|
|
140
|
+
|
|
141
|
+
if ( isRenderedFrame( frame ) ) {
|
|
142
|
+
|
|
143
|
+
frame.deltaTime = now - ( this._lastRenderedFinishTime > 0 ? this._lastRenderedFinishTime : now );
|
|
144
|
+
|
|
145
|
+
this._lastRenderedFinishTime = now;
|
|
146
|
+
|
|
147
|
+
} else {
|
|
148
|
+
|
|
149
|
+
frame.deltaTime = now - ( this._lastFinishTime > 0 ? this._lastFinishTime : now );
|
|
150
|
+
|
|
151
|
+
}
|
|
127
152
|
|
|
128
153
|
this.addFrame( frame );
|
|
129
154
|
|
|
@@ -139,12 +164,6 @@ export class RendererInspector extends InspectorBase {
|
|
|
139
164
|
|
|
140
165
|
this._lastFinishTime = now;
|
|
141
166
|
|
|
142
|
-
if ( this.overdraw === true ) {
|
|
143
|
-
|
|
144
|
-
this._renderOverdraw();
|
|
145
|
-
|
|
146
|
-
}
|
|
147
|
-
|
|
148
167
|
}
|
|
149
168
|
|
|
150
169
|
_renderOverdraw() {
|
|
@@ -179,14 +198,20 @@ export class RendererInspector extends InspectorBase {
|
|
|
179
198
|
|
|
180
199
|
scene.overrideMaterial = this._overdrawMaterial;
|
|
181
200
|
|
|
201
|
+
this._renderingOverdraw = true;
|
|
202
|
+
|
|
182
203
|
renderer.render( scene, camera );
|
|
183
204
|
|
|
205
|
+
this._renderingOverdraw = false;
|
|
206
|
+
|
|
184
207
|
RendererUtils.restoreRendererAndSceneState( renderer, scene, state );
|
|
185
208
|
|
|
186
209
|
}
|
|
187
210
|
|
|
188
211
|
_getFPS() {
|
|
189
212
|
|
|
213
|
+
// only the frames which rendered or computed are counted, within the last second
|
|
214
|
+
|
|
190
215
|
let frameSum = 0;
|
|
191
216
|
let timeSum = 0;
|
|
192
217
|
|
|
@@ -194,6 +219,8 @@ export class RendererInspector extends InspectorBase {
|
|
|
194
219
|
|
|
195
220
|
const frame = this.frames[ i ];
|
|
196
221
|
|
|
222
|
+
if ( isRenderedFrame( frame ) === false ) continue;
|
|
223
|
+
|
|
197
224
|
frameSum ++;
|
|
198
225
|
timeSum += frame.deltaTime;
|
|
199
226
|
|
|
@@ -201,7 +228,7 @@ export class RendererInspector extends InspectorBase {
|
|
|
201
228
|
|
|
202
229
|
}
|
|
203
230
|
|
|
204
|
-
return ( frameSum * 1000 ) / timeSum;
|
|
231
|
+
return timeSum > 0 ? ( frameSum * 1000 ) / timeSum : 0;
|
|
205
232
|
|
|
206
233
|
}
|
|
207
234
|
|
|
@@ -562,6 +589,14 @@ export class RendererInspector extends InspectorBase {
|
|
|
562
589
|
this.currentContext = currentRender.parent;
|
|
563
590
|
this.currentRender = currentRender.parent && currentRender.parent.isRenderStats ? currentRender.parent : null;
|
|
564
591
|
|
|
592
|
+
// draw over each top-level render to the canvas, the frame finishes only at the start of the next one
|
|
593
|
+
|
|
594
|
+
if ( this.overdraw === true && this._renderingOverdraw === false && currentRender.parent === frame && this.getRenderer().getRenderTarget() === null ) {
|
|
595
|
+
|
|
596
|
+
this._renderOverdraw();
|
|
597
|
+
|
|
598
|
+
}
|
|
599
|
+
|
|
565
600
|
}
|
|
566
601
|
|
|
567
602
|
dispose() {
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { REVISION } from 'three/webgpu';
|
|
2
|
+
|
|
3
|
+
const STORAGE_KEY = 'threejs-inspector';
|
|
4
|
+
|
|
5
|
+
function getItem( id ) {
|
|
6
|
+
|
|
7
|
+
if ( typeof localStorage === 'undefined' ) return {};
|
|
8
|
+
|
|
9
|
+
const data = JSON.parse( localStorage.getItem( STORAGE_KEY ) || '{}' );
|
|
10
|
+
|
|
11
|
+
if ( data.version !== REVISION ||
|
|
12
|
+
data.settings && ( data.settings.storage === 'url' && data.settings.url !== location.href ) ) {
|
|
13
|
+
|
|
14
|
+
localStorage.removeItem( STORAGE_KEY );
|
|
15
|
+
|
|
16
|
+
return {};
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return data[ id ] || {};
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function setItem( id, state ) {
|
|
25
|
+
|
|
26
|
+
if ( typeof localStorage === 'undefined' ) return;
|
|
27
|
+
|
|
28
|
+
const data = JSON.parse( localStorage.getItem( STORAGE_KEY ) || '{}' );
|
|
29
|
+
|
|
30
|
+
if ( state === null ) {
|
|
31
|
+
|
|
32
|
+
delete data[ id ];
|
|
33
|
+
|
|
34
|
+
} else {
|
|
35
|
+
|
|
36
|
+
data[ id ] = state;
|
|
37
|
+
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
data.settings = data.settings || {};
|
|
41
|
+
data.settings.url = data.settings.url || location.href;
|
|
42
|
+
data.settings.storage = data.settings.storage || 'url';
|
|
43
|
+
data.version = REVISION;
|
|
44
|
+
|
|
45
|
+
localStorage.setItem( STORAGE_KEY, JSON.stringify( data ) );
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { getItem, setItem };
|
|
@@ -521,13 +521,6 @@ export class ColorGrading extends Extension {
|
|
|
521
521
|
this.selectedToneMapping = comp.params.toneMapping;
|
|
522
522
|
if ( this.sceneGradingEnabled ) {
|
|
523
523
|
|
|
524
|
-
const renderer = this.inspector ? this.inspector.getRenderer() : null;
|
|
525
|
-
if ( renderer ) {
|
|
526
|
-
|
|
527
|
-
renderer.toneMappingExposure = comp.params.exposure;
|
|
528
|
-
|
|
529
|
-
}
|
|
530
|
-
|
|
531
524
|
this._applyLiveGrading();
|
|
532
525
|
|
|
533
526
|
}
|
|
@@ -1616,7 +1609,7 @@ export class ColorGrading extends Extension {
|
|
|
1616
1609
|
|
|
1617
1610
|
generate3DLUTData( size = this.lutSize, buffer = null ) {
|
|
1618
1611
|
|
|
1619
|
-
if ( buffer === null ) {
|
|
1612
|
+
if ( buffer === null || buffer.length !== size * size * size * 4 ) {
|
|
1620
1613
|
|
|
1621
1614
|
buffer = new Float32Array( size * size * size * 4 );
|
|
1622
1615
|
|
|
@@ -1656,9 +1649,10 @@ export class ColorGrading extends Extension {
|
|
|
1656
1649
|
|
|
1657
1650
|
}
|
|
1658
1651
|
|
|
1659
|
-
|
|
1660
|
-
buffer[ idx ++ ] = _pixel[
|
|
1661
|
-
buffer[ idx ++ ] = _pixel[
|
|
1652
|
+
// Share the same output range with the 8-bit PNG export.
|
|
1653
|
+
buffer[ idx ++ ] = Math.max( 0, Math.min( 1, _pixel[ 0 ] ) );
|
|
1654
|
+
buffer[ idx ++ ] = Math.max( 0, Math.min( 1, _pixel[ 1 ] ) );
|
|
1655
|
+
buffer[ idx ++ ] = Math.max( 0, Math.min( 1, _pixel[ 2 ] ) );
|
|
1662
1656
|
buffer[ idx ++ ] = 1.0;
|
|
1663
1657
|
|
|
1664
1658
|
}
|
|
@@ -1785,6 +1779,7 @@ export class ColorGrading extends Extension {
|
|
|
1785
1779
|
modulesData[ id ] = {
|
|
1786
1780
|
type: modType,
|
|
1787
1781
|
mode: mode,
|
|
1782
|
+
enabled: comp.enabled,
|
|
1788
1783
|
params: JSON.parse( JSON.stringify( comp.params ) )
|
|
1789
1784
|
};
|
|
1790
1785
|
|
|
@@ -1926,6 +1921,7 @@ export class ColorGrading extends Extension {
|
|
|
1926
1921
|
|
|
1927
1922
|
if ( typeof json.lutSize === 'number' ) {
|
|
1928
1923
|
|
|
1924
|
+
this._lutSizeChanged = this._lutSizeChanged || this.lutSize !== json.lutSize;
|
|
1929
1925
|
this.lutSize = json.lutSize;
|
|
1930
1926
|
if ( this.lutSizeSelect ) {
|
|
1931
1927
|
|
|
@@ -1956,6 +1952,8 @@ export class ColorGrading extends Extension {
|
|
|
1956
1952
|
|
|
1957
1953
|
if ( json.modules && typeof json.modules === 'object' ) {
|
|
1958
1954
|
|
|
1955
|
+
const pipelineOrder = [ ...this.pipelineOrder ];
|
|
1956
|
+
|
|
1959
1957
|
this.modulesMap.forEach( ( comp, id ) => {
|
|
1960
1958
|
|
|
1961
1959
|
if ( id !== 'renderer' && id !== 'output' && ! this.pipelineOrder.includes( id ) ) {
|
|
@@ -2008,8 +2006,14 @@ export class ColorGrading extends Extension {
|
|
|
2008
2006
|
|
|
2009
2007
|
}
|
|
2010
2008
|
|
|
2009
|
+
const comp = this.modulesMap.get( id );
|
|
2010
|
+
if ( comp ) comp.enabled = mData.enabled !== false;
|
|
2011
|
+
|
|
2011
2012
|
} );
|
|
2012
2013
|
|
|
2014
|
+
// Creating missing cards must not append duplicate or inactive steps.
|
|
2015
|
+
this.pipelineOrder = pipelineOrder;
|
|
2016
|
+
|
|
2013
2017
|
} else if ( params ) {
|
|
2014
2018
|
|
|
2015
2019
|
const isWBActive = ( params.temperature !== undefined && params.temperature !== 0 ) || ( params.tint !== undefined && params.tint !== 0 );
|
|
@@ -2297,8 +2301,6 @@ export class ColorGrading extends Extension {
|
|
|
2297
2301
|
|
|
2298
2302
|
init( inspector ) {
|
|
2299
2303
|
|
|
2300
|
-
super.init( inspector );
|
|
2301
|
-
|
|
2302
2304
|
LUT3DStyle.init( inspector.nonce );
|
|
2303
2305
|
|
|
2304
2306
|
const renderer = inspector.getRenderer();
|
|
@@ -2313,10 +2315,14 @@ export class ColorGrading extends Extension {
|
|
|
2313
2315
|
rendererComp.defaultExposure = defaultExp;
|
|
2314
2316
|
rendererComp.params.toneMapping = defaultTM;
|
|
2315
2317
|
rendererComp.params.exposure = defaultExp;
|
|
2318
|
+
this.selectedToneMapping = defaultTM;
|
|
2316
2319
|
rendererComp.updateUI();
|
|
2317
2320
|
|
|
2318
2321
|
}
|
|
2319
2322
|
|
|
2323
|
+
// Restore saved settings after initializing the renderer defaults.
|
|
2324
|
+
super.init( inspector );
|
|
2325
|
+
|
|
2320
2326
|
this.onOrientationChange();
|
|
2321
2327
|
this.onLayoutChange();
|
|
2322
2328
|
|
|
@@ -2403,6 +2409,8 @@ export class ColorGrading extends Extension {
|
|
|
2403
2409
|
|
|
2404
2410
|
_applyLiveGrading() {
|
|
2405
2411
|
|
|
2412
|
+
this._lutSizeChanged = this._lutSizeChanged || ( this.lutTexture !== null && this.lutTexture.image.width !== this.lutSize );
|
|
2413
|
+
|
|
2406
2414
|
if ( ! this.lutTexture || this._lutSizeChanged || this._lutNeedsUpdate ) {
|
|
2407
2415
|
|
|
2408
2416
|
const buffer = ( this.lutTexture && this.lutTexture.image && ! this._lutSizeChanged ) ? this.lutTexture.image.data : null;
|
|
@@ -2485,24 +2493,15 @@ export class ColorGrading extends Extension {
|
|
|
2485
2493
|
this._originalPipelineSettings = {
|
|
2486
2494
|
outputNode: renderPipeline.outputNode,
|
|
2487
2495
|
outputColorTransform: renderPipeline.outputColorTransform,
|
|
2488
|
-
rendererToneMapping: renderer.toneMapping
|
|
2496
|
+
rendererToneMapping: renderer.toneMapping,
|
|
2497
|
+
rendererExposure: renderer.toneMappingExposure
|
|
2489
2498
|
};
|
|
2490
2499
|
|
|
2491
|
-
if ( renderer.toneMapping !== undefined ) {
|
|
2492
|
-
|
|
2493
|
-
this.selectedToneMapping = renderer.toneMapping;
|
|
2494
|
-
const rendererComp = this.modulesMap.get( 'renderer' );
|
|
2495
|
-
if ( rendererComp ) {
|
|
2496
|
-
|
|
2497
|
-
rendererComp.fromJSON( { params: { toneMapping: this.selectedToneMapping } } );
|
|
2498
|
-
|
|
2499
|
-
}
|
|
2500
|
-
|
|
2501
|
-
}
|
|
2502
|
-
|
|
2503
2500
|
}
|
|
2504
2501
|
|
|
2505
2502
|
renderer.toneMapping = this.selectedToneMapping;
|
|
2503
|
+
const rendererComp = this.modulesMap.get( 'renderer' );
|
|
2504
|
+
if ( rendererComp ) renderer.toneMappingExposure = rendererComp.params.exposure;
|
|
2506
2505
|
renderPipeline.outputColorTransform = false;
|
|
2507
2506
|
|
|
2508
2507
|
let inputNode = this._originalPipelineSettings.outputNode;
|
|
@@ -2515,7 +2514,7 @@ export class ColorGrading extends Extension {
|
|
|
2515
2514
|
|
|
2516
2515
|
if ( inputNode ) {
|
|
2517
2516
|
|
|
2518
|
-
const outputPass = renderOutput( inputNode, this.selectedToneMapping );
|
|
2517
|
+
const outputPass = this._originalPipelineSettings.outputColorTransform ? renderOutput( inputNode, this.selectedToneMapping ) : inputNode;
|
|
2519
2518
|
this.lutPassNode = lut3D( outputPass, texture3D( this.lutTexture ), this.lutSize, 1.0 );
|
|
2520
2519
|
|
|
2521
2520
|
renderPipeline.outputNode = this.lutPassNode;
|
|
@@ -2546,6 +2545,12 @@ export class ColorGrading extends Extension {
|
|
|
2546
2545
|
|
|
2547
2546
|
}
|
|
2548
2547
|
|
|
2548
|
+
if ( renderer && this._originalPipelineSettings.rendererExposure !== undefined ) {
|
|
2549
|
+
|
|
2550
|
+
renderer.toneMappingExposure = this._originalPipelineSettings.rendererExposure;
|
|
2551
|
+
|
|
2552
|
+
}
|
|
2553
|
+
|
|
2549
2554
|
this._originalPipelineSettings = null;
|
|
2550
2555
|
|
|
2551
2556
|
}
|
|
@@ -103,8 +103,12 @@ class ParametersGroup {
|
|
|
103
103
|
|
|
104
104
|
_addParameter( object, property, editor, subItem ) {
|
|
105
105
|
|
|
106
|
+
subItem.data[ 0 ].title = property;
|
|
107
|
+
|
|
106
108
|
editor.name = ( name ) => {
|
|
107
109
|
|
|
110
|
+
subItem.data[ 0 ].title = name;
|
|
111
|
+
|
|
108
112
|
if ( subItem.data[ 0 ].childNodes.length > 0 && subItem.data[ 0 ].firstChild.nodeType === 3 /* Node.TEXT_NODE */ ) {
|
|
109
113
|
|
|
110
114
|
subItem.data[ 0 ].firstChild.textContent = name;
|
|
@@ -410,7 +414,7 @@ class Parameters extends Tab {
|
|
|
410
414
|
|
|
411
415
|
const paramList = new List( 'Property', 'Value' );
|
|
412
416
|
paramList.domElement.classList.add( 'parameters' );
|
|
413
|
-
paramList.setGridStyle( '.5fr 1fr' );
|
|
417
|
+
paramList.setGridStyle( 'minmax(0, .5fr) minmax(0, 1fr)' );
|
|
414
418
|
paramList.domElement.style.minWidth = '300px';
|
|
415
419
|
|
|
416
420
|
const scrollWrapper = document.createElement( 'div' );
|
|
@@ -80,7 +80,7 @@ class Performance extends Tab {
|
|
|
80
80
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
resolveStats( inspector, stats ) {
|
|
83
|
+
resolveStats( inspector, stats, budget = Infinity ) {
|
|
84
84
|
|
|
85
85
|
const data = inspector.getStatsData( stats.cid );
|
|
86
86
|
|
|
@@ -139,10 +139,15 @@ class Performance extends Tab {
|
|
|
139
139
|
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
+
// A row never shows more GPU time than its parent, see updateText()
|
|
143
|
+
|
|
144
|
+
const displayGpu = stats.gpuNotAvailable === true ? 0 : Math.min( data.gpu, budget );
|
|
145
|
+
const displayTotal = data.cpu + displayGpu;
|
|
146
|
+
|
|
142
147
|
setText( item.data[ 0 ], name );
|
|
143
148
|
setText( item.data[ 1 ], data.cpu.toFixed( 2 ) );
|
|
144
|
-
setText( item.data[ 2 ], stats.gpuNotAvailable === true ? '-' :
|
|
145
|
-
setText( item.data[ 3 ],
|
|
149
|
+
setText( item.data[ 2 ], stats.gpuNotAvailable === true ? '-' : displayGpu.toFixed( 2 ) );
|
|
150
|
+
setText( item.data[ 3 ], displayTotal.toFixed( 2 ) );
|
|
146
151
|
|
|
147
152
|
//
|
|
148
153
|
|
|
@@ -150,9 +155,11 @@ class Performance extends Tab {
|
|
|
150
155
|
|
|
151
156
|
this.currentItem = item;
|
|
152
157
|
|
|
158
|
+
const childBudget = stats.gpuNotAvailable === true ? budget : displayGpu;
|
|
159
|
+
|
|
153
160
|
for ( const child of stats.children ) {
|
|
154
161
|
|
|
155
|
-
this.resolveStats( inspector, child );
|
|
162
|
+
this.resolveStats( inspector, child, childBudget );
|
|
156
163
|
|
|
157
164
|
}
|
|
158
165
|
|
|
@@ -226,11 +233,19 @@ class Performance extends Tab {
|
|
|
226
233
|
const oldFrameItems = new Map( this.frameItems );
|
|
227
234
|
|
|
228
235
|
this.frameItems.clear();
|
|
236
|
+
|
|
237
|
+
// GPU timestamps can sum to more than the frame time when the GPU overlaps passes, so cap the display at
|
|
238
|
+
// the frame time, and cap each row at its parent's value
|
|
239
|
+
|
|
240
|
+
const hasTimestamp = inspector.getRenderer().backend.hasTimestamp;
|
|
241
|
+
const gpuBudget = hasTimestamp ? Math.min( frame.gpu, frame.deltaTime ) : 0;
|
|
242
|
+
const totalDisplay = frame.cpu + gpuBudget;
|
|
243
|
+
|
|
229
244
|
this.currentItem = this.frameStats;
|
|
230
245
|
|
|
231
246
|
for ( const child of frame.children ) {
|
|
232
247
|
|
|
233
|
-
this.resolveStats( inspector, child );
|
|
248
|
+
this.resolveStats( inspector, child, gpuBudget );
|
|
234
249
|
|
|
235
250
|
}
|
|
236
251
|
|
|
@@ -263,8 +278,8 @@ class Performance extends Tab {
|
|
|
263
278
|
//
|
|
264
279
|
|
|
265
280
|
setText( this.frameStats.data[ 1 ], frame.cpu.toFixed( 2 ) );
|
|
266
|
-
setText( this.frameStats.data[ 2 ],
|
|
267
|
-
setText( this.frameStats.data[ 3 ],
|
|
281
|
+
setText( this.frameStats.data[ 2 ], hasTimestamp ? gpuBudget.toFixed( 2 ) : '-' );
|
|
282
|
+
setText( this.frameStats.data[ 3 ], totalDisplay.toFixed( 2 ) );
|
|
268
283
|
|
|
269
284
|
//
|
|
270
285
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Tab } from '../ui/Tab.js';
|
|
2
2
|
import { Graph } from '../ui/Graph.js';
|
|
3
|
-
import { getItem, setItem } from '../
|
|
3
|
+
import { getItem, setItem } from '../Storage.js';
|
|
4
4
|
import { info } from '../ui/utils.js';
|
|
5
5
|
import {
|
|
6
6
|
ByteType,
|
|
@@ -618,6 +618,8 @@ class Timeline extends Tab {
|
|
|
618
618
|
|
|
619
619
|
if ( this.currentFrame ) {
|
|
620
620
|
|
|
621
|
+
this.resolveIndirectTriangles( this.currentFrame );
|
|
622
|
+
|
|
621
623
|
this.currentFrame.fps = this.renderer.inspector ? this.renderer.inspector.fps : 0;
|
|
622
624
|
|
|
623
625
|
if ( ! isFinite( this.currentFrame.fps ) ) {
|
|
@@ -657,7 +659,7 @@ class Timeline extends Tab {
|
|
|
657
659
|
|
|
658
660
|
}
|
|
659
661
|
|
|
660
|
-
this.currentFrame = { id: frameNumber, calls: [], fps: 0, triangles: 0 };
|
|
662
|
+
this.currentFrame = { id: frameNumber, calls: [], fps: 0, triangles: 0, indirectDraws: [] };
|
|
661
663
|
this.frames.push( this.currentFrame );
|
|
662
664
|
|
|
663
665
|
if ( this.frames.length > LIMIT ) {
|
|
@@ -681,6 +683,16 @@ class Timeline extends Tab {
|
|
|
681
683
|
|
|
682
684
|
this.currentFrame.triangles += details.triangles;
|
|
683
685
|
|
|
686
|
+
} else if ( details.indirect === true ) {
|
|
687
|
+
|
|
688
|
+
const renderObject = args[ 0 ];
|
|
689
|
+
|
|
690
|
+
this.currentFrame.indirectDraws.push( {
|
|
691
|
+
details,
|
|
692
|
+
attribute: renderObject.getIndirect(),
|
|
693
|
+
offset: renderObject.getIndirectOffset()
|
|
694
|
+
} );
|
|
695
|
+
|
|
684
696
|
}
|
|
685
697
|
|
|
686
698
|
}
|
|
@@ -713,6 +725,8 @@ class Timeline extends Tab {
|
|
|
713
725
|
|
|
714
726
|
if ( this.currentFrame ) {
|
|
715
727
|
|
|
728
|
+
this.resolveIndirectTriangles( this.currentFrame );
|
|
729
|
+
|
|
716
730
|
this.currentFrame.fps = this.renderer.inspector ? this.renderer.inspector.fps : 0;
|
|
717
731
|
|
|
718
732
|
}
|
|
@@ -721,6 +735,58 @@ class Timeline extends Tab {
|
|
|
721
735
|
|
|
722
736
|
}
|
|
723
737
|
|
|
738
|
+
resolveIndirectTriangles( frame ) {
|
|
739
|
+
|
|
740
|
+
const draws = frame.indirectDraws;
|
|
741
|
+
|
|
742
|
+
if ( ! draws || draws.length === 0 ) return;
|
|
743
|
+
|
|
744
|
+
frame.indirectDraws = null;
|
|
745
|
+
|
|
746
|
+
// the draw arguments live on the GPU: [ vertexCount | indexCount, instanceCount, ... ]. the buffer is read
|
|
747
|
+
// once per frame, after the frame was submitted and before the next one changes it
|
|
748
|
+
|
|
749
|
+
const readbacks = new Map();
|
|
750
|
+
|
|
751
|
+
for ( const draw of draws ) {
|
|
752
|
+
|
|
753
|
+
if ( readbacks.has( draw.attribute ) === false ) {
|
|
754
|
+
|
|
755
|
+
readbacks.set( draw.attribute, this.renderer.getArrayBufferAsync( draw.attribute ) );
|
|
756
|
+
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
Promise.all( draws.map( ( draw ) => readbacks.get( draw.attribute ) ) ).then( ( buffers ) => {
|
|
762
|
+
|
|
763
|
+
for ( let i = 0; i < draws.length; i ++ ) {
|
|
764
|
+
|
|
765
|
+
const draw = draws[ i ];
|
|
766
|
+
const data = new Uint32Array( buffers[ i ] );
|
|
767
|
+
const offsets = Array.isArray( draw.offset ) ? draw.offset : [ draw.offset ];
|
|
768
|
+
|
|
769
|
+
let triangles = 0;
|
|
770
|
+
|
|
771
|
+
for ( const offset of offsets ) {
|
|
772
|
+
|
|
773
|
+
const index = offset / 4;
|
|
774
|
+
|
|
775
|
+
triangles += Math.floor( data[ index ] / 3 ) * data[ index + 1 ];
|
|
776
|
+
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
draw.details.triangles = triangles;
|
|
780
|
+
frame.triangles += triangles;
|
|
781
|
+
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
if ( this.isRecording === false && this.frames.includes( frame ) ) this.renderSlider();
|
|
785
|
+
|
|
786
|
+
} );
|
|
787
|
+
|
|
788
|
+
}
|
|
789
|
+
|
|
724
790
|
clear() {
|
|
725
791
|
|
|
726
792
|
this.frames = [];
|
|
@@ -871,14 +937,24 @@ class Timeline extends Tab {
|
|
|
871
937
|
|
|
872
938
|
if ( renderObject.object.isMesh || renderObject.object.isSprite ) {
|
|
873
939
|
|
|
874
|
-
|
|
940
|
+
// the WebGL backend doesn't support indirect draws, it draws with the parameters of the geometry
|
|
941
|
+
|
|
942
|
+
if ( this.renderer.backend.isWebGPUBackend === true && renderObject.getIndirect() !== null ) {
|
|
875
943
|
|
|
876
|
-
|
|
944
|
+
details.indirect = true;
|
|
877
945
|
|
|
878
|
-
|
|
946
|
+
} else {
|
|
879
947
|
|
|
880
|
-
details
|
|
881
|
-
|
|
948
|
+
details.triangles = drawParams.vertexCount / 3;
|
|
949
|
+
|
|
950
|
+
if ( renderObject.object.count > 1 ) {
|
|
951
|
+
|
|
952
|
+
details.instance = renderObject.object.count;
|
|
953
|
+
|
|
954
|
+
details[ 'triangles per instance' ] = details.triangles;
|
|
955
|
+
details.triangles *= details.instance;
|
|
956
|
+
|
|
957
|
+
}
|
|
882
958
|
|
|
883
959
|
}
|
|
884
960
|
|