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
@@ -2,10 +2,11 @@ import Node from '../core/Node.js';
2
2
  import { varyingProperty } from '../core/PropertyNode.js';
3
3
  import { instancedBufferAttribute, instancedDynamicBufferAttribute } from './BufferAttributeNode.js';
4
4
  import { normalLocal, transformNormal } from './Normal.js';
5
- import { positionLocal } from './Position.js';
5
+ import { positionLocal, positionPrevious } from './Position.js';
6
6
  import { nodeProxy, vec3, mat4 } from '../tsl/TSLBase.js';
7
7
  import { NodeUpdateType } from '../core/constants.js';
8
8
  import { buffer } from '../accessors/BufferNode.js';
9
+ import { storage } from './StorageBufferNode.js';
9
10
  import { instanceIndex } from '../core/IndexNode.js';
10
11
 
11
12
  import { InstancedInterleavedBuffer } from '../../core/InstancedInterleavedBuffer.js';
@@ -32,8 +33,8 @@ class InstanceNode extends Node {
32
33
  * Constructs a new instance node.
33
34
  *
34
35
  * @param {number} count - The number of instances.
35
- * @param {InstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
36
- * @param {?InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
36
+ * @param {InstancedBufferAttribute|StorageInstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
37
+ * @param {?InstancedBufferAttribute|StorageInstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
37
38
  */
38
39
  constructor( count, instanceMatrix, instanceColor = null ) {
39
40
 
@@ -98,6 +99,40 @@ class InstanceNode extends Node {
98
99
  */
99
100
  this.bufferColor = null;
100
101
 
102
+ /**
103
+ * The previous instance matrices. Required for computing motion vectors.
104
+ *
105
+ * @type {?Node}
106
+ * @default null
107
+ */
108
+ this.previousInstanceMatrixNode = null;
109
+
110
+ }
111
+
112
+ /**
113
+ * Tracks whether the matrix data is provided via a storage buffer.
114
+ *
115
+ * @type {boolean}
116
+ */
117
+ get isStorageMatrix() {
118
+
119
+ const { instanceMatrix } = this;
120
+
121
+ return instanceMatrix && instanceMatrix.isStorageInstancedBufferAttribute === true;
122
+
123
+ }
124
+
125
+ /**
126
+ * Tracks whether the color data is provided via a storage buffer.
127
+ *
128
+ * @type {boolean}
129
+ */
130
+ get isStorageColor() {
131
+
132
+ const { instanceColor } = this;
133
+
134
+ return instanceColor && instanceColor.isStorageInstancedBufferAttribute === true;
135
+
101
136
  }
102
137
 
103
138
  /**
@@ -109,51 +144,39 @@ class InstanceNode extends Node {
109
144
  */
110
145
  setup( builder ) {
111
146
 
112
- const { count, instanceMatrix, instanceColor } = this;
113
-
114
147
  let { instanceMatrixNode, instanceColorNode } = this;
115
148
 
116
- if ( instanceMatrixNode === null ) {
117
-
118
- // Both WebGPU and WebGL backends have UBO max limited to 64kb. Matrix count number bigger than 1000 ( 16 * 4 * 1000 = 64kb ) will fallback to attribute.
119
-
120
- if ( count <= 1000 ) {
149
+ // instance matrix
121
150
 
122
- instanceMatrixNode = buffer( instanceMatrix.array, 'mat4', Math.max( count, 1 ) ).element( instanceIndex );
151
+ if ( instanceMatrixNode === null ) {
123
152
 
124
- } else {
153
+ instanceMatrixNode = this._createInstanceMatrixNode( true, builder );
125
154
 
126
- const buffer = new InstancedInterleavedBuffer( instanceMatrix.array, 16, 1 );
155
+ this.instanceMatrixNode = instanceMatrixNode;
127
156
 
128
- this.buffer = buffer;
157
+ }
129
158
 
130
- const bufferFn = instanceMatrix.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute;
159
+ // instance color
131
160
 
132
- const instanceBuffers = [
133
- // F.Signature -> bufferAttribute( array, type, stride, offset )
134
- bufferFn( buffer, 'vec4', 16, 0 ),
135
- bufferFn( buffer, 'vec4', 16, 4 ),
136
- bufferFn( buffer, 'vec4', 16, 8 ),
137
- bufferFn( buffer, 'vec4', 16, 12 )
138
- ];
161
+ const { instanceColor, isStorageColor } = this;
139
162
 
140
- instanceMatrixNode = mat4( ...instanceBuffers );
163
+ if ( instanceColor && instanceColorNode === null ) {
141
164
 
142
- }
165
+ if ( isStorageColor ) {
143
166
 
144
- this.instanceMatrixNode = instanceMatrixNode;
167
+ instanceColorNode = storage( instanceColor, 'vec3', Math.max( instanceColor.count, 1 ) ).element( instanceIndex );
145
168
 
146
- }
169
+ } else {
147
170
 
148
- if ( instanceColor && instanceColorNode === null ) {
171
+ const bufferAttribute = new InstancedBufferAttribute( instanceColor.array, 3 );
149
172
 
150
- const buffer = new InstancedBufferAttribute( instanceColor.array, 3 );
173
+ const bufferFn = instanceColor.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute;
151
174
 
152
- const bufferFn = instanceColor.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute;
175
+ this.bufferColor = bufferAttribute;
153
176
 
154
- this.bufferColor = buffer;
177
+ instanceColorNode = vec3( bufferFn( bufferAttribute, 'vec3', 3, 0 ) );
155
178
 
156
- instanceColorNode = vec3( bufferFn( buffer, 'vec3', 3, 0 ) );
179
+ }
157
180
 
158
181
  this.instanceColorNode = instanceColorNode;
159
182
 
@@ -164,6 +187,12 @@ class InstanceNode extends Node {
164
187
  const instancePosition = instanceMatrixNode.mul( positionLocal ).xyz;
165
188
  positionLocal.assign( instancePosition );
166
189
 
190
+ if ( builder.needsPreviousData() ) {
191
+
192
+ positionPrevious.assign( this.getPreviousInstancedPosition( builder ) );
193
+
194
+ }
195
+
167
196
  // NORMAL
168
197
 
169
198
  if ( builder.hasGeometryAttribute( 'normal' ) ) {
@@ -187,24 +216,120 @@ class InstanceNode extends Node {
187
216
  }
188
217
 
189
218
  /**
190
- * Checks if the internal buffers required an update.
219
+ * Checks if the internal buffers require an update.
191
220
  *
192
221
  * @param {NodeFrame} frame - The current node frame.
193
222
  */
194
- update( /*frame*/ ) {
223
+ update( frame ) {
224
+
225
+ if ( this.buffer !== null && this.isStorageMatrix !== true ) {
226
+
227
+ this.buffer.clearUpdateRanges();
228
+ this.buffer.updateRanges.push( ... this.instanceMatrix.updateRanges );
229
+
230
+ // update version if necessary
231
+
232
+ if ( this.instanceMatrix.version !== this.buffer.version ) {
233
+
234
+ this.buffer.version = this.instanceMatrix.version;
235
+
236
+ }
237
+
238
+ }
239
+
240
+ if ( this.instanceColor && this.bufferColor !== null && this.isStorageColor !== true ) {
241
+
242
+ this.bufferColor.clearUpdateRanges();
243
+ this.bufferColor.updateRanges.push( ... this.instanceColor.updateRanges );
244
+
245
+ if ( this.instanceColor.version !== this.bufferColor.version ) {
246
+
247
+ this.bufferColor.version = this.instanceColor.version;
248
+
249
+ }
250
+
251
+ }
252
+
253
+ if ( this.previousInstanceMatrixNode !== null ) {
254
+
255
+ frame.object.previousInstanceMatrix.array.set( this.instanceMatrix.array );
256
+
257
+ }
258
+
259
+ }
260
+
261
+ /**
262
+ * Computes the transformed/instanced vertex position of the previous frame.
263
+ *
264
+ * @param {NodeBuilder} builder - The current node builder.
265
+ * @return {Node<vec3>} The instanced position from the previous frame.
266
+ */
267
+ getPreviousInstancedPosition( builder ) {
268
+
269
+ const instancedMesh = builder.object;
195
270
 
196
- if ( this.instanceMatrix.usage !== DynamicDrawUsage && this.buffer !== null && this.instanceMatrix.version !== this.buffer.version ) {
271
+ if ( this.previousInstanceMatrixNode === null ) {
197
272
 
198
- this.buffer.version = this.instanceMatrix.version;
273
+ instancedMesh.previousInstanceMatrix = this.instanceMatrix.clone();
274
+
275
+ this.previousInstanceMatrixNode = this._createInstanceMatrixNode( false, builder );
199
276
 
200
277
  }
201
278
 
202
- if ( this.instanceColor && this.instanceColor.usage !== DynamicDrawUsage && this.bufferColor !== null && this.instanceColor.version !== this.bufferColor.version ) {
279
+ return this.previousInstanceMatrixNode.mul( positionPrevious ).xyz;
280
+
281
+ }
282
+
283
+ /**
284
+ * Creates a node representing the instance matrix data.
285
+ *
286
+ * @private
287
+ * @param {boolean} assignBuffer - Whether the created interleaved buffer should be assigned to the `buffer` member or not.
288
+ * @param {NodeBuilder} builder - A reference to the current node builder.
289
+ * @return {Node} The instance matrix node.
290
+ */
291
+ _createInstanceMatrixNode( assignBuffer, builder ) {
292
+
293
+ let instanceMatrixNode;
294
+
295
+ const { instanceMatrix } = this;
296
+ const { count } = instanceMatrix;
297
+
298
+ if ( this.isStorageMatrix ) {
299
+
300
+ instanceMatrixNode = storage( instanceMatrix, 'mat4', Math.max( count, 1 ) ).element( instanceIndex );
301
+
302
+ } else {
303
+
304
+ const uniformBufferSize = count * 16 * 4; // count * 16 components * 4 bytes (float)
305
+
306
+ if ( uniformBufferSize <= builder.getUniformBufferLimit() ) {
307
+
308
+ instanceMatrixNode = buffer( instanceMatrix.array, 'mat4', Math.max( count, 1 ) ).element( instanceIndex );
309
+
310
+ } else {
311
+
312
+ const interleaved = new InstancedInterleavedBuffer( instanceMatrix.array, 16, 1 );
203
313
 
204
- this.bufferColor.version = this.instanceColor.version;
314
+ if ( assignBuffer === true ) this.buffer = interleaved;
315
+
316
+ const bufferFn = instanceMatrix.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute;
317
+
318
+ const instanceBuffers = [
319
+ bufferFn( interleaved, 'vec4', 16, 0 ),
320
+ bufferFn( interleaved, 'vec4', 16, 4 ),
321
+ bufferFn( interleaved, 'vec4', 16, 8 ),
322
+ bufferFn( interleaved, 'vec4', 16, 12 )
323
+ ];
324
+
325
+ instanceMatrixNode = mat4( ...instanceBuffers );
326
+
327
+ }
205
328
 
206
329
  }
207
330
 
331
+ return instanceMatrixNode;
332
+
208
333
  }
209
334
 
210
335
  }
@@ -217,8 +342,8 @@ export default InstanceNode;
217
342
  * @tsl
218
343
  * @function
219
344
  * @param {number} count - The number of instances.
220
- * @param {InstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
221
- * @param {?InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
345
+ * @param {InstancedBufferAttribute|StorageInstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
346
+ * @param {?InstancedBufferAttribute|StorageInstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
222
347
  * @returns {InstanceNode}
223
348
  */
224
349
  export const instance = /*@__PURE__*/ nodeProxy( InstanceNode ).setParameterLength( 2, 3 );
@@ -32,8 +32,18 @@ export function lightShadowMatrix( light ) {
32
32
 
33
33
  return data.shadowMatrix || ( data.shadowMatrix = uniform( 'mat4' ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => {
34
34
 
35
+ // normally, shadow matrices are updated in ShadowNode. However, if the shadow matrix is used outside
36
+ // of shadow rendering (like in ProjectorLightNode), the shadow matrix still requires an update
37
+
35
38
  if ( light.castShadow !== true || frame.renderer.shadowMap.enabled === false ) {
36
39
 
40
+ if ( light.shadow.camera.coordinateSystem !== frame.camera.coordinateSystem ) {
41
+
42
+ light.shadow.camera.coordinateSystem = frame.camera.coordinateSystem;
43
+ light.shadow.camera.updateProjectionMatrix();
44
+
45
+ }
46
+
37
47
  light.shadow.updateMatrices( light );
38
48
 
39
49
  }
@@ -7,6 +7,8 @@ import { uniform } from '../core/UniformNode.js';
7
7
  import { normalMap } from '../display/NormalMapNode.js';
8
8
  import { bumpMap } from '../display/BumpMapNode.js';
9
9
  import { Vector2 } from '../../math/Vector2.js';
10
+ import { RGFormat, RED_GREEN_RGTC2_Format, RG11_EAC_Format, NormalRGPacking } from '../../constants.js';
11
+
10
12
 
11
13
  const _propertyCache = new Map();
12
14
 
@@ -235,6 +237,12 @@ class MaterialNode extends Node {
235
237
  node = normalMap( this.getTexture( 'normal' ), this.getCache( 'normalScale', 'vec2' ) );
236
238
  node.normalMapType = material.normalMapType;
237
239
 
240
+ if ( material.normalMap.format == RGFormat || material.normalMap.format == RED_GREEN_RGTC2_Format || material.normalMap.format == RG11_EAC_Format ) {
241
+
242
+ node.unpackNormalMode = NormalRGPacking;
243
+
244
+ }
245
+
238
246
  } else if ( material.bumpMap ) {
239
247
 
240
248
  node = bumpMap( this.getTexture( 'bump' ).r, this.getFloat( 'bumpScale' ) );
@@ -313,7 +321,7 @@ class MaterialNode extends Node {
313
321
 
314
322
  }
315
323
 
316
- node = node.clamp( 0.07, 1.0 );
324
+ node = node.clamp( 0.0001, 1.0 );
317
325
 
318
326
  } else if ( scope === MaterialNode.ANISOTROPY ) {
319
327
 
@@ -1,8 +1,6 @@
1
- import { Euler } from '../../math/Euler.js';
2
1
  import { Matrix4 } from '../../math/Matrix4.js';
3
2
  import { uniform } from '../core/UniformNode.js';
4
3
 
5
- const _e1 = /*@__PURE__*/ new Euler();
6
4
  const _m1 = /*@__PURE__*/ new Matrix4();
7
5
 
8
6
  /**
@@ -44,9 +42,8 @@ export const materialEnvRotation = /*@__PURE__*/ uniform( new Matrix4() ).onRefe
44
42
 
45
43
  if ( rotation ) {
46
44
 
47
- _e1.copy( rotation );
48
-
49
- _m1.makeRotationFromEuler( _e1 );
45
+ // note: since the matrix is orthonormal, we can use the more-efficient transpose() in lieu of invert()
46
+ _m1.makeRotationFromEuler( rotation ).transpose();
50
47
 
51
48
  } else {
52
49
 
@@ -1,5 +1,4 @@
1
1
  import ReferenceNode from './ReferenceNode.js';
2
- import { nodeObject } from '../tsl/TSLBase.js';
3
2
 
4
3
  /**
5
4
  * This node is a special type of reference node which is intended
@@ -82,4 +81,4 @@ export default MaterialReferenceNode;
82
81
  * When no material is set, the node refers to the material of the current rendered object.
83
82
  * @returns {MaterialReferenceNode}
84
83
  */
85
- export const materialReference = ( name, type, material = null ) => nodeObject( new MaterialReferenceNode( name, type, material ) );
84
+ export const materialReference = ( name, type, material = null ) => new MaterialReferenceNode( name, type, material );
@@ -123,7 +123,7 @@ export const modelWorldMatrixInverse = /*@__PURE__*/ uniform( new Matrix4() ).on
123
123
  */
124
124
  export const modelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
125
125
 
126
- return builder.renderer.overrideNodes.modelViewMatrix || mediumpModelViewMatrix;
126
+ return builder.context.modelViewMatrix || mediumpModelViewMatrix;
127
127
 
128
128
  } ).once() )().toVar( 'modelViewMatrix' );
129
129
 
@@ -4,6 +4,7 @@ import { modelNormalMatrix, modelWorldMatrix } from './ModelNode.js';
4
4
  import { mat3, vec3, Fn } from '../tsl/TSLBase.js';
5
5
  import { positionView } from './Position.js';
6
6
  import { directionToFaceDirection } from '../display/FrontFacingNode.js';
7
+ import { warn } from '../../utils.js';
7
8
 
8
9
  /**
9
10
  * TSL object that represents the normal attribute of the current rendered object in local space.
@@ -23,7 +24,7 @@ export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
23
24
 
24
25
  if ( builder.geometry.hasAttribute( 'normal' ) === false ) {
25
26
 
26
- console.warn( 'THREE.TSL: Vertex attribute "normal" not found on geometry.' );
27
+ warn( 'TSL: Vertex attribute "normal" not found on geometry.' );
27
28
 
28
29
  return vec3( 0, 1, 0 );
29
30
 
@@ -51,7 +52,7 @@ export const normalViewGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
51
52
 
52
53
  let node;
53
54
 
54
- if ( builder.material.flatShading === true ) {
55
+ if ( builder.isFlatShading() ) {
55
56
 
56
57
  node = normalFlat;
57
58
 
@@ -75,7 +76,7 @@ export const normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
75
76
 
76
77
  let normal = normalViewGeometry.transformDirection( cameraViewMatrix );
77
78
 
78
- if ( builder.material.flatShading !== true ) {
79
+ if ( builder.isFlatShading() !== true ) {
79
80
 
80
81
  normal = normal.toVarying( 'v_normalWorldGeometry' );
81
82
 
@@ -91,15 +92,15 @@ export const normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
91
92
  * @tsl
92
93
  * @type {Node<vec3>}
93
94
  */
94
- export const normalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, material, context } ) => {
95
+ export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
95
96
 
96
97
  let node;
97
98
 
98
- if ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {
99
+ if ( builder.subBuildFn === 'NORMAL' || builder.subBuildFn === 'VERTEX' ) {
99
100
 
100
101
  node = normalViewGeometry;
101
102
 
102
- if ( material.flatShading !== true ) {
103
+ if ( builder.isFlatShading() !== true ) {
103
104
 
104
105
  node = directionToFaceDirection( node );
105
106
 
@@ -107,9 +108,9 @@ export const normalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, material, context
107
108
 
108
109
  } else {
109
110
 
110
- // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
111
+ // Use custom context to avoid side effects from nodes overwriting getUV, getTextureLevel in the context (e.g. EnvironmentNode)
111
112
 
112
- node = context.setupNormal().context( { getUV: null } );
113
+ node = builder.context.setupNormal().context( { getUV: null, getTextureLevel: null } );
113
114
 
114
115
  }
115
116
 
@@ -141,9 +142,9 @@ export const clearcoatNormalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, context }
141
142
 
142
143
  } else {
143
144
 
144
- // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
145
+ // Use custom context to avoid side effects from nodes overwriting getUV, getTextureLevel in the context (e.g. EnvironmentNode)
145
146
 
146
- node = context.setupClearcoatNormal().context( { getUV: null } );
147
+ node = context.setupClearcoatNormal().context( { getUV: null, getTextureLevel: null } );
147
148
 
148
149
  }
149
150
 
@@ -181,9 +182,9 @@ export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorld
181
182
  */
182
183
  export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) => {
183
184
 
184
- const modelNormalViewMatrix = builder.renderer.overrideNodes.modelNormalViewMatrix;
185
+ const modelNormalViewMatrix = builder.context.modelNormalViewMatrix;
185
186
 
186
- if ( modelNormalViewMatrix !== null ) {
187
+ if ( modelNormalViewMatrix ) {
187
188
 
188
189
  return modelNormalViewMatrix.transformDirection( normal );
189
190
 
@@ -208,7 +209,7 @@ export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) =
208
209
  */
209
210
  export const transformedNormalView = ( Fn( () => { // @deprecated, r177
210
211
 
211
- console.warn( 'THREE.TSL: "transformedNormalView" is deprecated. Use "normalView" instead.' );
212
+ warn( 'TSL: "transformedNormalView" is deprecated. Use "normalView" instead.' );
212
213
  return normalView;
213
214
 
214
215
  } ).once( [ 'NORMAL', 'VERTEX' ] ) )();
@@ -222,7 +223,7 @@ export const transformedNormalView = ( Fn( () => { // @deprecated, r177
222
223
  */
223
224
  export const transformedNormalWorld = ( Fn( () => { // @deprecated, r177
224
225
 
225
- console.warn( 'THREE.TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.' );
226
+ warn( 'TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.' );
226
227
  return normalWorld;
227
228
 
228
229
  } ).once( [ 'NORMAL', 'VERTEX' ] ) )();
@@ -236,7 +237,7 @@ export const transformedNormalWorld = ( Fn( () => { // @deprecated, r177
236
237
  */
237
238
  export const transformedClearcoatNormalView = ( Fn( () => { // @deprecated, r177
238
239
 
239
- console.warn( 'THREE.TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.' );
240
+ warn( 'TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.' );
240
241
  return clearcoatNormalView;
241
242
 
242
243
  } ).once( [ 'NORMAL', 'VERTEX' ] ) )();
@@ -73,9 +73,9 @@ class Object3DNode extends Node {
73
73
  /**
74
74
  * Overwritten since the node type is inferred from the scope.
75
75
  *
76
- * @return {string} The node type.
76
+ * @return {('mat4'|'vec3'|'float')} The node type.
77
77
  */
78
- getNodeType() {
78
+ generateNodeType() {
79
79
 
80
80
  const scope = this.scope;
81
81
 
@@ -1,6 +1,28 @@
1
1
  import { attribute } from '../core/AttributeNode.js';
2
- import { Fn } from '../tsl/TSLCore.js';
2
+ import { Fn, vec3, vec4 } from '../tsl/TSLCore.js';
3
3
  import { modelWorldMatrix } from './ModelNode.js';
4
+ import { cameraProjectionMatrixInverse } from './Camera.js';
5
+ import { warnOnce } from '../../utils.js';
6
+
7
+ /**
8
+ * TSL object that represents the clip space position of the current rendered object.
9
+ *
10
+ * @tsl
11
+ * @type {VaryingNode<vec4>}
12
+ */
13
+ export const clipSpace = /*@__PURE__*/ ( Fn( ( builder ) => {
14
+
15
+ if ( builder.shaderStage !== 'fragment' ) {
16
+
17
+ warnOnce( 'TSL: `clipSpace` is only available in fragment stage.' );
18
+
19
+ return vec4();
20
+
21
+ }
22
+
23
+ return builder.context.clipSpace.toVarying( 'v_clipSpace' );
24
+
25
+ } ).once() )();
4
26
 
5
27
  /**
6
28
  * TSL object that represents the position attribute of the current rendered object.
@@ -61,9 +83,19 @@ export const positionWorldDirection = /*@__PURE__*/ ( Fn( () => {
61
83
  */
62
84
  export const positionView = /*@__PURE__*/ ( Fn( ( builder ) => {
63
85
 
86
+ if ( builder.shaderStage === 'fragment' && builder.material.vertexNode ) {
87
+
88
+ // reconstruct view position from clip space
89
+
90
+ const viewPos = cameraProjectionMatrixInverse.mul( clipSpace );
91
+
92
+ return viewPos.xyz.div( viewPos.w ).toVar( 'positionView' );
93
+
94
+ }
95
+
64
96
  return builder.context.setupPositionView().toVarying( 'v_positionView' );
65
97
 
66
- }, 'vec3' ).once( [ 'POSITION' ] ) )();
98
+ }, 'vec3' ).once( [ 'POSITION', 'VERTEX' ] ) )();
67
99
 
68
100
  /**
69
101
  * TSL object that represents the position view direction of the current rendered object.
@@ -71,4 +103,20 @@ export const positionView = /*@__PURE__*/ ( Fn( ( builder ) => {
71
103
  * @tsl
72
104
  * @type {VaryingNode<vec3>}
73
105
  */
74
- export const positionViewDirection = /*@__PURE__*/ positionView.negate().toVarying( 'v_positionViewDirection' ).normalize().toVar( 'positionViewDirection' );
106
+ export const positionViewDirection = /*@__PURE__*/ ( Fn( ( builder ) => {
107
+
108
+ let output;
109
+
110
+ if ( builder.camera.isOrthographicCamera ) {
111
+
112
+ output = vec3( 0, 0, 1 );
113
+
114
+ } else {
115
+
116
+ output = positionView.negate().toVarying( 'v_positionViewDirection' ).normalize();
117
+
118
+ }
119
+
120
+ return output.toVar( 'positionViewDirection' );
121
+
122
+ }, 'vec3' ).once( [ 'POSITION' ] ) )();
@@ -4,7 +4,7 @@ import { uniform } from '../core/UniformNode.js';
4
4
  import { nodeObject } from '../tsl/TSLCore.js';
5
5
  import ArrayElementNode from '../utils/ArrayElementNode.js';
6
6
 
7
- // TODO: Avoid duplicated code and ues only ReferenceBaseNode or ReferenceNode
7
+ // TODO: Avoid duplicated code and use only ReferenceBaseNode or ReferenceNode
8
8
 
9
9
  /**
10
10
  * This class is only relevant if the referenced property is array-like.
@@ -57,7 +57,7 @@ class ReferenceElementNode extends ArrayElementNode {
57
57
  *
58
58
  * @return {string} The node type.
59
59
  */
60
- getNodeType() {
60
+ generateNodeType() {
61
61
 
62
62
  return this.referenceNode.uniformType;
63
63
 
@@ -199,7 +199,7 @@ class ReferenceBaseNode extends Node {
199
199
  */
200
200
  element( indexNode ) {
201
201
 
202
- return nodeObject( new ReferenceElementNode( this, nodeObject( indexNode ) ) );
202
+ return new ReferenceElementNode( this, nodeObject( indexNode ) );
203
203
 
204
204
  }
205
205
 
@@ -211,7 +211,7 @@ class ReferenceBaseNode extends Node {
211
211
  */
212
212
  setNodeType( uniformType ) {
213
213
 
214
- const node = uniform( null, uniformType ).getSelf();
214
+ const node = uniform( null, uniformType );
215
215
 
216
216
  if ( this.group !== null ) {
217
217
 
@@ -230,7 +230,7 @@ class ReferenceBaseNode extends Node {
230
230
  * @param {NodeBuilder} builder - The current node builder.
231
231
  * @return {string} The node type.
232
232
  */
233
- getNodeType( builder ) {
233
+ generateNodeType( builder ) {
234
234
 
235
235
  if ( this.node === null ) {
236
236
 
@@ -340,7 +340,7 @@ export default ReferenceBaseNode;
340
340
  * @param {Object} object - The object the property belongs to.
341
341
  * @returns {ReferenceBaseNode}
342
342
  */
343
- export const reference = ( name, type, object ) => nodeObject( new ReferenceBaseNode( name, type, object ) );
343
+ export const reference = ( name, type, object ) => new ReferenceBaseNode( name, type, object );
344
344
 
345
345
  /**
346
346
  * TSL function for creating a reference base node. Use this function if you want need a reference
@@ -354,4 +354,4 @@ export const reference = ( name, type, object ) => nodeObject( new ReferenceBase
354
354
  * @param {Object} [object] - An array-like object the property belongs to.
355
355
  * @returns {ReferenceBaseNode}
356
356
  */
357
- export const referenceBuffer = ( name, type, count, object ) => nodeObject( new ReferenceBaseNode( name, type, object, count ) );
357
+ export const referenceBuffer = ( name, type, count, object ) => new ReferenceBaseNode( name, type, object, count );