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
@@ -3,29 +3,37 @@ import NodeAttribute from './NodeAttribute.js';
3
3
  import NodeVarying from './NodeVarying.js';
4
4
  import NodeVar from './NodeVar.js';
5
5
  import NodeCode from './NodeCode.js';
6
- import NodeKeywords from './NodeKeywords.js';
7
6
  import NodeCache from './NodeCache.js';
8
7
  import ParameterNode from './ParameterNode.js';
9
8
  import FunctionNode from '../code/FunctionNode.js';
10
- import { createNodeMaterialFromType, default as NodeMaterial } from '../materials/NodeMaterial.js';
9
+ import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
11
10
  import { NodeUpdateType, defaultBuildStages, shaderStages } from './constants.js';
12
11
 
13
12
  import {
14
- FloatNodeUniform, Vector2NodeUniform, Vector3NodeUniform, Vector4NodeUniform,
13
+ NumberNodeUniform, Vector2NodeUniform, Vector3NodeUniform, Vector4NodeUniform,
15
14
  ColorNodeUniform, Matrix3NodeUniform, Matrix4NodeUniform
16
15
  } from '../../renderers/common/nodes/NodeUniform.js';
17
16
 
18
- import { REVISION, RenderTarget, Color, Vector2, Vector3, Vector4, IntType, UnsignedIntType, Float16BufferAttribute } from 'three';
19
-
20
17
  import { stack } from './StackNode.js';
21
- import { getCurrentStack, setCurrentStack } from '../shadernode/ShaderNode.js';
18
+ import { getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js';
22
19
 
23
20
  import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
24
21
  import ChainMap from '../../renderers/common/ChainMap.js';
25
22
 
26
23
  import PMREMGenerator from '../../renderers/common/extras/PMREMGenerator.js';
27
24
 
28
- const uniformsGroupCache = new ChainMap();
25
+ import BindGroup from '../../renderers/common/BindGroup.js';
26
+
27
+ import { REVISION } from '../../constants.js';
28
+ import { RenderTarget } from '../../core/RenderTarget.js';
29
+ import { Color } from '../../math/Color.js';
30
+ import { Vector2 } from '../../math/Vector2.js';
31
+ import { Vector3 } from '../../math/Vector3.js';
32
+ import { Vector4 } from '../../math/Vector4.js';
33
+ import { Float16BufferAttribute } from '../../core/BufferAttribute.js';
34
+ import { IntType, UnsignedIntType, LinearFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter } from '../../constants.js';
35
+
36
+ const rendererCache = new WeakMap();
29
37
 
30
38
  const typeFromLength = new Map( [
31
39
  [ 2, 'vec2' ],
@@ -55,18 +63,20 @@ const toFloat = ( value ) => {
55
63
 
56
64
  class NodeBuilder {
57
65
 
58
- constructor( object, renderer, parser, scene = null, material = null ) {
66
+ constructor( object, renderer, parser ) {
59
67
 
60
68
  this.object = object;
61
- this.material = material || ( object && object.material ) || null;
69
+ this.material = ( object && object.material ) || null;
62
70
  this.geometry = ( object && object.geometry ) || null;
63
71
  this.renderer = renderer;
64
72
  this.parser = parser;
65
- this.scene = scene;
73
+ this.scene = null;
74
+ this.camera = null;
66
75
 
67
76
  this.nodes = [];
68
77
  this.updateNodes = [];
69
78
  this.updateBeforeNodes = [];
79
+ this.updateAfterNodes = [];
70
80
  this.hashNodes = {};
71
81
 
72
82
  this.lightsNode = null;
@@ -83,9 +93,9 @@ class NodeBuilder {
83
93
  this.flowCode = { vertex: '', fragment: '', compute: '' };
84
94
  this.uniforms = { vertex: [], fragment: [], compute: [], index: 0 };
85
95
  this.structs = { vertex: [], fragment: [], compute: [], index: 0 };
86
- this.bindings = { vertex: [], fragment: [], compute: [] };
87
- this.bindingsOffset = { vertex: 0, fragment: 0, compute: 0 };
88
- this.bindingsArray = null;
96
+ this.bindings = { vertex: {}, fragment: {}, compute: {} };
97
+ this.bindingsIndexes = {};
98
+ this.bindGroups = null;
89
99
  this.attributes = [];
90
100
  this.bufferAttributes = [];
91
101
  this.varyings = [];
@@ -97,10 +107,11 @@ class NodeBuilder {
97
107
  this.stacks = [];
98
108
  this.tab = '\t';
99
109
 
110
+ this.instanceBindGroups = true;
111
+
100
112
  this.currentFunctionNode = null;
101
113
 
102
114
  this.context = {
103
- keywords: new NodeKeywords(),
104
115
  material: this.material
105
116
  };
106
117
 
@@ -112,6 +123,24 @@ class NodeBuilder {
112
123
  this.shaderStage = null;
113
124
  this.buildStage = null;
114
125
 
126
+ this.useComparisonMethod = false;
127
+
128
+ }
129
+
130
+ getBindGroupsCache() {
131
+
132
+ let bindGroupsCache = rendererCache.get( this.renderer );
133
+
134
+ if ( bindGroupsCache === undefined ) {
135
+
136
+ bindGroupsCache = new ChainMap();
137
+
138
+ rendererCache.set( this.renderer, bindGroupsCache );
139
+
140
+ }
141
+
142
+ return bindGroupsCache;
143
+
115
144
  }
116
145
 
117
146
  createRenderTarget( width, height, options ) {
@@ -140,54 +169,111 @@ class NodeBuilder {
140
169
 
141
170
  }
142
171
 
143
- _getSharedBindings( bindings ) {
172
+ _getBindGroup( groupName, bindings ) {
144
173
 
145
- const shared = [];
174
+ const bindGroupsCache = this.getBindGroupsCache();
175
+
176
+ //
177
+
178
+ const bindingsArray = [];
179
+
180
+ let sharedGroup = true;
146
181
 
147
182
  for ( const binding of bindings ) {
148
183
 
149
- if ( binding.shared === true ) {
184
+ bindingsArray.push( binding );
150
185
 
151
- // nodes is the chainmap key
152
- const nodes = binding.getNodes();
186
+ sharedGroup = sharedGroup && binding.groupNode.shared !== true;
153
187
 
154
- let sharedBinding = uniformsGroupCache.get( nodes );
188
+ }
155
189
 
156
- if ( sharedBinding === undefined ) {
190
+ //
157
191
 
158
- uniformsGroupCache.set( nodes, binding );
192
+ let bindGroup;
159
193
 
160
- sharedBinding = binding;
194
+ if ( sharedGroup ) {
161
195
 
162
- }
196
+ bindGroup = bindGroupsCache.get( bindingsArray );
163
197
 
164
- shared.push( sharedBinding );
198
+ if ( bindGroup === undefined ) {
165
199
 
166
- } else {
200
+ bindGroup = new BindGroup( groupName, bindingsArray, this.bindingsIndexes[ groupName ].group, bindingsArray );
167
201
 
168
- shared.push( binding );
202
+ bindGroupsCache.set( bindingsArray, bindGroup );
169
203
 
170
204
  }
171
205
 
206
+ } else {
207
+
208
+ bindGroup = new BindGroup( groupName, bindingsArray, this.bindingsIndexes[ groupName ].group, bindingsArray );
209
+
172
210
  }
173
211
 
174
- return shared;
212
+ return bindGroup;
213
+
214
+ }
215
+
216
+ getBindGroupArray( groupName, shaderStage ) {
217
+
218
+ const bindings = this.bindings[ shaderStage ];
219
+
220
+ let bindGroup = bindings[ groupName ];
221
+
222
+ if ( bindGroup === undefined ) {
223
+
224
+ if ( this.bindingsIndexes[ groupName ] === undefined ) {
225
+
226
+ this.bindingsIndexes[ groupName ] = { binding: 0, group: Object.keys( this.bindingsIndexes ).length };
227
+
228
+ }
229
+
230
+ bindings[ groupName ] = bindGroup = [];
231
+
232
+ }
233
+
234
+ return bindGroup;
175
235
 
176
236
  }
177
237
 
178
238
  getBindings() {
179
239
 
180
- let bindingsArray = this.bindingsArray;
240
+ let bindingsGroups = this.bindGroups;
181
241
 
182
- if ( bindingsArray === null ) {
242
+ if ( bindingsGroups === null ) {
183
243
 
244
+ const groups = {};
184
245
  const bindings = this.bindings;
185
246
 
186
- this.bindingsArray = bindingsArray = this._getSharedBindings( ( this.material !== null ) ? [ ...bindings.vertex, ...bindings.fragment ] : bindings.compute );
247
+ for ( const shaderStage of shaderStages ) {
248
+
249
+ for ( const groupName in bindings[ shaderStage ] ) {
250
+
251
+ const uniforms = bindings[ shaderStage ][ groupName ];
252
+
253
+ const groupUniforms = groups[ groupName ] || ( groups[ groupName ] = [] );
254
+ groupUniforms.push( ...uniforms );
255
+
256
+ }
257
+
258
+ }
259
+
260
+ bindingsGroups = [];
261
+
262
+ for ( const groupName in groups ) {
263
+
264
+ const group = groups[ groupName ];
265
+
266
+ const bindingsGroup = this._getBindGroup( groupName, group );
267
+
268
+ bindingsGroups.push( bindingsGroup );
269
+
270
+ }
271
+
272
+ this.bindGroups = bindingsGroups;
187
273
 
188
274
  }
189
275
 
190
- return bindingsArray;
276
+ return bindingsGroups;
191
277
 
192
278
  }
193
279
 
@@ -215,6 +301,7 @@ class NodeBuilder {
215
301
 
216
302
  const updateType = node.getUpdateType();
217
303
  const updateBeforeType = node.getUpdateBeforeType();
304
+ const updateAfterType = node.getUpdateAfterType();
218
305
 
219
306
  if ( updateType !== NodeUpdateType.NONE ) {
220
307
 
@@ -228,6 +315,12 @@ class NodeBuilder {
228
315
 
229
316
  }
230
317
 
318
+ if ( updateAfterType !== NodeUpdateType.NONE ) {
319
+
320
+ this.updateAfterNodes.push( node );
321
+
322
+ }
323
+
231
324
  }
232
325
 
233
326
  }
@@ -238,6 +331,13 @@ class NodeBuilder {
238
331
 
239
332
  }
240
333
 
334
+ isFilteredTexture( texture ) {
335
+
336
+ return ( texture.magFilter === LinearFilter || texture.magFilter === LinearMipmapNearestFilter || texture.magFilter === NearestMipmapLinearFilter || texture.magFilter === LinearMipmapLinearFilter ||
337
+ texture.minFilter === LinearFilter || texture.minFilter === LinearMipmapNearestFilter || texture.minFilter === NearestMipmapLinearFilter || texture.minFilter === LinearMipmapLinearFilter );
338
+
339
+ }
340
+
241
341
  addChain( node ) {
242
342
 
243
343
  /*
@@ -296,6 +396,16 @@ class NodeBuilder {
296
396
 
297
397
  }
298
398
 
399
+ getSharedContext() {
400
+
401
+ const context = { ...this.context };
402
+
403
+ delete context.material;
404
+
405
+ return this.context;
406
+
407
+ }
408
+
299
409
  setCache( cache ) {
300
410
 
301
411
  this.cache = cache;
@@ -308,6 +418,15 @@ class NodeBuilder {
308
418
 
309
419
  }
310
420
 
421
+ getCacheFromNode( node, parent = true ) {
422
+
423
+ const data = this.getDataFromNode( node );
424
+ if ( data.cache === undefined ) data.cache = new NodeCache( parent ? this.getCache() : null );
425
+
426
+ return data.cache;
427
+
428
+ }
429
+
311
430
  isAvailable( /*name*/ ) {
312
431
 
313
432
  return false;
@@ -326,6 +445,12 @@ class NodeBuilder {
326
445
 
327
446
  }
328
447
 
448
+ getDrawIndex() {
449
+
450
+ console.warn( 'Abstract function.' );
451
+
452
+ }
453
+
329
454
  getFrontFacing() {
330
455
 
331
456
  console.warn( 'Abstract function.' );
@@ -344,6 +469,15 @@ class NodeBuilder {
344
469
 
345
470
  }
346
471
 
472
+ increaseUsage( node ) {
473
+
474
+ const nodeData = this.getDataFromNode( node );
475
+ nodeData.usageCount = nodeData.usageCount === undefined ? 1 : nodeData.usageCount + 1;
476
+
477
+ return nodeData.usageCount;
478
+
479
+ }
480
+
347
481
  generateTexture( /* texture, textureProperty, uvSnippet */ ) {
348
482
 
349
483
  console.warn( 'Abstract function.' );
@@ -467,11 +601,11 @@ class NodeBuilder {
467
601
 
468
602
  isReference( type ) {
469
603
 
470
- return type === 'void' || type === 'property' || type === 'sampler' || type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'texture3D';
604
+ return type === 'void' || type === 'property' || type === 'sampler' || type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'depthTexture' || type === 'texture3D';
471
605
 
472
606
  }
473
607
 
474
- needsColorSpaceToLinear( /*texture*/ ) {
608
+ needsToWorkingColorSpace( /*texture*/ ) {
475
609
 
476
610
  return false;
477
611
 
@@ -631,13 +765,13 @@ class NodeBuilder {
631
765
 
632
766
  cache = cache === null ? ( node.isGlobal( this ) ? this.globalCache : this.cache ) : cache;
633
767
 
634
- let nodeData = cache.getNodeData( node );
768
+ let nodeData = cache.getData( node );
635
769
 
636
770
  if ( nodeData === undefined ) {
637
771
 
638
772
  nodeData = {};
639
773
 
640
- cache.setNodeData( node, nodeData );
774
+ cache.setData( node, nodeData );
641
775
 
642
776
  }
643
777
 
@@ -870,27 +1004,24 @@ class NodeBuilder {
870
1004
 
871
1005
  const layout = shaderNode.layout;
872
1006
 
873
- let inputs;
874
-
875
- if ( shaderNode.isArrayInput ) {
876
-
877
- inputs = [];
878
-
879
- for ( const input of layout.inputs ) {
1007
+ const inputs = {
1008
+ [ Symbol.iterator ]() {
880
1009
 
881
- inputs.push( new ParameterNode( input.type, input.name ) );
1010
+ let index = 0;
1011
+ const values = Object.values( this );
1012
+ return {
1013
+ next: () => ( {
1014
+ value: values[ index ],
1015
+ done: index ++ >= values.length
1016
+ } )
1017
+ };
882
1018
 
883
1019
  }
1020
+ };
884
1021
 
885
- } else {
886
-
887
- inputs = {};
888
-
889
- for ( const input of layout.inputs ) {
890
-
891
- inputs[ input.name ] = new ParameterNode( input.type, input.name );
1022
+ for ( const input of layout.inputs ) {
892
1023
 
893
- }
1024
+ inputs[ input.name ] = new ParameterNode( input.type, input.name );
894
1025
 
895
1026
  }
896
1027
 
@@ -1099,12 +1230,21 @@ class NodeBuilder {
1099
1230
 
1100
1231
  build() {
1101
1232
 
1102
- const { object, material } = this;
1103
-
1233
+ const { object, material, renderer } = this;
1104
1234
 
1105
1235
  if ( material !== null ) {
1106
1236
 
1107
- NodeMaterial.fromMaterial( material ).build( this );
1237
+ let nodeMaterial = renderer.nodes.library.fromMaterial( material );
1238
+
1239
+ if ( nodeMaterial === null ) {
1240
+
1241
+ console.error( `NodeMaterial: Material "${ material.type }" is not compatible.` );
1242
+
1243
+ nodeMaterial = new NodeMaterial();
1244
+
1245
+ }
1246
+
1247
+ nodeMaterial.build( this );
1108
1248
 
1109
1249
  } else {
1110
1250
 
@@ -1164,10 +1304,10 @@ class NodeBuilder {
1164
1304
 
1165
1305
  getNodeUniform( uniformNode, type ) {
1166
1306
 
1167
- if ( type === 'float' ) return new FloatNodeUniform( uniformNode );
1168
- if ( type === 'vec2' ) return new Vector2NodeUniform( uniformNode );
1169
- if ( type === 'vec3' ) return new Vector3NodeUniform( uniformNode );
1170
- if ( type === 'vec4' ) return new Vector4NodeUniform( uniformNode );
1307
+ if ( type === 'float' || type === 'int' || type === 'uint' ) return new NumberNodeUniform( uniformNode );
1308
+ if ( type === 'vec2' || type === 'ivec2' || type === 'uvec2' ) return new Vector2NodeUniform( uniformNode );
1309
+ if ( type === 'vec3' || type === 'ivec3' || type === 'uvec3' ) return new Vector3NodeUniform( uniformNode );
1310
+ if ( type === 'vec4' || type === 'ivec4' || type === 'uvec4' ) return new Vector4NodeUniform( uniformNode );
1171
1311
  if ( type === 'color' ) return new ColorNodeUniform( uniformNode );
1172
1312
  if ( type === 'mat3' ) return new Matrix3NodeUniform( uniformNode );
1173
1313
  if ( type === 'mat4' ) return new Matrix4NodeUniform( uniformNode );
@@ -1176,11 +1316,9 @@ class NodeBuilder {
1176
1316
 
1177
1317
  }
1178
1318
 
1179
- createNodeMaterial( type = 'NodeMaterial' ) {
1319
+ createNodeMaterial( type = 'NodeMaterial' ) { // @deprecated, r168
1180
1320
 
1181
- // TODO: Move Materials.js to outside of the Nodes.js in order to remove this function and improve tree-shaking support
1182
-
1183
- return createNodeMaterialFromType( type );
1321
+ throw new Error( `THREE.NodeBuilder: createNodeMaterial() was deprecated. Use new ${ type }() instead.` );
1184
1322
 
1185
1323
  }
1186
1324
 
@@ -1198,6 +1336,19 @@ class NodeBuilder {
1198
1336
  const fromTypeLength = this.getTypeLength( fromType );
1199
1337
  const toTypeLength = this.getTypeLength( toType );
1200
1338
 
1339
+ if ( fromTypeLength === 16 && toTypeLength === 9 ) {
1340
+
1341
+ return `${ this.getType( toType ) }(${ snippet }[0].xyz, ${ snippet }[1].xyz, ${ snippet }[2].xyz)`;
1342
+
1343
+ }
1344
+
1345
+ if ( fromTypeLength === 9 && toTypeLength === 4 ) {
1346
+
1347
+ return `${ this.getType( toType ) }(${ snippet }[0].xy, ${ snippet }[1].xy)`;
1348
+
1349
+ }
1350
+
1351
+
1201
1352
  if ( fromTypeLength > 4 ) { // fromType is matrix-like
1202
1353
 
1203
1354
  // @TODO: ignore for now
@@ -1238,7 +1389,7 @@ class NodeBuilder {
1238
1389
 
1239
1390
  }
1240
1391
 
1241
- if ( fromTypeLength === 1 && toTypeLength > 1 && fromType[ 0 ] !== toType[ 0 ] ) { // fromType is float-like
1392
+ if ( fromTypeLength === 1 && toTypeLength > 1 && fromType !== this.getComponentType( toType ) ) { // fromType is float-like
1242
1393
 
1243
1394
  // convert a number value to vector type, e.g:
1244
1395
  // vec3( 1u ) -> vec3( float( 1u ) )
@@ -1253,7 +1404,7 @@ class NodeBuilder {
1253
1404
 
1254
1405
  getSignature() {
1255
1406
 
1256
- return `// Three.js r${ REVISION } - NodeMaterial System\n`;
1407
+ return `// Three.js r${ REVISION } - Node System\n`;
1257
1408
 
1258
1409
  }
1259
1410
 
@@ -0,0 +1,36 @@
1
+ let id = 0;
2
+
3
+ class NodeCache {
4
+
5
+ constructor( parent = null ) {
6
+
7
+ this.id = id ++;
8
+ this.nodesData = new WeakMap();
9
+
10
+ this.parent = parent;
11
+
12
+ }
13
+
14
+ getData( node ) {
15
+
16
+ let data = this.nodesData.get( node );
17
+
18
+ if ( data === undefined && this.parent !== null ) {
19
+
20
+ data = this.parent.getData( node );
21
+
22
+ }
23
+
24
+ return data;
25
+
26
+ }
27
+
28
+ setData( node, data ) {
29
+
30
+ this.nodesData.set( node, data );
31
+
32
+ }
33
+
34
+ }
35
+
36
+ export default NodeCache;
@@ -14,6 +14,7 @@ class NodeFrame {
14
14
 
15
15
  this.updateMap = new WeakMap();
16
16
  this.updateBeforeMap = new WeakMap();
17
+ this.updateAfterMap = new WeakMap();
17
18
 
18
19
  this.renderer = null;
19
20
  this.material = null;
@@ -83,6 +84,47 @@ class NodeFrame {
83
84
 
84
85
  }
85
86
 
87
+ updateAfterNode( node ) {
88
+
89
+ const updateType = node.getUpdateAfterType();
90
+ const reference = node.updateReference( this );
91
+
92
+ if ( updateType === NodeUpdateType.FRAME ) {
93
+
94
+ const { frameMap } = this._getMaps( this.updateAfterMap, reference );
95
+
96
+ if ( frameMap.get( reference ) !== this.frameId ) {
97
+
98
+ if ( node.updateAfter( this ) !== false ) {
99
+
100
+ frameMap.set( reference, this.frameId );
101
+
102
+ }
103
+
104
+ }
105
+
106
+ } else if ( updateType === NodeUpdateType.RENDER ) {
107
+
108
+ const { renderMap } = this._getMaps( this.updateAfterMap, reference );
109
+
110
+ if ( renderMap.get( reference ) !== this.renderId ) {
111
+
112
+ if ( node.updateAfter( this ) !== false ) {
113
+
114
+ renderMap.set( reference, this.renderId );
115
+
116
+ }
117
+
118
+ }
119
+
120
+ } else if ( updateType === NodeUpdateType.OBJECT ) {
121
+
122
+ node.updateAfter( this );
123
+
124
+ }
125
+
126
+ }
127
+
86
128
  updateNode( node ) {
87
129
 
88
130
  const updateType = node.getUpdateType();
@@ -1,11 +1,11 @@
1
1
  class NodeFunction {
2
2
 
3
- constructor( type, inputs, name = '', presicion = '' ) {
3
+ constructor( type, inputs, name = '', precision = '' ) {
4
4
 
5
5
  this.type = type;
6
6
  this.inputs = inputs;
7
7
  this.name = name;
8
- this.presicion = presicion;
8
+ this.precision = precision;
9
9
 
10
10
  }
11
11
 
@@ -1,13 +1,12 @@
1
1
  class NodeUniform {
2
2
 
3
- constructor( name, type, node, needsUpdate = undefined ) {
3
+ constructor( name, type, node ) {
4
4
 
5
5
  this.isNodeUniform = true;
6
6
 
7
7
  this.name = name;
8
8
  this.type = type;
9
9
  this.node = node.getSelf();
10
- this.needsUpdate = needsUpdate;
11
10
 
12
11
  }
13
12
 
@@ -1,4 +1,9 @@
1
- import { Color, Matrix3, Matrix4, Vector2, Vector3, Vector4 } from 'three';
1
+ import { Color } from '../../math/Color.js';
2
+ import { Matrix3 } from '../../math/Matrix3.js';
3
+ import { Matrix4 } from '../../math/Matrix4.js';
4
+ import { Vector2 } from '../../math/Vector2.js';
5
+ import { Vector3 } from '../../math/Vector3.js';
6
+ import { Vector4 } from '../../math/Vector4.js';
2
7
 
3
8
  export function getCacheKey( object, force = false ) {
4
9
 
@@ -7,6 +12,7 @@ export function getCacheKey( object, force = false ) {
7
12
  if ( object.isNode === true ) {
8
13
 
9
14
  cacheKey += object.id;
15
+ object = object.getSelf();
10
16
 
11
17
  }
12
18
 
@@ -1,6 +1,6 @@
1
- import Node, { addNodeClass } from './Node.js';
1
+ import Node, { registerNode } from './Node.js';
2
2
  import StructTypeNode from './StructTypeNode.js';
3
- import { nodeProxy } from '../shadernode/ShaderNode.js';
3
+ import { nodeProxy } from '../tsl/TSLBase.js';
4
4
 
5
5
  class OutputStructNode extends Node {
6
6
 
@@ -54,6 +54,6 @@ class OutputStructNode extends Node {
54
54
 
55
55
  export default OutputStructNode;
56
56
 
57
- export const outputStruct = nodeProxy( OutputStructNode );
57
+ OutputStructNode.type = /*@__PURE__*/ registerNode( 'OutputStruct', OutputStructNode );
58
58
 
59
- addNodeClass( 'OutputStructNode', OutputStructNode );
59
+ export const outputStruct = /*@__PURE__*/ nodeProxy( OutputStructNode );
@@ -1,5 +1,5 @@
1
- import { addNodeClass } from './Node.js';
2
- import { nodeObject } from '../shadernode/ShaderNode.js';
1
+ import { registerNode } from './Node.js';
2
+ import { nodeObject } from '../tsl/TSLBase.js';
3
3
  import PropertyNode from './PropertyNode.js';
4
4
 
5
5
  class ParameterNode extends PropertyNode {
@@ -28,6 +28,6 @@ class ParameterNode extends PropertyNode {
28
28
 
29
29
  export default ParameterNode;
30
30
 
31
- export const parameter = ( type, name ) => nodeObject( new ParameterNode( type, name ) );
31
+ ParameterNode.type = /*@__PURE__*/ registerNode( 'Parameter', ParameterNode );
32
32
 
33
- addNodeClass( 'ParameterNode', ParameterNode );
33
+ export const parameter = ( type, name ) => nodeObject( new ParameterNode( type, name ) );