super-three 0.181.0 → 0.184.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +2 -3
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +29 -14
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -3,22 +3,21 @@ import { texture as TSL_Texture } from '../../nodes/accessors/TextureNode.js';
|
|
|
3
3
|
import { positionWorldDirection } from '../../nodes/accessors/Position.js';
|
|
4
4
|
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
7
7
|
import { Scene } from '../../scenes/Scene.js';
|
|
8
8
|
import { CubeCamera } from '../../cameras/CubeCamera.js';
|
|
9
9
|
import { BoxGeometry } from '../../geometries/BoxGeometry.js';
|
|
10
10
|
import { Mesh } from '../../objects/Mesh.js';
|
|
11
|
+
import { CubeTexture } from '../../textures/CubeTexture.js';
|
|
11
12
|
import { BackSide, NoBlending, LinearFilter, LinearMipmapLinearFilter } from '../../constants.js';
|
|
12
13
|
|
|
13
|
-
// @TODO: Consider rename WebGLCubeRenderTarget to just CubeRenderTarget
|
|
14
|
-
|
|
15
14
|
/**
|
|
16
15
|
* This class represents a cube render target. It is a special version
|
|
17
16
|
* of `WebGLCubeRenderTarget` which is compatible with `WebGPURenderer`.
|
|
18
17
|
*
|
|
19
|
-
* @augments
|
|
18
|
+
* @augments RenderTarget
|
|
20
19
|
*/
|
|
21
|
-
class CubeRenderTarget extends
|
|
20
|
+
class CubeRenderTarget extends RenderTarget {
|
|
22
21
|
|
|
23
22
|
/**
|
|
24
23
|
* Constructs a new cube render target.
|
|
@@ -28,7 +27,7 @@ class CubeRenderTarget extends WebGLCubeRenderTarget {
|
|
|
28
27
|
*/
|
|
29
28
|
constructor( size = 1, options = {} ) {
|
|
30
29
|
|
|
31
|
-
super( size, options );
|
|
30
|
+
super( size, size, options );
|
|
32
31
|
|
|
33
32
|
/**
|
|
34
33
|
* This flag can be used for type testing.
|
|
@@ -39,6 +38,27 @@ class CubeRenderTarget extends WebGLCubeRenderTarget {
|
|
|
39
38
|
*/
|
|
40
39
|
this.isCubeRenderTarget = true;
|
|
41
40
|
|
|
41
|
+
const image = { width: size, height: size, depth: 1 };
|
|
42
|
+
const images = [ image, image, image, image, image, image ];
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Overwritten with a different texture type.
|
|
46
|
+
*
|
|
47
|
+
* @type {DataArrayTexture}
|
|
48
|
+
*/
|
|
49
|
+
this.texture = new CubeTexture( images );
|
|
50
|
+
this._setTextureOptions( options );
|
|
51
|
+
|
|
52
|
+
// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)
|
|
53
|
+
// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,
|
|
54
|
+
// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.
|
|
55
|
+
|
|
56
|
+
// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped
|
|
57
|
+
// and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture
|
|
58
|
+
// as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).
|
|
59
|
+
|
|
60
|
+
this.texture.isRenderTargetTexture = true;
|
|
61
|
+
|
|
42
62
|
}
|
|
43
63
|
|
|
44
64
|
/**
|
|
@@ -89,7 +109,7 @@ class CubeRenderTarget extends WebGLCubeRenderTarget {
|
|
|
89
109
|
renderer.setMRT( currentMRT );
|
|
90
110
|
|
|
91
111
|
texture.minFilter = currentMinFilter;
|
|
92
|
-
texture.
|
|
112
|
+
texture.generateMipmaps = currentGenerateMipmaps;
|
|
93
113
|
|
|
94
114
|
mesh.geometry.dispose();
|
|
95
115
|
mesh.material.dispose();
|
|
@@ -98,6 +118,30 @@ class CubeRenderTarget extends WebGLCubeRenderTarget {
|
|
|
98
118
|
|
|
99
119
|
}
|
|
100
120
|
|
|
121
|
+
/**
|
|
122
|
+
* Clears this cube render target.
|
|
123
|
+
*
|
|
124
|
+
* @param {Renderer} renderer - The renderer.
|
|
125
|
+
* @param {boolean} [color=true] - Whether the color buffer should be cleared or not.
|
|
126
|
+
* @param {boolean} [depth=true] - Whether the depth buffer should be cleared or not.
|
|
127
|
+
* @param {boolean} [stencil=true] - Whether the stencil buffer should be cleared or not.
|
|
128
|
+
*/
|
|
129
|
+
clear( renderer, color = true, depth = true, stencil = true ) {
|
|
130
|
+
|
|
131
|
+
const currentRenderTarget = renderer.getRenderTarget();
|
|
132
|
+
|
|
133
|
+
for ( let i = 0; i < 6; i ++ ) {
|
|
134
|
+
|
|
135
|
+
renderer.setRenderTarget( this, i );
|
|
136
|
+
|
|
137
|
+
renderer.clear( color, depth, stencil );
|
|
138
|
+
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
renderer.setRenderTarget( currentRenderTarget );
|
|
142
|
+
|
|
143
|
+
}
|
|
144
|
+
|
|
101
145
|
}
|
|
102
146
|
|
|
103
147
|
export default CubeRenderTarget;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import DataMap from './DataMap.js';
|
|
2
2
|
import { AttributeType } from './Constants.js';
|
|
3
|
-
import { arrayNeedsUint32 } from '../../utils.js';
|
|
4
3
|
|
|
5
4
|
import { Uint16BufferAttribute, Uint32BufferAttribute } from '../../core/BufferAttribute.js';
|
|
6
5
|
|
|
@@ -18,6 +17,20 @@ function getWireframeVersion( geometry ) {
|
|
|
18
17
|
|
|
19
18
|
}
|
|
20
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Returns the wireframe ID for the given geometry.
|
|
22
|
+
*
|
|
23
|
+
* @private
|
|
24
|
+
* @function
|
|
25
|
+
* @param {BufferGeometry} geometry - The geometry.
|
|
26
|
+
* @return {number} The ID.
|
|
27
|
+
*/
|
|
28
|
+
function getWireframeId( geometry ) {
|
|
29
|
+
|
|
30
|
+
return ( geometry.index !== null ) ? geometry.index.id : geometry.attributes.position.id;
|
|
31
|
+
|
|
32
|
+
}
|
|
33
|
+
|
|
21
34
|
/**
|
|
22
35
|
* Returns a wireframe index attribute for the given geometry.
|
|
23
36
|
*
|
|
@@ -63,8 +76,9 @@ function getWireframeIndex( geometry ) {
|
|
|
63
76
|
|
|
64
77
|
}
|
|
65
78
|
|
|
66
|
-
const attribute = new (
|
|
79
|
+
const attribute = new ( geometryPosition.count >= 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );
|
|
67
80
|
attribute.version = getWireframeVersion( geometry );
|
|
81
|
+
attribute.__id = getWireframeId( geometry );
|
|
68
82
|
|
|
69
83
|
return attribute;
|
|
70
84
|
|
|
@@ -310,6 +324,18 @@ class Geometries extends DataMap {
|
|
|
310
324
|
|
|
311
325
|
}
|
|
312
326
|
|
|
327
|
+
/**
|
|
328
|
+
* Returns the byte offset into the indirect attribute buffer of the given render object.
|
|
329
|
+
*
|
|
330
|
+
* @param {RenderObject} renderObject - The render object.
|
|
331
|
+
* @return {number} The byte offset into the indirect attribute buffer.
|
|
332
|
+
*/
|
|
333
|
+
getIndirectOffset( renderObject ) {
|
|
334
|
+
|
|
335
|
+
return renderObject.geometry.indirectOffset;
|
|
336
|
+
|
|
337
|
+
}
|
|
338
|
+
|
|
313
339
|
/**
|
|
314
340
|
* Returns the index of the given render object's geometry. This is implemented
|
|
315
341
|
* in a method to return a wireframe index if necessary.
|
|
@@ -335,7 +361,7 @@ class Geometries extends DataMap {
|
|
|
335
361
|
|
|
336
362
|
wireframes.set( geometry, wireframeAttribute );
|
|
337
363
|
|
|
338
|
-
} else if ( wireframeAttribute.version !== getWireframeVersion( geometry ) ) {
|
|
364
|
+
} else if ( wireframeAttribute.version !== getWireframeVersion( geometry ) || wireframeAttribute.__id !== getWireframeId( geometry ) ) {
|
|
339
365
|
|
|
340
366
|
this.attributes.delete( wireframeAttribute );
|
|
341
367
|
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import { error } from '../../utils.js';
|
|
2
|
+
import {
|
|
3
|
+
ByteType, UnsignedByteType, ShortType, UnsignedShortType, HalfFloatType,
|
|
4
|
+
IntType, UnsignedIntType, FloatType,
|
|
5
|
+
AlphaFormat, RedFormat, RedIntegerFormat, DepthFormat, DepthStencilFormat,
|
|
6
|
+
RGFormat, RGIntegerFormat, RGBFormat, RGBIntegerFormat,
|
|
7
|
+
UnsignedShort4444Type, UnsignedShort5551Type,
|
|
8
|
+
UnsignedInt248Type, UnsignedInt5999Type, UnsignedInt101111Type
|
|
9
|
+
} from '../../constants.js';
|
|
2
10
|
|
|
3
11
|
/**
|
|
4
12
|
* This renderer module provides a series of statistical information
|
|
@@ -87,13 +95,51 @@ class Info {
|
|
|
87
95
|
* @type {Object}
|
|
88
96
|
* @readonly
|
|
89
97
|
* @property {number} geometries - The number of active geometries.
|
|
90
|
-
* @property {number}
|
|
98
|
+
* @property {number} textures - The number of active textures.
|
|
99
|
+
* @property {number} attributes - The number of active attributes.
|
|
100
|
+
* @property {number} indexAttributes - The number of active index attributes.
|
|
101
|
+
* @property {number} storageAttributes - The number of active storage attributes.
|
|
102
|
+
* @property {number} indirectStorageAttributes - The number of active indirect storage attributes.
|
|
103
|
+
* @property {number} readbackBuffers - The number of active readback buffers.
|
|
104
|
+
* @property {number} programs - The number of active programs.
|
|
105
|
+
* @property {number} renderTargets - The number of active renderTargets.
|
|
106
|
+
* @property {number} total - The total memory size in bytes.
|
|
107
|
+
* @property {number} texturesSize - The memory size of active textures in bytes.
|
|
108
|
+
* @property {number} attributesSize - The memory size of active attributes in bytes.
|
|
109
|
+
* @property {number} indexAttributesSize - The memory size of active index attributes in bytes.
|
|
110
|
+
* @property {number} storageAttributesSize - The memory size of active storage attributes in bytes.
|
|
111
|
+
* @property {number} indirectStorageAttributesSize - The memory size of active indirect storage attributes in bytes.
|
|
112
|
+
* @property {number} readbackBuffersSize - The memory size of active readback buffers in bytes.
|
|
113
|
+
* @property {number} programsSize - The memory size of active programs in bytes.
|
|
91
114
|
*/
|
|
92
115
|
this.memory = {
|
|
93
116
|
geometries: 0,
|
|
94
|
-
textures: 0
|
|
117
|
+
textures: 0,
|
|
118
|
+
attributes: 0,
|
|
119
|
+
indexAttributes: 0,
|
|
120
|
+
storageAttributes: 0,
|
|
121
|
+
indirectStorageAttributes: 0,
|
|
122
|
+
readbackBuffers: 0,
|
|
123
|
+
programs: 0,
|
|
124
|
+
renderTargets: 0,
|
|
125
|
+
total: 0,
|
|
126
|
+
texturesSize: 0,
|
|
127
|
+
attributesSize: 0,
|
|
128
|
+
indexAttributesSize: 0,
|
|
129
|
+
storageAttributesSize: 0,
|
|
130
|
+
indirectStorageAttributesSize: 0,
|
|
131
|
+
readbackBuffersSize: 0,
|
|
132
|
+
programsSize: 0
|
|
95
133
|
};
|
|
96
134
|
|
|
135
|
+
/**
|
|
136
|
+
* Map for storing calculated byte sizes of tracked objects.
|
|
137
|
+
*
|
|
138
|
+
* @type {Map<Object, number>}
|
|
139
|
+
* @private
|
|
140
|
+
*/
|
|
141
|
+
this.memoryMap = new Map();
|
|
142
|
+
|
|
97
143
|
}
|
|
98
144
|
|
|
99
145
|
/**
|
|
@@ -161,8 +207,291 @@ class Info {
|
|
|
161
207
|
|
|
162
208
|
this.render.timestamp = 0;
|
|
163
209
|
this.compute.timestamp = 0;
|
|
164
|
-
|
|
165
|
-
this.memory
|
|
210
|
+
|
|
211
|
+
for ( const prop in this.memory ) {
|
|
212
|
+
|
|
213
|
+
this.memory[ prop ] = 0;
|
|
214
|
+
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
this.memoryMap.clear();
|
|
218
|
+
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Tracks texture memory explicitly, updating counts and byte tracking.
|
|
223
|
+
*
|
|
224
|
+
* @param {Texture} texture
|
|
225
|
+
*/
|
|
226
|
+
createTexture( texture ) {
|
|
227
|
+
|
|
228
|
+
const size = this._getTextureMemorySize( texture );
|
|
229
|
+
this.memoryMap.set( texture, size );
|
|
230
|
+
|
|
231
|
+
this.memory.textures ++;
|
|
232
|
+
this.memory.total += size;
|
|
233
|
+
this.memory.texturesSize += size;
|
|
234
|
+
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Tracks texture memory explicitly, updating counts and byte tracking.
|
|
239
|
+
*
|
|
240
|
+
* @param {Texture} texture
|
|
241
|
+
*/
|
|
242
|
+
destroyTexture( texture ) {
|
|
243
|
+
|
|
244
|
+
const size = this.memoryMap.get( texture ) || 0;
|
|
245
|
+
this.memoryMap.delete( texture );
|
|
246
|
+
|
|
247
|
+
this.memory.textures --;
|
|
248
|
+
this.memory.total -= size;
|
|
249
|
+
this.memory.texturesSize -= size;
|
|
250
|
+
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Tracks attribute memory explicitly, updating counts and byte tracking.
|
|
255
|
+
*
|
|
256
|
+
* @param {BufferAttribute} attribute
|
|
257
|
+
* @param {string} type - type of attribute
|
|
258
|
+
* @private
|
|
259
|
+
*/
|
|
260
|
+
_createAttribute( attribute, type ) {
|
|
261
|
+
|
|
262
|
+
const size = this._getAttributeMemorySize( attribute );
|
|
263
|
+
this.memoryMap.set( attribute, { size, type } );
|
|
264
|
+
|
|
265
|
+
this.memory[ type ] ++;
|
|
266
|
+
this.memory.total += size;
|
|
267
|
+
this.memory[ type + 'Size' ] += size;
|
|
268
|
+
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Tracks a regular attribute memory explicitly.
|
|
273
|
+
*
|
|
274
|
+
* @param {BufferAttribute} attribute - The attribute to track.
|
|
275
|
+
*/
|
|
276
|
+
createAttribute( attribute ) {
|
|
277
|
+
|
|
278
|
+
this._createAttribute( attribute, 'attributes' );
|
|
279
|
+
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Tracks an index attribute memory explicitly.
|
|
284
|
+
*
|
|
285
|
+
* @param {BufferAttribute} attribute - The index attribute to track.
|
|
286
|
+
*/
|
|
287
|
+
createIndexAttribute( attribute ) {
|
|
288
|
+
|
|
289
|
+
this._createAttribute( attribute, 'indexAttributes' );
|
|
290
|
+
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Tracks a storage attribute memory explicitly.
|
|
295
|
+
*
|
|
296
|
+
* @param {BufferAttribute} attribute - The storage attribute to track.
|
|
297
|
+
*/
|
|
298
|
+
createStorageAttribute( attribute ) {
|
|
299
|
+
|
|
300
|
+
this._createAttribute( attribute, 'storageAttributes' );
|
|
301
|
+
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Tracks an indirect storage attribute memory explicitly.
|
|
306
|
+
*
|
|
307
|
+
* @param {BufferAttribute} attribute - The indirect storage attribute to track.
|
|
308
|
+
*/
|
|
309
|
+
createIndirectStorageAttribute( attribute ) {
|
|
310
|
+
|
|
311
|
+
this._createAttribute( attribute, 'indirectStorageAttributes' );
|
|
312
|
+
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* Tracks attribute memory explicitly, updating counts and byte tracking.
|
|
317
|
+
*
|
|
318
|
+
* @param {BufferAttribute} attribute
|
|
319
|
+
*/
|
|
320
|
+
destroyAttribute( attribute ) {
|
|
321
|
+
|
|
322
|
+
const data = this.memoryMap.get( attribute );
|
|
323
|
+
|
|
324
|
+
if ( data ) {
|
|
325
|
+
|
|
326
|
+
this.memoryMap.delete( attribute );
|
|
327
|
+
|
|
328
|
+
this.memory[ data.type ] --;
|
|
329
|
+
this.memory.total -= data.size;
|
|
330
|
+
this.memory[ data.type + 'Size' ] -= data.size;
|
|
331
|
+
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* Tracks a readback buffer memory explicitly.
|
|
338
|
+
*
|
|
339
|
+
* @param {ReadbackBuffer} readbackBuffer - The readback buffer to track.
|
|
340
|
+
*/
|
|
341
|
+
createReadbackBuffer( readbackBuffer ) {
|
|
342
|
+
|
|
343
|
+
const maxByteLength = readbackBuffer.maxByteLength;
|
|
344
|
+
this.memoryMap.set( readbackBuffer, { size: maxByteLength, type: 'readbackBuffers' } );
|
|
345
|
+
|
|
346
|
+
this.memory.readbackBuffers ++;
|
|
347
|
+
this.memory.total += maxByteLength;
|
|
348
|
+
this.memory.readbackBuffersSize += maxByteLength;
|
|
349
|
+
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Tracks a readback buffer memory explicitly.
|
|
354
|
+
*
|
|
355
|
+
* @param {ReadbackBuffer} readbackBuffer - The readback buffer to track.
|
|
356
|
+
*/
|
|
357
|
+
destroyReadbackBuffer( readbackBuffer ) {
|
|
358
|
+
|
|
359
|
+
const { size } = this.memoryMap.get( readbackBuffer );
|
|
360
|
+
this.memoryMap.delete( readbackBuffer );
|
|
361
|
+
|
|
362
|
+
this.memory.readbackBuffers --;
|
|
363
|
+
this.memory.total -= size;
|
|
364
|
+
this.memory.readbackBuffersSize -= size;
|
|
365
|
+
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Tracks program memory explicitly, updating counts and byte tracking.
|
|
370
|
+
*
|
|
371
|
+
* @param {ProgrammableStage} program - The program to track.
|
|
372
|
+
*/
|
|
373
|
+
createProgram( program ) {
|
|
374
|
+
|
|
375
|
+
const size = program.code.length; // Approx size
|
|
376
|
+
|
|
377
|
+
this.memoryMap.set( program, size );
|
|
378
|
+
|
|
379
|
+
this.memory.programs ++;
|
|
380
|
+
this.memory.total += size;
|
|
381
|
+
this.memory.programsSize += size;
|
|
382
|
+
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* Tracks program memory explicitly, updating counts and byte tracking.
|
|
387
|
+
*
|
|
388
|
+
* @param {Object} program - The program to track.
|
|
389
|
+
*/
|
|
390
|
+
destroyProgram( program ) {
|
|
391
|
+
|
|
392
|
+
const size = this.memoryMap.get( program ) || 0;
|
|
393
|
+
this.memoryMap.delete( program );
|
|
394
|
+
|
|
395
|
+
this.memory.programs --;
|
|
396
|
+
this.memory.total -= size;
|
|
397
|
+
this.memory.programsSize -= size;
|
|
398
|
+
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Calculates the memory size of a texture in bytes.
|
|
403
|
+
*
|
|
404
|
+
* @param {Texture} texture - The texture to calculate the size for.
|
|
405
|
+
* @return {number} The calculated size in bytes.
|
|
406
|
+
* @private
|
|
407
|
+
*/
|
|
408
|
+
_getTextureMemorySize( texture ) {
|
|
409
|
+
|
|
410
|
+
if ( texture.isCompressedTexture ) {
|
|
411
|
+
|
|
412
|
+
return 1; // Fallback estimate since exact format decompressed isn't readily available without format maps
|
|
413
|
+
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
let bytesPerChannel = 1;
|
|
417
|
+
|
|
418
|
+
if ( texture.type === ByteType || texture.type === UnsignedByteType ) bytesPerChannel = 1;
|
|
419
|
+
else if ( texture.type === ShortType || texture.type === UnsignedShortType || texture.type === HalfFloatType ) bytesPerChannel = 2;
|
|
420
|
+
else if ( texture.type === IntType || texture.type === UnsignedIntType || texture.type === FloatType ) bytesPerChannel = 4;
|
|
421
|
+
|
|
422
|
+
let channels = 4; // RGBA default
|
|
423
|
+
|
|
424
|
+
if ( texture.format === AlphaFormat || texture.format === RedFormat || texture.format === RedIntegerFormat || texture.format === DepthFormat || texture.format === DepthStencilFormat ) channels = 1;
|
|
425
|
+
else if ( texture.format === RGFormat || texture.format === RGIntegerFormat ) channels = 2;
|
|
426
|
+
else if ( texture.format === RGBFormat || texture.format === RGBIntegerFormat ) channels = 3;
|
|
427
|
+
|
|
428
|
+
let bytesPerPixel = bytesPerChannel * channels;
|
|
429
|
+
|
|
430
|
+
// Packed overrides
|
|
431
|
+
if ( texture.type === UnsignedShort4444Type || texture.type === UnsignedShort5551Type ) bytesPerPixel = 2;
|
|
432
|
+
else if ( texture.type === UnsignedInt248Type || texture.type === UnsignedInt5999Type || texture.type === UnsignedInt101111Type ) bytesPerPixel = 4;
|
|
433
|
+
|
|
434
|
+
const width = texture.width || 1;
|
|
435
|
+
const height = texture.height || 1;
|
|
436
|
+
const depth = texture.isCubeTexture ? 6 : ( texture.depth || 1 );
|
|
437
|
+
|
|
438
|
+
let size = width * height * depth * bytesPerPixel;
|
|
439
|
+
const mipmaps = texture.mipmaps;
|
|
440
|
+
|
|
441
|
+
if ( mipmaps && mipmaps.length > 0 ) {
|
|
442
|
+
|
|
443
|
+
let mipmapSize = 0;
|
|
444
|
+
for ( let i = 0; i < mipmaps.length; i ++ ) {
|
|
445
|
+
|
|
446
|
+
const mipmap = mipmaps[ i ];
|
|
447
|
+
if ( mipmap.data ) {
|
|
448
|
+
|
|
449
|
+
mipmapSize += mipmap.data.byteLength;
|
|
450
|
+
|
|
451
|
+
} else {
|
|
452
|
+
|
|
453
|
+
const mipWidth = mipmap.width || Math.max( 1, width >> i );
|
|
454
|
+
const mipHeight = mipmap.height || Math.max( 1, height >> i );
|
|
455
|
+
mipmapSize += mipWidth * mipHeight * depth * bytesPerPixel;
|
|
456
|
+
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
size += mipmapSize;
|
|
462
|
+
|
|
463
|
+
} else if ( texture.generateMipmaps ) {
|
|
464
|
+
|
|
465
|
+
size = size * 1.333; // MiP chain approximation
|
|
466
|
+
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
return Math.round( size );
|
|
470
|
+
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Calculates the memory size of an attribute in bytes.
|
|
475
|
+
*
|
|
476
|
+
* @param {BufferAttribute} attribute - The attribute to calculate the size for.
|
|
477
|
+
* @return {number} The calculated size in bytes.
|
|
478
|
+
* @private
|
|
479
|
+
*/
|
|
480
|
+
_getAttributeMemorySize( attribute ) {
|
|
481
|
+
|
|
482
|
+
if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;
|
|
483
|
+
|
|
484
|
+
if ( attribute.array ) {
|
|
485
|
+
|
|
486
|
+
return attribute.array.byteLength;
|
|
487
|
+
|
|
488
|
+
} else if ( attribute.count && attribute.itemSize ) {
|
|
489
|
+
|
|
490
|
+
return attribute.count * attribute.itemSize * 4; // Assume Float32
|
|
491
|
+
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
return 0;
|
|
166
495
|
|
|
167
496
|
}
|
|
168
497
|
|
|
@@ -1,15 +1,20 @@
|
|
|
1
|
+
import { EventDispatcher } from '../../core/EventDispatcher.js';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* InspectorBase is the base class for all inspectors.
|
|
3
5
|
*
|
|
4
6
|
* @class InspectorBase
|
|
7
|
+
* @augments EventDispatcher
|
|
5
8
|
*/
|
|
6
|
-
class InspectorBase {
|
|
9
|
+
class InspectorBase extends EventDispatcher {
|
|
7
10
|
|
|
8
11
|
/**
|
|
9
12
|
* Creates a new InspectorBase.
|
|
10
13
|
*/
|
|
11
14
|
constructor() {
|
|
12
15
|
|
|
16
|
+
super();
|
|
17
|
+
|
|
13
18
|
/**
|
|
14
19
|
* The renderer associated with this inspector.
|
|
15
20
|
*
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { LightsNode } from '../../nodes/Nodes.js';
|
|
2
|
-
import ChainMap from './ChainMap.js';
|
|
3
2
|
|
|
4
3
|
const _defaultLights = /*@__PURE__*/ new LightsNode();
|
|
5
|
-
const
|
|
4
|
+
const _weakMap = /*@__PURE__*/ new WeakMap();
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
7
|
* This renderer module manages the lights nodes which are unique
|
|
@@ -12,18 +11,8 @@ const _chainKeys = [];
|
|
|
12
11
|
* with the actual lights from the scene.
|
|
13
12
|
*
|
|
14
13
|
* @private
|
|
15
|
-
* @augments ChainMap
|
|
16
14
|
*/
|
|
17
|
-
class Lighting
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Constructs a lighting management component.
|
|
21
|
-
*/
|
|
22
|
-
constructor() {
|
|
23
|
-
|
|
24
|
-
super();
|
|
25
|
-
|
|
26
|
-
}
|
|
15
|
+
class Lighting {
|
|
27
16
|
|
|
28
17
|
/**
|
|
29
18
|
* Creates a new lights node for the given array of lights.
|
|
@@ -44,26 +33,21 @@ class Lighting extends ChainMap {
|
|
|
44
33
|
* @param {Camera} camera - The camera.
|
|
45
34
|
* @return {LightsNode} The lights node.
|
|
46
35
|
*/
|
|
47
|
-
getNode( scene
|
|
36
|
+
getNode( scene ) {
|
|
48
37
|
|
|
49
38
|
// ignore post-processing
|
|
50
39
|
|
|
51
40
|
if ( scene.isQuadMesh ) return _defaultLights;
|
|
52
41
|
|
|
53
|
-
|
|
54
|
-
_chainKeys[ 1 ] = camera;
|
|
55
|
-
|
|
56
|
-
let node = this.get( _chainKeys );
|
|
42
|
+
let node = _weakMap.get( scene );
|
|
57
43
|
|
|
58
44
|
if ( node === undefined ) {
|
|
59
45
|
|
|
60
46
|
node = this.createNode();
|
|
61
|
-
|
|
47
|
+
_weakMap.set( scene, node );
|
|
62
48
|
|
|
63
49
|
}
|
|
64
50
|
|
|
65
|
-
_chainKeys.length = 0;
|
|
66
|
-
|
|
67
51
|
return node;
|
|
68
52
|
|
|
69
53
|
}
|