super-three 0.165.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 (370) hide show
  1. package/build/three.cjs +706 -383
  2. package/build/three.module.js +702 -384
  3. package/build/three.module.min.js +1 -1
  4. package/build/three.webgpu.js +76086 -0
  5. package/build/three.webgpu.min.js +6 -0
  6. package/examples/jsm/Addons.js +2 -1
  7. package/examples/jsm/csm/CSMShader.js +4 -4
  8. package/examples/jsm/exporters/GLTFExporter.js +7 -3
  9. package/examples/jsm/geometries/TeapotGeometry.js +1 -1
  10. package/examples/jsm/helpers/ViewHelper.js +51 -2
  11. package/examples/jsm/libs/tween.module.js +64 -75
  12. package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
  13. package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
  14. package/examples/jsm/lines/webgpu/Line2.js +20 -0
  15. package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
  16. package/examples/jsm/loaders/FBXLoader.js +23 -45
  17. package/examples/jsm/loaders/GLTFLoader.js +10 -4
  18. package/examples/jsm/loaders/MaterialXLoader.js +2 -9
  19. package/examples/jsm/loaders/USDZLoader.js +124 -76
  20. package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
  21. package/examples/jsm/loaders/VTKLoader.js +76 -3
  22. package/examples/jsm/misc/GPUComputationRenderer.js +9 -19
  23. package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
  24. package/examples/jsm/objects/InstancedPoints.js +2 -2
  25. package/examples/jsm/postprocessing/RenderTransitionPass.js +13 -38
  26. package/examples/jsm/postprocessing/SSAOPass.js +6 -9
  27. package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
  28. package/examples/jsm/shaders/ColorifyShader.js +1 -2
  29. package/examples/jsm/shaders/FXAAShader.js +0 -2
  30. package/examples/jsm/shaders/GTAOShader.js +1 -1
  31. package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
  32. package/examples/jsm/transpiler/GLSLDecoder.js +46 -4
  33. package/examples/jsm/transpiler/TSLEncoder.js +17 -15
  34. package/package.json +7 -6
  35. package/src/Three.WebGPU.js +194 -0
  36. package/src/Three.js +2 -0
  37. package/src/constants.js +4 -1
  38. package/src/core/Object3D.js +22 -22
  39. package/src/extras/TextureUtils.js +210 -0
  40. package/src/lights/Light.js +1 -0
  41. package/src/lights/LightShadow.js +5 -0
  42. package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
  43. package/src/loaders/ObjectLoader.js +33 -2
  44. package/src/materials/Material.js +13 -4
  45. package/src/math/Box2.js +4 -4
  46. package/src/math/Box3.js +6 -6
  47. package/src/math/ColorManagement.js +10 -0
  48. package/src/math/Matrix2.js +54 -0
  49. package/src/math/Vector4.js +13 -0
  50. package/{examples/jsm → src}/nodes/Nodes.js +30 -12
  51. package/{examples/jsm → src}/nodes/accessors/BatchNode.js +28 -10
  52. package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +36 -1
  53. package/src/nodes/accessors/CameraNode.js +19 -0
  54. package/{examples/jsm → src}/nodes/accessors/CubeTextureNode.js +22 -5
  55. package/src/nodes/accessors/InstanceNode.js +140 -0
  56. package/{examples/jsm → src}/nodes/accessors/MaterialNode.js +22 -2
  57. package/{examples/jsm → src}/nodes/accessors/ModelNode.js +2 -1
  58. package/{examples/jsm → src}/nodes/accessors/MorphNode.js +24 -20
  59. package/{examples/jsm → src}/nodes/accessors/NormalNode.js +1 -1
  60. package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +1 -1
  61. package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +1 -1
  62. package/{examples/jsm → src}/nodes/accessors/ReflectVectorNode.js +4 -0
  63. package/{examples/jsm → src}/nodes/accessors/StorageBufferNode.js +50 -1
  64. package/{examples/jsm → src}/nodes/accessors/StorageTextureNode.js +12 -3
  65. package/{examples/jsm → src}/nodes/accessors/TextureNode.js +55 -18
  66. package/{examples/jsm → src}/nodes/accessors/UniformsNode.js +7 -1
  67. package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +2 -1
  68. package/{examples/jsm → src}/nodes/code/ScriptableNode.js +14 -0
  69. package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +2 -1
  70. package/{examples/jsm → src}/nodes/core/AttributeNode.js +20 -6
  71. package/{examples/jsm → src}/nodes/core/CacheNode.js +7 -10
  72. package/{examples/jsm → src}/nodes/core/IndexNode.js +6 -0
  73. package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
  74. package/src/nodes/core/MRTNode.js +76 -0
  75. package/{examples/jsm → src}/nodes/core/Node.js +18 -12
  76. package/{examples/jsm → src}/nodes/core/NodeBuilder.js +175 -37
  77. package/src/nodes/core/NodeCache.js +36 -0
  78. package/{examples/jsm → src}/nodes/core/NodeFrame.js +42 -0
  79. package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
  80. package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
  81. package/{examples/jsm → src}/nodes/core/NodeUtils.js +6 -1
  82. package/{examples/jsm → src}/nodes/core/PropertyNode.js +1 -0
  83. package/{examples/jsm → src}/nodes/core/TempNode.js +2 -2
  84. package/{examples/jsm → src}/nodes/core/UniformGroupNode.js +20 -0
  85. package/{examples/jsm → src}/nodes/core/UniformNode.js +10 -1
  86. package/{examples/jsm → src}/nodes/core/VarNode.js +2 -6
  87. package/{examples/jsm → src}/nodes/core/VaryingNode.js +8 -0
  88. package/{examples/jsm → src}/nodes/display/AfterImageNode.js +19 -27
  89. package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +18 -21
  90. package/src/nodes/display/BloomNode.js +333 -0
  91. package/{examples/jsm → src}/nodes/display/ColorAdjustmentNode.js +7 -2
  92. package/{examples/jsm → src}/nodes/display/ColorSpaceNode.js +1 -1
  93. package/src/nodes/display/DenoiseNode.js +198 -0
  94. package/src/nodes/display/DepthOfFieldNode.js +119 -0
  95. package/src/nodes/display/DotScreenNode.js +75 -0
  96. package/src/nodes/display/FXAANode.js +327 -0
  97. package/src/nodes/display/FilmNode.js +52 -0
  98. package/{examples/jsm → src}/nodes/display/FrontFacingNode.js +2 -1
  99. package/src/nodes/display/GTAONode.js +324 -0
  100. package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +34 -17
  101. package/src/nodes/display/Lut3DNode.js +53 -0
  102. package/{examples/jsm → src}/nodes/display/NormalMapNode.js +1 -1
  103. package/src/nodes/display/PassNode.js +291 -0
  104. package/src/nodes/display/PixelationPassNode.js +201 -0
  105. package/src/nodes/display/RGBShiftNode.js +49 -0
  106. package/src/nodes/display/RenderOutputNode.js +56 -0
  107. package/src/nodes/display/SobelOperatorNode.js +121 -0
  108. package/{examples/jsm → src}/nodes/display/ToneMappingNode.js +44 -5
  109. package/src/nodes/display/TransitionNode.js +76 -0
  110. package/{examples/jsm → src}/nodes/display/ViewportDepthNode.js +39 -16
  111. package/{examples/jsm → src}/nodes/display/ViewportDepthTextureNode.js +2 -1
  112. package/{examples/jsm → src}/nodes/display/ViewportNode.js +2 -1
  113. package/{examples/jsm → src}/nodes/display/ViewportSharedTextureNode.js +2 -1
  114. package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +5 -2
  115. package/src/nodes/functions/BSDF/LTC.js +131 -0
  116. package/src/nodes/functions/BasicLightingModel.js +78 -0
  117. package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +5 -3
  118. package/{examples/jsm → src}/nodes/functions/PhysicalLightingModel.js +42 -1
  119. package/{examples/jsm → src}/nodes/functions/ToonLightingModel.js +3 -1
  120. package/{examples/jsm → src}/nodes/geometry/RangeNode.js +19 -6
  121. package/{examples/jsm → src}/nodes/lighting/AONode.js +1 -4
  122. package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +1 -1
  123. package/src/nodes/lighting/AnalyticLightNode.js +333 -0
  124. package/src/nodes/lighting/BasicEnvironmentNode.js +26 -0
  125. package/src/nodes/lighting/BasicLightMapNode.js +29 -0
  126. package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +2 -3
  127. package/{examples/jsm → src}/nodes/lighting/EnvironmentNode.js +5 -4
  128. package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +2 -1
  129. package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +1 -1
  130. package/{examples/jsm → src}/nodes/lighting/LightingNode.js +2 -0
  131. package/{examples/jsm → src}/nodes/lighting/LightsNode.js +1 -3
  132. package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +2 -3
  133. package/src/nodes/lighting/RectAreaLightNode.js +97 -0
  134. package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +2 -3
  135. package/{examples/jsm → src}/nodes/loaders/NodeLoader.js +3 -1
  136. package/{examples/jsm → src}/nodes/loaders/NodeMaterialLoader.js +2 -1
  137. package/{examples/jsm → src}/nodes/loaders/NodeObjectLoader.js +2 -1
  138. package/{examples/jsm → src}/nodes/materials/InstancedPointsNodeMaterial.js +3 -3
  139. package/{examples/jsm → src}/nodes/materials/Line2NodeMaterial.js +3 -3
  140. package/{examples/jsm → src}/nodes/materials/LineBasicNodeMaterial.js +3 -3
  141. package/{examples/jsm → src}/nodes/materials/LineDashedNodeMaterial.js +4 -3
  142. package/src/nodes/materials/MeshBasicNodeMaterial.js +73 -0
  143. package/{examples/jsm → src}/nodes/materials/MeshLambertNodeMaterial.js +12 -3
  144. package/{examples/jsm → src}/nodes/materials/MeshMatcapNodeMaterial.js +6 -5
  145. package/{examples/jsm → src}/nodes/materials/MeshNormalNodeMaterial.js +5 -3
  146. package/{examples/jsm → src}/nodes/materials/MeshPhongNodeMaterial.js +11 -3
  147. package/{examples/jsm → src}/nodes/materials/MeshPhysicalNodeMaterial.js +5 -4
  148. package/{examples/jsm → src}/nodes/materials/MeshStandardNodeMaterial.js +14 -3
  149. package/{examples/jsm → src}/nodes/materials/MeshToonNodeMaterial.js +3 -3
  150. package/{examples/jsm → src}/nodes/materials/NodeMaterial.js +85 -20
  151. package/{examples/jsm → src}/nodes/materials/PointsNodeMaterial.js +3 -3
  152. package/{examples/jsm → src}/nodes/materials/ShadowNodeMaterial.js +3 -3
  153. package/{examples/jsm → src}/nodes/materials/SpriteNodeMaterial.js +3 -3
  154. package/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +9 -17
  155. package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +474 -577
  156. package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +2 -8
  157. package/{examples/jsm → src}/nodes/math/CondNode.js +13 -6
  158. package/{examples/jsm → src}/nodes/math/MathNode.js +14 -1
  159. package/{examples/jsm → src}/nodes/math/OperatorNode.js +6 -6
  160. package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
  161. package/{examples/jsm → src}/nodes/pmrem/PMREMNode.js +2 -1
  162. package/{examples/jsm → src}/nodes/shadernode/ShaderNode.js +2 -0
  163. package/{examples/jsm → src}/nodes/utils/DiscardNode.js +1 -0
  164. package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +2 -0
  165. package/{examples/jsm → src}/nodes/utils/LoopNode.js +7 -6
  166. package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +8 -2
  167. package/src/nodes/utils/RTTNode.js +130 -0
  168. package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +9 -1
  169. package/src/objects/BatchedMesh.js +168 -188
  170. package/src/objects/InstancedMesh.js +1 -1
  171. package/src/renderers/WebGLRenderer.js +38 -25
  172. package/{examples/jsm → src}/renderers/common/Attributes.js +2 -1
  173. package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
  174. package/{examples/jsm → src}/renderers/common/Background.js +9 -3
  175. package/src/renderers/common/BindGroup.js +16 -0
  176. package/{examples/jsm → src}/renderers/common/Bindings.js +38 -23
  177. package/{examples/jsm → src}/renderers/common/ClippingContext.js +4 -2
  178. package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
  179. package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +7 -1
  180. package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
  181. package/{examples/jsm → src}/renderers/common/Info.js +34 -6
  182. package/src/renderers/common/PostProcessing.js +87 -0
  183. package/{examples/jsm/objects → src/renderers/common}/QuadMesh.js +6 -3
  184. package/{examples/jsm → src}/renderers/common/RenderContext.js +1 -1
  185. package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
  186. package/{examples/jsm → src}/renderers/common/RenderObject.js +44 -11
  187. package/{examples/jsm → src}/renderers/common/Renderer.js +84 -32
  188. package/{examples/jsm → src}/renderers/common/SampledTexture.js +2 -2
  189. package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
  190. package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
  191. package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
  192. package/{examples/jsm → src}/renderers/common/Textures.js +6 -2
  193. package/{examples/jsm → src}/renderers/common/Uniform.js +9 -4
  194. package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
  195. package/{examples/jsm → src}/renderers/common/extras/PMREMGenerator.js +13 -12
  196. package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
  197. package/{examples/jsm → src}/renderers/common/nodes/NodeSampledTexture.js +6 -5
  198. package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +2 -1
  199. package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
  200. package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
  201. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
  202. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
  203. package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +37 -16
  204. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +16 -1
  205. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  206. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +1 -1
  207. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
  208. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
  209. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  210. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  211. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -4
  212. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  213. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  214. package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
  215. package/src/renderers/shaders/UniformsLib.js +3 -0
  216. package/src/renderers/webgl/WebGLAttributes.js +2 -2
  217. package/src/renderers/webgl/WebGLBufferRenderer.js +6 -19
  218. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +6 -18
  219. package/src/renderers/webgl/WebGLLights.js +6 -0
  220. package/src/renderers/webgl/WebGLProgram.js +26 -0
  221. package/src/renderers/webgl/WebGLPrograms.js +1 -1
  222. package/src/renderers/webgl/WebGLTextures.js +14 -53
  223. package/src/renderers/webgl/WebGLUniforms.js +12 -2
  224. package/src/renderers/webgl/WebGLUniformsGroups.js +7 -7
  225. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +156 -54
  226. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +178 -43
  227. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +2 -2
  228. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +1 -0
  229. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
  230. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +1 -1
  231. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +34 -2
  232. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +1 -1
  233. package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +164 -76
  234. package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +2 -2
  235. package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +194 -56
  236. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
  237. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  238. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +20 -13
  239. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +3 -1
  240. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +28 -21
  241. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +40 -23
  242. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +24 -3
  243. package/src/renderers/webxr/WebXRDepthSensing.js +6 -0
  244. package/src/renderers/webxr/WebXRManager.js +6 -0
  245. package/src/textures/CompressedArrayTexture.js +1 -1
  246. package/examples/jsm/nodes/accessors/CameraNode.js +0 -12
  247. package/examples/jsm/nodes/accessors/InstanceNode.js +0 -94
  248. package/examples/jsm/nodes/core/NodeCache.js +0 -26
  249. package/examples/jsm/nodes/display/PassNode.js +0 -201
  250. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -256
  251. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  252. package/examples/jsm/renderers/common/PostProcessing.js +0 -33
  253. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  254. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  255. /package/{examples/jsm → src}/nodes/accessors/AccessorsUtils.js +0 -0
  256. /package/{examples/jsm → src}/nodes/accessors/BitangentNode.js +0 -0
  257. /package/{examples/jsm → src}/nodes/accessors/BufferNode.js +0 -0
  258. /package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +0 -0
  259. /package/{examples/jsm → src}/nodes/accessors/InstancedPointsMaterialNode.js +0 -0
  260. /package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +0 -0
  261. /package/{examples/jsm → src}/nodes/accessors/ModelViewProjectionNode.js +0 -0
  262. /package/{examples/jsm → src}/nodes/accessors/PointUVNode.js +0 -0
  263. /package/{examples/jsm → src}/nodes/accessors/PositionNode.js +0 -0
  264. /package/{examples/jsm → src}/nodes/accessors/RendererReferenceNode.js +0 -0
  265. /package/{examples/jsm → src}/nodes/accessors/SceneNode.js +0 -0
  266. /package/{examples/jsm → src}/nodes/accessors/SkinningNode.js +0 -0
  267. /package/{examples/jsm → src}/nodes/accessors/TangentNode.js +0 -0
  268. /package/{examples/jsm → src}/nodes/accessors/Texture3DNode.js +0 -0
  269. /package/{examples/jsm → src}/nodes/accessors/TextureBicubicNode.js +0 -0
  270. /package/{examples/jsm → src}/nodes/accessors/TextureSizeNode.js +0 -0
  271. /package/{examples/jsm → src}/nodes/accessors/UVNode.js +0 -0
  272. /package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +0 -0
  273. /package/{examples/jsm → src}/nodes/code/CodeNode.js +0 -0
  274. /package/{examples/jsm → src}/nodes/code/ExpressionNode.js +0 -0
  275. /package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +0 -0
  276. /package/{examples/jsm → src}/nodes/code/FunctionNode.js +0 -0
  277. /package/{examples/jsm → src}/nodes/core/AssignNode.js +0 -0
  278. /package/{examples/jsm → src}/nodes/core/BypassNode.js +0 -0
  279. /package/{examples/jsm → src}/nodes/core/ConstNode.js +0 -0
  280. /package/{examples/jsm → src}/nodes/core/ContextNode.js +0 -0
  281. /package/{examples/jsm → src}/nodes/core/InputNode.js +0 -0
  282. /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
  283. /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
  284. /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
  285. /package/{examples/jsm → src}/nodes/core/NodeKeywords.js +0 -0
  286. /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
  287. /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
  288. /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
  289. /package/{examples/jsm → src}/nodes/core/OutputStructNode.js +0 -0
  290. /package/{examples/jsm → src}/nodes/core/ParameterNode.js +0 -0
  291. /package/{examples/jsm → src}/nodes/core/StackNode.js +0 -0
  292. /package/{examples/jsm → src}/nodes/core/StructTypeNode.js +0 -0
  293. /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
  294. /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
  295. /package/{examples/jsm → src}/nodes/display/BlendModeNode.js +0 -0
  296. /package/{examples/jsm → src}/nodes/display/BumpMapNode.js +0 -0
  297. /package/{examples/jsm → src}/nodes/display/PosterizeNode.js +0 -0
  298. /package/{examples/jsm → src}/nodes/fog/FogExp2Node.js +0 -0
  299. /package/{examples/jsm → src}/nodes/fog/FogNode.js +0 -0
  300. /package/{examples/jsm → src}/nodes/fog/FogRangeNode.js +0 -0
  301. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_GGX.js +0 -0
  302. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +0 -0
  303. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +0 -0
  304. /package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +0 -0
  305. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +0 -0
  306. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX_Anisotropic.js +0 -0
  307. /package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +0 -0
  308. /package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +0 -0
  309. /package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +0 -0
  310. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +0 -0
  311. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +0 -0
  312. /package/{examples/jsm → src}/nodes/functions/ShadowMaskModel.js +0 -0
  313. /package/{examples/jsm → src}/nodes/functions/material/getGeometryRoughness.js +0 -0
  314. /package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +0 -0
  315. /package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +0 -0
  316. /package/{examples/jsm → src}/nodes/lighting/IrradianceNode.js +0 -0
  317. /package/{examples/jsm → src}/nodes/lighting/LightNode.js +0 -0
  318. /package/{examples/jsm → src}/nodes/lighting/LightUtils.js +0 -0
  319. /package/{examples/jsm → src}/nodes/lighting/LightingContextNode.js +0 -0
  320. /package/{examples/jsm → src}/nodes/materials/Materials.js +0 -0
  321. /package/{examples/jsm → src}/nodes/materials/MeshSSSNodeMaterial.js +0 -0
  322. /package/{examples/jsm → src}/nodes/materials/VolumeNodeMaterial.js +0 -0
  323. /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
  324. /package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +0 -0
  325. /package/{examples/jsm → src}/nodes/math/HashNode.js +0 -0
  326. /package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -0
  327. /package/{examples/jsm → src}/nodes/math/TriNoise3D.js +0 -0
  328. /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
  329. /package/{examples/jsm → src}/nodes/pmrem/PMREMUtils.js +0 -0
  330. /package/{examples/jsm → src}/nodes/procedural/CheckerNode.js +0 -0
  331. /package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +0 -0
  332. /package/{examples/jsm → src}/nodes/utils/ConvertNode.js +0 -0
  333. /package/{examples/jsm → src}/nodes/utils/EquirectUVNode.js +0 -0
  334. /package/{examples/jsm → src}/nodes/utils/JoinNode.js +0 -0
  335. /package/{examples/jsm → src}/nodes/utils/MatcapUVNode.js +0 -0
  336. /package/{examples/jsm → src}/nodes/utils/OscNode.js +0 -0
  337. /package/{examples/jsm → src}/nodes/utils/PackingNode.js +0 -0
  338. /package/{examples/jsm → src}/nodes/utils/RemapNode.js +0 -0
  339. /package/{examples/jsm → src}/nodes/utils/RotateNode.js +0 -0
  340. /package/{examples/jsm → src}/nodes/utils/RotateUVNode.js +0 -0
  341. /package/{examples/jsm → src}/nodes/utils/SetNode.js +0 -0
  342. /package/{examples/jsm → src}/nodes/utils/SplitNode.js +0 -0
  343. /package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +0 -0
  344. /package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +0 -0
  345. /package/{examples/jsm → src}/nodes/utils/TimerNode.js +0 -0
  346. /package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +0 -0
  347. /package/{examples/jsm → src}/renderers/common/Animation.js +0 -0
  348. /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
  349. /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
  350. /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
  351. /package/{examples/jsm → src}/renderers/common/ChainMap.js +0 -0
  352. /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
  353. /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
  354. /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
  355. /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
  356. /package/{examples/jsm → src}/renderers/common/Pipelines.js +0 -0
  357. /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
  358. /package/{examples/jsm → src}/renderers/common/RenderBundle.js +0 -0
  359. /package/{examples/jsm → src}/renderers/common/RenderBundles.js +0 -0
  360. /package/{examples/jsm → src}/renderers/common/RenderList.js +0 -0
  361. /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
  362. /package/{examples/jsm → src}/renderers/common/RenderObjects.js +0 -0
  363. /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
  364. /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
  365. /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
  366. /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
  367. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBufferRenderer.js +0 -0
  368. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
  369. /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
  370. /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;
@@ -83,9 +94,9 @@ class NodeBuilder {
83
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
+ //
144
177
 
145
- const shared = [];
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 );
197
+
198
+ if ( bindGroup === undefined ) {
163
199
 
164
- shared.push( sharedBinding );
200
+ bindGroup = new BindGroup( groupName, bindingsArray );
201
+ bindGroupsCache.set( bindingsArray, bindGroup );
165
202
 
166
- } else {
203
+ }
204
+
205
+ } else {
206
+
207
+ bindGroup = new BindGroup( groupName, bindingsArray );
208
+
209
+ }
210
+
211
+ return bindGroup;
212
+
213
+ }
214
+
215
+ getBindGroupArray( groupName, shaderStage ) {
216
+
217
+ const bindings = this.bindings[ shaderStage ];
167
218
 
168
- shared.push( binding );
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.' );
@@ -467,7 +592,7 @@ class NodeBuilder {
467
592
 
468
593
  isReference( type ) {
469
594
 
470
- return type === 'void' || type === 'property' || type === 'sampler' || type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'texture3D';
595
+ return type === 'void' || type === 'property' || type === 'sampler' || type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'depthTexture' || type === 'texture3D';
471
596
 
472
597
  }
473
598
 
@@ -631,13 +756,13 @@ class NodeBuilder {
631
756
 
632
757
  cache = cache === null ? ( node.isGlobal( this ) ? this.globalCache : this.cache ) : cache;
633
758
 
634
- let nodeData = cache.getNodeData( node );
759
+ let nodeData = cache.getData( node );
635
760
 
636
761
  if ( nodeData === undefined ) {
637
762
 
638
763
  nodeData = {};
639
764
 
640
- cache.setNodeData( node, nodeData );
765
+ cache.setData( node, nodeData );
641
766
 
642
767
  }
643
768
 
@@ -1164,10 +1289,10 @@ class NodeBuilder {
1164
1289
 
1165
1290
  getNodeUniform( uniformNode, type ) {
1166
1291
 
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 );
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 );
1171
1296
  if ( type === 'color' ) return new ColorNodeUniform( uniformNode );
1172
1297
  if ( type === 'mat3' ) return new Matrix3NodeUniform( uniformNode );
1173
1298
  if ( type === 'mat4' ) return new Matrix4NodeUniform( uniformNode );
@@ -1198,6 +1323,19 @@ class NodeBuilder {
1198
1323
  const fromTypeLength = this.getTypeLength( fromType );
1199
1324
  const toTypeLength = this.getTypeLength( toType );
1200
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
+
1201
1339
  if ( fromTypeLength > 4 ) { // fromType is matrix-like
1202
1340
 
1203
1341
  // @TODO: ignore for now
@@ -1238,7 +1376,7 @@ class NodeBuilder {
1238
1376
 
1239
1377
  }
1240
1378
 
1241
- 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
1242
1380
 
1243
1381
  // convert a number value to vector type, e.g:
1244
1382
  // vec3( 1u ) -> vec3( float( 1u ) )
@@ -1253,7 +1391,7 @@ class NodeBuilder {
1253
1391
 
1254
1392
  getSignature() {
1255
1393
 
1256
- return `// Three.js r${ REVISION } - NodeMaterial System\n`;
1394
+ return `// Three.js r${ REVISION } - Node System\n`;
1257
1395
 
1258
1396
  }
1259
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
 
@@ -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
 
@@ -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' );
@@ -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 );
@@ -11,10 +11,19 @@ class UniformNode extends InputNode {
11
11
 
12
12
  this.isUniformNode = true;
13
13
 
14
+ this.name = '';
14
15
  this.groupNode = objectGroup;
15
16
 
16
17
  }
17
18
 
19
+ label( name ) {
20
+
21
+ this.name = name;
22
+
23
+ return this;
24
+
25
+ }
26
+
18
27
  setGroup( group ) {
19
28
 
20
29
  this.groupNode = group;
@@ -73,7 +82,7 @@ class UniformNode extends InputNode {
73
82
 
74
83
  const sharedNodeType = sharedNode.getInputType( builder );
75
84
 
76
- const nodeUniform = builder.getUniformFromNode( sharedNode, sharedNodeType, builder.shaderStage, builder.context.label );
85
+ const nodeUniform = builder.getUniformFromNode( sharedNode, sharedNodeType, builder.shaderStage, this.name || builder.context.label );
77
86
  const propertyName = builder.getPropertyName( nodeUniform );
78
87
 
79
88
  if ( builder.context.label !== undefined ) delete builder.context.label;
@@ -10,13 +10,9 @@ class VarNode extends Node {
10
10
  this.node = node;
11
11
  this.name = name;
12
12
 
13
- this.isVarNode = true;
14
-
15
- }
13
+ this.global = true;
16
14
 
17
- isGlobal() {
18
-
19
- return true;
15
+ this.isVarNode = true;
20
16
 
21
17
  }
22
18
 
@@ -64,6 +64,14 @@ class VaryingNode extends Node {
64
64
 
65
65
  }
66
66
 
67
+ analyze( builder ) {
68
+
69
+ this.setupVarying( builder );
70
+
71
+ return this.node.analyze( builder );
72
+
73
+ }
74
+
67
75
  generate( builder ) {
68
76
 
69
77
  const properties = builder.getNodeProperties( this );