super-three 0.181.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 (539) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +13152 -11354
  4. package/build/three.core.js +12319 -11539
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1808 -781
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +27 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +10523 -6263
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +10484 -6262
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +11 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +7 -4
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +58 -54
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +34 -2
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  26. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  27. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  28. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  29. package/examples/jsm/exporters/EXRExporter.js +1 -1
  30. package/examples/jsm/exporters/GLTFExporter.js +152 -9
  31. package/examples/jsm/exporters/USDZExporter.js +22 -3
  32. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  33. package/examples/jsm/geometries/TextGeometry.js +18 -0
  34. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  36. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  37. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  38. package/examples/jsm/helpers/ViewHelper.js +67 -8
  39. package/examples/jsm/inspector/Extension.js +13 -0
  40. package/examples/jsm/inspector/Inspector.js +203 -88
  41. package/examples/jsm/inspector/RendererInspector.js +14 -4
  42. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  43. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  44. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  45. package/examples/jsm/inspector/tabs/Console.js +41 -7
  46. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  47. package/examples/jsm/inspector/tabs/Parameters.js +51 -3
  48. package/examples/jsm/inspector/tabs/Performance.js +4 -4
  49. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  50. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  51. package/examples/jsm/inspector/tabs/Viewer.js +107 -5
  52. package/examples/jsm/inspector/ui/Graph.js +2 -2
  53. package/examples/jsm/inspector/ui/List.js +1 -1
  54. package/examples/jsm/inspector/ui/Profiler.js +1936 -34
  55. package/examples/jsm/inspector/ui/Style.js +1044 -31
  56. package/examples/jsm/inspector/ui/Tab.js +222 -3
  57. package/examples/jsm/inspector/ui/Values.js +55 -2
  58. package/examples/jsm/inspector/ui/utils.js +13 -0
  59. package/examples/jsm/interaction/InteractionManager.js +226 -0
  60. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  61. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  62. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  63. package/examples/jsm/lines/LineMaterial.js +7 -1
  64. package/examples/jsm/loaders/3DMLoader.js +5 -4
  65. package/examples/jsm/loaders/3MFLoader.js +2 -2
  66. package/examples/jsm/loaders/AMFLoader.js +2 -2
  67. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  68. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  69. package/examples/jsm/loaders/EXRLoader.js +687 -48
  70. package/examples/jsm/loaders/FBXLoader.js +235 -37
  71. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  72. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  73. package/examples/jsm/loaders/HDRLoader.js +1 -2
  74. package/examples/jsm/loaders/KMZLoader.js +5 -5
  75. package/examples/jsm/loaders/KTX2Loader.js +27 -5
  76. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  77. package/examples/jsm/loaders/LWOLoader.js +7 -39
  78. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  79. package/examples/jsm/loaders/PCDLoader.js +4 -2
  80. package/examples/jsm/loaders/SVGLoader.js +2 -2
  81. package/examples/jsm/loaders/TDSLoader.js +0 -2
  82. package/examples/jsm/loaders/TGALoader.js +0 -2
  83. package/examples/jsm/loaders/USDLoader.js +100 -40
  84. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  85. package/examples/jsm/loaders/VOXLoader.js +660 -117
  86. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  87. package/examples/jsm/loaders/VTKLoader.js +42 -25
  88. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  89. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  90. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  91. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  92. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  93. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  94. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  95. package/examples/jsm/math/Octree.js +131 -1
  96. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  97. package/examples/jsm/misc/RollerCoaster.js +42 -4
  98. package/examples/jsm/misc/Volume.js +0 -1
  99. package/examples/jsm/misc/VolumeSlice.js +0 -1
  100. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  101. package/examples/jsm/objects/LensflareMesh.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +73 -25
  103. package/examples/jsm/objects/Sky.js +90 -6
  104. package/examples/jsm/objects/SkyMesh.js +150 -16
  105. package/examples/jsm/objects/Water.js +4 -3
  106. package/examples/jsm/objects/Water2.js +5 -3
  107. package/examples/jsm/objects/WaterMesh.js +5 -7
  108. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  109. package/examples/jsm/physics/JoltPhysics.js +10 -6
  110. package/examples/jsm/physics/RapierPhysics.js +9 -5
  111. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  112. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  113. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  114. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  115. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  116. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  117. package/examples/jsm/renderers/Projector.js +246 -28
  118. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  119. package/examples/jsm/shaders/GTAOShader.js +19 -6
  120. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  122. package/examples/jsm/shaders/SAOShader.js +17 -4
  123. package/examples/jsm/shaders/SSAOShader.js +11 -1
  124. package/examples/jsm/shaders/SSRShader.js +6 -5
  125. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  126. package/examples/jsm/shaders/VignetteShader.js +1 -1
  127. package/examples/jsm/transpiler/AST.js +44 -0
  128. package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  130. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  131. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  132. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  133. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  134. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  135. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  136. package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
  137. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  138. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  139. package/examples/jsm/tsl/display/CRT.js +150 -0
  140. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  141. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  142. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  143. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  144. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  145. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  146. package/examples/jsm/tsl/display/GTAONode.js +6 -4
  147. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  148. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  149. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  150. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  151. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  152. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  153. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  154. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  155. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  156. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  157. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  158. package/examples/jsm/tsl/display/SSGINode.js +8 -24
  159. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  160. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  161. package/examples/jsm/tsl/display/Shape.js +29 -0
  162. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  163. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  164. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  165. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  166. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  167. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  168. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  169. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  170. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  171. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  172. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  173. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  174. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  175. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  176. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  177. package/examples/jsm/tsl/math/Bayer.js +53 -3
  178. package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
  179. package/examples/jsm/utils/ColorUtils.js +76 -0
  180. package/examples/jsm/utils/LDrawUtils.js +1 -1
  181. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  182. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  183. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  186. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  187. package/package.json +24 -30
  188. package/src/Three.Core.js +3 -1
  189. package/src/Three.TSL.js +25 -11
  190. package/src/Three.WebGPU.Nodes.js +5 -0
  191. package/src/Three.WebGPU.js +9 -0
  192. package/src/Three.js +1 -0
  193. package/src/animation/AnimationAction.js +12 -2
  194. package/src/animation/AnimationClip.js +1 -1
  195. package/src/animation/AnimationMixer.js +6 -0
  196. package/src/animation/AnimationUtils.js +1 -12
  197. package/src/animation/KeyframeTrack.js +47 -8
  198. package/src/animation/PropertyMixer.js +4 -4
  199. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  200. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  201. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  202. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  203. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  204. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  205. package/src/audio/Audio.js +1 -1
  206. package/src/audio/AudioContext.js +2 -2
  207. package/src/audio/AudioListener.js +5 -3
  208. package/src/cameras/Camera.js +32 -2
  209. package/src/cameras/CubeCamera.js +20 -0
  210. package/src/constants.js +90 -5
  211. package/src/core/BufferAttribute.js +13 -1
  212. package/src/core/BufferGeometry.js +14 -2
  213. package/src/core/Clock.js +7 -0
  214. package/src/core/Object3D.js +52 -4
  215. package/src/core/Raycaster.js +2 -2
  216. package/src/core/RenderTarget.js +4 -4
  217. package/src/extras/PMREMGenerator.js +7 -18
  218. package/src/extras/TextureUtils.js +5 -1
  219. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  220. package/src/geometries/ExtrudeGeometry.js +2 -2
  221. package/src/geometries/PolyhedronGeometry.js +1 -1
  222. package/src/geometries/TorusGeometry.js +8 -3
  223. package/src/helpers/CameraHelper.js +3 -0
  224. package/src/helpers/DirectionalLightHelper.js +4 -1
  225. package/src/helpers/HemisphereLightHelper.js +3 -0
  226. package/src/helpers/PointLightHelper.js +1 -25
  227. package/src/helpers/SpotLightHelper.js +3 -0
  228. package/src/lights/DirectionalLight.js +13 -0
  229. package/src/lights/HemisphereLight.js +10 -0
  230. package/src/lights/Light.js +1 -11
  231. package/src/lights/LightProbe.js +0 -15
  232. package/src/lights/LightShadow.js +15 -6
  233. package/src/lights/PointLight.js +15 -0
  234. package/src/lights/PointLightShadow.js +0 -86
  235. package/src/lights/SpotLight.js +22 -1
  236. package/src/lights/webgpu/IESSpotLight.js +2 -1
  237. package/src/loaders/AudioLoader.js +11 -1
  238. package/src/loaders/Cache.js +28 -0
  239. package/src/loaders/DataTextureLoader.js +6 -4
  240. package/src/loaders/FileLoader.js +2 -3
  241. package/src/loaders/ImageBitmapLoader.js +12 -9
  242. package/src/loaders/Loader.js +6 -0
  243. package/src/loaders/MaterialLoader.js +3 -2
  244. package/src/loaders/ObjectLoader.js +46 -6
  245. package/src/loaders/nodes/NodeLoader.js +2 -2
  246. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  247. package/src/materials/Material.js +2 -0
  248. package/src/materials/MeshLambertMaterial.js +9 -0
  249. package/src/materials/MeshPhongMaterial.js +9 -0
  250. package/src/materials/MeshToonMaterial.js +1 -1
  251. package/src/materials/ShaderMaterial.js +20 -1
  252. package/src/materials/nodes/Line2NodeMaterial.js +34 -7
  253. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  254. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  255. package/src/materials/nodes/NodeMaterial.js +45 -25
  256. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
  257. package/src/math/Line3.js +6 -5
  258. package/src/math/MathUtils.js +10 -10
  259. package/src/math/Matrix2.js +13 -9
  260. package/src/math/Matrix3.js +13 -9
  261. package/src/math/Matrix4.js +87 -74
  262. package/src/math/Plane.js +4 -3
  263. package/src/math/Quaternion.js +3 -29
  264. package/src/math/Sphere.js +1 -1
  265. package/src/math/Triangle.js +1 -1
  266. package/src/math/Vector2.js +11 -7
  267. package/src/math/Vector3.js +15 -13
  268. package/src/math/Vector4.js +13 -9
  269. package/src/math/interpolants/BezierInterpolant.js +108 -0
  270. package/src/nodes/Nodes.js +86 -68
  271. package/src/nodes/TSL.js +7 -7
  272. package/src/nodes/accessors/Arrays.js +1 -1
  273. package/src/nodes/accessors/BatchNode.js +10 -10
  274. package/src/nodes/accessors/Bitangent.js +5 -5
  275. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  276. package/src/nodes/accessors/BufferNode.js +29 -2
  277. package/src/nodes/accessors/Camera.js +149 -28
  278. package/src/nodes/accessors/ClippingNode.js +4 -4
  279. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  280. package/src/nodes/accessors/InstanceNode.js +148 -43
  281. package/src/nodes/accessors/MaterialNode.js +9 -1
  282. package/src/nodes/accessors/MaterialProperties.js +2 -5
  283. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  284. package/src/nodes/accessors/ModelNode.js +1 -1
  285. package/src/nodes/accessors/Normal.js +11 -11
  286. package/src/nodes/accessors/Object3DNode.js +1 -1
  287. package/src/nodes/accessors/Position.js +34 -2
  288. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  289. package/src/nodes/accessors/ReferenceNode.js +8 -8
  290. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  291. package/src/nodes/accessors/SceneProperties.js +47 -0
  292. package/src/nodes/accessors/SkinningNode.js +27 -26
  293. package/src/nodes/accessors/StorageBufferNode.js +14 -25
  294. package/src/nodes/accessors/StorageTextureNode.js +40 -9
  295. package/src/nodes/accessors/Tangent.js +4 -14
  296. package/src/nodes/accessors/Texture3DNode.js +32 -35
  297. package/src/nodes/accessors/TextureNode.js +67 -23
  298. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  299. package/src/nodes/accessors/UserDataNode.js +1 -2
  300. package/src/nodes/accessors/VertexColorNode.js +1 -2
  301. package/src/nodes/code/FunctionCallNode.js +1 -1
  302. package/src/nodes/code/FunctionNode.js +2 -3
  303. package/src/nodes/core/ArrayNode.js +21 -2
  304. package/src/nodes/core/AssignNode.js +3 -3
  305. package/src/nodes/core/AttributeNode.js +3 -3
  306. package/src/nodes/core/BypassNode.js +1 -1
  307. package/src/nodes/core/ContextNode.js +104 -5
  308. package/src/nodes/core/IndexNode.js +2 -1
  309. package/src/nodes/core/InputNode.js +1 -1
  310. package/src/nodes/core/InspectorNode.js +1 -1
  311. package/src/nodes/core/IsolateNode.js +1 -1
  312. package/src/nodes/core/MRTNode.js +48 -2
  313. package/src/nodes/core/Node.js +112 -15
  314. package/src/nodes/core/NodeBuilder.js +284 -66
  315. package/src/nodes/core/NodeError.js +28 -0
  316. package/src/nodes/core/NodeFrame.js +12 -4
  317. package/src/nodes/core/NodeUtils.js +11 -9
  318. package/src/nodes/core/OutputStructNode.js +12 -10
  319. package/src/nodes/core/ParameterNode.js +4 -4
  320. package/src/nodes/core/PropertyNode.js +19 -3
  321. package/src/nodes/core/StackNode.js +66 -17
  322. package/src/nodes/core/StackTrace.js +139 -0
  323. package/src/nodes/core/StructNode.js +17 -3
  324. package/src/nodes/core/StructTypeNode.js +12 -18
  325. package/src/nodes/core/SubBuildNode.js +2 -2
  326. package/src/nodes/core/UniformGroupNode.js +36 -6
  327. package/src/nodes/core/UniformNode.js +21 -5
  328. package/src/nodes/core/VarNode.js +48 -23
  329. package/src/nodes/core/VaryingNode.js +2 -19
  330. package/src/nodes/display/BlendModes.js +0 -64
  331. package/src/nodes/display/ColorAdjustment.js +17 -0
  332. package/src/nodes/display/ColorSpaceNode.js +3 -3
  333. package/src/nodes/display/NormalMapNode.js +39 -4
  334. package/src/nodes/display/PassNode.js +125 -16
  335. package/src/nodes/display/RenderOutputNode.js +7 -7
  336. package/src/nodes/display/ScreenNode.js +4 -2
  337. package/src/nodes/display/ToneMappingNode.js +1 -1
  338. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  339. package/src/nodes/display/ViewportDepthNode.js +52 -4
  340. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  341. package/src/nodes/display/ViewportTextureNode.js +39 -11
  342. package/src/nodes/fog/Fog.js +18 -35
  343. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  344. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  345. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  346. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  347. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  348. package/src/nodes/geometry/RangeNode.js +5 -3
  349. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  350. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  351. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  352. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  353. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  354. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  355. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  356. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  357. package/src/nodes/lighting/LightsNode.js +7 -28
  358. package/src/nodes/lighting/PointShadowNode.js +162 -149
  359. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  360. package/src/nodes/lighting/ShadowNode.js +120 -42
  361. package/src/nodes/math/BitcastNode.js +1 -1
  362. package/src/nodes/math/BitcountNode.js +433 -0
  363. package/src/nodes/math/ConditionalNode.js +3 -3
  364. package/src/nodes/math/MathNode.js +76 -41
  365. package/src/nodes/math/OperatorNode.js +3 -2
  366. package/src/nodes/math/PackFloatNode.js +98 -0
  367. package/src/nodes/math/UnpackFloatNode.js +96 -0
  368. package/src/nodes/pmrem/PMREMNode.js +1 -1
  369. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  370. package/src/nodes/tsl/TSLBase.js +1 -1
  371. package/src/nodes/tsl/TSLCore.js +38 -17
  372. package/src/nodes/utils/ArrayElementNode.js +14 -1
  373. package/src/nodes/utils/ConvertNode.js +1 -1
  374. package/src/nodes/utils/DebugNode.js +12 -12
  375. package/src/nodes/utils/EventNode.js +31 -2
  376. package/src/nodes/utils/FlipNode.js +1 -1
  377. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  378. package/src/nodes/utils/JoinNode.js +3 -3
  379. package/src/nodes/utils/LoopNode.js +1 -1
  380. package/src/nodes/utils/MemberNode.js +2 -2
  381. package/src/nodes/utils/Packing.js +13 -1
  382. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  383. package/src/nodes/utils/RTTNode.js +1 -1
  384. package/src/nodes/utils/ReflectorNode.js +3 -4
  385. package/src/nodes/utils/Remap.js +48 -0
  386. package/src/nodes/utils/RotateNode.js +1 -1
  387. package/src/nodes/utils/SampleNode.js +1 -1
  388. package/src/nodes/utils/SetNode.js +1 -1
  389. package/src/nodes/utils/SplitNode.js +1 -1
  390. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  391. package/src/nodes/utils/UVUtils.js +28 -0
  392. package/src/objects/BatchedMesh.js +44 -16
  393. package/src/objects/InstancedMesh.js +30 -3
  394. package/src/objects/Line.js +1 -1
  395. package/src/objects/Mesh.js +1 -1
  396. package/src/objects/Points.js +1 -1
  397. package/src/objects/Skeleton.js +9 -0
  398. package/src/objects/SkinnedMesh.js +26 -9
  399. package/src/renderers/WebGLRenderer.js +329 -145
  400. package/src/renderers/common/Animation.js +3 -3
  401. package/src/renderers/common/Attributes.js +15 -1
  402. package/src/renderers/common/Backend.js +29 -8
  403. package/src/renderers/common/Background.js +26 -13
  404. package/src/renderers/common/BindGroup.js +1 -16
  405. package/src/renderers/common/Binding.js +11 -0
  406. package/src/renderers/common/Bindings.js +29 -14
  407. package/src/renderers/common/BlendMode.js +143 -0
  408. package/src/renderers/common/Buffer.js +40 -0
  409. package/src/renderers/common/BundleGroup.js +1 -1
  410. package/src/renderers/common/ChainMap.js +30 -6
  411. package/src/renderers/common/ComputePipeline.js +1 -1
  412. package/src/renderers/common/CubeRenderTarget.js +51 -7
  413. package/src/renderers/common/Geometries.js +29 -3
  414. package/src/renderers/common/Info.js +333 -4
  415. package/src/renderers/common/InspectorBase.js +6 -1
  416. package/src/renderers/common/Lighting.js +5 -21
  417. package/src/renderers/common/Pipelines.js +40 -7
  418. package/src/renderers/common/PostProcessing.js +8 -206
  419. package/src/renderers/common/ReadbackBuffer.js +78 -0
  420. package/src/renderers/common/RenderBundle.js +3 -1
  421. package/src/renderers/common/RenderBundles.js +7 -3
  422. package/src/renderers/common/RenderContext.js +16 -0
  423. package/src/renderers/common/RenderContexts.js +33 -49
  424. package/src/renderers/common/RenderLists.js +2 -1
  425. package/src/renderers/common/RenderObject.js +17 -5
  426. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  427. package/src/renderers/common/RenderObjects.js +21 -5
  428. package/src/renderers/common/RenderPipeline.js +232 -17
  429. package/src/renderers/common/Renderer.js +481 -117
  430. package/src/renderers/common/Sampler.js +4 -4
  431. package/src/renderers/common/StorageBuffer.js +13 -1
  432. package/src/renderers/common/Textures.js +89 -4
  433. package/src/renderers/common/TimestampQueryPool.js +5 -3
  434. package/src/renderers/common/Uniform.js +8 -0
  435. package/src/renderers/common/UniformsGroup.js +62 -1
  436. package/src/renderers/common/XRManager.js +37 -29
  437. package/src/renderers/common/extras/PMREMGenerator.js +25 -23
  438. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  439. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
  440. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  441. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  442. package/src/renderers/shaders/DFGLUTData.js +19 -34
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  444. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  445. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  446. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  447. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  448. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  449. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  450. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  451. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  457. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  458. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  459. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  461. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  462. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  463. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  464. package/src/renderers/shaders/ShaderChunk.js +5 -3
  465. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  466. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  467. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  468. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  469. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  470. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  472. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  473. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  474. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  475. package/src/renderers/shaders/ShaderLib.js +7 -6
  476. package/src/renderers/shaders/UniformsLib.js +7 -5
  477. package/src/renderers/shaders/UniformsUtils.js +27 -5
  478. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  479. package/src/renderers/webgl/WebGLBackground.js +15 -15
  480. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  481. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  482. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  483. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  484. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  485. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  486. package/src/renderers/webgl/WebGLLights.js +18 -1
  487. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  488. package/src/renderers/webgl/WebGLObjects.js +3 -1
  489. package/src/renderers/webgl/WebGLOutput.js +270 -0
  490. package/src/renderers/webgl/WebGLProgram.js +49 -109
  491. package/src/renderers/webgl/WebGLPrograms.js +63 -51
  492. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  493. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  494. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  495. package/src/renderers/webgl/WebGLState.js +75 -37
  496. package/src/renderers/webgl/WebGLTextures.js +215 -54
  497. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  498. package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
  499. package/src/renderers/webgl/WebGLUtils.js +6 -2
  500. package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
  501. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  504. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
  507. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  508. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  509. package/src/renderers/webgpu/WebGPUBackend.js +260 -140
  510. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  511. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
  512. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
  513. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  514. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  515. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  516. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  517. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
  519. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  520. package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
  521. package/src/renderers/webxr/WebXRController.js +12 -0
  522. package/src/renderers/webxr/WebXRManager.js +4 -2
  523. package/src/textures/CubeDepthTexture.js +76 -0
  524. package/src/textures/HTMLTexture.js +74 -0
  525. package/src/textures/Source.js +2 -2
  526. package/src/textures/Texture.js +16 -5
  527. package/src/utils.js +280 -3
  528. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  529. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  530. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  531. package/src/nodes/accessors/SceneNode.js +0 -145
  532. package/src/nodes/code/ScriptableNode.js +0 -726
  533. package/src/nodes/code/ScriptableValueNode.js +0 -253
  534. package/src/nodes/display/PosterizeNode.js +0 -65
  535. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  536. package/src/nodes/utils/RemapNode.js +0 -125
  537. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  538. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  539. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -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
 
@@ -52,7 +52,7 @@ export const normalViewGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
52
52
 
53
53
  let node;
54
54
 
55
- if ( builder.material.flatShading === true ) {
55
+ if ( builder.isFlatShading() ) {
56
56
 
57
57
  node = normalFlat;
58
58
 
@@ -76,7 +76,7 @@ export const normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
76
76
 
77
77
  let normal = normalViewGeometry.transformDirection( cameraViewMatrix );
78
78
 
79
- if ( builder.material.flatShading !== true ) {
79
+ if ( builder.isFlatShading() !== true ) {
80
80
 
81
81
  normal = normal.toVarying( 'v_normalWorldGeometry' );
82
82
 
@@ -92,15 +92,15 @@ export const normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
92
92
  * @tsl
93
93
  * @type {Node<vec3>}
94
94
  */
95
- export const normalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, material, context } ) => {
95
+ export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
96
96
 
97
97
  let node;
98
98
 
99
- if ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {
99
+ if ( builder.subBuildFn === 'NORMAL' || builder.subBuildFn === 'VERTEX' ) {
100
100
 
101
101
  node = normalViewGeometry;
102
102
 
103
- if ( material.flatShading !== true ) {
103
+ if ( builder.isFlatShading() !== true ) {
104
104
 
105
105
  node = directionToFaceDirection( node );
106
106
 
@@ -108,9 +108,9 @@ export const normalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, material, context
108
108
 
109
109
  } else {
110
110
 
111
- // 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)
112
112
 
113
- node = context.setupNormal().context( { getUV: null } );
113
+ node = builder.context.setupNormal().context( { getUV: null, getTextureLevel: null } );
114
114
 
115
115
  }
116
116
 
@@ -142,9 +142,9 @@ export const clearcoatNormalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, context }
142
142
 
143
143
  } else {
144
144
 
145
- // 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)
146
146
 
147
- node = context.setupClearcoatNormal().context( { getUV: null } );
147
+ node = context.setupClearcoatNormal().context( { getUV: null, getTextureLevel: null } );
148
148
 
149
149
  }
150
150
 
@@ -182,9 +182,9 @@ export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorld
182
182
  */
183
183
  export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) => {
184
184
 
185
- const modelNormalViewMatrix = builder.renderer.overrideNodes.modelNormalViewMatrix;
185
+ const modelNormalViewMatrix = builder.context.modelNormalViewMatrix;
186
186
 
187
- if ( modelNormalViewMatrix !== null ) {
187
+ if ( modelNormalViewMatrix ) {
188
188
 
189
189
  return modelNormalViewMatrix.transformDirection( normal );
190
190
 
@@ -75,7 +75,7 @@ class Object3DNode extends Node {
75
75
  *
76
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, vec3 } 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.
@@ -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
 
@@ -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 );
@@ -9,7 +9,7 @@ import { uniformArray } from './UniformArrayNode.js';
9
9
  import ArrayElementNode from '../utils/ArrayElementNode.js';
10
10
  import { warn } from '../../utils.js';
11
11
 
12
- // TODO: Avoid duplicated code and ues only ReferenceBaseNode or ReferenceNode
12
+ // TODO: Avoid duplicated code and use only ReferenceBaseNode or ReferenceNode
13
13
 
14
14
  /**
15
15
  * This class is only relevant if the referenced property is array-like.
@@ -62,7 +62,7 @@ class ReferenceElementNode extends ArrayElementNode {
62
62
  *
63
63
  * @return {string} The node type.
64
64
  */
65
- getNodeType() {
65
+ generateNodeType() {
66
66
 
67
67
  return this.referenceNode.uniformType;
68
68
 
@@ -71,8 +71,8 @@ class ReferenceElementNode extends ArrayElementNode {
71
71
  generate( builder ) {
72
72
 
73
73
  const snippet = super.generate( builder );
74
- const arrayType = this.referenceNode.getNodeType();
75
- const elementType = this.getNodeType();
74
+ const arrayType = this.referenceNode.getNodeType( builder );
75
+ const elementType = this.getNodeType( builder );
76
76
 
77
77
  return builder.format( snippet, arrayType, elementType );
78
78
 
@@ -198,7 +198,7 @@ class ReferenceNode extends Node {
198
198
  */
199
199
  element( indexNode ) {
200
200
 
201
- return nodeObject( new ReferenceElementNode( this, nodeObject( indexNode ) ) );
201
+ return new ReferenceElementNode( this, nodeObject( indexNode ) );
202
202
 
203
203
  }
204
204
 
@@ -296,7 +296,7 @@ class ReferenceNode extends Node {
296
296
  * @param {NodeBuilder} builder - The current node builder.
297
297
  * @return {string} The node type.
298
298
  */
299
- getNodeType( builder ) {
299
+ generateNodeType( builder ) {
300
300
 
301
301
  if ( this.node === null ) {
302
302
 
@@ -407,7 +407,7 @@ export default ReferenceNode;
407
407
  * @param {?Object} [object] - The object the property belongs to.
408
408
  * @returns {ReferenceNode}
409
409
  */
410
- export const reference = ( name, type, object ) => nodeObject( new ReferenceNode( name, type, object ) );
410
+ export const reference = ( name, type, object ) => new ReferenceNode( name, type, object );
411
411
 
412
412
  /**
413
413
  * TSL function for creating a reference node. Use this function if you want need a reference
@@ -421,4 +421,4 @@ export const reference = ( name, type, object ) => nodeObject( new ReferenceNode
421
421
  * @param {Object} object - An array-like object the property belongs to.
422
422
  * @returns {ReferenceNode}
423
423
  */
424
- 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,10 +1,9 @@
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';
7
- import { warn } from '../../utils.js';
8
7
 
9
8
  /**
10
9
  * This node is used in context of compute shaders and allows to define a
@@ -126,6 +125,7 @@ class StorageBufferNode extends BufferNode {
126
125
  /**
127
126
  * A reference to the internal buffer attribute node.
128
127
  *
128
+ * @private
129
129
  * @type {?BufferAttributeNode}
130
130
  * @default null
131
131
  */
@@ -134,6 +134,7 @@ class StorageBufferNode extends BufferNode {
134
134
  /**
135
135
  * A reference to the internal varying node.
136
136
  *
137
+ * @private
137
138
  * @type {?VaryingNode}
138
139
  * @default null
139
140
  */
@@ -167,6 +168,8 @@ class StorageBufferNode extends BufferNode {
167
168
  */
168
169
  getHash( builder ) {
169
170
 
171
+ let id;
172
+
170
173
  if ( this.bufferCount === 0 ) {
171
174
 
172
175
  let bufferData = builder.globalCache.getData( this.value );
@@ -181,11 +184,15 @@ class StorageBufferNode extends BufferNode {
181
184
 
182
185
  }
183
186
 
184
- return bufferData.node.uuid;
187
+ id = bufferData.node.id;
188
+
189
+ } else {
190
+
191
+ id = this.id;
185
192
 
186
193
  }
187
194
 
188
- return this.uuid;
195
+ return String( id );
189
196
 
190
197
  }
191
198
 
@@ -316,7 +323,7 @@ class StorageBufferNode extends BufferNode {
316
323
  * @param {NodeBuilder} builder - The current node builder.
317
324
  * @return {string} The node type.
318
325
  */
319
- getNodeType( builder ) {
326
+ generateNodeType( builder ) {
320
327
 
321
328
  if ( this.structTypeNode !== null ) {
322
329
 
@@ -326,7 +333,7 @@ class StorageBufferNode extends BufferNode {
326
333
 
327
334
  if ( builder.isAvailable( 'storageBuffer' ) || builder.isAvailable( 'indirectStorageBuffer' ) ) {
328
335
 
329
- return super.getNodeType( builder );
336
+ return super.generateNodeType( builder );
330
337
 
331
338
  }
332
339
 
@@ -395,22 +402,4 @@ export default StorageBufferNode;
395
402
  * @param {number} [count=0] - The buffer count.
396
403
  * @returns {StorageBufferNode}
397
404
  */
398
- export const storage = ( value, type = null, count = 0 ) => nodeObject( new StorageBufferNode( value, type, count ) );
399
-
400
- /**
401
- * @tsl
402
- * @function
403
- * @deprecated since r171. Use `storage().setPBO( true )` instead.
404
- *
405
- * @param {StorageBufferAttribute|StorageInstancedBufferAttribute|BufferAttribute} value - The buffer data.
406
- * @param {?string} type - The buffer type (e.g. `'vec3'`).
407
- * @param {number} count - The buffer count.
408
- * @returns {StorageBufferNode}
409
- */
410
- export const storageObject = ( value, type, count ) => { // @deprecated, r171
411
-
412
- warn( 'TSL: "storageObject()" is deprecated. Use "storage().setPBO( true )" instead.' );
413
-
414
- return storage( value, type, count ).setPBO( true );
415
-
416
- };
405
+ export const storage = ( value, type = null, count = 0 ) => new StorageBufferNode( value, type, count );
@@ -146,19 +146,36 @@ class StorageTextureNode extends TextureNode {
146
146
  */
147
147
  generate( builder, output ) {
148
148
 
149
- let snippet;
150
-
151
149
  if ( this.storeNode !== null ) {
152
150
 
153
- snippet = this.generateStore( builder );
151
+ this.generateStore( builder );
152
+ return '';
154
153
 
155
- } else {
154
+ }
156
155
 
157
- snippet = super.generate( builder, output );
156
+ return super.generate( builder, output );
158
157
 
159
- }
158
+ }
160
159
 
161
- return snippet;
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 ) {
175
+
176
+ const texture = this.value;
177
+
178
+ return builder.generateStorageTextureLoad( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet );
162
179
 
163
180
  }
164
181
 
@@ -211,7 +228,7 @@ class StorageTextureNode extends TextureNode {
211
228
  const storeSnippet = storeNode.build( builder, 'vec4' );
212
229
  const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
213
230
 
214
- const snippet = builder.generateTextureStore( builder, textureProperty, uvSnippet, depthSnippet, storeSnippet );
231
+ const snippet = builder.generateTextureStore( this.value, textureProperty, uvSnippet, depthSnippet, storeSnippet );
215
232
 
216
233
  builder.addLineFlowCode( snippet, this );
217
234
 
@@ -222,6 +239,7 @@ class StorageTextureNode extends TextureNode {
222
239
  const newNode = super.clone();
223
240
  newNode.storeNode = this.storeNode;
224
241
  newNode.mipLevel = this.mipLevel;
242
+ newNode.access = this.access;
225
243
  return newNode;
226
244
 
227
245
  }
@@ -255,7 +273,20 @@ export const storageTexture = /*@__PURE__*/ nodeProxy( StorageTextureNode ).setP
255
273
  */
256
274
  export const textureStore = ( value, uvNode, storeNode ) => {
257
275
 
258
- 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
+ }
259
290
 
260
291
  if ( storeNode !== null ) node.toStack();
261
292