@gnsx/three 0.185.16 → 0.186.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +10 -82600
- package/build/three.core.js +1309 -807
- package/build/three.module.js +439 -338
- package/build/three.tsl.js +74 -44
- package/build/three.webgpu.js +6036 -2184
- package/build/three.webgpu.nodes.js +6020 -2184
- package/examples/jsm/Addons.js +6 -6
- package/examples/jsm/controls/ArcballControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +44 -20
- package/examples/jsm/controls/OrbitControls.js +9 -0
- package/examples/jsm/controls/TrackballControls.js +109 -4
- package/examples/jsm/csm/CSMShadowNode.js +13 -0
- package/examples/jsm/exporters/GLTFExporter.js +23 -7
- package/examples/jsm/exporters/USDZExporter.js +2 -2
- package/examples/jsm/generators/CityGenerator.js +377 -45
- package/examples/jsm/generators/ForestGenerator.js +12 -12
- package/examples/jsm/generators/TerrainGenerator.js +49 -37
- package/examples/jsm/generators/TreeGenerator.js +70 -76
- package/examples/jsm/generators/city/BenchGenerator.js +127 -0
- package/examples/jsm/generators/city/CarGenerator.js +479 -0
- package/examples/jsm/generators/city/CityGeneratorUtils.js +31 -0
- package/examples/jsm/generators/city/HydrantGenerator.js +106 -0
- package/examples/jsm/generators/city/InstancedMeshGenerator.js +86 -0
- package/examples/jsm/generators/city/PersonGenerator.js +447 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +33 -38
- package/examples/jsm/generators/city/SkyscraperGenerator.js +448 -48
- package/examples/jsm/generators/city/StreetTreeGenerator.js +231 -0
- package/examples/jsm/generators/city/StreetlightGenerator.js +100 -0
- package/examples/jsm/generators/city/TrafficlightGenerator.js +106 -0
- package/examples/jsm/generators/city/TrashcanGenerator.js +100 -0
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +1 -1
- package/examples/jsm/gpgpu/CountingSort.js +271 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +60 -239
- package/examples/jsm/helpers/LightProbeGridHelperWebGL.js +221 -0
- package/examples/jsm/inspector/Extension.js +94 -0
- package/examples/jsm/inspector/Inspector.js +145 -41
- package/examples/jsm/inspector/RendererInspector.js +100 -52
- package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +2609 -0
- package/examples/jsm/inspector/extensions/color-grading/ColorWheel.js +352 -0
- package/examples/jsm/inspector/extensions/color-grading/CurveEditor.js +599 -0
- package/examples/jsm/inspector/extensions/color-grading/LUT3DStyle.js +1201 -0
- package/examples/jsm/inspector/extensions/color-grading/LUTMath.js +788 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/BrightnessModule.js +72 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ColorWheelModule.js +112 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ContrastModule.js +82 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/CurvesModule.js +109 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ExposureHueModule.js +110 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ExposureModule.js +73 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/HueModule.js +78 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ImportedCubeModule.js +89 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/Module.js +285 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/OutputModule.js +101 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/RendererModule.js +225 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/SatVibranceModule.js +102 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/SaturationModule.js +76 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/VibranceModule.js +76 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/WhiteBalanceModule.js +86 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +26 -31
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -0
- package/examples/jsm/inspector/tabs/Memory.js +0 -2
- package/examples/jsm/inspector/tabs/Settings.js +4 -0
- package/examples/jsm/inspector/tabs/Timeline.js +223 -171
- package/examples/jsm/inspector/tabs/Viewer.js +515 -21
- package/examples/jsm/inspector/ui/List.js +15 -9
- package/examples/jsm/inspector/ui/Profiler.js +170 -14
- package/examples/jsm/inspector/ui/Style.js +269 -23
- package/examples/jsm/inspector/ui/Tab.js +2 -0
- package/examples/jsm/inspector/ui/Values.js +14 -2
- package/examples/jsm/interactive/HTMLMesh.js +19 -3
- package/examples/jsm/lighting/LightProbeGrid.js +484 -889
- package/examples/jsm/lighting/LightProbeGridUtils.js +107 -0
- package/examples/jsm/lighting/LightProbeGridWebGL.js +841 -0
- package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +194 -0
- package/examples/jsm/lighting/vxgi/VXGINode.js +660 -0
- package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +478 -0
- package/examples/jsm/lighting/vxgi/VXGIVolume.js +1430 -0
- package/examples/jsm/lights/SunLight.js +95 -0
- package/examples/jsm/lights/SunLightNode.js +56 -0
- package/examples/jsm/lights/SunLightShadow.js +319 -0
- package/examples/jsm/lights/SunShadowNode.js +312 -0
- package/examples/jsm/loaders/3DMLoader.js +150 -49
- package/examples/jsm/loaders/3MFLoader.js +202 -1
- package/examples/jsm/loaders/FBXLoader.js +81 -5
- package/examples/jsm/loaders/GLTFGaussianSplatLoaderExtension.js +330 -0
- package/examples/jsm/loaders/GLTFLoader.js +79 -14
- package/examples/jsm/loaders/GaussianSplatPLYLoader.js +386 -0
- package/examples/jsm/loaders/KSPLATLoader.js +463 -0
- package/examples/jsm/loaders/MaterialXLoader.js +111 -1010
- package/examples/jsm/loaders/PCDLoader.js +1 -1
- package/examples/jsm/loaders/SPLATLoader.js +139 -0
- package/examples/jsm/loaders/SPZLoader.js +561 -0
- package/examples/jsm/loaders/materialx/MaterialXArchive.js +108 -0
- package/examples/jsm/loaders/materialx/MaterialXDocument.js +878 -0
- package/examples/jsm/loaders/materialx/MaterialXHextile.js +183 -0
- package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +376 -0
- package/examples/jsm/loaders/materialx/MaterialXLog.js +75 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +4 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +1021 -0
- package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +661 -0
- package/examples/jsm/loaders/materialx/MaterialXUtils.js +57 -0
- package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +997 -0
- package/examples/jsm/loaders/materialx/parse/MaterialXParser.js +28 -0
- package/examples/jsm/loaders/usd/USDAParser.js +15 -2
- package/examples/jsm/loaders/usd/USDCParser.js +1 -4
- package/examples/jsm/loaders/usd/USDComposer.js +80 -42
- package/examples/jsm/materials/WoodNodeMaterial.js +6 -108
- package/examples/jsm/misc/RollerCoaster.js +2 -2
- package/examples/jsm/misc/SculptGL.LICENSE.txt +21 -0
- package/examples/jsm/misc/Sculptor.js +1679 -0
- package/examples/jsm/misc/SculptorMesh.js +1504 -0
- package/examples/jsm/misc/SculptorTools.js +1180 -0
- package/examples/jsm/misc/SculptorUtils.js +345 -0
- package/examples/jsm/misc/TubePainter.js +28 -16
- package/examples/jsm/misc/VolumeSlice.js +24 -24
- package/examples/jsm/modifiers/SimplifyModifier.js +63 -556
- package/examples/jsm/objects/GaussianSplat.js +1039 -0
- package/examples/jsm/objects/Sky.js +66 -45
- package/examples/jsm/objects/SkyMesh.js +70 -51
- package/examples/jsm/physics/JoltPhysics.js +1 -1
- package/examples/jsm/postprocessing/AfterimagePass.js +4 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/GTAOPass.js +1 -1
- package/examples/jsm/postprocessing/OutlinePass.js +5 -5
- package/examples/jsm/postprocessing/SAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +4 -2
- package/examples/jsm/postprocessing/SavePass.js +1 -1
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +30 -13
- package/examples/jsm/renderers/CSS2DRenderer.js +29 -5
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +1 -1
- package/examples/jsm/shaders/FilmShader.js +2 -1
- package/examples/jsm/transpiler/AST.js +21 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +498 -8
- package/examples/jsm/transpiler/TSLEncoder.js +82 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +33 -4
- package/examples/jsm/tsl/WebGLNodesHandler.js +29 -39
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +3 -2
- package/examples/jsm/tsl/display/BilateralBlurNode.js +5 -2
- package/examples/jsm/tsl/display/BloomNode.js +55 -30
- package/examples/jsm/tsl/display/DenoiseNode.js +21 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +24 -6
- package/examples/jsm/tsl/display/DotScreenNode.js +11 -11
- package/examples/jsm/tsl/display/FSR1Node.js +8 -4
- package/examples/jsm/tsl/display/GTAONode.js +199 -86
- package/examples/jsm/tsl/display/GaussianBlurNode.js +65 -52
- package/examples/jsm/tsl/display/GodraysNode.js +5 -2
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +2 -2
- package/examples/jsm/tsl/display/LensflareNode.js +5 -2
- package/examples/jsm/tsl/display/OITPassNode.js +352 -0
- package/examples/jsm/tsl/display/OutlineNode.js +2 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +3 -2
- package/examples/jsm/tsl/display/RGBShiftNode.js +9 -9
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +7 -4
- package/examples/jsm/tsl/display/RetroPassNode.js +1 -1
- package/examples/jsm/tsl/display/SMAANode.js +22 -61
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -4
- package/examples/jsm/tsl/display/SSAONode.js +436 -0
- package/examples/jsm/tsl/display/SSGINode.js +5 -2
- package/examples/jsm/tsl/display/SSRNode.js +7 -2
- package/examples/jsm/tsl/display/SSSNode.js +5 -2
- package/examples/jsm/tsl/display/SharpenNode.js +5 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -3
- package/examples/jsm/tsl/display/TAAUNode.js +22 -125
- package/examples/jsm/tsl/display/TRAANode.js +16 -142
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +21 -15
- package/examples/jsm/tsl/display/depthAwareBlur.js +63 -0
- package/examples/jsm/tsl/display/hashBlur.js +3 -2
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +38 -27
- package/examples/jsm/tsl/lighting/LightProbeGridNode.js +136 -0
- package/examples/jsm/tsl/math/voronoiNoise.js +112 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +4 -6
- package/examples/jsm/tsl/utils/Raymarching.js +5 -5
- package/examples/jsm/tsl/utils/SoftParticles.js +60 -0
- package/examples/jsm/tsl/utils/TAAUtils.js +195 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +14 -14
- package/examples/jsm/utils/GaussianSplatUtils.js +229 -0
- package/examples/jsm/utils/WebGLTextureUtils.js +1 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +2 -16
- package/examples/jsm/webxr/XRControllerModelFactory.js +16 -4
- package/package.json +9 -16
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +73 -43
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +1 -0
- package/src/animation/AnimationClip.js +15 -2
- package/src/animation/AnimationObjectGroup.js +18 -6
- package/src/animation/AnimationUtils.js +26 -0
- package/src/animation/KeyframeTrack.js +37 -0
- package/src/constants.js +23 -1
- package/src/core/BufferAttribute.js +3 -2
- package/src/core/BufferGeometry.js +1 -1
- package/src/core/InterleavedBuffer.js +5 -1
- package/src/core/Object3D.js +40 -12
- package/src/core/Raycaster.js +4 -0
- package/src/core/RenderTarget.js +99 -9
- package/src/core/RenderTarget3D.js +12 -8
- package/src/extras/Controls.js +0 -8
- package/src/extras/PMREMGenerator.js +99 -205
- package/src/geometries/TorusGeometry.js +1 -1
- package/src/helpers/ArrowHelper.js +2 -0
- package/src/helpers/AxesHelper.js +2 -0
- package/src/helpers/Box3Helper.js +2 -0
- package/src/helpers/BoxHelper.js +2 -0
- package/src/helpers/CameraHelper.js +2 -0
- package/src/helpers/DirectionalLightHelper.js +2 -0
- package/src/helpers/GridHelper.js +2 -0
- package/src/helpers/HemisphereLightHelper.js +2 -0
- package/src/helpers/PlaneHelper.js +2 -0
- package/src/helpers/PointLightHelper.js +2 -0
- package/src/helpers/PolarGridHelper.js +2 -0
- package/src/helpers/SkeletonHelper.js +2 -0
- package/src/helpers/SpotLightHelper.js +2 -0
- package/src/lights/Light.js +0 -10
- package/src/lights/LightShadow.js +43 -12
- package/src/lights/SpotLightShadow.js +18 -0
- package/src/loaders/BufferGeometryLoader.js +5 -0
- package/src/loaders/ImageBitmapLoader.js +3 -1
- package/src/loaders/ObjectLoader.js +8 -5
- package/src/materials/Material.js +80 -57
- package/src/materials/MeshPhysicalMaterial.js +32 -0
- package/src/materials/nodes/Line2NodeMaterial.js +17 -8
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +42 -5
- package/src/materials/nodes/NodeMaterial.js +19 -13
- package/src/materials/nodes/PointsNodeMaterial.js +2 -1
- package/src/materials/nodes/manager/NodeMaterialObserver.js +282 -55
- package/src/math/Frustum.js +9 -0
- package/src/math/FrustumArray.js +1 -1
- package/src/math/MathUtils.js +5 -3
- package/src/math/Matrix4.js +2 -9
- package/src/math/Plane.js +30 -1
- package/src/math/Quaternion.js +0 -10
- package/src/math/Ray.js +95 -45
- package/src/math/Triangle.js +0 -2
- package/src/math/Vector3.js +2 -2
- package/src/math/Vector4.js +0 -4
- package/src/math/interpolants/BezierInterpolant.js +36 -23
- package/src/nodes/Nodes.js +2 -0
- package/src/nodes/TSL.js +11 -3
- package/src/nodes/accessors/Batch.js +85 -13
- package/src/nodes/accessors/BufferAttributeNode.js +1 -1
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/Instance.js +19 -18
- package/src/nodes/accessors/MaterialNode.js +9 -0
- package/src/nodes/accessors/ModelNode.js +85 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -70
- package/src/nodes/accessors/ReferenceElementNode.js +72 -0
- package/src/nodes/accessors/ReferenceNode.js +1 -70
- package/src/nodes/accessors/Skinning.js +124 -12
- package/src/nodes/accessors/StorageTextureNode.js +7 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +51 -21
- package/src/nodes/accessors/TextureSizeNode.js +4 -2
- package/src/nodes/accessors/UniformArrayNode.js +30 -5
- package/src/nodes/code/CodeNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +12 -2
- package/src/nodes/core/ArrayNode.js +2 -2
- package/src/nodes/core/ContextNode.js +57 -4
- package/src/nodes/core/IndexNode.js +69 -4
- package/src/nodes/core/InspectorNode.js +2 -2
- package/src/nodes/core/MRTNode.js +44 -2
- package/src/nodes/core/Node.js +6 -3
- package/src/nodes/core/NodeBuilder.js +65 -50
- package/src/nodes/core/NodeFrame.js +11 -3
- package/src/nodes/core/NodeUtils.js +88 -0
- package/src/nodes/core/PropertyNode.js +8 -0
- package/src/nodes/core/StackNode.js +0 -1
- package/src/nodes/core/StructNode.js +4 -3
- package/src/nodes/core/UniformGroupNode.js +3 -2
- package/src/nodes/core/UniformNode.js +26 -12
- package/src/nodes/core/VarNode.js +0 -1
- package/src/nodes/display/BumpMapNode.js +2 -2
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/PassNode.js +76 -15
- package/src/nodes/display/ScreenNode.js +22 -65
- package/src/nodes/fog/Fog.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_GGX.js +6 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +1 -1
- package/src/nodes/functions/BSDF/DFGLUT.js +2 -1
- package/src/nodes/functions/BSDF/LTC.js +1 -1
- package/src/nodes/functions/PhongLightingModel.js +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +83 -25
- package/src/nodes/functions/ToonLightingModel.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +3 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +64 -13
- package/src/nodes/gpgpu/BarrierNode.js +13 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +20 -17
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +165 -37
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +44 -6
- package/src/nodes/lighting/EnvironmentNode.js +40 -4
- package/src/nodes/lighting/LightsNode.js +20 -4
- package/src/nodes/lighting/ShadowBaseNode.js +158 -1
- package/src/nodes/lighting/ShadowFilterNode.js +2 -106
- package/src/nodes/lighting/ShadowNode.js +22 -91
- package/src/nodes/materialx/{lib/mx_hsv.js → MaterialXColor.js} +3 -6
- package/src/nodes/materialx/{lib/mx_transform_color.js → MaterialXColorTransform.js} +3 -6
- package/src/nodes/materialx/MaterialXCore.js +37 -0
- package/src/nodes/materialx/MaterialXNodes.js +64 -72
- package/src/nodes/materialx/{lib/mx_noise.js → MaterialXNoise.js} +426 -197
- package/src/nodes/math/BitcountNode.js +24 -4
- package/src/nodes/math/MathNode.js +4 -4
- package/src/nodes/math/MathUtils.js +15 -4
- package/src/nodes/math/OperatorNode.js +2 -2
- package/src/nodes/math/PackFloatNode.js +29 -1
- package/src/nodes/math/Packed4x8IntegerNode.js +433 -0
- package/src/nodes/math/UnpackFloatNode.js +30 -2
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +31 -74
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLCore.js +1 -31
- package/src/nodes/utils/EventNode.js +75 -0
- package/src/nodes/utils/LoopNode.js +54 -13
- package/src/nodes/utils/PostProcessingUtils.js +23 -2
- package/src/nodes/utils/RTTNode.js +97 -32
- package/src/nodes/utils/ReflectorNode.js +8 -4
- package/src/nodes/utils/RotateNode.js +85 -8
- package/src/nodes/utils/SpriteUtils.js +58 -23
- package/src/objects/BatchedMesh.js +6 -0
- package/src/objects/InstancedMesh.js +1 -1
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +12 -0
- package/src/objects/Mesh.js +12 -0
- package/src/objects/Points.js +12 -0
- package/src/objects/Sprite.js +12 -0
- package/src/renderers/WebGLRenderer.js +93 -27
- package/src/renderers/common/Animation.js +12 -2
- package/src/renderers/common/Backend.js +38 -10
- package/src/renderers/common/BindGroup.js +0 -1
- package/src/renderers/common/Bindings.js +50 -4
- package/src/renderers/common/BundleGroup.js +4 -0
- package/src/renderers/common/ClippingContext.js +11 -1
- package/src/renderers/common/Color4.js +9 -0
- package/src/renderers/common/Constants.js +0 -5
- package/src/renderers/common/DirectRenderPipeline.js +233 -0
- package/src/renderers/common/Geometries.js +24 -3
- package/src/renderers/common/Info.js +3 -3
- package/src/renderers/common/InspectorBase.js +37 -8
- package/src/renderers/common/Lighting.js +11 -4
- package/src/renderers/common/Pipelines.js +6 -4
- package/src/renderers/common/QuadMesh.js +16 -2
- package/src/renderers/common/RenderContext.js +8 -0
- package/src/renderers/common/RenderList.js +53 -19
- package/src/renderers/common/RenderLists.js +58 -11
- package/src/renderers/common/RenderObject.js +14 -0
- package/src/renderers/common/RenderObjects.js +14 -9
- package/src/renderers/common/RenderPipeline.js +52 -44
- package/src/renderers/common/Renderer.js +226 -55
- package/src/renderers/common/Storage3DTexture.js +16 -0
- package/src/renderers/common/Textures.js +3 -3
- package/src/renderers/common/XRManager.js +79 -72
- package/src/renderers/common/extras/PMREMGenerator.js +76 -144
- package/src/renderers/common/nodes/NodeManager.js +144 -6
- package/src/renderers/common/nodes/NodeStorageBuffer.js +3 -1
- package/src/renderers/common/nodes/NodeUniformBuffer.js +3 -1
- package/src/renderers/shaders/DFGLUTData.js +2 -1
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +4 -2
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +48 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +53 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +20 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +61 -57
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +9 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +15 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
- package/src/renderers/shaders/ShaderLib.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +16 -0
- package/src/renderers/webgl/WebGLAnimation.js +2 -2
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLLights.js +74 -4
- package/src/renderers/webgl/WebGLMaterials.js +6 -0
- package/src/renderers/webgl/WebGLOutput.js +36 -24
- package/src/renderers/webgl/WebGLProgram.js +3 -0
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLRenderLists.js +6 -10
- package/src/renderers/webgl/WebGLShadowMap.js +47 -44
- package/src/renderers/webgl/WebGLTextures.js +7 -7
- package/src/renderers/webgl-fallback/WebGLBackend.js +153 -45
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +83 -29
- package/src/renderers/webgl-fallback/utils/WebGLState.js +163 -17
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +32 -5
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +11 -4
- package/src/renderers/webgpu/WebGPUBackend.js +513 -145
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +99 -20
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -12
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +24 -14
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +80 -14
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +62 -7
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +9 -3
- package/src/renderers/webgpu/utils/WebGPUUtils.js +16 -4
- package/src/renderers/webxr/WebXRManager.js +25 -2
- package/src/scenes/Scene.js +3 -3
- package/src/textures/CompressedArrayTexture.js +16 -0
- package/src/textures/Data3DTexture.js +16 -0
- package/src/textures/DataArrayTexture.js +16 -0
- package/src/textures/DepthTexture.js +3 -3
- package/src/textures/Texture.js +3 -3
- package/src/textures/{Source.js → TextureSource.js} +39 -8
- package/src/utils.js +6 -79
- package/build/three.core.min.js +0 -6
- package/build/three.module.min.js +0 -6
- package/build/three.tsl.min.js +0 -6
- package/build/three.webgpu.min.js +0 -6
- package/build/three.webgpu.nodes.min.js +0 -6
- package/examples/jsm/libs/ecsy.module.js +0 -1792
- package/examples/jsm/loaders/LottieLoader.js +0 -130
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +0 -52
|
@@ -5,11 +5,12 @@ import { getItem, setItem } from '../Inspector.js';
|
|
|
5
5
|
|
|
6
6
|
export class Profiler extends EventDispatcher {
|
|
7
7
|
|
|
8
|
-
constructor( inspector ) {
|
|
8
|
+
constructor( inspector, options = {} ) {
|
|
9
9
|
|
|
10
10
|
super();
|
|
11
11
|
|
|
12
12
|
this.inspector = inspector;
|
|
13
|
+
this.nonce = options.nonce ?? inspector?.nonce ?? null;
|
|
13
14
|
this.tabs = {};
|
|
14
15
|
this.activeTabId = null;
|
|
15
16
|
this.isResizing = false;
|
|
@@ -20,10 +21,15 @@ export class Profiler extends EventDispatcher {
|
|
|
20
21
|
this.maxZIndex = 1002; // Track the highest z-index for detached windows (starts at base z-index from CSS)
|
|
21
22
|
this.nextTabOriginalIndex = 0; // Track the original order of tabs as they are added
|
|
22
23
|
|
|
24
|
+
this.horizontalAlign = 'right'; // 'left' or 'right'
|
|
25
|
+
this.verticalAlign = 'top'; // 'top' or 'bottom'
|
|
26
|
+
|
|
23
27
|
this.setupShell();
|
|
24
28
|
this.setupResizing();
|
|
25
29
|
|
|
26
|
-
Style.init( this.domElement );
|
|
30
|
+
Style.init( this.domElement, this.nonce );
|
|
31
|
+
|
|
32
|
+
this.updateWidgetPosition();
|
|
27
33
|
|
|
28
34
|
// Setup window resize listener and update mobile status
|
|
29
35
|
this.setupWindowResizeListener();
|
|
@@ -194,6 +200,7 @@ export class Profiler extends EventDispatcher {
|
|
|
194
200
|
constrainDetachedWindows();
|
|
195
201
|
constrainMainPanel();
|
|
196
202
|
this.checkHeaderScroll();
|
|
203
|
+
this.notifyLayoutChange();
|
|
197
204
|
|
|
198
205
|
} );
|
|
199
206
|
|
|
@@ -254,6 +261,9 @@ export class Profiler extends EventDispatcher {
|
|
|
254
261
|
|
|
255
262
|
this.domElement.classList.add( 'three-inspector' );
|
|
256
263
|
|
|
264
|
+
this.domElement.addEventListener( 'keydown', ( e ) => e.stopPropagation() );
|
|
265
|
+
this.domElement.addEventListener( 'keyup', ( e ) => e.stopPropagation() );
|
|
266
|
+
|
|
257
267
|
this.toggleButton = document.createElement( 'button' );
|
|
258
268
|
this.toggleButton.classList.add( 'profiler-toggle' );
|
|
259
269
|
this.toggleButton.innerHTML = `
|
|
@@ -265,13 +275,19 @@ export class Profiler extends EventDispatcher {
|
|
|
265
275
|
<span class="toggle-icon">
|
|
266
276
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-device-ipad-horizontal-search"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M11.5 20h-6.5a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v5.5" /><path d="M9 17h2" /><path d="M18 18m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0" /><path d="M20.2 20.2l1.8 1.8" /></svg>
|
|
267
277
|
<span class="console-badge-container">
|
|
268
|
-
<span class="console-badge error"
|
|
269
|
-
<span class="console-badge warn"
|
|
278
|
+
<span class="console-badge error">0</span>
|
|
279
|
+
<span class="console-badge warn">0</span>
|
|
270
280
|
</span>
|
|
271
281
|
</span>
|
|
272
282
|
`;
|
|
273
283
|
this.toggleButton.onclick = () => this.togglePanel();
|
|
274
284
|
|
|
285
|
+
const errorBadge = this.toggleButton.querySelector( '.console-badge.error' );
|
|
286
|
+
errorBadge.style.display = 'none';
|
|
287
|
+
|
|
288
|
+
const warnBadge = this.toggleButton.querySelector( '.console-badge.warn' );
|
|
289
|
+
warnBadge.style.display = 'none';
|
|
290
|
+
|
|
275
291
|
this.builtinTabsContainer = this.toggleButton.querySelector( '.builtin-tabs-container' );
|
|
276
292
|
|
|
277
293
|
// Create mini-panel for builtin tabs (shown when panel is hidden)
|
|
@@ -492,13 +508,13 @@ export class Profiler extends EventDispatcher {
|
|
|
492
508
|
// Maximize based on current position
|
|
493
509
|
if ( this.position === 'bottom' ) {
|
|
494
510
|
|
|
495
|
-
this.panel.style.height = '
|
|
511
|
+
this.panel.style.height = '100%';
|
|
496
512
|
this.panel.style.width = '100%';
|
|
497
513
|
|
|
498
514
|
} else if ( this.position === 'right' ) {
|
|
499
515
|
|
|
500
516
|
this.panel.style.height = '100%';
|
|
501
|
-
this.panel.style.width = '
|
|
517
|
+
this.panel.style.width = '100%';
|
|
502
518
|
|
|
503
519
|
}
|
|
504
520
|
|
|
@@ -506,6 +522,8 @@ export class Profiler extends EventDispatcher {
|
|
|
506
522
|
|
|
507
523
|
}
|
|
508
524
|
|
|
525
|
+
this.updateWidgetPosition();
|
|
526
|
+
|
|
509
527
|
this.dispatchEvent( { type: 'resize' } );
|
|
510
528
|
|
|
511
529
|
}
|
|
@@ -591,11 +609,18 @@ export class Profiler extends EventDispatcher {
|
|
|
591
609
|
|
|
592
610
|
}
|
|
593
611
|
|
|
612
|
+
// Set profiler reference
|
|
613
|
+
tab.profiler = this;
|
|
614
|
+
|
|
594
615
|
// Update panel size when tabs change
|
|
595
616
|
this.updatePanelSize();
|
|
596
617
|
|
|
597
|
-
//
|
|
598
|
-
tab.
|
|
618
|
+
// If newly added tab matches activeTabId from saved layout, activate it
|
|
619
|
+
if ( this.activeTabId && tab.id === this.activeTabId ) {
|
|
620
|
+
|
|
621
|
+
this.setActiveTab( tab.id );
|
|
622
|
+
|
|
623
|
+
}
|
|
599
624
|
|
|
600
625
|
}
|
|
601
626
|
|
|
@@ -1688,6 +1713,8 @@ export class Profiler extends EventDispatcher {
|
|
|
1688
1713
|
|
|
1689
1714
|
}
|
|
1690
1715
|
|
|
1716
|
+
this.updateWidgetPosition();
|
|
1717
|
+
|
|
1691
1718
|
this.dispatchEvent( { type: 'resize' } );
|
|
1692
1719
|
|
|
1693
1720
|
this.saveLayout();
|
|
@@ -1720,8 +1747,6 @@ export class Profiler extends EventDispatcher {
|
|
|
1720
1747
|
// Apply right position styles
|
|
1721
1748
|
this.panel.classList.remove( 'position-bottom' );
|
|
1722
1749
|
this.panel.classList.add( 'position-right' );
|
|
1723
|
-
this.toggleButton.classList.add( 'position-right' );
|
|
1724
|
-
this.miniPanel.classList.add( 'position-right' );
|
|
1725
1750
|
this.panel.style.bottom = '';
|
|
1726
1751
|
this.panel.style.top = '0';
|
|
1727
1752
|
this.panel.style.right = '0';
|
|
@@ -1730,7 +1755,7 @@ export class Profiler extends EventDispatcher {
|
|
|
1730
1755
|
// Apply size based on maximized state
|
|
1731
1756
|
if ( isMaximized ) {
|
|
1732
1757
|
|
|
1733
|
-
this.panel.style.width = '
|
|
1758
|
+
this.panel.style.width = '100%';
|
|
1734
1759
|
this.panel.style.height = '100%';
|
|
1735
1760
|
|
|
1736
1761
|
} else {
|
|
@@ -1750,8 +1775,6 @@ export class Profiler extends EventDispatcher {
|
|
|
1750
1775
|
// Apply bottom position styles
|
|
1751
1776
|
this.panel.classList.remove( 'position-right' );
|
|
1752
1777
|
this.panel.classList.add( 'position-bottom' );
|
|
1753
|
-
this.toggleButton.classList.remove( 'position-right' );
|
|
1754
|
-
this.miniPanel.classList.remove( 'position-right' );
|
|
1755
1778
|
this.panel.style.top = '';
|
|
1756
1779
|
this.panel.style.right = '';
|
|
1757
1780
|
this.panel.style.bottom = '0';
|
|
@@ -1761,7 +1784,7 @@ export class Profiler extends EventDispatcher {
|
|
|
1761
1784
|
if ( isMaximized ) {
|
|
1762
1785
|
|
|
1763
1786
|
this.panel.style.width = '100%';
|
|
1764
|
-
this.panel.style.height = '
|
|
1787
|
+
this.panel.style.height = '100%';
|
|
1765
1788
|
|
|
1766
1789
|
} else {
|
|
1767
1790
|
|
|
@@ -1772,6 +1795,8 @@ export class Profiler extends EventDispatcher {
|
|
|
1772
1795
|
|
|
1773
1796
|
}
|
|
1774
1797
|
|
|
1798
|
+
this.updateWidgetPosition();
|
|
1799
|
+
|
|
1775
1800
|
// Re-enable transition after a brief delay
|
|
1776
1801
|
setTimeout( () => {
|
|
1777
1802
|
|
|
@@ -1994,6 +2019,9 @@ export class Profiler extends EventDispatcher {
|
|
|
1994
2019
|
// Update panel size after loading layout
|
|
1995
2020
|
this.updatePanelSize();
|
|
1996
2021
|
|
|
2022
|
+
// Update widget position (toggle and mini panel alignment)
|
|
2023
|
+
this.updateWidgetPosition();
|
|
2024
|
+
|
|
1997
2025
|
// Ensure initial open state applies to mini panel as well
|
|
1998
2026
|
if ( this.panel.classList.contains( 'visible' ) ) {
|
|
1999
2027
|
|
|
@@ -2114,4 +2142,132 @@ export class Profiler extends EventDispatcher {
|
|
|
2114
2142
|
|
|
2115
2143
|
}
|
|
2116
2144
|
|
|
2145
|
+
setHorizontalAlign( value ) {
|
|
2146
|
+
|
|
2147
|
+
this.horizontalAlign = value;
|
|
2148
|
+
this.updateWidgetPosition();
|
|
2149
|
+
|
|
2150
|
+
return this;
|
|
2151
|
+
|
|
2152
|
+
}
|
|
2153
|
+
|
|
2154
|
+
setVerticalAlign( value ) {
|
|
2155
|
+
|
|
2156
|
+
this.verticalAlign = value;
|
|
2157
|
+
this.updateWidgetPosition();
|
|
2158
|
+
|
|
2159
|
+
return this;
|
|
2160
|
+
|
|
2161
|
+
}
|
|
2162
|
+
|
|
2163
|
+
updateWidgetPosition() {
|
|
2164
|
+
|
|
2165
|
+
const isVisible = this.panel.classList.contains( 'visible' );
|
|
2166
|
+
const isMaximized = this.panel.classList.contains( 'maximized' );
|
|
2167
|
+
const isRight = this.position === 'right';
|
|
2168
|
+
|
|
2169
|
+
let horizontal = this.horizontalAlign; // 'left' or 'right'
|
|
2170
|
+
let vertical = this.verticalAlign; // 'top' or 'bottom'
|
|
2171
|
+
|
|
2172
|
+
if ( isVisible ) {
|
|
2173
|
+
|
|
2174
|
+
if ( isRight ) {
|
|
2175
|
+
|
|
2176
|
+
// If panel is open on the right:
|
|
2177
|
+
// Toggle should be on the opposite side of 'right' if default is 'right' to avoid overlapping the panel.
|
|
2178
|
+
if ( this.horizontalAlign === 'right' ) {
|
|
2179
|
+
|
|
2180
|
+
horizontal = 'left';
|
|
2181
|
+
|
|
2182
|
+
}
|
|
2183
|
+
|
|
2184
|
+
} else {
|
|
2185
|
+
|
|
2186
|
+
// If panel is open at the bottom:
|
|
2187
|
+
if ( ! isMaximized ) {
|
|
2188
|
+
|
|
2189
|
+
// If default is bottom, we must move to top to avoid overlapping the panel at the bottom.
|
|
2190
|
+
if ( this.verticalAlign === 'bottom' ) {
|
|
2191
|
+
|
|
2192
|
+
vertical = 'top';
|
|
2193
|
+
|
|
2194
|
+
}
|
|
2195
|
+
|
|
2196
|
+
} else {
|
|
2197
|
+
|
|
2198
|
+
// If maximized, move to the opposite vertical position to avoid overlap with header/tabs.
|
|
2199
|
+
vertical = this.verticalAlign === 'top' ? 'bottom' : 'top';
|
|
2200
|
+
|
|
2201
|
+
}
|
|
2202
|
+
|
|
2203
|
+
}
|
|
2204
|
+
|
|
2205
|
+
}
|
|
2206
|
+
|
|
2207
|
+
// Apply horizontal class
|
|
2208
|
+
if ( horizontal === 'left' ) {
|
|
2209
|
+
|
|
2210
|
+
this.toggleButton.classList.add( 'toggle-left' );
|
|
2211
|
+
this.miniPanel.classList.add( 'toggle-left' );
|
|
2212
|
+
|
|
2213
|
+
} else {
|
|
2214
|
+
|
|
2215
|
+
this.toggleButton.classList.remove( 'toggle-left' );
|
|
2216
|
+
this.miniPanel.classList.remove( 'toggle-left' );
|
|
2217
|
+
|
|
2218
|
+
}
|
|
2219
|
+
|
|
2220
|
+
// Apply vertical class
|
|
2221
|
+
if ( vertical === 'bottom' ) {
|
|
2222
|
+
|
|
2223
|
+
this.toggleButton.classList.add( 'toggle-bottom' );
|
|
2224
|
+
this.miniPanel.classList.add( 'toggle-bottom' );
|
|
2225
|
+
|
|
2226
|
+
} else {
|
|
2227
|
+
|
|
2228
|
+
this.toggleButton.classList.remove( 'toggle-bottom' );
|
|
2229
|
+
this.miniPanel.classList.remove( 'toggle-bottom' );
|
|
2230
|
+
|
|
2231
|
+
}
|
|
2232
|
+
|
|
2233
|
+
this.notifyLayoutChange();
|
|
2234
|
+
|
|
2235
|
+
}
|
|
2236
|
+
|
|
2237
|
+
isVertical() {
|
|
2238
|
+
|
|
2239
|
+
return this.position === 'left' || this.position === 'right' ||
|
|
2240
|
+
( this.panel && ( this.panel.classList.contains( 'position-left' ) || this.panel.classList.contains( 'position-right' ) ) );
|
|
2241
|
+
|
|
2242
|
+
}
|
|
2243
|
+
|
|
2244
|
+
notifyLayoutChange() {
|
|
2245
|
+
|
|
2246
|
+
const isVert = this.isVertical();
|
|
2247
|
+
|
|
2248
|
+
this.dispatchEvent( { type: 'orientationchange', position: this.position, isVertical: isVert } );
|
|
2249
|
+
this.dispatchEvent( { type: 'layoutchange', position: this.position, isVertical: isVert } );
|
|
2250
|
+
|
|
2251
|
+
}
|
|
2252
|
+
|
|
2253
|
+
dispose() {
|
|
2254
|
+
|
|
2255
|
+
for ( const tab of Object.values( this.tabs ) ) {
|
|
2256
|
+
|
|
2257
|
+
tab.dispose();
|
|
2258
|
+
|
|
2259
|
+
}
|
|
2260
|
+
|
|
2261
|
+
this.domElement.remove();
|
|
2262
|
+
|
|
2263
|
+
for ( const detachedWindow of this.detachedWindows ) {
|
|
2264
|
+
|
|
2265
|
+
detachedWindow.panel.remove();
|
|
2266
|
+
|
|
2267
|
+
}
|
|
2268
|
+
|
|
2269
|
+
this.toggleGraph.dispose();
|
|
2270
|
+
|
|
2271
|
+
}
|
|
2272
|
+
|
|
2117
2273
|
}
|