@needle-tools/three 0.162.12 → 0.169.2

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 (635) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +29789 -1941
  3. package/build/three.module.js +29095 -1933
  4. package/build/three.module.min.js +2 -2
  5. package/build/three.webgpu.js +80003 -0
  6. package/build/three.webgpu.min.js +6 -0
  7. package/build/three.webgpu.nodes.js +79951 -0
  8. package/build/three.webgpu.nodes.min.js +6 -0
  9. package/examples/jsm/Addons.js +2 -5
  10. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  11. package/examples/jsm/animation/CCDIKSolver.js +4 -2
  12. package/examples/jsm/capabilities/WebGL.js +27 -21
  13. package/examples/jsm/controls/ArcballControls.js +174 -158
  14. package/examples/jsm/controls/DragControls.js +260 -132
  15. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  16. package/examples/jsm/controls/FlyControls.js +194 -188
  17. package/examples/jsm/controls/OrbitControls.js +790 -797
  18. package/examples/jsm/controls/PointerLockControls.js +24 -15
  19. package/examples/jsm/controls/TrackballControls.js +469 -448
  20. package/examples/jsm/controls/TransformControls.js +98 -63
  21. package/examples/jsm/csm/CSMShader.js +4 -4
  22. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  23. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  24. package/examples/jsm/effects/StereoEffect.js +6 -1
  25. package/examples/jsm/environments/RoomEnvironment.js +2 -6
  26. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  27. package/examples/jsm/exporters/EXRExporter.js +19 -11
  28. package/examples/jsm/exporters/GLTFExporter.js +77 -8
  29. package/examples/jsm/exporters/KTX2Exporter.js +21 -13
  30. package/examples/jsm/exporters/OBJExporter.js +5 -1
  31. package/examples/jsm/exporters/PLYExporter.js +9 -7
  32. package/examples/jsm/exporters/USDZExporter.js +55 -11
  33. package/examples/jsm/geometries/DecalGeometry.js +4 -1
  34. package/examples/jsm/geometries/InstancedPointsGeometry.js +1 -1
  35. package/examples/jsm/geometries/TeapotGeometry.js +1 -1
  36. package/examples/jsm/geometries/TextGeometry.js +10 -2
  37. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  38. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  39. package/examples/jsm/helpers/ViewHelper.js +75 -61
  40. package/examples/jsm/interactive/HTMLMesh.js +7 -9
  41. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  42. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  43. package/examples/jsm/libs/draco/README.md +2 -2
  44. package/examples/jsm/libs/fflate.module.js +694 -496
  45. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  46. package/examples/jsm/lights/LightProbeGenerator.js +24 -10
  47. package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
  48. package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
  49. package/examples/jsm/lines/LineMaterial.js +1 -17
  50. package/examples/jsm/lines/LineSegments2.js +15 -0
  51. package/examples/jsm/lines/Wireframe.js +16 -1
  52. package/examples/jsm/lines/webgpu/Line2.js +20 -0
  53. package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
  54. package/examples/jsm/loaders/3MFLoader.js +2 -0
  55. package/examples/jsm/loaders/ColladaLoader.js +9 -6
  56. package/examples/jsm/loaders/DRACOLoader.js +4 -2
  57. package/examples/jsm/loaders/EXRLoader.js +351 -97
  58. package/examples/jsm/loaders/FBXLoader.js +77 -78
  59. package/examples/jsm/loaders/GLTFLoader.js +76 -14
  60. package/examples/jsm/loaders/KTX2Loader.js +30 -22
  61. package/examples/jsm/loaders/LDrawLoader.js +3 -2
  62. package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
  63. package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
  64. package/examples/jsm/loaders/LUTImageLoader.js +0 -14
  65. package/examples/jsm/loaders/MMDLoader.js +31 -12
  66. package/examples/jsm/loaders/MTLLoader.js +4 -3
  67. package/examples/jsm/loaders/MaterialXLoader.js +45 -21
  68. package/examples/jsm/loaders/OBJLoader.js +5 -3
  69. package/examples/jsm/loaders/PCDLoader.js +14 -13
  70. package/examples/jsm/loaders/PDBLoader.js +3 -2
  71. package/examples/jsm/loaders/PLYLoader.js +8 -5
  72. package/examples/jsm/loaders/RGBMLoader.js +16 -0
  73. package/examples/jsm/loaders/STLLoader.js +3 -2
  74. package/examples/jsm/loaders/USDZLoader.js +124 -76
  75. package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
  76. package/examples/jsm/loaders/VRMLLoader.js +11 -11
  77. package/examples/jsm/loaders/VTKLoader.js +80 -6
  78. package/examples/jsm/loaders/XYZLoader.js +3 -2
  79. package/examples/jsm/loaders/lwo/IFFParser.js +8 -5
  80. package/examples/jsm/materials/MeshGouraudMaterial.js +7 -1
  81. package/examples/jsm/math/Octree.js +26 -20
  82. package/examples/jsm/misc/GPUComputationRenderer.js +9 -25
  83. package/examples/jsm/misc/Timer.js +1 -1
  84. package/examples/jsm/modifiers/CurveModifier.js +11 -9
  85. package/examples/jsm/modifiers/CurveModifierGPU.js +233 -0
  86. package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
  87. package/examples/jsm/objects/InstancedPoints.js +2 -2
  88. package/examples/jsm/objects/Lensflare.js +2 -2
  89. package/examples/jsm/objects/LensflareMesh.js +322 -0
  90. package/examples/jsm/objects/SkyMesh.js +187 -0
  91. package/examples/jsm/objects/Water2Mesh.js +158 -0
  92. package/examples/jsm/objects/WaterMesh.js +101 -0
  93. package/examples/jsm/physics/JoltPhysics.js +281 -0
  94. package/examples/jsm/physics/RapierPhysics.js +25 -5
  95. package/examples/jsm/postprocessing/GlitchPass.js +0 -3
  96. package/examples/jsm/postprocessing/LUTPass.js +5 -71
  97. package/examples/jsm/postprocessing/OutlinePass.js +31 -46
  98. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  99. package/examples/jsm/postprocessing/RenderTransitionPass.js +168 -0
  100. package/examples/jsm/postprocessing/SAOPass.js +0 -1
  101. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  102. package/examples/jsm/postprocessing/SSAOPass.js +6 -12
  103. package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
  104. package/examples/jsm/renderers/CSS2DRenderer.js +25 -5
  105. package/examples/jsm/renderers/CSS3DRenderer.js +24 -3
  106. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +1 -3
  107. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  108. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +7 -4
  109. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +19 -5
  110. package/examples/jsm/shaders/BleachBypassShader.js +1 -2
  111. package/examples/jsm/shaders/ColorifyShader.js +1 -2
  112. package/examples/jsm/shaders/FXAAShader.js +0 -2
  113. package/examples/jsm/shaders/GTAOShader.js +1 -1
  114. package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
  115. package/examples/jsm/shaders/OutputShader.js +1 -1
  116. package/examples/jsm/transpiler/GLSLDecoder.js +47 -5
  117. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -2
  118. package/examples/jsm/transpiler/TSLEncoder.js +24 -22
  119. package/examples/jsm/utils/BufferGeometryUtils.js +18 -16
  120. package/examples/jsm/utils/GeometryCompressionUtils.js +37 -122
  121. package/examples/jsm/utils/SceneUtils.js +60 -1
  122. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  123. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  124. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  125. package/examples/jsm/utils/SortUtils.js +8 -5
  126. package/examples/jsm/utils/TextureUtils.js +3 -2
  127. package/examples/jsm/utils/TextureUtilsGPU.js +63 -0
  128. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  129. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  130. package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
  131. package/package.json +11 -8
  132. package/src/Three.WebGPU.Nodes.js +200 -0
  133. package/src/Three.WebGPU.js +201 -0
  134. package/src/Three.js +23 -1
  135. package/src/animation/AnimationClip.js +1 -1
  136. package/src/animation/tracks/BooleanKeyframeTrack.js +10 -1
  137. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -2
  138. package/src/animation/tracks/StringKeyframeTrack.js +10 -1
  139. package/src/audio/Audio.js +2 -2
  140. package/src/constants.js +6 -7
  141. package/src/core/BufferAttribute.js +0 -9
  142. package/src/core/Clock.js +1 -1
  143. package/src/core/InterleavedBuffer.js +0 -9
  144. package/src/core/Object3D.js +34 -29
  145. package/src/core/Raycaster.js +6 -2
  146. package/src/core/RenderTarget.js +8 -0
  147. package/src/extras/Controls.js +32 -0
  148. package/src/extras/PMREMGenerator.js +12 -11
  149. package/src/extras/TextureUtils.js +210 -0
  150. package/src/geometries/CylinderGeometry.js +11 -4
  151. package/src/lights/Light.js +1 -0
  152. package/src/lights/LightShadow.js +5 -0
  153. package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
  154. package/src/loaders/FileLoader.js +5 -1
  155. package/src/loaders/LoaderUtils.js +3 -1
  156. package/src/loaders/MaterialLoader.js +8 -1
  157. package/src/loaders/ObjectLoader.js +36 -2
  158. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeLoader.js +27 -5
  159. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeMaterialLoader.js +22 -18
  160. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeObjectLoader.js +21 -1
  161. package/src/materials/Material.js +4 -0
  162. package/src/materials/MeshPhysicalMaterial.js +20 -0
  163. package/src/materials/ShaderMaterial.js +0 -4
  164. package/src/materials/nodes/InstancedPointsNodeMaterial.js +156 -0
  165. package/{examples/jsm/nodes/materials → src/materials/nodes}/Line2NodeMaterial.js +69 -68
  166. package/src/materials/nodes/LineBasicNodeMaterial.js +31 -0
  167. package/{examples/jsm/nodes/materials → src/materials/nodes}/LineDashedNodeMaterial.js +15 -12
  168. package/src/materials/nodes/MeshBasicNodeMaterial.js +77 -0
  169. package/src/materials/nodes/MeshLambertNodeMaterial.js +47 -0
  170. package/src/materials/nodes/MeshMatcapNodeMaterial.js +57 -0
  171. package/src/materials/nodes/MeshNormalNodeMaterial.js +44 -0
  172. package/src/materials/nodes/MeshPhongNodeMaterial.js +78 -0
  173. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +248 -0
  174. package/{examples/jsm/nodes/materials → src/materials/nodes}/MeshSSSNodeMaterial.js +10 -7
  175. package/src/materials/nodes/MeshStandardNodeMaterial.js +108 -0
  176. package/src/materials/nodes/MeshToonNodeMaterial.js +38 -0
  177. package/{examples/jsm/nodes/materials → src/materials/nodes}/NodeMaterial.js +198 -157
  178. package/{examples/jsm/nodes/materials/Materials.js → src/materials/nodes/NodeMaterials.js} +7 -1
  179. package/{examples/jsm/nodes/materials → src/materials/nodes}/PointsNodeMaterial.js +10 -7
  180. package/src/materials/nodes/ShadowNodeMaterial.js +38 -0
  181. package/src/materials/nodes/SpriteNodeMaterial.js +123 -0
  182. package/src/materials/nodes/VolumeNodeMaterial.js +108 -0
  183. package/src/materials/nodes/manager/NodeMaterialObserver.js +302 -0
  184. package/src/math/Box2.js +4 -4
  185. package/src/math/Box3.js +6 -6
  186. package/src/math/ColorManagement.js +10 -0
  187. package/src/math/Matrix2.js +54 -0
  188. package/src/math/Spherical.js +4 -5
  189. package/src/math/Triangle.js +24 -0
  190. package/src/math/Vector4.js +13 -0
  191. package/src/nodes/Nodes.js +164 -0
  192. package/src/nodes/TSL.js +179 -0
  193. package/src/nodes/accessors/AccessorsUtils.js +25 -0
  194. package/src/nodes/accessors/BatchNode.js +128 -0
  195. package/src/nodes/accessors/Bitangent.js +13 -0
  196. package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +44 -6
  197. package/{examples/jsm → src}/nodes/accessors/BufferNode.js +13 -4
  198. package/src/nodes/accessors/Camera.js +13 -0
  199. package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +22 -15
  200. package/src/nodes/accessors/CubeTextureNode.js +79 -0
  201. package/src/nodes/accessors/InstanceNode.js +144 -0
  202. package/src/nodes/accessors/InstancedPointsMaterialNode.js +24 -0
  203. package/src/nodes/accessors/Lights.js +51 -0
  204. package/src/nodes/accessors/MaterialNode.js +441 -0
  205. package/src/nodes/accessors/MaterialProperties.js +3 -0
  206. package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +10 -5
  207. package/src/nodes/accessors/ModelNode.js +72 -0
  208. package/src/nodes/accessors/ModelViewProjectionNode.js +42 -0
  209. package/{examples/jsm → src}/nodes/accessors/MorphNode.js +51 -33
  210. package/src/nodes/accessors/Normal.js +88 -0
  211. package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +18 -34
  212. package/src/nodes/accessors/PointUVNode.js +30 -0
  213. package/src/nodes/accessors/Position.js +10 -0
  214. package/src/nodes/accessors/ReferenceBaseNode.js +171 -0
  215. package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +58 -9
  216. package/src/nodes/accessors/ReflectVector.js +10 -0
  217. package/src/nodes/accessors/RendererReferenceNode.js +35 -0
  218. package/{examples/jsm → src}/nodes/accessors/SceneNode.js +9 -6
  219. package/src/nodes/accessors/SkinningNode.js +191 -0
  220. package/src/nodes/accessors/StorageBufferNode.js +147 -0
  221. package/{examples/jsm/nodes/accessors/TextureStoreNode.js → src/nodes/accessors/StorageTextureNode.js} +35 -10
  222. package/src/nodes/accessors/Tangent.js +22 -0
  223. package/src/nodes/accessors/Texture3DNode.js +103 -0
  224. package/{examples/jsm/nodes/accessors/TextureBicubicNode.js → src/nodes/accessors/TextureBicubic.js} +3 -32
  225. package/{examples/jsm → src}/nodes/accessors/TextureNode.js +123 -39
  226. package/src/nodes/accessors/TextureSizeNode.js +36 -0
  227. package/src/nodes/accessors/UV.js +3 -0
  228. package/{examples/jsm/nodes/accessors/UniformsNode.js → src/nodes/accessors/UniformArrayNode.js} +33 -15
  229. package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +10 -7
  230. package/src/nodes/accessors/VelocityNode.js +134 -0
  231. package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +9 -5
  232. package/{examples/jsm → src}/nodes/code/CodeNode.js +9 -5
  233. package/{examples/jsm → src}/nodes/code/ExpressionNode.js +10 -6
  234. package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +8 -5
  235. package/{examples/jsm → src}/nodes/code/FunctionNode.js +8 -31
  236. package/{examples/jsm → src}/nodes/code/ScriptableNode.js +24 -7
  237. package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +11 -8
  238. package/{examples/jsm → src}/nodes/core/AssignNode.js +12 -9
  239. package/{examples/jsm → src}/nodes/core/AttributeNode.js +29 -12
  240. package/{examples/jsm → src}/nodes/core/BypassNode.js +11 -7
  241. package/src/nodes/core/CacheNode.js +50 -0
  242. package/{examples/jsm → src}/nodes/core/ConstNode.js +6 -3
  243. package/{examples/jsm → src}/nodes/core/ContextNode.js +27 -11
  244. package/src/nodes/core/IndexNode.js +99 -0
  245. package/{examples/jsm → src}/nodes/core/InputNode.js +7 -3
  246. package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
  247. package/src/nodes/core/MRTNode.js +85 -0
  248. package/{examples/jsm → src}/nodes/core/Node.js +114 -57
  249. package/{examples/jsm → src}/nodes/core/NodeBuilder.js +327 -90
  250. package/src/nodes/core/NodeCache.js +36 -0
  251. package/{examples/jsm → src}/nodes/core/NodeFrame.js +52 -10
  252. package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
  253. package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
  254. package/{examples/jsm → src}/nodes/core/NodeUtils.js +56 -8
  255. package/{examples/jsm → src}/nodes/core/OutputStructNode.js +13 -12
  256. package/{examples/jsm → src}/nodes/core/ParameterNode.js +7 -4
  257. package/src/nodes/core/PropertyNode.js +88 -0
  258. package/{examples/jsm → src}/nodes/core/StackNode.js +31 -11
  259. package/{examples/jsm → src}/nodes/core/StructTypeNode.js +7 -3
  260. package/{examples/jsm → src}/nodes/core/TempNode.js +10 -6
  261. package/src/nodes/core/UniformGroupNode.js +59 -0
  262. package/{examples/jsm → src}/nodes/core/UniformNode.js +37 -5
  263. package/{examples/jsm → src}/nodes/core/VarNode.js +14 -14
  264. package/src/nodes/core/VaryingNode.js +108 -0
  265. package/{examples/jsm → src}/nodes/display/AfterImageNode.js +38 -28
  266. package/src/nodes/display/AnaglyphPassNode.js +67 -0
  267. package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +33 -30
  268. package/src/nodes/display/BleachBypass.js +26 -0
  269. package/src/nodes/display/BlendMode.js +54 -0
  270. package/src/nodes/display/BloomNode.js +341 -0
  271. package/{examples/jsm → src}/nodes/display/BumpMapNode.js +20 -38
  272. package/src/nodes/display/ColorAdjustment.js +46 -0
  273. package/src/nodes/display/ColorSpaceFunctions.js +38 -0
  274. package/src/nodes/display/ColorSpaceNode.js +114 -0
  275. package/src/nodes/display/DenoiseNode.js +204 -0
  276. package/src/nodes/display/DepthOfFieldNode.js +124 -0
  277. package/src/nodes/display/DotScreenNode.js +66 -0
  278. package/src/nodes/display/FXAANode.js +332 -0
  279. package/src/nodes/display/FilmNode.js +56 -0
  280. package/src/nodes/display/FrontFacingNode.js +45 -0
  281. package/src/nodes/display/GTAONode.js +331 -0
  282. package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +47 -24
  283. package/src/nodes/display/Lut3DNode.js +57 -0
  284. package/src/nodes/display/MotionBlur.js +25 -0
  285. package/{examples/jsm → src}/nodes/display/NormalMapNode.js +14 -14
  286. package/src/nodes/display/ParallaxBarrierPassNode.js +58 -0
  287. package/src/nodes/display/PassNode.js +378 -0
  288. package/src/nodes/display/PixelationPassNode.js +213 -0
  289. package/{examples/jsm → src}/nodes/display/PosterizeNode.js +8 -7
  290. package/src/nodes/display/RGBShiftNode.js +53 -0
  291. package/src/nodes/display/RenderOutputNode.js +60 -0
  292. package/src/nodes/display/SSAAPassNode.js +287 -0
  293. package/src/nodes/display/ScreenNode.js +181 -0
  294. package/src/nodes/display/Sepia.js +17 -0
  295. package/src/nodes/display/SobelOperatorNode.js +126 -0
  296. package/src/nodes/display/StereoCompositePassNode.js +110 -0
  297. package/src/nodes/display/StereoPassNode.js +83 -0
  298. package/src/nodes/display/ToneMappingFunctions.js +190 -0
  299. package/src/nodes/display/ToneMappingNode.js +67 -0
  300. package/src/nodes/display/ToonOutlinePassNode.js +111 -0
  301. package/src/nodes/display/TransitionNode.js +80 -0
  302. package/src/nodes/display/ViewportDepthNode.js +125 -0
  303. package/src/nodes/display/ViewportDepthTextureNode.js +33 -0
  304. package/src/nodes/display/ViewportSharedTextureNode.js +39 -0
  305. package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +20 -14
  306. package/src/nodes/fog/FogExp2Node.js +35 -0
  307. package/src/nodes/fog/FogNode.js +50 -0
  308. package/src/nodes/fog/FogRangeNode.js +36 -0
  309. package/src/nodes/functions/BSDF/BRDF_GGX.js +59 -0
  310. package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  311. package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  312. package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +2 -2
  313. package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +2 -2
  314. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
  315. package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  316. package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +2 -2
  317. package/src/nodes/functions/BSDF/LTC.js +131 -0
  318. package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  319. package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -4
  320. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
  321. package/src/nodes/functions/BasicLightingModel.js +78 -0
  322. package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +11 -9
  323. package/src/nodes/functions/PhysicalLightingModel.js +633 -0
  324. package/src/nodes/functions/ShadowMaskModel.js +31 -0
  325. package/src/nodes/functions/ToonLightingModel.js +51 -0
  326. package/src/nodes/functions/material/getGeometryRoughness.js +13 -0
  327. package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +2 -2
  328. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  329. package/{examples/jsm → src}/nodes/geometry/RangeNode.js +28 -11
  330. package/src/nodes/gpgpu/AtomicFunctionNode.js +99 -0
  331. package/src/nodes/gpgpu/BarrierNode.js +40 -0
  332. package/src/nodes/gpgpu/ComputeBuiltinNode.js +98 -0
  333. package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +10 -6
  334. package/src/nodes/gpgpu/WorkgroupInfoNode.js +100 -0
  335. package/src/nodes/lighting/AONode.js +27 -0
  336. package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +6 -8
  337. package/src/nodes/lighting/AnalyticLightNode.js +522 -0
  338. package/src/nodes/lighting/BasicEnvironmentNode.js +30 -0
  339. package/src/nodes/lighting/BasicLightMapNode.js +32 -0
  340. package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +7 -9
  341. package/src/nodes/lighting/EnvironmentNode.js +138 -0
  342. package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +12 -11
  343. package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +7 -9
  344. package/src/nodes/lighting/IrradianceNode.js +27 -0
  345. package/src/nodes/lighting/LightProbeNode.js +53 -0
  346. package/{examples/jsm → src}/nodes/lighting/LightUtils.js +3 -3
  347. package/src/nodes/lighting/LightingContextNode.js +67 -0
  348. package/{examples/jsm → src}/nodes/lighting/LightingNode.js +9 -3
  349. package/src/nodes/lighting/LightsNode.js +250 -0
  350. package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +12 -13
  351. package/src/nodes/lighting/RectAreaLightNode.js +97 -0
  352. package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +14 -16
  353. package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +2 -2
  354. package/src/nodes/materialx/lib/mx_hsv.js +127 -0
  355. package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +500 -603
  356. package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +3 -9
  357. package/{examples/jsm/nodes/math/CondNode.js → src/nodes/math/ConditionalNode.js} +48 -13
  358. package/src/nodes/math/Hash.js +13 -0
  359. package/src/nodes/math/MathNode.js +407 -0
  360. package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -7
  361. package/src/nodes/math/OperatorNode.js +319 -0
  362. package/{examples/jsm → src}/nodes/math/TriNoise3D.js +19 -29
  363. package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
  364. package/src/nodes/pmrem/PMREMNode.js +240 -0
  365. package/src/nodes/pmrem/PMREMUtils.js +288 -0
  366. package/src/nodes/procedural/Checker.js +14 -0
  367. package/src/nodes/tsl/TSLBase.js +30 -0
  368. package/{examples/jsm/nodes/shadernode/ShaderNode.js → src/nodes/tsl/TSLCore.js} +122 -96
  369. package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +9 -5
  370. package/{examples/jsm → src}/nodes/utils/ConvertNode.js +7 -3
  371. package/src/nodes/utils/CubeMapNode.js +160 -0
  372. package/src/nodes/utils/Discard.js +8 -0
  373. package/src/nodes/utils/EquirectUVNode.js +36 -0
  374. package/src/nodes/utils/FlipNode.js +68 -0
  375. package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +11 -5
  376. package/{examples/jsm → src}/nodes/utils/JoinNode.js +6 -3
  377. package/{examples/jsm → src}/nodes/utils/LoopNode.js +23 -12
  378. package/src/nodes/utils/MatcapUVNode.js +33 -0
  379. package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +16 -7
  380. package/{examples/jsm → src}/nodes/utils/OscNode.js +12 -8
  381. package/src/nodes/utils/Packing.js +4 -0
  382. package/src/nodes/utils/RTTNode.js +133 -0
  383. package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +21 -5
  384. package/{examples/jsm → src}/nodes/utils/RemapNode.js +12 -8
  385. package/{examples/jsm → src}/nodes/utils/RotateNode.js +8 -13
  386. package/{examples/jsm → src}/nodes/utils/SetNode.js +7 -4
  387. package/{examples/jsm → src}/nodes/utils/SplitNode.js +7 -3
  388. package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +10 -6
  389. package/src/nodes/utils/SpriteUtils.js +47 -0
  390. package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +11 -12
  391. package/{examples/jsm → src}/nodes/utils/TimerNode.js +8 -5
  392. package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +11 -9
  393. package/src/nodes/utils/UVUtils.js +19 -0
  394. package/src/nodes/utils/ViewportUtils.js +14 -0
  395. package/src/objects/BatchedMesh.js +302 -144
  396. package/src/objects/InstancedMesh.js +11 -1
  397. package/src/objects/LOD.js +21 -0
  398. package/src/objects/Line.js +67 -43
  399. package/src/objects/Mesh.js +7 -23
  400. package/src/objects/Points.js +2 -0
  401. package/src/renderers/WebGLRenderer.js +473 -224
  402. package/{examples/jsm → src}/renderers/common/Animation.js +3 -0
  403. package/{examples/jsm → src}/renderers/common/Attributes.js +4 -1
  404. package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
  405. package/{examples/jsm → src}/renderers/common/Background.js +18 -10
  406. package/src/renderers/common/BindGroup.js +18 -0
  407. package/src/renderers/common/Bindings.js +203 -0
  408. package/src/renderers/common/BundleGroup.js +26 -0
  409. package/src/renderers/common/ChainMap.js +59 -0
  410. package/{examples/jsm → src}/renderers/common/ClippingContext.js +24 -12
  411. package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
  412. package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +16 -4
  413. package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
  414. package/{examples/jsm → src}/renderers/common/Info.js +35 -15
  415. package/{examples/jsm → src}/renderers/common/Pipelines.js +2 -2
  416. package/src/renderers/common/PostProcessing.js +90 -0
  417. package/src/renderers/common/QuadMesh.js +55 -0
  418. package/src/renderers/common/RenderBundle.js +18 -0
  419. package/src/renderers/common/RenderBundles.js +38 -0
  420. package/{examples/jsm → src}/renderers/common/RenderContext.js +25 -2
  421. package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
  422. package/{examples/jsm → src}/renderers/common/RenderList.js +11 -2
  423. package/src/renderers/common/RenderObject.js +413 -0
  424. package/{examples/jsm → src}/renderers/common/RenderObjects.js +9 -2
  425. package/{examples/jsm → src}/renderers/common/Renderer.js +431 -83
  426. package/{examples/jsm → src}/renderers/common/SampledTexture.js +14 -5
  427. package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
  428. package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
  429. package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
  430. package/{examples/jsm → src}/renderers/common/Textures.js +15 -15
  431. package/{examples/jsm → src}/renderers/common/Uniform.js +10 -5
  432. package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
  433. package/src/renderers/common/extras/PMREMGenerator.js +771 -0
  434. package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
  435. package/src/renderers/common/nodes/NodeLibrary.js +118 -0
  436. package/src/renderers/common/nodes/NodeSampledTexture.js +64 -0
  437. package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +8 -1
  438. package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
  439. package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
  440. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
  441. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
  442. package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +106 -68
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +31 -1
  444. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  445. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
  446. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
  447. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
  448. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
  449. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  450. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
  451. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  452. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -0
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
  454. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  455. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
  456. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
  457. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
  458. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +1 -1
  459. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
  460. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +10 -31
  461. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
  462. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  463. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +38 -25
  464. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  465. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  466. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +19 -11
  467. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  468. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
  469. package/src/renderers/shaders/ShaderChunk.js +0 -2
  470. package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
  472. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  473. package/src/renderers/shaders/ShaderLib.js +2 -1
  474. package/src/renderers/shaders/UniformsLib.js +3 -0
  475. package/src/renderers/shaders/UniformsUtils.js +10 -1
  476. package/src/renderers/webgl/WebGLAttributes.js +42 -38
  477. package/src/renderers/webgl/WebGLBackground.js +24 -3
  478. package/src/renderers/webgl/WebGLBindingStates.js +14 -51
  479. package/src/renderers/webgl/WebGLBufferRenderer.js +23 -22
  480. package/src/renderers/webgl/WebGLCapabilities.js +44 -13
  481. package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
  482. package/src/renderers/webgl/WebGLExtensions.js +7 -20
  483. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +23 -21
  484. package/src/renderers/webgl/WebGLLights.js +21 -44
  485. package/src/renderers/webgl/WebGLMaterials.js +9 -8
  486. package/src/renderers/webgl/WebGLMorphtargets.js +78 -217
  487. package/src/renderers/webgl/WebGLProgram.js +46 -78
  488. package/src/renderers/webgl/WebGLPrograms.js +37 -40
  489. package/src/renderers/webgl/WebGLProperties.js +7 -0
  490. package/src/renderers/webgl/WebGLRenderStates.js +15 -9
  491. package/src/renderers/webgl/WebGLShadowMap.js +25 -25
  492. package/src/renderers/webgl/WebGLState.js +35 -58
  493. package/src/renderers/webgl/WebGLTextures.js +313 -358
  494. package/src/renderers/webgl/WebGLUniforms.js +12 -2
  495. package/src/renderers/webgl/WebGLUniformsGroups.js +8 -8
  496. package/src/renderers/webgl/WebGLUtils.js +9 -78
  497. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +389 -152
  498. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +145 -0
  499. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +245 -44
  500. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +7 -1
  501. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +2 -0
  502. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
  503. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +21 -3
  504. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +271 -43
  505. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +6 -23
  506. package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +318 -141
  507. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +42 -0
  508. package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +10 -7
  509. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +59 -0
  510. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +105 -0
  511. package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +424 -95
  512. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
  513. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +37 -18
  514. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +86 -32
  515. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +10 -1
  516. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +68 -27
  517. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
  518. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +235 -68
  519. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +43 -5
  520. package/src/renderers/webxr/WebXRDepthSensing.js +11 -6
  521. package/src/renderers/webxr/WebXRManager.js +53 -38
  522. package/src/scenes/Scene.js +7 -1
  523. package/src/textures/CompressedArrayTexture.js +14 -0
  524. package/src/textures/DataArrayTexture.js +14 -0
  525. package/src/textures/DepthTexture.js +1 -3
  526. package/src/textures/Texture.js +12 -2
  527. package/src/utils.js +62 -1
  528. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  529. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  530. package/examples/jsm/loaders/TiltLoader.js +0 -520
  531. package/examples/jsm/nodes/Nodes.js +0 -195
  532. package/examples/jsm/nodes/accessors/AccessorsUtils.js +0 -10
  533. package/examples/jsm/nodes/accessors/BitangentNode.js +0 -89
  534. package/examples/jsm/nodes/accessors/CameraNode.js +0 -119
  535. package/examples/jsm/nodes/accessors/CubeTextureNode.js +0 -61
  536. package/examples/jsm/nodes/accessors/InstanceNode.js +0 -71
  537. package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  538. package/examples/jsm/nodes/accessors/MaterialNode.js +0 -314
  539. package/examples/jsm/nodes/accessors/ModelNode.js +0 -33
  540. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +0 -39
  541. package/examples/jsm/nodes/accessors/NormalNode.js +0 -96
  542. package/examples/jsm/nodes/accessors/PointUVNode.js +0 -26
  543. package/examples/jsm/nodes/accessors/PositionNode.js +0 -104
  544. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -35
  545. package/examples/jsm/nodes/accessors/SkinningNode.js +0 -124
  546. package/examples/jsm/nodes/accessors/StorageBufferNode.js +0 -72
  547. package/examples/jsm/nodes/accessors/TangentNode.js +0 -109
  548. package/examples/jsm/nodes/accessors/TextureSizeNode.js +0 -35
  549. package/examples/jsm/nodes/accessors/UVNode.js +0 -47
  550. package/examples/jsm/nodes/core/CacheNode.js +0 -49
  551. package/examples/jsm/nodes/core/IndexNode.js +0 -66
  552. package/examples/jsm/nodes/core/NodeCache.js +0 -26
  553. package/examples/jsm/nodes/core/NodeKeywords.js +0 -80
  554. package/examples/jsm/nodes/core/PropertyNode.js +0 -72
  555. package/examples/jsm/nodes/core/UniformGroupNode.js +0 -36
  556. package/examples/jsm/nodes/core/VaryingNode.js +0 -65
  557. package/examples/jsm/nodes/display/BlendModeNode.js +0 -128
  558. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +0 -99
  559. package/examples/jsm/nodes/display/ColorSpaceNode.js +0 -108
  560. package/examples/jsm/nodes/display/FrontFacingNode.js +0 -27
  561. package/examples/jsm/nodes/display/PassNode.js +0 -183
  562. package/examples/jsm/nodes/display/ToneMappingNode.js +0 -184
  563. package/examples/jsm/nodes/display/ViewportDepthNode.js +0 -97
  564. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +0 -31
  565. package/examples/jsm/nodes/display/ViewportNode.js +0 -134
  566. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +0 -31
  567. package/examples/jsm/nodes/fog/FogExp2Node.js +0 -35
  568. package/examples/jsm/nodes/fog/FogNode.js +0 -38
  569. package/examples/jsm/nodes/fog/FogRangeNode.js +0 -34
  570. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +0 -40
  571. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +0 -393
  572. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +0 -13
  573. package/examples/jsm/nodes/lighting/AONode.js +0 -27
  574. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -241
  575. package/examples/jsm/nodes/lighting/EnvironmentNode.js +0 -181
  576. package/examples/jsm/nodes/lighting/LightNode.js +0 -57
  577. package/examples/jsm/nodes/lighting/LightingContextNode.js +0 -66
  578. package/examples/jsm/nodes/lighting/LightsNode.js +0 -188
  579. package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  580. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -28
  581. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  582. package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +0 -34
  583. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  584. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -65
  585. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +0 -155
  586. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +0 -80
  587. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -90
  588. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +0 -130
  589. package/examples/jsm/nodes/math/HashNode.js +0 -34
  590. package/examples/jsm/nodes/math/MathNode.js +0 -391
  591. package/examples/jsm/nodes/math/OperatorNode.js +0 -274
  592. package/examples/jsm/nodes/procedural/CheckerNode.js +0 -42
  593. package/examples/jsm/nodes/utils/DiscardNode.js +0 -27
  594. package/examples/jsm/nodes/utils/EquirectUVNode.js +0 -33
  595. package/examples/jsm/nodes/utils/MatcapUVNode.js +0 -30
  596. package/examples/jsm/nodes/utils/PackingNode.js +0 -55
  597. package/examples/jsm/nodes/utils/RotateUVNode.js +0 -35
  598. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
  599. package/examples/jsm/objects/QuadMesh.js +0 -66
  600. package/examples/jsm/renderers/common/Bindings.js +0 -173
  601. package/examples/jsm/renderers/common/ChainMap.js +0 -89
  602. package/examples/jsm/renderers/common/PostProcessing.js +0 -25
  603. package/examples/jsm/renderers/common/RenderObject.js +0 -221
  604. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  605. package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +0 -49
  606. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  607. package/examples/jsm/utils/GPUStatsPanel.js +0 -128
  608. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  609. package/src/renderers/WebGL1Renderer.js +0 -7
  610. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
  611. /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
  612. /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
  613. /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
  614. /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
  615. /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
  616. /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
  617. /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
  618. /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
  619. /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
  620. /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
  621. /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
  622. /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
  623. /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
  624. /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
  625. /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
  626. /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
  627. /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
  628. /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
  629. /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
  630. /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
  631. /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
  632. /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
  633. /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
  634. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
  635. /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
@@ -3,27 +3,37 @@ import NodeAttribute from './NodeAttribute.js';
3
3
  import NodeVarying from './NodeVarying.js';
4
4
  import NodeVar from './NodeVar.js';
5
5
  import NodeCode from './NodeCode.js';
6
- import NodeKeywords from './NodeKeywords.js';
7
6
  import NodeCache from './NodeCache.js';
8
7
  import ParameterNode from './ParameterNode.js';
9
8
  import FunctionNode from '../code/FunctionNode.js';
10
- import { createNodeMaterialFromType, default as NodeMaterial } from '../materials/NodeMaterial.js';
9
+ import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
11
10
  import { NodeUpdateType, defaultBuildStages, shaderStages } from './constants.js';
12
11
 
13
12
  import {
14
- FloatNodeUniform, Vector2NodeUniform, Vector3NodeUniform, Vector4NodeUniform,
13
+ NumberNodeUniform, Vector2NodeUniform, Vector3NodeUniform, Vector4NodeUniform,
15
14
  ColorNodeUniform, Matrix3NodeUniform, Matrix4NodeUniform
16
15
  } from '../../renderers/common/nodes/NodeUniform.js';
17
16
 
18
- import { REVISION, RenderTarget, NoColorSpace, Color, Vector2, Vector3, Vector4, Float16BufferAttribute } from 'three';
19
-
20
17
  import { stack } from './StackNode.js';
21
- import { getCurrentStack, setCurrentStack } from '../shadernode/ShaderNode.js';
18
+ import { getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js';
22
19
 
23
20
  import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
24
21
  import ChainMap from '../../renderers/common/ChainMap.js';
25
22
 
26
- const uniformsGroupCache = new ChainMap();
23
+ import PMREMGenerator from '../../renderers/common/extras/PMREMGenerator.js';
24
+
25
+ import BindGroup from '../../renderers/common/BindGroup.js';
26
+
27
+ import { REVISION } from '../../constants.js';
28
+ import { RenderTarget } from '../../core/RenderTarget.js';
29
+ import { Color } from '../../math/Color.js';
30
+ import { Vector2 } from '../../math/Vector2.js';
31
+ import { Vector3 } from '../../math/Vector3.js';
32
+ import { Vector4 } from '../../math/Vector4.js';
33
+ import { Float16BufferAttribute } from '../../core/BufferAttribute.js';
34
+ import { IntType, UnsignedIntType, LinearFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter } from '../../constants.js';
35
+
36
+ const rendererCache = new WeakMap();
27
37
 
28
38
  const typeFromLength = new Map( [
29
39
  [ 2, 'vec2' ],
@@ -53,24 +63,27 @@ const toFloat = ( value ) => {
53
63
 
54
64
  class NodeBuilder {
55
65
 
56
- constructor( object, renderer, parser, scene = null, material = null ) {
66
+ constructor( object, renderer, parser ) {
57
67
 
58
68
  this.object = object;
59
- this.material = material || ( object && object.material ) || null;
69
+ this.material = ( object && object.material ) || null;
60
70
  this.geometry = ( object && object.geometry ) || null;
61
71
  this.renderer = renderer;
62
72
  this.parser = parser;
63
- this.scene = scene;
73
+ this.scene = null;
74
+ this.camera = null;
64
75
 
65
76
  this.nodes = [];
66
77
  this.updateNodes = [];
67
78
  this.updateBeforeNodes = [];
79
+ this.updateAfterNodes = [];
68
80
  this.hashNodes = {};
69
81
 
82
+ this.monitor = null;
83
+
70
84
  this.lightsNode = null;
71
85
  this.environmentNode = null;
72
86
  this.fogNode = null;
73
- this.toneMappingNode = null;
74
87
 
75
88
  this.clippingContext = null;
76
89
 
@@ -79,12 +92,12 @@ class NodeBuilder {
79
92
  this.computeShader = null;
80
93
 
81
94
  this.flowNodes = { vertex: [], fragment: [], compute: [] };
82
- this.flowCode = { vertex: '', fragment: '', compute: [] };
95
+ this.flowCode = { vertex: '', fragment: '', compute: '' };
83
96
  this.uniforms = { vertex: [], fragment: [], compute: [], index: 0 };
84
97
  this.structs = { vertex: [], fragment: [], compute: [], index: 0 };
85
- this.bindings = { vertex: [], fragment: [], compute: [] };
86
- this.bindingsOffset = { vertex: 0, fragment: 0, compute: 0 };
87
- this.bindingsArray = null;
98
+ this.bindings = { vertex: {}, fragment: {}, compute: {} };
99
+ this.bindingsIndexes = {};
100
+ this.bindGroups = null;
88
101
  this.attributes = [];
89
102
  this.bufferAttributes = [];
90
103
  this.varyings = [];
@@ -99,7 +112,6 @@ class NodeBuilder {
99
112
  this.currentFunctionNode = null;
100
113
 
101
114
  this.context = {
102
- keywords: new NodeKeywords(),
103
115
  material: this.material
104
116
  };
105
117
 
@@ -111,74 +123,174 @@ class NodeBuilder {
111
123
  this.shaderStage = null;
112
124
  this.buildStage = null;
113
125
 
126
+ this.useComparisonMethod = false;
127
+
128
+ }
129
+
130
+ getBindGroupsCache() {
131
+
132
+ let bindGroupsCache = rendererCache.get( this.renderer );
133
+
134
+ if ( bindGroupsCache === undefined ) {
135
+
136
+ bindGroupsCache = new ChainMap();
137
+
138
+ rendererCache.set( this.renderer, bindGroupsCache );
139
+
140
+ }
141
+
142
+ return bindGroupsCache;
143
+
114
144
  }
115
145
 
116
- getRenderTarget( width, height, options ) {
146
+ createRenderTarget( width, height, options ) {
117
147
 
118
148
  return new RenderTarget( width, height, options );
119
149
 
120
150
  }
121
151
 
122
- getCubeRenderTarget( size, options ) {
152
+ createCubeRenderTarget( size, options ) {
123
153
 
124
154
  return new CubeRenderTarget( size, options );
125
155
 
126
156
  }
127
157
 
158
+ createPMREMGenerator() {
159
+
160
+ // TODO: Move Materials.js to outside of the Nodes.js in order to remove this function and improve tree-shaking support
161
+
162
+ return new PMREMGenerator( this.renderer );
163
+
164
+ }
165
+
128
166
  includes( node ) {
129
167
 
130
168
  return this.nodes.includes( node );
131
169
 
132
170
  }
133
171
 
134
- _getSharedBindings( bindings ) {
172
+ _getBindGroup( groupName, bindings ) {
135
173
 
136
- const shared = [];
174
+ const bindGroupsCache = this.getBindGroupsCache();
175
+
176
+ //
177
+
178
+ const bindingsArray = [];
179
+
180
+ let sharedGroup = true;
137
181
 
138
182
  for ( const binding of bindings ) {
139
183
 
140
- if ( binding.shared === true ) {
184
+ bindingsArray.push( binding );
141
185
 
142
- // nodes is the chainmap key
143
- const nodes = binding.getNodes();
186
+ sharedGroup = sharedGroup && binding.groupNode.shared !== true;
144
187
 
145
- let sharedBinding = uniformsGroupCache.get( nodes );
188
+ }
146
189
 
147
- if ( sharedBinding === undefined ) {
190
+ //
148
191
 
149
- uniformsGroupCache.set( nodes, binding );
192
+ let bindGroup;
150
193
 
151
- sharedBinding = binding;
194
+ if ( sharedGroup ) {
152
195
 
153
- }
196
+ bindGroup = bindGroupsCache.get( bindingsArray );
197
+
198
+ if ( bindGroup === undefined ) {
199
+
200
+ bindGroup = new BindGroup( groupName, bindingsArray, this.bindingsIndexes[ groupName ].group, bindingsArray );
201
+
202
+ bindGroupsCache.set( bindingsArray, bindGroup );
203
+
204
+ }
205
+
206
+ } else {
207
+
208
+ bindGroup = new BindGroup( groupName, bindingsArray, this.bindingsIndexes[ groupName ].group, bindingsArray );
209
+
210
+ }
211
+
212
+ return bindGroup;
213
+
214
+ }
215
+
216
+ getBindGroupArray( groupName, shaderStage ) {
217
+
218
+ const bindings = this.bindings[ shaderStage ];
154
219
 
155
- shared.push( sharedBinding );
220
+ let bindGroup = bindings[ groupName ];
156
221
 
157
- } else {
222
+ if ( bindGroup === undefined ) {
158
223
 
159
- shared.push( binding );
224
+ if ( this.bindingsIndexes[ groupName ] === undefined ) {
225
+
226
+ this.bindingsIndexes[ groupName ] = { binding: 0, group: Object.keys( this.bindingsIndexes ).length };
160
227
 
161
228
  }
162
229
 
230
+ bindings[ groupName ] = bindGroup = [];
231
+
163
232
  }
164
233
 
165
- return shared;
234
+ return bindGroup;
166
235
 
167
236
  }
168
237
 
169
238
  getBindings() {
170
239
 
171
- let bindingsArray = this.bindingsArray;
240
+ let bindingsGroups = this.bindGroups;
172
241
 
173
- if ( bindingsArray === null ) {
242
+ if ( bindingsGroups === null ) {
174
243
 
244
+ const groups = {};
175
245
  const bindings = this.bindings;
176
246
 
177
- this.bindingsArray = bindingsArray = this._getSharedBindings( ( this.material !== null ) ? [ ...bindings.vertex, ...bindings.fragment ] : bindings.compute );
247
+ for ( const shaderStage of shaderStages ) {
248
+
249
+ for ( const groupName in bindings[ shaderStage ] ) {
250
+
251
+ const uniforms = bindings[ shaderStage ][ groupName ];
252
+
253
+ const groupUniforms = groups[ groupName ] || ( groups[ groupName ] = [] );
254
+ groupUniforms.push( ...uniforms );
255
+
256
+ }
257
+
258
+ }
259
+
260
+ bindingsGroups = [];
261
+
262
+ for ( const groupName in groups ) {
263
+
264
+ const group = groups[ groupName ];
265
+
266
+ const bindingsGroup = this._getBindGroup( groupName, group );
267
+
268
+ bindingsGroups.push( bindingsGroup );
269
+
270
+ }
271
+
272
+ this.bindGroups = bindingsGroups;
178
273
 
179
274
  }
180
275
 
181
- return bindingsArray;
276
+ return bindingsGroups;
277
+
278
+ }
279
+
280
+ sortBindingGroups() {
281
+
282
+ const bindingsGroups = this.getBindings();
283
+
284
+ bindingsGroups.sort( ( a, b ) => ( a.bindings[ 0 ].groupNode.order - b.bindings[ 0 ].groupNode.order ) );
285
+
286
+ for ( let i = 0; i < bindingsGroups.length; i ++ ) {
287
+
288
+ const bindingGroup = bindingsGroups[ i ];
289
+ this.bindingsIndexes[ bindingGroup.name ].group = i;
290
+
291
+ bindingGroup.index = i;
292
+
293
+ }
182
294
 
183
295
  }
184
296
 
@@ -206,6 +318,7 @@ class NodeBuilder {
206
318
 
207
319
  const updateType = node.getUpdateType();
208
320
  const updateBeforeType = node.getUpdateBeforeType();
321
+ const updateAfterType = node.getUpdateAfterType();
209
322
 
210
323
  if ( updateType !== NodeUpdateType.NONE ) {
211
324
 
@@ -215,7 +328,13 @@ class NodeBuilder {
215
328
 
216
329
  if ( updateBeforeType !== NodeUpdateType.NONE ) {
217
330
 
218
- this.updateBeforeNodes.push( node );
331
+ this.updateBeforeNodes.push( node.getSelf() );
332
+
333
+ }
334
+
335
+ if ( updateAfterType !== NodeUpdateType.NONE ) {
336
+
337
+ this.updateAfterNodes.push( node.getSelf() );
219
338
 
220
339
  }
221
340
 
@@ -229,6 +348,13 @@ class NodeBuilder {
229
348
 
230
349
  }
231
350
 
351
+ isFilteredTexture( texture ) {
352
+
353
+ return ( texture.magFilter === LinearFilter || texture.magFilter === LinearMipmapNearestFilter || texture.magFilter === NearestMipmapLinearFilter || texture.magFilter === LinearMipmapLinearFilter ||
354
+ texture.minFilter === LinearFilter || texture.minFilter === LinearMipmapNearestFilter || texture.minFilter === NearestMipmapLinearFilter || texture.minFilter === LinearMipmapLinearFilter );
355
+
356
+ }
357
+
232
358
  addChain( node ) {
233
359
 
234
360
  /*
@@ -287,6 +413,16 @@ class NodeBuilder {
287
413
 
288
414
  }
289
415
 
416
+ getSharedContext() {
417
+
418
+ const context = { ...this.context };
419
+
420
+ delete context.material;
421
+
422
+ return this.context;
423
+
424
+ }
425
+
290
426
  setCache( cache ) {
291
427
 
292
428
  this.cache = cache;
@@ -299,6 +435,15 @@ class NodeBuilder {
299
435
 
300
436
  }
301
437
 
438
+ getCacheFromNode( node, parent = true ) {
439
+
440
+ const data = this.getDataFromNode( node );
441
+ if ( data.cache === undefined ) data.cache = new NodeCache( parent ? this.getCache() : null );
442
+
443
+ return data.cache;
444
+
445
+ }
446
+
302
447
  isAvailable( /*name*/ ) {
303
448
 
304
449
  return false;
@@ -317,6 +462,12 @@ class NodeBuilder {
317
462
 
318
463
  }
319
464
 
465
+ getDrawIndex() {
466
+
467
+ console.warn( 'Abstract function.' );
468
+
469
+ }
470
+
320
471
  getFrontFacing() {
321
472
 
322
473
  console.warn( 'Abstract function.' );
@@ -335,6 +486,15 @@ class NodeBuilder {
335
486
 
336
487
  }
337
488
 
489
+ increaseUsage( node ) {
490
+
491
+ const nodeData = this.getDataFromNode( node );
492
+ nodeData.usageCount = nodeData.usageCount === undefined ? 1 : nodeData.usageCount + 1;
493
+
494
+ return nodeData.usageCount;
495
+
496
+ }
497
+
338
498
  generateTexture( /* texture, textureProperty, uvSnippet */ ) {
339
499
 
340
500
  console.warn( 'Abstract function.' );
@@ -406,12 +566,6 @@ class NodeBuilder {
406
566
 
407
567
  }
408
568
 
409
- generateMethod( method ) {
410
-
411
- return method;
412
-
413
- }
414
-
415
569
  hasGeometryAttribute( name ) {
416
570
 
417
571
  return this.geometry && this.geometry.getAttribute( name ) !== undefined;
@@ -464,35 +618,38 @@ class NodeBuilder {
464
618
 
465
619
  isReference( type ) {
466
620
 
467
- return type === 'void' || type === 'property' || type === 'sampler' || type === 'texture' || type === 'cubeTexture' || type === 'storageTexture';
621
+ return type === 'void' || type === 'property' || type === 'sampler' || type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'depthTexture' || type === 'texture3D';
468
622
 
469
623
  }
470
624
 
471
- needsColorSpaceToLinear( /*texture*/ ) {
625
+ needsToWorkingColorSpace( /*texture*/ ) {
472
626
 
473
627
  return false;
474
628
 
475
629
  }
476
630
 
477
- getTextureColorSpaceFromMap( map ) {
631
+ getComponentTypeFromTexture( texture ) {
478
632
 
479
- let colorSpace;
633
+ const type = texture.type;
480
634
 
481
- if ( map && map.isTexture ) {
635
+ if ( texture.isDataTexture ) {
482
636
 
483
- colorSpace = map.colorSpace;
637
+ if ( type === IntType ) return 'int';
638
+ if ( type === UnsignedIntType ) return 'uint';
484
639
 
485
- } else if ( map && map.isWebGLRenderTarget ) {
640
+ }
486
641
 
487
- colorSpace = map.texture.colorSpace;
642
+ return 'float';
488
643
 
489
- } else {
644
+ }
490
645
 
491
- colorSpace = NoColorSpace;
646
+ getElementType( type ) {
492
647
 
493
- }
648
+ if ( type === 'mat2' ) return 'vec2';
649
+ if ( type === 'mat3' ) return 'vec3';
650
+ if ( type === 'mat4' ) return 'vec4';
494
651
 
495
- return colorSpace;
652
+ return this.getComponentType( type );
496
653
 
497
654
  }
498
655
 
@@ -517,7 +674,7 @@ class NodeBuilder {
517
674
  getVectorType( type ) {
518
675
 
519
676
  if ( type === 'color' ) return 'vec3';
520
- if ( type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' ) return 'vec4';
677
+ if ( type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'texture3D' ) return 'vec4';
521
678
 
522
679
  return type;
523
680
 
@@ -625,13 +782,13 @@ class NodeBuilder {
625
782
 
626
783
  cache = cache === null ? ( node.isGlobal( this ) ? this.globalCache : this.cache ) : cache;
627
784
 
628
- let nodeData = cache.getNodeData( node );
785
+ let nodeData = cache.getData( node );
629
786
 
630
787
  if ( nodeData === undefined ) {
631
788
 
632
789
  nodeData = {};
633
790
 
634
- cache.setNodeData( node, nodeData );
791
+ cache.setData( node, nodeData );
635
792
 
636
793
  }
637
794
 
@@ -692,6 +849,14 @@ class NodeBuilder {
692
849
 
693
850
  getUniformFromNode( node, type, shaderStage = this.shaderStage, name = null ) {
694
851
 
852
+ if ( name === 'in' ) {
853
+
854
+ console.warn( 'NodeBuilder: "in" is a reserved word, using "inValue" instead.', node, name );
855
+ node.name = 'inValue';
856
+ name = node.name;
857
+
858
+ }
859
+
695
860
  const nodeData = this.getDataFromNode( node, shaderStage, this.globalCache );
696
861
 
697
862
  let nodeUniform = nodeData.uniform;
@@ -784,10 +949,59 @@ class NodeBuilder {
784
949
 
785
950
  }
786
951
 
787
- addLineFlowCode( code ) {
952
+ addFlowCodeHierarchy( node, nodeBlock ) {
953
+
954
+ const { flowCodes, flowCodeBlock } = this.getDataFromNode( node );
955
+
956
+ let needsFlowCode = true;
957
+ let nodeBlockHierarchy = nodeBlock;
958
+
959
+ while ( nodeBlockHierarchy ) {
960
+
961
+ if ( flowCodeBlock.get( nodeBlockHierarchy ) === true ) {
962
+
963
+ needsFlowCode = false;
964
+ break;
965
+
966
+ }
967
+
968
+ nodeBlockHierarchy = this.getDataFromNode( nodeBlockHierarchy ).parentNodeBlock;
969
+
970
+ }
971
+
972
+ if ( needsFlowCode ) {
973
+
974
+ for ( const flowCode of flowCodes ) {
975
+
976
+ this.addLineFlowCode( flowCode );
977
+
978
+ }
979
+
980
+ }
981
+
982
+ }
983
+
984
+ addLineFlowCodeBlock( node, code, nodeBlock ) {
985
+
986
+ const nodeData = this.getDataFromNode( node );
987
+ const flowCodes = nodeData.flowCodes || ( nodeData.flowCodes = [] );
988
+ const codeBlock = nodeData.flowCodeBlock || ( nodeData.flowCodeBlock = new WeakMap() );
989
+
990
+ flowCodes.push( code );
991
+ codeBlock.set( nodeBlock, true );
992
+
993
+ }
994
+
995
+ addLineFlowCode( code, node = null ) {
788
996
 
789
997
  if ( code === '' ) return this;
790
998
 
999
+ if ( node !== null && this.context.nodeBlock ) {
1000
+
1001
+ this.addLineFlowCodeBlock( node, code, this.context.nodeBlock );
1002
+
1003
+ }
1004
+
791
1005
  code = this.tab + code;
792
1006
 
793
1007
  if ( ! /;\s*$/.test( code ) ) {
@@ -864,27 +1078,24 @@ class NodeBuilder {
864
1078
 
865
1079
  const layout = shaderNode.layout;
866
1080
 
867
- let inputs;
868
-
869
- if ( shaderNode.isArrayInput ) {
870
-
871
- inputs = [];
1081
+ const inputs = {
1082
+ [ Symbol.iterator ]() {
872
1083
 
873
- for ( const input of layout.inputs ) {
874
-
875
- inputs.push( new ParameterNode( input.type, input.name ) );
1084
+ let index = 0;
1085
+ const values = Object.values( this );
1086
+ return {
1087
+ next: () => ( {
1088
+ value: values[ index ],
1089
+ done: index ++ >= values.length
1090
+ } )
1091
+ };
876
1092
 
877
1093
  }
1094
+ };
878
1095
 
879
- } else {
880
-
881
- inputs = {};
882
-
883
- for ( const input of layout.inputs ) {
884
-
885
- inputs[ input.name ] = new ParameterNode( input.type, input.name );
1096
+ for ( const input of layout.inputs ) {
886
1097
 
887
- }
1098
+ inputs[ input.name ] = new ParameterNode( input.type, input.name );
888
1099
 
889
1100
  }
890
1101
 
@@ -905,7 +1116,9 @@ class NodeBuilder {
905
1116
 
906
1117
  const previousFlow = this.flow;
907
1118
  const previousVars = this.vars;
1119
+ const previousCache = this.cache;
908
1120
  const previousBuildStage = this.buildStage;
1121
+ const previousStack = this.stack;
909
1122
 
910
1123
  const flow = {
911
1124
  code: ''
@@ -913,6 +1126,8 @@ class NodeBuilder {
913
1126
 
914
1127
  this.flow = flow;
915
1128
  this.vars = {};
1129
+ this.cache = new NodeCache();
1130
+ this.stack = stack();
916
1131
 
917
1132
  for ( const buildStage of defaultBuildStages ) {
918
1133
 
@@ -926,6 +1141,9 @@ class NodeBuilder {
926
1141
 
927
1142
  this.flow = previousFlow;
928
1143
  this.vars = previousVars;
1144
+ this.cache = previousCache;
1145
+ this.stack = previousStack;
1146
+
929
1147
  this.setBuildStage( previousBuildStage );
930
1148
 
931
1149
  return flow;
@@ -1084,22 +1302,28 @@ class NodeBuilder {
1084
1302
 
1085
1303
  }
1086
1304
 
1087
- build( convertMaterial = true ) {
1305
+ build() {
1088
1306
 
1089
- const { object, material } = this;
1307
+ const { object, material, renderer } = this;
1090
1308
 
1091
- if ( convertMaterial ) {
1309
+ if ( material !== null ) {
1092
1310
 
1093
- if ( material !== null ) {
1311
+ let nodeMaterial = renderer.nodes.library.fromMaterial( material );
1094
1312
 
1095
- NodeMaterial.fromMaterial( material ).build( this );
1313
+ if ( nodeMaterial === null ) {
1096
1314
 
1097
- } else {
1315
+ console.error( `NodeMaterial: Material "${ material.type }" is not compatible.` );
1098
1316
 
1099
- this.addFlow( 'compute', object );
1317
+ nodeMaterial = new NodeMaterial();
1100
1318
 
1101
1319
  }
1102
1320
 
1321
+ nodeMaterial.build( this );
1322
+
1323
+ } else {
1324
+
1325
+ this.addFlow( 'compute', object );
1326
+
1103
1327
  }
1104
1328
 
1105
1329
  // setup() -> stage 1: create possible new nodes and returns an output reference node
@@ -1154,10 +1378,10 @@ class NodeBuilder {
1154
1378
 
1155
1379
  getNodeUniform( uniformNode, type ) {
1156
1380
 
1157
- if ( type === 'float' ) return new FloatNodeUniform( uniformNode );
1158
- if ( type === 'vec2' ) return new Vector2NodeUniform( uniformNode );
1159
- if ( type === 'vec3' ) return new Vector3NodeUniform( uniformNode );
1160
- if ( type === 'vec4' ) return new Vector4NodeUniform( uniformNode );
1381
+ if ( type === 'float' || type === 'int' || type === 'uint' ) return new NumberNodeUniform( uniformNode );
1382
+ if ( type === 'vec2' || type === 'ivec2' || type === 'uvec2' ) return new Vector2NodeUniform( uniformNode );
1383
+ if ( type === 'vec3' || type === 'ivec3' || type === 'uvec3' ) return new Vector3NodeUniform( uniformNode );
1384
+ if ( type === 'vec4' || type === 'ivec4' || type === 'uvec4' ) return new Vector4NodeUniform( uniformNode );
1161
1385
  if ( type === 'color' ) return new ColorNodeUniform( uniformNode );
1162
1386
  if ( type === 'mat3' ) return new Matrix3NodeUniform( uniformNode );
1163
1387
  if ( type === 'mat4' ) return new Matrix4NodeUniform( uniformNode );
@@ -1166,9 +1390,9 @@ class NodeBuilder {
1166
1390
 
1167
1391
  }
1168
1392
 
1169
- createNodeMaterial( type = 'NodeMaterial' ) {
1393
+ createNodeMaterial( type = 'NodeMaterial' ) { // @deprecated, r168
1170
1394
 
1171
- return createNodeMaterialFromType( type );
1395
+ throw new Error( `THREE.NodeBuilder: createNodeMaterial() was deprecated. Use new ${ type }() instead.` );
1172
1396
 
1173
1397
  }
1174
1398
 
@@ -1186,6 +1410,19 @@ class NodeBuilder {
1186
1410
  const fromTypeLength = this.getTypeLength( fromType );
1187
1411
  const toTypeLength = this.getTypeLength( toType );
1188
1412
 
1413
+ if ( fromTypeLength === 16 && toTypeLength === 9 ) {
1414
+
1415
+ return `${ this.getType( toType ) }(${ snippet }[0].xyz, ${ snippet }[1].xyz, ${ snippet }[2].xyz)`;
1416
+
1417
+ }
1418
+
1419
+ if ( fromTypeLength === 9 && toTypeLength === 4 ) {
1420
+
1421
+ return `${ this.getType( toType ) }(${ snippet }[0].xy, ${ snippet }[1].xy)`;
1422
+
1423
+ }
1424
+
1425
+
1189
1426
  if ( fromTypeLength > 4 ) { // fromType is matrix-like
1190
1427
 
1191
1428
  // @TODO: ignore for now
@@ -1226,7 +1463,7 @@ class NodeBuilder {
1226
1463
 
1227
1464
  }
1228
1465
 
1229
- if ( fromTypeLength === 1 && toTypeLength > 1 && fromType[ 0 ] !== toType[ 0 ] ) { // fromType is float-like
1466
+ if ( fromTypeLength === 1 && toTypeLength > 1 && fromType !== this.getComponentType( toType ) ) { // fromType is float-like
1230
1467
 
1231
1468
  // convert a number value to vector type, e.g:
1232
1469
  // vec3( 1u ) -> vec3( float( 1u ) )
@@ -1241,7 +1478,7 @@ class NodeBuilder {
1241
1478
 
1242
1479
  getSignature() {
1243
1480
 
1244
- return `// Three.js r${ REVISION } - NodeMaterial System\n`;
1481
+ return `// Three.js r${ REVISION } - Node System\n`;
1245
1482
 
1246
1483
  }
1247
1484