@gnsx/three 0.185.15 → 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 +1303 -728
- 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/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
|
@@ -17,6 +17,7 @@ import { Mesh } from '../../objects/Mesh.js';
|
|
|
17
17
|
import { warn, warnOnce } from '../../utils.js';
|
|
18
18
|
import { renderOutput } from '../../nodes/display/RenderOutputNode.js';
|
|
19
19
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
20
|
+
import { context } from '../../nodes/core/ContextNode.js';
|
|
20
21
|
|
|
21
22
|
const _cameraLPos = /*@__PURE__*/ new Vector3();
|
|
22
23
|
const _cameraRPos = /*@__PURE__*/ new Vector3();
|
|
@@ -230,22 +231,22 @@ class XRManager extends EventDispatcher {
|
|
|
230
231
|
this._currentPixelRatio = null;
|
|
231
232
|
|
|
232
233
|
/**
|
|
233
|
-
* The
|
|
234
|
+
* The current size of the renderer's canvas
|
|
235
|
+
* in logical pixel unit.
|
|
234
236
|
*
|
|
235
237
|
* @private
|
|
236
|
-
* @type {
|
|
237
|
-
* @default null
|
|
238
|
+
* @type {Vector2}
|
|
238
239
|
*/
|
|
239
|
-
this.
|
|
240
|
+
this._currentSize = new Vector2();
|
|
240
241
|
|
|
241
242
|
/**
|
|
242
|
-
*
|
|
243
|
-
* in logical pixel unit.
|
|
243
|
+
* Holds a reference to the user camera and its current settings.
|
|
244
244
|
*
|
|
245
245
|
* @private
|
|
246
|
-
* @type {
|
|
246
|
+
* @type {?Object}
|
|
247
|
+
* @default null
|
|
247
248
|
*/
|
|
248
|
-
this.
|
|
249
|
+
this._currentCameraSettings = null;
|
|
249
250
|
|
|
250
251
|
/**
|
|
251
252
|
* The default event listener for handling events inside a XR session.
|
|
@@ -648,11 +649,11 @@ class XRManager extends EventDispatcher {
|
|
|
648
649
|
* Browser-side `XRWebGLBinding.foveateBoundTexture()` failures are treated as
|
|
649
650
|
* non-fatal so they do not interrupt rendering.
|
|
650
651
|
*
|
|
651
|
-
* @param {RenderTarget} renderTarget - The internal render target.
|
|
652
|
+
* @param {?RenderTarget} renderTarget - The internal render target.
|
|
652
653
|
*/
|
|
653
654
|
foveateBoundTexture( renderTarget ) {
|
|
654
655
|
|
|
655
|
-
if ( renderTarget.isPostProcessingRenderTarget !== true ) return;
|
|
656
|
+
if ( renderTarget === null || renderTarget.isPostProcessingRenderTarget !== true ) return;
|
|
656
657
|
if ( this.isPresenting !== true ) return;
|
|
657
658
|
if ( this._glProjLayer === null ) return;
|
|
658
659
|
|
|
@@ -737,9 +738,7 @@ class XRManager extends EventDispatcher {
|
|
|
737
738
|
*/
|
|
738
739
|
_validateWebGPUSession() {
|
|
739
740
|
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
if ( renderer.backend.isWebGPUBackend !== true ) return;
|
|
741
|
+
if ( this._renderer.backend.isWebGPUBackend !== true ) return;
|
|
743
742
|
|
|
744
743
|
if ( this._session.enabledFeatures.includes( 'webgpu' ) === false ) {
|
|
745
744
|
|
|
@@ -747,15 +746,6 @@ class XRManager extends EventDispatcher {
|
|
|
747
746
|
|
|
748
747
|
}
|
|
749
748
|
|
|
750
|
-
if ( renderer.samples > 0 ) {
|
|
751
|
-
|
|
752
|
-
warnOnce( 'THREE.XRManager: WebGPU XR does not support MSAA yet. Disabling MSAA for this XR session.' );
|
|
753
|
-
|
|
754
|
-
if ( this._currentSamples === null ) this._currentSamples = renderer.samples;
|
|
755
|
-
renderer._samples = 0;
|
|
756
|
-
|
|
757
|
-
}
|
|
758
|
-
|
|
759
749
|
}
|
|
760
750
|
|
|
761
751
|
/**
|
|
@@ -770,8 +760,7 @@ class XRManager extends EventDispatcher {
|
|
|
770
760
|
|
|
771
761
|
const webgpuBinding = this.getWebGPUBinding();
|
|
772
762
|
const glProjLayer = webgpuBinding.createProjectionLayer( {
|
|
773
|
-
colorFormat: webgpuBinding.getPreferredColorFormat()
|
|
774
|
-
depthStencilFormat: 'depth24plus'
|
|
763
|
+
colorFormat: webgpuBinding.getPreferredColorFormat()
|
|
775
764
|
} );
|
|
776
765
|
|
|
777
766
|
this._glProjLayer = glProjLayer;
|
|
@@ -787,7 +776,10 @@ class XRManager extends EventDispatcher {
|
|
|
787
776
|
depthBuffer: true,
|
|
788
777
|
multiview: false,
|
|
789
778
|
useArrayDepthTexture: true,
|
|
790
|
-
|
|
779
|
+
storeMultisampledColorBuffer: false,
|
|
780
|
+
storeMultisampledDepthBuffer: false,
|
|
781
|
+
storeMultisampledStencilBuffer: false,
|
|
782
|
+
samples: this._renderer.samples
|
|
791
783
|
} );
|
|
792
784
|
|
|
793
785
|
this._xrRenderTarget.texture.isArrayTexture = true;
|
|
@@ -810,46 +802,27 @@ class XRManager extends EventDispatcher {
|
|
|
810
802
|
_disposeWebGPUSession() {
|
|
811
803
|
|
|
812
804
|
const renderer = this._renderer;
|
|
813
|
-
const xrRenderTarget = this._xrRenderTarget;
|
|
814
|
-
|
|
815
|
-
if ( xrRenderTarget === null || renderer.backend.isWebGPUBackend !== true ) return;
|
|
816
|
-
|
|
817
|
-
// XR textures are external (from XRGPUBinding), so clear cached state before disposal.
|
|
818
805
|
const backend = renderer.backend;
|
|
819
|
-
const
|
|
820
|
-
|
|
821
|
-
const renderTargetData = backend.get ? backend.get( xrRenderTarget ) : null;
|
|
822
|
-
if ( renderTargetData ) {
|
|
823
|
-
|
|
824
|
-
renderTargetData.descriptors = undefined;
|
|
825
|
-
|
|
826
|
-
}
|
|
827
|
-
|
|
828
|
-
const deleteResource = ( resource ) => {
|
|
829
|
-
|
|
830
|
-
if ( resource === null || resource === undefined ) return;
|
|
831
|
-
|
|
832
|
-
if ( backend.delete ) backend.delete( resource );
|
|
833
|
-
if ( texturesModule.delete ) texturesModule.delete( resource );
|
|
806
|
+
const xrRenderTarget = this._xrRenderTarget;
|
|
834
807
|
|
|
835
|
-
|
|
808
|
+
if ( xrRenderTarget === null || backend.isWebGPUBackend !== true ) return;
|
|
836
809
|
|
|
837
|
-
|
|
810
|
+
if ( renderer._renderContexts && renderer._renderContexts.dispose ) {
|
|
838
811
|
|
|
839
|
-
|
|
812
|
+
renderer._renderContexts.dispose();
|
|
840
813
|
|
|
841
814
|
}
|
|
842
815
|
|
|
843
|
-
|
|
844
|
-
deleteResource( xrRenderTarget );
|
|
816
|
+
xrRenderTarget.dispose();
|
|
845
817
|
|
|
846
|
-
|
|
818
|
+
// The external texture can be registered before the render target is initialized.
|
|
819
|
+
for ( const texture of xrRenderTarget.textures ) {
|
|
847
820
|
|
|
848
|
-
|
|
821
|
+
if ( backend.has( texture ) ) backend.destroyTexture( texture );
|
|
849
822
|
|
|
850
823
|
}
|
|
851
824
|
|
|
852
|
-
|
|
825
|
+
backend.delete( xrRenderTarget );
|
|
853
826
|
|
|
854
827
|
}
|
|
855
828
|
|
|
@@ -928,6 +901,7 @@ class XRManager extends EventDispatcher {
|
|
|
928
901
|
* @param {Function} rendercall - A callback function that renders the layer. Similar to code in
|
|
929
902
|
* the default animation loop, this method can be used to update/transform 3D object in the layer's scene.
|
|
930
903
|
* @param {Object} [attributes={}] - Allows to configure the layer's render target.
|
|
904
|
+
* @param {number} [attributes.samples] - The scene MSAA sample count. Defaults to the renderer's sample count.
|
|
931
905
|
* @return {Mesh} A mesh representing the quadratic XR layer. This mesh should be added to the XR scene.
|
|
932
906
|
*/
|
|
933
907
|
createQuadLayer( width, height, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = {} ) {
|
|
@@ -952,12 +926,14 @@ class XRManager extends EventDispatcher {
|
|
|
952
926
|
attributes.stencil ? DepthStencilFormat : DepthFormat
|
|
953
927
|
),
|
|
954
928
|
stencilBuffer: attributes.stencil,
|
|
929
|
+
samples: attributes.samples ?? this._renderer.samples,
|
|
955
930
|
resolveDepthBuffer: false,
|
|
956
|
-
resolveStencilBuffer: false
|
|
931
|
+
resolveStencilBuffer: false,
|
|
932
|
+
storeMultisampledColorBuffer: false,
|
|
933
|
+
storeMultisampledDepthBuffer: false,
|
|
934
|
+
storeMultisampledStencilBuffer: false
|
|
957
935
|
} );
|
|
958
936
|
|
|
959
|
-
renderTarget._autoAllocateDepthBuffer = true;
|
|
960
|
-
|
|
961
937
|
const material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );
|
|
962
938
|
material.map = renderTarget.texture;
|
|
963
939
|
material.map.offset.y = 1;
|
|
@@ -974,6 +950,7 @@ class XRManager extends EventDispatcher {
|
|
|
974
950
|
quaternion: quaternion,
|
|
975
951
|
pixelwidth: pixelwidth,
|
|
976
952
|
pixelheight: pixelheight,
|
|
953
|
+
samples: renderTarget.samples,
|
|
977
954
|
plane: plane,
|
|
978
955
|
material: material,
|
|
979
956
|
rendercall: rendercall,
|
|
@@ -1019,6 +996,7 @@ class XRManager extends EventDispatcher {
|
|
|
1019
996
|
* @param {Function} rendercall - A callback function that renders the layer. Similar to code in
|
|
1020
997
|
* the default animation loop, this method can be used to update/transform 3D object in the layer's scene.
|
|
1021
998
|
* @param {Object} [attributes={}] - Allows to configure the layer's render target.
|
|
999
|
+
* @param {number} [attributes.samples] - The scene MSAA sample count. Defaults to the renderer's sample count.
|
|
1022
1000
|
* @return {Mesh} A mesh representing the cylindrical XR layer. This mesh should be added to the XR scene.
|
|
1023
1001
|
*/
|
|
1024
1002
|
createCylinderLayer( radius, centralAngle, aspectratio, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = {} ) {
|
|
@@ -1043,12 +1021,14 @@ class XRManager extends EventDispatcher {
|
|
|
1043
1021
|
attributes.stencil ? DepthStencilFormat : DepthFormat
|
|
1044
1022
|
),
|
|
1045
1023
|
stencilBuffer: attributes.stencil,
|
|
1024
|
+
samples: attributes.samples ?? this._renderer.samples,
|
|
1046
1025
|
resolveDepthBuffer: false,
|
|
1047
|
-
resolveStencilBuffer: false
|
|
1026
|
+
resolveStencilBuffer: false,
|
|
1027
|
+
storeMultisampledColorBuffer: false,
|
|
1028
|
+
storeMultisampledDepthBuffer: false,
|
|
1029
|
+
storeMultisampledStencilBuffer: false
|
|
1048
1030
|
} );
|
|
1049
1031
|
|
|
1050
|
-
renderTarget._autoAllocateDepthBuffer = true;
|
|
1051
|
-
|
|
1052
1032
|
const material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );
|
|
1053
1033
|
material.map = renderTarget.texture;
|
|
1054
1034
|
material.map.offset.y = 1;
|
|
@@ -1066,6 +1046,7 @@ class XRManager extends EventDispatcher {
|
|
|
1066
1046
|
quaternion: quaternion,
|
|
1067
1047
|
pixelwidth: pixelwidth,
|
|
1068
1048
|
pixelheight: pixelheight,
|
|
1049
|
+
samples: renderTarget.samples,
|
|
1069
1050
|
plane: plane,
|
|
1070
1051
|
material: material,
|
|
1071
1052
|
rendercall: rendercall,
|
|
@@ -1145,13 +1126,15 @@ class XRManager extends EventDispatcher {
|
|
|
1145
1126
|
|
|
1146
1127
|
// Apply ToneMapping and OutputColorSpace directly in the material shader
|
|
1147
1128
|
|
|
1148
|
-
contextNode =
|
|
1129
|
+
contextNode = context( {
|
|
1149
1130
|
|
|
1150
1131
|
getOutput: ( outputNode ) => {
|
|
1151
1132
|
|
|
1152
1133
|
return renderOutput( outputNode, renderer.toneMapping, renderer.outputColorSpace );
|
|
1153
1134
|
|
|
1154
|
-
}
|
|
1135
|
+
},
|
|
1136
|
+
|
|
1137
|
+
... currentContextNode.getFlowContextData()
|
|
1155
1138
|
|
|
1156
1139
|
} );
|
|
1157
1140
|
|
|
@@ -1298,6 +1281,9 @@ class XRManager extends EventDispatcher {
|
|
|
1298
1281
|
samples: attributes.antialias ? 4 : 0,
|
|
1299
1282
|
resolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false ),
|
|
1300
1283
|
resolveStencilBuffer: ( glProjLayer.ignoreDepthValues === false ),
|
|
1284
|
+
storeMultisampledColorBuffer: false,
|
|
1285
|
+
storeMultisampledDepthBuffer: ( glProjLayer.ignoreDepthValues === false ),
|
|
1286
|
+
storeMultisampledStencilBuffer: ( glProjLayer.ignoreDepthValues === false ),
|
|
1301
1287
|
depth: this._useMultiview ? 2 : 1,
|
|
1302
1288
|
multiview: this._useMultiview
|
|
1303
1289
|
} );
|
|
@@ -1360,9 +1346,7 @@ class XRManager extends EventDispatcher {
|
|
|
1360
1346
|
format: RGBAFormat,
|
|
1361
1347
|
type: UnsignedByteType,
|
|
1362
1348
|
colorSpace: renderer.outputColorSpace,
|
|
1363
|
-
stencilBuffer: renderer.stencil
|
|
1364
|
-
resolveDepthBuffer: ( glBaseLayer.ignoreDepthValues === false ),
|
|
1365
|
-
resolveStencilBuffer: ( glBaseLayer.ignoreDepthValues === false ),
|
|
1349
|
+
stencilBuffer: renderer.stencil
|
|
1366
1350
|
}
|
|
1367
1351
|
);
|
|
1368
1352
|
|
|
@@ -1456,6 +1440,12 @@ class XRManager extends EventDispatcher {
|
|
|
1456
1440
|
|
|
1457
1441
|
// update user camera and its children
|
|
1458
1442
|
|
|
1443
|
+
if ( this._currentCameraSettings === null && camera.isPerspectiveCamera ) {
|
|
1444
|
+
|
|
1445
|
+
this._currentCameraSettings = { camera: camera, fov: camera.fov, zoom: camera.zoom };
|
|
1446
|
+
|
|
1447
|
+
}
|
|
1448
|
+
|
|
1459
1449
|
updateUserCamera( camera, cameraXR, parent );
|
|
1460
1450
|
|
|
1461
1451
|
|
|
@@ -1670,13 +1660,6 @@ function onSessionEnd() {
|
|
|
1670
1660
|
this._currentDepthNear = null;
|
|
1671
1661
|
this._currentDepthFar = null;
|
|
1672
1662
|
|
|
1673
|
-
if ( this._currentSamples !== null ) {
|
|
1674
|
-
|
|
1675
|
-
renderer._samples = this._currentSamples;
|
|
1676
|
-
this._currentSamples = null;
|
|
1677
|
-
|
|
1678
|
-
}
|
|
1679
|
-
|
|
1680
1663
|
// restore framebuffer/rendering state
|
|
1681
1664
|
|
|
1682
1665
|
renderer._resetXRState();
|
|
@@ -1715,8 +1698,12 @@ function onSessionEnd() {
|
|
|
1715
1698
|
layer.stencilBuffer ? DepthStencilFormat : DepthFormat
|
|
1716
1699
|
),
|
|
1717
1700
|
stencilBuffer: layer.stencilBuffer,
|
|
1701
|
+
samples: layer.samples,
|
|
1718
1702
|
resolveDepthBuffer: false,
|
|
1719
|
-
resolveStencilBuffer: false
|
|
1703
|
+
resolveStencilBuffer: false,
|
|
1704
|
+
storeMultisampledColorBuffer: false,
|
|
1705
|
+
storeMultisampledDepthBuffer: false,
|
|
1706
|
+
storeMultisampledStencilBuffer: false
|
|
1720
1707
|
} );
|
|
1721
1708
|
|
|
1722
1709
|
layer.renderTarget.isXRRenderTarget = false;
|
|
@@ -1744,6 +1731,18 @@ function onSessionEnd() {
|
|
|
1744
1731
|
renderer.setPixelRatio( this._currentPixelRatio );
|
|
1745
1732
|
renderer.setSize( this._currentSize.width, this._currentSize.height, false );
|
|
1746
1733
|
|
|
1734
|
+
if ( this._currentCameraSettings !== null ) {
|
|
1735
|
+
|
|
1736
|
+
const camera = this._currentCameraSettings.camera;
|
|
1737
|
+
|
|
1738
|
+
camera.fov = this._currentCameraSettings.fov;
|
|
1739
|
+
camera.zoom = this._currentCameraSettings.zoom;
|
|
1740
|
+
camera.updateProjectionMatrix();
|
|
1741
|
+
|
|
1742
|
+
this._currentCameraSettings = null;
|
|
1743
|
+
|
|
1744
|
+
}
|
|
1745
|
+
|
|
1747
1746
|
this.dispatchEvent( { type: 'sessionend' } );
|
|
1748
1747
|
|
|
1749
1748
|
}
|
|
@@ -1968,6 +1967,14 @@ function onAnimationFrame( time, frame ) {
|
|
|
1968
1967
|
renderer.setOutputRenderTarget( this._xrRenderTarget );
|
|
1969
1968
|
|
|
1970
1969
|
const frameBufferTarget = renderer._getFrameBufferTarget();
|
|
1970
|
+
|
|
1971
|
+
if ( webgpuViewData !== null ) {
|
|
1972
|
+
|
|
1973
|
+
this._xrRenderTarget.samples = frameBufferTarget === null ? renderer.samples : 0;
|
|
1974
|
+
this._xrRenderTarget.depthBuffer = frameBufferTarget === null;
|
|
1975
|
+
|
|
1976
|
+
}
|
|
1977
|
+
|
|
1971
1978
|
renderer.xr.foveateBoundTexture( frameBufferTarget );
|
|
1972
1979
|
|
|
1973
1980
|
}
|