super-three 0.179.0 → 0.184.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (696) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +14522 -12207
  4. package/build/three.core.js +12005 -10954
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +2270 -1005
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +63 -18
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +16573 -7890
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +16533 -7888
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  15. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  16. package/examples/jsm/Addons.js +12 -4
  17. package/examples/jsm/animation/CCDIKSolver.js +8 -4
  18. package/examples/jsm/controls/ArcballControls.js +15 -12
  19. package/examples/jsm/controls/DragControls.js +9 -59
  20. package/examples/jsm/controls/FirstPersonControls.js +61 -57
  21. package/examples/jsm/controls/FlyControls.js +5 -1
  22. package/examples/jsm/controls/MapControls.js +55 -1
  23. package/examples/jsm/controls/OrbitControls.js +113 -10
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +9 -9
  26. package/examples/jsm/controls/TransformControls.js +35 -3
  27. package/examples/jsm/csm/CSM.js +2 -1
  28. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  29. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  30. package/examples/jsm/effects/AsciiEffect.js +8 -8
  31. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  32. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  33. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  34. package/examples/jsm/exporters/EXRExporter.js +2 -2
  35. package/examples/jsm/exporters/GLTFExporter.js +185 -34
  36. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  37. package/examples/jsm/exporters/PLYExporter.js +1 -1
  38. package/examples/jsm/exporters/USDZExporter.js +31 -5
  39. package/examples/jsm/geometries/DecalGeometry.js +3 -3
  40. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  41. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  42. package/examples/jsm/geometries/TextGeometry.js +21 -2
  43. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  44. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  45. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  46. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  47. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  48. package/examples/jsm/helpers/ViewHelper.js +110 -13
  49. package/examples/jsm/inspector/Extension.js +13 -0
  50. package/examples/jsm/inspector/Inspector.js +542 -0
  51. package/examples/jsm/inspector/RendererInspector.js +425 -0
  52. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  53. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  55. package/examples/jsm/inspector/tabs/Console.js +238 -0
  56. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  57. package/examples/jsm/inspector/tabs/Parameters.js +380 -0
  58. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  59. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  60. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  61. package/examples/jsm/inspector/tabs/Viewer.js +268 -0
  62. package/examples/jsm/inspector/ui/Graph.js +95 -0
  63. package/examples/jsm/inspector/ui/Item.js +170 -0
  64. package/examples/jsm/inspector/ui/List.js +75 -0
  65. package/examples/jsm/inspector/ui/Profiler.js +2072 -0
  66. package/examples/jsm/inspector/ui/Style.js +1667 -0
  67. package/examples/jsm/inspector/ui/Tab.js +265 -0
  68. package/examples/jsm/inspector/ui/Values.js +476 -0
  69. package/examples/jsm/inspector/ui/utils.js +69 -0
  70. package/examples/jsm/interaction/InteractionManager.js +226 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  73. package/examples/jsm/interactive/SelectionBox.js +30 -0
  74. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  75. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  76. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  77. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  79. package/examples/jsm/lines/Line2.js +3 -3
  80. package/examples/jsm/lines/LineGeometry.js +1 -1
  81. package/examples/jsm/lines/LineMaterial.js +7 -1
  82. package/examples/jsm/lines/LineSegments2.js +2 -2
  83. package/examples/jsm/lines/Wireframe.js +2 -2
  84. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  85. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  86. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  87. package/examples/jsm/loaders/3DMLoader.js +5 -4
  88. package/examples/jsm/loaders/3MFLoader.js +3 -3
  89. package/examples/jsm/loaders/AMFLoader.js +2 -2
  90. package/examples/jsm/loaders/ColladaLoader.js +27 -4029
  91. package/examples/jsm/loaders/DDSLoader.js +1 -1
  92. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  93. package/examples/jsm/loaders/EXRLoader.js +692 -53
  94. package/examples/jsm/loaders/FBXLoader.js +237 -39
  95. package/examples/jsm/loaders/FontLoader.js +23 -5
  96. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  97. package/examples/jsm/loaders/GLTFLoader.js +159 -185
  98. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  99. package/examples/jsm/loaders/HDRLoader.js +485 -0
  100. package/examples/jsm/loaders/KMZLoader.js +5 -5
  101. package/examples/jsm/loaders/KTX2Loader.js +162 -53
  102. package/examples/jsm/loaders/KTXLoader.js +2 -2
  103. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  104. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  105. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  106. package/examples/jsm/loaders/LWOLoader.js +9 -41
  107. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  108. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  109. package/examples/jsm/loaders/OBJLoader.js +1 -1
  110. package/examples/jsm/loaders/PCDLoader.js +4 -2
  111. package/examples/jsm/loaders/PDBLoader.js +1 -1
  112. package/examples/jsm/loaders/RGBELoader.js +7 -473
  113. package/examples/jsm/loaders/SVGLoader.js +4 -4
  114. package/examples/jsm/loaders/TDSLoader.js +0 -2
  115. package/examples/jsm/loaders/TGALoader.js +0 -2
  116. package/examples/jsm/loaders/TTFLoader.js +4 -4
  117. package/examples/jsm/loaders/USDLoader.js +100 -40
  118. package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
  119. package/examples/jsm/loaders/VOXLoader.js +660 -117
  120. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  121. package/examples/jsm/loaders/VTKLoader.js +42 -25
  122. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  123. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  124. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  125. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  126. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  127. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  128. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  129. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  130. package/examples/jsm/math/ColorSpaces.js +19 -1
  131. package/examples/jsm/math/ConvexHull.js +3 -3
  132. package/examples/jsm/math/ImprovedNoise.js +1 -1
  133. package/examples/jsm/math/Lut.js +2 -2
  134. package/examples/jsm/math/Octree.js +131 -1
  135. package/examples/jsm/math/SimplexNoise.js +1 -1
  136. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  137. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  138. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  139. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  140. package/examples/jsm/misc/RollerCoaster.js +42 -4
  141. package/examples/jsm/misc/TubePainter.js +383 -40
  142. package/examples/jsm/misc/Volume.js +1 -2
  143. package/examples/jsm/misc/VolumeSlice.js +0 -1
  144. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  145. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  146. package/examples/jsm/objects/LensflareMesh.js +1 -1
  147. package/examples/jsm/objects/Reflector.js +73 -25
  148. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  149. package/examples/jsm/objects/Sky.js +91 -7
  150. package/examples/jsm/objects/SkyMesh.js +151 -17
  151. package/examples/jsm/objects/Water.js +7 -6
  152. package/examples/jsm/objects/Water2.js +5 -3
  153. package/examples/jsm/objects/WaterMesh.js +11 -13
  154. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  155. package/examples/jsm/physics/JoltPhysics.js +10 -6
  156. package/examples/jsm/physics/RapierPhysics.js +9 -5
  157. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  158. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  159. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  160. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  161. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  162. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  163. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  164. package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
  165. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  166. package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
  167. package/examples/jsm/renderers/Projector.js +246 -28
  168. package/examples/jsm/renderers/SVGRenderer.js +175 -61
  169. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  170. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  171. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  172. package/examples/jsm/shaders/BokehShader.js +1 -1
  173. package/examples/jsm/shaders/BokehShader2.js +1 -1
  174. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  175. package/examples/jsm/shaders/FocusShader.js +1 -1
  176. package/examples/jsm/shaders/GTAOShader.js +21 -8
  177. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  178. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  179. package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
  180. package/examples/jsm/shaders/SAOShader.js +17 -4
  181. package/examples/jsm/shaders/SSAOShader.js +11 -1
  182. package/examples/jsm/shaders/SSRShader.js +7 -6
  183. package/examples/jsm/shaders/SepiaShader.js +1 -1
  184. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  185. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  186. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
  187. package/examples/jsm/shaders/VignetteShader.js +1 -1
  188. package/examples/jsm/transpiler/AST.js +44 -0
  189. package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
  190. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  191. package/examples/jsm/transpiler/TSLEncoder.js +52 -10
  192. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  193. package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
  194. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  195. package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
  196. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  197. package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
  198. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  199. package/examples/jsm/tsl/display/BloomNode.js +23 -9
  200. package/examples/jsm/tsl/display/CRT.js +150 -0
  201. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
  202. package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
  203. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  204. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  205. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  206. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  207. package/examples/jsm/tsl/display/GTAONode.js +59 -9
  208. package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
  209. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  210. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  211. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  212. package/examples/jsm/tsl/display/OutlineNode.js +81 -20
  213. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  214. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  215. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  216. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  217. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  218. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  219. package/examples/jsm/tsl/display/SSGINode.js +638 -0
  220. package/examples/jsm/tsl/display/SSRNode.js +186 -69
  221. package/examples/jsm/tsl/display/SSSNode.js +490 -0
  222. package/examples/jsm/tsl/display/Shape.js +29 -0
  223. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  224. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  225. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  226. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  227. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  228. package/examples/jsm/tsl/display/TRAANode.js +381 -75
  229. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  230. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  231. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  232. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  233. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  234. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  235. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  236. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  237. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  238. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  239. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  240. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  241. package/examples/jsm/tsl/math/Bayer.js +53 -3
  242. package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
  243. package/examples/jsm/utils/ColorUtils.js +76 -0
  244. package/examples/jsm/utils/LDrawUtils.js +1 -1
  245. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  246. package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
  247. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  248. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  249. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  250. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  251. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  252. package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
  253. package/package.json +27 -38
  254. package/src/Three.Core.js +7 -3
  255. package/src/Three.TSL.js +61 -16
  256. package/src/Three.WebGPU.Nodes.js +7 -0
  257. package/src/Three.WebGPU.js +11 -0
  258. package/src/Three.js +1 -0
  259. package/src/animation/AnimationAction.js +12 -2
  260. package/src/animation/AnimationClip.js +21 -5
  261. package/src/animation/AnimationMixer.js +9 -3
  262. package/src/animation/AnimationObjectGroup.js +2 -1
  263. package/src/animation/AnimationUtils.js +1 -12
  264. package/src/animation/KeyframeTrack.js +54 -14
  265. package/src/animation/PropertyBinding.js +12 -11
  266. package/src/animation/PropertyMixer.js +4 -4
  267. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  268. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  269. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  270. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  271. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  272. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  273. package/src/audio/Audio.js +11 -10
  274. package/src/audio/AudioContext.js +2 -2
  275. package/src/audio/AudioListener.js +5 -3
  276. package/src/audio/PositionalAudio.js +1 -1
  277. package/src/cameras/Camera.js +32 -2
  278. package/src/cameras/CubeCamera.js +20 -0
  279. package/src/cameras/OrthographicCamera.js +1 -1
  280. package/src/cameras/PerspectiveCamera.js +1 -1
  281. package/src/cameras/StereoCamera.js +2 -2
  282. package/src/constants.js +100 -7
  283. package/src/core/BufferAttribute.js +13 -1
  284. package/src/core/BufferGeometry.js +24 -12
  285. package/src/core/Clock.js +7 -0
  286. package/src/core/EventDispatcher.js +1 -1
  287. package/src/core/InterleavedBuffer.js +1 -1
  288. package/src/core/InterleavedBufferAttribute.js +3 -2
  289. package/src/core/Object3D.js +55 -6
  290. package/src/core/Raycaster.js +4 -3
  291. package/src/core/RenderTarget.js +14 -5
  292. package/src/extras/Controls.js +5 -4
  293. package/src/extras/DataUtils.js +2 -1
  294. package/src/extras/Earcut.js +6 -0
  295. package/src/extras/ImageUtils.js +2 -2
  296. package/src/extras/PMREMGenerator.js +259 -57
  297. package/src/extras/TextureUtils.js +6 -1
  298. package/src/extras/core/Curve.js +2 -1
  299. package/src/extras/core/Interpolations.js +7 -1
  300. package/src/extras/core/ShapePath.js +4 -4
  301. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  302. package/src/extras/lib/earcut.js +8 -8
  303. package/src/geometries/BoxGeometry.js +1 -0
  304. package/src/geometries/CapsuleGeometry.js +1 -0
  305. package/src/geometries/CircleGeometry.js +1 -0
  306. package/src/geometries/ConeGeometry.js +1 -0
  307. package/src/geometries/CylinderGeometry.js +1 -0
  308. package/src/geometries/DodecahedronGeometry.js +1 -0
  309. package/src/geometries/ExtrudeGeometry.js +10 -8
  310. package/src/geometries/IcosahedronGeometry.js +1 -0
  311. package/src/geometries/LatheGeometry.js +1 -0
  312. package/src/geometries/OctahedronGeometry.js +1 -0
  313. package/src/geometries/PlaneGeometry.js +1 -0
  314. package/src/geometries/PolyhedronGeometry.js +1 -1
  315. package/src/geometries/RingGeometry.js +1 -0
  316. package/src/geometries/ShapeGeometry.js +1 -0
  317. package/src/geometries/SphereGeometry.js +1 -0
  318. package/src/geometries/TetrahedronGeometry.js +1 -0
  319. package/src/geometries/TorusGeometry.js +9 -3
  320. package/src/geometries/TorusKnotGeometry.js +1 -0
  321. package/src/geometries/TubeGeometry.js +1 -0
  322. package/src/helpers/CameraHelper.js +4 -1
  323. package/src/helpers/DirectionalLightHelper.js +4 -1
  324. package/src/helpers/HemisphereLightHelper.js +3 -0
  325. package/src/helpers/PointLightHelper.js +1 -25
  326. package/src/helpers/SpotLightHelper.js +3 -0
  327. package/src/lights/DirectionalLight.js +13 -0
  328. package/src/lights/HemisphereLight.js +10 -0
  329. package/src/lights/Light.js +1 -11
  330. package/src/lights/LightProbe.js +0 -15
  331. package/src/lights/LightShadow.js +15 -6
  332. package/src/lights/PointLight.js +15 -0
  333. package/src/lights/PointLightShadow.js +0 -86
  334. package/src/lights/SpotLight.js +22 -1
  335. package/src/lights/webgpu/IESSpotLight.js +2 -1
  336. package/src/lights/webgpu/ProjectorLight.js +1 -1
  337. package/src/loaders/AnimationLoader.js +2 -1
  338. package/src/loaders/AudioLoader.js +13 -2
  339. package/src/loaders/BufferGeometryLoader.js +2 -2
  340. package/src/loaders/Cache.js +30 -2
  341. package/src/loaders/DataTextureLoader.js +6 -4
  342. package/src/loaders/FileLoader.js +4 -4
  343. package/src/loaders/ImageBitmapLoader.js +17 -13
  344. package/src/loaders/ImageLoader.js +1 -1
  345. package/src/loaders/Loader.js +9 -3
  346. package/src/loaders/LoadingManager.js +25 -3
  347. package/src/loaders/MaterialLoader.js +6 -4
  348. package/src/loaders/ObjectLoader.js +57 -17
  349. package/src/loaders/TextureLoader.js +1 -1
  350. package/src/loaders/nodes/NodeLoader.js +5 -4
  351. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  352. package/src/materials/Material.js +18 -3
  353. package/src/materials/MeshBasicMaterial.js +1 -0
  354. package/src/materials/MeshDepthMaterial.js +1 -0
  355. package/src/materials/MeshDistanceMaterial.js +1 -1
  356. package/src/materials/MeshLambertMaterial.js +11 -1
  357. package/src/materials/MeshMatcapMaterial.js +22 -0
  358. package/src/materials/MeshNormalMaterial.js +1 -0
  359. package/src/materials/MeshPhongMaterial.js +11 -1
  360. package/src/materials/MeshPhysicalMaterial.js +2 -1
  361. package/src/materials/MeshStandardMaterial.js +8 -7
  362. package/src/materials/MeshToonMaterial.js +2 -1
  363. package/src/materials/PointsMaterial.js +1 -1
  364. package/src/materials/ShaderMaterial.js +22 -3
  365. package/src/materials/nodes/Line2NodeMaterial.js +36 -9
  366. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  367. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  368. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  369. package/src/materials/nodes/NodeMaterial.js +95 -35
  370. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  371. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  372. package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
  373. package/src/math/Color.js +6 -5
  374. package/src/math/ColorManagement.js +9 -3
  375. package/src/math/Cylindrical.js +1 -1
  376. package/src/math/Euler.js +2 -1
  377. package/src/math/Line3.js +6 -5
  378. package/src/math/MathUtils.js +23 -21
  379. package/src/math/Matrix2.js +14 -10
  380. package/src/math/Matrix3.js +15 -11
  381. package/src/math/Matrix4.js +94 -81
  382. package/src/math/Plane.js +5 -4
  383. package/src/math/Quaternion.js +60 -84
  384. package/src/math/Sphere.js +1 -1
  385. package/src/math/Spherical.js +1 -1
  386. package/src/math/Triangle.js +1 -1
  387. package/src/math/Vector2.js +11 -7
  388. package/src/math/Vector3.js +15 -13
  389. package/src/math/Vector4.js +13 -9
  390. package/src/math/interpolants/BezierInterpolant.js +108 -0
  391. package/src/nodes/Nodes.js +86 -65
  392. package/src/nodes/TSL.js +11 -8
  393. package/src/nodes/accessors/Arrays.js +1 -1
  394. package/src/nodes/accessors/BatchNode.js +10 -10
  395. package/src/nodes/accessors/Bitangent.js +5 -5
  396. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  397. package/src/nodes/accessors/BufferNode.js +30 -3
  398. package/src/nodes/accessors/Camera.js +260 -13
  399. package/src/nodes/accessors/ClippingNode.js +10 -9
  400. package/src/nodes/accessors/CubeTextureNode.js +32 -6
  401. package/src/nodes/accessors/InstanceNode.js +164 -39
  402. package/src/nodes/accessors/Lights.js +10 -0
  403. package/src/nodes/accessors/MaterialNode.js +9 -1
  404. package/src/nodes/accessors/MaterialProperties.js +2 -5
  405. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  406. package/src/nodes/accessors/ModelNode.js +1 -1
  407. package/src/nodes/accessors/Normal.js +16 -15
  408. package/src/nodes/accessors/Object3DNode.js +2 -2
  409. package/src/nodes/accessors/Position.js +51 -3
  410. package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
  411. package/src/nodes/accessors/ReferenceNode.js +11 -10
  412. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  413. package/src/nodes/accessors/SceneProperties.js +47 -0
  414. package/src/nodes/accessors/SkinningNode.js +27 -26
  415. package/src/nodes/accessors/StorageBufferNode.js +14 -24
  416. package/src/nodes/accessors/StorageTextureNode.js +62 -9
  417. package/src/nodes/accessors/Tangent.js +4 -14
  418. package/src/nodes/accessors/Texture3DNode.js +41 -31
  419. package/src/nodes/accessors/TextureNode.js +193 -63
  420. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  421. package/src/nodes/accessors/UserDataNode.js +1 -2
  422. package/src/nodes/accessors/VertexColorNode.js +1 -2
  423. package/src/nodes/code/FunctionCallNode.js +25 -5
  424. package/src/nodes/code/FunctionNode.js +25 -3
  425. package/src/nodes/core/ArrayNode.js +22 -2
  426. package/src/nodes/core/AssignNode.js +6 -5
  427. package/src/nodes/core/AttributeNode.js +5 -4
  428. package/src/nodes/core/BypassNode.js +1 -1
  429. package/src/nodes/core/ContextNode.js +133 -15
  430. package/src/nodes/core/IndexNode.js +4 -3
  431. package/src/nodes/core/InputNode.js +3 -2
  432. package/src/nodes/core/InspectorNode.js +128 -0
  433. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
  434. package/src/nodes/core/MRTNode.js +48 -2
  435. package/src/nodes/core/Node.js +264 -46
  436. package/src/nodes/core/NodeBuilder.js +453 -87
  437. package/src/nodes/core/NodeError.js +28 -0
  438. package/src/nodes/core/NodeFrame.js +31 -23
  439. package/src/nodes/core/NodeFunction.js +2 -1
  440. package/src/nodes/core/NodeParser.js +2 -1
  441. package/src/nodes/core/NodeUniform.js +1 -1
  442. package/src/nodes/core/NodeUtils.js +25 -97
  443. package/src/nodes/core/OutputStructNode.js +12 -10
  444. package/src/nodes/core/ParameterNode.js +34 -3
  445. package/src/nodes/core/PropertyNode.js +26 -3
  446. package/src/nodes/core/StackNode.js +99 -23
  447. package/src/nodes/core/StackTrace.js +139 -0
  448. package/src/nodes/core/StructNode.js +22 -8
  449. package/src/nodes/core/StructTypeNode.js +13 -18
  450. package/src/nodes/core/SubBuildNode.js +4 -4
  451. package/src/nodes/core/UniformGroupNode.js +36 -6
  452. package/src/nodes/core/UniformNode.js +37 -13
  453. package/src/nodes/core/VarNode.js +96 -34
  454. package/src/nodes/core/VaryingNode.js +2 -18
  455. package/src/nodes/display/BlendModes.js +0 -63
  456. package/src/nodes/display/BumpMapNode.js +1 -1
  457. package/src/nodes/display/ColorAdjustment.js +18 -1
  458. package/src/nodes/display/ColorSpaceNode.js +3 -3
  459. package/src/nodes/display/FrontFacingNode.js +4 -8
  460. package/src/nodes/display/NormalMapNode.js +41 -5
  461. package/src/nodes/display/PassNode.js +175 -25
  462. package/src/nodes/display/RenderOutputNode.js +35 -9
  463. package/src/nodes/display/ScreenNode.js +47 -15
  464. package/src/nodes/display/ToneMappingNode.js +32 -5
  465. package/src/nodes/display/ToonOutlinePassNode.js +10 -2
  466. package/src/nodes/display/ViewportDepthNode.js +52 -4
  467. package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
  468. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  469. package/src/nodes/display/ViewportTextureNode.js +72 -14
  470. package/src/nodes/fog/Fog.js +18 -34
  471. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  472. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  473. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  474. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  475. package/src/nodes/functions/BasicLightingModel.js +2 -1
  476. package/src/nodes/functions/PhysicalLightingModel.js +128 -46
  477. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  478. package/src/nodes/geometry/RangeNode.js +44 -6
  479. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  480. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  481. package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
  482. package/src/nodes/gpgpu/ComputeNode.js +76 -38
  483. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  484. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
  485. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  486. package/src/nodes/lighting/EnvironmentNode.js +34 -9
  487. package/src/nodes/lighting/LightsNode.js +10 -32
  488. package/src/nodes/lighting/PointShadowNode.js +167 -148
  489. package/src/nodes/lighting/ShadowFilterNode.js +55 -65
  490. package/src/nodes/lighting/ShadowNode.js +189 -44
  491. package/src/nodes/math/BitcastNode.js +156 -0
  492. package/src/nodes/math/BitcountNode.js +433 -0
  493. package/src/nodes/math/ConditionalNode.js +25 -8
  494. package/src/nodes/math/MathNode.js +98 -57
  495. package/src/nodes/math/OperatorNode.js +8 -5
  496. package/src/nodes/math/PackFloatNode.js +98 -0
  497. package/src/nodes/math/UnpackFloatNode.js +96 -0
  498. package/src/nodes/pmrem/PMREMNode.js +1 -1
  499. package/src/nodes/pmrem/PMREMUtils.js +111 -2
  500. package/src/nodes/shapes/Shapes.js +1 -1
  501. package/src/nodes/tsl/TSLBase.js +6 -3
  502. package/src/nodes/tsl/TSLCore.js +488 -166
  503. package/src/nodes/utils/ArrayElementNode.js +14 -1
  504. package/src/nodes/utils/ConvertNode.js +1 -1
  505. package/src/nodes/utils/DebugNode.js +14 -13
  506. package/src/nodes/utils/EventNode.js +67 -2
  507. package/src/nodes/utils/FlipNode.js +1 -1
  508. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  509. package/src/nodes/utils/JoinNode.js +7 -4
  510. package/src/nodes/utils/LoopNode.js +20 -24
  511. package/src/nodes/utils/MemberNode.js +60 -8
  512. package/src/nodes/utils/Packing.js +13 -1
  513. package/src/nodes/utils/PostProcessingUtils.js +60 -1
  514. package/src/nodes/utils/RTTNode.js +14 -4
  515. package/src/nodes/utils/ReflectorNode.js +61 -11
  516. package/src/nodes/utils/Remap.js +48 -0
  517. package/src/nodes/utils/RotateNode.js +1 -1
  518. package/src/nodes/utils/SampleNode.js +12 -2
  519. package/src/nodes/utils/SetNode.js +1 -1
  520. package/src/nodes/utils/SplitNode.js +12 -1
  521. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  522. package/src/nodes/utils/Timer.js +0 -47
  523. package/src/nodes/utils/UVUtils.js +28 -0
  524. package/src/objects/BatchedMesh.js +46 -18
  525. package/src/objects/InstancedMesh.js +30 -3
  526. package/src/objects/LOD.js +1 -1
  527. package/src/objects/Line.js +3 -2
  528. package/src/objects/LineSegments.js +2 -1
  529. package/src/objects/Mesh.js +1 -1
  530. package/src/objects/Points.js +1 -1
  531. package/src/objects/Skeleton.js +12 -2
  532. package/src/objects/SkinnedMesh.js +29 -10
  533. package/src/objects/Sprite.js +4 -3
  534. package/src/renderers/WebGLRenderer.js +372 -179
  535. package/src/renderers/common/Animation.js +16 -4
  536. package/src/renderers/common/Attributes.js +16 -2
  537. package/src/renderers/common/Backend.js +137 -35
  538. package/src/renderers/common/Background.js +28 -14
  539. package/src/renderers/common/BindGroup.js +1 -16
  540. package/src/renderers/common/Binding.js +11 -0
  541. package/src/renderers/common/Bindings.js +83 -12
  542. package/src/renderers/common/BlendMode.js +143 -0
  543. package/src/renderers/common/Buffer.js +40 -0
  544. package/src/renderers/common/BundleGroup.js +1 -1
  545. package/src/renderers/common/CanvasTarget.js +341 -0
  546. package/src/renderers/common/ChainMap.js +30 -6
  547. package/src/renderers/common/ComputePipeline.js +1 -1
  548. package/src/renderers/common/CubeRenderTarget.js +51 -7
  549. package/src/renderers/common/DataMap.js +1 -1
  550. package/src/renderers/common/Geometries.js +55 -3
  551. package/src/renderers/common/Info.js +337 -6
  552. package/src/renderers/common/InspectorBase.js +151 -0
  553. package/src/renderers/common/Lighting.js +5 -21
  554. package/src/renderers/common/Pipelines.js +41 -8
  555. package/src/renderers/common/PostProcessing.js +9 -226
  556. package/src/renderers/common/QuadMesh.js +7 -1
  557. package/src/renderers/common/ReadbackBuffer.js +78 -0
  558. package/src/renderers/common/RenderBundle.js +3 -1
  559. package/src/renderers/common/RenderBundles.js +7 -3
  560. package/src/renderers/common/RenderContext.js +18 -2
  561. package/src/renderers/common/RenderContexts.js +33 -49
  562. package/src/renderers/common/RenderList.js +7 -3
  563. package/src/renderers/common/RenderLists.js +2 -1
  564. package/src/renderers/common/RenderObject.js +32 -6
  565. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  566. package/src/renderers/common/RenderObjects.js +22 -6
  567. package/src/renderers/common/RenderPipeline.js +232 -17
  568. package/src/renderers/common/Renderer.js +927 -335
  569. package/src/renderers/common/RendererUtils.js +9 -0
  570. package/src/renderers/common/SampledTexture.js +9 -1
  571. package/src/renderers/common/Sampler.js +52 -14
  572. package/src/renderers/common/StorageBuffer.js +13 -1
  573. package/src/renderers/common/StorageTexture.js +9 -1
  574. package/src/renderers/common/Textures.js +208 -47
  575. package/src/renderers/common/TimestampQueryPool.js +70 -6
  576. package/src/renderers/common/Uniform.js +8 -0
  577. package/src/renderers/common/UniformsGroup.js +64 -2
  578. package/src/renderers/common/XRManager.js +79 -51
  579. package/src/renderers/common/extras/PMREMGenerator.js +176 -79
  580. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  581. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  582. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
  583. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  584. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  585. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  586. package/src/renderers/shaders/DFGLUTData.js +49 -0
  587. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  588. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  589. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  590. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  591. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  592. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  593. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
  594. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  595. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  596. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  597. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  598. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  599. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  600. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  601. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  602. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
  603. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  604. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  605. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  606. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  607. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  608. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  609. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  610. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
  611. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  612. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  613. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  614. package/src/renderers/shaders/ShaderChunk.js +5 -3
  615. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  616. package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
  617. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  618. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  619. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  620. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  621. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  622. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  623. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  624. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  625. package/src/renderers/shaders/ShaderLib.js +7 -6
  626. package/src/renderers/shaders/UniformsLib.js +8 -5
  627. package/src/renderers/shaders/UniformsUtils.js +52 -9
  628. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  629. package/src/renderers/webgl/WebGLBackground.js +15 -15
  630. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  631. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  632. package/src/renderers/webgl/WebGLCapabilities.js +11 -5
  633. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  634. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  635. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  636. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  637. package/src/renderers/webgl/WebGLInfo.js +3 -1
  638. package/src/renderers/webgl/WebGLLights.js +18 -1
  639. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  640. package/src/renderers/webgl/WebGLObjects.js +3 -1
  641. package/src/renderers/webgl/WebGLOutput.js +270 -0
  642. package/src/renderers/webgl/WebGLProgram.js +63 -122
  643. package/src/renderers/webgl/WebGLPrograms.js +65 -52
  644. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  645. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  646. package/src/renderers/webgl/WebGLShadowMap.js +191 -26
  647. package/src/renderers/webgl/WebGLState.js +79 -40
  648. package/src/renderers/webgl/WebGLTextures.js +234 -68
  649. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  650. package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
  651. package/src/renderers/webgl/WebGLUtils.js +8 -3
  652. package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
  653. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  654. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
  655. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  656. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  657. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  658. package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
  659. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
  660. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
  661. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
  662. package/src/renderers/webgpu/WebGPUBackend.js +403 -253
  663. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  664. package/src/renderers/webgpu/WebGPURenderer.js +5 -3
  665. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
  666. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
  667. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
  668. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  669. package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
  670. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
  671. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
  672. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
  673. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
  674. package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
  675. package/src/renderers/webxr/WebXRController.js +12 -0
  676. package/src/renderers/webxr/WebXRManager.js +45 -29
  677. package/src/textures/CubeDepthTexture.js +76 -0
  678. package/src/textures/ExternalTexture.js +15 -4
  679. package/src/textures/HTMLTexture.js +74 -0
  680. package/src/textures/Source.js +5 -4
  681. package/src/textures/Texture.js +19 -7
  682. package/src/textures/VideoTexture.js +2 -3
  683. package/src/utils.js +344 -3
  684. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  685. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  686. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  687. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  688. package/src/nodes/accessors/SceneNode.js +0 -144
  689. package/src/nodes/code/ScriptableNode.js +0 -726
  690. package/src/nodes/code/ScriptableValueNode.js +0 -253
  691. package/src/nodes/display/PosterizeNode.js +0 -65
  692. package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
  693. package/src/nodes/utils/RemapNode.js +0 -125
  694. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  695. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  696. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -7,8 +7,9 @@ import { buffer } from './BufferNode.js';
7
7
  import { nodeObject } from '../tsl/TSLBase.js';
8
8
  import { uniformArray } from './UniformArrayNode.js';
9
9
  import ArrayElementNode from '../utils/ArrayElementNode.js';
10
+ import { warn } from '../../utils.js';
10
11
 
11
- // TODO: Avoid duplicated code and ues only ReferenceBaseNode or ReferenceNode
12
+ // TODO: Avoid duplicated code and use only ReferenceBaseNode or ReferenceNode
12
13
 
13
14
  /**
14
15
  * This class is only relevant if the referenced property is array-like.
@@ -61,7 +62,7 @@ class ReferenceElementNode extends ArrayElementNode {
61
62
  *
62
63
  * @return {string} The node type.
63
64
  */
64
- getNodeType() {
65
+ generateNodeType() {
65
66
 
66
67
  return this.referenceNode.uniformType;
67
68
 
@@ -70,8 +71,8 @@ class ReferenceElementNode extends ArrayElementNode {
70
71
  generate( builder ) {
71
72
 
72
73
  const snippet = super.generate( builder );
73
- const arrayType = this.referenceNode.getNodeType();
74
- const elementType = this.getNodeType();
74
+ const arrayType = this.referenceNode.getNodeType( builder );
75
+ const elementType = this.getNodeType( builder );
75
76
 
76
77
  return builder.format( snippet, arrayType, elementType );
77
78
 
@@ -197,7 +198,7 @@ class ReferenceNode extends Node {
197
198
  */
198
199
  element( indexNode ) {
199
200
 
200
- return nodeObject( new ReferenceElementNode( this, nodeObject( indexNode ) ) );
201
+ return new ReferenceElementNode( this, nodeObject( indexNode ) );
201
202
 
202
203
  }
203
204
 
@@ -238,7 +239,7 @@ class ReferenceNode extends Node {
238
239
  */
239
240
  label( name ) {
240
241
 
241
- console.warn( 'THREE.TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
242
+ warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
242
243
 
243
244
  return this.setName( name );
244
245
 
@@ -284,7 +285,7 @@ class ReferenceNode extends Node {
284
285
 
285
286
  if ( this.name !== null ) node.setName( this.name );
286
287
 
287
- this.node = node.getSelf();
288
+ this.node = node;
288
289
 
289
290
  }
290
291
 
@@ -295,7 +296,7 @@ class ReferenceNode extends Node {
295
296
  * @param {NodeBuilder} builder - The current node builder.
296
297
  * @return {string} The node type.
297
298
  */
298
- getNodeType( builder ) {
299
+ generateNodeType( builder ) {
299
300
 
300
301
  if ( this.node === null ) {
301
302
 
@@ -406,7 +407,7 @@ export default ReferenceNode;
406
407
  * @param {?Object} [object] - The object the property belongs to.
407
408
  * @returns {ReferenceNode}
408
409
  */
409
- export const reference = ( name, type, object ) => nodeObject( new ReferenceNode( name, type, object ) );
410
+ export const reference = ( name, type, object ) => new ReferenceNode( name, type, object );
410
411
 
411
412
  /**
412
413
  * TSL function for creating a reference node. Use this function if you want need a reference
@@ -420,4 +421,4 @@ export const reference = ( name, type, object ) => nodeObject( new ReferenceNode
420
421
  * @param {Object} object - An array-like object the property belongs to.
421
422
  * @returns {ReferenceNode}
422
423
  */
423
- export const referenceBuffer = ( name, type, count, object ) => nodeObject( new ReferenceNode( name, type, object, count ) );
424
+ export const referenceBuffer = ( name, type, count, object ) => new ReferenceNode( name, type, object, count );
@@ -1,5 +1,4 @@
1
1
  import ReferenceBaseNode from './ReferenceBaseNode.js';
2
- import { nodeObject } from '../tsl/TSLCore.js';
3
2
  import { renderGroup } from '../core/UniformGroupNode.js';
4
3
 
5
4
  /**
@@ -76,4 +75,4 @@ export default RendererReferenceNode;
76
75
  * the node refers to the renderer of the current state.
77
76
  * @returns {RendererReferenceNode}
78
77
  */
79
- export const rendererReference = ( name, type, renderer = null ) => nodeObject( new RendererReferenceNode( name, type, renderer ) );
78
+ export const rendererReference = ( name, type, renderer = null ) => new RendererReferenceNode( name, type, renderer );
@@ -0,0 +1,47 @@
1
+ import { UVMapping } from '../../constants.js';
2
+ import { Matrix4 } from '../../math/Matrix4.js';
3
+ import { renderGroup } from '../core/UniformGroupNode.js';
4
+ import { uniform } from '../tsl/TSLBase.js';
5
+
6
+ const _m1 = /*@__PURE__*/ new Matrix4();
7
+
8
+ /**
9
+ * TSL object that represents the scene's background blurriness.
10
+ *
11
+ * @tsl
12
+ * @type {Node<float>}
13
+ */
14
+ export const backgroundBlurriness = /*@__PURE__*/ uniform( 0 ).setGroup( renderGroup ).onRenderUpdate( ( { scene } ) => scene.backgroundBlurriness );
15
+
16
+ /**
17
+ * TSL object that represents the scene's background intensity.
18
+ *
19
+ * @tsl
20
+ * @type {Node<float>}
21
+ */
22
+ export const backgroundIntensity = /*@__PURE__*/ uniform( 1 ).setGroup( renderGroup ).onRenderUpdate( ( { scene } ) => scene.backgroundIntensity );
23
+
24
+ /**
25
+ * TSL object that represents the scene's background rotation.
26
+ *
27
+ * @tsl
28
+ * @type {Node<mat4>}
29
+ */
30
+ export const backgroundRotation = /*@__PURE__*/ uniform( new Matrix4() ).setGroup( renderGroup ).onRenderUpdate( ( { scene } ) => {
31
+
32
+ const background = scene.background;
33
+
34
+ if ( background !== null && background.isTexture && background.mapping !== UVMapping ) {
35
+
36
+ // note: since the matrix is orthonormal, we can use the more-efficient transpose() in lieu of invert()
37
+ _m1.makeRotationFromEuler( scene.backgroundRotation ).transpose();
38
+
39
+ } else {
40
+
41
+ _m1.identity();
42
+
43
+ }
44
+
45
+ return _m1;
46
+
47
+ } );
@@ -9,7 +9,6 @@ import { positionLocal, positionPrevious } from './Position.js';
9
9
  import { tangentLocal } from './Tangent.js';
10
10
  import { uniform } from '../core/UniformNode.js';
11
11
  import { buffer } from './BufferNode.js';
12
- import { getDataFromObject } from '../core/NodeUtils.js';
13
12
  import { storage } from './StorageBufferNode.js';
14
13
  import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js';
15
14
  import { instanceIndex } from '../core/IndexNode.js';
@@ -147,13 +146,14 @@ class SkinningNode extends Node {
147
146
  }
148
147
 
149
148
  /**
150
- * Transforms the given vertex normal via skinning.
149
+ * Transforms the given vertex normal and tangent via skinning.
151
150
  *
152
151
  * @param {Node} [boneMatrices=this.boneMatricesNode] - The bone matrices
153
152
  * @param {Node<vec3>} [normal=normalLocal] - The vertex normal in local space.
154
- * @return {Node<vec3>} The transformed vertex normal.
153
+ * @param {Node<vec3>} [tangent=tangentLocal] - The vertex tangent in local space.
154
+ * @return {{skinNormal: Node<vec3>, skinTangent:Node<vec3>}} The transformed vertex normal and tangent.
155
155
  */
156
- getSkinnedNormal( boneMatrices = this.boneMatricesNode, normal = normalLocal ) {
156
+ getSkinnedNormalAndTangent( boneMatrices = this.boneMatricesNode, normal = normalLocal, tangent = tangentLocal ) {
157
157
 
158
158
  const { skinIndexNode, skinWeightNode, bindMatrixNode, bindMatrixInverseNode } = this;
159
159
 
@@ -162,7 +162,7 @@ class SkinningNode extends Node {
162
162
  const boneMatZ = boneMatrices.element( skinIndexNode.z );
163
163
  const boneMatW = boneMatrices.element( skinIndexNode.w );
164
164
 
165
- // NORMAL
165
+ // NORMAL and TANGENT
166
166
 
167
167
  let skinMatrix = add(
168
168
  skinWeightNode.x.mul( boneMatX ),
@@ -173,7 +173,10 @@ class SkinningNode extends Node {
173
173
 
174
174
  skinMatrix = bindMatrixInverseNode.mul( skinMatrix ).mul( bindMatrixNode );
175
175
 
176
- return skinMatrix.transformDirection( normal ).xyz;
176
+ const skinNormal = skinMatrix.transformDirection( normal ).xyz;
177
+ const skinTangent = skinMatrix.transformDirection( tangent ).xyz;
178
+
179
+ return { skinNormal, skinTangent };
177
180
 
178
181
  }
179
182
 
@@ -199,21 +202,6 @@ class SkinningNode extends Node {
199
202
 
200
203
  }
201
204
 
202
- /**
203
- * Returns `true` if bone matrices from the previous frame are required. Relevant
204
- * when computing motion vectors with {@link VelocityNode}.
205
- *
206
- * @param {NodeBuilder} builder - The current node builder.
207
- * @return {boolean} Whether bone matrices from the previous frame are required or not.
208
- */
209
- needsPreviousBoneMatrices( builder ) {
210
-
211
- const mrt = builder.renderer.getMRT();
212
-
213
- return ( mrt && mrt.has( 'velocity' ) ) || getDataFromObject( builder.object ).useVelocity === true;
214
-
215
- }
216
-
217
205
  /**
218
206
  * Setups the skinning node by assigning the transformed vertex data to predefined node variables.
219
207
  *
@@ -222,7 +210,7 @@ class SkinningNode extends Node {
222
210
  */
223
211
  setup( builder ) {
224
212
 
225
- if ( this.needsPreviousBoneMatrices( builder ) ) {
213
+ if ( builder.needsPreviousData() ) {
226
214
 
227
215
  positionPrevious.assign( this.getPreviousSkinnedPosition( builder ) );
228
216
 
@@ -236,13 +224,13 @@ class SkinningNode extends Node {
236
224
 
237
225
  if ( builder.hasGeometryAttribute( 'normal' ) ) {
238
226
 
239
- const skinNormal = this.getSkinnedNormal();
227
+ const { skinNormal, skinTangent } = this.getSkinnedNormalAndTangent();
240
228
 
241
229
  normalLocal.assign( skinNormal );
242
230
 
243
231
  if ( builder.hasGeometryAttribute( 'tangent' ) ) {
244
232
 
245
- tangentLocal.assign( skinNormal );
233
+ tangentLocal.assign( skinTangent );
246
234
 
247
235
  }
248
236
 
@@ -282,7 +270,20 @@ class SkinningNode extends Node {
282
270
 
283
271
  _frameId.set( skeleton, frame.frameId );
284
272
 
285
- if ( this.previousBoneMatricesNode !== null ) skeleton.previousBoneMatrices.set( skeleton.boneMatrices );
273
+ if ( this.previousBoneMatricesNode !== null ) {
274
+
275
+ if ( skeleton.previousBoneMatrices === null ) {
276
+
277
+ // cloned skeletons miss "previousBoneMatrices" in their first updated
278
+
279
+ skeleton.previousBoneMatrices = new Float32Array( skeleton.boneMatrices );
280
+
281
+ }
282
+
283
+ skeleton.previousBoneMatrices.set( skeleton.boneMatrices );
284
+
285
+
286
+ }
286
287
 
287
288
  skeleton.update();
288
289
 
@@ -300,7 +301,7 @@ export default SkinningNode;
300
301
  * @param {SkinnedMesh} skinnedMesh - The skinned mesh.
301
302
  * @returns {SkinningNode}
302
303
  */
303
- export const skinning = ( skinnedMesh ) => nodeObject( new SkinningNode( skinnedMesh ) );
304
+ export const skinning = ( skinnedMesh ) => new SkinningNode( skinnedMesh );
304
305
 
305
306
  /**
306
307
  * TSL function for computing skinning.
@@ -1,6 +1,6 @@
1
1
  import BufferNode from './BufferNode.js';
2
2
  import { bufferAttribute } from './BufferAttributeNode.js';
3
- import { nodeObject, varying } from '../tsl/TSLBase.js';
3
+ import { varying } from '../tsl/TSLBase.js';
4
4
  import { storageElement } from '../utils/StorageArrayElementNode.js';
5
5
  import { NodeAccess } from '../core/constants.js';
6
6
  import { getTypeFromLength } from '../core/NodeUtils.js';
@@ -125,6 +125,7 @@ class StorageBufferNode extends BufferNode {
125
125
  /**
126
126
  * A reference to the internal buffer attribute node.
127
127
  *
128
+ * @private
128
129
  * @type {?BufferAttributeNode}
129
130
  * @default null
130
131
  */
@@ -133,6 +134,7 @@ class StorageBufferNode extends BufferNode {
133
134
  /**
134
135
  * A reference to the internal varying node.
135
136
  *
137
+ * @private
136
138
  * @type {?VaryingNode}
137
139
  * @default null
138
140
  */
@@ -166,6 +168,8 @@ class StorageBufferNode extends BufferNode {
166
168
  */
167
169
  getHash( builder ) {
168
170
 
171
+ let id;
172
+
169
173
  if ( this.bufferCount === 0 ) {
170
174
 
171
175
  let bufferData = builder.globalCache.getData( this.value );
@@ -180,11 +184,15 @@ class StorageBufferNode extends BufferNode {
180
184
 
181
185
  }
182
186
 
183
- return bufferData.node.uuid;
187
+ id = bufferData.node.id;
188
+
189
+ } else {
190
+
191
+ id = this.id;
184
192
 
185
193
  }
186
194
 
187
- return this.uuid;
195
+ return String( id );
188
196
 
189
197
  }
190
198
 
@@ -315,7 +323,7 @@ class StorageBufferNode extends BufferNode {
315
323
  * @param {NodeBuilder} builder - The current node builder.
316
324
  * @return {string} The node type.
317
325
  */
318
- getNodeType( builder ) {
326
+ generateNodeType( builder ) {
319
327
 
320
328
  if ( this.structTypeNode !== null ) {
321
329
 
@@ -325,7 +333,7 @@ class StorageBufferNode extends BufferNode {
325
333
 
326
334
  if ( builder.isAvailable( 'storageBuffer' ) || builder.isAvailable( 'indirectStorageBuffer' ) ) {
327
335
 
328
- return super.getNodeType( builder );
336
+ return super.generateNodeType( builder );
329
337
 
330
338
  }
331
339
 
@@ -394,22 +402,4 @@ export default StorageBufferNode;
394
402
  * @param {number} [count=0] - The buffer count.
395
403
  * @returns {StorageBufferNode}
396
404
  */
397
- export const storage = ( value, type = null, count = 0 ) => nodeObject( new StorageBufferNode( value, type, count ) );
398
-
399
- /**
400
- * @tsl
401
- * @function
402
- * @deprecated since r171. Use `storage().setPBO( true )` instead.
403
- *
404
- * @param {StorageBufferAttribute|StorageInstancedBufferAttribute|BufferAttribute} value - The buffer data.
405
- * @param {?string} type - The buffer type (e.g. `'vec3'`).
406
- * @param {number} count - The buffer count.
407
- * @returns {StorageBufferNode}
408
- */
409
- export const storageObject = ( value, type, count ) => { // @deprecated, r171
410
-
411
- console.warn( 'THREE.TSL: "storageObject()" is deprecated. Use "storage().setPBO( true )" instead.' );
412
-
413
- return storage( value, type, count ).setPBO( true );
414
-
415
- };
405
+ export const storage = ( value, type = null, count = 0 ) => new StorageBufferNode( value, type, count );
@@ -60,6 +60,14 @@ class StorageTextureNode extends TextureNode {
60
60
  */
61
61
  this.storeNode = storeNode;
62
62
 
63
+ /**
64
+ * The mip level to write to for storage textures.
65
+ *
66
+ * @type {number}
67
+ * @default 0
68
+ */
69
+ this.mipLevel = 0;
70
+
63
71
  /**
64
72
  * This flag can be used for type testing.
65
73
  *
@@ -115,6 +123,19 @@ class StorageTextureNode extends TextureNode {
115
123
 
116
124
  }
117
125
 
126
+ /**
127
+ * Sets the mip level to write to.
128
+ *
129
+ * @param {number} level - The mip level.
130
+ * @return {StorageTextureNode} A reference to this node.
131
+ */
132
+ setMipLevel( level ) {
133
+
134
+ this.mipLevel = level;
135
+ return this;
136
+
137
+ }
138
+
118
139
  /**
119
140
  * Generates the code snippet of the storage node. If no `storeNode`
120
141
  * is defined, the texture node is generated as normal texture.
@@ -125,19 +146,36 @@ class StorageTextureNode extends TextureNode {
125
146
  */
126
147
  generate( builder, output ) {
127
148
 
128
- let snippet;
129
-
130
149
  if ( this.storeNode !== null ) {
131
150
 
132
- snippet = this.generateStore( builder );
151
+ this.generateStore( builder );
152
+ return '';
153
+
154
+ }
133
155
 
134
- } else {
156
+ return super.generate( builder, output );
135
157
 
136
- snippet = super.generate( builder, output );
158
+ }
137
159
 
138
- }
160
+ /**
161
+ * Generates the snippet for the storage texture.
162
+ *
163
+ * @param {NodeBuilder} builder - The current node builder.
164
+ * @param {string} textureProperty - The texture property.
165
+ * @param {string} uvSnippet - The uv snippet.
166
+ * @param {?string} levelSnippet - The level snippet.
167
+ * @param {?string} biasSnippet - The bias snippet.
168
+ * @param {?string} depthSnippet - The depth snippet.
169
+ * @param {?string} compareSnippet - The compare snippet.
170
+ * @param {?Array<string>} gradSnippet - The grad snippet.
171
+ * @param {?string} offsetSnippet - The offset snippet.
172
+ * @return {string} The generated code snippet.
173
+ */
174
+ generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, offsetSnippet ) {
139
175
 
140
- return snippet;
176
+ const texture = this.value;
177
+
178
+ return builder.generateStorageTextureLoad( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet );
141
179
 
142
180
  }
143
181
 
@@ -190,7 +228,7 @@ class StorageTextureNode extends TextureNode {
190
228
  const storeSnippet = storeNode.build( builder, 'vec4' );
191
229
  const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
192
230
 
193
- const snippet = builder.generateTextureStore( builder, textureProperty, uvSnippet, depthSnippet, storeSnippet );
231
+ const snippet = builder.generateTextureStore( this.value, textureProperty, uvSnippet, depthSnippet, storeSnippet );
194
232
 
195
233
  builder.addLineFlowCode( snippet, this );
196
234
 
@@ -200,6 +238,8 @@ class StorageTextureNode extends TextureNode {
200
238
 
201
239
  const newNode = super.clone();
202
240
  newNode.storeNode = this.storeNode;
241
+ newNode.mipLevel = this.mipLevel;
242
+ newNode.access = this.access;
203
243
  return newNode;
204
244
 
205
245
  }
@@ -233,7 +273,20 @@ export const storageTexture = /*@__PURE__*/ nodeProxy( StorageTextureNode ).setP
233
273
  */
234
274
  export const textureStore = ( value, uvNode, storeNode ) => {
235
275
 
236
- const node = storageTexture( value, uvNode, storeNode );
276
+ let node;
277
+
278
+ if ( value.isStorageTextureNode === true ) {
279
+
280
+ // Derive new storage texture node from existing one
281
+ node = value.clone();
282
+ node.uvNode = uvNode;
283
+ node.storeNode = storeNode;
284
+
285
+ } else {
286
+
287
+ node = storageTexture( value, uvNode, storeNode );
288
+
289
+ }
237
290
 
238
291
  if ( storeNode !== null ) node.toStack();
239
292
 
@@ -11,17 +11,7 @@ import { directionToFaceDirection } from '../display/FrontFacingNode.js';
11
11
  * @tsl
12
12
  * @type {Node<vec4>}
13
13
  */
14
- export const tangentGeometry = /*@__PURE__*/ Fn( ( builder ) => {
15
-
16
- if ( builder.geometry.hasAttribute( 'tangent' ) === false ) {
17
-
18
- builder.geometry.computeTangents();
19
-
20
- }
21
-
22
- return attribute( 'tangent', 'vec4' );
23
-
24
- } )();
14
+ export const tangentGeometry = /*@__PURE__*/ attribute( 'tangent', 'vec4' );
25
15
 
26
16
  /**
27
17
  * TSL object that represents the vertex tangent in local space of the current rendered object.
@@ -37,11 +27,11 @@ export const tangentLocal = /*@__PURE__*/ tangentGeometry.xyz.toVar( 'tangentLoc
37
27
  * @tsl
38
28
  * @type {Node<vec3>}
39
29
  */
40
- export const tangentView = /*@__PURE__*/ ( Fn( ( { subBuildFn, geometry, material } ) => {
30
+ export const tangentView = /*@__PURE__*/ ( Fn( ( builder ) => {
41
31
 
42
32
  let node;
43
33
 
44
- if ( subBuildFn === 'VERTEX' || geometry.hasAttribute( 'tangent' ) ) {
34
+ if ( builder.subBuildFn === 'VERTEX' || builder.geometry.hasAttribute( 'tangent' ) ) {
45
35
 
46
36
  node = modelViewMatrix.mul( vec4( tangentLocal, 0 ) ).xyz.toVarying( 'v_tangentView' ).normalize();
47
37
 
@@ -51,7 +41,7 @@ export const tangentView = /*@__PURE__*/ ( Fn( ( { subBuildFn, geometry, materia
51
41
 
52
42
  }
53
43
 
54
- if ( material.flatShading !== true ) {
44
+ if ( builder.isFlatShading() !== true ) {
55
45
 
56
46
  node = directionToFaceDirection( node );
57
47
 
@@ -1,6 +1,5 @@
1
1
  import TextureNode from './TextureNode.js';
2
- import { nodeProxy, vec3, Fn, If, int } from '../tsl/TSLBase.js';
3
- import { textureSize } from './TextureSizeNode.js';
2
+ import { nodeProxy, vec3, Fn, If } from '../tsl/TSLBase.js';
4
3
 
5
4
  const normal = Fn( ( { texture, uv } ) => {
6
5
 
@@ -116,52 +115,38 @@ class Texture3DNode extends TextureNode {
116
115
  setUpdateMatrix( /*value*/ ) { } // Ignore .updateMatrix for 3d TextureNode
117
116
 
118
117
  /**
119
- * Overwrites the default implementation to return the unmodified uv node.
118
+ * Generates the uv code snippet.
120
119
  *
121
120
  * @param {NodeBuilder} builder - The current node builder.
122
- * @param {Node} uvNode - The uv node to setup.
123
- * @return {Node} The unmodified uv node.
121
+ * @param {Node} uvNode - The uv node to generate code for.
122
+ * @return {string} The generated code snippet.
124
123
  */
125
- setupUV( builder, uvNode ) {
126
-
127
- const texture = this.value;
128
-
129
- if ( builder.isFlipY() && ( texture.isRenderTargetTexture === true || texture.isFramebufferTexture === true ) ) {
130
-
131
- if ( this.sampler ) {
132
-
133
- uvNode = uvNode.flipY();
134
-
135
- } else {
136
-
137
- uvNode = uvNode.setY( int( textureSize( this, this.levelNode ).y ).sub( uvNode.y ).sub( 1 ) );
138
-
139
- }
140
-
141
- }
124
+ generateUV( builder, uvNode ) {
142
125
 
143
- return uvNode;
126
+ return uvNode.build( builder, this.sampler === true ? 'vec3' : 'ivec3' );
144
127
 
145
128
  }
146
129
 
147
130
  /**
148
- * Generates the uv code snippet.
131
+ * Generates the offset code snippet.
149
132
  *
150
133
  * @param {NodeBuilder} builder - The current node builder.
151
- * @param {Node} uvNode - The uv node to generate code for.
134
+ * @param {Node} offsetNode - The offset node to generate code for.
152
135
  * @return {string} The generated code snippet.
153
136
  */
154
- generateUV( builder, uvNode ) {
137
+ generateOffset( builder, offsetNode ) {
155
138
 
156
- return uvNode.build( builder, 'vec3' );
139
+ return offsetNode.build( builder, 'ivec3' );
157
140
 
158
141
  }
159
142
 
160
143
  /**
161
- * TODO.
144
+ * Computes the normal for the given uv. These texture coordiantes represent a
145
+ * position inside the 3D texture. Unlike geometric normals, this normal
146
+ * represents a slope or gradient of scalar data inside the 3D texture.
162
147
  *
163
- * @param {Node<vec3>} uvNode - The uv node .
164
- * @return {Node<vec3>} TODO.
148
+ * @param {Node<vec3>} uvNode - The uv node that defines a position in the 3D texture.
149
+ * @return {Node<vec3>} The normal representing the slope/gradient in the data.
165
150
  */
166
151
  normal( uvNode ) {
167
152
 
@@ -179,8 +164,33 @@ export default Texture3DNode;
179
164
  * @tsl
180
165
  * @function
181
166
  * @param {Data3DTexture} value - The 3D texture.
182
- * @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
167
+ * @param {?Node<vec3>} [uvNode=null] - The uv node.
183
168
  * @param {?Node<int>} [levelNode=null] - The level node.
184
169
  * @returns {Texture3DNode}
185
170
  */
186
171
  export const texture3D = /*@__PURE__*/ nodeProxy( Texture3DNode ).setParameterLength( 1, 3 );
172
+
173
+ /**
174
+ * TSL function for creating a texture node that fetches/loads texels without interpolation.
175
+ *
176
+ * @tsl
177
+ * @function
178
+ * @param {?(Texture|TextureNode)} [value=EmptyTexture] - The texture.
179
+ * @param {?Node<vec3>} [uvNode=null] - The uv node.
180
+ * @param {?Node<int>} [levelNode=null] - The level node.
181
+ * @param {?Node<float>} [biasNode=null] - The bias node.
182
+ * @returns {TextureNode}
183
+ */
184
+ export const texture3DLoad = ( ...params ) => texture3D( ...params ).setSampler( false );
185
+
186
+ /**
187
+ * TSL function for creating a texture node that fetches/loads texels without interpolation.
188
+ *
189
+ * @tsl
190
+ * @function
191
+ * @param {?(Texture|TextureNode)} [value=EmptyTexture] - The texture.
192
+ * @param {?Node<vec3>} [uvNode=null] - The uv node.
193
+ * @param {?Node<int>} [levelNode=null] - The level node.
194
+ * @returns {TextureNode}
195
+ */
196
+ export const texture3DLevel = ( value, uvNode, levelNode ) => texture3D( value, uvNode ).level( levelNode );