super-three 0.164.0 → 0.167.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 (416) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +1273 -503
  3. package/build/three.module.js +1269 -504
  4. package/build/three.module.min.js +1 -1
  5. package/build/three.webgpu.js +76086 -0
  6. package/build/three.webgpu.min.js +6 -0
  7. package/examples/jsm/Addons.js +2 -1
  8. package/examples/jsm/controls/TransformControls.js +1 -1
  9. package/examples/jsm/csm/CSMShader.js +4 -4
  10. package/examples/jsm/environments/RoomEnvironment.js +1 -5
  11. package/examples/jsm/exporters/GLTFExporter.js +8 -4
  12. package/examples/jsm/exporters/USDZExporter.js +6 -4
  13. package/examples/jsm/geometries/TeapotGeometry.js +1 -1
  14. package/examples/jsm/helpers/ViewHelper.js +75 -61
  15. package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
  16. package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
  17. package/examples/jsm/lines/LineMaterial.js +1 -15
  18. package/examples/jsm/lines/LineSegments2.js +15 -0
  19. package/examples/jsm/lines/Wireframe.js +16 -1
  20. package/examples/jsm/lines/webgpu/Line2.js +20 -0
  21. package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
  22. package/examples/jsm/loaders/DRACOLoader.js +1 -1
  23. package/examples/jsm/loaders/FBXLoader.js +47 -58
  24. package/examples/jsm/loaders/GLTFLoader.js +12 -4
  25. package/examples/jsm/loaders/LDrawLoader.js +3 -2
  26. package/examples/jsm/loaders/MMDLoader.js +31 -12
  27. package/examples/jsm/loaders/MaterialXLoader.js +2 -9
  28. package/examples/jsm/loaders/USDZLoader.js +124 -76
  29. package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
  30. package/examples/jsm/loaders/VTKLoader.js +76 -3
  31. package/examples/jsm/misc/GPUComputationRenderer.js +9 -19
  32. package/examples/jsm/modifiers/CurveModifier.js +11 -9
  33. package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
  34. package/examples/jsm/objects/InstancedPoints.js +2 -2
  35. package/examples/jsm/objects/Lensflare.js +2 -2
  36. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  37. package/examples/jsm/postprocessing/RenderTransitionPass.js +13 -38
  38. package/examples/jsm/postprocessing/SSAOPass.js +6 -9
  39. package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
  40. package/examples/jsm/renderers/CSS2DRenderer.js +25 -5
  41. package/examples/jsm/renderers/CSS3DRenderer.js +24 -3
  42. package/examples/jsm/shaders/ColorifyShader.js +1 -2
  43. package/examples/jsm/shaders/FXAAShader.js +0 -2
  44. package/examples/jsm/shaders/GTAOShader.js +1 -1
  45. package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
  46. package/examples/jsm/transpiler/GLSLDecoder.js +46 -4
  47. package/examples/jsm/transpiler/TSLEncoder.js +17 -15
  48. package/examples/jsm/utils/BufferGeometryUtils.js +18 -16
  49. package/examples/jsm/utils/GPUStatsPanel.js +2 -0
  50. package/examples/jsm/utils/SortUtils.js +8 -5
  51. package/package.json +9 -7
  52. package/src/Three.WebGPU.js +194 -0
  53. package/src/Three.js +2 -0
  54. package/src/animation/tracks/BooleanKeyframeTrack.js +10 -1
  55. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -2
  56. package/src/animation/tracks/StringKeyframeTrack.js +10 -1
  57. package/src/constants.js +4 -1
  58. package/src/core/Object3D.js +24 -22
  59. package/src/core/Raycaster.js +6 -2
  60. package/src/extras/TextureUtils.js +210 -0
  61. package/src/lights/Light.js +1 -0
  62. package/src/lights/LightShadow.js +5 -0
  63. package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
  64. package/src/loaders/FileLoader.js +4 -0
  65. package/src/loaders/LoaderUtils.js +3 -1
  66. package/src/loaders/ObjectLoader.js +34 -2
  67. package/src/materials/Material.js +13 -4
  68. package/src/math/Box2.js +4 -4
  69. package/src/math/Box3.js +6 -6
  70. package/src/math/ColorManagement.js +10 -0
  71. package/src/math/Matrix2.js +54 -0
  72. package/src/math/Vector4.js +13 -0
  73. package/{examples/jsm → src}/nodes/Nodes.js +39 -20
  74. package/{examples/jsm → src}/nodes/accessors/BatchNode.js +28 -10
  75. package/src/nodes/accessors/BitangentNode.js +13 -0
  76. package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +36 -1
  77. package/{examples/jsm → src}/nodes/accessors/BufferNode.js +6 -0
  78. package/src/nodes/accessors/CameraNode.js +19 -0
  79. package/{examples/jsm → src}/nodes/accessors/CubeTextureNode.js +22 -5
  80. package/src/nodes/accessors/InstanceNode.js +140 -0
  81. package/{examples/jsm → src}/nodes/accessors/MaterialNode.js +24 -2
  82. package/{examples/jsm → src}/nodes/accessors/ModelNode.js +4 -0
  83. package/{examples/jsm → src}/nodes/accessors/MorphNode.js +24 -20
  84. package/src/nodes/accessors/NormalNode.js +14 -0
  85. package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +1 -1
  86. package/src/nodes/accessors/PositionNode.js +10 -0
  87. package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +7 -1
  88. package/src/nodes/accessors/ReflectVectorNode.js +10 -0
  89. package/{examples/jsm → src}/nodes/accessors/StorageBufferNode.js +50 -1
  90. package/{examples/jsm/nodes/accessors/TextureStoreNode.js → src/nodes/accessors/StorageTextureNode.js} +28 -6
  91. package/src/nodes/accessors/TangentNode.js +23 -0
  92. package/src/nodes/accessors/Texture3DNode.js +100 -0
  93. package/{examples/jsm → src}/nodes/accessors/TextureNode.js +55 -18
  94. package/src/nodes/accessors/UVNode.js +3 -0
  95. package/{examples/jsm → src}/nodes/accessors/UniformsNode.js +7 -1
  96. package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +2 -1
  97. package/{examples/jsm → src}/nodes/code/ScriptableNode.js +14 -0
  98. package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +2 -1
  99. package/{examples/jsm → src}/nodes/core/AttributeNode.js +34 -8
  100. package/{examples/jsm → src}/nodes/core/CacheNode.js +7 -10
  101. package/{examples/jsm → src}/nodes/core/ContextNode.js +6 -0
  102. package/{examples/jsm → src}/nodes/core/IndexNode.js +6 -0
  103. package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
  104. package/src/nodes/core/MRTNode.js +76 -0
  105. package/{examples/jsm → src}/nodes/core/Node.js +33 -14
  106. package/{examples/jsm → src}/nodes/core/NodeBuilder.js +194 -45
  107. package/src/nodes/core/NodeCache.js +36 -0
  108. package/{examples/jsm → src}/nodes/core/NodeFrame.js +42 -0
  109. package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
  110. package/{examples/jsm → src}/nodes/core/NodeKeywords.js +1 -1
  111. package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
  112. package/{examples/jsm → src}/nodes/core/NodeUtils.js +6 -1
  113. package/{examples/jsm → src}/nodes/core/OutputStructNode.js +1 -5
  114. package/{examples/jsm → src}/nodes/core/PropertyNode.js +2 -0
  115. package/{examples/jsm → src}/nodes/core/TempNode.js +2 -2
  116. package/{examples/jsm → src}/nodes/core/UniformGroupNode.js +20 -0
  117. package/{examples/jsm → src}/nodes/core/UniformNode.js +10 -1
  118. package/{examples/jsm → src}/nodes/core/VarNode.js +2 -6
  119. package/src/nodes/core/VaryingNode.js +104 -0
  120. package/{examples/jsm → src}/nodes/display/AfterImageNode.js +24 -20
  121. package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +18 -21
  122. package/src/nodes/display/BloomNode.js +333 -0
  123. package/{examples/jsm → src}/nodes/display/ColorAdjustmentNode.js +7 -2
  124. package/{examples/jsm → src}/nodes/display/ColorSpaceNode.js +1 -1
  125. package/src/nodes/display/DenoiseNode.js +198 -0
  126. package/src/nodes/display/DepthOfFieldNode.js +119 -0
  127. package/src/nodes/display/DotScreenNode.js +75 -0
  128. package/src/nodes/display/FXAANode.js +327 -0
  129. package/src/nodes/display/FilmNode.js +52 -0
  130. package/{examples/jsm → src}/nodes/display/FrontFacingNode.js +2 -1
  131. package/src/nodes/display/GTAONode.js +324 -0
  132. package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +34 -17
  133. package/src/nodes/display/Lut3DNode.js +53 -0
  134. package/{examples/jsm → src}/nodes/display/NormalMapNode.js +1 -1
  135. package/src/nodes/display/PassNode.js +291 -0
  136. package/src/nodes/display/PixelationPassNode.js +201 -0
  137. package/src/nodes/display/RGBShiftNode.js +49 -0
  138. package/src/nodes/display/RenderOutputNode.js +56 -0
  139. package/src/nodes/display/SobelOperatorNode.js +121 -0
  140. package/{examples/jsm → src}/nodes/display/ToneMappingNode.js +44 -5
  141. package/src/nodes/display/TransitionNode.js +76 -0
  142. package/{examples/jsm → src}/nodes/display/ViewportDepthNode.js +39 -16
  143. package/{examples/jsm → src}/nodes/display/ViewportDepthTextureNode.js +2 -1
  144. package/{examples/jsm → src}/nodes/display/ViewportNode.js +3 -2
  145. package/{examples/jsm → src}/nodes/display/ViewportSharedTextureNode.js +2 -1
  146. package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +5 -2
  147. package/src/nodes/functions/BSDF/LTC.js +131 -0
  148. package/src/nodes/functions/BasicLightingModel.js +78 -0
  149. package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +5 -3
  150. package/{examples/jsm → src}/nodes/functions/PhysicalLightingModel.js +103 -18
  151. package/src/nodes/functions/ToonLightingModel.js +51 -0
  152. package/{examples/jsm → src}/nodes/geometry/RangeNode.js +19 -6
  153. package/{examples/jsm → src}/nodes/lighting/AONode.js +1 -4
  154. package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +1 -1
  155. package/src/nodes/lighting/AnalyticLightNode.js +333 -0
  156. package/src/nodes/lighting/BasicEnvironmentNode.js +26 -0
  157. package/src/nodes/lighting/BasicLightMapNode.js +29 -0
  158. package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +2 -3
  159. package/{examples/jsm → src}/nodes/lighting/EnvironmentNode.js +5 -4
  160. package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +2 -1
  161. package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +1 -1
  162. package/{examples/jsm → src}/nodes/lighting/LightingNode.js +2 -0
  163. package/{examples/jsm → src}/nodes/lighting/LightsNode.js +18 -3
  164. package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +2 -3
  165. package/src/nodes/lighting/RectAreaLightNode.js +97 -0
  166. package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +2 -3
  167. package/{examples/jsm → src}/nodes/loaders/NodeLoader.js +3 -1
  168. package/{examples/jsm → src}/nodes/loaders/NodeMaterialLoader.js +2 -1
  169. package/{examples/jsm → src}/nodes/loaders/NodeObjectLoader.js +2 -1
  170. package/{examples/jsm → src}/nodes/materials/InstancedPointsNodeMaterial.js +3 -3
  171. package/{examples/jsm → src}/nodes/materials/Line2NodeMaterial.js +4 -4
  172. package/{examples/jsm → src}/nodes/materials/LineBasicNodeMaterial.js +3 -3
  173. package/{examples/jsm → src}/nodes/materials/LineDashedNodeMaterial.js +4 -3
  174. package/{examples/jsm → src}/nodes/materials/Materials.js +3 -0
  175. package/src/nodes/materials/MeshBasicNodeMaterial.js +73 -0
  176. package/{examples/jsm → src}/nodes/materials/MeshLambertNodeMaterial.js +12 -3
  177. package/src/nodes/materials/MeshMatcapNodeMaterial.js +53 -0
  178. package/{examples/jsm → src}/nodes/materials/MeshNormalNodeMaterial.js +5 -3
  179. package/{examples/jsm → src}/nodes/materials/MeshPhongNodeMaterial.js +11 -3
  180. package/{examples/jsm → src}/nodes/materials/MeshPhysicalNodeMaterial.js +26 -8
  181. package/{examples/jsm → src}/nodes/materials/MeshStandardNodeMaterial.js +14 -3
  182. package/src/nodes/materials/MeshToonNodeMaterial.js +34 -0
  183. package/{examples/jsm → src}/nodes/materials/NodeMaterial.js +97 -24
  184. package/{examples/jsm → src}/nodes/materials/PointsNodeMaterial.js +3 -3
  185. package/{examples/jsm → src}/nodes/materials/ShadowNodeMaterial.js +3 -3
  186. package/{examples/jsm → src}/nodes/materials/SpriteNodeMaterial.js +3 -3
  187. package/src/nodes/materials/VolumeNodeMaterial.js +106 -0
  188. package/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +9 -17
  189. package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +474 -577
  190. package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +2 -8
  191. package/{examples/jsm → src}/nodes/math/CondNode.js +13 -6
  192. package/{examples/jsm → src}/nodes/math/HashNode.js +2 -2
  193. package/{examples/jsm → src}/nodes/math/MathNode.js +14 -1
  194. package/{examples/jsm → src}/nodes/math/OperatorNode.js +6 -6
  195. package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
  196. package/{examples/jsm → src}/nodes/pmrem/PMREMNode.js +2 -1
  197. package/{examples/jsm → src}/nodes/shadernode/ShaderNode.js +57 -33
  198. package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +1 -1
  199. package/{examples/jsm → src}/nodes/utils/DiscardNode.js +1 -0
  200. package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +2 -0
  201. package/{examples/jsm → src}/nodes/utils/LoopNode.js +7 -6
  202. package/{examples/jsm → src}/nodes/utils/MatcapUVNode.js +1 -1
  203. package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +8 -2
  204. package/src/nodes/utils/RTTNode.js +130 -0
  205. package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +9 -1
  206. package/{examples/jsm → src}/nodes/utils/TimerNode.js +1 -1
  207. package/src/objects/BatchedMesh.js +232 -162
  208. package/src/objects/InstancedMesh.js +1 -1
  209. package/src/renderers/WebGLRenderer.js +312 -68
  210. package/{examples/jsm → src}/renderers/common/Attributes.js +4 -1
  211. package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
  212. package/{examples/jsm → src}/renderers/common/Background.js +9 -3
  213. package/src/renderers/common/BindGroup.js +16 -0
  214. package/{examples/jsm → src}/renderers/common/Bindings.js +54 -22
  215. package/src/renderers/common/ChainMap.js +59 -0
  216. package/{examples/jsm → src}/renderers/common/ClippingContext.js +8 -6
  217. package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
  218. package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +7 -1
  219. package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
  220. package/{examples/jsm → src}/renderers/common/Info.js +34 -6
  221. package/{examples/jsm → src}/renderers/common/Pipelines.js +2 -2
  222. package/src/renderers/common/PostProcessing.js +87 -0
  223. package/{examples/jsm/objects → src/renderers/common}/QuadMesh.js +6 -3
  224. package/src/renderers/common/RenderBundle.js +18 -0
  225. package/src/renderers/common/RenderBundles.js +38 -0
  226. package/{examples/jsm → src}/renderers/common/RenderContext.js +1 -1
  227. package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
  228. package/{examples/jsm → src}/renderers/common/RenderList.js +9 -0
  229. package/{examples/jsm → src}/renderers/common/RenderObject.js +50 -11
  230. package/{examples/jsm → src}/renderers/common/Renderer.js +220 -40
  231. package/{examples/jsm → src}/renderers/common/SampledTexture.js +2 -2
  232. package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
  233. package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
  234. package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
  235. package/{examples/jsm → src}/renderers/common/Textures.js +6 -2
  236. package/{examples/jsm → src}/renderers/common/Uniform.js +10 -5
  237. package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
  238. package/{examples/jsm → src}/renderers/common/extras/PMREMGenerator.js +13 -12
  239. package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
  240. package/{examples/jsm → src}/renderers/common/nodes/NodeSampledTexture.js +19 -4
  241. package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +8 -1
  242. package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
  243. package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
  244. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
  245. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
  246. package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +37 -16
  247. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +31 -1
  248. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  249. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
  250. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
  251. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
  252. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
  253. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  254. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
  255. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
  256. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +1 -1
  257. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
  258. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +10 -31
  259. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
  260. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  261. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -4
  262. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  263. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  264. package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
  265. package/src/renderers/shaders/UniformsLib.js +3 -0
  266. package/src/renderers/webgl/WebGLAttributes.js +2 -2
  267. package/src/renderers/webgl/WebGLBackground.js +6 -0
  268. package/src/renderers/webgl/WebGLBufferRenderer.js +6 -19
  269. package/src/renderers/webgl/WebGLExtensions.js +3 -1
  270. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +6 -18
  271. package/src/renderers/webgl/WebGLLights.js +15 -12
  272. package/src/renderers/webgl/WebGLMaterials.js +1 -5
  273. package/src/renderers/webgl/WebGLMorphtargets.js +1 -2
  274. package/src/renderers/webgl/WebGLProgram.js +28 -31
  275. package/src/renderers/webgl/WebGLPrograms.js +15 -15
  276. package/src/renderers/webgl/WebGLRenderStates.js +2 -2
  277. package/src/renderers/webgl/WebGLTextures.js +100 -70
  278. package/src/renderers/webgl/WebGLUniforms.js +12 -2
  279. package/src/renderers/webgl/WebGLUniformsGroups.js +7 -7
  280. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +156 -54
  281. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +188 -41
  282. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +2 -2
  283. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +1 -0
  284. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
  285. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +1 -1
  286. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +126 -7
  287. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +1 -1
  288. package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +212 -78
  289. package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +2 -2
  290. package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +245 -49
  291. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
  292. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  293. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +30 -14
  294. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +9 -1
  295. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +74 -24
  296. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +101 -25
  297. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +24 -3
  298. package/src/renderers/webxr/WebXRDepthSensing.js +9 -3
  299. package/src/renderers/webxr/WebXRManager.js +12 -2
  300. package/src/textures/CompressedArrayTexture.js +14 -0
  301. package/src/textures/DataArrayTexture.js +14 -0
  302. package/src/textures/DepthTexture.js +1 -3
  303. package/src/utils.js +30 -1
  304. package/examples/jsm/nodes/accessors/BitangentNode.js +0 -89
  305. package/examples/jsm/nodes/accessors/CameraNode.js +0 -119
  306. package/examples/jsm/nodes/accessors/InstanceNode.js +0 -94
  307. package/examples/jsm/nodes/accessors/NormalNode.js +0 -106
  308. package/examples/jsm/nodes/accessors/PositionNode.js +0 -104
  309. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -35
  310. package/examples/jsm/nodes/accessors/TangentNode.js +0 -109
  311. package/examples/jsm/nodes/accessors/UVNode.js +0 -47
  312. package/examples/jsm/nodes/core/NodeCache.js +0 -26
  313. package/examples/jsm/nodes/core/VaryingNode.js +0 -65
  314. package/examples/jsm/nodes/display/PassNode.js +0 -199
  315. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -255
  316. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  317. package/examples/jsm/renderers/common/ChainMap.js +0 -89
  318. package/examples/jsm/renderers/common/PostProcessing.js +0 -33
  319. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  320. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  321. /package/{examples/jsm → src}/nodes/accessors/AccessorsUtils.js +0 -0
  322. /package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +0 -0
  323. /package/{examples/jsm → src}/nodes/accessors/InstancedPointsMaterialNode.js +0 -0
  324. /package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +0 -0
  325. /package/{examples/jsm → src}/nodes/accessors/ModelViewProjectionNode.js +0 -0
  326. /package/{examples/jsm → src}/nodes/accessors/PointUVNode.js +0 -0
  327. /package/{examples/jsm → src}/nodes/accessors/RendererReferenceNode.js +0 -0
  328. /package/{examples/jsm → src}/nodes/accessors/SceneNode.js +0 -0
  329. /package/{examples/jsm → src}/nodes/accessors/SkinningNode.js +0 -0
  330. /package/{examples/jsm → src}/nodes/accessors/TextureBicubicNode.js +0 -0
  331. /package/{examples/jsm → src}/nodes/accessors/TextureSizeNode.js +0 -0
  332. /package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +0 -0
  333. /package/{examples/jsm → src}/nodes/code/CodeNode.js +0 -0
  334. /package/{examples/jsm → src}/nodes/code/ExpressionNode.js +0 -0
  335. /package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +0 -0
  336. /package/{examples/jsm → src}/nodes/code/FunctionNode.js +0 -0
  337. /package/{examples/jsm → src}/nodes/core/AssignNode.js +0 -0
  338. /package/{examples/jsm → src}/nodes/core/BypassNode.js +0 -0
  339. /package/{examples/jsm → src}/nodes/core/ConstNode.js +0 -0
  340. /package/{examples/jsm → src}/nodes/core/InputNode.js +0 -0
  341. /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
  342. /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
  343. /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
  344. /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
  345. /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
  346. /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
  347. /package/{examples/jsm → src}/nodes/core/ParameterNode.js +0 -0
  348. /package/{examples/jsm → src}/nodes/core/StackNode.js +0 -0
  349. /package/{examples/jsm → src}/nodes/core/StructTypeNode.js +0 -0
  350. /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
  351. /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
  352. /package/{examples/jsm → src}/nodes/display/BlendModeNode.js +0 -0
  353. /package/{examples/jsm → src}/nodes/display/BumpMapNode.js +0 -0
  354. /package/{examples/jsm → src}/nodes/display/PosterizeNode.js +0 -0
  355. /package/{examples/jsm → src}/nodes/fog/FogExp2Node.js +0 -0
  356. /package/{examples/jsm → src}/nodes/fog/FogNode.js +0 -0
  357. /package/{examples/jsm → src}/nodes/fog/FogRangeNode.js +0 -0
  358. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_GGX.js +0 -0
  359. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +0 -0
  360. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +0 -0
  361. /package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +0 -0
  362. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +0 -0
  363. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX_Anisotropic.js +0 -0
  364. /package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +0 -0
  365. /package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +0 -0
  366. /package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +0 -0
  367. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +0 -0
  368. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +0 -0
  369. /package/{examples/jsm → src}/nodes/functions/ShadowMaskModel.js +0 -0
  370. /package/{examples/jsm → src}/nodes/functions/material/getGeometryRoughness.js +0 -0
  371. /package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +0 -0
  372. /package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +0 -0
  373. /package/{examples/jsm → src}/nodes/lighting/IrradianceNode.js +0 -0
  374. /package/{examples/jsm → src}/nodes/lighting/LightNode.js +0 -0
  375. /package/{examples/jsm → src}/nodes/lighting/LightUtils.js +0 -0
  376. /package/{examples/jsm → src}/nodes/lighting/LightingContextNode.js +0 -0
  377. /package/{examples/jsm → src}/nodes/materials/MeshSSSNodeMaterial.js +0 -0
  378. /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
  379. /package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +0 -0
  380. /package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -0
  381. /package/{examples/jsm → src}/nodes/math/TriNoise3D.js +0 -0
  382. /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
  383. /package/{examples/jsm → src}/nodes/pmrem/PMREMUtils.js +0 -0
  384. /package/{examples/jsm → src}/nodes/procedural/CheckerNode.js +0 -0
  385. /package/{examples/jsm → src}/nodes/utils/ConvertNode.js +0 -0
  386. /package/{examples/jsm → src}/nodes/utils/EquirectUVNode.js +0 -0
  387. /package/{examples/jsm → src}/nodes/utils/JoinNode.js +0 -0
  388. /package/{examples/jsm → src}/nodes/utils/OscNode.js +0 -0
  389. /package/{examples/jsm → src}/nodes/utils/PackingNode.js +0 -0
  390. /package/{examples/jsm → src}/nodes/utils/RemapNode.js +0 -0
  391. /package/{examples/jsm → src}/nodes/utils/RotateNode.js +0 -0
  392. /package/{examples/jsm → src}/nodes/utils/RotateUVNode.js +0 -0
  393. /package/{examples/jsm → src}/nodes/utils/SetNode.js +0 -0
  394. /package/{examples/jsm → src}/nodes/utils/SplitNode.js +0 -0
  395. /package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +0 -0
  396. /package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +0 -0
  397. /package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +0 -0
  398. /package/{examples/jsm → src}/renderers/common/Animation.js +0 -0
  399. /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
  400. /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
  401. /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
  402. /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
  403. /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
  404. /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
  405. /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
  406. /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
  407. /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
  408. /package/{examples/jsm → src}/renderers/common/RenderObjects.js +0 -0
  409. /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
  410. /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
  411. /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
  412. /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
  413. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBufferRenderer.js +0 -0
  414. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
  415. /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
  416. /package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +0 -0
@@ -11,12 +11,10 @@ import { createNodeMaterialFromType, default as NodeMaterial } from '../material
11
11
  import { NodeUpdateType, defaultBuildStages, shaderStages } from './constants.js';
12
12
 
13
13
  import {
14
- FloatNodeUniform, Vector2NodeUniform, Vector3NodeUniform, Vector4NodeUniform,
14
+ NumberNodeUniform, Vector2NodeUniform, Vector3NodeUniform, Vector4NodeUniform,
15
15
  ColorNodeUniform, Matrix3NodeUniform, Matrix4NodeUniform
16
16
  } from '../../renderers/common/nodes/NodeUniform.js';
17
17
 
18
- import { REVISION, RenderTarget, Color, Vector2, Vector3, Vector4, IntType, UnsignedIntType, Float16BufferAttribute } from 'three';
19
-
20
18
  import { stack } from './StackNode.js';
21
19
  import { getCurrentStack, setCurrentStack } from '../shadernode/ShaderNode.js';
22
20
 
@@ -25,7 +23,18 @@ import ChainMap from '../../renderers/common/ChainMap.js';
25
23
 
26
24
  import PMREMGenerator from '../../renderers/common/extras/PMREMGenerator.js';
27
25
 
28
- const uniformsGroupCache = new ChainMap();
26
+ import BindGroup from '../../renderers/common/BindGroup.js';
27
+
28
+ import { REVISION } from '../../constants.js';
29
+ import { RenderTarget } from '../../core/RenderTarget.js';
30
+ import { Color } from '../../math/Color.js';
31
+ import { Vector2 } from '../../math/Vector2.js';
32
+ import { Vector3 } from '../../math/Vector3.js';
33
+ import { Vector4 } from '../../math/Vector4.js';
34
+ import { Float16BufferAttribute } from '../../core/BufferAttribute.js';
35
+ import { IntType, UnsignedIntType, LinearFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter } from '../../constants.js';
36
+
37
+ const rendererCache = new WeakMap();
29
38
 
30
39
  const typeFromLength = new Map( [
31
40
  [ 2, 'vec2' ],
@@ -55,18 +64,20 @@ const toFloat = ( value ) => {
55
64
 
56
65
  class NodeBuilder {
57
66
 
58
- constructor( object, renderer, parser, scene = null, material = null ) {
67
+ constructor( object, renderer, parser ) {
59
68
 
60
69
  this.object = object;
61
- this.material = material || ( object && object.material ) || null;
70
+ this.material = ( object && object.material ) || null;
62
71
  this.geometry = ( object && object.geometry ) || null;
63
72
  this.renderer = renderer;
64
73
  this.parser = parser;
65
- this.scene = scene;
74
+ this.scene = null;
75
+ this.camera = null;
66
76
 
67
77
  this.nodes = [];
68
78
  this.updateNodes = [];
69
79
  this.updateBeforeNodes = [];
80
+ this.updateAfterNodes = [];
70
81
  this.hashNodes = {};
71
82
 
72
83
  this.lightsNode = null;
@@ -80,12 +91,12 @@ class NodeBuilder {
80
91
  this.computeShader = null;
81
92
 
82
93
  this.flowNodes = { vertex: [], fragment: [], compute: [] };
83
- this.flowCode = { vertex: '', fragment: '', compute: [] };
94
+ this.flowCode = { vertex: '', fragment: '', compute: '' };
84
95
  this.uniforms = { vertex: [], fragment: [], compute: [], index: 0 };
85
96
  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;
97
+ this.bindings = { vertex: {}, fragment: {}, compute: {} };
98
+ this.bindingsIndexes = {};
99
+ this.bindGroups = null;
89
100
  this.attributes = [];
90
101
  this.bufferAttributes = [];
91
102
  this.varyings = [];
@@ -97,6 +108,8 @@ class NodeBuilder {
97
108
  this.stacks = [];
98
109
  this.tab = '\t';
99
110
 
111
+ this.instanceBindGroups = true;
112
+
100
113
  this.currentFunctionNode = null;
101
114
 
102
115
  this.context = {
@@ -114,6 +127,22 @@ class NodeBuilder {
114
127
 
115
128
  }
116
129
 
130
+ getBingGroupsCache() {
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
+
144
+ }
145
+
117
146
  createRenderTarget( width, height, options ) {
118
147
 
119
148
  return new RenderTarget( width, height, options );
@@ -140,54 +169,110 @@ class NodeBuilder {
140
169
 
141
170
  }
142
171
 
143
- _getSharedBindings( bindings ) {
172
+ _getBindGroup( groupName, bindings ) {
173
+
174
+ const bindGroupsCache = this.getBingGroupsCache();
175
+
176
+ //
177
+
178
+ const bindingsArray = [];
144
179
 
145
- const shared = [];
180
+ let sharedGroup = true;
146
181
 
147
182
  for ( const binding of bindings ) {
148
183
 
149
- if ( binding.shared === true ) {
184
+ bindingsArray.push( binding );
185
+
186
+ sharedGroup = sharedGroup && binding.groupNode.shared !== true;
150
187
 
151
- // nodes is the chainmap key
152
- const nodes = binding.getNodes();
188
+ }
153
189
 
154
- let sharedBinding = uniformsGroupCache.get( nodes );
190
+ //
155
191
 
156
- if ( sharedBinding === undefined ) {
192
+ let bindGroup;
157
193
 
158
- uniformsGroupCache.set( nodes, binding );
194
+ if ( sharedGroup ) {
159
195
 
160
- sharedBinding = binding;
196
+ bindGroup = bindGroupsCache.get( bindingsArray );
161
197
 
162
- }
198
+ if ( bindGroup === undefined ) {
199
+
200
+ bindGroup = new BindGroup( groupName, bindingsArray );
201
+ bindGroupsCache.set( bindingsArray, bindGroup );
202
+
203
+ }
163
204
 
164
- shared.push( sharedBinding );
205
+ } else {
206
+
207
+ bindGroup = new BindGroup( groupName, bindingsArray );
208
+
209
+ }
210
+
211
+ return bindGroup;
212
+
213
+ }
165
214
 
166
- } else {
215
+ getBindGroupArray( groupName, shaderStage ) {
167
216
 
168
- shared.push( binding );
217
+ const bindings = this.bindings[ shaderStage ];
218
+
219
+ let bindGroup = bindings[ groupName ];
220
+
221
+ if ( bindGroup === undefined ) {
222
+
223
+ if ( this.bindingsIndexes[ groupName ] === undefined ) {
224
+
225
+ this.bindingsIndexes[ groupName ] = { binding: 0, group: Object.keys( this.bindingsIndexes ).length };
169
226
 
170
227
  }
171
228
 
229
+ bindings[ groupName ] = bindGroup = [];
230
+
172
231
  }
173
232
 
174
- return shared;
233
+ return bindGroup;
175
234
 
176
235
  }
177
236
 
178
237
  getBindings() {
179
238
 
180
- let bindingsArray = this.bindingsArray;
239
+ let bindingsGroups = this.bindGroups;
181
240
 
182
- if ( bindingsArray === null ) {
241
+ if ( bindingsGroups === null ) {
183
242
 
243
+ const groups = {};
184
244
  const bindings = this.bindings;
185
245
 
186
- this.bindingsArray = bindingsArray = this._getSharedBindings( ( this.material !== null ) ? [ ...bindings.vertex, ...bindings.fragment ] : bindings.compute );
246
+ for ( const shaderStage of shaderStages ) {
247
+
248
+ for ( const groupName in bindings[ shaderStage ] ) {
249
+
250
+ const uniforms = bindings[ shaderStage ][ groupName ];
251
+
252
+ const groupUniforms = groups[ groupName ] || ( groups[ groupName ] = [] );
253
+ groupUniforms.push( ...uniforms );
254
+
255
+ }
256
+
257
+ }
258
+
259
+ bindingsGroups = [];
260
+
261
+ for ( const groupName in groups ) {
262
+
263
+ const group = groups[ groupName ];
264
+
265
+ const bindingsGroup = this._getBindGroup( groupName, group );
266
+
267
+ bindingsGroups.push( bindingsGroup );
268
+
269
+ }
270
+
271
+ this.bindGroups = bindingsGroups;
187
272
 
188
273
  }
189
274
 
190
- return bindingsArray;
275
+ return bindingsGroups;
191
276
 
192
277
  }
193
278
 
@@ -215,6 +300,7 @@ class NodeBuilder {
215
300
 
216
301
  const updateType = node.getUpdateType();
217
302
  const updateBeforeType = node.getUpdateBeforeType();
303
+ const updateAfterType = node.getUpdateAfterType();
218
304
 
219
305
  if ( updateType !== NodeUpdateType.NONE ) {
220
306
 
@@ -228,6 +314,12 @@ class NodeBuilder {
228
314
 
229
315
  }
230
316
 
317
+ if ( updateAfterType !== NodeUpdateType.NONE ) {
318
+
319
+ this.updateAfterNodes.push( node );
320
+
321
+ }
322
+
231
323
  }
232
324
 
233
325
  }
@@ -238,6 +330,13 @@ class NodeBuilder {
238
330
 
239
331
  }
240
332
 
333
+ isFilteredTexture( texture ) {
334
+
335
+ return ( texture.magFilter === LinearFilter || texture.magFilter === LinearMipmapNearestFilter || texture.magFilter === NearestMipmapLinearFilter || texture.magFilter === LinearMipmapLinearFilter ||
336
+ texture.minFilter === LinearFilter || texture.minFilter === LinearMipmapNearestFilter || texture.minFilter === NearestMipmapLinearFilter || texture.minFilter === LinearMipmapLinearFilter );
337
+
338
+ }
339
+
241
340
  addChain( node ) {
242
341
 
243
342
  /*
@@ -296,6 +395,17 @@ class NodeBuilder {
296
395
 
297
396
  }
298
397
 
398
+ getSharedContext() {
399
+
400
+ const context = { ...this.context };
401
+
402
+ delete context.keywords;
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.' );
@@ -415,12 +540,6 @@ class NodeBuilder {
415
540
 
416
541
  }
417
542
 
418
- generateMethod( method ) {
419
-
420
- return method;
421
-
422
- }
423
-
424
543
  hasGeometryAttribute( name ) {
425
544
 
426
545
  return this.geometry && this.geometry.getAttribute( name ) !== undefined;
@@ -473,7 +592,7 @@ class NodeBuilder {
473
592
 
474
593
  isReference( type ) {
475
594
 
476
- return type === 'void' || type === 'property' || type === 'sampler' || type === 'texture' || type === 'cubeTexture' || type === 'storageTexture';
595
+ return type === 'void' || type === 'property' || type === 'sampler' || type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'depthTexture' || type === 'texture3D';
477
596
 
478
597
  }
479
598
 
@@ -498,6 +617,16 @@ class NodeBuilder {
498
617
 
499
618
  }
500
619
 
620
+ getElementType( type ) {
621
+
622
+ if ( type === 'mat2' ) return 'vec2';
623
+ if ( type === 'mat3' ) return 'vec3';
624
+ if ( type === 'mat4' ) return 'vec4';
625
+
626
+ return this.getComponentType( type );
627
+
628
+ }
629
+
501
630
  getComponentType( type ) {
502
631
 
503
632
  type = this.getVectorType( type );
@@ -519,7 +648,7 @@ class NodeBuilder {
519
648
  getVectorType( type ) {
520
649
 
521
650
  if ( type === 'color' ) return 'vec3';
522
- if ( type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' ) return 'vec4';
651
+ if ( type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'texture3D' ) return 'vec4';
523
652
 
524
653
  return type;
525
654
 
@@ -627,13 +756,13 @@ class NodeBuilder {
627
756
 
628
757
  cache = cache === null ? ( node.isGlobal( this ) ? this.globalCache : this.cache ) : cache;
629
758
 
630
- let nodeData = cache.getNodeData( node );
759
+ let nodeData = cache.getData( node );
631
760
 
632
761
  if ( nodeData === undefined ) {
633
762
 
634
763
  nodeData = {};
635
764
 
636
- cache.setNodeData( node, nodeData );
765
+ cache.setData( node, nodeData );
637
766
 
638
767
  }
639
768
 
@@ -907,7 +1036,9 @@ class NodeBuilder {
907
1036
 
908
1037
  const previousFlow = this.flow;
909
1038
  const previousVars = this.vars;
1039
+ const previousCache = this.cache;
910
1040
  const previousBuildStage = this.buildStage;
1041
+ const previousStack = this.stack;
911
1042
 
912
1043
  const flow = {
913
1044
  code: ''
@@ -915,6 +1046,8 @@ class NodeBuilder {
915
1046
 
916
1047
  this.flow = flow;
917
1048
  this.vars = {};
1049
+ this.cache = new NodeCache();
1050
+ this.stack = stack();
918
1051
 
919
1052
  for ( const buildStage of defaultBuildStages ) {
920
1053
 
@@ -928,6 +1061,9 @@ class NodeBuilder {
928
1061
 
929
1062
  this.flow = previousFlow;
930
1063
  this.vars = previousVars;
1064
+ this.cache = previousCache;
1065
+ this.stack = previousStack;
1066
+
931
1067
  this.setBuildStage( previousBuildStage );
932
1068
 
933
1069
  return flow;
@@ -1153,10 +1289,10 @@ class NodeBuilder {
1153
1289
 
1154
1290
  getNodeUniform( uniformNode, type ) {
1155
1291
 
1156
- if ( type === 'float' ) return new FloatNodeUniform( uniformNode );
1157
- if ( type === 'vec2' ) return new Vector2NodeUniform( uniformNode );
1158
- if ( type === 'vec3' ) return new Vector3NodeUniform( uniformNode );
1159
- if ( type === 'vec4' ) return new Vector4NodeUniform( uniformNode );
1292
+ if ( type === 'float' || type === 'int' || type === 'uint' ) return new NumberNodeUniform( uniformNode );
1293
+ if ( type === 'vec2' || type === 'ivec2' || type === 'uvec2' ) return new Vector2NodeUniform( uniformNode );
1294
+ if ( type === 'vec3' || type === 'ivec3' || type === 'uvec3' ) return new Vector3NodeUniform( uniformNode );
1295
+ if ( type === 'vec4' || type === 'ivec4' || type === 'uvec4' ) return new Vector4NodeUniform( uniformNode );
1160
1296
  if ( type === 'color' ) return new ColorNodeUniform( uniformNode );
1161
1297
  if ( type === 'mat3' ) return new Matrix3NodeUniform( uniformNode );
1162
1298
  if ( type === 'mat4' ) return new Matrix4NodeUniform( uniformNode );
@@ -1187,6 +1323,19 @@ class NodeBuilder {
1187
1323
  const fromTypeLength = this.getTypeLength( fromType );
1188
1324
  const toTypeLength = this.getTypeLength( toType );
1189
1325
 
1326
+ if ( fromTypeLength === 16 && toTypeLength === 9 ) {
1327
+
1328
+ return `${ this.getType( toType ) }(${ snippet }[0].xyz, ${ snippet }[1].xyz, ${ snippet }[2].xyz)`;
1329
+
1330
+ }
1331
+
1332
+ if ( fromTypeLength === 9 && toTypeLength === 4 ) {
1333
+
1334
+ return `${ this.getType( toType ) }(${ snippet }[0].xy, ${ snippet }[1].xy)`;
1335
+
1336
+ }
1337
+
1338
+
1190
1339
  if ( fromTypeLength > 4 ) { // fromType is matrix-like
1191
1340
 
1192
1341
  // @TODO: ignore for now
@@ -1227,7 +1376,7 @@ class NodeBuilder {
1227
1376
 
1228
1377
  }
1229
1378
 
1230
- if ( fromTypeLength === 1 && toTypeLength > 1 && fromType[ 0 ] !== toType[ 0 ] ) { // fromType is float-like
1379
+ if ( fromTypeLength === 1 && toTypeLength > 1 && fromType !== this.getComponentType( toType ) ) { // fromType is float-like
1231
1380
 
1232
1381
  // convert a number value to vector type, e.g:
1233
1382
  // vec3( 1u ) -> vec3( float( 1u ) )
@@ -1242,7 +1391,7 @@ class NodeBuilder {
1242
1391
 
1243
1392
  getSignature() {
1244
1393
 
1245
- return `// Three.js r${ REVISION } - NodeMaterial System\n`;
1394
+ return `// Three.js r${ REVISION } - Node System\n`;
1246
1395
 
1247
1396
  }
1248
1397
 
@@ -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
 
@@ -3,7 +3,7 @@ class NodeKeywords {
3
3
  constructor() {
4
4
 
5
5
  this.keywords = [];
6
- this.nodes = [];
6
+ this.nodes = {};
7
7
  this.keywordsCallback = {};
8
8
 
9
9
  }
@@ -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
 
@@ -33,11 +33,7 @@ class OutputStructNode extends Node {
33
33
 
34
34
  generate( builder, output ) {
35
35
 
36
- const nodeVar = builder.getVarFromNode( this );
37
- nodeVar.isOutputStructVar = true;
38
-
39
- const propertyName = builder.getPropertyName( nodeVar );
40
-
36
+ const propertyName = builder.getOutputStructName();
41
37
  const members = this.members;
42
38
 
43
39
  const structPrefix = propertyName !== '' ? propertyName + '.' : '';
@@ -53,6 +53,7 @@ export const property = ( type, name ) => nodeObject( new PropertyNode( type, na
53
53
  export const varyingProperty = ( type, name ) => nodeObject( new PropertyNode( type, name, true ) );
54
54
 
55
55
  export const diffuseColor = nodeImmutable( PropertyNode, 'vec4', 'DiffuseColor' );
56
+ export const emissive = nodeImmutable( PropertyNode, 'vec3', 'EmissiveColor' );
56
57
  export const roughness = nodeImmutable( PropertyNode, 'float', 'Roughness' );
57
58
  export const metalness = nodeImmutable( PropertyNode, 'float', 'Metalness' );
58
59
  export const clearcoat = nodeImmutable( PropertyNode, 'float', 'Clearcoat' );
@@ -78,5 +79,6 @@ export const transmission = nodeImmutable( PropertyNode, 'float', 'Transmission'
78
79
  export const thickness = nodeImmutable( PropertyNode, 'float', 'Thickness' );
79
80
  export const attenuationDistance = nodeImmutable( PropertyNode, 'float', 'AttenuationDistance' );
80
81
  export const attenuationColor = nodeImmutable( PropertyNode, 'color', 'AttenuationColor' );
82
+ export const dispersion = nodeImmutable( PropertyNode, 'float', 'Dispersion' );
81
83
 
82
84
  addNodeClass( 'PropertyNode', PropertyNode );
@@ -25,11 +25,11 @@ class TempNode extends Node {
25
25
  const type = builder.getVectorType( this.getNodeType( builder, output ) );
26
26
  const nodeData = builder.getDataFromNode( this );
27
27
 
28
- if ( builder.context.tempRead !== false && nodeData.propertyName !== undefined ) {
28
+ if ( nodeData.propertyName !== undefined ) {
29
29
 
30
30
  return builder.format( nodeData.propertyName, type, output );
31
31
 
32
- } else if ( builder.context.tempWrite !== false && type !== 'void' && output !== 'void' && this.hasDependencies( builder ) ) {
32
+ } else if ( type !== 'void' && output !== 'void' && this.hasDependencies( builder ) ) {
33
33
 
34
34
  const snippet = super.build( builder, type );
35
35
 
@@ -22,6 +22,26 @@ class UniformGroupNode extends Node {
22
22
 
23
23
  }
24
24
 
25
+ serialize( data ) {
26
+
27
+ super.serialize( data );
28
+
29
+ data.name = this.name;
30
+ data.version = this.version;
31
+ data.shared = this.shared;
32
+
33
+ }
34
+
35
+ deserialize( data ) {
36
+
37
+ super.deserialize( data );
38
+
39
+ this.name = data.name;
40
+ this.version = data.version;
41
+ this.shared = data.shared;
42
+
43
+ }
44
+
25
45
  }
26
46
 
27
47
  export const uniformGroup = ( name ) => new UniformGroupNode( name );