super-three 0.177.0 → 0.181.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 (501) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +1994 -749
  3. package/build/three.core.js +1358 -506
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +631 -247
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +113 -33
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +9571 -3424
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +9397 -3426
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  14. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  15. package/examples/jsm/Addons.js +2 -3
  16. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  17. package/examples/jsm/capabilities/WebGL.js +0 -27
  18. package/examples/jsm/capabilities/WebGPU.js +1 -1
  19. package/examples/jsm/controls/ArcballControls.js +9 -9
  20. package/examples/jsm/controls/DragControls.js +7 -57
  21. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  22. package/examples/jsm/controls/FlyControls.js +1 -1
  23. package/examples/jsm/controls/OrbitControls.js +2 -2
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +1 -1
  26. package/examples/jsm/controls/TransformControls.js +62 -15
  27. package/examples/jsm/csm/CSMShadowNode.js +4 -4
  28. package/examples/jsm/effects/AsciiEffect.js +8 -8
  29. package/examples/jsm/environments/RoomEnvironment.js +8 -3
  30. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  31. package/examples/jsm/exporters/EXRExporter.js +1 -1
  32. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  33. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  34. package/examples/jsm/exporters/PLYExporter.js +1 -1
  35. package/examples/jsm/exporters/USDZExporter.js +683 -299
  36. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  37. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  38. package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
  39. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  40. package/examples/jsm/geometries/TextGeometry.js +3 -2
  41. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  42. package/examples/jsm/helpers/ViewHelper.js +43 -5
  43. package/examples/jsm/inspector/Inspector.js +427 -0
  44. package/examples/jsm/inspector/RendererInspector.js +415 -0
  45. package/examples/jsm/inspector/tabs/Console.js +204 -0
  46. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  47. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  48. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  49. package/examples/jsm/inspector/ui/Graph.js +95 -0
  50. package/examples/jsm/inspector/ui/Item.js +170 -0
  51. package/examples/jsm/inspector/ui/List.js +75 -0
  52. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  53. package/examples/jsm/inspector/ui/Style.js +654 -0
  54. package/examples/jsm/inspector/ui/Tab.js +46 -0
  55. package/examples/jsm/inspector/ui/Values.js +423 -0
  56. package/examples/jsm/inspector/ui/utils.js +56 -0
  57. package/examples/jsm/interactive/HTMLMesh.js +11 -13
  58. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  59. package/examples/jsm/interactive/SelectionBox.js +30 -0
  60. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  61. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  62. package/examples/jsm/lights/LightProbeGenerator.js +14 -3
  63. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  64. package/examples/jsm/lines/Line2.js +3 -3
  65. package/examples/jsm/lines/LineGeometry.js +1 -1
  66. package/examples/jsm/lines/LineSegments2.js +2 -2
  67. package/examples/jsm/lines/Wireframe.js +2 -2
  68. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  69. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  70. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  71. package/examples/jsm/loaders/3MFLoader.js +1 -1
  72. package/examples/jsm/loaders/ColladaLoader.js +4 -4
  73. package/examples/jsm/loaders/DDSLoader.js +1 -1
  74. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  75. package/examples/jsm/loaders/EXRLoader.js +210 -22
  76. package/examples/jsm/loaders/FBXLoader.js +4 -4
  77. package/examples/jsm/loaders/FontLoader.js +23 -5
  78. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  79. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  80. package/examples/jsm/loaders/HDRLoader.js +486 -0
  81. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  82. package/examples/jsm/loaders/KTXLoader.js +2 -2
  83. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  84. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  85. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  86. package/examples/jsm/loaders/LWOLoader.js +2 -2
  87. package/examples/jsm/loaders/MaterialXLoader.js +233 -34
  88. package/examples/jsm/loaders/OBJLoader.js +1 -1
  89. package/examples/jsm/loaders/PDBLoader.js +1 -1
  90. package/examples/jsm/loaders/RGBELoader.js +7 -473
  91. package/examples/jsm/loaders/SVGLoader.js +2 -2
  92. package/examples/jsm/loaders/TTFLoader.js +13 -1
  93. package/examples/jsm/loaders/USDLoader.js +219 -0
  94. package/examples/jsm/loaders/USDZLoader.js +4 -892
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  96. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  97. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  98. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  99. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  100. package/examples/jsm/math/ColorSpaces.js +19 -1
  101. package/examples/jsm/math/ConvexHull.js +3 -3
  102. package/examples/jsm/math/ImprovedNoise.js +1 -1
  103. package/examples/jsm/math/Lut.js +2 -2
  104. package/examples/jsm/math/SimplexNoise.js +1 -1
  105. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  106. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  107. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  108. package/examples/jsm/misc/TubePainter.js +383 -40
  109. package/examples/jsm/misc/Volume.js +1 -1
  110. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  111. package/examples/jsm/objects/LensflareMesh.js +3 -3
  112. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  113. package/examples/jsm/objects/Sky.js +1 -1
  114. package/examples/jsm/objects/SkyMesh.js +3 -3
  115. package/examples/jsm/objects/Water.js +3 -3
  116. package/examples/jsm/objects/WaterMesh.js +6 -6
  117. package/examples/jsm/physics/RapierPhysics.js +95 -16
  118. package/examples/jsm/postprocessing/GTAOPass.js +10 -9
  119. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  120. package/examples/jsm/postprocessing/OutlinePass.js +17 -17
  121. package/examples/jsm/postprocessing/SSAOPass.js +10 -9
  122. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  123. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  124. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  125. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  126. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  127. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  128. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  129. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  130. package/examples/jsm/shaders/BokehShader.js +1 -1
  131. package/examples/jsm/shaders/BokehShader2.js +1 -1
  132. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  133. package/examples/jsm/shaders/FocusShader.js +1 -1
  134. package/examples/jsm/shaders/GTAOShader.js +2 -2
  135. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  136. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  137. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  138. package/examples/jsm/shaders/SSRShader.js +1 -1
  139. package/examples/jsm/shaders/SepiaShader.js +1 -1
  140. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  141. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  142. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
  143. package/examples/jsm/shaders/VignetteShader.js +1 -1
  144. package/examples/jsm/transpiler/AST.js +381 -30
  145. package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
  146. package/examples/jsm/transpiler/Linker.js +327 -0
  147. package/examples/jsm/transpiler/TSLEncoder.js +196 -92
  148. package/examples/jsm/transpiler/Transpiler.js +17 -1
  149. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  150. package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  151. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  152. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  153. package/examples/jsm/tsl/display/BloomNode.js +11 -6
  154. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  155. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  156. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  157. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  158. package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
  159. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  160. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  161. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  162. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  163. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  164. package/examples/jsm/tsl/display/TRAANode.js +578 -0
  165. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  166. package/examples/jsm/tsl/display/hashBlur.js +18 -20
  167. package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
  168. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  169. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  170. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  171. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  172. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  173. package/package.json +5 -10
  174. package/src/Three.Core.js +5 -2
  175. package/src/Three.TSL.js +112 -32
  176. package/src/Three.WebGPU.Nodes.js +2 -0
  177. package/src/Three.WebGPU.js +4 -0
  178. package/src/animation/AnimationClip.js +20 -4
  179. package/src/animation/AnimationMixer.js +3 -3
  180. package/src/animation/AnimationObjectGroup.js +2 -1
  181. package/src/animation/KeyframeTrack.js +8 -7
  182. package/src/animation/PropertyBinding.js +12 -11
  183. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  184. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  185. package/src/audio/Audio.js +10 -9
  186. package/src/audio/PositionalAudio.js +1 -1
  187. package/src/cameras/Camera.js +14 -0
  188. package/src/cameras/OrthographicCamera.js +2 -2
  189. package/src/cameras/PerspectiveCamera.js +2 -2
  190. package/src/cameras/StereoCamera.js +2 -2
  191. package/src/constants.js +13 -5
  192. package/src/core/BufferAttribute.js +3 -3
  193. package/src/core/BufferGeometry.js +10 -10
  194. package/src/core/Clock.js +2 -8
  195. package/src/core/EventDispatcher.js +1 -1
  196. package/src/core/GLBufferAttribute.js +13 -1
  197. package/src/core/InterleavedBuffer.js +1 -1
  198. package/src/core/InterleavedBufferAttribute.js +3 -2
  199. package/src/core/Object3D.js +4 -3
  200. package/src/core/Raycaster.js +2 -1
  201. package/src/core/RenderTarget.js +10 -1
  202. package/{examples/jsm/misc → src/core}/Timer.js +4 -42
  203. package/src/extras/Controls.js +5 -4
  204. package/src/extras/DataUtils.js +2 -1
  205. package/src/extras/Earcut.js +6 -0
  206. package/src/extras/ImageUtils.js +2 -2
  207. package/src/extras/PMREMGenerator.js +279 -55
  208. package/src/extras/TextureUtils.js +2 -1
  209. package/src/extras/core/Curve.js +2 -1
  210. package/src/extras/core/Interpolations.js +7 -1
  211. package/src/extras/core/Path.js +22 -22
  212. package/src/extras/core/ShapePath.js +4 -4
  213. package/src/extras/lib/earcut.js +8 -8
  214. package/src/geometries/BoxGeometry.js +1 -0
  215. package/src/geometries/CapsuleGeometry.js +1 -0
  216. package/src/geometries/CircleGeometry.js +1 -0
  217. package/src/geometries/ConeGeometry.js +1 -0
  218. package/src/geometries/CylinderGeometry.js +1 -0
  219. package/src/geometries/DodecahedronGeometry.js +1 -0
  220. package/src/geometries/ExtrudeGeometry.js +8 -6
  221. package/src/geometries/IcosahedronGeometry.js +1 -0
  222. package/src/geometries/LatheGeometry.js +1 -0
  223. package/src/geometries/OctahedronGeometry.js +1 -0
  224. package/src/geometries/PlaneGeometry.js +1 -0
  225. package/src/geometries/RingGeometry.js +1 -0
  226. package/src/geometries/ShapeGeometry.js +1 -0
  227. package/src/geometries/SphereGeometry.js +1 -0
  228. package/src/geometries/TetrahedronGeometry.js +1 -0
  229. package/src/geometries/TorusGeometry.js +1 -0
  230. package/src/geometries/TorusKnotGeometry.js +1 -0
  231. package/src/geometries/TubeGeometry.js +1 -0
  232. package/src/helpers/CameraHelper.js +42 -12
  233. package/src/helpers/SkeletonHelper.js +35 -6
  234. package/src/lights/LightShadow.js +21 -8
  235. package/src/lights/PointLightShadow.js +1 -1
  236. package/src/lights/webgpu/ProjectorLight.js +1 -1
  237. package/src/loaders/AnimationLoader.js +2 -1
  238. package/src/loaders/AudioLoader.js +2 -1
  239. package/src/loaders/BufferGeometryLoader.js +2 -2
  240. package/src/loaders/Cache.js +2 -2
  241. package/src/loaders/DataTextureLoader.js +1 -1
  242. package/src/loaders/FileLoader.js +29 -5
  243. package/src/loaders/ImageBitmapLoader.js +32 -8
  244. package/src/loaders/ImageLoader.js +56 -9
  245. package/src/loaders/Loader.js +17 -3
  246. package/src/loaders/LoadingManager.js +45 -0
  247. package/src/loaders/MaterialLoader.js +3 -2
  248. package/src/loaders/ObjectLoader.js +13 -13
  249. package/src/loaders/TextureLoader.js +1 -1
  250. package/src/loaders/nodes/NodeLoader.js +3 -2
  251. package/src/materials/Material.js +16 -3
  252. package/src/materials/MeshBasicMaterial.js +2 -1
  253. package/src/materials/MeshDepthMaterial.js +1 -0
  254. package/src/materials/MeshDistanceMaterial.js +1 -1
  255. package/src/materials/MeshLambertMaterial.js +2 -1
  256. package/src/materials/MeshMatcapMaterial.js +22 -0
  257. package/src/materials/MeshNormalMaterial.js +1 -0
  258. package/src/materials/MeshPhongMaterial.js +2 -1
  259. package/src/materials/MeshPhysicalMaterial.js +2 -1
  260. package/src/materials/MeshStandardMaterial.js +8 -7
  261. package/src/materials/MeshToonMaterial.js +1 -0
  262. package/src/materials/PointsMaterial.js +1 -1
  263. package/src/materials/ShaderMaterial.js +2 -2
  264. package/src/materials/nodes/Line2NodeMaterial.js +2 -10
  265. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  266. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  267. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  268. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  269. package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
  270. package/src/materials/nodes/NodeMaterial.js +90 -27
  271. package/src/materials/nodes/PointsNodeMaterial.js +86 -28
  272. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  273. package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
  274. package/src/math/Color.js +6 -5
  275. package/src/math/ColorManagement.js +9 -3
  276. package/src/math/Cylindrical.js +1 -1
  277. package/src/math/Euler.js +2 -1
  278. package/src/math/Frustum.js +25 -9
  279. package/src/math/FrustumArray.js +10 -5
  280. package/src/math/Line3.js +129 -2
  281. package/src/math/MathUtils.js +13 -11
  282. package/src/math/Matrix2.js +1 -1
  283. package/src/math/Matrix3.js +2 -2
  284. package/src/math/Matrix4.js +55 -34
  285. package/src/math/Plane.js +1 -1
  286. package/src/math/Quaternion.js +69 -67
  287. package/src/math/Spherical.js +3 -3
  288. package/src/nodes/Nodes.js +6 -4
  289. package/src/nodes/TSL.js +9 -4
  290. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  291. package/src/nodes/accessors/Bitangent.js +31 -25
  292. package/src/nodes/accessors/BufferNode.js +1 -1
  293. package/src/nodes/accessors/Camera.js +142 -16
  294. package/src/nodes/accessors/ClippingNode.js +6 -5
  295. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  296. package/src/nodes/accessors/InstanceNode.js +25 -5
  297. package/src/nodes/accessors/Lights.js +10 -0
  298. package/src/nodes/accessors/Normal.js +97 -30
  299. package/src/nodes/accessors/Object3DNode.js +2 -2
  300. package/src/nodes/accessors/Position.js +25 -9
  301. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  302. package/src/nodes/accessors/ReferenceNode.js +20 -4
  303. package/src/nodes/accessors/ReflectVector.js +3 -3
  304. package/src/nodes/accessors/SceneNode.js +3 -2
  305. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  306. package/src/nodes/accessors/StorageTextureNode.js +23 -1
  307. package/src/nodes/accessors/Tangent.js +25 -17
  308. package/src/nodes/accessors/TangentUtils.js +46 -0
  309. package/src/nodes/accessors/Texture3DNode.js +14 -1
  310. package/src/nodes/accessors/TextureBicubic.js +21 -3
  311. package/src/nodes/accessors/TextureNode.js +142 -44
  312. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  313. package/src/nodes/code/FunctionCallNode.js +24 -4
  314. package/src/nodes/code/FunctionNode.js +23 -0
  315. package/src/nodes/core/ArrayNode.js +13 -0
  316. package/src/nodes/core/AssignNode.js +6 -2
  317. package/src/nodes/core/AttributeNode.js +2 -1
  318. package/src/nodes/core/ContextNode.js +48 -10
  319. package/src/nodes/core/IndexNode.js +2 -2
  320. package/src/nodes/core/InputNode.js +2 -1
  321. package/src/nodes/core/InspectorNode.js +128 -0
  322. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
  323. package/src/nodes/core/Node.js +167 -34
  324. package/src/nodes/core/NodeBuilder.js +404 -120
  325. package/src/nodes/core/NodeFrame.js +21 -21
  326. package/src/nodes/core/NodeFunction.js +2 -1
  327. package/src/nodes/core/NodeParser.js +2 -1
  328. package/src/nodes/core/NodeUniform.js +1 -1
  329. package/src/nodes/core/NodeUtils.js +17 -88
  330. package/src/nodes/core/ParameterNode.js +31 -0
  331. package/src/nodes/core/PropertyNode.js +7 -0
  332. package/src/nodes/core/StackNode.js +77 -30
  333. package/src/nodes/core/StructNode.js +5 -5
  334. package/src/nodes/core/StructTypeNode.js +1 -0
  335. package/src/nodes/core/SubBuildNode.js +89 -0
  336. package/src/nodes/core/UniformNode.js +80 -14
  337. package/src/nodes/core/VarNode.js +142 -16
  338. package/src/nodes/core/VaryingNode.js +9 -6
  339. package/src/nodes/display/BlendModes.js +7 -6
  340. package/src/nodes/display/BumpMapNode.js +1 -1
  341. package/src/nodes/display/ColorAdjustment.js +1 -1
  342. package/src/nodes/display/FrontFacingNode.js +35 -7
  343. package/src/nodes/display/NormalMapNode.js +20 -50
  344. package/src/nodes/display/PassNode.js +206 -17
  345. package/src/nodes/display/RenderOutputNode.js +28 -2
  346. package/src/nodes/display/ScreenNode.js +44 -40
  347. package/src/nodes/display/ToneMappingNode.js +31 -4
  348. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  349. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  350. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  351. package/src/nodes/display/ViewportTextureNode.js +94 -4
  352. package/src/nodes/fog/Fog.js +3 -2
  353. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  354. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  355. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  356. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  357. package/src/nodes/functions/BasicLightingModel.js +2 -1
  358. package/src/nodes/functions/PhongLightingModel.js +3 -3
  359. package/src/nodes/functions/PhysicalLightingModel.js +19 -18
  360. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  361. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  362. package/src/nodes/geometry/RangeNode.js +40 -4
  363. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  364. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  365. package/src/nodes/gpgpu/ComputeNode.js +81 -25
  366. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  367. package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
  368. package/src/nodes/lighting/EnvironmentNode.js +11 -11
  369. package/src/nodes/lighting/LightsNode.js +7 -8
  370. package/src/nodes/lighting/PointShadowNode.js +6 -0
  371. package/src/nodes/lighting/ProjectorLightNode.js +19 -6
  372. package/src/nodes/lighting/ShadowFilterNode.js +3 -1
  373. package/src/nodes/lighting/ShadowNode.js +77 -10
  374. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  375. package/src/nodes/materialx/lib/mx_noise.js +165 -1
  376. package/src/nodes/math/BitcastNode.js +156 -0
  377. package/src/nodes/math/ConditionalNode.js +25 -27
  378. package/src/nodes/math/MathNode.js +106 -65
  379. package/src/nodes/math/OperatorNode.js +28 -43
  380. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  381. package/src/nodes/shapes/Shapes.js +1 -1
  382. package/src/nodes/tsl/TSLBase.js +6 -2
  383. package/src/nodes/tsl/TSLCore.js +546 -186
  384. package/src/nodes/utils/DebugNode.js +3 -2
  385. package/src/nodes/utils/EquirectUV.js +27 -0
  386. package/src/nodes/utils/EventNode.js +119 -0
  387. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  388. package/src/nodes/utils/JoinNode.js +6 -3
  389. package/src/nodes/utils/LoopNode.js +20 -41
  390. package/src/nodes/utils/MatcapUV.js +22 -0
  391. package/src/nodes/utils/MemberNode.js +59 -7
  392. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  393. package/src/nodes/utils/RTTNode.js +33 -6
  394. package/src/nodes/utils/ReflectorNode.js +68 -10
  395. package/src/nodes/utils/SampleNode.js +91 -0
  396. package/src/nodes/utils/SplitNode.js +11 -0
  397. package/src/nodes/utils/Timer.js +0 -47
  398. package/src/nodes/utils/TriplanarTextures.js +65 -0
  399. package/src/objects/BatchedMesh.js +6 -4
  400. package/src/objects/LOD.js +1 -1
  401. package/src/objects/Line.js +2 -1
  402. package/src/objects/LineSegments.js +2 -1
  403. package/src/objects/Skeleton.js +3 -2
  404. package/src/objects/SkinnedMesh.js +3 -1
  405. package/src/objects/Sprite.js +4 -3
  406. package/src/renderers/WebGLRenderer.js +77 -66
  407. package/src/renderers/common/Animation.js +13 -1
  408. package/src/renderers/common/Attributes.js +1 -1
  409. package/src/renderers/common/Backend.js +108 -27
  410. package/src/renderers/common/Background.js +4 -3
  411. package/src/renderers/common/Bindings.js +76 -19
  412. package/src/renderers/common/CanvasTarget.js +341 -0
  413. package/src/renderers/common/ChainMap.js +1 -1
  414. package/src/renderers/common/Color4.js +2 -2
  415. package/src/renderers/common/CubeRenderTarget.js +1 -1
  416. package/src/renderers/common/DataMap.js +1 -1
  417. package/src/renderers/common/Geometries.js +26 -0
  418. package/src/renderers/common/Info.js +4 -2
  419. package/src/renderers/common/InspectorBase.js +146 -0
  420. package/src/renderers/common/Pipelines.js +1 -1
  421. package/src/renderers/common/PostProcessing.js +61 -25
  422. package/src/renderers/common/QuadMesh.js +7 -1
  423. package/src/renderers/common/RenderContext.js +2 -2
  424. package/src/renderers/common/RenderList.js +7 -3
  425. package/src/renderers/common/RenderObject.js +84 -5
  426. package/src/renderers/common/RenderObjects.js +1 -1
  427. package/src/renderers/common/Renderer.js +486 -255
  428. package/src/renderers/common/RendererUtils.js +9 -0
  429. package/src/renderers/common/SampledTexture.js +8 -68
  430. package/src/renderers/common/Sampler.js +117 -0
  431. package/src/renderers/common/Storage3DTexture.js +100 -0
  432. package/src/renderers/common/StorageArrayTexture.js +84 -0
  433. package/src/renderers/common/StorageTexture.js +27 -0
  434. package/src/renderers/common/Textures.js +138 -46
  435. package/src/renderers/common/TimestampQueryPool.js +65 -3
  436. package/src/renderers/common/UniformsGroup.js +2 -1
  437. package/src/renderers/common/XRManager.js +63 -24
  438. package/src/renderers/common/XRRenderTarget.js +21 -4
  439. package/src/renderers/common/extras/PMREMGenerator.js +161 -66
  440. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  441. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  442. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  443. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  444. package/src/renderers/common/nodes/Nodes.js +38 -16
  445. package/src/renderers/shaders/DFGLUTData.js +64 -0
  446. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  447. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  449. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  450. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  451. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  454. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
  455. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  456. package/src/renderers/shaders/UniformsLib.js +1 -0
  457. package/src/renderers/shaders/UniformsUtils.js +25 -4
  458. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  459. package/src/renderers/webgl/WebGLCapabilities.js +4 -3
  460. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  461. package/src/renderers/webgl/WebGLInfo.js +3 -1
  462. package/src/renderers/webgl/WebGLProgram.js +25 -18
  463. package/src/renderers/webgl/WebGLPrograms.js +9 -6
  464. package/src/renderers/webgl/WebGLShadowMap.js +13 -2
  465. package/src/renderers/webgl/WebGLState.js +17 -16
  466. package/src/renderers/webgl/WebGLTextures.js +38 -21
  467. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  468. package/src/renderers/webgl/WebGLUtils.js +3 -2
  469. package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
  470. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
  471. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  472. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  473. package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
  474. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
  475. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  476. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  477. package/src/renderers/webgpu/WebGPUBackend.js +205 -128
  478. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  479. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  480. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
  481. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
  482. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
  483. package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
  484. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
  485. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  486. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
  487. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  488. package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
  489. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  490. package/src/renderers/webxr/WebXRManager.js +89 -13
  491. package/src/textures/ExternalTexture.js +56 -0
  492. package/src/textures/FramebufferTexture.js +2 -2
  493. package/src/textures/Source.js +14 -3
  494. package/src/textures/Texture.js +3 -2
  495. package/src/textures/VideoTexture.js +29 -2
  496. package/src/utils.js +67 -3
  497. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  498. package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
  499. package/src/nodes/utils/EquirectUVNode.js +0 -65
  500. package/src/nodes/utils/MatcapUVNode.js +0 -49
  501. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -1,9 +1,10 @@
1
1
  import { uniform } from '../core/UniformNode.js';
2
2
  import { renderGroup, sharedUniformGroup } from '../core/UniformGroupNode.js';
3
3
  import { Vector3 } from '../../math/Vector3.js';
4
- import { Fn } from '../tsl/TSLBase.js';
4
+ import { Fn, vec4 } from '../tsl/TSLBase.js';
5
5
  import { uniformArray } from './UniformArrayNode.js';
6
6
  import { builtin } from './BuiltinNode.js';
7
+ import { screenSize } from '../display/ScreenNode.js';
7
8
 
8
9
  /**
9
10
  * TSL object that represents the current `index` value of the camera if used ArrayCamera.
@@ -11,7 +12,7 @@ import { builtin } from './BuiltinNode.js';
11
12
  * @tsl
12
13
  * @type {UniformNode<uint>}
13
14
  */
14
- export const cameraIndex = /*@__PURE__*/ uniform( 0, 'uint' ).label( 'u_cameraIndex' ).setGroup( sharedUniformGroup( 'cameraIndex' ) ).toVarying( 'v_cameraIndex' );
15
+ export const cameraIndex = /*@__PURE__*/ uniform( 0, 'uint' ).setName( 'u_cameraIndex' ).setGroup( sharedUniformGroup( 'cameraIndex' ) ).toVarying( 'v_cameraIndex' );
15
16
 
16
17
  /**
17
18
  * TSL object that represents the `near` value of the camera used for the current render.
@@ -19,7 +20,7 @@ export const cameraIndex = /*@__PURE__*/ uniform( 0, 'uint' ).label( 'u_cameraIn
19
20
  * @tsl
20
21
  * @type {UniformNode<float>}
21
22
  */
22
- export const cameraNear = /*@__PURE__*/ uniform( 'float' ).label( 'cameraNear' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.near );
23
+ export const cameraNear = /*@__PURE__*/ uniform( 'float' ).setName( 'cameraNear' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.near );
23
24
 
24
25
  /**
25
26
  * TSL object that represents the `far` value of the camera used for the current render.
@@ -27,7 +28,7 @@ export const cameraNear = /*@__PURE__*/ uniform( 'float' ).label( 'cameraNear' )
27
28
  * @tsl
28
29
  * @type {UniformNode<float>}
29
30
  */
30
- export const cameraFar = /*@__PURE__*/ uniform( 'float' ).label( 'cameraFar' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.far );
31
+ export const cameraFar = /*@__PURE__*/ uniform( 'float' ).setName( 'cameraFar' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.far );
31
32
 
32
33
  /**
33
34
  * TSL object that represents the projection matrix of the camera used for the current render.
@@ -49,13 +50,13 @@ export const cameraProjectionMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
49
50
 
50
51
  }
51
52
 
52
- const cameraProjectionMatrices = uniformArray( matrices ).setGroup( renderGroup ).label( 'cameraProjectionMatrices' );
53
+ const cameraProjectionMatrices = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraProjectionMatrices' );
53
54
 
54
- cameraProjectionMatrix = cameraProjectionMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toVar( 'cameraProjectionMatrix' );
55
+ cameraProjectionMatrix = cameraProjectionMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraProjectionMatrix' );
55
56
 
56
57
  } else {
57
58
 
58
- cameraProjectionMatrix = uniform( 'mat4' ).label( 'cameraProjectionMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrix );
59
+ cameraProjectionMatrix = uniform( 'mat4' ).setName( 'cameraProjectionMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrix );
59
60
 
60
61
  }
61
62
 
@@ -83,13 +84,13 @@ export const cameraProjectionMatrixInverse = /*@__PURE__*/ ( Fn( ( { camera } )
83
84
 
84
85
  }
85
86
 
86
- const cameraProjectionMatricesInverse = uniformArray( matrices ).setGroup( renderGroup ).label( 'cameraProjectionMatricesInverse' );
87
+ const cameraProjectionMatricesInverse = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraProjectionMatricesInverse' );
87
88
 
88
- cameraProjectionMatrixInverse = cameraProjectionMatricesInverse.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toVar( 'cameraProjectionMatrixInverse' );
89
+ cameraProjectionMatrixInverse = cameraProjectionMatricesInverse.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraProjectionMatrixInverse' );
89
90
 
90
91
  } else {
91
92
 
92
- cameraProjectionMatrixInverse = uniform( 'mat4' ).label( 'cameraProjectionMatrixInverse' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrixInverse );
93
+ cameraProjectionMatrixInverse = uniform( 'mat4' ).setName( 'cameraProjectionMatrixInverse' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrixInverse );
93
94
 
94
95
  }
95
96
 
@@ -117,13 +118,13 @@ export const cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
117
118
 
118
119
  }
119
120
 
120
- const cameraViewMatrices = uniformArray( matrices ).setGroup( renderGroup ).label( 'cameraViewMatrices' );
121
+ const cameraViewMatrices = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraViewMatrices' );
121
122
 
122
- cameraViewMatrix = cameraViewMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toVar( 'cameraViewMatrix' );
123
+ cameraViewMatrix = cameraViewMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraViewMatrix' );
123
124
 
124
125
  } else {
125
126
 
126
- cameraViewMatrix = uniform( 'mat4' ).label( 'cameraViewMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorldInverse );
127
+ cameraViewMatrix = uniform( 'mat4' ).setName( 'cameraViewMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorldInverse );
127
128
 
128
129
  }
129
130
 
@@ -137,7 +138,33 @@ export const cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
137
138
  * @tsl
138
139
  * @type {UniformNode<mat4>}
139
140
  */
140
- export const cameraWorldMatrix = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraWorldMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorld );
141
+ export const cameraWorldMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
142
+
143
+ let cameraWorldMatrix;
144
+
145
+ if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
146
+
147
+ const matrices = [];
148
+
149
+ for ( const subCamera of camera.cameras ) {
150
+
151
+ matrices.push( subCamera.matrixWorld );
152
+
153
+ }
154
+
155
+ const cameraWorldMatrices = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraWorldMatrices' );
156
+
157
+ cameraWorldMatrix = cameraWorldMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraWorldMatrix' );
158
+
159
+ } else {
160
+
161
+ cameraWorldMatrix = uniform( 'mat4' ).setName( 'cameraWorldMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorld );
162
+
163
+ }
164
+
165
+ return cameraWorldMatrix;
166
+
167
+ } ).once() )();
141
168
 
142
169
  /**
143
170
  * TSL object that represents the normal matrix of the camera used for the current render.
@@ -145,7 +172,33 @@ export const cameraWorldMatrix = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraW
145
172
  * @tsl
146
173
  * @type {UniformNode<mat3>}
147
174
  */
148
- export const cameraNormalMatrix = /*@__PURE__*/ uniform( 'mat3' ).label( 'cameraNormalMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.normalMatrix );
175
+ export const cameraNormalMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
176
+
177
+ let cameraNormalMatrix;
178
+
179
+ if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
180
+
181
+ const matrices = [];
182
+
183
+ for ( const subCamera of camera.cameras ) {
184
+
185
+ matrices.push( subCamera.normalMatrix );
186
+
187
+ }
188
+
189
+ const cameraNormalMatrices = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraNormalMatrices' );
190
+
191
+ cameraNormalMatrix = cameraNormalMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraNormalMatrix' );
192
+
193
+ } else {
194
+
195
+ cameraNormalMatrix = uniform( 'mat3' ).setName( 'cameraNormalMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.normalMatrix );
196
+
197
+ }
198
+
199
+ return cameraNormalMatrix;
200
+
201
+ } ).once() )();
149
202
 
150
203
  /**
151
204
  * TSL object that represents the position in world space of the camera used for the current render.
@@ -153,4 +206,77 @@ export const cameraNormalMatrix = /*@__PURE__*/ uniform( 'mat3' ).label( 'camera
153
206
  * @tsl
154
207
  * @type {UniformNode<vec3>}
155
208
  */
156
- export const cameraPosition = /*@__PURE__*/ uniform( new Vector3() ).label( 'cameraPosition' ).setGroup( renderGroup ).onRenderUpdate( ( { camera }, self ) => self.value.setFromMatrixPosition( camera.matrixWorld ) );
209
+ export const cameraPosition = /*@__PURE__*/ ( Fn( ( { camera } ) => {
210
+
211
+ let cameraPosition;
212
+
213
+ if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
214
+
215
+ const positions = [];
216
+
217
+ for ( let i = 0, l = camera.cameras.length; i < l; i ++ ) {
218
+
219
+ positions.push( new Vector3() );
220
+
221
+ }
222
+
223
+ const cameraPositions = uniformArray( positions ).setGroup( renderGroup ).setName( 'cameraPositions' ).onRenderUpdate( ( { camera }, self ) => {
224
+
225
+ const subCameras = camera.cameras;
226
+ const array = self.array;
227
+
228
+ for ( let i = 0, l = subCameras.length; i < l; i ++ ) {
229
+
230
+ array[ i ].setFromMatrixPosition( subCameras[ i ].matrixWorld );
231
+
232
+ }
233
+
234
+ } );
235
+
236
+ cameraPosition = cameraPositions.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraPosition' );
237
+
238
+ } else {
239
+
240
+ cameraPosition = uniform( new Vector3() ).setName( 'cameraPosition' ).setGroup( renderGroup ).onRenderUpdate( ( { camera }, self ) => self.value.setFromMatrixPosition( camera.matrixWorld ) );
241
+
242
+ }
243
+
244
+ return cameraPosition;
245
+
246
+ } ).once() )();
247
+
248
+
249
+ /**
250
+ * TSL object that represents the viewport of the camera used for the current render.
251
+ *
252
+ * @tsl
253
+ * @type {UniformNode<vec4>}
254
+ */
255
+ export const cameraViewport = /*@__PURE__*/ ( Fn( ( { camera } ) => {
256
+
257
+ let cameraViewport;
258
+
259
+ if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
260
+
261
+ const viewports = [];
262
+
263
+ for ( const subCamera of camera.cameras ) {
264
+
265
+ viewports.push( subCamera.viewport );
266
+
267
+ }
268
+
269
+ const cameraViewports = uniformArray( viewports, 'vec4' ).setGroup( renderGroup ).setName( 'cameraViewports' );
270
+
271
+ cameraViewport = cameraViewports.element( cameraIndex ).toConst( 'cameraViewport' );
272
+
273
+ } else {
274
+
275
+ // Fallback for single camera
276
+ cameraViewport = vec4( 0, 0, screenSize.x, screenSize.y ).toConst( 'cameraViewport' );
277
+
278
+ }
279
+
280
+ return cameraViewport;
281
+
282
+ } ).once() )();
@@ -7,6 +7,7 @@ import { Loop } from '../utils/LoopNode.js';
7
7
  import { smoothstep } from '../math/MathNode.js';
8
8
  import { uniformArray } from './UniformArrayNode.js';
9
9
  import { builtin } from './BuiltinNode.js';
10
+ import { renderGroup } from '../core/UniformGroupNode.js';
10
11
 
11
12
  /**
12
13
  * This node is used in {@link NodeMaterial} to setup the clipping
@@ -94,7 +95,7 @@ class ClippingNode extends Node {
94
95
 
95
96
  if ( this.hardwareClipping === false && numUnionPlanes > 0 ) {
96
97
 
97
- const clippingPlanes = uniformArray( unionPlanes );
98
+ const clippingPlanes = uniformArray( unionPlanes ).setGroup( renderGroup );
98
99
 
99
100
  Loop( numUnionPlanes, ( { i } ) => {
100
101
 
@@ -113,7 +114,7 @@ class ClippingNode extends Node {
113
114
 
114
115
  if ( numIntersectionPlanes > 0 ) {
115
116
 
116
- const clippingPlanes = uniformArray( intersectionPlanes );
117
+ const clippingPlanes = uniformArray( intersectionPlanes ).setGroup( renderGroup );
117
118
  const intersectionClipOpacity = float( 1 ).toVar( 'intersectionClipOpacity' );
118
119
 
119
120
  Loop( numIntersectionPlanes, ( { i } ) => {
@@ -154,7 +155,7 @@ class ClippingNode extends Node {
154
155
 
155
156
  if ( this.hardwareClipping === false && numUnionPlanes > 0 ) {
156
157
 
157
- const clippingPlanes = uniformArray( unionPlanes );
158
+ const clippingPlanes = uniformArray( unionPlanes ).setGroup( renderGroup );
158
159
 
159
160
  Loop( numUnionPlanes, ( { i } ) => {
160
161
 
@@ -169,7 +170,7 @@ class ClippingNode extends Node {
169
170
 
170
171
  if ( numIntersectionPlanes > 0 ) {
171
172
 
172
- const clippingPlanes = uniformArray( intersectionPlanes );
173
+ const clippingPlanes = uniformArray( intersectionPlanes ).setGroup( renderGroup );
173
174
  const clipped = bool( true ).toVar( 'clipped' );
174
175
 
175
176
  Loop( numIntersectionPlanes, ( { i } ) => {
@@ -202,7 +203,7 @@ class ClippingNode extends Node {
202
203
 
203
204
  return Fn( () => {
204
205
 
205
- const clippingPlanes = uniformArray( unionPlanes );
206
+ const clippingPlanes = uniformArray( unionPlanes ).setGroup( renderGroup );
206
207
  const hw_clip_distances = builtin( builder.getClipDistance() );
207
208
 
208
209
  Loop( numUnionPlanes, ( { i } ) => {
@@ -6,6 +6,7 @@ import { CubeReflectionMapping, CubeRefractionMapping, WebGPUCoordinateSystem }
6
6
  import { materialEnvRotation } from './MaterialProperties.js';
7
7
 
8
8
  import { CubeTexture } from '../../textures/CubeTexture.js';
9
+ import { error } from '../../utils.js';
9
10
 
10
11
  const EmptyTexture = /*@__PURE__*/ new CubeTexture();
11
12
 
@@ -76,7 +77,7 @@ class CubeTextureNode extends TextureNode {
76
77
 
77
78
  } else {
78
79
 
79
- console.error( 'THREE.CubeTextureNode: Mapping "%s" not supported.', texture.mapping );
80
+ error( 'CubeTextureNode: Mapping "%s" not supported.', texture.mapping );
80
81
 
81
82
  return vec3( 0, 0, 0 );
82
83
 
@@ -123,7 +124,7 @@ class CubeTextureNode extends TextureNode {
123
124
  */
124
125
  generateUV( builder, cubeUV ) {
125
126
 
126
- return cubeUV.build( builder, 'vec3' );
127
+ return cubeUV.build( builder, this.sampler === true ? 'vec3' : 'ivec3' );
127
128
 
128
129
  }
129
130
 
@@ -149,7 +150,7 @@ export const cubeTextureBase = /*@__PURE__*/ nodeProxy( CubeTextureNode ).setPar
149
150
  *
150
151
  * @tsl
151
152
  * @function
152
- * @param {?CubeTexture|CubeTextureNode} [value=EmptyTexture] - The cube texture.
153
+ * @param {?(CubeTexture|CubeTextureNode)} [value=EmptyTexture] - The cube texture.
153
154
  * @param {?Node<vec3>} [uvNode=null] - The uv node.
154
155
  * @param {?Node<int>} [levelNode=null] - The level node.
155
156
  * @param {?Node<float>} [biasNode=null] - The bias node.
@@ -162,7 +163,7 @@ export const cubeTexture = ( value = EmptyTexture, uvNode = null, levelNode = nu
162
163
  if ( value && value.isCubeTextureNode === true ) {
163
164
 
164
165
  textureNode = nodeObject( value.clone() );
165
- textureNode.referenceNode = value.getSelf(); // Ensure the reference is set to the original node
166
+ textureNode.referenceNode = value; // Ensure the reference is set to the original node
166
167
 
167
168
  if ( uvNode !== null ) textureNode.uvNode = nodeObject( uvNode );
168
169
  if ( levelNode !== null ) textureNode.levelNode = nodeObject( levelNode );
@@ -109,7 +109,9 @@ class InstanceNode extends Node {
109
109
  */
110
110
  setup( builder ) {
111
111
 
112
- const { count, instanceMatrix, instanceColor } = this;
112
+ const { instanceMatrix, instanceColor } = this;
113
+
114
+ const { count } = instanceMatrix;
113
115
 
114
116
  let { instanceMatrixNode, instanceColorNode } = this;
115
117
 
@@ -193,15 +195,33 @@ class InstanceNode extends Node {
193
195
  */
194
196
  update( /*frame*/ ) {
195
197
 
196
- if ( this.instanceMatrix.usage !== DynamicDrawUsage && this.buffer !== null && this.instanceMatrix.version !== this.buffer.version ) {
198
+ if ( this.buffer !== null ) {
199
+
200
+ // keep update ranges in sync
201
+
202
+ this.buffer.clearUpdateRanges();
203
+ this.buffer.updateRanges.push( ... this.instanceMatrix.updateRanges );
197
204
 
198
- this.buffer.version = this.instanceMatrix.version;
205
+ // update version if necessary
206
+
207
+ if ( this.instanceMatrix.usage !== DynamicDrawUsage && this.instanceMatrix.version !== this.buffer.version ) {
208
+
209
+ this.buffer.version = this.instanceMatrix.version;
210
+
211
+ }
199
212
 
200
213
  }
201
214
 
202
- if ( this.instanceColor && this.instanceColor.usage !== DynamicDrawUsage && this.bufferColor !== null && this.instanceColor.version !== this.bufferColor.version ) {
215
+ if ( this.instanceColor && this.bufferColor !== null ) {
216
+
217
+ this.bufferColor.clearUpdateRanges();
218
+ this.bufferColor.updateRanges.push( ... this.instanceColor.updateRanges );
219
+
220
+ if ( this.instanceColor.usage !== DynamicDrawUsage && this.instanceColor.version !== this.bufferColor.version ) {
203
221
 
204
- this.bufferColor.version = this.instanceColor.version;
222
+ this.bufferColor.version = this.instanceColor.version;
223
+
224
+ }
205
225
 
206
226
  }
207
227
 
@@ -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
  }
@@ -1,12 +1,13 @@
1
1
  import { attribute } from '../core/AttributeNode.js';
2
2
  import { cameraViewMatrix } from './Camera.js';
3
3
  import { modelNormalMatrix, modelWorldMatrix } from './ModelNode.js';
4
- import { mat3, vec3, Fn, varying } from '../tsl/TSLBase.js';
4
+ import { mat3, vec3, Fn } from '../tsl/TSLBase.js';
5
5
  import { positionView } from './Position.js';
6
- import { faceDirection } from '../display/FrontFacingNode.js';
6
+ import { directionToFaceDirection } from '../display/FrontFacingNode.js';
7
+ import { warn } from '../../utils.js';
7
8
 
8
9
  /**
9
- * TSL object that represents the normal attribute of the current rendered object.
10
+ * TSL object that represents the normal attribute of the current rendered object in local space.
10
11
  *
11
12
  * @tsl
12
13
  * @type {Node<vec3>}
@@ -14,7 +15,7 @@ import { faceDirection } from '../display/FrontFacingNode.js';
14
15
  export const normalGeometry = /*@__PURE__*/ attribute( 'normal', 'vec3' );
15
16
 
16
17
  /**
17
- * TSL object that represents the vertex normal in local space of the current rendered object.
18
+ * TSL object that represents the vertex normal of the current rendered object in local space.
18
19
  *
19
20
  * @tsl
20
21
  * @type {Node<vec3>}
@@ -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
 
@@ -34,7 +35,7 @@ export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
34
35
  }, 'vec3' ).once() )().toVar( 'normalLocal' );
35
36
 
36
37
  /**
37
- * TSL object that represents the flat vertex normal in view space of the current rendered object.
38
+ * TSL object that represents the flat vertex normal of the current rendered object in view space.
38
39
  *
39
40
  * @tsl
40
41
  * @type {Node<vec3>}
@@ -42,12 +43,12 @@ export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
42
43
  export const normalFlat = /*@__PURE__*/ positionView.dFdx().cross( positionView.dFdy() ).normalize().toVar( 'normalFlat' );
43
44
 
44
45
  /**
45
- * TSL object that represents the vertex normal in view space of the current rendered object.
46
+ * TSL object that represents the vertex normal of the current rendered object in view space.
46
47
  *
47
48
  * @tsl
48
49
  * @type {Node<vec3>}
49
50
  */
50
- export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
51
+ export const normalViewGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
51
52
 
52
53
  let node;
53
54
 
@@ -57,77 +58,99 @@ export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
57
58
 
58
59
  } else {
59
60
 
60
- node = varying( transformNormalToView( normalLocal ), 'v_normalView' ).normalize();
61
+ node = transformNormalToView( normalLocal ).toVarying( 'v_normalViewGeometry' ).normalize();
61
62
 
62
63
  }
63
64
 
64
65
  return node;
65
66
 
66
- }, 'vec3' ).once() )().toVar( 'normalView' );
67
+ }, 'vec3' ).once() )().toVar( 'normalViewGeometry' );
67
68
 
68
69
  /**
69
- * TSL object that represents the vertex normal in world space of the current rendered object.
70
+ * TSL object that represents the vertex normal of the current rendered object in world space.
70
71
  *
71
72
  * @tsl
72
73
  * @type {Node<vec3>}
73
74
  */
74
- export const normalWorld = /*@__PURE__*/ ( Fn( ( builder ) => {
75
+ export const normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
75
76
 
76
- let normal = normalView.transformDirection( cameraViewMatrix );
77
+ let normal = normalViewGeometry.transformDirection( cameraViewMatrix );
77
78
 
78
79
  if ( builder.material.flatShading !== true ) {
79
80
 
80
- normal = varying( normal, 'v_normalWorld' );
81
+ normal = normal.toVarying( 'v_normalWorldGeometry' );
81
82
 
82
83
  }
83
84
 
84
- return normal;
85
+ return normal.normalize().toVar( 'normalWorldGeometry' );
85
86
 
86
- }, 'vec3' ).once() )().normalize().toVar( 'normalWorld' );
87
+ }, 'vec3' ).once() )();
87
88
 
88
89
  /**
89
- * TSL object that represents the transformed vertex normal in view space of the current rendered object.
90
+ * TSL object that represents the vertex normal of the current rendered object in view space.
90
91
  *
91
92
  * @tsl
92
93
  * @type {Node<vec3>}
93
94
  */
94
- export const transformedNormalView = /*@__PURE__*/ ( Fn( ( builder ) => {
95
+ export const normalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, material, context } ) => {
95
96
 
96
- // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
97
+ let node;
98
+
99
+ if ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {
100
+
101
+ node = normalViewGeometry;
97
102
 
98
- let node = builder.context.setupNormal().context( { getUV: null } );
103
+ if ( material.flatShading !== true ) {
99
104
 
100
- if ( builder.material.flatShading !== true ) node = node.mul( faceDirection );
105
+ node = directionToFaceDirection( node );
106
+
107
+ }
108
+
109
+ } else {
110
+
111
+ // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
112
+
113
+ node = context.setupNormal().context( { getUV: null } );
114
+
115
+ }
101
116
 
102
117
  return node;
103
118
 
104
- }, 'vec3' ).once() )().toVar( 'transformedNormalView' );
119
+ }, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'normalView' );
105
120
 
106
121
  /**
107
- * TSL object that represents the transformed vertex normal in world space of the current rendered object.
122
+ * TSL object that represents the vertex normal of the current rendered object in world space.
108
123
  *
109
124
  * @tsl
110
125
  * @type {Node<vec3>}
111
126
  */
112
- export const transformedNormalWorld = /*@__PURE__*/ transformedNormalView.transformDirection( cameraViewMatrix ).toVar( 'transformedNormalWorld' );
127
+ export const normalWorld = /*@__PURE__*/ normalView.transformDirection( cameraViewMatrix ).toVar( 'normalWorld' );
113
128
 
114
129
  /**
115
- * TSL object that represents the transformed clearcoat vertex normal in view space of the current rendered object.
130
+ * TSL object that represents the clearcoat vertex normal of the current rendered object in view space.
116
131
  *
117
132
  * @tsl
118
133
  * @type {Node<vec3>}
119
134
  */
120
- export const transformedClearcoatNormalView = /*@__PURE__*/ ( Fn( ( builder ) => {
135
+ export const clearcoatNormalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, context } ) => {
121
136
 
122
- // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
137
+ let node;
123
138
 
124
- let node = builder.context.setupClearcoatNormal().context( { getUV: null } );
139
+ if ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {
125
140
 
126
- if ( builder.material.flatShading !== true ) node = node.mul( faceDirection );
141
+ node = normalView;
142
+
143
+ } else {
144
+
145
+ // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
146
+
147
+ node = context.setupClearcoatNormal().context( { getUV: null } );
148
+
149
+ }
127
150
 
128
151
  return node;
129
152
 
130
- }, 'vec3' ).once() )().toVar( 'transformedClearcoatNormalView' );
153
+ }, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'clearcoatNormalView' );
131
154
 
132
155
  /**
133
156
  * Transforms the normal with the given matrix.
@@ -174,3 +197,47 @@ export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) =
174
197
  return cameraViewMatrix.transformDirection( transformedNormal );
175
198
 
176
199
  } );
200
+
201
+ // Deprecated
202
+
203
+ /**
204
+ * TSL object that represents the transformed vertex normal of the current rendered object in view space.
205
+ *
206
+ * @tsl
207
+ * @type {Node<vec3>}
208
+ * @deprecated since r178. Use `normalView` instead.
209
+ */
210
+ export const transformedNormalView = ( Fn( () => { // @deprecated, r177
211
+
212
+ warn( 'TSL: "transformedNormalView" is deprecated. Use "normalView" instead.' );
213
+ return normalView;
214
+
215
+ } ).once( [ 'NORMAL', 'VERTEX' ] ) )();
216
+
217
+ /**
218
+ * TSL object that represents the transformed vertex normal of the current rendered object in world space.
219
+ *
220
+ * @tsl
221
+ * @type {Node<vec3>}
222
+ * @deprecated since r178. Use `normalWorld` instead.
223
+ */
224
+ export const transformedNormalWorld = ( Fn( () => { // @deprecated, r177
225
+
226
+ warn( 'TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.' );
227
+ return normalWorld;
228
+
229
+ } ).once( [ 'NORMAL', 'VERTEX' ] ) )();
230
+
231
+ /**
232
+ * TSL object that represents the transformed clearcoat vertex normal of the current rendered object in view space.
233
+ *
234
+ * @tsl
235
+ * @type {Node<vec3>}
236
+ * @deprecated since r178. Use `clearcoatNormalView` instead.
237
+ */
238
+ export const transformedClearcoatNormalView = ( Fn( () => { // @deprecated, r177
239
+
240
+ warn( 'TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.' );
241
+ return clearcoatNormalView;
242
+
243
+ } ).once( [ 'NORMAL', 'VERTEX' ] ) )();
@@ -73,7 +73,7 @@ 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
78
  getNodeType() {
79
79
 
@@ -263,6 +263,6 @@ export const objectViewPosition = /*@__PURE__*/ nodeProxy( Object3DNode, Object3
263
263
  * @tsl
264
264
  * @function
265
265
  * @param {?Object3D} [object3d] - The 3D object.
266
- * @returns {Object3DNode<vec3>}
266
+ * @returns {Object3DNode<float>}
267
267
  */
268
268
  export const objectRadius = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.RADIUS ).setParameterLength( 1 );