@plastic-software/three 0.179.0 → 0.181.1

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 (430) hide show
  1. package/build/three.cjs +1108 -591
  2. package/build/three.core.js +616 -345
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +488 -250
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +37 -6
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +6576 -2152
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +6575 -2151
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  13. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  14. package/examples/jsm/Addons.js +1 -1
  15. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  16. package/examples/jsm/controls/ArcballControls.js +8 -8
  17. package/examples/jsm/controls/DragControls.js +7 -57
  18. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  19. package/examples/jsm/controls/FlyControls.js +1 -1
  20. package/examples/jsm/controls/OrbitControls.js +2 -2
  21. package/examples/jsm/controls/PointerLockControls.js +2 -10
  22. package/examples/jsm/controls/TrackballControls.js +1 -1
  23. package/examples/jsm/controls/TransformControls.js +1 -1
  24. package/examples/jsm/effects/AsciiEffect.js +8 -8
  25. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  26. package/examples/jsm/exporters/EXRExporter.js +1 -1
  27. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  28. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  29. package/examples/jsm/exporters/PLYExporter.js +1 -1
  30. package/examples/jsm/exporters/USDZExporter.js +9 -2
  31. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  32. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  33. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  34. package/examples/jsm/geometries/TextGeometry.js +3 -2
  35. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  36. package/examples/jsm/helpers/ViewHelper.js +43 -5
  37. package/examples/jsm/inspector/Inspector.js +427 -0
  38. package/examples/jsm/inspector/RendererInspector.js +415 -0
  39. package/examples/jsm/inspector/tabs/Console.js +204 -0
  40. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  41. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  42. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  43. package/examples/jsm/inspector/ui/Graph.js +95 -0
  44. package/examples/jsm/inspector/ui/Item.js +170 -0
  45. package/examples/jsm/inspector/ui/List.js +75 -0
  46. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  47. package/examples/jsm/inspector/ui/Style.js +654 -0
  48. package/examples/jsm/inspector/ui/Tab.js +46 -0
  49. package/examples/jsm/inspector/ui/Values.js +423 -0
  50. package/examples/jsm/inspector/ui/utils.js +56 -0
  51. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  52. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  53. package/examples/jsm/interactive/SelectionBox.js +30 -0
  54. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  55. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  56. package/examples/jsm/lines/Line2.js +3 -3
  57. package/examples/jsm/lines/LineGeometry.js +1 -1
  58. package/examples/jsm/lines/LineSegments2.js +2 -2
  59. package/examples/jsm/lines/Wireframe.js +2 -2
  60. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  61. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  62. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  63. package/examples/jsm/loaders/3MFLoader.js +1 -1
  64. package/examples/jsm/loaders/ColladaLoader.js +3 -3
  65. package/examples/jsm/loaders/DDSLoader.js +1 -1
  66. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  67. package/examples/jsm/loaders/EXRLoader.js +5 -5
  68. package/examples/jsm/loaders/FBXLoader.js +2 -2
  69. package/examples/jsm/loaders/FontLoader.js +23 -5
  70. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  71. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  72. package/examples/jsm/loaders/HDRLoader.js +486 -0
  73. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  74. package/examples/jsm/loaders/KTXLoader.js +2 -2
  75. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  76. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  77. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  78. package/examples/jsm/loaders/LWOLoader.js +2 -2
  79. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  80. package/examples/jsm/loaders/OBJLoader.js +1 -1
  81. package/examples/jsm/loaders/PDBLoader.js +1 -1
  82. package/examples/jsm/loaders/RGBELoader.js +7 -473
  83. package/examples/jsm/loaders/SVGLoader.js +2 -2
  84. package/examples/jsm/loaders/TTFLoader.js +4 -4
  85. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  86. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  87. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  88. package/examples/jsm/math/ColorSpaces.js +19 -1
  89. package/examples/jsm/math/ConvexHull.js +3 -3
  90. package/examples/jsm/math/ImprovedNoise.js +1 -1
  91. package/examples/jsm/math/Lut.js +2 -2
  92. package/examples/jsm/math/SimplexNoise.js +1 -1
  93. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  94. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  95. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  96. package/examples/jsm/misc/TubePainter.js +383 -40
  97. package/examples/jsm/misc/Volume.js +1 -1
  98. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  99. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  100. package/examples/jsm/objects/Sky.js +1 -1
  101. package/examples/jsm/objects/SkyMesh.js +1 -1
  102. package/examples/jsm/objects/Water.js +3 -3
  103. package/examples/jsm/objects/WaterMesh.js +6 -6
  104. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  105. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  106. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  107. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  108. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  109. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  110. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  111. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  112. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  113. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  114. package/examples/jsm/shaders/BokehShader.js +1 -1
  115. package/examples/jsm/shaders/BokehShader2.js +1 -1
  116. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  117. package/examples/jsm/shaders/FocusShader.js +1 -1
  118. package/examples/jsm/shaders/GTAOShader.js +2 -2
  119. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  120. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  122. package/examples/jsm/shaders/SSRShader.js +1 -1
  123. package/examples/jsm/shaders/SepiaShader.js +1 -1
  124. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  125. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  126. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +1 -1
  127. package/examples/jsm/shaders/VignetteShader.js +1 -1
  128. package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
  129. package/examples/jsm/transpiler/TSLEncoder.js +9 -10
  130. package/examples/jsm/transpiler/WGSLEncoder.js +24 -0
  131. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  132. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  133. package/examples/jsm/tsl/display/BloomNode.js +7 -3
  134. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
  135. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  136. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  137. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  138. package/examples/jsm/tsl/display/GaussianBlurNode.js +49 -35
  139. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  140. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  141. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  142. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  143. package/examples/jsm/tsl/display/TRAANode.js +124 -7
  144. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  145. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  146. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  147. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  148. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  149. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  150. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  151. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  152. package/package.json +5 -10
  153. package/src/Three.Core.js +4 -2
  154. package/src/Three.TSL.js +36 -5
  155. package/src/Three.WebGPU.Nodes.js +2 -0
  156. package/src/Three.WebGPU.js +2 -0
  157. package/src/animation/AnimationClip.js +20 -4
  158. package/src/animation/AnimationMixer.js +3 -3
  159. package/src/animation/AnimationObjectGroup.js +2 -1
  160. package/src/animation/KeyframeTrack.js +7 -6
  161. package/src/animation/PropertyBinding.js +12 -11
  162. package/src/audio/Audio.js +10 -9
  163. package/src/audio/PositionalAudio.js +1 -1
  164. package/src/cameras/OrthographicCamera.js +1 -1
  165. package/src/cameras/PerspectiveCamera.js +1 -1
  166. package/src/cameras/StereoCamera.js +2 -2
  167. package/src/constants.js +11 -3
  168. package/src/core/BufferGeometry.js +10 -10
  169. package/src/core/EventDispatcher.js +1 -1
  170. package/src/core/InterleavedBuffer.js +1 -1
  171. package/src/core/InterleavedBufferAttribute.js +3 -2
  172. package/src/core/Object3D.js +3 -2
  173. package/src/core/Raycaster.js +2 -1
  174. package/src/core/RenderTarget.js +10 -1
  175. package/src/extras/Controls.js +5 -4
  176. package/src/extras/DataUtils.js +2 -1
  177. package/src/extras/Earcut.js +6 -0
  178. package/src/extras/ImageUtils.js +2 -2
  179. package/src/extras/PMREMGenerator.js +268 -55
  180. package/src/extras/TextureUtils.js +2 -1
  181. package/src/extras/core/Curve.js +2 -1
  182. package/src/extras/core/Interpolations.js +7 -1
  183. package/src/extras/core/ShapePath.js +4 -4
  184. package/src/extras/lib/earcut.js +8 -8
  185. package/src/geometries/BoxGeometry.js +1 -0
  186. package/src/geometries/CapsuleGeometry.js +1 -0
  187. package/src/geometries/CircleGeometry.js +1 -0
  188. package/src/geometries/ConeGeometry.js +1 -0
  189. package/src/geometries/CylinderGeometry.js +1 -0
  190. package/src/geometries/DodecahedronGeometry.js +1 -0
  191. package/src/geometries/ExtrudeGeometry.js +8 -6
  192. package/src/geometries/IcosahedronGeometry.js +1 -0
  193. package/src/geometries/LatheGeometry.js +1 -0
  194. package/src/geometries/OctahedronGeometry.js +1 -0
  195. package/src/geometries/PlaneGeometry.js +1 -0
  196. package/src/geometries/RingGeometry.js +1 -0
  197. package/src/geometries/ShapeGeometry.js +1 -0
  198. package/src/geometries/SphereGeometry.js +1 -0
  199. package/src/geometries/TetrahedronGeometry.js +1 -0
  200. package/src/geometries/TorusGeometry.js +1 -0
  201. package/src/geometries/TorusKnotGeometry.js +1 -0
  202. package/src/geometries/TubeGeometry.js +1 -0
  203. package/src/helpers/CameraHelper.js +1 -1
  204. package/src/lights/webgpu/ProjectorLight.js +1 -1
  205. package/src/loaders/AnimationLoader.js +2 -1
  206. package/src/loaders/AudioLoader.js +2 -1
  207. package/src/loaders/BufferGeometryLoader.js +2 -2
  208. package/src/loaders/Cache.js +2 -2
  209. package/src/loaders/DataTextureLoader.js +1 -1
  210. package/src/loaders/FileLoader.js +3 -2
  211. package/src/loaders/ImageBitmapLoader.js +5 -4
  212. package/src/loaders/ImageLoader.js +1 -1
  213. package/src/loaders/Loader.js +3 -3
  214. package/src/loaders/LoadingManager.js +25 -3
  215. package/src/loaders/MaterialLoader.js +3 -2
  216. package/src/loaders/ObjectLoader.js +13 -13
  217. package/src/loaders/TextureLoader.js +1 -1
  218. package/src/loaders/nodes/NodeLoader.js +3 -2
  219. package/src/materials/Material.js +16 -3
  220. package/src/materials/MeshBasicMaterial.js +1 -0
  221. package/src/materials/MeshDepthMaterial.js +1 -0
  222. package/src/materials/MeshDistanceMaterial.js +1 -1
  223. package/src/materials/MeshLambertMaterial.js +2 -1
  224. package/src/materials/MeshMatcapMaterial.js +22 -0
  225. package/src/materials/MeshNormalMaterial.js +1 -0
  226. package/src/materials/MeshPhongMaterial.js +2 -1
  227. package/src/materials/MeshPhysicalMaterial.js +2 -1
  228. package/src/materials/MeshStandardMaterial.js +8 -7
  229. package/src/materials/MeshToonMaterial.js +1 -0
  230. package/src/materials/PointsMaterial.js +1 -1
  231. package/src/materials/ShaderMaterial.js +2 -2
  232. package/src/materials/nodes/Line2NodeMaterial.js +2 -2
  233. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  234. package/src/materials/nodes/NodeMaterial.js +62 -22
  235. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  236. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  237. package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
  238. package/src/math/Color.js +6 -5
  239. package/src/math/ColorManagement.js +9 -3
  240. package/src/math/Cylindrical.js +1 -1
  241. package/src/math/Euler.js +2 -1
  242. package/src/math/MathUtils.js +13 -11
  243. package/src/math/Matrix2.js +1 -1
  244. package/src/math/Matrix3.js +2 -2
  245. package/src/math/Matrix4.js +7 -7
  246. package/src/math/Plane.js +1 -1
  247. package/src/math/Quaternion.js +68 -66
  248. package/src/math/Spherical.js +1 -1
  249. package/src/nodes/Nodes.js +4 -1
  250. package/src/nodes/TSL.js +4 -1
  251. package/src/nodes/accessors/BufferNode.js +1 -1
  252. package/src/nodes/accessors/Camera.js +133 -7
  253. package/src/nodes/accessors/ClippingNode.js +6 -5
  254. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  255. package/src/nodes/accessors/InstanceNode.js +25 -5
  256. package/src/nodes/accessors/Lights.js +10 -0
  257. package/src/nodes/accessors/Normal.js +5 -4
  258. package/src/nodes/accessors/Object3DNode.js +1 -1
  259. package/src/nodes/accessors/Position.js +18 -2
  260. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  261. package/src/nodes/accessors/ReferenceNode.js +3 -2
  262. package/src/nodes/accessors/SceneNode.js +2 -1
  263. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  264. package/src/nodes/accessors/StorageTextureNode.js +22 -0
  265. package/src/nodes/accessors/Texture3DNode.js +14 -1
  266. package/src/nodes/accessors/TextureNode.js +130 -44
  267. package/src/nodes/code/FunctionCallNode.js +24 -4
  268. package/src/nodes/code/FunctionNode.js +23 -0
  269. package/src/nodes/core/ArrayNode.js +1 -0
  270. package/src/nodes/core/AssignNode.js +4 -3
  271. package/src/nodes/core/AttributeNode.js +2 -1
  272. package/src/nodes/core/ContextNode.js +29 -10
  273. package/src/nodes/core/IndexNode.js +2 -2
  274. package/src/nodes/core/InputNode.js +2 -1
  275. package/src/nodes/core/InspectorNode.js +128 -0
  276. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
  277. package/src/nodes/core/Node.js +152 -31
  278. package/src/nodes/core/NodeBuilder.js +183 -35
  279. package/src/nodes/core/NodeFrame.js +21 -21
  280. package/src/nodes/core/NodeFunction.js +2 -1
  281. package/src/nodes/core/NodeParser.js +2 -1
  282. package/src/nodes/core/NodeUniform.js +1 -1
  283. package/src/nodes/core/NodeUtils.js +17 -91
  284. package/src/nodes/core/ParameterNode.js +31 -0
  285. package/src/nodes/core/PropertyNode.js +7 -0
  286. package/src/nodes/core/StackNode.js +43 -16
  287. package/src/nodes/core/StructNode.js +5 -5
  288. package/src/nodes/core/StructTypeNode.js +1 -0
  289. package/src/nodes/core/SubBuildNode.js +2 -2
  290. package/src/nodes/core/UniformNode.js +18 -10
  291. package/src/nodes/core/VarNode.js +70 -33
  292. package/src/nodes/core/VaryingNode.js +3 -2
  293. package/src/nodes/display/BlendModes.js +5 -4
  294. package/src/nodes/display/BumpMapNode.js +1 -1
  295. package/src/nodes/display/ColorAdjustment.js +1 -1
  296. package/src/nodes/display/FrontFacingNode.js +4 -8
  297. package/src/nodes/display/NormalMapNode.js +2 -1
  298. package/src/nodes/display/PassNode.js +52 -11
  299. package/src/nodes/display/RenderOutputNode.js +28 -2
  300. package/src/nodes/display/ScreenNode.js +44 -14
  301. package/src/nodes/display/ToneMappingNode.js +31 -4
  302. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  303. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  304. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  305. package/src/nodes/display/ViewportTextureNode.js +42 -12
  306. package/src/nodes/fog/Fog.js +3 -2
  307. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  308. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  309. package/src/nodes/functions/BasicLightingModel.js +2 -1
  310. package/src/nodes/functions/PhysicalLightingModel.js +3 -2
  311. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  312. package/src/nodes/geometry/RangeNode.js +40 -4
  313. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  314. package/src/nodes/gpgpu/ComputeNode.js +17 -5
  315. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  316. package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
  317. package/src/nodes/lighting/EnvironmentNode.js +6 -6
  318. package/src/nodes/lighting/LightsNode.js +3 -4
  319. package/src/nodes/lighting/PointShadowNode.js +6 -0
  320. package/src/nodes/lighting/ShadowFilterNode.js +2 -0
  321. package/src/nodes/lighting/ShadowNode.js +75 -8
  322. package/src/nodes/math/BitcastNode.js +156 -0
  323. package/src/nodes/math/ConditionalNode.js +24 -7
  324. package/src/nodes/math/MathNode.js +25 -19
  325. package/src/nodes/math/OperatorNode.js +7 -5
  326. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  327. package/src/nodes/shapes/Shapes.js +1 -1
  328. package/src/nodes/tsl/TSLBase.js +5 -2
  329. package/src/nodes/tsl/TSLCore.js +460 -159
  330. package/src/nodes/utils/DebugNode.js +2 -1
  331. package/src/nodes/utils/EventNode.js +36 -0
  332. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  333. package/src/nodes/utils/JoinNode.js +6 -3
  334. package/src/nodes/utils/LoopNode.js +20 -24
  335. package/src/nodes/utils/MemberNode.js +59 -7
  336. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  337. package/src/nodes/utils/RTTNode.js +13 -3
  338. package/src/nodes/utils/ReflectorNode.js +58 -7
  339. package/src/nodes/utils/SampleNode.js +12 -2
  340. package/src/nodes/utils/SplitNode.js +11 -0
  341. package/src/nodes/utils/Timer.js +0 -47
  342. package/src/objects/BatchedMesh.js +2 -2
  343. package/src/objects/LOD.js +1 -1
  344. package/src/objects/Line.js +2 -1
  345. package/src/objects/LineSegments.js +2 -1
  346. package/src/objects/Skeleton.js +3 -2
  347. package/src/objects/SkinnedMesh.js +3 -1
  348. package/src/objects/Sprite.js +4 -3
  349. package/src/renderers/WebGLRenderer.js +48 -41
  350. package/src/renderers/common/Animation.js +13 -1
  351. package/src/renderers/common/Attributes.js +1 -1
  352. package/src/renderers/common/Backend.js +108 -27
  353. package/src/renderers/common/Background.js +2 -1
  354. package/src/renderers/common/Bindings.js +58 -2
  355. package/src/renderers/common/CanvasTarget.js +341 -0
  356. package/src/renderers/common/ChainMap.js +1 -1
  357. package/src/renderers/common/DataMap.js +1 -1
  358. package/src/renderers/common/Geometries.js +26 -0
  359. package/src/renderers/common/Info.js +4 -2
  360. package/src/renderers/common/InspectorBase.js +146 -0
  361. package/src/renderers/common/Pipelines.js +1 -1
  362. package/src/renderers/common/PostProcessing.js +6 -25
  363. package/src/renderers/common/QuadMesh.js +7 -1
  364. package/src/renderers/common/RenderContext.js +2 -2
  365. package/src/renderers/common/RenderList.js +7 -3
  366. package/src/renderers/common/RenderObject.js +16 -2
  367. package/src/renderers/common/RenderObjects.js +1 -1
  368. package/src/renderers/common/Renderer.js +473 -245
  369. package/src/renderers/common/RendererUtils.js +9 -0
  370. package/src/renderers/common/SampledTexture.js +9 -1
  371. package/src/renderers/common/Sampler.js +50 -12
  372. package/src/renderers/common/StorageTexture.js +9 -1
  373. package/src/renderers/common/Textures.js +121 -45
  374. package/src/renderers/common/TimestampQueryPool.js +65 -3
  375. package/src/renderers/common/UniformsGroup.js +2 -1
  376. package/src/renderers/common/XRManager.js +42 -22
  377. package/src/renderers/common/extras/PMREMGenerator.js +160 -65
  378. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  379. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  380. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  381. package/src/renderers/common/nodes/Nodes.js +38 -16
  382. package/src/renderers/shaders/DFGLUTData.js +64 -0
  383. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  384. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  386. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  387. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  388. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  389. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  390. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  391. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -15
  392. package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
  393. package/src/renderers/shaders/UniformsLib.js +1 -0
  394. package/src/renderers/shaders/UniformsUtils.js +25 -4
  395. package/src/renderers/webgl/WebGLCapabilities.js +2 -1
  396. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  397. package/src/renderers/webgl/WebGLInfo.js +3 -1
  398. package/src/renderers/webgl/WebGLProgram.js +15 -14
  399. package/src/renderers/webgl/WebGLPrograms.js +2 -1
  400. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  401. package/src/renderers/webgl/WebGLState.js +15 -14
  402. package/src/renderers/webgl/WebGLTextures.js +19 -14
  403. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  404. package/src/renderers/webgl/WebGLUtils.js +3 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
  407. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  408. package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
  409. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -19
  410. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  411. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  412. package/src/renderers/webgpu/WebGPUBackend.js +153 -123
  413. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  414. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  415. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
  416. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  417. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
  418. package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
  419. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
  420. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  421. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
  422. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  423. package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
  424. package/src/renderers/webxr/WebXRManager.js +42 -26
  425. package/src/textures/ExternalTexture.js +15 -4
  426. package/src/textures/Source.js +3 -2
  427. package/src/textures/Texture.js +3 -2
  428. package/src/textures/VideoTexture.js +2 -3
  429. package/src/utils.js +67 -3
  430. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
@@ -0,0 +1,128 @@
1
+ import Node from './Node.js';
2
+ import InspectorBase from '../../renderers/common/InspectorBase.js';
3
+ import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
4
+ import { NodeUpdateType } from './constants.js';
5
+ import { warnOnce } from '../../utils.js';
6
+
7
+ /**
8
+ * InspectorNode is a wrapper node that allows inspection of node values during rendering.
9
+ * It can be used to debug or analyze node outputs in the rendering pipeline.
10
+ *
11
+ * @augments Node
12
+ */
13
+ class InspectorNode extends Node {
14
+
15
+ /**
16
+ * Returns the type of the node.
17
+ *
18
+ * @returns {string}
19
+ */
20
+ static get type() {
21
+
22
+ return 'InspectorNode';
23
+
24
+ }
25
+
26
+ /**
27
+ * Creates an InspectorNode.
28
+ *
29
+ * @param {Node} node - The node to inspect.
30
+ * @param {string} [name=''] - Optional name for the inspector node.
31
+ * @param {Function|null} [callback=null] - Optional callback to modify the node during setup.
32
+ */
33
+ constructor( node, name = '', callback = null ) {
34
+
35
+ super();
36
+
37
+ this.node = node;
38
+ this.name = name;
39
+ this.callback = callback;
40
+
41
+ this.updateType = NodeUpdateType.FRAME;
42
+
43
+ this.isInspectorNode = true;
44
+
45
+ }
46
+
47
+ /**
48
+ * Returns the name of the inspector node.
49
+ *
50
+ * @returns {string}
51
+ */
52
+ getName() {
53
+
54
+ return this.name || this.node.name;
55
+
56
+ }
57
+
58
+ /**
59
+ * Updates the inspector node, allowing inspection of the wrapped node.
60
+ *
61
+ * @param {NodeFrame} frame - A reference to the current node frame.
62
+ */
63
+ update( frame ) {
64
+
65
+ frame.renderer.inspector.inspect( this );
66
+
67
+ }
68
+
69
+ /**
70
+ * Returns the type of the wrapped node.
71
+ *
72
+ * @param {NodeBuilder} builder - The node builder.
73
+ * @returns {string}
74
+ */
75
+ getNodeType( builder ) {
76
+
77
+ return this.node.getNodeType( builder );
78
+
79
+ }
80
+
81
+ /**
82
+ * Sets up the inspector node.
83
+ *
84
+ * @param {NodeBuilder} builder - The node builder.
85
+ * @returns {Node} The setup node.
86
+ */
87
+ setup( builder ) {
88
+
89
+ let node = this.node;
90
+
91
+ if ( builder.context.inspector === true && this.callback !== null ) {
92
+
93
+ node = this.callback( node );
94
+
95
+ }
96
+
97
+ if ( builder.renderer.backend.isWebGPUBackend !== true && builder.renderer.inspector.constructor !== InspectorBase ) {
98
+
99
+ warnOnce( 'TSL: ".toInspector()" is only available with WebGPU.' );
100
+
101
+ }
102
+
103
+ return node;
104
+
105
+ }
106
+
107
+ }
108
+
109
+ export default InspectorNode;
110
+
111
+ /**
112
+ * Creates an inspector node to wrap around a given node for inspection purposes.
113
+ *
114
+ * @tsl
115
+ * @param {Node} node - The node to inspect.
116
+ * @param {string} [name=''] - Optional name for the inspector node.
117
+ * @param {Function|null} [callback=null] - Optional callback to modify the node during setup.
118
+ * @returns {Node} The inspector node.
119
+ */
120
+ export function inspector( node, name = '', callback = null ) {
121
+
122
+ node = nodeObject( node );
123
+
124
+ return node.before( new InspectorNode( node, name, callback ) );
125
+
126
+ }
127
+
128
+ addMethodChaining( 'toInspector', inspector );
@@ -1,5 +1,6 @@
1
1
  import Node from './Node.js';
2
2
  import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
3
+ import { warn } from '../../utils.js';
3
4
 
4
5
  /**
5
6
  * This node can be used as a cache management component for another node.
@@ -8,11 +9,11 @@ import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
8
9
  *
9
10
  * @augments Node
10
11
  */
11
- class CacheNode extends Node {
12
+ class IsolateNode extends Node {
12
13
 
13
14
  static get type() {
14
15
 
15
- return 'CacheNode';
16
+ return 'IsolateNode';
16
17
 
17
18
  }
18
19
 
@@ -48,7 +49,7 @@ class CacheNode extends Node {
48
49
  * @readonly
49
50
  * @default true
50
51
  */
51
- this.isCacheNode = true;
52
+ this.isIsolateNode = true;
52
53
 
53
54
  }
54
55
 
@@ -82,19 +83,51 @@ class CacheNode extends Node {
82
83
 
83
84
  }
84
85
 
86
+ setParent( parent ) {
87
+
88
+ this.parent = parent;
89
+
90
+ return this;
91
+
92
+ }
93
+
94
+ getParent() {
95
+
96
+ return this.parent;
97
+
98
+ }
99
+
85
100
  }
86
101
 
87
- export default CacheNode;
102
+ export default IsolateNode;
103
+
104
+ /**
105
+ * TSL function for creating a cache node.
106
+ *
107
+ * @tsl
108
+ * @function
109
+ * @param {Node} node - The node that should be cached.
110
+ * @returns {IsolateNode}
111
+ */
112
+ export const isolate = ( node ) => new IsolateNode( nodeObject( node ) );
88
113
 
89
114
  /**
90
115
  * TSL function for creating a cache node.
91
116
  *
92
117
  * @tsl
93
118
  * @function
119
+ * @deprecated
94
120
  * @param {Node} node - The node that should be cached.
95
- * @param {boolean} [parent] - Whether this node refers to a shared parent cache or not.
96
- * @returns {CacheNode}
121
+ * @param {boolean} [parent=true] - Whether this node refers to a shared parent cache or not.
122
+ * @returns {IsolateNode}
97
123
  */
98
- export const cache = ( node, parent ) => nodeObject( new CacheNode( nodeObject( node ), parent ) );
124
+ export function cache( node, parent = true ) {
125
+
126
+ warn( 'TSL: "cache()" has been deprecated. Use "isolate()" instead.' ); // @deprecated r181
127
+
128
+ return isolate( node ).setParent( parent );
129
+
130
+ }
99
131
 
100
132
  addMethodChaining( 'cache', cache );
133
+ addMethodChaining( 'isolate', isolate );
@@ -1,8 +1,9 @@
1
1
  import { NodeUpdateType } from './constants.js';
2
- import { getNodeChildren, getCacheKey, hash } from './NodeUtils.js';
2
+ import { hash, hashArray, hashString } from './NodeUtils.js';
3
3
 
4
4
  import { EventDispatcher } from '../../core/EventDispatcher.js';
5
5
  import { MathUtils } from '../../math/MathUtils.js';
6
+ import { warn, error } from '../../utils.js';
6
7
 
7
8
  const _parentBuildStage = {
8
9
  analyze: 'setup',
@@ -82,6 +83,14 @@ class Node extends EventDispatcher {
82
83
  */
83
84
  this.version = 0;
84
85
 
86
+ /**
87
+ * The name of the node.
88
+ *
89
+ * @type {string}
90
+ * @default ''
91
+ */
92
+ this.name = '';
93
+
85
94
  /**
86
95
  * Whether this node is global or not. This property is relevant for the internal
87
96
  * node caching system. All nodes which should be declared just once should
@@ -111,6 +120,8 @@ class Node extends EventDispatcher {
111
120
 
112
121
  // private
113
122
 
123
+ this._beforeNodes = null;
124
+
114
125
  /**
115
126
  * The cache key of this node.
116
127
  *
@@ -172,7 +183,7 @@ class Node extends EventDispatcher {
172
183
  onUpdate( callback, updateType ) {
173
184
 
174
185
  this.updateType = updateType;
175
- this.update = callback.bind( this.getSelf() );
186
+ this.update = callback.bind( this );
176
187
 
177
188
  return this;
178
189
 
@@ -225,26 +236,12 @@ class Node extends EventDispatcher {
225
236
  */
226
237
  onReference( callback ) {
227
238
 
228
- this.updateReference = callback.bind( this.getSelf() );
239
+ this.updateReference = callback.bind( this );
229
240
 
230
241
  return this;
231
242
 
232
243
  }
233
244
 
234
- /**
235
- * The `this` reference might point to a Proxy so this method can be used
236
- * to get the reference to the actual node instance.
237
- *
238
- * @return {Node} A reference to the node.
239
- */
240
- getSelf() {
241
-
242
- // Returns non-node object.
243
-
244
- return this.self || this;
245
-
246
- }
247
-
248
245
  /**
249
246
  * Nodes might refer to other objects like materials. This method allows to dynamically update the reference
250
247
  * to such objects based on a given state (e.g. the current node frame or builder).
@@ -280,7 +277,7 @@ class Node extends EventDispatcher {
280
277
  */
281
278
  * getChildren() {
282
279
 
283
- for ( const { childNode } of getNodeChildren( this ) ) {
280
+ for ( const { childNode } of this._getChildren() ) {
284
281
 
285
282
  yield childNode;
286
283
 
@@ -322,19 +319,100 @@ class Node extends EventDispatcher {
322
319
 
323
320
  }
324
321
 
322
+ /**
323
+ * Returns the child nodes of this node.
324
+ *
325
+ * @private
326
+ * @param {Set<Node>} [ignores=new Set()] - A set of nodes to ignore during the search to avoid circular references.
327
+ * @returns {Array<Object>} An array of objects describing the child nodes.
328
+ */
329
+ _getChildren( ignores = new Set() ) {
330
+
331
+ const children = [];
332
+
333
+ // avoid circular references
334
+ ignores.add( this );
335
+
336
+ for ( const property of Object.getOwnPropertyNames( this ) ) {
337
+
338
+ const object = this[ property ];
339
+
340
+ // Ignore private properties and ignored nodes.
341
+ if ( property.startsWith( '_' ) === true || ignores.has( object ) ) continue;
342
+
343
+ if ( Array.isArray( object ) === true ) {
344
+
345
+ for ( let i = 0; i < object.length; i ++ ) {
346
+
347
+ const child = object[ i ];
348
+
349
+ if ( child && child.isNode === true ) {
350
+
351
+ children.push( { property, index: i, childNode: child } );
352
+
353
+ }
354
+
355
+ }
356
+
357
+ } else if ( object && object.isNode === true ) {
358
+
359
+ children.push( { property, childNode: object } );
360
+
361
+ } else if ( object && Object.getPrototypeOf( object ) === Object.prototype ) {
362
+
363
+ for ( const subProperty in object ) {
364
+
365
+ // Ignore private sub-properties.
366
+ if ( subProperty.startsWith( '_' ) === true ) continue;
367
+
368
+ const child = object[ subProperty ];
369
+
370
+ if ( child && child.isNode === true ) {
371
+
372
+ children.push( { property, index: subProperty, childNode: child } );
373
+
374
+ }
375
+
376
+ }
377
+
378
+ }
379
+
380
+ }
381
+
382
+ //
383
+
384
+ return children;
385
+
386
+ }
387
+
325
388
  /**
326
389
  * Returns the cache key for this node.
327
390
  *
328
391
  * @param {boolean} [force=false] - When set to `true`, a recomputation of the cache key is forced.
392
+ * @param {Set<Node>} [ignores=null] - A set of nodes to ignore during the computation of the cache key.
329
393
  * @return {number} The cache key of the node.
330
394
  */
331
- getCacheKey( force = false ) {
395
+ getCacheKey( force = false, ignores = null ) {
332
396
 
333
397
  force = force || this.version !== this._cacheKeyVersion;
334
398
 
335
399
  if ( force === true || this._cacheKey === null ) {
336
400
 
337
- this._cacheKey = hash( getCacheKey( this, force ), this.customCacheKey() );
401
+ if ( ignores === null ) ignores = new Set();
402
+
403
+ //
404
+
405
+ const values = [];
406
+
407
+ for ( const { property, childNode } of this._getChildren( ignores ) ) {
408
+
409
+ values.push( hashString( property.slice( 0, - 4 ) ), childNode.getCacheKey( force, ignores ) );
410
+
411
+ }
412
+
413
+ //
414
+
415
+ this._cacheKey = hash( hashArray( values ), this.customCacheKey() );
338
416
  this._cacheKeyVersion = this.version;
339
417
 
340
418
  }
@@ -350,7 +428,7 @@ class Node extends EventDispatcher {
350
428
  */
351
429
  customCacheKey() {
352
430
 
353
- return 0;
431
+ return this.id;
354
432
 
355
433
  }
356
434
 
@@ -563,7 +641,7 @@ class Node extends EventDispatcher {
563
641
  * This state builds the output node and returns the resulting shader string.
564
642
  *
565
643
  * @param {NodeBuilder} builder - The current node builder.
566
- * @param {?string} output - Can be used to define the output type.
644
+ * @param {?string} [output] - Can be used to define the output type.
567
645
  * @return {?string} The generated shader string.
568
646
  */
569
647
  generate( builder, output ) {
@@ -588,7 +666,7 @@ class Node extends EventDispatcher {
588
666
  */
589
667
  updateBefore( /*frame*/ ) {
590
668
 
591
- console.warn( 'Abstract function.' );
669
+ warn( 'Abstract function.' );
592
670
 
593
671
  }
594
672
 
@@ -602,7 +680,7 @@ class Node extends EventDispatcher {
602
680
  */
603
681
  updateAfter( /*frame*/ ) {
604
682
 
605
- console.warn( 'Abstract function.' );
683
+ warn( 'Abstract function.' );
606
684
 
607
685
  }
608
686
 
@@ -616,7 +694,17 @@ class Node extends EventDispatcher {
616
694
  */
617
695
  update( /*frame*/ ) {
618
696
 
619
- console.warn( 'Abstract function.' );
697
+ warn( 'Abstract function.' );
698
+
699
+ }
700
+
701
+ before( node ) {
702
+
703
+ if ( this._beforeNodes === null ) this._beforeNodes = [];
704
+
705
+ this._beforeNodes.push( node );
706
+
707
+ return this;
620
708
 
621
709
  }
622
710
 
@@ -627,8 +715,8 @@ class Node extends EventDispatcher {
627
715
  * - **generate**: Generates the shader code for the node. Returns the generated shader string.
628
716
  *
629
717
  * @param {NodeBuilder} builder - The current node builder.
630
- * @param {string|Node|null} [output=null] - Can be used to define the output type.
631
- * @return {Node|string|null} The result of the build process, depending on the build stage.
718
+ * @param {?(string|Node)} [output=null] - Can be used to define the output type.
719
+ * @return {?(Node|string)} The result of the build process, depending on the build stage.
632
720
  */
633
721
  build( builder, output = null ) {
634
722
 
@@ -642,6 +730,24 @@ class Node extends EventDispatcher {
642
730
 
643
731
  //
644
732
 
733
+ if ( this._beforeNodes !== null ) {
734
+
735
+ const currentBeforeNodes = this._beforeNodes;
736
+
737
+ this._beforeNodes = null;
738
+
739
+ for ( const beforeNode of currentBeforeNodes ) {
740
+
741
+ beforeNode.build( builder, output );
742
+
743
+ }
744
+
745
+ this._beforeNodes = currentBeforeNodes;
746
+
747
+ }
748
+
749
+ //
750
+
645
751
  const nodeData = builder.getDataFromNode( this );
646
752
  nodeData.buildStages = nodeData.buildStages || {};
647
753
  nodeData.buildStages[ builder.buildStage ] = true;
@@ -724,7 +830,12 @@ class Node extends EventDispatcher {
724
830
 
725
831
  } else if ( buildStage === 'generate' ) {
726
832
 
727
- const isGenerateOnce = this.generate.length === 1;
833
+ // If generate has just one argument, it means the output type is not required.
834
+ // This means that the node does not handle output conversions internally,
835
+ // so the value is stored in a cache and the builder handles the conversion
836
+ // for all requested output types.
837
+
838
+ const isGenerateOnce = this.generate.length < 2;
728
839
 
729
840
  if ( isGenerateOnce ) {
730
841
 
@@ -745,7 +856,7 @@ class Node extends EventDispatcher {
745
856
 
746
857
  } else {
747
858
 
748
- console.warn( 'THREE.Node: Recursion detected.', this );
859
+ warn( 'Node: Recursion detected.', this );
749
860
 
750
861
  result = '/* Recursion detected. */';
751
862
 
@@ -765,6 +876,16 @@ class Node extends EventDispatcher {
765
876
 
766
877
  }
767
878
 
879
+ if ( result === '' && output !== null && output !== 'void' && output !== 'OutputType' ) {
880
+
881
+ // if no snippet is generated, return a default value
882
+
883
+ error( `TSL: Invalid generated code, expected a "${ output }".` );
884
+
885
+ result = builder.generateConst( output );
886
+
887
+ }
888
+
768
889
  }
769
890
 
770
891
  builder.removeChain( this );
@@ -777,11 +898,11 @@ class Node extends EventDispatcher {
777
898
  /**
778
899
  * Returns the child nodes as a JSON object.
779
900
  *
780
- * @return {Array<Object>} An iterable list of serialized child objects as JSON.
901
+ * @return {Generator<Object>} An iterable list of serialized child objects as JSON.
781
902
  */
782
903
  getSerializeChildren() {
783
904
 
784
- return getNodeChildren( this );
905
+ return this._getChildren();
785
906
 
786
907
  }
787
908