super-three 0.165.0 → 0.168.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 (462) hide show
  1. package/build/three.cjs +854 -410
  2. package/build/three.module.js +849 -411
  3. package/build/three.module.min.js +1 -1
  4. package/build/three.webgpu.js +77755 -0
  5. package/build/three.webgpu.min.js +6 -0
  6. package/examples/jsm/Addons.js +5 -2
  7. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  8. package/examples/jsm/capabilities/WebGL.js +27 -21
  9. package/examples/jsm/controls/ArcballControls.js +174 -158
  10. package/examples/jsm/controls/DragControls.js +260 -132
  11. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  12. package/examples/jsm/controls/FlyControls.js +194 -188
  13. package/examples/jsm/controls/OrbitControls.js +777 -786
  14. package/examples/jsm/controls/PointerLockControls.js +24 -15
  15. package/examples/jsm/controls/TrackballControls.js +453 -452
  16. package/examples/jsm/csm/CSMShader.js +4 -4
  17. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  18. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  19. package/examples/jsm/effects/StereoEffect.js +6 -1
  20. package/examples/jsm/environments/RoomEnvironment.js +1 -1
  21. package/examples/jsm/exporters/GLTFExporter.js +13 -4
  22. package/examples/jsm/exporters/USDZExporter.js +29 -8
  23. package/examples/jsm/geometries/TeapotGeometry.js +1 -1
  24. package/examples/jsm/helpers/LightProbeHelper.js +42 -43
  25. package/examples/jsm/helpers/ViewHelper.js +51 -2
  26. package/examples/jsm/libs/tween.module.js +64 -75
  27. package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
  28. package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
  29. package/examples/jsm/lines/webgpu/Line2.js +20 -0
  30. package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
  31. package/examples/jsm/loaders/FBXLoader.js +23 -45
  32. package/examples/jsm/loaders/GLTFLoader.js +10 -4
  33. package/examples/jsm/loaders/KTX2Loader.js +19 -7
  34. package/examples/jsm/loaders/MaterialXLoader.js +10 -10
  35. package/examples/jsm/loaders/PCDLoader.js +9 -9
  36. package/examples/jsm/loaders/USDZLoader.js +124 -76
  37. package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
  38. package/examples/jsm/loaders/VTKLoader.js +76 -3
  39. package/examples/jsm/misc/GPUComputationRenderer.js +9 -19
  40. package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
  41. package/examples/jsm/objects/InstancedPoints.js +2 -2
  42. package/examples/jsm/objects/SkyMesh.js +188 -0
  43. package/examples/jsm/objects/Water2Mesh.js +159 -0
  44. package/examples/jsm/objects/WaterMesh.js +102 -0
  45. package/examples/jsm/physics/RapierPhysics.js +20 -0
  46. package/examples/jsm/postprocessing/OutlinePass.js +31 -46
  47. package/examples/jsm/postprocessing/RenderTransitionPass.js +13 -38
  48. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  49. package/examples/jsm/postprocessing/SSAOPass.js +6 -9
  50. package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
  51. package/examples/jsm/shaders/BleachBypassShader.js +1 -2
  52. package/examples/jsm/shaders/ColorifyShader.js +1 -2
  53. package/examples/jsm/shaders/FXAAShader.js +0 -2
  54. package/examples/jsm/shaders/GTAOShader.js +1 -1
  55. package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
  56. package/examples/jsm/shaders/OutputShader.js +1 -1
  57. package/examples/jsm/transpiler/GLSLDecoder.js +46 -4
  58. package/examples/jsm/transpiler/TSLEncoder.js +24 -22
  59. package/examples/jsm/utils/TextureUtils.js +1 -1
  60. package/package.json +8 -6
  61. package/src/Three.WebGPU.js +200 -0
  62. package/src/Three.js +3 -0
  63. package/src/constants.js +4 -1
  64. package/src/core/Object3D.js +22 -22
  65. package/src/extras/Controls.js +32 -0
  66. package/src/extras/TextureUtils.js +210 -0
  67. package/src/lights/Light.js +1 -0
  68. package/src/lights/LightShadow.js +5 -0
  69. package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
  70. package/src/loaders/ObjectLoader.js +33 -2
  71. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeLoader.js +6 -4
  72. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeMaterialLoader.js +2 -2
  73. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeObjectLoader.js +2 -1
  74. package/src/materials/Material.js +7 -1
  75. package/{examples/jsm/nodes/materials → src/materials/nodes}/InstancedPointsNodeMaterial.js +36 -27
  76. package/{examples/jsm/nodes/materials → src/materials/nodes}/Line2NodeMaterial.js +37 -40
  77. package/src/materials/nodes/LineBasicNodeMaterial.js +27 -0
  78. package/{examples/jsm/nodes/materials → src/materials/nodes}/LineDashedNodeMaterial.js +10 -11
  79. package/src/materials/nodes/MeshBasicNodeMaterial.js +73 -0
  80. package/src/materials/nodes/MeshLambertNodeMaterial.js +43 -0
  81. package/src/materials/nodes/MeshMatcapNodeMaterial.js +53 -0
  82. package/src/materials/nodes/MeshNormalNodeMaterial.js +40 -0
  83. package/src/materials/nodes/MeshPhongNodeMaterial.js +74 -0
  84. package/{examples/jsm/nodes/materials → src/materials/nodes}/MeshPhysicalNodeMaterial.js +22 -20
  85. package/{examples/jsm/nodes/materials → src/materials/nodes}/MeshSSSNodeMaterial.js +6 -6
  86. package/{examples/jsm/nodes/materials → src/materials/nodes}/MeshStandardNodeMaterial.js +28 -11
  87. package/src/materials/nodes/MeshToonNodeMaterial.js +34 -0
  88. package/{examples/jsm/nodes/materials → src/materials/nodes}/NodeMaterial.js +142 -96
  89. package/{examples/jsm/nodes/materials/Materials.js → src/materials/nodes/NodeMaterials.js} +1 -1
  90. package/{examples/jsm/nodes/materials → src/materials/nodes}/PointsNodeMaterial.js +5 -6
  91. package/src/materials/nodes/ShadowNodeMaterial.js +34 -0
  92. package/{examples/jsm/nodes/materials → src/materials/nodes}/SpriteNodeMaterial.js +13 -13
  93. package/{examples/jsm/nodes/materials → src/materials/nodes}/VolumeNodeMaterial.js +14 -16
  94. package/src/math/Box2.js +4 -4
  95. package/src/math/Box3.js +6 -6
  96. package/src/math/ColorManagement.js +10 -0
  97. package/src/math/Matrix2.js +54 -0
  98. package/src/math/Vector4.js +13 -0
  99. package/src/nodes/Nodes.js +164 -0
  100. package/src/nodes/TSL.js +176 -0
  101. package/{examples/jsm → src}/nodes/accessors/AccessorsUtils.js +8 -8
  102. package/src/nodes/accessors/BatchNode.js +124 -0
  103. package/{examples/jsm/nodes/accessors/BitangentNode.js → src/nodes/accessors/Bitangent.js} +9 -9
  104. package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +41 -6
  105. package/{examples/jsm → src}/nodes/accessors/BufferNode.js +4 -4
  106. package/src/nodes/accessors/Camera.js +19 -0
  107. package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +16 -14
  108. package/src/nodes/accessors/CubeTextureNode.js +76 -0
  109. package/src/nodes/accessors/InstanceNode.js +144 -0
  110. package/src/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
  111. package/{examples/jsm → src}/nodes/accessors/MaterialNode.js +66 -49
  112. package/src/nodes/accessors/MaterialProperties.js +3 -0
  113. package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +6 -4
  114. package/src/nodes/accessors/ModelNode.js +37 -0
  115. package/{examples/jsm → src}/nodes/accessors/ModelViewProjectionNode.js +6 -7
  116. package/{examples/jsm → src}/nodes/accessors/MorphNode.js +35 -31
  117. package/src/nodes/accessors/Normal.js +62 -0
  118. package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +11 -11
  119. package/src/nodes/accessors/PointUVNode.js +26 -0
  120. package/src/nodes/accessors/Position.js +10 -0
  121. package/src/nodes/accessors/ReferenceBaseNode.js +143 -0
  122. package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +14 -8
  123. package/src/nodes/accessors/ReflectVector.js +10 -0
  124. package/{examples/jsm → src}/nodes/accessors/RendererReferenceNode.js +6 -6
  125. package/{examples/jsm → src}/nodes/accessors/SceneNode.js +5 -6
  126. package/src/nodes/accessors/SkinningNode.js +187 -0
  127. package/{examples/jsm → src}/nodes/accessors/StorageBufferNode.js +54 -6
  128. package/{examples/jsm → src}/nodes/accessors/StorageTextureNode.js +16 -7
  129. package/src/nodes/accessors/Tangent.js +22 -0
  130. package/{examples/jsm → src}/nodes/accessors/Texture3DNode.js +11 -11
  131. package/{examples/jsm/nodes/accessors/TextureBicubicNode.js → src/nodes/accessors/TextureBicubic.js} +3 -32
  132. package/{examples/jsm → src}/nodes/accessors/TextureNode.js +69 -37
  133. package/{examples/jsm → src}/nodes/accessors/TextureSizeNode.js +4 -6
  134. package/{examples/jsm/nodes/accessors/UniformsNode.js → src/nodes/accessors/UniformArrayNode.js} +24 -9
  135. package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +4 -4
  136. package/src/nodes/accessors/VelocityNode.js +83 -0
  137. package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +6 -5
  138. package/{examples/jsm → src}/nodes/code/CodeNode.js +5 -5
  139. package/{examples/jsm → src}/nodes/code/ExpressionNode.js +4 -4
  140. package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +5 -5
  141. package/{examples/jsm → src}/nodes/code/FunctionNode.js +5 -23
  142. package/{examples/jsm → src}/nodes/code/ScriptableNode.js +18 -6
  143. package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +6 -7
  144. package/{examples/jsm → src}/nodes/core/AssignNode.js +5 -5
  145. package/{examples/jsm → src}/nodes/core/AttributeNode.js +22 -21
  146. package/{examples/jsm → src}/nodes/core/BypassNode.js +5 -5
  147. package/src/nodes/core/CacheNode.js +46 -0
  148. package/{examples/jsm → src}/nodes/core/ConstNode.js +2 -2
  149. package/{examples/jsm → src}/nodes/core/ContextNode.js +17 -11
  150. package/{examples/jsm → src}/nodes/core/IndexNode.js +17 -6
  151. package/{examples/jsm → src}/nodes/core/InputNode.js +2 -2
  152. package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
  153. package/src/nodes/core/MRTNode.js +82 -0
  154. package/{examples/jsm → src}/nodes/core/Node.js +57 -31
  155. package/{examples/jsm → src}/nodes/core/NodeBuilder.js +216 -65
  156. package/src/nodes/core/NodeCache.js +36 -0
  157. package/{examples/jsm → src}/nodes/core/NodeFrame.js +42 -0
  158. package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
  159. package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
  160. package/{examples/jsm → src}/nodes/core/NodeUtils.js +7 -1
  161. package/{examples/jsm → src}/nodes/core/OutputStructNode.js +4 -4
  162. package/{examples/jsm → src}/nodes/core/ParameterNode.js +4 -4
  163. package/src/nodes/core/PropertyNode.js +84 -0
  164. package/{examples/jsm → src}/nodes/core/StackNode.js +26 -10
  165. package/{examples/jsm → src}/nodes/core/StructTypeNode.js +2 -2
  166. package/{examples/jsm → src}/nodes/core/TempNode.js +4 -4
  167. package/src/nodes/core/UniformGroupNode.js +55 -0
  168. package/{examples/jsm → src}/nodes/core/UniformNode.js +14 -5
  169. package/{examples/jsm → src}/nodes/core/VarNode.js +8 -12
  170. package/{examples/jsm → src}/nodes/core/VaryingNode.js +13 -5
  171. package/{examples/jsm → src}/nodes/display/AfterImageNode.js +27 -35
  172. package/src/nodes/display/AnaglyphPassNode.js +61 -0
  173. package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +27 -30
  174. package/src/nodes/display/BleachBypass.js +26 -0
  175. package/src/nodes/display/BlendMode.js +54 -0
  176. package/src/nodes/display/BloomNode.js +335 -0
  177. package/{examples/jsm → src}/nodes/display/BumpMapNode.js +7 -12
  178. package/src/nodes/display/ColorAdjustment.js +46 -0
  179. package/src/nodes/display/ColorSpaceFunctions.js +38 -0
  180. package/src/nodes/display/ColorSpaceNode.js +85 -0
  181. package/src/nodes/display/DenoiseNode.js +201 -0
  182. package/src/nodes/display/DepthOfFieldNode.js +121 -0
  183. package/src/nodes/display/DotScreenNode.js +63 -0
  184. package/src/nodes/display/FXAANode.js +329 -0
  185. package/src/nodes/display/FilmNode.js +53 -0
  186. package/src/nodes/display/FrontFacingNode.js +41 -0
  187. package/src/nodes/display/GTAONode.js +328 -0
  188. package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +44 -24
  189. package/src/nodes/display/Lut3DNode.js +54 -0
  190. package/src/nodes/display/MotionBlur.js +25 -0
  191. package/{examples/jsm → src}/nodes/display/NormalMapNode.js +9 -11
  192. package/src/nodes/display/ParallaxBarrierPassNode.js +55 -0
  193. package/src/nodes/display/PassNode.js +367 -0
  194. package/src/nodes/display/PixelationPassNode.js +206 -0
  195. package/{examples/jsm → src}/nodes/display/PosterizeNode.js +4 -6
  196. package/src/nodes/display/RGBShiftNode.js +50 -0
  197. package/src/nodes/display/RenderOutputNode.js +56 -0
  198. package/src/nodes/display/SSAAPassNode.js +284 -0
  199. package/src/nodes/display/Sepia.js +17 -0
  200. package/src/nodes/display/SobelOperatorNode.js +123 -0
  201. package/src/nodes/display/StereoCompositePassNode.js +107 -0
  202. package/src/nodes/display/StereoPassNode.js +80 -0
  203. package/src/nodes/display/ToneMappingFunctions.js +190 -0
  204. package/src/nodes/display/ToneMappingNode.js +66 -0
  205. package/src/nodes/display/TransitionNode.js +77 -0
  206. package/src/nodes/display/ViewportDepthNode.js +121 -0
  207. package/src/nodes/display/ViewportDepthTextureNode.js +30 -0
  208. package/{examples/jsm → src}/nodes/display/ViewportNode.js +28 -26
  209. package/src/nodes/display/ViewportSharedTextureNode.js +36 -0
  210. package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +12 -12
  211. package/{examples/jsm → src}/nodes/fog/FogExp2Node.js +4 -6
  212. package/{examples/jsm → src}/nodes/fog/FogNode.js +5 -7
  213. package/{examples/jsm → src}/nodes/fog/FogRangeNode.js +4 -6
  214. package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  215. package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  216. package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  217. package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +2 -2
  218. package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +2 -2
  219. package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  220. package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  221. package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +2 -2
  222. package/src/nodes/functions/BSDF/LTC.js +131 -0
  223. package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  224. package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  225. package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  226. package/src/nodes/functions/BasicLightingModel.js +78 -0
  227. package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +10 -8
  228. package/{examples/jsm → src}/nodes/functions/PhysicalLightingModel.js +73 -31
  229. package/{examples/jsm → src}/nodes/functions/ShadowMaskModel.js +1 -1
  230. package/{examples/jsm → src}/nodes/functions/ToonLightingModel.js +6 -4
  231. package/src/nodes/functions/material/getGeometryRoughness.js +13 -0
  232. package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +2 -2
  233. package/{examples/jsm → src}/nodes/geometry/RangeNode.js +23 -10
  234. package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +5 -5
  235. package/src/nodes/lighting/AONode.js +24 -0
  236. package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +2 -7
  237. package/src/nodes/lighting/AnalyticLightNode.js +354 -0
  238. package/src/nodes/lighting/BasicEnvironmentNode.js +27 -0
  239. package/src/nodes/lighting/BasicLightMapNode.js +29 -0
  240. package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +3 -9
  241. package/{examples/jsm → src}/nodes/lighting/EnvironmentNode.js +23 -21
  242. package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +4 -7
  243. package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +3 -8
  244. package/{examples/jsm → src}/nodes/lighting/IrradianceNode.js +2 -2
  245. package/{examples/jsm → src}/nodes/lighting/LightNode.js +5 -5
  246. package/src/nodes/lighting/LightProbeNode.js +76 -0
  247. package/{examples/jsm → src}/nodes/lighting/LightUtils.js +3 -3
  248. package/src/nodes/lighting/LightingContextNode.js +64 -0
  249. package/{examples/jsm → src}/nodes/lighting/LightingNode.js +4 -2
  250. package/src/nodes/lighting/LightsNode.js +231 -0
  251. package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +4 -10
  252. package/src/nodes/lighting/RectAreaLightNode.js +93 -0
  253. package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +4 -10
  254. package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +2 -2
  255. package/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +43 -46
  256. package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +500 -603
  257. package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +3 -9
  258. package/{examples/jsm/nodes/math/CondNode.js → src/nodes/math/ConditionalNode.js} +31 -13
  259. package/src/nodes/math/Hash.js +13 -0
  260. package/src/nodes/math/MathNode.js +404 -0
  261. package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -7
  262. package/{examples/jsm → src}/nodes/math/OperatorNode.js +100 -58
  263. package/{examples/jsm → src}/nodes/math/TriNoise3D.js +19 -29
  264. package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
  265. package/{examples/jsm → src}/nodes/pmrem/PMREMNode.js +60 -16
  266. package/{examples/jsm → src}/nodes/pmrem/PMREMUtils.js +46 -46
  267. package/src/nodes/procedural/Checker.js +14 -0
  268. package/src/nodes/tsl/TSLBase.js +30 -0
  269. package/{examples/jsm/nodes/shadernode/ShaderNode.js → src/nodes/tsl/TSLCore.js} +106 -96
  270. package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +2 -2
  271. package/{examples/jsm → src}/nodes/utils/ConvertNode.js +2 -2
  272. package/src/nodes/utils/CubeMapNode.js +157 -0
  273. package/src/nodes/utils/Discard.js +8 -0
  274. package/{examples/jsm → src}/nodes/utils/EquirectUVNode.js +5 -5
  275. package/src/nodes/utils/FlipNode.js +65 -0
  276. package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +7 -5
  277. package/{examples/jsm → src}/nodes/utils/JoinNode.js +2 -2
  278. package/{examples/jsm → src}/nodes/utils/LoopNode.js +19 -12
  279. package/{examples/jsm → src}/nodes/utils/MatcapUVNode.js +6 -6
  280. package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +12 -6
  281. package/{examples/jsm → src}/nodes/utils/OscNode.js +7 -7
  282. package/src/nodes/utils/Packing.js +4 -0
  283. package/src/nodes/utils/RTTNode.js +130 -0
  284. package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +17 -4
  285. package/{examples/jsm → src}/nodes/utils/RemapNode.js +7 -7
  286. package/{examples/jsm → src}/nodes/utils/RotateNode.js +4 -12
  287. package/{examples/jsm → src}/nodes/utils/SetNode.js +2 -2
  288. package/{examples/jsm → src}/nodes/utils/SplitNode.js +2 -2
  289. package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +5 -5
  290. package/src/nodes/utils/SpriteUtils.js +47 -0
  291. package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +4 -6
  292. package/{examples/jsm → src}/nodes/utils/TimerNode.js +5 -5
  293. package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +7 -9
  294. package/src/nodes/utils/UVUtils.js +19 -0
  295. package/src/nodes/utils/ViewportUtils.js +14 -0
  296. package/src/objects/BatchedMesh.js +169 -190
  297. package/src/objects/InstancedMesh.js +1 -1
  298. package/src/renderers/WebGLRenderer.js +60 -23
  299. package/{examples/jsm → src}/renderers/common/Attributes.js +2 -1
  300. package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
  301. package/{examples/jsm → src}/renderers/common/Background.js +12 -4
  302. package/src/renderers/common/BindGroup.js +18 -0
  303. package/{examples/jsm → src}/renderers/common/Bindings.js +45 -32
  304. package/{examples/jsm → src}/renderers/common/ClippingContext.js +18 -7
  305. package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
  306. package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +16 -4
  307. package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
  308. package/{examples/jsm → src}/renderers/common/Info.js +34 -6
  309. package/src/renderers/common/PostProcessing.js +90 -0
  310. package/{examples/jsm/objects → src/renderers/common}/QuadMesh.js +8 -3
  311. package/{examples/jsm → src}/renderers/common/RenderContext.js +25 -1
  312. package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
  313. package/{examples/jsm → src}/renderers/common/RenderList.js +1 -1
  314. package/{examples/jsm → src}/renderers/common/RenderObject.js +45 -12
  315. package/{examples/jsm → src}/renderers/common/Renderer.js +151 -73
  316. package/{examples/jsm → src}/renderers/common/SampledTexture.js +14 -5
  317. package/src/renderers/common/StandardRenderer.js +18 -0
  318. package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
  319. package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
  320. package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
  321. package/{examples/jsm → src}/renderers/common/Textures.js +14 -14
  322. package/{examples/jsm → src}/renderers/common/Uniform.js +9 -4
  323. package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
  324. package/{examples/jsm → src}/renderers/common/extras/PMREMGenerator.js +25 -25
  325. package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
  326. package/src/renderers/common/nodes/NodeLibrary.js +118 -0
  327. package/{examples/jsm → src}/renderers/common/nodes/NodeSampledTexture.js +8 -7
  328. package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +2 -1
  329. package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
  330. package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
  331. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
  332. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
  333. package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +69 -21
  334. package/src/renderers/common/nodes/StandardNodeLibrary.js +105 -0
  335. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +16 -1
  336. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  337. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +1 -1
  338. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
  339. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
  340. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  341. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  342. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -4
  343. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  344. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  345. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  346. package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
  347. package/src/renderers/shaders/UniformsLib.js +3 -0
  348. package/src/renderers/webgl/WebGLAttributes.js +2 -2
  349. package/src/renderers/webgl/WebGLBufferRenderer.js +6 -19
  350. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +6 -18
  351. package/src/renderers/webgl/WebGLLights.js +6 -0
  352. package/src/renderers/webgl/WebGLProgram.js +27 -1
  353. package/src/renderers/webgl/WebGLPrograms.js +1 -1
  354. package/src/renderers/webgl/WebGLProperties.js +7 -0
  355. package/src/renderers/webgl/WebGLTextures.js +75 -57
  356. package/src/renderers/webgl/WebGLUniforms.js +12 -2
  357. package/src/renderers/webgl/WebGLUniformsGroups.js +7 -7
  358. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +242 -120
  359. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +227 -44
  360. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +2 -2
  361. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +1 -0
  362. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
  363. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +22 -1
  364. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +62 -23
  365. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +1 -1
  366. package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +242 -136
  367. package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +9 -9
  368. package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +281 -107
  369. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
  370. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  371. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +64 -33
  372. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +4 -1
  373. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +34 -36
  374. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
  375. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +76 -44
  376. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +42 -4
  377. package/src/renderers/webxr/WebXRDepthSensing.js +6 -0
  378. package/src/renderers/webxr/WebXRManager.js +37 -24
  379. package/src/textures/CompressedArrayTexture.js +1 -1
  380. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  381. package/examples/jsm/nodes/Nodes.js +0 -202
  382. package/examples/jsm/nodes/accessors/BatchNode.js +0 -78
  383. package/examples/jsm/nodes/accessors/CameraNode.js +0 -12
  384. package/examples/jsm/nodes/accessors/CubeTextureNode.js +0 -61
  385. package/examples/jsm/nodes/accessors/InstanceNode.js +0 -94
  386. package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  387. package/examples/jsm/nodes/accessors/ModelNode.js +0 -36
  388. package/examples/jsm/nodes/accessors/NormalNode.js +0 -14
  389. package/examples/jsm/nodes/accessors/PointUVNode.js +0 -26
  390. package/examples/jsm/nodes/accessors/PositionNode.js +0 -10
  391. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -6
  392. package/examples/jsm/nodes/accessors/SkinningNode.js +0 -124
  393. package/examples/jsm/nodes/accessors/TangentNode.js +0 -23
  394. package/examples/jsm/nodes/core/CacheNode.js +0 -49
  395. package/examples/jsm/nodes/core/NodeCache.js +0 -26
  396. package/examples/jsm/nodes/core/NodeKeywords.js +0 -80
  397. package/examples/jsm/nodes/core/PropertyNode.js +0 -83
  398. package/examples/jsm/nodes/core/UniformGroupNode.js +0 -36
  399. package/examples/jsm/nodes/display/BlendModeNode.js +0 -128
  400. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +0 -99
  401. package/examples/jsm/nodes/display/ColorSpaceNode.js +0 -108
  402. package/examples/jsm/nodes/display/FrontFacingNode.js +0 -40
  403. package/examples/jsm/nodes/display/PassNode.js +0 -201
  404. package/examples/jsm/nodes/display/ToneMappingNode.js +0 -188
  405. package/examples/jsm/nodes/display/ViewportDepthNode.js +0 -97
  406. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +0 -31
  407. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +0 -37
  408. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +0 -13
  409. package/examples/jsm/nodes/lighting/AONode.js +0 -27
  410. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -256
  411. package/examples/jsm/nodes/lighting/LightingContextNode.js +0 -66
  412. package/examples/jsm/nodes/lighting/LightsNode.js +0 -215
  413. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -28
  414. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  415. package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +0 -34
  416. package/examples/jsm/nodes/materials/MeshMatcapNodeMaterial.js +0 -52
  417. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -38
  418. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -65
  419. package/examples/jsm/nodes/materials/MeshToonNodeMaterial.js +0 -34
  420. package/examples/jsm/nodes/materials/ShadowNodeMaterial.js +0 -34
  421. package/examples/jsm/nodes/math/HashNode.js +0 -34
  422. package/examples/jsm/nodes/math/MathNode.js +0 -391
  423. package/examples/jsm/nodes/procedural/CheckerNode.js +0 -42
  424. package/examples/jsm/nodes/utils/DiscardNode.js +0 -27
  425. package/examples/jsm/nodes/utils/PackingNode.js +0 -55
  426. package/examples/jsm/nodes/utils/RotateUVNode.js +0 -35
  427. package/examples/jsm/renderers/common/PostProcessing.js +0 -33
  428. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  429. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  430. /package/{examples/jsm/nodes/accessors/UVNode.js → src/nodes/accessors/UV.js} +0 -0
  431. /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
  432. /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
  433. /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
  434. /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
  435. /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
  436. /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
  437. /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
  438. /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
  439. /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
  440. /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
  441. /package/{examples/jsm → src}/renderers/common/Animation.js +0 -0
  442. /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
  443. /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
  444. /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
  445. /package/{examples/jsm → src}/renderers/common/ChainMap.js +0 -0
  446. /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
  447. /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
  448. /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
  449. /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
  450. /package/{examples/jsm → src}/renderers/common/Pipelines.js +0 -0
  451. /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
  452. /package/{examples/jsm → src}/renderers/common/RenderBundle.js +0 -0
  453. /package/{examples/jsm → src}/renderers/common/RenderBundles.js +0 -0
  454. /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
  455. /package/{examples/jsm → src}/renderers/common/RenderObjects.js +0 -0
  456. /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
  457. /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
  458. /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
  459. /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
  460. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBufferRenderer.js +0 -0
  461. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
  462. /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
@@ -1,16 +1,18 @@
1
+ import { registerNode } from '../core/Node.js';
1
2
  import UniformNode, { uniform } from '../core/UniformNode.js';
2
- import { uv } from './UVNode.js';
3
+ import { uv } from './UV.js';
3
4
  import { textureSize } from './TextureSizeNode.js';
4
- import { colorSpaceToLinear } from '../display/ColorSpaceNode.js';
5
+ import { toWorkingColorSpace } from '../display/ColorSpaceNode.js';
5
6
  import { expression } from '../code/ExpressionNode.js';
6
- import { addNodeClass } from '../core/Node.js';
7
7
  import { maxMipLevel } from '../utils/MaxMipLevelNode.js';
8
- import { addNodeElement, nodeProxy, vec3, nodeObject } from '../shadernode/ShaderNode.js';
8
+ import { nodeProxy, vec3, nodeObject } from '../tsl/TSLBase.js';
9
9
  import { NodeUpdateType } from '../core/constants.js';
10
10
 
11
+ import { IntType, UnsignedIntType } from '../../constants.js';
12
+
11
13
  class TextureNode extends UniformNode {
12
14
 
13
- constructor( value, uvNode = null, levelNode = null ) {
15
+ constructor( value, uvNode = null, levelNode = null, biasNode = null ) {
14
16
 
15
17
  super( value );
16
18
 
@@ -18,6 +20,7 @@ class TextureNode extends UniformNode {
18
20
 
19
21
  this.uvNode = uvNode;
20
22
  this.levelNode = levelNode;
23
+ this.biasNode = biasNode;
21
24
  this.compareNode = null;
22
25
  this.depthNode = null;
23
26
  this.gradNode = null;
@@ -29,6 +32,7 @@ class TextureNode extends UniformNode {
29
32
  this.referenceNode = null;
30
33
 
31
34
  this._value = value;
35
+ this._matrixUniform = null;
32
36
 
33
37
  this.setUpdateMatrix( uvNode === null );
34
38
 
@@ -64,6 +68,16 @@ class TextureNode extends UniformNode {
64
68
 
65
69
  if ( this.value.isDepthTexture === true ) return 'float';
66
70
 
71
+ if ( this.value.type === UnsignedIntType ) {
72
+
73
+ return 'uvec4';
74
+
75
+ } else if ( this.value.type === IntType ) {
76
+
77
+ return 'ivec4';
78
+
79
+ }
80
+
67
81
  return 'vec4';
68
82
 
69
83
  }
@@ -88,9 +102,9 @@ class TextureNode extends UniformNode {
88
102
 
89
103
  getTransformedUV( uvNode ) {
90
104
 
91
- const texture = this.value;
105
+ if ( this._matrixUniform === null ) this._matrixUniform = uniform( this.value.matrix );
92
106
 
93
- return uniform( texture.matrix ).mul( vec3( uvNode, 1 ) ).xy;
107
+ return this._matrixUniform.mul( vec3( uvNode, 1 ) ).xy;
94
108
 
95
109
  }
96
110
 
@@ -120,6 +134,7 @@ class TextureNode extends UniformNode {
120
134
  setup( builder ) {
121
135
 
122
136
  const properties = builder.getNodeProperties( this );
137
+ properties.referenceNode = this.referenceNode;
123
138
 
124
139
  //
125
140
 
@@ -155,6 +170,7 @@ class TextureNode extends UniformNode {
155
170
 
156
171
  properties.uvNode = uvNode;
157
172
  properties.levelNode = levelNode;
173
+ properties.biasNode = this.biasNode;
158
174
  properties.compareNode = this.compareNode;
159
175
  properties.gradNode = this.gradNode;
160
176
  properties.depthNode = this.depthNode;
@@ -167,7 +183,7 @@ class TextureNode extends UniformNode {
167
183
 
168
184
  }
169
185
 
170
- generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, depthSnippet, compareSnippet, gradSnippet ) {
186
+ generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet ) {
171
187
 
172
188
  const texture = this.value;
173
189
 
@@ -177,6 +193,10 @@ class TextureNode extends UniformNode {
177
193
 
178
194
  snippet = builder.generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet );
179
195
 
196
+ } else if ( biasSnippet ) {
197
+
198
+ snippet = builder.generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet );
199
+
180
200
  } else if ( gradSnippet ) {
181
201
 
182
202
  snippet = builder.generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet );
@@ -229,10 +249,11 @@ class TextureNode extends UniformNode {
229
249
 
230
250
  if ( propertyName === undefined ) {
231
251
 
232
- const { uvNode, levelNode, compareNode, depthNode, gradNode } = properties;
252
+ const { uvNode, levelNode, biasNode, compareNode, depthNode, gradNode } = properties;
233
253
 
234
254
  const uvSnippet = this.generateUV( builder, uvNode );
235
255
  const levelSnippet = levelNode ? levelNode.build( builder, 'float' ) : null;
256
+ const biasSnippet = biasNode ? biasNode.build( builder, 'float' ) : null;
236
257
  const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
237
258
  const compareSnippet = compareNode ? compareNode.build( builder, 'float' ) : null;
238
259
  const gradSnippet = gradNode ? [ gradNode[ 0 ].build( builder, 'vec2' ), gradNode[ 1 ].build( builder, 'vec2' ) ] : null;
@@ -241,25 +262,21 @@ class TextureNode extends UniformNode {
241
262
 
242
263
  propertyName = builder.getPropertyName( nodeVar );
243
264
 
244
- const snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, depthSnippet, compareSnippet, gradSnippet );
265
+ const snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet );
245
266
 
246
267
  builder.addLineFlowCode( `${propertyName} = ${snippet}` );
247
268
 
248
- if ( builder.context.tempWrite !== false ) {
249
-
250
- nodeData.snippet = snippet;
251
- nodeData.propertyName = propertyName;
252
-
253
- }
269
+ nodeData.snippet = snippet;
270
+ nodeData.propertyName = propertyName;
254
271
 
255
272
  }
256
273
 
257
274
  let snippet = propertyName;
258
275
  const nodeType = this.getNodeType( builder );
259
276
 
260
- if ( builder.needsColorSpaceToLinear( texture ) ) {
277
+ if ( builder.needsToWorkingColorSpace( texture ) ) {
261
278
 
262
- snippet = colorSpaceToLinear( expression( snippet, nodeType ), texture.colorSpace ).setup( builder ).build( builder, nodeType );
279
+ snippet = toWorkingColorSpace( expression( snippet, nodeType ), texture.colorSpace ).setup( builder ).build( builder, nodeType );
263
280
 
264
281
  }
265
282
 
@@ -288,18 +305,18 @@ class TextureNode extends UniformNode {
288
305
  uv( uvNode ) {
289
306
 
290
307
  const textureNode = this.clone();
291
- textureNode.uvNode = uvNode;
292
- textureNode.referenceNode = this;
308
+ textureNode.uvNode = nodeObject( uvNode );
309
+ textureNode.referenceNode = this.getSelf();
293
310
 
294
311
  return nodeObject( textureNode );
295
312
 
296
313
  }
297
314
 
298
- blur( levelNode ) {
315
+ blur( amountNode ) {
299
316
 
300
317
  const textureNode = this.clone();
301
- textureNode.levelNode = levelNode.mul( maxMipLevel( textureNode ) );
302
- textureNode.referenceNode = this;
318
+ textureNode.biasNode = nodeObject( amountNode ).mul( maxMipLevel( textureNode ) );
319
+ textureNode.referenceNode = this.getSelf();
303
320
 
304
321
  return nodeObject( textureNode );
305
322
 
@@ -308,10 +325,10 @@ class TextureNode extends UniformNode {
308
325
  level( levelNode ) {
309
326
 
310
327
  const textureNode = this.clone();
311
- textureNode.levelNode = levelNode;
312
- textureNode.referenceNode = this;
328
+ textureNode.levelNode = nodeObject( levelNode );
329
+ textureNode.referenceNode = this.getSelf();
313
330
 
314
- return textureNode;
331
+ return nodeObject( textureNode );
315
332
 
316
333
  }
317
334
 
@@ -321,11 +338,21 @@ class TextureNode extends UniformNode {
321
338
 
322
339
  }
323
340
 
341
+ bias( biasNode ) {
342
+
343
+ const textureNode = this.clone();
344
+ textureNode.biasNode = nodeObject( biasNode );
345
+ textureNode.referenceNode = this.getSelf();
346
+
347
+ return nodeObject( textureNode );
348
+
349
+ }
350
+
324
351
  compare( compareNode ) {
325
352
 
326
353
  const textureNode = this.clone();
327
354
  textureNode.compareNode = nodeObject( compareNode );
328
- textureNode.referenceNode = this;
355
+ textureNode.referenceNode = this.getSelf();
329
356
 
330
357
  return nodeObject( textureNode );
331
358
 
@@ -335,8 +362,7 @@ class TextureNode extends UniformNode {
335
362
 
336
363
  const textureNode = this.clone();
337
364
  textureNode.gradNode = [ nodeObject( gradNodeX ), nodeObject( gradNodeY ) ];
338
-
339
- textureNode.referenceNode = this;
365
+ textureNode.referenceNode = this.getSelf();
340
366
 
341
367
  return nodeObject( textureNode );
342
368
 
@@ -346,7 +372,7 @@ class TextureNode extends UniformNode {
346
372
 
347
373
  const textureNode = this.clone();
348
374
  textureNode.depthNode = nodeObject( depthNode );
349
- textureNode.referenceNode = this;
375
+ textureNode.referenceNode = this.getSelf();
350
376
 
351
377
  return nodeObject( textureNode );
352
378
 
@@ -359,6 +385,9 @@ class TextureNode extends UniformNode {
359
385
  super.serialize( data );
360
386
 
361
387
  data.value = this.value.toJSON( data.meta ).uuid;
388
+ data.sampler = this.sampler;
389
+ data.updateMatrix = this.updateMatrix;
390
+ data.updateType = this.updateType;
362
391
 
363
392
  }
364
393
 
@@ -367,12 +396,18 @@ class TextureNode extends UniformNode {
367
396
  super.deserialize( data );
368
397
 
369
398
  this.value = data.meta.textures[ data.value ];
399
+ this.sampler = data.sampler;
400
+ this.updateMatrix = data.updateMatrix;
401
+ this.updateType = data.updateType;
370
402
 
371
403
  }
372
404
 
373
405
  update() {
374
406
 
375
407
  const texture = this.value;
408
+ const matrixUniform = this._matrixUniform;
409
+
410
+ if ( matrixUniform !== null ) matrixUniform.value = texture.matrix;
376
411
 
377
412
  if ( texture.matrixAutoUpdate === true ) {
378
413
 
@@ -384,7 +419,7 @@ class TextureNode extends UniformNode {
384
419
 
385
420
  clone() {
386
421
 
387
- const newNode = new this.constructor( this.value, this.uvNode, this.levelNode );
422
+ const newNode = new this.constructor( this.value, this.uvNode, this.levelNode, this.biasNode );
388
423
  newNode.sampler = this.sampler;
389
424
 
390
425
  return newNode;
@@ -395,14 +430,11 @@ class TextureNode extends UniformNode {
395
430
 
396
431
  export default TextureNode;
397
432
 
398
- export const texture = nodeProxy( TextureNode );
433
+ TextureNode.type = /*@__PURE__*/ registerNode( 'Texture', TextureNode );
434
+
435
+ export const texture = /*@__PURE__*/ nodeProxy( TextureNode );
399
436
  export const textureLoad = ( ...params ) => texture( ...params ).setSampler( false );
400
437
 
401
438
  //export const textureLevel = ( value, uv, level ) => texture( value, uv ).level( level );
402
439
 
403
440
  export const sampler = ( aTexture ) => ( aTexture.isNode === true ? aTexture : texture( aTexture ) ).convert( 'sampler' );
404
-
405
- addNodeElement( 'texture', texture );
406
- //addNodeElement( 'textureLevel', textureLevel );
407
-
408
- addNodeClass( 'TextureNode', TextureNode );
@@ -1,6 +1,6 @@
1
+ import { registerNode } from '../core/Node.js';
1
2
  import Node from '../core/Node.js';
2
- import { addNodeClass } from '../core/Node.js';
3
- import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
3
+ import { nodeProxy } from '../tsl/TSLBase.js';
4
4
 
5
5
  class TextureSizeNode extends Node {
6
6
 
@@ -28,8 +28,6 @@ class TextureSizeNode extends Node {
28
28
 
29
29
  export default TextureSizeNode;
30
30
 
31
- export const textureSize = nodeProxy( TextureSizeNode );
31
+ TextureSizeNode.type = /*@__PURE__*/ registerNode( 'TextureSize', TextureSizeNode );
32
32
 
33
- addNodeElement( 'textureSize', textureSize );
34
-
35
- addNodeClass( 'TextureSizeNode', TextureSizeNode );
33
+ export const textureSize = /*@__PURE__*/ nodeProxy( TextureSizeNode );
@@ -1,11 +1,11 @@
1
- import { addNodeClass } from '../core/Node.js';
2
- import { nodeObject } from '../shadernode/ShaderNode.js';
1
+ import { registerNode } from '../core/Node.js';
2
+ import { nodeObject } from '../tsl/TSLBase.js';
3
3
  import { NodeUpdateType } from '../core/constants.js';
4
4
  import { getValueType } from '../core/NodeUtils.js';
5
5
  import ArrayElementNode from '../utils/ArrayElementNode.js';
6
6
  import BufferNode from './BufferNode.js';
7
7
 
8
- class UniformsElementNode extends ArrayElementNode {
8
+ class UniformArrayElementNode extends ArrayElementNode {
9
9
 
10
10
  constructor( arrayBuffer, indexNode ) {
11
11
 
@@ -32,7 +32,7 @@ class UniformsElementNode extends ArrayElementNode {
32
32
 
33
33
  }
34
34
 
35
- class UniformsNode extends BufferNode {
35
+ class UniformArrayNode extends BufferNode {
36
36
 
37
37
  constructor( value, elementType = null ) {
38
38
 
@@ -118,8 +118,14 @@ class UniformsNode extends BufferNode {
118
118
  this._elementType = this.elementType === null ? getValueType( this.array[ 0 ] ) : this.elementType;
119
119
  this._elementLength = builder.getTypeLength( this._elementType );
120
120
 
121
- this.value = new Float32Array( length * 4 );
121
+ let arrayType = Float32Array;
122
+
123
+ if ( this._elementType.charAt( 0 ) === 'i' ) arrayType = Int32Array;
124
+ else if ( this._elementType.charAt( 0 ) === 'u' ) arrayType = Uint32Array;
125
+
126
+ this.value = new arrayType( length * 4 );
122
127
  this.bufferCount = length;
128
+ this.bufferType = builder.changeComponentType( 'vec4', builder.getComponentType( this._elementType ) );
123
129
 
124
130
  return super.setup( builder );
125
131
 
@@ -127,14 +133,23 @@ class UniformsNode extends BufferNode {
127
133
 
128
134
  element( indexNode ) {
129
135
 
130
- return nodeObject( new UniformsElementNode( this, nodeObject( indexNode ) ) );
136
+ return nodeObject( new UniformArrayElementNode( this, nodeObject( indexNode ) ) );
131
137
 
132
138
  }
133
139
 
134
140
  }
135
141
 
136
- export default UniformsNode;
142
+ export default UniformArrayNode;
143
+
144
+ UniformArrayNode.type = /*@__PURE__*/ registerNode( 'UniformArray', UniformArrayNode );
145
+
146
+ export const uniformArray = ( values, nodeType ) => nodeObject( new UniformArrayNode( values, nodeType ) );
147
+
148
+ //
149
+
150
+ export const uniforms = ( values, nodeType ) => { // @deprecated, r168
137
151
 
138
- export const uniforms = ( values, nodeType ) => nodeObject( new UniformsNode( values, nodeType ) );
152
+ console.warn( 'TSL.UniformArrayNode: uniforms() has been renamed to uniformArray().' );
153
+ return nodeObject( new UniformArrayNode( values, nodeType ) );
139
154
 
140
- addNodeClass( 'UniformsNode', UniformsNode );
155
+ };
@@ -1,6 +1,6 @@
1
+ import { registerNode } from '../core/Node.js';
1
2
  import ReferenceNode from './ReferenceNode.js';
2
- import { addNodeClass } from '../core/Node.js';
3
- import { nodeObject } from '../shadernode/ShaderNode.js';
3
+ import { nodeObject } from '../tsl/TSLBase.js';
4
4
 
5
5
  class UserDataNode extends ReferenceNode {
6
6
 
@@ -24,6 +24,6 @@ class UserDataNode extends ReferenceNode {
24
24
 
25
25
  export default UserDataNode;
26
26
 
27
- export const userData = ( name, inputType, userData ) => nodeObject( new UserDataNode( name, inputType, userData ) );
27
+ UserDataNode.type = /*@__PURE__*/ registerNode( 'UserData', UserDataNode );
28
28
 
29
- addNodeClass( 'UserDataNode', UserDataNode );
29
+ export const userData = ( name, inputType, userData ) => nodeObject( new UserDataNode( name, inputType, userData ) );
@@ -0,0 +1,83 @@
1
+ import { registerNode } from '../core/Node.js';
2
+ import TempNode from '../core/TempNode.js';
3
+ import { modelViewMatrix } from './ModelNode.js';
4
+ import { positionLocal, positionPrevious } from './Position.js';
5
+ import { nodeImmutable } from '../tsl/TSLBase.js';
6
+ import { NodeUpdateType } from '../core/constants.js';
7
+ import { Matrix4 } from '../../math/Matrix4.js';
8
+ import { uniform } from '../core/UniformNode.js';
9
+ import { sub } from '../math/OperatorNode.js';
10
+ import { cameraProjectionMatrix } from './Camera.js';
11
+
12
+ const _matrixCache = new WeakMap();
13
+
14
+ class VelocityNode extends TempNode {
15
+
16
+ constructor() {
17
+
18
+ super( 'vec2' );
19
+
20
+ this.updateType = NodeUpdateType.OBJECT;
21
+ this.updateAfterType = NodeUpdateType.OBJECT;
22
+
23
+ this.previousProjectionMatrix = uniform( new Matrix4() );
24
+ this.previousModelViewMatrix = uniform( new Matrix4() );
25
+
26
+ }
27
+
28
+ update( { camera, object } ) {
29
+
30
+ const previousModelMatrix = getPreviousMatrix( object );
31
+ const previousCameraMatrix = getPreviousMatrix( camera );
32
+
33
+ this.previousModelViewMatrix.value.copy( previousModelMatrix );
34
+ this.previousProjectionMatrix.value.copy( previousCameraMatrix );
35
+
36
+ }
37
+
38
+ updateAfter( { camera, object } ) {
39
+
40
+ const previousModelMatrix = getPreviousMatrix( object );
41
+ const previousCameraMatrix = getPreviousMatrix( camera );
42
+
43
+ previousModelMatrix.copy( object.modelViewMatrix );
44
+ previousCameraMatrix.copy( camera.projectionMatrix );
45
+
46
+ }
47
+
48
+ setup( /*builder*/ ) {
49
+
50
+ const clipPositionCurrent = cameraProjectionMatrix.mul( modelViewMatrix ).mul( positionLocal );
51
+ const clipPositionPrevious = this.previousProjectionMatrix.mul( this.previousModelViewMatrix ).mul( positionPrevious );
52
+
53
+ const ndcPositionCurrent = clipPositionCurrent.xy.div( clipPositionCurrent.w );
54
+ const ndcPositionPrevious = clipPositionPrevious.xy.div( clipPositionPrevious.w );
55
+
56
+ const velocity = sub( ndcPositionCurrent, ndcPositionPrevious );
57
+
58
+ return velocity;
59
+
60
+ }
61
+
62
+ }
63
+
64
+ function getPreviousMatrix( object ) {
65
+
66
+ let previousMatrix = _matrixCache.get( object );
67
+
68
+ if ( previousMatrix === undefined ) {
69
+
70
+ previousMatrix = new Matrix4();
71
+ _matrixCache.set( object, previousMatrix );
72
+
73
+ }
74
+
75
+ return previousMatrix;
76
+
77
+ }
78
+
79
+ export default VelocityNode;
80
+
81
+ VelocityNode.type = /*@__PURE__*/ registerNode( 'Velocity', VelocityNode );
82
+
83
+ export const velocity = /*@__PURE__*/ nodeImmutable( VelocityNode );
@@ -1,7 +1,8 @@
1
- import { addNodeClass } from '../core/Node.js';
1
+ import { registerNode } from '../core/Node.js';
2
2
  import AttributeNode from '../core/AttributeNode.js';
3
- import { nodeObject } from '../shadernode/ShaderNode.js';
4
- import { Vector4 } from 'three';
3
+ import { nodeObject } from '../tsl/TSLBase.js';
4
+
5
+ import { Vector4 } from '../../math/Vector4.js';
5
6
 
6
7
  class VertexColorNode extends AttributeNode {
7
8
 
@@ -65,6 +66,6 @@ class VertexColorNode extends AttributeNode {
65
66
 
66
67
  export default VertexColorNode;
67
68
 
68
- export const vertexColor = ( ...params ) => nodeObject( new VertexColorNode( ...params ) );
69
+ VertexColorNode.type = /*@__PURE__*/ registerNode( 'VertexColor', VertexColorNode );
69
70
 
70
- addNodeClass( 'VertexColorNode', VertexColorNode );
71
+ export const vertexColor = ( ...params ) => nodeObject( new VertexColorNode( ...params ) );
@@ -1,5 +1,5 @@
1
- import Node, { addNodeClass } from '../core/Node.js';
2
- import { nodeProxy } from '../shadernode/ShaderNode.js';
1
+ import Node, { registerNode } from '../core/Node.js';
2
+ import { nodeProxy } from '../tsl/TSLBase.js';
3
3
 
4
4
  class CodeNode extends Node {
5
5
 
@@ -75,10 +75,10 @@ class CodeNode extends Node {
75
75
 
76
76
  export default CodeNode;
77
77
 
78
- export const code = nodeProxy( CodeNode );
78
+ CodeNode.type = /*@__PURE__*/ registerNode( 'Code', CodeNode );
79
+
80
+ export const code = /*@__PURE__*/ nodeProxy( CodeNode );
79
81
 
80
82
  export const js = ( src, includes ) => code( src, includes, 'js' );
81
83
  export const wgsl = ( src, includes ) => code( src, includes, 'wgsl' );
82
84
  export const glsl = ( src, includes ) => code( src, includes, 'glsl' );
83
-
84
- addNodeClass( 'CodeNode', CodeNode );
@@ -1,5 +1,5 @@
1
- import Node, { addNodeClass } from '../core/Node.js';
2
- import { nodeProxy } from '../shadernode/ShaderNode.js';
1
+ import Node, { registerNode } from '../core/Node.js';
2
+ import { nodeProxy } from '../tsl/TSLCore.js';
3
3
 
4
4
  class ExpressionNode extends Node {
5
5
 
@@ -32,6 +32,6 @@ class ExpressionNode extends Node {
32
32
 
33
33
  export default ExpressionNode;
34
34
 
35
- export const expression = nodeProxy( ExpressionNode );
35
+ ExpressionNode.type = /*@__PURE__*/ registerNode( 'Expression', ExpressionNode );
36
36
 
37
- addNodeClass( 'ExpressionNode', ExpressionNode );
37
+ export const expression = /*@__PURE__*/ nodeProxy( ExpressionNode );
@@ -1,6 +1,6 @@
1
+ import { registerNode } from '../core/Node.js';
1
2
  import TempNode from '../core/TempNode.js';
2
- import { addNodeClass } from '../core/Node.js';
3
- import { addNodeElement, nodeArray, nodeObject, nodeObjects } from '../shadernode/ShaderNode.js';
3
+ import { addMethodChaining, nodeArray, nodeObject, nodeObjects } from '../tsl/TSLCore.js';
4
4
 
5
5
  class FunctionCallNode extends TempNode {
6
6
 
@@ -83,6 +83,8 @@ class FunctionCallNode extends TempNode {
83
83
 
84
84
  export default FunctionCallNode;
85
85
 
86
+ FunctionCallNode.type = /*@__PURE__*/ registerNode( 'FunctionCall', FunctionCallNode );
87
+
86
88
  export const call = ( func, ...params ) => {
87
89
 
88
90
  params = params.length > 1 || ( params[ 0 ] && params[ 0 ].isNode === true ) ? nodeArray( params ) : nodeObjects( params[ 0 ] );
@@ -91,6 +93,4 @@ export const call = ( func, ...params ) => {
91
93
 
92
94
  };
93
95
 
94
- addNodeElement( 'call', call );
95
-
96
- addNodeClass( 'FunctionCallNode', FunctionCallNode );
96
+ addMethodChaining( 'call', call );
@@ -1,6 +1,6 @@
1
+ import { registerNode } from '../core/Node.js';
1
2
  import CodeNode from './CodeNode.js';
2
- import { addNodeClass } from '../core/Node.js';
3
- import { nodeObject } from '../shadernode/ShaderNode.js';
3
+ import { nodeObject } from '../tsl/TSLBase.js';
4
4
 
5
5
  class FunctionNode extends CodeNode {
6
6
 
@@ -8,8 +8,6 @@ class FunctionNode extends CodeNode {
8
8
 
9
9
  super( code, includes, language );
10
10
 
11
- this.keywords = {};
12
-
13
11
  }
14
12
 
15
13
  getNodeType( builder ) {
@@ -63,23 +61,7 @@ class FunctionNode extends CodeNode {
63
61
 
64
62
  const propertyName = builder.getPropertyName( nodeCode );
65
63
 
66
- let code = this.getNodeFunction( builder ).getCode( propertyName );
67
-
68
- const keywords = this.keywords;
69
- const keywordsProperties = Object.keys( keywords );
70
-
71
- if ( keywordsProperties.length > 0 ) {
72
-
73
- for ( const property of keywordsProperties ) {
74
-
75
- const propertyRegExp = new RegExp( `\\b${property}\\b`, 'g' );
76
- const nodeProperty = keywords[ property ].build( builder, 'property' );
77
-
78
- code = code.replace( propertyRegExp, nodeProperty );
79
-
80
- }
81
-
82
- }
64
+ const code = this.getNodeFunction( builder ).getCode( propertyName );
83
65
 
84
66
  nodeCode.code = code + '\n';
85
67
 
@@ -99,6 +81,8 @@ class FunctionNode extends CodeNode {
99
81
 
100
82
  export default FunctionNode;
101
83
 
84
+ FunctionNode.type = /*@__PURE__*/ registerNode( 'Function', FunctionNode );
85
+
102
86
  const nativeFn = ( code, includes = [], language = '' ) => {
103
87
 
104
88
  for ( let i = 0; i < includes.length; i ++ ) {
@@ -126,5 +110,3 @@ const nativeFn = ( code, includes = [], language = '' ) => {
126
110
 
127
111
  export const glslFn = ( code, includes ) => nativeFn( code, includes, 'glsl' );
128
112
  export const wgslFn = ( code, includes ) => nativeFn( code, includes, 'wgsl' );
129
-
130
- addNodeClass( 'FunctionNode', FunctionNode );
@@ -1,6 +1,6 @@
1
- import Node, { addNodeClass } from '../core/Node.js';
1
+ import Node, { registerNode } from '../core/Node.js';
2
2
  import { scriptableValue } from './ScriptableValueNode.js';
3
- import { addNodeElement, nodeProxy, float } from '../shadernode/ShaderNode.js';
3
+ import { nodeProxy, float } from '../tsl/TSLBase.js';
4
4
 
5
5
  class Resources extends Map {
6
6
 
@@ -437,6 +437,20 @@ class ScriptableNode extends Node {
437
437
 
438
438
  }
439
439
 
440
+ getCacheKey( force ) {
441
+
442
+ const cacheKey = [ this.source, this.getDefaultOutputNode().getCacheKey( force ) ];
443
+
444
+ for ( const param in this.parameters ) {
445
+
446
+ cacheKey.push( this.parameters[ param ].getCacheKey( force ) );
447
+
448
+ }
449
+
450
+ return cacheKey.join( ',' );
451
+
452
+ }
453
+
440
454
  set needsUpdate( value ) {
441
455
 
442
456
  if ( value === true ) this.dispose();
@@ -481,8 +495,6 @@ class ScriptableNode extends Node {
481
495
 
482
496
  export default ScriptableNode;
483
497
 
484
- export const scriptable = nodeProxy( ScriptableNode );
485
-
486
- addNodeElement( 'scriptable', scriptable );
498
+ ScriptableNode.type = /*@__PURE__*/ registerNode( 'Scriptable', ScriptableNode );
487
499
 
488
- addNodeClass( 'ScriptableNode', ScriptableNode );
500
+ export const scriptable = /*@__PURE__*/ nodeProxy( ScriptableNode );
@@ -1,7 +1,8 @@
1
- import Node, { addNodeClass } from '../core/Node.js';
1
+ import Node, { registerNode } from '../core/Node.js';
2
2
  import { arrayBufferToBase64, base64ToArrayBuffer } from '../core/NodeUtils.js';
3
- import { addNodeElement, nodeProxy, float } from '../shadernode/ShaderNode.js';
4
- import { EventDispatcher } from 'three';
3
+ import { nodeProxy, float } from '../tsl/TSLBase.js';
4
+
5
+ import { EventDispatcher } from '../../core/EventDispatcher.js';
5
6
 
6
7
  class ScriptableValueNode extends Node {
7
8
 
@@ -160,8 +161,6 @@ class ScriptableValueNode extends Node {
160
161
 
161
162
  export default ScriptableValueNode;
162
163
 
163
- export const scriptableValue = nodeProxy( ScriptableValueNode );
164
-
165
- addNodeElement( 'scriptableValue', scriptableValue );
164
+ ScriptableValueNode.type = /*@__PURE__*/ registerNode( 'ScriptableValue', ScriptableValueNode );
166
165
 
167
- addNodeClass( 'ScriptableValueNode', ScriptableValueNode );
166
+ export const scriptableValue = /*@__PURE__*/ nodeProxy( ScriptableValueNode );