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
@@ -0,0 +1,89 @@
1
+ import Node from './Node.js';
2
+ import { nodeObject } from '../tsl/TSLCore.js';
3
+
4
+ /**
5
+ * This node is used to build a sub-build in the node system.
6
+ *
7
+ * @augments Node
8
+ * @param {Node} node - The node to be built in the sub-build.
9
+ * @param {string} name - The name of the sub-build.
10
+ * @param {?string} [nodeType=null] - The type of the node, if known.
11
+ */
12
+ class SubBuildNode extends Node {
13
+
14
+ static get type() {
15
+
16
+ return 'SubBuild';
17
+
18
+ }
19
+
20
+ constructor( node, name, nodeType = null ) {
21
+
22
+ super( nodeType );
23
+
24
+ /**
25
+ * The node to be built in the sub-build.
26
+ *
27
+ * @type {Node}
28
+ */
29
+ this.node = node;
30
+
31
+ /**
32
+ * The name of the sub-build.
33
+ *
34
+ * @type {string}
35
+ */
36
+ this.name = name;
37
+
38
+ /**
39
+ * This flag can be used for type testing.
40
+ *
41
+ * @type {boolean}
42
+ * @readonly
43
+ * @default true
44
+ */
45
+ this.isSubBuildNode = true;
46
+
47
+ }
48
+
49
+ getNodeType( builder ) {
50
+
51
+ if ( this.nodeType !== null ) return this.nodeType;
52
+
53
+ builder.addSubBuild( this.name );
54
+
55
+ const nodeType = this.node.getNodeType( builder );
56
+
57
+ builder.removeSubBuild();
58
+
59
+ return nodeType;
60
+
61
+ }
62
+
63
+ build( builder, ...params ) {
64
+
65
+ builder.addSubBuild( this.name );
66
+
67
+ const data = this.node.build( builder, ...params );
68
+
69
+ builder.removeSubBuild();
70
+
71
+ return data;
72
+
73
+ }
74
+
75
+ }
76
+
77
+ export default SubBuildNode;
78
+
79
+ /**
80
+ * Creates a new sub-build node.
81
+ *
82
+ * @tsl
83
+ * @function
84
+ * @param {Node} node - The node to be built in the sub-build.
85
+ * @param {string} name - The name of the sub-build.
86
+ * @param {?string} [type=null] - The type of the node, if known.
87
+ * @returns {Node} A node object wrapping the SubBuildNode instance.
88
+ */
89
+ export const subBuild = ( node, name, type = null ) => nodeObject( new SubBuildNode( nodeObject( node ), name, type ) );
@@ -1,6 +1,8 @@
1
1
  import InputNode from './InputNode.js';
2
2
  import { objectGroup } from './UniformGroupNode.js';
3
3
  import { nodeObject, getConstNodeType } from '../tsl/TSLCore.js';
4
+ import { getValueFromType } from './NodeUtils.js';
5
+ import { warn } from '../../utils.js';
4
6
 
5
7
  /**
6
8
  * Class for representing a uniform.
@@ -59,7 +61,7 @@ class UniformNode extends InputNode {
59
61
  * @param {string} name - The name of the uniform.
60
62
  * @return {UniformNode} A reference to this node.
61
63
  */
62
- label( name ) {
64
+ setName( name ) {
63
65
 
64
66
  this.name = name;
65
67
 
@@ -67,6 +69,21 @@ class UniformNode extends InputNode {
67
69
 
68
70
  }
69
71
 
72
+ /**
73
+ * Sets the {@link UniformNode#name} property.
74
+ *
75
+ * @deprecated
76
+ * @param {string} name - The name of the uniform.
77
+ * @return {UniformNode} A reference to this node.
78
+ */
79
+ label( name ) {
80
+
81
+ warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
82
+
83
+ return this.setName( name );
84
+
85
+ }
86
+
70
87
  /**
71
88
  * Sets the {@link UniformNode#groupNode} property.
72
89
  *
@@ -107,13 +124,11 @@ class UniformNode extends InputNode {
107
124
 
108
125
  onUpdate( callback, updateType ) {
109
126
 
110
- const self = this.getSelf();
111
-
112
- callback = callback.bind( self );
127
+ callback = callback.bind( this );
113
128
 
114
129
  return super.onUpdate( ( frame ) => {
115
130
 
116
- const value = callback( frame, self );
131
+ const value = callback( frame, this );
117
132
 
118
133
  if ( value !== undefined ) {
119
134
 
@@ -125,6 +140,20 @@ class UniformNode extends InputNode {
125
140
 
126
141
  }
127
142
 
143
+ getInputType( builder ) {
144
+
145
+ let type = super.getInputType( builder );
146
+
147
+ if ( type === 'bool' ) {
148
+
149
+ type = 'uint';
150
+
151
+ }
152
+
153
+ return type;
154
+
155
+ }
156
+
128
157
  generate( builder, output ) {
129
158
 
130
159
  const type = this.getNodeType( builder );
@@ -143,12 +172,41 @@ class UniformNode extends InputNode {
143
172
 
144
173
  const sharedNodeType = sharedNode.getInputType( builder );
145
174
 
146
- const nodeUniform = builder.getUniformFromNode( sharedNode, sharedNodeType, builder.shaderStage, this.name || builder.context.label );
147
- const propertyName = builder.getPropertyName( nodeUniform );
175
+ const nodeUniform = builder.getUniformFromNode( sharedNode, sharedNodeType, builder.shaderStage, this.name || builder.context.nodeName );
176
+ const uniformName = builder.getPropertyName( nodeUniform );
177
+
178
+ if ( builder.context.nodeName !== undefined ) delete builder.context.nodeName;
179
+
180
+ //
181
+
182
+ let snippet = uniformName;
183
+
184
+ if ( type === 'bool' ) {
185
+
186
+ // cache to variable
187
+
188
+ const nodeData = builder.getDataFromNode( this );
189
+
190
+ let propertyName = nodeData.propertyName;
191
+
192
+ if ( propertyName === undefined ) {
193
+
194
+ const nodeVar = builder.getVarFromNode( this, null, 'bool' );
195
+ propertyName = builder.getPropertyName( nodeVar );
196
+
197
+ nodeData.propertyName = propertyName;
148
198
 
149
- if ( builder.context.label !== undefined ) delete builder.context.label;
199
+ snippet = builder.format( uniformName, sharedNodeType, type );
150
200
 
151
- return builder.format( propertyName, type, output );
201
+ builder.addLineFlowCode( `${ propertyName } = ${ snippet }`, this );
202
+
203
+ }
204
+
205
+ snippet = propertyName;
206
+
207
+ }
208
+
209
+ return builder.format( snippet, type, output );
152
210
 
153
211
  }
154
212
 
@@ -161,16 +219,24 @@ export default UniformNode;
161
219
  *
162
220
  * @tsl
163
221
  * @function
164
- * @param {any} arg1 - The value of this node. Usually a JS primitive or three.js object (vector, matrix, color, texture).
165
- * @param {string} [arg2] - The node type. If no explicit type is defined, the node tries to derive the type from its value.
222
+ * @param {any|string} value - The value of this uniform or your type. Usually a JS primitive or three.js object (vector, matrix, color, texture).
223
+ * @param {string} [type] - The node type. If no explicit type is defined, the node tries to derive the type from its value.
166
224
  * @returns {UniformNode}
167
225
  */
168
- export const uniform = ( arg1, arg2 ) => {
226
+ export const uniform = ( value, type ) => {
169
227
 
170
- const nodeType = getConstNodeType( arg2 || arg1 );
228
+ const nodeType = getConstNodeType( type || value );
229
+
230
+ if ( nodeType === value ) {
231
+
232
+ // if the value is a type but no having a value
233
+
234
+ value = getValueFromType( nodeType );
235
+
236
+ }
171
237
 
172
238
  // @TODO: get ConstNode from .traverse() in the future
173
- const value = ( arg1 && arg1.isNode === true ) ? ( arg1.node && arg1.node.value ) || arg1.value : arg1;
239
+ value = ( value && value.isNode === true ) ? ( value.node && value.node.value ) || value.value : value;
174
240
 
175
241
  return nodeObject( new UniformNode( value, nodeType ) );
176
242
 
@@ -1,5 +1,6 @@
1
1
  import Node from './Node.js';
2
2
  import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
3
+ import { error } from '../../utils.js';
3
4
 
4
5
  /**
5
6
  * Class for representing shader variables as nodes. Variables are created from
@@ -81,6 +82,45 @@ class VarNode extends Node {
81
82
  */
82
83
  this.parents = true;
83
84
 
85
+ /**
86
+ * This flag is used to indicate that this node is used for intent.
87
+ *
88
+ * @type {boolean}
89
+ * @default false
90
+ */
91
+ this.intent = false;
92
+
93
+ }
94
+
95
+ /**
96
+ * Sets the intent flag for this node.
97
+ *
98
+ * This flag is used to indicate that this node is used for intent
99
+ * and should not be built directly. Instead, it is used to indicate that
100
+ * the node should be treated as a variable intent.
101
+ *
102
+ * It's useful for assigning variables without needing creating a new variable node.
103
+ *
104
+ * @param {boolean} value - The value to set for the intent flag.
105
+ * @returns {VarNode} This node.
106
+ */
107
+ setIntent( value ) {
108
+
109
+ this.intent = value;
110
+
111
+ return this;
112
+
113
+ }
114
+
115
+ /**
116
+ * Returns the intent flag of this node.
117
+ *
118
+ * @return {boolean} The intent flag.
119
+ */
120
+ getIntent() {
121
+
122
+ return this.intent;
123
+
84
124
  }
85
125
 
86
126
  getMemberType( builder, name ) {
@@ -101,6 +141,70 @@ class VarNode extends Node {
101
141
 
102
142
  }
103
143
 
144
+ getArrayCount( builder ) {
145
+
146
+ return this.node.getArrayCount( builder );
147
+
148
+ }
149
+
150
+ isAssign( builder ) {
151
+
152
+ const properties = builder.getNodeProperties( this );
153
+
154
+ let assign = properties.assign;
155
+
156
+ if ( assign !== true ) {
157
+
158
+ if ( this.node.isShaderCallNodeInternal && this.node.shaderNode.getLayout() === null ) {
159
+
160
+ if ( builder.fnCall && builder.fnCall.shaderNode ) {
161
+
162
+ const shaderNodeData = builder.getDataFromNode( this.node.shaderNode );
163
+
164
+ if ( shaderNodeData.hasLoop ) {
165
+
166
+ assign = true;
167
+
168
+ }
169
+
170
+ }
171
+
172
+ }
173
+
174
+ }
175
+
176
+ return assign;
177
+
178
+ }
179
+
180
+ build( ...params ) {
181
+
182
+ const builder = params[ 0 ];
183
+
184
+ if ( this._hasStack( builder ) === false && builder.buildStage === 'setup' ) {
185
+
186
+ if ( builder.context.nodeLoop || builder.context.nodeBlock ) {
187
+
188
+ builder.getBaseStack().addToStack( this );
189
+
190
+ }
191
+
192
+ }
193
+
194
+ if ( this.intent === true ) {
195
+
196
+ if ( this.isAssign( builder ) !== true ) {
197
+
198
+ return this.node.build( ...params );
199
+
200
+ }
201
+
202
+ }
203
+
204
+ return super.build( ...params );
205
+
206
+ }
207
+
104
208
  generate( builder ) {
105
209
 
106
210
  const { node, name, readOnly } = this;
@@ -119,7 +223,23 @@ class VarNode extends Node {
119
223
 
120
224
  }
121
225
 
122
- const vectorType = builder.getVectorType( this.getNodeType( builder ) );
226
+ const nodeType = this.getNodeType( builder );
227
+
228
+ if ( nodeType == 'void' ) {
229
+
230
+ if ( this.intent !== true ) {
231
+
232
+ error( 'TSL: ".toVar()" can not be used with void type.' );
233
+
234
+ }
235
+
236
+ const snippet = node.build( builder );
237
+
238
+ return snippet;
239
+
240
+ }
241
+
242
+ const vectorType = builder.getVectorType( nodeType );
123
243
  const snippet = node.build( builder, vectorType );
124
244
 
125
245
  const nodeVar = builder.getVarFromNode( this, name, vectorType, undefined, shouldTreatAsReadOnly );
@@ -138,7 +258,7 @@ class VarNode extends Node {
138
258
 
139
259
  } else {
140
260
 
141
- const count = builder.getArrayCount( node );
261
+ const count = node.getArrayCount( builder );
142
262
 
143
263
  declarationPrefix = `const ${ builder.getVar( nodeVar.type, propertyName, count ) }`;
144
264
 
@@ -152,6 +272,14 @@ class VarNode extends Node {
152
272
 
153
273
  }
154
274
 
275
+ _hasStack( builder ) {
276
+
277
+ const nodeData = builder.getDataFromNode( this );
278
+
279
+ return nodeData.stack !== undefined;
280
+
281
+ }
282
+
155
283
  }
156
284
 
157
285
  export default VarNode;
@@ -189,28 +317,26 @@ export const Var = ( node, name = null ) => createVar( node, name ).toStack();
189
317
  */
190
318
  export const Const = ( node, name = null ) => createVar( node, name, true ).toStack();
191
319
 
192
- // Method chaining
193
-
194
- addMethodChaining( 'toVar', Var );
195
- addMethodChaining( 'toConst', Const );
196
-
197
- // Deprecated
320
+ //
321
+ //
198
322
 
199
323
  /**
324
+ * TSL function for creating a var intent node.
325
+ *
200
326
  * @tsl
201
327
  * @function
202
- * @deprecated since r170. Use `Var( node )` or `node.toVar()` instead.
203
- *
204
- * @param {any} node
328
+ * @param {Node} node - The node for which a variable should be created.
329
+ * @param {?string} name - The name of the variable in the shader.
205
330
  * @returns {VarNode}
206
331
  */
207
- export const temp = ( node ) => { // @deprecated, r170
208
-
209
- console.warn( 'TSL: "temp( node )" is deprecated. Use "Var( node )" or "node.toVar()" instead.' );
332
+ export const VarIntent = ( node ) => {
210
333
 
211
- return createVar( node );
334
+ return createVar( node ).setIntent( true ).toStack();
212
335
 
213
336
  };
214
337
 
215
- addMethodChaining( 'temp', temp );
338
+ // Method chaining
216
339
 
340
+ addMethodChaining( 'toVar', Var );
341
+ addMethodChaining( 'toConst', Const );
342
+ addMethodChaining( 'toVarIntent', VarIntent );
@@ -1,6 +1,8 @@
1
1
  import Node from './Node.js';
2
2
  import { NodeShaderStage } from './constants.js';
3
3
  import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
4
+ import { subBuild } from './SubBuildNode.js';
5
+ import { warn } from '../../utils.js';
4
6
 
5
7
  /**
6
8
  * Class for representing shader varyings as nodes. Varyings are create from
@@ -131,7 +133,7 @@ class VaryingNode extends Node {
131
133
  const interpolationSampling = this.interpolationSampling;
132
134
 
133
135
  properties.varying = varying = builder.getVaryingFromNode( this, name, type, interpolationType, interpolationSampling );
134
- properties.node = this.node;
136
+ properties.node = subBuild( this.node, 'VERTEX' );
135
137
 
136
138
  }
137
139
 
@@ -160,18 +162,19 @@ class VaryingNode extends Node {
160
162
 
161
163
  generate( builder ) {
162
164
 
165
+ const propertyKey = builder.getSubBuildProperty( 'property', builder.currentStack );
163
166
  const properties = builder.getNodeProperties( this );
164
167
  const varying = this.setupVarying( builder );
165
168
 
166
- if ( properties.propertyName === undefined ) {
169
+ if ( properties[ propertyKey ] === undefined ) {
167
170
 
168
171
  const type = this.getNodeType( builder );
169
172
  const propertyName = builder.getPropertyName( varying, NodeShaderStage.VERTEX );
170
173
 
171
174
  // force node run in vertex stage
172
- builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, this.node, type, propertyName );
175
+ builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, properties.node, type, propertyName );
173
176
 
174
- properties.propertyName = propertyName;
177
+ properties[ propertyKey ] = propertyName;
175
178
 
176
179
  }
177
180
 
@@ -211,14 +214,14 @@ addMethodChaining( 'toVertexStage', vertexStage );
211
214
 
212
215
  addMethodChaining( 'varying', ( ...params ) => { // @deprecated, r173
213
216
 
214
- console.warn( 'THREE.TSL: .varying() has been renamed to .toVarying().' );
217
+ warn( 'TSL: .varying() has been renamed to .toVarying().' );
215
218
  return varying( ...params );
216
219
 
217
220
  } );
218
221
 
219
222
  addMethodChaining( 'vertexStage', ( ...params ) => { // @deprecated, r173
220
223
 
221
- console.warn( 'THREE.TSL: .vertexStage() has been renamed to .toVertexStage().' );
224
+ warn( 'TSL: .vertexStage() has been renamed to .toVertexStage().' );
222
225
  return varying( ...params );
223
226
 
224
227
  } );
@@ -1,5 +1,6 @@
1
1
  import { Fn, If, vec4 } from '../tsl/TSLBase.js';
2
2
  import { mix, min, step } from '../math/MathNode.js';
3
+ import { warn } from '../../utils.js';
3
4
 
4
5
  /**
5
6
  * Represents a "Color Burn" blend mode.
@@ -143,7 +144,7 @@ export const blendColor = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
143
144
  * @param {Node<vec4>} color - The input color with non-premultiplied alpha.
144
145
  * @return {Node<vec4>} The color with premultiplied alpha.
145
146
  */
146
- export const premult = /*@__PURE__*/ Fn( ( [ color ] ) => {
147
+ export const premultiplyAlpha = /*@__PURE__*/ Fn( ( [ color ] ) => {
147
148
 
148
149
  return vec4( color.rgb.mul( color.a ), color.a );
149
150
 
@@ -162,7 +163,7 @@ export const premult = /*@__PURE__*/ Fn( ( [ color ] ) => {
162
163
  * @param {Node<vec4>} color - The input color with premultiplied alpha.
163
164
  * @return {Node<vec4>} The color with non-premultiplied alpha.
164
165
  */
165
- export const unpremult = /*@__PURE__*/ Fn( ( [ color ] ) => {
166
+ export const unpremultiplyAlpha = /*@__PURE__*/ Fn( ( [ color ] ) => {
166
167
 
167
168
  If( color.a.equal( 0.0 ), () => vec4( 0.0 ) );
168
169
 
@@ -183,7 +184,7 @@ export const unpremult = /*@__PURE__*/ Fn( ( [ color ] ) => {
183
184
  */
184
185
  export const burn = ( ...params ) => { // @deprecated, r171
185
186
 
186
- console.warn( 'THREE.TSL: "burn" has been renamed. Use "blendBurn" instead.' );
187
+ warn( 'TSL: "burn" has been renamed. Use "blendBurn" instead.' );
187
188
  return blendBurn( params );
188
189
 
189
190
  };
@@ -198,7 +199,7 @@ export const burn = ( ...params ) => { // @deprecated, r171
198
199
  */
199
200
  export const dodge = ( ...params ) => { // @deprecated, r171
200
201
 
201
- console.warn( 'THREE.TSL: "dodge" has been renamed. Use "blendDodge" instead.' );
202
+ warn( 'TSL: "dodge" has been renamed. Use "blendDodge" instead.' );
202
203
  return blendDodge( params );
203
204
 
204
205
  };
@@ -213,7 +214,7 @@ export const dodge = ( ...params ) => { // @deprecated, r171
213
214
  */
214
215
  export const screen = ( ...params ) => { // @deprecated, r171
215
216
 
216
- console.warn( 'THREE.TSL: "screen" has been renamed. Use "blendScreen" instead.' );
217
+ warn( 'TSL: "screen" has been renamed. Use "blendScreen" instead.' );
217
218
  return blendScreen( params );
218
219
 
219
220
  };
@@ -228,7 +229,7 @@ export const screen = ( ...params ) => { // @deprecated, r171
228
229
  */
229
230
  export const overlay = ( ...params ) => { // @deprecated, r171
230
231
 
231
- console.warn( 'THREE.TSL: "overlay" has been renamed. Use "blendOverlay" instead.' );
232
+ warn( 'TSL: "overlay" has been renamed. Use "blendOverlay" instead.' );
232
233
  return blendOverlay( params );
233
234
 
234
235
  };
@@ -11,7 +11,7 @@ import { Fn, nodeProxy, float, vec2 } from '../tsl/TSLBase.js';
11
11
  const dHdxy_fwd = Fn( ( { textureNode, bumpScale } ) => {
12
12
 
13
13
  // It's used to preserve the same TextureNode instance
14
- const sampleTexture = ( callback ) => textureNode.cache().context( { getUV: ( texNode ) => callback( texNode.uvNode || uv() ), forceUVContext: true } );
14
+ const sampleTexture = ( callback ) => textureNode.isolate().context( { getUV: ( texNode ) => callback( texNode.uvNode || uv() ), forceUVContext: true } );
15
15
 
16
16
  const Hll = float( sampleTexture( ( uvNode ) => uvNode ) );
17
17
 
@@ -82,7 +82,7 @@ export const hue = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
82
82
  * @function
83
83
  * @param {Node<vec3>} color - The color value to compute the luminance for.
84
84
  * @param {?Node<vec3>} luminanceCoefficients - The luminance coefficients. By default predefined values of the current working color space are used.
85
- * @return {Node<vec3>} The luminance.
85
+ * @return {Node<float>} The luminance.
86
86
  */
87
87
  export const luminance = (
88
88
  color,
@@ -1,7 +1,7 @@
1
1
  import Node from '../core/Node.js';
2
- import { nodeImmutable, float } from '../tsl/TSLBase.js';
2
+ import { nodeImmutable, float, Fn } from '../tsl/TSLBase.js';
3
3
 
4
- import { BackSide, WebGLCoordinateSystem } from '../../constants.js';
4
+ import { BackSide, DoubleSide } from '../../constants.js';
5
5
 
6
6
  /**
7
7
  * This node can be used to evaluate whether a primitive is front or back facing.
@@ -36,15 +36,15 @@ class FrontFacingNode extends Node {
36
36
 
37
37
  generate( builder ) {
38
38
 
39
- const { renderer, material } = builder;
39
+ if ( builder.shaderStage !== 'fragment' ) return 'true';
40
40
 
41
- if ( renderer.coordinateSystem === WebGLCoordinateSystem ) {
41
+ //
42
42
 
43
- if ( material.side === BackSide ) {
43
+ const { material } = builder;
44
44
 
45
- return 'false';
45
+ if ( material.side === BackSide ) {
46
46
 
47
- }
47
+ return 'false';
48
48
 
49
49
  }
50
50
 
@@ -72,3 +72,31 @@ export const frontFacing = /*@__PURE__*/ nodeImmutable( FrontFacingNode );
72
72
  * @type {Node<float>}
73
73
  */
74
74
  export const faceDirection = /*@__PURE__*/ float( frontFacing ).mul( 2.0 ).sub( 1.0 );
75
+
76
+ /**
77
+ * Converts a direction vector to a face direction vector based on the material's side.
78
+ *
79
+ * If the material is set to `BackSide`, the direction is inverted.
80
+ * If the material is set to `DoubleSide`, the direction is multiplied by `faceDirection`.
81
+ *
82
+ * @tsl
83
+ * @param {Node<vec3>} direction - The direction vector to convert.
84
+ * @returns {Node<vec3>} The converted direction vector.
85
+ */
86
+ export const directionToFaceDirection = /*@__PURE__*/ Fn( ( [ direction ], { material } ) => {
87
+
88
+ const side = material.side;
89
+
90
+ if ( side === BackSide ) {
91
+
92
+ direction = direction.mul( - 1.0 );
93
+
94
+ } else if ( side === DoubleSide ) {
95
+
96
+ direction = direction.mul( faceDirection );
97
+
98
+ }
99
+
100
+ return direction;
101
+
102
+ } );