@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.
Files changed (417) hide show
  1. package/build/three.cjs +10 -82600
  2. package/build/three.core.js +1303 -728
  3. package/build/three.module.js +439 -338
  4. package/build/three.tsl.js +74 -44
  5. package/build/three.webgpu.js +6036 -2184
  6. package/build/three.webgpu.nodes.js +6020 -2184
  7. package/examples/jsm/Addons.js +6 -6
  8. package/examples/jsm/controls/ArcballControls.js +1 -1
  9. package/examples/jsm/controls/FirstPersonControls.js +44 -20
  10. package/examples/jsm/controls/OrbitControls.js +9 -0
  11. package/examples/jsm/controls/TrackballControls.js +109 -4
  12. package/examples/jsm/csm/CSMShadowNode.js +13 -0
  13. package/examples/jsm/exporters/GLTFExporter.js +23 -7
  14. package/examples/jsm/exporters/USDZExporter.js +2 -2
  15. package/examples/jsm/generators/CityGenerator.js +377 -45
  16. package/examples/jsm/generators/ForestGenerator.js +12 -12
  17. package/examples/jsm/generators/TerrainGenerator.js +49 -37
  18. package/examples/jsm/generators/TreeGenerator.js +70 -76
  19. package/examples/jsm/generators/city/BenchGenerator.js +127 -0
  20. package/examples/jsm/generators/city/CarGenerator.js +479 -0
  21. package/examples/jsm/generators/city/CityGeneratorUtils.js +31 -0
  22. package/examples/jsm/generators/city/HydrantGenerator.js +106 -0
  23. package/examples/jsm/generators/city/InstancedMeshGenerator.js +86 -0
  24. package/examples/jsm/generators/city/PersonGenerator.js +447 -0
  25. package/examples/jsm/generators/city/SidewalkGenerator.js +33 -38
  26. package/examples/jsm/generators/city/SkyscraperGenerator.js +448 -48
  27. package/examples/jsm/generators/city/StreetTreeGenerator.js +231 -0
  28. package/examples/jsm/generators/city/StreetlightGenerator.js +100 -0
  29. package/examples/jsm/generators/city/TrafficlightGenerator.js +106 -0
  30. package/examples/jsm/generators/city/TrashcanGenerator.js +100 -0
  31. package/examples/jsm/geometries/BoxLineGeometry.js +1 -1
  32. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  33. package/examples/jsm/geometries/RoundedBoxGeometry.js +1 -1
  34. package/examples/jsm/gpgpu/CountingSort.js +271 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +60 -239
  36. package/examples/jsm/helpers/LightProbeGridHelperWebGL.js +221 -0
  37. package/examples/jsm/inspector/Extension.js +94 -0
  38. package/examples/jsm/inspector/Inspector.js +145 -41
  39. package/examples/jsm/inspector/RendererInspector.js +100 -52
  40. package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +2609 -0
  41. package/examples/jsm/inspector/extensions/color-grading/ColorWheel.js +352 -0
  42. package/examples/jsm/inspector/extensions/color-grading/CurveEditor.js +599 -0
  43. package/examples/jsm/inspector/extensions/color-grading/LUT3DStyle.js +1201 -0
  44. package/examples/jsm/inspector/extensions/color-grading/LUTMath.js +788 -0
  45. package/examples/jsm/inspector/extensions/color-grading/modules/BrightnessModule.js +72 -0
  46. package/examples/jsm/inspector/extensions/color-grading/modules/ColorWheelModule.js +112 -0
  47. package/examples/jsm/inspector/extensions/color-grading/modules/ContrastModule.js +82 -0
  48. package/examples/jsm/inspector/extensions/color-grading/modules/CurvesModule.js +109 -0
  49. package/examples/jsm/inspector/extensions/color-grading/modules/ExposureHueModule.js +110 -0
  50. package/examples/jsm/inspector/extensions/color-grading/modules/ExposureModule.js +73 -0
  51. package/examples/jsm/inspector/extensions/color-grading/modules/HueModule.js +78 -0
  52. package/examples/jsm/inspector/extensions/color-grading/modules/ImportedCubeModule.js +89 -0
  53. package/examples/jsm/inspector/extensions/color-grading/modules/Module.js +285 -0
  54. package/examples/jsm/inspector/extensions/color-grading/modules/OutputModule.js +101 -0
  55. package/examples/jsm/inspector/extensions/color-grading/modules/RendererModule.js +225 -0
  56. package/examples/jsm/inspector/extensions/color-grading/modules/SatVibranceModule.js +102 -0
  57. package/examples/jsm/inspector/extensions/color-grading/modules/SaturationModule.js +76 -0
  58. package/examples/jsm/inspector/extensions/color-grading/modules/VibranceModule.js +76 -0
  59. package/examples/jsm/inspector/extensions/color-grading/modules/WhiteBalanceModule.js +86 -0
  60. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +26 -31
  61. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -0
  62. package/examples/jsm/inspector/tabs/Memory.js +0 -2
  63. package/examples/jsm/inspector/tabs/Settings.js +4 -0
  64. package/examples/jsm/inspector/tabs/Timeline.js +223 -171
  65. package/examples/jsm/inspector/tabs/Viewer.js +515 -21
  66. package/examples/jsm/inspector/ui/List.js +15 -9
  67. package/examples/jsm/inspector/ui/Profiler.js +170 -14
  68. package/examples/jsm/inspector/ui/Style.js +269 -23
  69. package/examples/jsm/inspector/ui/Tab.js +2 -0
  70. package/examples/jsm/inspector/ui/Values.js +14 -2
  71. package/examples/jsm/interactive/HTMLMesh.js +19 -3
  72. package/examples/jsm/lighting/LightProbeGrid.js +484 -889
  73. package/examples/jsm/lighting/LightProbeGridUtils.js +107 -0
  74. package/examples/jsm/lighting/LightProbeGridWebGL.js +841 -0
  75. package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +194 -0
  76. package/examples/jsm/lighting/vxgi/VXGINode.js +660 -0
  77. package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +478 -0
  78. package/examples/jsm/lighting/vxgi/VXGIVolume.js +1430 -0
  79. package/examples/jsm/lights/SunLight.js +95 -0
  80. package/examples/jsm/lights/SunLightNode.js +56 -0
  81. package/examples/jsm/lights/SunLightShadow.js +319 -0
  82. package/examples/jsm/lights/SunShadowNode.js +312 -0
  83. package/examples/jsm/loaders/3DMLoader.js +150 -49
  84. package/examples/jsm/loaders/3MFLoader.js +202 -1
  85. package/examples/jsm/loaders/FBXLoader.js +81 -5
  86. package/examples/jsm/loaders/GLTFGaussianSplatLoaderExtension.js +330 -0
  87. package/examples/jsm/loaders/GLTFLoader.js +79 -14
  88. package/examples/jsm/loaders/GaussianSplatPLYLoader.js +386 -0
  89. package/examples/jsm/loaders/KSPLATLoader.js +463 -0
  90. package/examples/jsm/loaders/MaterialXLoader.js +111 -1010
  91. package/examples/jsm/loaders/PCDLoader.js +1 -1
  92. package/examples/jsm/loaders/SPLATLoader.js +139 -0
  93. package/examples/jsm/loaders/SPZLoader.js +561 -0
  94. package/examples/jsm/loaders/materialx/MaterialXArchive.js +108 -0
  95. package/examples/jsm/loaders/materialx/MaterialXDocument.js +878 -0
  96. package/examples/jsm/loaders/materialx/MaterialXHextile.js +183 -0
  97. package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +376 -0
  98. package/examples/jsm/loaders/materialx/MaterialXLog.js +75 -0
  99. package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +4 -0
  100. package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +1021 -0
  101. package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +661 -0
  102. package/examples/jsm/loaders/materialx/MaterialXUtils.js +57 -0
  103. package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +997 -0
  104. package/examples/jsm/loaders/materialx/parse/MaterialXParser.js +28 -0
  105. package/examples/jsm/loaders/usd/USDAParser.js +15 -2
  106. package/examples/jsm/loaders/usd/USDCParser.js +1 -4
  107. package/examples/jsm/loaders/usd/USDComposer.js +80 -42
  108. package/examples/jsm/materials/WoodNodeMaterial.js +6 -108
  109. package/examples/jsm/misc/RollerCoaster.js +2 -2
  110. package/examples/jsm/misc/SculptGL.LICENSE.txt +21 -0
  111. package/examples/jsm/misc/Sculptor.js +1679 -0
  112. package/examples/jsm/misc/SculptorMesh.js +1504 -0
  113. package/examples/jsm/misc/SculptorTools.js +1180 -0
  114. package/examples/jsm/misc/SculptorUtils.js +345 -0
  115. package/examples/jsm/misc/TubePainter.js +28 -16
  116. package/examples/jsm/misc/VolumeSlice.js +24 -24
  117. package/examples/jsm/modifiers/SimplifyModifier.js +63 -556
  118. package/examples/jsm/objects/GaussianSplat.js +1039 -0
  119. package/examples/jsm/objects/Sky.js +66 -45
  120. package/examples/jsm/objects/SkyMesh.js +70 -51
  121. package/examples/jsm/physics/JoltPhysics.js +1 -1
  122. package/examples/jsm/postprocessing/AfterimagePass.js +4 -2
  123. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  124. package/examples/jsm/postprocessing/GTAOPass.js +1 -1
  125. package/examples/jsm/postprocessing/OutlinePass.js +5 -5
  126. package/examples/jsm/postprocessing/SAOPass.js +1 -1
  127. package/examples/jsm/postprocessing/SSAOPass.js +1 -1
  128. package/examples/jsm/postprocessing/SSRPass.js +4 -2
  129. package/examples/jsm/postprocessing/SavePass.js +1 -1
  130. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  131. package/examples/jsm/postprocessing/UnrealBloomPass.js +30 -13
  132. package/examples/jsm/renderers/CSS2DRenderer.js +29 -5
  133. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  134. package/examples/jsm/shaders/ExposureShader.js +1 -1
  135. package/examples/jsm/shaders/FilmShader.js +2 -1
  136. package/examples/jsm/transpiler/AST.js +21 -2
  137. package/examples/jsm/transpiler/GLSLDecoder.js +498 -8
  138. package/examples/jsm/transpiler/TSLEncoder.js +82 -10
  139. package/examples/jsm/transpiler/WGSLEncoder.js +33 -4
  140. package/examples/jsm/tsl/WebGLNodesHandler.js +29 -39
  141. package/examples/jsm/tsl/display/AfterImageNode.js +2 -0
  142. package/examples/jsm/tsl/display/AnaglyphPassNode.js +3 -2
  143. package/examples/jsm/tsl/display/BilateralBlurNode.js +5 -2
  144. package/examples/jsm/tsl/display/BloomNode.js +55 -30
  145. package/examples/jsm/tsl/display/DenoiseNode.js +21 -1
  146. package/examples/jsm/tsl/display/DepthOfFieldNode.js +24 -6
  147. package/examples/jsm/tsl/display/DotScreenNode.js +11 -11
  148. package/examples/jsm/tsl/display/FSR1Node.js +8 -4
  149. package/examples/jsm/tsl/display/GTAONode.js +199 -86
  150. package/examples/jsm/tsl/display/GaussianBlurNode.js +65 -52
  151. package/examples/jsm/tsl/display/GodraysNode.js +5 -2
  152. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +2 -2
  153. package/examples/jsm/tsl/display/LensflareNode.js +5 -2
  154. package/examples/jsm/tsl/display/OITPassNode.js +352 -0
  155. package/examples/jsm/tsl/display/OutlineNode.js +2 -0
  156. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +3 -2
  157. package/examples/jsm/tsl/display/RGBShiftNode.js +9 -9
  158. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +7 -4
  159. package/examples/jsm/tsl/display/RetroPassNode.js +1 -1
  160. package/examples/jsm/tsl/display/SMAANode.js +22 -61
  161. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -4
  162. package/examples/jsm/tsl/display/SSAONode.js +436 -0
  163. package/examples/jsm/tsl/display/SSGINode.js +5 -2
  164. package/examples/jsm/tsl/display/SSRNode.js +7 -2
  165. package/examples/jsm/tsl/display/SSSNode.js +5 -2
  166. package/examples/jsm/tsl/display/SharpenNode.js +5 -4
  167. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -3
  168. package/examples/jsm/tsl/display/StereoPassNode.js +1 -3
  169. package/examples/jsm/tsl/display/TAAUNode.js +22 -125
  170. package/examples/jsm/tsl/display/TRAANode.js +16 -142
  171. package/examples/jsm/tsl/display/TemporalReprojectNode.js +21 -15
  172. package/examples/jsm/tsl/display/depthAwareBlur.js +63 -0
  173. package/examples/jsm/tsl/display/hashBlur.js +3 -2
  174. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +38 -27
  175. package/examples/jsm/tsl/lighting/LightProbeGridNode.js +136 -0
  176. package/examples/jsm/tsl/math/voronoiNoise.js +112 -0
  177. package/examples/jsm/tsl/shadows/TileShadowNode.js +4 -6
  178. package/examples/jsm/tsl/utils/Raymarching.js +5 -5
  179. package/examples/jsm/tsl/utils/SoftParticles.js +60 -0
  180. package/examples/jsm/tsl/utils/TAAUtils.js +195 -0
  181. package/examples/jsm/utils/BufferGeometryUtils.js +14 -14
  182. package/examples/jsm/utils/GaussianSplatUtils.js +229 -0
  183. package/examples/jsm/utils/WebGLTextureUtils.js +1 -1
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/WebGLXRFallback.js +2 -16
  186. package/examples/jsm/webxr/XRControllerModelFactory.js +16 -4
  187. package/package.json +9 -16
  188. package/src/Three.Core.js +2 -1
  189. package/src/Three.TSL.js +73 -43
  190. package/src/Three.WebGPU.Nodes.js +1 -0
  191. package/src/Three.WebGPU.js +1 -0
  192. package/src/animation/AnimationClip.js +15 -2
  193. package/src/animation/AnimationObjectGroup.js +18 -6
  194. package/src/animation/AnimationUtils.js +26 -0
  195. package/src/animation/KeyframeTrack.js +37 -0
  196. package/src/constants.js +23 -1
  197. package/src/core/BufferAttribute.js +3 -2
  198. package/src/core/BufferGeometry.js +1 -1
  199. package/src/core/InterleavedBuffer.js +5 -1
  200. package/src/core/Object3D.js +40 -12
  201. package/src/core/Raycaster.js +4 -0
  202. package/src/core/RenderTarget.js +99 -9
  203. package/src/core/RenderTarget3D.js +12 -8
  204. package/src/extras/Controls.js +0 -8
  205. package/src/extras/PMREMGenerator.js +99 -205
  206. package/src/geometries/TorusGeometry.js +1 -1
  207. package/src/helpers/ArrowHelper.js +2 -0
  208. package/src/helpers/AxesHelper.js +2 -0
  209. package/src/helpers/Box3Helper.js +2 -0
  210. package/src/helpers/BoxHelper.js +2 -0
  211. package/src/helpers/CameraHelper.js +2 -0
  212. package/src/helpers/DirectionalLightHelper.js +2 -0
  213. package/src/helpers/GridHelper.js +2 -0
  214. package/src/helpers/HemisphereLightHelper.js +2 -0
  215. package/src/helpers/PlaneHelper.js +2 -0
  216. package/src/helpers/PointLightHelper.js +2 -0
  217. package/src/helpers/PolarGridHelper.js +2 -0
  218. package/src/helpers/SkeletonHelper.js +2 -0
  219. package/src/helpers/SpotLightHelper.js +2 -0
  220. package/src/lights/Light.js +0 -10
  221. package/src/lights/LightShadow.js +43 -12
  222. package/src/lights/SpotLightShadow.js +18 -0
  223. package/src/loaders/BufferGeometryLoader.js +5 -0
  224. package/src/loaders/ImageBitmapLoader.js +3 -1
  225. package/src/loaders/ObjectLoader.js +8 -5
  226. package/src/materials/Material.js +80 -57
  227. package/src/materials/MeshPhysicalMaterial.js +32 -0
  228. package/src/materials/nodes/Line2NodeMaterial.js +17 -8
  229. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +42 -5
  230. package/src/materials/nodes/NodeMaterial.js +19 -13
  231. package/src/materials/nodes/PointsNodeMaterial.js +2 -1
  232. package/src/materials/nodes/manager/NodeMaterialObserver.js +282 -55
  233. package/src/math/Frustum.js +9 -0
  234. package/src/math/FrustumArray.js +1 -1
  235. package/src/math/MathUtils.js +5 -3
  236. package/src/math/Matrix4.js +2 -9
  237. package/src/math/Plane.js +30 -1
  238. package/src/math/Quaternion.js +0 -10
  239. package/src/math/Ray.js +95 -45
  240. package/src/math/Triangle.js +0 -2
  241. package/src/math/Vector3.js +2 -2
  242. package/src/math/Vector4.js +0 -4
  243. package/src/math/interpolants/BezierInterpolant.js +36 -23
  244. package/src/nodes/Nodes.js +2 -0
  245. package/src/nodes/TSL.js +11 -3
  246. package/src/nodes/accessors/Batch.js +85 -13
  247. package/src/nodes/accessors/BufferAttributeNode.js +1 -1
  248. package/src/nodes/accessors/BuiltinNode.js +1 -1
  249. package/src/nodes/accessors/Instance.js +19 -18
  250. package/src/nodes/accessors/MaterialNode.js +9 -0
  251. package/src/nodes/accessors/ModelNode.js +85 -9
  252. package/src/nodes/accessors/ReferenceBaseNode.js +1 -70
  253. package/src/nodes/accessors/ReferenceElementNode.js +72 -0
  254. package/src/nodes/accessors/ReferenceNode.js +1 -70
  255. package/src/nodes/accessors/Skinning.js +124 -12
  256. package/src/nodes/accessors/StorageTextureNode.js +7 -3
  257. package/src/nodes/accessors/Texture3DNode.js +1 -1
  258. package/src/nodes/accessors/TextureNode.js +51 -21
  259. package/src/nodes/accessors/TextureSizeNode.js +4 -2
  260. package/src/nodes/accessors/UniformArrayNode.js +30 -5
  261. package/src/nodes/code/CodeNode.js +1 -1
  262. package/src/nodes/code/FunctionNode.js +12 -2
  263. package/src/nodes/core/ArrayNode.js +2 -2
  264. package/src/nodes/core/ContextNode.js +57 -4
  265. package/src/nodes/core/IndexNode.js +69 -4
  266. package/src/nodes/core/InspectorNode.js +2 -2
  267. package/src/nodes/core/MRTNode.js +44 -2
  268. package/src/nodes/core/Node.js +6 -3
  269. package/src/nodes/core/NodeBuilder.js +65 -50
  270. package/src/nodes/core/NodeFrame.js +11 -3
  271. package/src/nodes/core/NodeUtils.js +88 -0
  272. package/src/nodes/core/PropertyNode.js +8 -0
  273. package/src/nodes/core/StackNode.js +0 -1
  274. package/src/nodes/core/StructNode.js +4 -3
  275. package/src/nodes/core/UniformGroupNode.js +3 -2
  276. package/src/nodes/core/UniformNode.js +26 -12
  277. package/src/nodes/core/VarNode.js +0 -1
  278. package/src/nodes/display/BumpMapNode.js +2 -2
  279. package/src/nodes/display/ColorAdjustment.js +1 -1
  280. package/src/nodes/display/PassNode.js +76 -15
  281. package/src/nodes/display/ScreenNode.js +22 -65
  282. package/src/nodes/fog/Fog.js +4 -4
  283. package/src/nodes/functions/BSDF/BRDF_GGX.js +6 -6
  284. package/src/nodes/functions/BSDF/BRDF_Sheen.js +1 -1
  285. package/src/nodes/functions/BSDF/DFGLUT.js +2 -1
  286. package/src/nodes/functions/BSDF/LTC.js +1 -1
  287. package/src/nodes/functions/PhongLightingModel.js +1 -1
  288. package/src/nodes/functions/PhysicalLightingModel.js +83 -25
  289. package/src/nodes/functions/ToonLightingModel.js +2 -2
  290. package/src/nodes/functions/material/getParallaxCorrectNormal.js +3 -3
  291. package/src/nodes/gpgpu/AtomicFunctionNode.js +64 -13
  292. package/src/nodes/gpgpu/BarrierNode.js +13 -4
  293. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  294. package/src/nodes/gpgpu/ComputeNode.js +20 -17
  295. package/src/nodes/gpgpu/SubgroupFunctionNode.js +165 -37
  296. package/src/nodes/gpgpu/WorkgroupInfoNode.js +44 -6
  297. package/src/nodes/lighting/EnvironmentNode.js +40 -4
  298. package/src/nodes/lighting/LightsNode.js +20 -4
  299. package/src/nodes/lighting/ShadowBaseNode.js +158 -1
  300. package/src/nodes/lighting/ShadowFilterNode.js +2 -106
  301. package/src/nodes/lighting/ShadowNode.js +22 -91
  302. package/src/nodes/materialx/{lib/mx_hsv.js → MaterialXColor.js} +3 -6
  303. package/src/nodes/materialx/{lib/mx_transform_color.js → MaterialXColorTransform.js} +3 -6
  304. package/src/nodes/materialx/MaterialXCore.js +37 -0
  305. package/src/nodes/materialx/MaterialXNodes.js +64 -72
  306. package/src/nodes/materialx/{lib/mx_noise.js → MaterialXNoise.js} +426 -197
  307. package/src/nodes/math/BitcountNode.js +24 -4
  308. package/src/nodes/math/MathNode.js +4 -4
  309. package/src/nodes/math/MathUtils.js +15 -4
  310. package/src/nodes/math/OperatorNode.js +2 -2
  311. package/src/nodes/math/PackFloatNode.js +29 -1
  312. package/src/nodes/math/Packed4x8IntegerNode.js +433 -0
  313. package/src/nodes/math/UnpackFloatNode.js +30 -2
  314. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  315. package/src/nodes/pmrem/PMREMNode.js +1 -1
  316. package/src/nodes/pmrem/PMREMUtils.js +31 -74
  317. package/src/nodes/shapes/Shapes.js +1 -1
  318. package/src/nodes/tsl/TSLCore.js +1 -31
  319. package/src/nodes/utils/EventNode.js +75 -0
  320. package/src/nodes/utils/LoopNode.js +54 -13
  321. package/src/nodes/utils/PostProcessingUtils.js +23 -2
  322. package/src/nodes/utils/RTTNode.js +97 -32
  323. package/src/nodes/utils/ReflectorNode.js +8 -4
  324. package/src/nodes/utils/RotateNode.js +85 -8
  325. package/src/nodes/utils/SpriteUtils.js +58 -23
  326. package/src/objects/BatchedMesh.js +6 -0
  327. package/src/objects/InstancedMesh.js +1 -1
  328. package/src/objects/LOD.js +1 -1
  329. package/src/objects/Line.js +12 -0
  330. package/src/objects/Mesh.js +12 -0
  331. package/src/objects/Points.js +12 -0
  332. package/src/objects/Sprite.js +12 -0
  333. package/src/renderers/WebGLRenderer.js +93 -27
  334. package/src/renderers/common/Animation.js +12 -2
  335. package/src/renderers/common/Backend.js +38 -10
  336. package/src/renderers/common/BindGroup.js +0 -1
  337. package/src/renderers/common/Bindings.js +50 -4
  338. package/src/renderers/common/BundleGroup.js +4 -0
  339. package/src/renderers/common/ClippingContext.js +11 -1
  340. package/src/renderers/common/Color4.js +9 -0
  341. package/src/renderers/common/Constants.js +0 -5
  342. package/src/renderers/common/DirectRenderPipeline.js +233 -0
  343. package/src/renderers/common/Geometries.js +24 -3
  344. package/src/renderers/common/Info.js +3 -3
  345. package/src/renderers/common/InspectorBase.js +37 -8
  346. package/src/renderers/common/Lighting.js +11 -4
  347. package/src/renderers/common/Pipelines.js +6 -4
  348. package/src/renderers/common/QuadMesh.js +16 -2
  349. package/src/renderers/common/RenderContext.js +8 -0
  350. package/src/renderers/common/RenderList.js +53 -19
  351. package/src/renderers/common/RenderLists.js +58 -11
  352. package/src/renderers/common/RenderObject.js +14 -0
  353. package/src/renderers/common/RenderObjects.js +14 -9
  354. package/src/renderers/common/RenderPipeline.js +52 -44
  355. package/src/renderers/common/Renderer.js +226 -55
  356. package/src/renderers/common/Storage3DTexture.js +16 -0
  357. package/src/renderers/common/Textures.js +3 -3
  358. package/src/renderers/common/XRManager.js +79 -72
  359. package/src/renderers/common/extras/PMREMGenerator.js +76 -144
  360. package/src/renderers/common/nodes/NodeManager.js +144 -6
  361. package/src/renderers/common/nodes/NodeStorageBuffer.js +3 -1
  362. package/src/renderers/common/nodes/NodeUniformBuffer.js +3 -1
  363. package/src/renderers/shaders/DFGLUTData.js +2 -1
  364. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +4 -2
  365. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +48 -0
  366. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +53 -4
  367. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +20 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +20 -0
  369. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  370. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +61 -57
  371. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +82 -0
  372. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +9 -0
  373. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +8 -1
  374. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +15 -0
  375. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
  376. package/src/renderers/shaders/ShaderLib.js +1 -0
  377. package/src/renderers/shaders/UniformsLib.js +16 -0
  378. package/src/renderers/webgl/WebGLAnimation.js +2 -2
  379. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  380. package/src/renderers/webgl/WebGLLights.js +74 -4
  381. package/src/renderers/webgl/WebGLMaterials.js +6 -0
  382. package/src/renderers/webgl/WebGLOutput.js +36 -24
  383. package/src/renderers/webgl/WebGLProgram.js +3 -0
  384. package/src/renderers/webgl/WebGLPrograms.js +8 -0
  385. package/src/renderers/webgl/WebGLRenderLists.js +6 -10
  386. package/src/renderers/webgl/WebGLShadowMap.js +47 -44
  387. package/src/renderers/webgl/WebGLTextures.js +7 -7
  388. package/src/renderers/webgl-fallback/WebGLBackend.js +153 -45
  389. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +83 -29
  390. package/src/renderers/webgl-fallback/utils/WebGLState.js +163 -17
  391. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +32 -5
  392. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +11 -4
  393. package/src/renderers/webgpu/WebGPUBackend.js +513 -145
  394. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +99 -20
  395. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -1
  396. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -12
  397. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +24 -14
  398. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +80 -14
  399. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +62 -7
  400. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +9 -3
  401. package/src/renderers/webgpu/utils/WebGPUUtils.js +16 -4
  402. package/src/renderers/webxr/WebXRManager.js +25 -2
  403. package/src/scenes/Scene.js +3 -3
  404. package/src/textures/CompressedArrayTexture.js +16 -0
  405. package/src/textures/Data3DTexture.js +16 -0
  406. package/src/textures/DataArrayTexture.js +16 -0
  407. package/src/textures/DepthTexture.js +3 -3
  408. package/src/textures/Texture.js +3 -3
  409. package/src/textures/{Source.js → TextureSource.js} +39 -8
  410. package/build/three.core.min.js +0 -6
  411. package/build/three.module.min.js +0 -6
  412. package/build/three.tsl.min.js +0 -6
  413. package/build/three.webgpu.min.js +0 -6
  414. package/build/three.webgpu.nodes.min.js +0 -6
  415. package/examples/jsm/libs/ecsy.module.js +0 -1792
  416. package/examples/jsm/loaders/LottieLoader.js +0 -130
  417. 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 renderer's sample count before XR temporarily overrides it.
234
+ * The current size of the renderer's canvas
235
+ * in logical pixel unit.
234
236
  *
235
237
  * @private
236
- * @type {?number}
237
- * @default null
238
+ * @type {Vector2}
238
239
  */
239
- this._currentSamples = null;
240
+ this._currentSize = new Vector2();
240
241
 
241
242
  /**
242
- * The current size of the renderer's canvas
243
- * in logical pixel unit.
243
+ * Holds a reference to the user camera and its current settings.
244
244
  *
245
245
  * @private
246
- * @type {Vector2}
246
+ * @type {?Object}
247
+ * @default null
247
248
  */
248
- this._currentSize = new Vector2();
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
- const renderer = this._renderer;
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
- samples: 0
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 texturesModule = renderer._textures;
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
- for ( let i = 0; i < xrRenderTarget.textures.length; i ++ ) {
810
+ if ( renderer._renderContexts && renderer._renderContexts.dispose ) {
838
811
 
839
- deleteResource( xrRenderTarget.textures[ i ] );
812
+ renderer._renderContexts.dispose();
840
813
 
841
814
  }
842
815
 
843
- deleteResource( xrRenderTarget.depthTexture );
844
- deleteResource( xrRenderTarget );
816
+ xrRenderTarget.dispose();
845
817
 
846
- if ( renderer._renderContexts && renderer._renderContexts.dispose ) {
818
+ // The external texture can be registered before the render target is initialized.
819
+ for ( const texture of xrRenderTarget.textures ) {
847
820
 
848
- renderer._renderContexts.dispose();
821
+ if ( backend.has( texture ) ) backend.destroyTexture( texture );
849
822
 
850
823
  }
851
824
 
852
- xrRenderTarget.dispose();
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 = currentContextNode.context( {
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
  }