super-three 0.136.0 → 0.141.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 (768) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +24 -26
  3. package/build/three.cjs +35889 -0
  4. package/build/three.js +4837 -6036
  5. package/build/three.min.js +2 -2
  6. package/build/three.module.js +16548 -17930
  7. package/examples/js/animation/CCDIKSolver.js +3 -2
  8. package/examples/js/animation/MMDAnimationHelper.js +3 -1
  9. package/examples/js/animation/MMDPhysics.js +3 -3
  10. package/examples/js/cameras/CinematicCamera.js +2 -7
  11. package/examples/js/controls/ArcballControls.js +3 -1
  12. package/examples/js/controls/PointerLockControls.js +3 -2
  13. package/examples/js/controls/TrackballControls.js +1 -4
  14. package/examples/js/controls/TransformControls.js +5 -6
  15. package/examples/js/controls/experimental/CameraControls.js +8 -4
  16. package/examples/js/csm/CSMFrustum.js +1 -1
  17. package/examples/js/csm/CSMShader.js +51 -35
  18. package/examples/js/curves/CurveExtras.js +14 -18
  19. package/examples/js/effects/AnaglyphEffect.js +7 -4
  20. package/examples/js/effects/AsciiEffect.js +10 -29
  21. package/examples/js/exporters/ColladaExporter.js +29 -7
  22. package/examples/js/exporters/EXRExporter.js +458 -0
  23. package/examples/js/exporters/GLTFExporter.js +233 -105
  24. package/examples/js/exporters/MMDExporter.js +1 -1
  25. package/examples/js/exporters/OBJExporter.js +12 -18
  26. package/examples/js/exporters/PLYExporter.js +15 -20
  27. package/examples/js/exporters/USDZExporter.js +13 -0
  28. package/examples/js/geometries/ConvexGeometry.js +1 -1
  29. package/examples/js/geometries/DecalGeometry.js +0 -7
  30. package/examples/js/geometries/LightningStrike.js +2 -2
  31. package/examples/js/geometries/ParametricGeometries.js +3 -3
  32. package/examples/js/geometries/TextGeometry.js +12 -10
  33. package/examples/js/helpers/OctreeHelper.js +74 -0
  34. package/examples/js/helpers/VertexNormalsHelper.js +4 -23
  35. package/examples/js/helpers/VertexTangentsHelper.js +3 -13
  36. package/examples/js/helpers/ViewHelper.js +266 -0
  37. package/examples/js/interactive/HTMLMesh.js +249 -42
  38. package/examples/js/interactive/SelectionHelper.js +1 -1
  39. package/examples/js/libs/opentype.min.js +1 -118
  40. package/examples/js/lines/Line2.js +1 -2
  41. package/examples/js/lines/LineGeometry.js +10 -21
  42. package/examples/js/lines/LineMaterial.js +2 -3
  43. package/examples/js/lines/LineSegments2.js +214 -140
  44. package/examples/js/lines/LineSegmentsGeometry.js +3 -14
  45. package/examples/js/lines/Wireframe.js +2 -3
  46. package/examples/js/lines/WireframeGeometry2.js +1 -2
  47. package/examples/js/loaders/3MFLoader.js +21 -17
  48. package/examples/js/loaders/AMFLoader.js +1 -1
  49. package/examples/js/loaders/BasisTextureLoader.js +1 -0
  50. package/examples/js/loaders/ColladaLoader.js +33 -12
  51. package/examples/js/loaders/DDSLoader.js +23 -30
  52. package/examples/js/loaders/EXRLoader.js +314 -294
  53. package/examples/js/loaders/FBXLoader.js +11 -0
  54. package/examples/js/loaders/FontLoader.js +1 -2
  55. package/examples/js/loaders/GCodeLoader.js +0 -1
  56. package/examples/js/loaders/GLTFLoader.js +250 -61
  57. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -2
  58. package/examples/js/loaders/KMZLoader.js +1 -1
  59. package/examples/js/loaders/KTX2Loader.js +1 -9
  60. package/examples/js/loaders/LDrawLoader.js +1342 -962
  61. package/examples/js/loaders/LUT3dlLoader.js +18 -11
  62. package/examples/js/loaders/LUTCubeLoader.js +4 -5
  63. package/examples/js/loaders/LWOLoader.js +4 -2
  64. package/examples/js/loaders/LogLuvLoader.js +1 -2
  65. package/examples/js/loaders/MD2Loader.js +5 -5
  66. package/examples/js/loaders/MMDLoader.js +18 -4
  67. package/examples/js/loaders/MTLLoader.js +10 -3
  68. package/examples/js/loaders/NRRDLoader.js +1 -1
  69. package/examples/js/loaders/OBJLoader.js +9 -5
  70. package/examples/js/loaders/PCDLoader.js +24 -15
  71. package/examples/js/loaders/PDBLoader.js +11 -11
  72. package/examples/js/loaders/PLYLoader.js +5 -1
  73. package/examples/js/loaders/RGBELoader.js +9 -17
  74. package/examples/js/loaders/RGBMLoader.js +13 -16
  75. package/examples/js/loaders/STLLoader.js +1 -1
  76. package/examples/js/loaders/SVGLoader.js +21 -11
  77. package/examples/js/loaders/VOXLoader.js +3 -4
  78. package/examples/js/loaders/VRMLLoader.js +9 -21
  79. package/examples/js/loaders/VTKLoader.js +260 -295
  80. package/examples/js/loaders/lwo/LWO2Parser.js +4 -4
  81. package/examples/js/loaders/lwo/LWO3Parser.js +4 -4
  82. package/examples/js/math/ConvexHull.js +13 -28
  83. package/examples/js/math/Lut.js +27 -26
  84. package/examples/js/misc/MorphAnimMesh.js +2 -2
  85. package/examples/js/misc/ProgressiveLightMap.js +1 -1
  86. package/examples/js/misc/Volume.js +39 -48
  87. package/examples/js/misc/VolumeSlice.js +21 -21
  88. package/examples/js/modifiers/CurveModifier.js +8 -7
  89. package/examples/js/modifiers/EdgeSplitModifier.js +0 -13
  90. package/examples/js/modifiers/SimplifyModifier.js +1 -18
  91. package/examples/js/modifiers/TessellateModifier.js +0 -7
  92. package/examples/js/objects/Lensflare.js +4 -4
  93. package/examples/js/objects/LightningStorm.js +4 -5
  94. package/examples/js/objects/MarchingCubes.js +6 -11
  95. package/examples/js/objects/Reflector.js +10 -16
  96. package/examples/js/objects/ReflectorForSSRPass.js +1 -11
  97. package/examples/js/objects/Refractor.js +10 -16
  98. package/examples/js/objects/ShadowMesh.js +1 -2
  99. package/examples/js/objects/Sky.js +1 -1
  100. package/examples/js/objects/Water.js +2 -15
  101. package/examples/js/objects/Water2.js +1 -1
  102. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +6 -10
  103. package/examples/js/postprocessing/AfterimagePass.js +2 -6
  104. package/examples/js/postprocessing/BloomPass.js +50 -19
  105. package/examples/js/postprocessing/DotScreenPass.js +1 -1
  106. package/examples/js/postprocessing/EffectComposer.js +1 -6
  107. package/examples/js/postprocessing/GlitchPass.js +4 -5
  108. package/examples/js/postprocessing/LUTPass.js +2 -2
  109. package/examples/js/postprocessing/OutlinePass.js +8 -17
  110. package/examples/js/postprocessing/SAOPass.js +2 -7
  111. package/examples/js/postprocessing/SMAAPass.js +2 -9
  112. package/examples/js/postprocessing/SSAARenderPass.js +1 -6
  113. package/examples/js/postprocessing/SSAOPass.js +9 -21
  114. package/examples/js/postprocessing/SSRPass.js +3 -8
  115. package/examples/js/postprocessing/SavePass.js +1 -5
  116. package/examples/js/postprocessing/TAARenderPass.js +4 -4
  117. package/examples/js/postprocessing/UnrealBloomPass.js +3 -12
  118. package/examples/js/renderers/CSS2DRenderer.js +20 -19
  119. package/examples/js/renderers/CSS3DRenderer.js +40 -36
  120. package/examples/js/renderers/Projector.js +97 -124
  121. package/examples/js/renderers/SVGRenderer.js +3 -4
  122. package/examples/js/shaders/BlendShader.js +2 -1
  123. package/examples/js/shaders/CopyShader.js +4 -3
  124. package/examples/js/shaders/DigitalGlitch.js +3 -3
  125. package/examples/js/shaders/FXAAShader.js +239 -1069
  126. package/examples/js/shaders/FreiChenShader.js +1 -1
  127. package/examples/js/shaders/HorizontalBlurShader.js +1 -1
  128. package/examples/js/shaders/HorizontalTiltShiftShader.js +1 -1
  129. package/examples/js/shaders/MMDToonShader.js +0 -1
  130. package/examples/js/shaders/SSAOShader.js +1 -1
  131. package/examples/js/shaders/SSRShader.js +3 -3
  132. package/examples/js/shaders/ToneMapShader.js +1 -1
  133. package/examples/js/utils/BufferGeometryUtils.js +282 -22
  134. package/examples/js/utils/GPUStatsPanel.js +1 -1
  135. package/examples/js/utils/LDrawUtils.js +182 -0
  136. package/examples/js/utils/SceneUtils.js +59 -0
  137. package/examples/js/utils/SkeletonUtils.js +1 -1
  138. package/examples/js/utils/UVsDebug.js +23 -33
  139. package/examples/jsm/animation/CCDIKSolver.js +3 -9
  140. package/examples/jsm/animation/MMDPhysics.js +2 -2
  141. package/examples/jsm/cameras/CinematicCamera.js +2 -5
  142. package/examples/jsm/{WebGL.js → capabilities/WebGL.js} +2 -2
  143. package/examples/jsm/{renderers/webgpu → capabilities}/WebGPU.js +7 -1
  144. package/examples/jsm/controls/ArcballControls.js +3 -1
  145. package/examples/jsm/controls/PointerLockControls.js +4 -2
  146. package/examples/jsm/controls/TrackballControls.js +1 -4
  147. package/examples/jsm/controls/TransformControls.js +6 -6
  148. package/examples/jsm/controls/experimental/CameraControls.js +2 -2
  149. package/examples/jsm/csm/CSMFrustum.js +1 -1
  150. package/examples/jsm/csm/CSMShader.js +51 -35
  151. package/examples/jsm/curves/CurveExtras.js +15 -17
  152. package/examples/jsm/effects/AnaglyphEffect.js +4 -4
  153. package/examples/jsm/effects/AsciiEffect.js +9 -22
  154. package/examples/jsm/exporters/ColladaExporter.js +31 -6
  155. package/examples/jsm/exporters/EXRExporter.js +507 -0
  156. package/examples/jsm/exporters/GLTFExporter.js +261 -103
  157. package/examples/jsm/exporters/KTX2Exporter.js +281 -0
  158. package/examples/jsm/exporters/MMDExporter.js +1 -1
  159. package/examples/jsm/exporters/OBJExporter.js +11 -18
  160. package/examples/jsm/exporters/PLYExporter.js +23 -21
  161. package/examples/jsm/exporters/USDZExporter.js +12 -0
  162. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  163. package/examples/jsm/geometries/DecalGeometry.js +0 -7
  164. package/examples/jsm/geometries/LightningStrike.js +2 -2
  165. package/examples/jsm/geometries/ParametricGeometries.js +3 -3
  166. package/examples/jsm/geometries/TextGeometry.js +13 -13
  167. package/examples/jsm/helpers/OctreeHelper.js +58 -0
  168. package/examples/jsm/helpers/VertexNormalsHelper.js +4 -25
  169. package/examples/jsm/helpers/VertexTangentsHelper.js +3 -15
  170. package/examples/jsm/helpers/ViewHelper.js +295 -0
  171. package/examples/jsm/interactive/HTMLMesh.js +268 -36
  172. package/examples/jsm/interactive/SelectionHelper.js +1 -1
  173. package/examples/jsm/libs/flow.module.js +947 -183
  174. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  175. package/examples/jsm/libs/lil-gui.module.min.js +2 -2
  176. package/examples/jsm/libs/mikktspace.module.js +128 -0
  177. package/examples/jsm/libs/opentype.module.js +14568 -0
  178. package/examples/jsm/lines/Line2.js +2 -2
  179. package/examples/jsm/lines/LineGeometry.js +11 -19
  180. package/examples/jsm/lines/LineMaterial.js +3 -3
  181. package/examples/jsm/lines/LineSegments2.js +210 -145
  182. package/examples/jsm/lines/LineSegmentsGeometry.js +3 -12
  183. package/examples/jsm/lines/Wireframe.js +3 -3
  184. package/examples/jsm/lines/WireframeGeometry2.js +2 -2
  185. package/examples/jsm/loaders/3DMLoader.js +3 -2
  186. package/examples/jsm/loaders/3MFLoader.js +21 -17
  187. package/examples/jsm/loaders/AMFLoader.js +1 -1
  188. package/examples/jsm/loaders/BasisTextureLoader.js +7 -0
  189. package/examples/jsm/loaders/ColladaLoader.js +40 -12
  190. package/examples/jsm/loaders/DDSLoader.js +21 -28
  191. package/examples/jsm/loaders/EXRLoader.js +309 -293
  192. package/examples/jsm/loaders/FBXLoader.js +11 -0
  193. package/examples/jsm/loaders/FontLoader.js +2 -2
  194. package/examples/jsm/loaders/GCodeLoader.js +0 -1
  195. package/examples/jsm/loaders/GLTFLoader.js +263 -68
  196. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -4
  197. package/examples/jsm/loaders/KMZLoader.js +1 -1
  198. package/examples/jsm/loaders/KTX2Loader.js +1 -10
  199. package/examples/jsm/loaders/LDrawLoader.js +1335 -988
  200. package/examples/jsm/loaders/LUT3dlLoader.js +19 -14
  201. package/examples/jsm/loaders/LUTCubeLoader.js +5 -7
  202. package/examples/jsm/loaders/LWOLoader.js +5 -3
  203. package/examples/jsm/loaders/LogLuvLoader.js +2 -2
  204. package/examples/jsm/loaders/MD2Loader.js +5 -5
  205. package/examples/jsm/loaders/MMDLoader.js +21 -3
  206. package/examples/jsm/loaders/MTLLoader.js +11 -4
  207. package/examples/jsm/loaders/NRRDLoader.js +1 -2
  208. package/examples/jsm/loaders/OBJLoader.js +11 -7
  209. package/examples/jsm/loaders/PCDLoader.js +25 -17
  210. package/examples/jsm/loaders/PDBLoader.js +11 -11
  211. package/examples/jsm/loaders/PLYLoader.js +10 -2
  212. package/examples/jsm/loaders/RGBELoader.js +11 -20
  213. package/examples/jsm/loaders/RGBMLoader.js +15 -12
  214. package/examples/jsm/loaders/STLLoader.js +1 -1
  215. package/examples/jsm/loaders/SVGLoader.js +26 -11
  216. package/examples/jsm/loaders/TTFLoader.js +1 -1
  217. package/examples/jsm/loaders/VOXLoader.js +5 -5
  218. package/examples/jsm/loaders/VRMLLoader.js +9 -23
  219. package/examples/jsm/loaders/VTKLoader.js +256 -284
  220. package/examples/jsm/loaders/ifc/web-ifc-api.js +9 -8
  221. package/examples/jsm/loaders/lwo/LWO2Parser.js +4 -4
  222. package/examples/jsm/loaders/lwo/LWO3Parser.js +4 -4
  223. package/examples/jsm/math/ConvexHull.js +13 -28
  224. package/examples/jsm/math/Lut.js +35 -25
  225. package/examples/jsm/misc/MorphAnimMesh.js +2 -2
  226. package/examples/jsm/misc/ProgressiveLightMap.js +1 -1
  227. package/examples/jsm/misc/Volume.js +39 -46
  228. package/examples/jsm/misc/VolumeSlice.js +21 -21
  229. package/examples/jsm/modifiers/CurveModifier.js +9 -8
  230. package/examples/jsm/modifiers/EdgeSplitModifier.js +0 -13
  231. package/examples/jsm/modifiers/SimplifyModifier.js +1 -18
  232. package/examples/jsm/modifiers/TessellateModifier.js +0 -7
  233. package/examples/jsm/node-editor/NodeEditor.js +485 -163
  234. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +14 -0
  235. package/examples/jsm/node-editor/accessors/NormalEditor.js +9 -9
  236. package/examples/jsm/node-editor/accessors/PositionEditor.js +9 -9
  237. package/examples/jsm/node-editor/accessors/UVEditor.js +7 -8
  238. package/examples/jsm/node-editor/core/BaseNode.js +89 -0
  239. package/examples/jsm/node-editor/core/DataFile.js +59 -0
  240. package/examples/jsm/node-editor/core/FileEditor.js +20 -0
  241. package/examples/jsm/node-editor/core/FileURLEditor.js +29 -0
  242. package/examples/jsm/node-editor/display/BlendEditor.js +10 -9
  243. package/examples/jsm/node-editor/display/NormalMapEditor.js +49 -0
  244. package/examples/jsm/node-editor/examples/animate-uv.json +1 -1
  245. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -1
  246. package/examples/jsm/node-editor/examples/matcap.json +1 -0
  247. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -1
  248. package/examples/jsm/node-editor/examples/rim.json +1 -1
  249. package/examples/jsm/node-editor/inputs/ColorEditor.js +18 -13
  250. package/examples/jsm/node-editor/inputs/FloatEditor.js +8 -9
  251. package/examples/jsm/node-editor/inputs/SliderEditor.js +6 -7
  252. package/examples/jsm/node-editor/inputs/TextureEditor.js +155 -0
  253. package/examples/jsm/node-editor/inputs/Vector2Editor.js +9 -9
  254. package/examples/jsm/node-editor/inputs/Vector3Editor.js +11 -11
  255. package/examples/jsm/node-editor/inputs/Vector4Editor.js +12 -12
  256. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +87 -0
  257. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +102 -0
  258. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +31 -18
  259. package/examples/jsm/node-editor/math/AngleEditor.js +40 -0
  260. package/examples/jsm/node-editor/math/DotEditor.js +8 -9
  261. package/examples/jsm/node-editor/math/InvertEditor.js +8 -7
  262. package/examples/jsm/node-editor/math/LimiterEditor.js +28 -14
  263. package/examples/jsm/node-editor/math/NormalizeEditor.js +9 -7
  264. package/examples/jsm/node-editor/math/OperatorEditor.js +29 -16
  265. package/examples/jsm/node-editor/math/PowerEditor.js +20 -10
  266. package/examples/jsm/node-editor/math/TrigonometryEditor.js +15 -9
  267. package/examples/jsm/node-editor/procedural/CheckerEditor.js +7 -6
  268. package/examples/jsm/node-editor/scene/MeshEditor.js +99 -0
  269. package/examples/jsm/node-editor/scene/Object3DEditor.js +160 -0
  270. package/examples/jsm/node-editor/scene/PointsEditor.js +99 -0
  271. package/examples/jsm/node-editor/utils/JoinEditor.js +58 -0
  272. package/examples/jsm/node-editor/utils/OscillatorEditor.js +9 -8
  273. package/examples/jsm/node-editor/utils/PreviewEditor.js +166 -0
  274. package/examples/jsm/node-editor/utils/SplitEditor.js +39 -0
  275. package/examples/jsm/node-editor/utils/TimerEditor.js +7 -6
  276. package/examples/jsm/nodes/Nodes.js +283 -94
  277. package/examples/jsm/nodes/accessors/BufferNode.js +24 -0
  278. package/examples/jsm/nodes/accessors/CameraNode.js +27 -196
  279. package/examples/jsm/nodes/accessors/CubeTextureNode.js +103 -0
  280. package/examples/jsm/nodes/accessors/InstanceNode.js +58 -0
  281. package/examples/jsm/{renderers/nodes → nodes}/accessors/MaterialNode.js +49 -11
  282. package/examples/jsm/{renderers/nodes → nodes}/accessors/MaterialReferenceNode.js +0 -0
  283. package/examples/jsm/{renderers/nodes → nodes}/accessors/ModelNode.js +8 -0
  284. package/examples/jsm/{renderers/nodes → nodes}/accessors/ModelViewProjectionNode.js +0 -0
  285. package/examples/jsm/nodes/accessors/NormalNode.js +39 -99
  286. package/examples/jsm/{renderers/nodes → nodes}/accessors/Object3DNode.js +34 -17
  287. package/examples/jsm/{renderers/nodes → nodes}/accessors/PointUVNode.js +2 -2
  288. package/examples/jsm/nodes/accessors/PositionNode.js +41 -110
  289. package/examples/jsm/nodes/accessors/ReferenceNode.js +65 -0
  290. package/examples/jsm/nodes/accessors/ReflectNode.js +34 -121
  291. package/examples/jsm/nodes/accessors/SkinningNode.js +102 -0
  292. package/examples/jsm/nodes/accessors/StorageBufferNode.js +21 -0
  293. package/examples/jsm/nodes/accessors/TextureNode.js +100 -0
  294. package/examples/jsm/nodes/accessors/UVNode.js +17 -43
  295. package/examples/jsm/nodes/accessors/UserDataNode.js +23 -0
  296. package/examples/jsm/nodes/core/ArrayUniformNode.js +23 -0
  297. package/examples/jsm/nodes/core/AttributeNode.js +33 -30
  298. package/examples/jsm/{renderers/nodes → nodes}/core/BypassNode.js +2 -2
  299. package/examples/jsm/{renderers/nodes → nodes}/core/CodeNode.js +2 -30
  300. package/examples/jsm/nodes/core/ConstNode.js +10 -106
  301. package/examples/jsm/{renderers/nodes → nodes}/core/ContextNode.js +17 -3
  302. package/examples/jsm/nodes/core/ExpressionNode.js +24 -7
  303. package/examples/jsm/nodes/core/FunctionCallNode.js +26 -67
  304. package/examples/jsm/nodes/core/FunctionNode.js +43 -216
  305. package/examples/jsm/nodes/core/InputNode.js +28 -60
  306. package/examples/jsm/nodes/core/InstanceIndexNode.js +21 -0
  307. package/examples/jsm/nodes/core/Node.js +228 -94
  308. package/examples/jsm/{renderers/nodes → nodes}/core/NodeAttribute.js +2 -2
  309. package/examples/jsm/nodes/core/NodeBuilder.js +388 -560
  310. package/examples/jsm/{renderers/nodes → nodes}/core/NodeCode.js +0 -0
  311. package/examples/jsm/nodes/core/NodeFrame.js +30 -23
  312. package/examples/jsm/{renderers/nodes → nodes}/core/NodeFunction.js +0 -0
  313. package/examples/jsm/{renderers/nodes → nodes}/core/NodeFunctionInput.js +0 -0
  314. package/examples/jsm/{renderers/nodes → nodes}/core/NodeKeywords.js +0 -0
  315. package/examples/jsm/{renderers/nodes → nodes}/core/NodeParser.js +0 -0
  316. package/examples/jsm/nodes/core/NodeUniform.js +8 -6
  317. package/examples/jsm/nodes/core/NodeUtils.js +69 -37
  318. package/examples/jsm/{renderers/nodes → nodes}/core/NodeVar.js +2 -2
  319. package/examples/jsm/{renderers/nodes → nodes}/core/NodeVary.js +2 -2
  320. package/examples/jsm/{renderers/nodes → nodes}/core/PropertyNode.js +0 -0
  321. package/examples/jsm/nodes/core/TempNode.js +20 -112
  322. package/examples/jsm/nodes/core/UniformNode.js +46 -0
  323. package/examples/jsm/nodes/core/VarNode.js +58 -27
  324. package/examples/jsm/{renderers/nodes → nodes}/core/VaryNode.js +0 -0
  325. package/examples/jsm/{renderers/nodes → nodes}/core/constants.js +0 -0
  326. package/examples/jsm/nodes/display/ColorSpaceNode.js +95 -0
  327. package/examples/jsm/nodes/display/FrontFacingNode.js +21 -0
  328. package/examples/jsm/nodes/display/NormalMapNode.js +86 -0
  329. package/examples/jsm/nodes/display/ToneMappingNode.js +51 -0
  330. package/examples/jsm/nodes/fog/FogNode.js +31 -0
  331. package/examples/jsm/nodes/fog/FogRangeNode.js +27 -0
  332. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +33 -0
  333. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +9 -0
  334. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +27 -0
  335. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +18 -0
  336. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +18 -0
  337. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +18 -0
  338. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +94 -0
  339. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +22 -0
  340. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +12 -0
  341. package/examples/jsm/nodes/functions/material/getRoughness.js +18 -0
  342. package/examples/jsm/nodes/gpgpu/ComputeNode.js +63 -0
  343. package/examples/jsm/nodes/lighting/AONode.js +25 -0
  344. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +37 -0
  345. package/examples/jsm/nodes/lighting/EnvironmentNode.js +65 -0
  346. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +50 -0
  347. package/examples/jsm/nodes/lighting/LightingContextNode.js +75 -0
  348. package/examples/jsm/nodes/lighting/LightingNode.js +19 -0
  349. package/examples/jsm/nodes/lighting/LightsNode.js +120 -0
  350. package/examples/jsm/nodes/lighting/PunctualLightNode.js +68 -0
  351. package/examples/jsm/nodes/loaders/NodeLoader.js +107 -0
  352. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +42 -0
  353. package/examples/jsm/nodes/loaders/NodeObjectLoader.js +70 -0
  354. package/examples/jsm/{renderers/nodes → nodes}/materials/LineBasicNodeMaterial.js +11 -4
  355. package/examples/jsm/nodes/materials/Materials.js +65 -0
  356. package/examples/jsm/{renderers/nodes → nodes}/materials/MeshBasicNodeMaterial.js +13 -4
  357. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +162 -22
  358. package/examples/jsm/nodes/materials/NodeMaterial.js +128 -113
  359. package/examples/jsm/{renderers/nodes → nodes}/materials/PointsNodeMaterial.js +13 -4
  360. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +84 -16
  361. package/examples/jsm/nodes/math/CondNode.js +26 -95
  362. package/examples/jsm/nodes/math/MathNode.js +164 -187
  363. package/examples/jsm/nodes/math/OperatorNode.js +161 -41
  364. package/examples/jsm/{renderers/nodes → nodes}/parsers/GLSLNodeFunction.js +2 -2
  365. package/examples/jsm/{renderers/nodes → nodes}/parsers/GLSLNodeParser.js +0 -0
  366. package/examples/jsm/{renderers/nodes → nodes}/parsers/WGSLNodeFunction.js +20 -5
  367. package/examples/jsm/{renderers/nodes → nodes}/parsers/WGSLNodeParser.js +0 -0
  368. package/examples/jsm/nodes/procedural/CheckerNode.js +16 -57
  369. package/examples/jsm/nodes/shadernode/ShaderNode.js +262 -0
  370. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +274 -0
  371. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +106 -0
  372. package/examples/jsm/{renderers/nodes → nodes}/utils/ArrayElementNode.js +3 -3
  373. package/examples/jsm/{renderers/nodes → nodes}/utils/ConvertNode.js +11 -3
  374. package/examples/jsm/nodes/utils/JoinNode.js +17 -89
  375. package/examples/jsm/nodes/utils/MatcapUVNode.js +25 -0
  376. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +32 -0
  377. package/examples/jsm/{renderers/nodes → nodes}/utils/OscNode.js +18 -2
  378. package/examples/jsm/{renderers/nodes → nodes}/utils/SplitNode.js +35 -4
  379. package/examples/jsm/{renderers/nodes → nodes}/utils/SpriteSheetUVNode.js +3 -3
  380. package/examples/jsm/nodes/utils/TimerNode.js +30 -65
  381. package/examples/jsm/objects/Lensflare.js +6 -6
  382. package/examples/jsm/objects/LightningStorm.js +4 -4
  383. package/examples/jsm/objects/MarchingCubes.js +5 -9
  384. package/examples/jsm/objects/Reflector.js +8 -19
  385. package/examples/jsm/objects/ReflectorForSSRPass.js +2 -14
  386. package/examples/jsm/objects/Refractor.js +8 -19
  387. package/examples/jsm/objects/ShadowMesh.js +2 -2
  388. package/examples/jsm/objects/Sky.js +2 -2
  389. package/examples/jsm/objects/Water.js +3 -18
  390. package/examples/jsm/objects/Water2.js +2 -2
  391. package/examples/jsm/offscreen/jank.js +5 -5
  392. package/examples/jsm/offscreen/offscreen.js +1 -1
  393. package/examples/jsm/offscreen/scene.js +11 -11
  394. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +5 -7
  395. package/examples/jsm/postprocessing/AfterimagePass.js +0 -10
  396. package/examples/jsm/postprocessing/BloomPass.js +48 -20
  397. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  398. package/examples/jsm/postprocessing/EffectComposer.js +1 -9
  399. package/examples/jsm/postprocessing/GlitchPass.js +7 -6
  400. package/examples/jsm/postprocessing/LUTPass.js +2 -2
  401. package/examples/jsm/postprocessing/OutlinePass.js +8 -15
  402. package/examples/jsm/postprocessing/SAOPass.js +2 -9
  403. package/examples/jsm/postprocessing/SMAAPass.js +2 -11
  404. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -4
  405. package/examples/jsm/postprocessing/SSAOPass.js +13 -25
  406. package/examples/jsm/postprocessing/SSRPass.js +3 -9
  407. package/examples/jsm/postprocessing/SavePass.js +1 -3
  408. package/examples/jsm/postprocessing/TAARenderPass.js +4 -4
  409. package/examples/jsm/postprocessing/UnrealBloomPass.js +3 -8
  410. package/examples/jsm/renderers/CSS2DRenderer.js +21 -19
  411. package/examples/jsm/renderers/CSS3DRenderer.js +39 -34
  412. package/examples/jsm/renderers/Projector.js +101 -128
  413. package/examples/jsm/renderers/SVGRenderer.js +4 -4
  414. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +1 -1
  415. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +127 -23
  416. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +14 -3
  417. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +5 -5
  418. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +4 -4
  419. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +16 -10
  420. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +8 -7
  421. package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +43 -0
  422. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +14 -7
  423. package/examples/jsm/renderers/webgpu/WebGPUInfo.js +1 -1
  424. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +0 -6
  425. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +20 -20
  426. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +2 -1
  427. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +66 -0
  428. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +49 -28
  429. package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +14 -14
  430. package/examples/jsm/renderers/webgpu/WebGPUSampler.js +2 -2
  431. package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +5 -8
  432. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +23 -20
  433. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +38 -20
  434. package/examples/jsm/renderers/webgpu/WebGPUUniform.js +14 -14
  435. package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +5 -32
  436. package/examples/jsm/renderers/webgpu/WebGPUUniformsGroup.js +2 -2
  437. package/examples/jsm/renderers/webgpu/constants.js +3 -2
  438. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +276 -278
  439. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeSampledTexture.js +20 -2
  440. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +24 -14
  441. package/examples/jsm/shaders/BlendShader.js +2 -1
  442. package/examples/jsm/shaders/CopyShader.js +4 -3
  443. package/examples/jsm/shaders/DigitalGlitch.js +3 -3
  444. package/examples/jsm/shaders/FXAAShader.js +219 -1051
  445. package/examples/jsm/shaders/FreiChenShader.js +1 -1
  446. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -1
  447. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +1 -1
  448. package/examples/jsm/shaders/MMDToonShader.js +0 -1
  449. package/examples/jsm/shaders/SSAOShader.js +1 -1
  450. package/examples/jsm/shaders/SSRShader.js +3 -3
  451. package/examples/jsm/shaders/ToneMapShader.js +1 -1
  452. package/examples/jsm/utils/BufferGeometryUtils.js +292 -22
  453. package/examples/jsm/utils/GPUStatsPanel.js +1 -1
  454. package/examples/jsm/utils/LDrawUtils.js +202 -0
  455. package/examples/jsm/utils/SceneUtils.js +76 -2
  456. package/examples/jsm/utils/SkeletonUtils.js +1 -1
  457. package/examples/jsm/utils/UVsDebug.js +23 -32
  458. package/examples/jsm/webxr/ARButton.js +14 -4
  459. package/examples/jsm/webxr/OculusHandPointerModel.js +3 -3
  460. package/examples/jsm/webxr/Text2D.js +1 -1
  461. package/examples/jsm/webxr/VRButton.js +39 -1
  462. package/examples/jsm/webxr/XREstimatedLight.js +2 -0
  463. package/examples/jsm/webxr/XRHandMeshModel.js +3 -7
  464. package/examples/jsm/webxr/XRHandModelFactory.js +3 -0
  465. package/package.json +53 -25
  466. package/src/Three.Legacy.js +41 -1912
  467. package/src/Three.js +6 -3
  468. package/src/animation/AnimationClip.js +1 -1
  469. package/src/animation/AnimationMixer.js +6 -3
  470. package/src/animation/AnimationObjectGroup.js +2 -2
  471. package/src/animation/PropertyBinding.js +8 -18
  472. package/src/audio/PositionalAudio.js +8 -0
  473. package/src/cameras/ArrayCamera.js +2 -3
  474. package/src/cameras/Camera.js +2 -2
  475. package/src/cameras/CubeCamera.js +8 -1
  476. package/src/cameras/OrthographicCamera.js +2 -2
  477. package/src/cameras/PerspectiveCamera.js +2 -2
  478. package/src/constants.js +8 -18
  479. package/src/core/BufferAttribute.js +7 -12
  480. package/src/core/BufferGeometry.js +6 -6
  481. package/src/core/GLBufferAttribute.js +2 -2
  482. package/src/core/InstancedBufferAttribute.js +2 -2
  483. package/src/core/InstancedBufferGeometry.js +2 -2
  484. package/src/core/InstancedInterleavedBuffer.js +2 -2
  485. package/src/core/InterleavedBuffer.js +2 -2
  486. package/src/core/InterleavedBufferAttribute.js +5 -11
  487. package/src/core/Object3D.js +6 -3
  488. package/src/core/Raycaster.js +2 -2
  489. package/src/extras/DataUtils.js +127 -40
  490. package/src/extras/Earcut.js +2 -2
  491. package/src/extras/ImageUtils.js +63 -0
  492. package/src/extras/PMREMGenerator.js +152 -174
  493. package/src/extras/core/CurvePath.js +3 -3
  494. package/src/extras/core/ShapePath.js +5 -6
  495. package/src/extras/curves/ArcCurve.js +2 -2
  496. package/src/extras/curves/CatmullRomCurve3.js +2 -2
  497. package/src/extras/curves/CubicBezierCurve.js +2 -2
  498. package/src/extras/curves/CubicBezierCurve3.js +2 -2
  499. package/src/extras/curves/EllipseCurve.js +2 -2
  500. package/src/extras/curves/LineCurve.js +2 -2
  501. package/src/extras/curves/LineCurve3.js +2 -1
  502. package/src/extras/curves/QuadraticBezierCurve.js +2 -2
  503. package/src/extras/curves/QuadraticBezierCurve3.js +2 -2
  504. package/src/extras/curves/SplineCurve.js +2 -2
  505. package/src/geometries/CapsuleGeometry.js +33 -0
  506. package/src/geometries/ExtrudeGeometry.js +2 -0
  507. package/src/geometries/Geometries.js +1 -0
  508. package/src/geometries/LatheGeometry.js +1 -1
  509. package/src/geometries/TorusKnotGeometry.js +2 -2
  510. package/src/geometries/WireframeGeometry.js +3 -2
  511. package/src/helpers/BoxHelper.js +2 -2
  512. package/src/helpers/PointLightHelper.js +1 -1
  513. package/src/helpers/SkeletonHelper.js +3 -2
  514. package/src/lights/AmbientLight.js +2 -2
  515. package/src/lights/AmbientLightProbe.js +2 -2
  516. package/src/lights/DirectionalLight.js +2 -2
  517. package/src/lights/DirectionalLightShadow.js +2 -2
  518. package/src/lights/HemisphereLight.js +4 -4
  519. package/src/lights/HemisphereLightProbe.js +2 -2
  520. package/src/lights/Light.js +4 -4
  521. package/src/lights/LightProbe.js +2 -2
  522. package/src/lights/PointLight.js +4 -4
  523. package/src/lights/PointLightShadow.js +2 -2
  524. package/src/lights/RectAreaLight.js +2 -2
  525. package/src/lights/SpotLight.js +4 -4
  526. package/src/lights/SpotLightShadow.js +2 -2
  527. package/src/loaders/FileLoader.js +23 -4
  528. package/src/loaders/ImageBitmapLoader.js +2 -2
  529. package/src/loaders/ImageLoader.js +1 -1
  530. package/src/loaders/LoaderUtils.js +1 -1
  531. package/src/loaders/MaterialLoader.js +8 -3
  532. package/src/loaders/ObjectLoader.js +23 -25
  533. package/src/materials/LineBasicMaterial.js +6 -13
  534. package/src/materials/LineDashedMaterial.js +2 -15
  535. package/src/materials/Material.js +49 -15
  536. package/src/materials/Materials.js +66 -18
  537. package/src/materials/MeshBasicMaterial.js +6 -31
  538. package/src/materials/MeshDepthMaterial.js +2 -22
  539. package/src/materials/MeshDistanceMaterial.js +2 -22
  540. package/src/materials/MeshLambertMaterial.js +6 -34
  541. package/src/materials/MeshMatcapMaterial.js +6 -28
  542. package/src/materials/MeshNormalMaterial.js +2 -26
  543. package/src/materials/MeshPhongMaterial.js +6 -48
  544. package/src/materials/MeshPhysicalMaterial.js +32 -35
  545. package/src/materials/MeshStandardMaterial.js +6 -54
  546. package/src/materials/MeshToonMaterial.js +6 -38
  547. package/src/materials/PointsMaterial.js +6 -15
  548. package/src/materials/RawShaderMaterial.js +2 -2
  549. package/src/materials/ShaderMaterial.js +3 -17
  550. package/src/materials/ShadowMaterial.js +6 -8
  551. package/src/materials/SpriteMaterial.js +6 -12
  552. package/src/math/Box2.js +2 -2
  553. package/src/math/Box3.js +29 -15
  554. package/src/math/Color.js +85 -36
  555. package/src/math/ColorManagement.js +74 -0
  556. package/src/math/Euler.js +16 -14
  557. package/src/math/Interpolant.js +4 -9
  558. package/src/math/MathUtils.js +76 -7
  559. package/src/math/Matrix3.js +2 -2
  560. package/src/math/Matrix4.js +2 -3
  561. package/src/math/Plane.js +2 -2
  562. package/src/math/Quaternion.js +12 -3
  563. package/src/math/Spherical.js +1 -1
  564. package/src/math/SphericalHarmonics3.js +2 -2
  565. package/src/math/Vector2.js +2 -2
  566. package/src/math/Vector3.js +12 -3
  567. package/src/math/Vector4.js +2 -2
  568. package/src/math/interpolants/DiscreteInterpolant.js +1 -1
  569. package/src/objects/Bone.js +2 -2
  570. package/src/objects/Group.js +2 -2
  571. package/src/objects/InstancedMesh.js +4 -4
  572. package/src/objects/Line.js +76 -107
  573. package/src/objects/LineLoop.js +2 -2
  574. package/src/objects/LineSegments.js +15 -23
  575. package/src/objects/Mesh.js +82 -104
  576. package/src/objects/Points.js +32 -54
  577. package/src/objects/SkinnedMesh.js +5 -8
  578. package/src/objects/Sprite.js +4 -4
  579. package/src/renderers/WebGL3DRenderTarget.js +22 -0
  580. package/src/renderers/WebGLArrayRenderTarget.js +22 -0
  581. package/src/renderers/WebGLCubeRenderTarget.js +7 -16
  582. package/src/renderers/WebGLMultipleRenderTargets.js +8 -5
  583. package/src/renderers/WebGLRenderTarget.js +19 -18
  584. package/src/renderers/WebGLRenderer.js +112 -133
  585. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +46 -0
  586. package/src/renderers/shaders/ShaderChunk/common.glsl.js +1 -0
  587. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +12 -13
  588. package/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js +1 -1
  589. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +0 -2
  590. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -4
  591. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -2
  592. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +3 -19
  593. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +107 -0
  594. package/src/renderers/shaders/ShaderChunk/iridescence_pars_fragment.glsl.js +14 -0
  595. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -7
  596. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +25 -0
  597. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -7
  598. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +25 -2
  599. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +43 -5
  600. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +10 -3
  601. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +1 -2
  602. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +24 -0
  603. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +1 -1
  604. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +7 -7
  605. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +1 -9
  606. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +16 -31
  607. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +9 -8
  608. package/src/renderers/shaders/ShaderChunk.js +6 -0
  609. package/src/renderers/shaders/ShaderLib/background.glsl.js +8 -2
  610. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -3
  611. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +1 -0
  612. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +3 -2
  613. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +1 -0
  614. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +2 -2
  615. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +6 -0
  616. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +1 -0
  617. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +10 -0
  618. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +1 -0
  619. package/src/renderers/shaders/ShaderLib/points.glsl.js +1 -0
  620. package/src/renderers/shaders/ShaderLib.js +8 -2
  621. package/src/renderers/shaders/UniformsLib.js +2 -2
  622. package/src/renderers/webgl/WebGLAttributes.js +6 -6
  623. package/src/renderers/webgl/WebGLBackground.js +5 -2
  624. package/src/renderers/webgl/WebGLBindingStates.js +57 -29
  625. package/src/renderers/webgl/WebGLCubeMaps.js +0 -4
  626. package/src/renderers/webgl/WebGLCubeUVMaps.js +29 -16
  627. package/src/renderers/webgl/WebGLGeometries.js +2 -2
  628. package/src/renderers/webgl/WebGLLights.js +0 -1
  629. package/src/renderers/webgl/WebGLMaterials.js +72 -187
  630. package/src/renderers/webgl/WebGLMorphtargets.js +59 -23
  631. package/src/renderers/webgl/WebGLProgram.js +56 -30
  632. package/src/renderers/webgl/WebGLPrograms.js +80 -130
  633. package/src/renderers/webgl/WebGLShaderCache.js +4 -3
  634. package/src/renderers/webgl/WebGLShadowMap.js +6 -8
  635. package/src/renderers/webgl/WebGLState.js +83 -2
  636. package/src/renderers/webgl/WebGLTextures.js +618 -375
  637. package/src/renderers/webgl/WebGLUniforms.js +79 -80
  638. package/src/renderers/webgl/WebGLUtils.js +97 -30
  639. package/src/renderers/webxr/WebXRManager.js +64 -47
  640. package/src/scenes/Fog.js +2 -2
  641. package/src/scenes/FogExp2.js +2 -2
  642. package/src/scenes/Scene.js +2 -2
  643. package/src/textures/CanvasTexture.js +2 -2
  644. package/src/textures/CompressedTexture.js +2 -2
  645. package/src/textures/CubeTexture.js +2 -2
  646. package/src/textures/{DataTexture3D.js → Data3DTexture.js} +4 -4
  647. package/src/textures/{DataTexture2DArray.js → DataArrayTexture.js} +4 -4
  648. package/src/textures/DataTexture.js +2 -5
  649. package/src/textures/DepthTexture.js +5 -5
  650. package/src/textures/FramebufferTexture.js +2 -2
  651. package/src/textures/Source.js +123 -0
  652. package/src/textures/Texture.js +29 -98
  653. package/src/textures/VideoTexture.js +2 -4
  654. package/src/utils.js +15 -1
  655. package/examples/js/WebGL.js +0 -90
  656. package/examples/js/csm/Frustum.js +0 -133
  657. package/examples/js/deprecated/Geometry.js +0 -1656
  658. package/examples/js/loaders/VRMLoader.js +0 -72
  659. package/examples/js/objects/ReflectorRTT.js +0 -16
  660. package/examples/js/postprocessing/SSRrPass.js +0 -494
  661. package/examples/js/shaders/SSRrShader.js +0 -336
  662. package/examples/js/utils/RoughnessMipmapper.js +0 -268
  663. package/examples/jsm/deprecated/Geometry.js +0 -1869
  664. package/examples/jsm/libs/opentype.module.min.js +0 -119
  665. package/examples/jsm/loaders/NodeMaterialLoader.js +0 -263
  666. package/examples/jsm/loaders/VRMLoader.js +0 -78
  667. package/examples/jsm/nodes/accessors/ColorsNode.js +0 -56
  668. package/examples/jsm/nodes/accessors/LightNode.js +0 -60
  669. package/examples/jsm/nodes/accessors/ResolutionNode.js +0 -64
  670. package/examples/jsm/nodes/accessors/ScreenUVNode.js +0 -64
  671. package/examples/jsm/nodes/core/NodeLib.js +0 -64
  672. package/examples/jsm/nodes/core/StructNode.js +0 -106
  673. package/examples/jsm/nodes/effects/BlurNode.js +0 -171
  674. package/examples/jsm/nodes/effects/ColorAdjustmentNode.js +0 -140
  675. package/examples/jsm/nodes/effects/LuminanceNode.js +0 -75
  676. package/examples/jsm/nodes/inputs/BoolNode.js +0 -51
  677. package/examples/jsm/nodes/inputs/ColorNode.js +0 -58
  678. package/examples/jsm/nodes/inputs/CubeTextureNode.js +0 -108
  679. package/examples/jsm/nodes/inputs/FloatNode.js +0 -51
  680. package/examples/jsm/nodes/inputs/IntNode.js +0 -51
  681. package/examples/jsm/nodes/inputs/Matrix3Node.js +0 -63
  682. package/examples/jsm/nodes/inputs/Matrix4Node.js +0 -63
  683. package/examples/jsm/nodes/inputs/PropertyNode.js +0 -47
  684. package/examples/jsm/nodes/inputs/RTTNode.js +0 -157
  685. package/examples/jsm/nodes/inputs/ReflectorNode.js +0 -90
  686. package/examples/jsm/nodes/inputs/ScreenNode.js +0 -28
  687. package/examples/jsm/nodes/inputs/TextureNode.js +0 -116
  688. package/examples/jsm/nodes/inputs/Vector2Node.js +0 -57
  689. package/examples/jsm/nodes/inputs/Vector3Node.js +0 -58
  690. package/examples/jsm/nodes/inputs/Vector4Node.js +0 -59
  691. package/examples/jsm/nodes/materials/BasicNodeMaterial.js +0 -26
  692. package/examples/jsm/nodes/materials/PhongNodeMaterial.js +0 -36
  693. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +0 -40
  694. package/examples/jsm/nodes/materials/nodes/BasicNode.js +0 -154
  695. package/examples/jsm/nodes/materials/nodes/MeshStandardNode.js +0 -116
  696. package/examples/jsm/nodes/materials/nodes/PhongNode.js +0 -409
  697. package/examples/jsm/nodes/materials/nodes/RawNode.js +0 -62
  698. package/examples/jsm/nodes/materials/nodes/SpriteNode.js +0 -236
  699. package/examples/jsm/nodes/materials/nodes/StandardNode.js +0 -609
  700. package/examples/jsm/nodes/misc/BumpMapNode.js +0 -163
  701. package/examples/jsm/nodes/misc/NormalMapNode.js +0 -138
  702. package/examples/jsm/nodes/misc/TextureCubeNode.js +0 -86
  703. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +0 -280
  704. package/examples/jsm/nodes/postprocessing/NodePass.js +0 -93
  705. package/examples/jsm/nodes/postprocessing/NodePostProcessing.js +0 -148
  706. package/examples/jsm/nodes/procedural/Fractal3DNode.js +0 -104
  707. package/examples/jsm/nodes/procedural/Noise2DNode.js +0 -149
  708. package/examples/jsm/nodes/procedural/Noise3DNode.js +0 -141
  709. package/examples/jsm/nodes/utils/BypassNode.js +0 -85
  710. package/examples/jsm/nodes/utils/ColorSpaceNode.js +0 -154
  711. package/examples/jsm/nodes/utils/MaxMIPLevelNode.js +0 -56
  712. package/examples/jsm/nodes/utils/RemapNode.js +0 -155
  713. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -101
  714. package/examples/jsm/nodes/utils/SubSlotNode.js +0 -77
  715. package/examples/jsm/nodes/utils/SwitchNode.js +0 -103
  716. package/examples/jsm/nodes/utils/UVTransformNode.js +0 -66
  717. package/examples/jsm/nodes/utils/VelocityNode.js +0 -170
  718. package/examples/jsm/objects/ReflectorRTT.js +0 -15
  719. package/examples/jsm/postprocessing/SSRrPass.js +0 -579
  720. package/examples/jsm/renderers/nodes/Nodes.js +0 -164
  721. package/examples/jsm/renderers/nodes/ShaderNode.js +0 -346
  722. package/examples/jsm/renderers/nodes/accessors/CameraNode.js +0 -68
  723. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +0 -63
  724. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +0 -67
  725. package/examples/jsm/renderers/nodes/accessors/ReferenceNode.js +0 -91
  726. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +0 -107
  727. package/examples/jsm/renderers/nodes/accessors/UVNode.js +0 -25
  728. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +0 -23
  729. package/examples/jsm/renderers/nodes/core/AttributeNode.js +0 -54
  730. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +0 -32
  731. package/examples/jsm/renderers/nodes/core/FunctionCallNode.js +0 -67
  732. package/examples/jsm/renderers/nodes/core/FunctionNode.js +0 -87
  733. package/examples/jsm/renderers/nodes/core/InputNode.js +0 -66
  734. package/examples/jsm/renderers/nodes/core/Node.js +0 -104
  735. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +0 -633
  736. package/examples/jsm/renderers/nodes/core/NodeFrame.js +0 -59
  737. package/examples/jsm/renderers/nodes/core/NodeUniform.js +0 -28
  738. package/examples/jsm/renderers/nodes/core/TempNode.js +0 -43
  739. package/examples/jsm/renderers/nodes/core/VarNode.js +0 -51
  740. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +0 -133
  741. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +0 -87
  742. package/examples/jsm/renderers/nodes/functions/BSDFs.js +0 -122
  743. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +0 -27
  744. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +0 -25
  745. package/examples/jsm/renderers/nodes/inputs/ColorNode.js +0 -18
  746. package/examples/jsm/renderers/nodes/inputs/FloatNode.js +0 -17
  747. package/examples/jsm/renderers/nodes/inputs/IntNode.js +0 -17
  748. package/examples/jsm/renderers/nodes/inputs/Matrix3Node.js +0 -18
  749. package/examples/jsm/renderers/nodes/inputs/Matrix4Node.js +0 -18
  750. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +0 -79
  751. package/examples/jsm/renderers/nodes/inputs/Vector2Node.js +0 -18
  752. package/examples/jsm/renderers/nodes/inputs/Vector3Node.js +0 -18
  753. package/examples/jsm/renderers/nodes/inputs/Vector4Node.js +0 -18
  754. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +0 -59
  755. package/examples/jsm/renderers/nodes/lights/LightNode.js +0 -79
  756. package/examples/jsm/renderers/nodes/lights/LightsNode.js +0 -44
  757. package/examples/jsm/renderers/nodes/materials/Materials.js +0 -11
  758. package/examples/jsm/renderers/nodes/materials/MeshStandardNodeMaterial.js +0 -63
  759. package/examples/jsm/renderers/nodes/math/CondNode.js +0 -60
  760. package/examples/jsm/renderers/nodes/math/MathNode.js +0 -241
  761. package/examples/jsm/renderers/nodes/math/OperatorNode.js +0 -174
  762. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +0 -36
  763. package/examples/jsm/renderers/nodes/utils/JoinNode.js +0 -42
  764. package/examples/jsm/renderers/nodes/utils/TimerNode.js +0 -47
  765. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +0 -20
  766. package/examples/jsm/shaders/SSRrShader.js +0 -307
  767. package/examples/jsm/utils/RoughnessMipmapper.js +0 -288
  768. package/src/renderers/WebGLMultisampleRenderTarget.js +0 -33
@@ -1,11 +1,14 @@
1
- import { Canvas, CircleMenu, ButtonInput, ContextMenu, Loader } from '../libs/flow.module.js';
1
+ import { Styles, Canvas, CircleMenu, ButtonInput, ContextMenu, Tips, Search, Loader } from '../libs/flow.module.js';
2
+ import { BasicMaterialEditor } from './materials/BasicMaterialEditor.js';
2
3
  import { StandardMaterialEditor } from './materials/StandardMaterialEditor.js';
4
+ import { PointsMaterialEditor } from './materials/PointsMaterialEditor.js';
3
5
  import { OperatorEditor } from './math/OperatorEditor.js';
4
6
  import { NormalizeEditor } from './math/NormalizeEditor.js';
5
7
  import { InvertEditor } from './math/InvertEditor.js';
6
8
  import { LimiterEditor } from './math/LimiterEditor.js';
7
9
  import { DotEditor } from './math/DotEditor.js';
8
10
  import { PowerEditor } from './math/PowerEditor.js';
11
+ import { AngleEditor } from './math/AngleEditor.js';
9
12
  import { TrigonometryEditor } from './math/TrigonometryEditor.js';
10
13
  import { FloatEditor } from './inputs/FloatEditor.js';
11
14
  import { Vector2Editor } from './inputs/Vector2Editor.js';
@@ -13,24 +16,255 @@ import { Vector3Editor } from './inputs/Vector3Editor.js';
13
16
  import { Vector4Editor } from './inputs/Vector4Editor.js';
14
17
  import { SliderEditor } from './inputs/SliderEditor.js';
15
18
  import { ColorEditor } from './inputs/ColorEditor.js';
19
+ import { TextureEditor } from './inputs/TextureEditor.js';
16
20
  import { BlendEditor } from './display/BlendEditor.js';
21
+ import { NormalMapEditor } from './display/NormalMapEditor.js';
17
22
  import { UVEditor } from './accessors/UVEditor.js';
23
+ import { MatcapUVEditor } from './accessors/MatcapUVEditor.js';
18
24
  import { PositionEditor } from './accessors/PositionEditor.js';
19
25
  import { NormalEditor } from './accessors/NormalEditor.js';
26
+ import { PreviewEditor } from './utils/PreviewEditor.js';
20
27
  import { TimerEditor } from './utils/TimerEditor.js';
21
28
  import { OscillatorEditor } from './utils/OscillatorEditor.js';
29
+ import { SplitEditor } from './utils/SplitEditor.js';
30
+ import { JoinEditor } from './utils/JoinEditor.js';
22
31
  import { CheckerEditor } from './procedural/CheckerEditor.js';
23
-
32
+ import { PointsEditor } from './scene/PointsEditor.js';
33
+ import { MeshEditor } from './scene/MeshEditor.js';
34
+ import { FileEditor } from './core/FileEditor.js';
35
+ import { FileURLEditor } from './core/FileURLEditor.js';
24
36
  import { EventDispatcher } from 'three';
25
37
 
38
+ Styles.icons.unlink = 'ti ti-unlink';
39
+
40
+ export const NodeList = [
41
+ {
42
+ name: 'Inputs',
43
+ icon: 'forms',
44
+ children: [
45
+ {
46
+ name: 'Slider',
47
+ icon: 'adjustments-horizontal',
48
+ nodeClass: SliderEditor
49
+ },
50
+ {
51
+ name: 'Float',
52
+ icon: 'box-multiple-1',
53
+ nodeClass: FloatEditor
54
+ },
55
+ {
56
+ name: 'Vector 2',
57
+ icon: 'box-multiple-2',
58
+ nodeClass: Vector2Editor
59
+ },
60
+ {
61
+ name: 'Vector 3',
62
+ icon: 'box-multiple-3',
63
+ nodeClass: Vector3Editor
64
+ },
65
+ {
66
+ name: 'Vector 4',
67
+ icon: 'box-multiple-4',
68
+ nodeClass: Vector4Editor
69
+ },
70
+ {
71
+ name: 'Color',
72
+ icon: 'palette',
73
+ nodeClass: ColorEditor
74
+ },
75
+ {
76
+ name: 'Texture',
77
+ icon: 'photo',
78
+ nodeClass: TextureEditor
79
+ },
80
+ {
81
+ name: 'File URL',
82
+ icon: 'cloud-download',
83
+ nodeClass: FileURLEditor
84
+ }
85
+ ]
86
+ },
87
+ {
88
+ name: 'Accessors',
89
+ icon: 'vector-triangle',
90
+ children: [
91
+ {
92
+ name: 'UV',
93
+ icon: 'details',
94
+ nodeClass: UVEditor
95
+ },
96
+ {
97
+ name: 'Position',
98
+ icon: 'hierarchy',
99
+ nodeClass: PositionEditor
100
+ },
101
+ {
102
+ name: 'Normal',
103
+ icon: 'fold-up',
104
+ nodeClass: NormalEditor
105
+ },
106
+ {
107
+ name: 'Matcap UV',
108
+ icon: 'circle',
109
+ nodeClass: MatcapUVEditor
110
+ }
111
+ ]
112
+ },
113
+ {
114
+ name: 'Display',
115
+ icon: 'brightness',
116
+ children: [
117
+ {
118
+ name: 'Blend',
119
+ icon: 'layers-subtract',
120
+ nodeClass: BlendEditor
121
+ },
122
+ {
123
+ name: 'Normal Map',
124
+ icon: 'chart-line',
125
+ nodeClass: NormalMapEditor
126
+ }
127
+ ]
128
+ },
129
+ {
130
+ name: 'Math',
131
+ icon: 'calculator',
132
+ children: [
133
+ {
134
+ name: 'Operator',
135
+ icon: 'math-symbols',
136
+ nodeClass: OperatorEditor
137
+ },
138
+ {
139
+ name: 'Invert',
140
+ icon: 'flip-vertical',
141
+ tip: 'Negate',
142
+ nodeClass: InvertEditor
143
+ },
144
+ {
145
+ name: 'Limiter',
146
+ icon: 'arrow-bar-to-up',
147
+ tip: 'Min / Max',
148
+ nodeClass: LimiterEditor
149
+ },
150
+ {
151
+ name: 'Dot Product',
152
+ icon: 'arrows-up-left',
153
+ nodeClass: DotEditor
154
+ },
155
+ {
156
+ name: 'Power',
157
+ icon: 'arrow-up-right',
158
+ nodeClass: PowerEditor
159
+ },
160
+ {
161
+ name: 'Trigonometry',
162
+ icon: 'wave-sine',
163
+ tip: 'Sin / Cos / Tan / ...',
164
+ nodeClass: TrigonometryEditor
165
+ },
166
+ {
167
+ name: 'Angle',
168
+ icon: 'angle',
169
+ tip: 'Degress / Radians',
170
+ nodeClass: AngleEditor
171
+ },
172
+ {
173
+ name: 'Normalize',
174
+ icon: 'fold',
175
+ nodeClass: NormalizeEditor
176
+ }
177
+ ]
178
+ },
179
+ {
180
+ name: 'Procedural',
181
+ icon: 'infinity',
182
+ children: [
183
+ {
184
+ name: 'Checker',
185
+ icon: 'border-outer',
186
+ nodeClass: CheckerEditor
187
+ }
188
+ ]
189
+ },
190
+ {
191
+ name: 'Utils',
192
+ icon: 'apps',
193
+ children: [
194
+ {
195
+ name: 'Preview',
196
+ icon: 'square-check',
197
+ nodeClass: PreviewEditor
198
+ },
199
+ {
200
+ name: 'Timer',
201
+ icon: 'clock',
202
+ nodeClass: TimerEditor
203
+ },
204
+ {
205
+ name: 'Oscillator',
206
+ icon: 'wave-sine',
207
+ nodeClass: OscillatorEditor
208
+ },
209
+ {
210
+ name: 'Split',
211
+ icon: 'arrows-split-2',
212
+ nodeClass: SplitEditor
213
+ },
214
+ {
215
+ name: 'Join',
216
+ icon: 'arrows-join-2',
217
+ nodeClass: JoinEditor
218
+ }
219
+ ]
220
+ },
221
+ /*{
222
+ name: 'Scene',
223
+ icon: '3d-cube-sphere',
224
+ children: [
225
+ {
226
+ name: 'Mesh',
227
+ icon: '3d-cube-sphere',
228
+ nodeClass: MeshEditor
229
+ }
230
+ ]
231
+ },*/
232
+ {
233
+ name: 'Material',
234
+ icon: 'circles',
235
+ children: [
236
+ {
237
+ name: 'Basic Material',
238
+ icon: 'circle',
239
+ nodeClass: BasicMaterialEditor
240
+ },
241
+ {
242
+ name: 'Standard Material',
243
+ icon: 'circle',
244
+ nodeClass: StandardMaterialEditor
245
+ },
246
+ {
247
+ name: 'Points Material',
248
+ icon: 'circle-dotted',
249
+ nodeClass: PointsMaterialEditor
250
+ }
251
+ ]
252
+ }
253
+ ];
254
+
26
255
  export const ClassLib = {
256
+ BasicMaterialEditor,
27
257
  StandardMaterialEditor,
258
+ PointsMaterialEditor,
259
+ PointsEditor,
260
+ MeshEditor,
28
261
  OperatorEditor,
29
262
  NormalizeEditor,
30
263
  InvertEditor,
31
264
  LimiterEditor,
32
265
  DotEditor,
33
266
  PowerEditor,
267
+ AngleEditor,
34
268
  TrigonometryEditor,
35
269
  FloatEditor,
36
270
  Vector2Editor,
@@ -38,25 +272,33 @@ export const ClassLib = {
38
272
  Vector4Editor,
39
273
  SliderEditor,
40
274
  ColorEditor,
275
+ TextureEditor,
41
276
  BlendEditor,
277
+ NormalMapEditor,
42
278
  UVEditor,
279
+ MatcapUVEditor,
43
280
  PositionEditor,
44
281
  NormalEditor,
45
282
  TimerEditor,
46
283
  OscillatorEditor,
47
- CheckerEditor
284
+ SplitEditor,
285
+ JoinEditor,
286
+ CheckerEditor,
287
+ FileURLEditor
48
288
  };
49
289
 
50
290
  export class NodeEditor extends EventDispatcher {
51
291
 
52
- constructor() {
292
+ constructor( scene = null ) {
53
293
 
54
294
  super();
55
295
 
56
296
  const domElement = document.createElement( 'flow' );
57
297
  const canvas = new Canvas();
58
298
 
59
- domElement.appendChild( canvas.dom );
299
+ domElement.append( canvas.dom );
300
+
301
+ this.scene = scene;
60
302
 
61
303
  this.canvas = canvas;
62
304
  this.domElement = domElement;
@@ -64,16 +306,49 @@ export class NodeEditor extends EventDispatcher {
64
306
  this.nodesContext = null;
65
307
  this.examplesContext = null;
66
308
 
309
+ this._initUpload();
310
+ this._initTips();
67
311
  this._initMenu();
312
+ this._initSearch();
68
313
  this._initNodesContext();
69
314
  this._initExamplesContext();
70
315
 
71
316
  }
72
317
 
318
+ centralizeNode( node ) {
319
+
320
+ const canvas = this.canvas;
321
+ const canvasRect = canvas.rect;
322
+
323
+ const nodeRect = node.dom.getBoundingClientRect();
324
+
325
+ const defaultOffsetX = nodeRect.width;
326
+ const defaultOffsetY = nodeRect.height;
327
+
328
+ node.setPosition(
329
+ ( canvas.relativeX + ( canvasRect.width / 2 ) ) - defaultOffsetX,
330
+ ( canvas.relativeY + ( canvasRect.height / 2 ) ) - defaultOffsetY
331
+ );
332
+
333
+ }
334
+
73
335
  add( node ) {
74
336
 
337
+ const onRemove = () => {
338
+
339
+ node.removeEventListener( 'remove', onRemove );
340
+
341
+ node.setEditor( null );
342
+
343
+ };
344
+
345
+ node.setEditor( this );
346
+ node.addEventListener( 'remove', onRemove );
347
+
75
348
  this.canvas.add( node );
76
349
 
350
+ this.dispatchEvent( { type: 'add', node } );
351
+
77
352
  return this;
78
353
 
79
354
  }
@@ -94,55 +369,85 @@ export class NodeEditor extends EventDispatcher {
94
369
 
95
370
  loadJSON( json ) {
96
371
 
97
- this.canvas.clear();
372
+ const canvas = this.canvas;
373
+
374
+ canvas.clear();
375
+
376
+ canvas.deserialize( json );
377
+
378
+ for ( const node of canvas.nodes ) {
379
+
380
+ this.add( node );
98
381
 
99
- this.canvas.deserialize( json );
382
+ }
100
383
 
101
384
  this.dispatchEvent( { type: 'load' } );
102
385
 
103
386
  }
104
387
 
105
- _initMenu() {
388
+ _initUpload() {
106
389
 
107
- const menu = new CircleMenu();
390
+ const canvas = this.canvas;
108
391
 
109
- const menuButton = new ButtonInput().setIcon( 'ti ti-menu-2' );
110
- const examplesButton = new ButtonInput().setIcon( 'ti ti-file-symlink' ).setToolTip( 'Examples' );
111
- const newButton = new ButtonInput().setIcon( 'ti ti-file' ).setToolTip( 'New' );
112
- const openButton = new ButtonInput().setIcon( 'ti ti-upload' ).setToolTip( 'Open' );
113
- const saveButton = new ButtonInput().setIcon( 'ti ti-download' ).setToolTip( 'Save' );
392
+ canvas.onDrop( () => {
114
393
 
115
- const hideContext = () => {
394
+ for ( const item of canvas.droppedItems ) {
116
395
 
117
- this.examplesContext.hide();
118
- this.nodesContext.hide();
396
+ if ( /^image\//.test( item.type ) === true ) {
119
397
 
120
- };
398
+ const { relativeClientX, relativeClientY } = canvas;
121
399
 
122
- menuButton.onClick( () => {
400
+ const file = item.getAsFile();
401
+ const fileEditor = new FileEditor( file );
123
402
 
124
- this.nodesContext.show( 60, 50 );
403
+ fileEditor.setPosition(
404
+ relativeClientX - ( fileEditor.getWidth() / 2 ),
405
+ relativeClientY - 20
406
+ );
125
407
 
126
- } );
408
+ this.add( fileEditor );
127
409
 
128
- examplesButton.onClick( () => {
410
+ }
129
411
 
130
- this.examplesContext.show( 60, 175 );
412
+ }
131
413
 
132
414
  } );
133
415
 
416
+ }
417
+
418
+ _initTips() {
419
+
420
+ this.tips = new Tips();
421
+
422
+ this.domElement.append( this.tips.dom );
423
+
424
+ }
425
+
426
+ _initMenu() {
427
+
428
+ const menu = new CircleMenu();
429
+
430
+ const menuButton = new ButtonInput().setIcon( 'ti ti-apps' ).setToolTip( 'Add' );
431
+ const examplesButton = new ButtonInput().setIcon( 'ti ti-file-symlink' ).setToolTip( 'Examples' );
432
+ const newButton = new ButtonInput().setIcon( 'ti ti-file' ).setToolTip( 'New' );
433
+ const openButton = new ButtonInput().setIcon( 'ti ti-upload' ).setToolTip( 'Open' );
434
+ const saveButton = new ButtonInput().setIcon( 'ti ti-download' ).setToolTip( 'Save' );
435
+
436
+ menuButton.onClick( () => this.nodesContext.open() );
437
+ examplesButton.onClick( () => this.examplesContext.open() );
438
+
134
439
  newButton.onClick( () => {
135
440
 
136
- hideContext();
441
+ if ( confirm( 'Are you sure?' ) === true ) {
137
442
 
138
- this.newProject();
443
+ this.newProject();
444
+
445
+ }
139
446
 
140
447
  } );
141
448
 
142
449
  openButton.onClick( () => {
143
450
 
144
- hideContext();
145
-
146
451
  const input = document.createElement( 'input' );
147
452
  input.type = 'file';
148
453
 
@@ -170,8 +475,6 @@ export class NodeEditor extends EventDispatcher {
170
475
 
171
476
  saveButton.onClick( () => {
172
477
 
173
- hideContext();
174
-
175
478
  const json = JSON.stringify( this.canvas.toJSON() );
176
479
 
177
480
  const a = document.createElement( 'a' );
@@ -183,13 +486,13 @@ export class NodeEditor extends EventDispatcher {
183
486
 
184
487
  } );
185
488
 
186
- menu.add( menuButton )
489
+ menu.add( examplesButton )
490
+ .add( menuButton )
187
491
  .add( newButton )
188
- .add( examplesButton )
189
492
  .add( openButton )
190
493
  .add( saveButton );
191
494
 
192
- this.domElement.appendChild( menu.dom );
495
+ this.domElement.append( menu.dom );
193
496
 
194
497
  this.menu = menu;
195
498
 
@@ -238,6 +541,7 @@ export class NodeEditor extends EventDispatcher {
238
541
  addExample( basicContext, 'Animate UV' );
239
542
  addExample( basicContext, 'Fake top light' );
240
543
  addExample( basicContext, 'Oscillator color' );
544
+ addExample( basicContext, 'Matcap' );
241
545
 
242
546
  addExample( advancedContext, 'Rim' );
243
547
 
@@ -248,206 +552,224 @@ export class NodeEditor extends EventDispatcher {
248
552
  context.add( new ButtonInput( 'Basic' ), basicContext );
249
553
  context.add( new ButtonInput( 'Advanced' ), advancedContext );
250
554
 
251
- this.domElement.appendChild( context.dom );
252
-
253
555
  this.examplesContext = context;
254
556
 
255
557
  }
256
558
 
257
- _initNodesContext() {
258
-
259
- const context = new ContextMenu( this.domElement );
559
+ _initSearch() {
260
560
 
261
- let isContext = false;
262
- const contextPosition = {};
561
+ const traverseNodeEditors = ( item ) => {
263
562
 
264
- const add = ( node ) => {
563
+ if ( item.nodeClass ) {
265
564
 
266
- const canvas = this.canvas;
267
- const canvasRect = canvas.rect;
565
+ const button = new ButtonInput( item.name );
566
+ button.setIcon( `ti ti-${item.icon}` );
567
+ button.addEventListener( 'complete', () => {
268
568
 
269
- if ( isContext ) {
569
+ const node = new item.nodeClass();
270
570
 
271
- node.setPosition(
272
- contextPosition.x,
273
- contextPosition.y
274
- );
571
+ this.add( node );
275
572
 
276
- } else {
573
+ this.centralizeNode( node );
277
574
 
278
- const defaultOffsetX = 350 / 2;
279
- const defaultOffsetY = 20;
575
+ } );
280
576
 
281
- node.setPosition(
282
- ( canvas.relativeX + ( canvasRect.width / 2 ) ) - defaultOffsetX,
283
- ( canvas.relativeY + ( canvasRect.height / 2 ) ) - defaultOffsetY
284
- );
577
+ search.add( button );
285
578
 
286
579
  }
287
580
 
288
- context.hide();
581
+ if ( item.children ) {
289
582
 
290
- this.add( node );
583
+ for ( const subItem of item.children ) {
291
584
 
292
- this.canvas.select( node );
585
+ traverseNodeEditors( subItem );
293
586
 
294
- isContext = false;
587
+ }
588
+
589
+ }
295
590
 
296
591
  };
297
592
 
298
- context.onContext( () => {
593
+ const search = new Search();
594
+ search.forceAutoComplete = true;
299
595
 
300
- isContext = true;
596
+ search.onFilter( () => {
301
597
 
302
- const { relativeClientX, relativeClientY } = this.canvas;
598
+ search.clear();
599
+
600
+ for ( const item of NodeList ) {
601
+
602
+ traverseNodeEditors( item );
603
+
604
+ }
605
+
606
+ const object3d = this.scene;
607
+
608
+ if ( object3d !== null ) {
609
+
610
+ object3d.traverse( ( obj3d ) => {
611
+
612
+ if ( obj3d.isMesh === true || obj3d.isPoints === true ) {
613
+
614
+ let prefix = null;
615
+ let icon = null;
616
+ let editorClass = null;
617
+
618
+ if ( obj3d.isMesh === true ) {
619
+
620
+ prefix = 'Mesh';
621
+ icon = 'ti ti-3d-cube-sphere';
622
+ editorClass = MeshEditor;
623
+
624
+ } else if ( obj3d.isPoints === true ) {
625
+
626
+ prefix = 'Points';
627
+ icon = 'ti ti-border-none';
628
+ editorClass = PointsEditor;
629
+
630
+ }
631
+
632
+ const button = new ButtonInput( `${prefix} - ${obj3d.name}` );
633
+ button.setIcon( icon );
634
+ button.addEventListener( 'complete', () => {
635
+
636
+ for ( const node of this.canvas.nodes ) {
637
+
638
+ if ( node.value === obj3d ) {
639
+
640
+ // prevent duplicated node
303
641
 
304
- contextPosition.x = relativeClientX;
305
- contextPosition.y = relativeClientY;
642
+ this.canvas.select( node );
643
+
644
+ return;
645
+
646
+ }
647
+
648
+ }
649
+
650
+ const node = new editorClass( obj3d );
651
+
652
+ this.add( node );
653
+
654
+ this.centralizeNode( node );
655
+
656
+ } );
657
+
658
+ search.add( button );
659
+
660
+ }
661
+
662
+ } );
663
+
664
+ }
306
665
 
307
666
  } );
308
667
 
309
- //**************//
310
- // INPUTS
311
- //**************//
668
+ search.onSubmit( () => {
669
+
670
+ if ( search.currentFiltered !== null ) {
671
+
672
+ search.currentFiltered.button.dispatchEvent( new Event( 'complete' ) );
673
+
674
+ }
675
+
676
+ } );
312
677
 
313
- const inputsContext = new ContextMenu();
678
+ this.domElement.append( search.dom );
314
679
 
315
- const sliderInput = new ButtonInput( 'Slider' ).setIcon( 'ti ti-adjustments-horizontal' )
316
- .onClick( () => add( new SliderEditor() ) );
680
+ }
317
681
 
318
- const floatInput = new ButtonInput( 'Float' ).setIcon( 'ti ti-box-multiple-1' )
319
- .onClick( () => add( new FloatEditor() ) );
682
+ _initNodesContext() {
320
683
 
321
- const vector2Input = new ButtonInput( 'Vector 2' ).setIcon( 'ti ti-box-multiple-2' )
322
- .onClick( () => add( new Vector2Editor() ) );
684
+ const context = new ContextMenu( this.domElement );
323
685
 
324
- const vector3Input = new ButtonInput( 'Vector 3' ).setIcon( 'ti ti-box-multiple-3' )
325
- .onClick( () => add( new Vector3Editor() ) );
686
+ let isContext = false;
687
+ const contextPosition = {};
326
688
 
327
- const vector4Input = new ButtonInput( 'Vector 4' ).setIcon( 'ti ti-box-multiple-4' )
328
- .onClick( () => add( new Vector4Editor() ) );
689
+ const add = ( node ) => {
329
690
 
330
- const colorInput = new ButtonInput( 'Color' ).setIcon( 'ti ti-palette' )
331
- .onClick( () => add( new ColorEditor() ) );
691
+ if ( isContext ) {
332
692
 
333
- //const mapInput = new ButtonInput( 'Map' ).setIcon( 'ti ti-photo' );
334
- //const cubeMapInput = new ButtonInput( 'Cube Map' ).setIcon( 'ti ti-box' );
335
- //const integerInput = new ButtonInput( 'Integer' ).setIcon( 'ti ti-list-numbers' );
693
+ node.setPosition(
694
+ Math.round( contextPosition.x ),
695
+ Math.round( contextPosition.y )
696
+ );
336
697
 
337
- inputsContext
338
- .add( sliderInput )
339
- .add( floatInput )
340
- .add( vector2Input )
341
- .add( vector3Input )
342
- .add( vector4Input )
343
- .add( colorInput );
698
+ } else {
344
699
 
345
- //**************//
346
- // MATH
347
- //**************//
700
+ this.centralizeNode( node );
348
701
 
349
- const mathContext = new ContextMenu();
702
+ }
350
703
 
351
- const operatorsNode = new ButtonInput( 'Operator' ).setIcon( 'ti ti-math-symbols' )
352
- .onClick( () => add( new OperatorEditor() ) );
704
+ context.hide();
353
705
 
354
- const normalizeNode = new ButtonInput( 'Normalize' ).setIcon( 'ti ti-fold' )
355
- .onClick( () => add( new NormalizeEditor() ) );
706
+ this.add( node );
356
707
 
357
- const invertNode = new ButtonInput( 'Invert' ).setToolTip( 'Negate' ).setIcon( 'ti ti-flip-vertical' )
358
- .onClick( () => add( new InvertEditor() ) );
708
+ this.canvas.select( node );
359
709
 
360
- const limiterNode = new ButtonInput( 'Limiter' ).setToolTip( 'Min / Max' ).setIcon( 'ti ti-arrow-bar-to-up' )
361
- .onClick( () => add( new LimiterEditor() ) );
710
+ isContext = false;
362
711
 
363
- const dotNode = new ButtonInput( 'Dot Product' ).setIcon( 'ti ti-arrows-up-left' )
364
- .onClick( () => add( new DotEditor() ) );
712
+ };
365
713
 
366
- const powNode = new ButtonInput( 'Power' ).setIcon( 'ti ti-arrow-up-right' )
367
- .onClick( () => add( new PowerEditor() ) );
714
+ context.onContext( () => {
368
715
 
369
- const triNode = new ButtonInput( 'Trigonometry' ).setToolTip( 'Sin / Cos / Tan' ).setIcon( 'ti ti-wave-sine' )
370
- .onClick( () => add( new TrigonometryEditor() ) );
716
+ isContext = true;
371
717
 
372
- mathContext
373
- .add( operatorsNode )
374
- .add( invertNode )
375
- .add( limiterNode )
376
- .add( dotNode )
377
- .add( powNode )
378
- .add( triNode )
379
- .add( normalizeNode );
718
+ const { relativeClientX, relativeClientY } = this.canvas;
719
+
720
+ contextPosition.x = Math.round( relativeClientX );
721
+ contextPosition.y = Math.round( relativeClientY );
722
+
723
+ } );
380
724
 
381
725
  //**************//
382
- // ACCESSORS
726
+ // INPUTS
383
727
  //**************//
384
728
 
385
- const accessorsContext = new ContextMenu();
729
+ const createButtonMenu = ( item ) => {
386
730
 
387
- const uvNode = new ButtonInput( 'UV' ).setIcon( 'ti ti-details' )
388
- .onClick( () => add( new UVEditor() ) );
731
+ const button = new ButtonInput( item.name );
732
+ button.setIcon( `ti ti-${item.icon}` );
389
733
 
390
- const positionNode = new ButtonInput( 'Position' ).setIcon( 'ti ti-hierarchy' )
391
- .onClick( () => add( new PositionEditor() ) );
734
+ let context = null;
392
735
 
393
- const normalNode = new ButtonInput( 'Normal' ).setIcon( 'ti ti-fold-up' )
394
- .onClick( () => add( new NormalEditor() ) );
736
+ if ( item.nodeClass ) {
395
737
 
396
- accessorsContext
397
- .add( uvNode )
398
- .add( positionNode )
399
- .add( normalNode );
738
+ button.onClick( () => add( new item.nodeClass() ) );
400
739
 
401
- //**************//
402
- // PROCEDURAL
403
- //**************//
740
+ }
404
741
 
405
- const proceduralContext = new ContextMenu();
742
+ if ( item.tip ) {
406
743
 
407
- const checkerNode = new ButtonInput( 'Checker' ).setIcon( 'ti ti-border-outer' )
408
- .onClick( () => add( new CheckerEditor() ) );
744
+ button.setToolTip( item.tip );
409
745
 
410
- proceduralContext
411
- .add( checkerNode );
746
+ }
412
747
 
413
- //**************//
414
- // DISPLAY
415
- //**************//
748
+ if ( item.children ) {
416
749
 
417
- const displayContext = new ContextMenu();
750
+ context = new ContextMenu();
418
751
 
419
- const blendNode = new ButtonInput( 'Blend' ).setIcon( 'ti ti-layers-subtract' )
420
- .onClick( () => add( new BlendEditor() ) );
752
+ for ( const subItem of item.children ) {
421
753
 
422
- displayContext
423
- .add( blendNode );
754
+ const buttonMenu = createButtonMenu( subItem );
424
755
 
425
- //**************//
426
- // UTILS
427
- //**************//
756
+ context.add( buttonMenu.button, buttonMenu.context );
757
+
758
+ }
759
+
760
+ }
428
761
 
429
- const utilsContext = new ContextMenu();
762
+ return { button, context };
430
763
 
431
- const timerNode = new ButtonInput( 'Timer' ).setIcon( 'ti ti-clock' )
432
- .onClick( () => add( new TimerEditor() ) );
764
+ };
433
765
 
434
- const oscNode = new ButtonInput( 'Oscillator' ).setIcon( 'ti ti-wave-sine' )
435
- .onClick( () => add( new OscillatorEditor() ) );
766
+ for ( const item of NodeList ) {
436
767
 
437
- utilsContext
438
- .add( timerNode )
439
- .add( oscNode );
768
+ const buttonMenu = createButtonMenu( item );
440
769
 
441
- //**************//
442
- // MAIN
443
- //**************//
770
+ context.add( buttonMenu.button, buttonMenu.context );
444
771
 
445
- context.add( new ButtonInput( 'Inputs' ).setIcon( 'ti ti-forms' ), inputsContext );
446
- context.add( new ButtonInput( 'Accessors' ).setIcon( 'ti ti-vector-triangle' ), accessorsContext );
447
- context.add( new ButtonInput( 'Display' ).setIcon( 'ti ti-brightness' ), displayContext );
448
- context.add( new ButtonInput( 'Math' ).setIcon( 'ti ti-calculator' ), mathContext );
449
- context.add( new ButtonInput( 'Procedural' ).setIcon( 'ti ti-infinity' ), proceduralContext );
450
- context.add( new ButtonInput( 'Utils' ).setIcon( 'ti ti-apps' ), utilsContext );
772
+ }
451
773
 
452
774
  this.nodesContext = context;
453
775