super-three 0.137.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 (703) hide show
  1. package/README.md +23 -25
  2. package/build/three.cjs +3721 -4964
  3. package/build/three.js +3723 -4966
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +5705 -7216
  6. package/examples/js/animation/CCDIKSolver.js +3 -2
  7. package/examples/js/animation/MMDPhysics.js +2 -2
  8. package/examples/js/controls/ArcballControls.js +3 -1
  9. package/examples/js/controls/PointerLockControls.js +3 -2
  10. package/examples/js/controls/TrackballControls.js +1 -4
  11. package/examples/js/controls/TransformControls.js +5 -6
  12. package/examples/js/controls/experimental/CameraControls.js +2 -2
  13. package/examples/js/csm/CSMFrustum.js +1 -1
  14. package/examples/js/csm/CSMShader.js +51 -35
  15. package/examples/js/curves/CurveExtras.js +14 -18
  16. package/examples/js/effects/AnaglyphEffect.js +7 -4
  17. package/examples/js/effects/AsciiEffect.js +10 -29
  18. package/examples/js/exporters/ColladaExporter.js +29 -7
  19. package/examples/js/exporters/EXRExporter.js +458 -0
  20. package/examples/js/exporters/GLTFExporter.js +213 -128
  21. package/examples/js/exporters/OBJExporter.js +12 -18
  22. package/examples/js/exporters/PLYExporter.js +15 -20
  23. package/examples/js/exporters/USDZExporter.js +13 -0
  24. package/examples/js/geometries/DecalGeometry.js +0 -7
  25. package/examples/js/geometries/LightningStrike.js +2 -2
  26. package/examples/js/geometries/ParametricGeometries.js +3 -3
  27. package/examples/js/helpers/OctreeHelper.js +74 -0
  28. package/examples/js/helpers/VertexNormalsHelper.js +4 -23
  29. package/examples/js/helpers/VertexTangentsHelper.js +3 -13
  30. package/examples/js/helpers/ViewHelper.js +266 -0
  31. package/examples/js/interactive/HTMLMesh.js +235 -40
  32. package/examples/js/interactive/SelectionHelper.js +1 -1
  33. package/examples/js/libs/opentype.min.js +1 -118
  34. package/examples/js/lines/Line2.js +1 -2
  35. package/examples/js/lines/LineGeometry.js +10 -21
  36. package/examples/js/lines/LineMaterial.js +2 -3
  37. package/examples/js/lines/LineSegments2.js +214 -140
  38. package/examples/js/lines/LineSegmentsGeometry.js +3 -14
  39. package/examples/js/lines/Wireframe.js +2 -3
  40. package/examples/js/lines/WireframeGeometry2.js +1 -2
  41. package/examples/js/loaders/3MFLoader.js +21 -17
  42. package/examples/js/loaders/AMFLoader.js +1 -1
  43. package/examples/js/loaders/ColladaLoader.js +33 -12
  44. package/examples/js/loaders/DDSLoader.js +23 -30
  45. package/examples/js/loaders/EXRLoader.js +269 -266
  46. package/examples/js/loaders/FBXLoader.js +11 -0
  47. package/examples/js/loaders/FontLoader.js +1 -2
  48. package/examples/js/loaders/GCodeLoader.js +0 -1
  49. package/examples/js/loaders/GLTFLoader.js +249 -60
  50. package/examples/js/loaders/KMZLoader.js +1 -1
  51. package/examples/js/loaders/KTX2Loader.js +1 -9
  52. package/examples/js/loaders/LDrawLoader.js +3 -11
  53. package/examples/js/loaders/LUT3dlLoader.js +1 -1
  54. package/examples/js/loaders/LUTCubeLoader.js +1 -1
  55. package/examples/js/loaders/LWOLoader.js +4 -2
  56. package/examples/js/loaders/LogLuvLoader.js +1 -2
  57. package/examples/js/loaders/MMDLoader.js +18 -4
  58. package/examples/js/loaders/NRRDLoader.js +1 -1
  59. package/examples/js/loaders/OBJLoader.js +9 -5
  60. package/examples/js/loaders/PCDLoader.js +22 -13
  61. package/examples/js/loaders/PDBLoader.js +11 -11
  62. package/examples/js/loaders/PLYLoader.js +5 -1
  63. package/examples/js/loaders/RGBELoader.js +3 -11
  64. package/examples/js/loaders/RGBMLoader.js +12 -15
  65. package/examples/js/loaders/SVGLoader.js +16 -9
  66. package/examples/js/loaders/VOXLoader.js +3 -4
  67. package/examples/js/loaders/VTKLoader.js +260 -295
  68. package/examples/js/loaders/lwo/LWO2Parser.js +4 -4
  69. package/examples/js/loaders/lwo/LWO3Parser.js +4 -4
  70. package/examples/js/math/ConvexHull.js +6 -15
  71. package/examples/js/math/Lut.js +27 -26
  72. package/examples/js/misc/MorphAnimMesh.js +2 -2
  73. package/examples/js/misc/ProgressiveLightMap.js +1 -1
  74. package/examples/js/misc/Volume.js +37 -46
  75. package/examples/js/misc/VolumeSlice.js +21 -21
  76. package/examples/js/modifiers/EdgeSplitModifier.js +0 -7
  77. package/examples/js/modifiers/SimplifyModifier.js +1 -8
  78. package/examples/js/modifiers/TessellateModifier.js +0 -7
  79. package/examples/js/objects/Lensflare.js +2 -2
  80. package/examples/js/objects/LightningStorm.js +4 -5
  81. package/examples/js/objects/MarchingCubes.js +6 -11
  82. package/examples/js/objects/Reflector.js +10 -4
  83. package/examples/js/objects/ReflectorForSSRPass.js +1 -1
  84. package/examples/js/objects/Refractor.js +10 -4
  85. package/examples/js/objects/ShadowMesh.js +1 -2
  86. package/examples/js/objects/Sky.js +1 -1
  87. package/examples/js/objects/Water.js +1 -2
  88. package/examples/js/objects/Water2.js +1 -1
  89. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +6 -10
  90. package/examples/js/postprocessing/AfterimagePass.js +2 -6
  91. package/examples/js/postprocessing/BloomPass.js +50 -19
  92. package/examples/js/postprocessing/DotScreenPass.js +1 -1
  93. package/examples/js/postprocessing/EffectComposer.js +1 -6
  94. package/examples/js/postprocessing/LUTPass.js +2 -2
  95. package/examples/js/postprocessing/OutlinePass.js +7 -12
  96. package/examples/js/postprocessing/SAOPass.js +2 -7
  97. package/examples/js/postprocessing/SSAARenderPass.js +1 -6
  98. package/examples/js/postprocessing/SSRPass.js +3 -8
  99. package/examples/js/postprocessing/TAARenderPass.js +4 -4
  100. package/examples/js/postprocessing/UnrealBloomPass.js +3 -12
  101. package/examples/js/renderers/CSS2DRenderer.js +20 -25
  102. package/examples/js/renderers/CSS3DRenderer.js +6 -7
  103. package/examples/js/renderers/Projector.js +97 -124
  104. package/examples/js/renderers/SVGRenderer.js +3 -4
  105. package/examples/js/shaders/BlendShader.js +2 -1
  106. package/examples/js/shaders/CopyShader.js +4 -3
  107. package/examples/js/shaders/FXAAShader.js +239 -1069
  108. package/examples/js/shaders/FreiChenShader.js +1 -1
  109. package/examples/js/shaders/HorizontalBlurShader.js +1 -1
  110. package/examples/js/shaders/HorizontalTiltShiftShader.js +1 -1
  111. package/examples/js/shaders/SSRShader.js +3 -3
  112. package/examples/js/shaders/ToneMapShader.js +1 -1
  113. package/examples/js/utils/BufferGeometryUtils.js +282 -22
  114. package/examples/js/utils/GPUStatsPanel.js +1 -1
  115. package/examples/js/utils/LDrawUtils.js +6 -6
  116. package/examples/js/utils/SceneUtils.js +59 -0
  117. package/examples/js/utils/SkeletonUtils.js +1 -1
  118. package/examples/js/utils/UVsDebug.js +23 -33
  119. package/examples/jsm/animation/CCDIKSolver.js +3 -9
  120. package/examples/jsm/animation/MMDPhysics.js +1 -1
  121. package/examples/jsm/capabilities/WebGPU.js +6 -0
  122. package/examples/jsm/controls/ArcballControls.js +3 -1
  123. package/examples/jsm/controls/PointerLockControls.js +4 -2
  124. package/examples/jsm/controls/TrackballControls.js +1 -4
  125. package/examples/jsm/controls/TransformControls.js +6 -6
  126. package/examples/jsm/controls/experimental/CameraControls.js +2 -2
  127. package/examples/jsm/csm/CSMFrustum.js +1 -1
  128. package/examples/jsm/csm/CSMShader.js +51 -35
  129. package/examples/jsm/curves/CurveExtras.js +15 -17
  130. package/examples/jsm/effects/AnaglyphEffect.js +4 -4
  131. package/examples/jsm/effects/AsciiEffect.js +9 -22
  132. package/examples/jsm/exporters/ColladaExporter.js +31 -6
  133. package/examples/jsm/exporters/EXRExporter.js +507 -0
  134. package/examples/jsm/exporters/GLTFExporter.js +231 -125
  135. package/examples/jsm/exporters/KTX2Exporter.js +281 -0
  136. package/examples/jsm/exporters/OBJExporter.js +11 -18
  137. package/examples/jsm/exporters/PLYExporter.js +23 -21
  138. package/examples/jsm/exporters/USDZExporter.js +12 -0
  139. package/examples/jsm/geometries/DecalGeometry.js +0 -7
  140. package/examples/jsm/geometries/LightningStrike.js +2 -2
  141. package/examples/jsm/geometries/ParametricGeometries.js +3 -3
  142. package/examples/jsm/helpers/OctreeHelper.js +58 -0
  143. package/examples/jsm/helpers/VertexNormalsHelper.js +4 -25
  144. package/examples/jsm/helpers/VertexTangentsHelper.js +3 -15
  145. package/examples/jsm/helpers/ViewHelper.js +295 -0
  146. package/examples/jsm/interactive/HTMLMesh.js +252 -34
  147. package/examples/jsm/interactive/SelectionHelper.js +1 -1
  148. package/examples/jsm/libs/flow.module.js +30 -27
  149. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  150. package/examples/jsm/libs/mikktspace.module.js +128 -0
  151. package/examples/jsm/libs/opentype.module.js +14568 -0
  152. package/examples/jsm/lines/Line2.js +2 -2
  153. package/examples/jsm/lines/LineGeometry.js +11 -19
  154. package/examples/jsm/lines/LineMaterial.js +3 -3
  155. package/examples/jsm/lines/LineSegments2.js +210 -145
  156. package/examples/jsm/lines/LineSegmentsGeometry.js +3 -12
  157. package/examples/jsm/lines/Wireframe.js +3 -3
  158. package/examples/jsm/lines/WireframeGeometry2.js +2 -2
  159. package/examples/jsm/loaders/3DMLoader.js +3 -2
  160. package/examples/jsm/loaders/3MFLoader.js +21 -17
  161. package/examples/jsm/loaders/AMFLoader.js +1 -1
  162. package/examples/jsm/loaders/ColladaLoader.js +40 -12
  163. package/examples/jsm/loaders/DDSLoader.js +21 -28
  164. package/examples/jsm/loaders/EXRLoader.js +268 -265
  165. package/examples/jsm/loaders/FBXLoader.js +11 -0
  166. package/examples/jsm/loaders/FontLoader.js +2 -2
  167. package/examples/jsm/loaders/GCodeLoader.js +0 -1
  168. package/examples/jsm/loaders/GLTFLoader.js +263 -66
  169. package/examples/jsm/loaders/KMZLoader.js +1 -1
  170. package/examples/jsm/loaders/KTX2Loader.js +1 -10
  171. package/examples/jsm/loaders/LDrawLoader.js +4 -11
  172. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  173. package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
  174. package/examples/jsm/loaders/LWOLoader.js +5 -3
  175. package/examples/jsm/loaders/LogLuvLoader.js +2 -2
  176. package/examples/jsm/loaders/MMDLoader.js +21 -3
  177. package/examples/jsm/loaders/NRRDLoader.js +1 -2
  178. package/examples/jsm/loaders/OBJLoader.js +11 -7
  179. package/examples/jsm/loaders/PCDLoader.js +23 -15
  180. package/examples/jsm/loaders/PDBLoader.js +11 -11
  181. package/examples/jsm/loaders/PLYLoader.js +10 -2
  182. package/examples/jsm/loaders/RGBELoader.js +4 -12
  183. package/examples/jsm/loaders/RGBMLoader.js +14 -11
  184. package/examples/jsm/loaders/SVGLoader.js +17 -9
  185. package/examples/jsm/loaders/TTFLoader.js +1 -1
  186. package/examples/jsm/loaders/VOXLoader.js +5 -5
  187. package/examples/jsm/loaders/VTKLoader.js +256 -284
  188. package/examples/jsm/loaders/ifc/web-ifc-api.js +9 -8
  189. package/examples/jsm/loaders/lwo/LWO2Parser.js +4 -4
  190. package/examples/jsm/loaders/lwo/LWO3Parser.js +4 -4
  191. package/examples/jsm/math/ConvexHull.js +6 -15
  192. package/examples/jsm/math/Lut.js +35 -25
  193. package/examples/jsm/misc/MorphAnimMesh.js +2 -2
  194. package/examples/jsm/misc/ProgressiveLightMap.js +1 -1
  195. package/examples/jsm/misc/Volume.js +37 -44
  196. package/examples/jsm/misc/VolumeSlice.js +21 -21
  197. package/examples/jsm/modifiers/EdgeSplitModifier.js +0 -7
  198. package/examples/jsm/modifiers/SimplifyModifier.js +1 -8
  199. package/examples/jsm/modifiers/TessellateModifier.js +0 -7
  200. package/examples/jsm/node-editor/NodeEditor.js +78 -9
  201. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +14 -0
  202. package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
  203. package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
  204. package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
  205. package/examples/jsm/node-editor/core/BaseNode.js +17 -11
  206. package/examples/jsm/node-editor/core/DataFile.js +59 -0
  207. package/examples/jsm/node-editor/core/FileEditor.js +20 -0
  208. package/examples/jsm/node-editor/core/FileURLEditor.js +29 -0
  209. package/examples/jsm/node-editor/display/BlendEditor.js +3 -3
  210. package/examples/jsm/node-editor/display/NormalMapEditor.js +49 -0
  211. package/examples/jsm/node-editor/examples/matcap.json +1 -0
  212. package/examples/jsm/node-editor/inputs/ColorEditor.js +7 -6
  213. package/examples/jsm/node-editor/inputs/FloatEditor.js +2 -2
  214. package/examples/jsm/node-editor/inputs/SliderEditor.js +2 -2
  215. package/examples/jsm/node-editor/inputs/TextureEditor.js +155 -0
  216. package/examples/jsm/node-editor/inputs/Vector2Editor.js +3 -2
  217. package/examples/jsm/node-editor/inputs/Vector3Editor.js +3 -2
  218. package/examples/jsm/node-editor/inputs/Vector4Editor.js +4 -3
  219. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +3 -3
  220. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +16 -11
  221. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +15 -5
  222. package/examples/jsm/node-editor/math/AngleEditor.js +3 -2
  223. package/examples/jsm/node-editor/math/DotEditor.js +2 -2
  224. package/examples/jsm/node-editor/math/InvertEditor.js +4 -4
  225. package/examples/jsm/node-editor/math/LimiterEditor.js +22 -9
  226. package/examples/jsm/node-editor/math/NormalizeEditor.js +3 -2
  227. package/examples/jsm/node-editor/math/OperatorEditor.js +20 -8
  228. package/examples/jsm/node-editor/math/PowerEditor.js +17 -8
  229. package/examples/jsm/node-editor/math/TrigonometryEditor.js +3 -2
  230. package/examples/jsm/node-editor/procedural/CheckerEditor.js +4 -4
  231. package/examples/jsm/node-editor/utils/JoinEditor.js +2 -2
  232. package/examples/jsm/node-editor/utils/OscillatorEditor.js +2 -2
  233. package/examples/jsm/node-editor/utils/PreviewEditor.js +166 -0
  234. package/examples/jsm/node-editor/utils/SplitEditor.js +2 -2
  235. package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
  236. package/examples/jsm/nodes/Nodes.js +283 -94
  237. package/examples/jsm/nodes/accessors/BufferNode.js +24 -0
  238. package/examples/jsm/nodes/accessors/CameraNode.js +27 -196
  239. package/examples/jsm/nodes/accessors/CubeTextureNode.js +103 -0
  240. package/examples/jsm/nodes/accessors/InstanceNode.js +58 -0
  241. package/examples/jsm/{renderers/nodes → nodes}/accessors/MaterialNode.js +49 -11
  242. package/examples/jsm/{renderers/nodes → nodes}/accessors/MaterialReferenceNode.js +0 -0
  243. package/examples/jsm/{renderers/nodes → nodes}/accessors/ModelNode.js +8 -0
  244. package/examples/jsm/{renderers/nodes → nodes}/accessors/ModelViewProjectionNode.js +0 -0
  245. package/examples/jsm/nodes/accessors/NormalNode.js +39 -99
  246. package/examples/jsm/{renderers/nodes → nodes}/accessors/Object3DNode.js +34 -17
  247. package/examples/jsm/{renderers/nodes → nodes}/accessors/PointUVNode.js +2 -2
  248. package/examples/jsm/nodes/accessors/PositionNode.js +41 -110
  249. package/examples/jsm/nodes/accessors/ReferenceNode.js +65 -0
  250. package/examples/jsm/nodes/accessors/ReflectNode.js +34 -121
  251. package/examples/jsm/nodes/accessors/SkinningNode.js +102 -0
  252. package/examples/jsm/nodes/accessors/StorageBufferNode.js +21 -0
  253. package/examples/jsm/nodes/accessors/TextureNode.js +100 -0
  254. package/examples/jsm/nodes/accessors/UVNode.js +17 -43
  255. package/examples/jsm/nodes/accessors/UserDataNode.js +23 -0
  256. package/examples/jsm/nodes/core/ArrayUniformNode.js +23 -0
  257. package/examples/jsm/nodes/core/AttributeNode.js +33 -30
  258. package/examples/jsm/{renderers/nodes → nodes}/core/BypassNode.js +2 -2
  259. package/examples/jsm/{renderers/nodes → nodes}/core/CodeNode.js +2 -30
  260. package/examples/jsm/nodes/core/ConstNode.js +10 -106
  261. package/examples/jsm/{renderers/nodes → nodes}/core/ContextNode.js +17 -3
  262. package/examples/jsm/nodes/core/ExpressionNode.js +24 -7
  263. package/examples/jsm/nodes/core/FunctionCallNode.js +26 -67
  264. package/examples/jsm/nodes/core/FunctionNode.js +43 -216
  265. package/examples/jsm/nodes/core/InputNode.js +28 -60
  266. package/examples/jsm/nodes/core/InstanceIndexNode.js +21 -0
  267. package/examples/jsm/nodes/core/Node.js +228 -94
  268. package/examples/jsm/{renderers/nodes → nodes}/core/NodeAttribute.js +2 -2
  269. package/examples/jsm/nodes/core/NodeBuilder.js +388 -560
  270. package/examples/jsm/{renderers/nodes → nodes}/core/NodeCode.js +0 -0
  271. package/examples/jsm/nodes/core/NodeFrame.js +30 -23
  272. package/examples/jsm/{renderers/nodes → nodes}/core/NodeFunction.js +0 -0
  273. package/examples/jsm/{renderers/nodes → nodes}/core/NodeFunctionInput.js +0 -0
  274. package/examples/jsm/{renderers/nodes → nodes}/core/NodeKeywords.js +0 -0
  275. package/examples/jsm/{renderers/nodes → nodes}/core/NodeParser.js +0 -0
  276. package/examples/jsm/nodes/core/NodeUniform.js +8 -6
  277. package/examples/jsm/nodes/core/NodeUtils.js +69 -37
  278. package/examples/jsm/{renderers/nodes → nodes}/core/NodeVar.js +2 -2
  279. package/examples/jsm/{renderers/nodes → nodes}/core/NodeVary.js +2 -2
  280. package/examples/jsm/{renderers/nodes → nodes}/core/PropertyNode.js +0 -0
  281. package/examples/jsm/nodes/core/TempNode.js +20 -112
  282. package/examples/jsm/nodes/core/UniformNode.js +46 -0
  283. package/examples/jsm/nodes/core/VarNode.js +58 -27
  284. package/examples/jsm/{renderers/nodes → nodes}/core/VaryNode.js +0 -0
  285. package/examples/jsm/{renderers/nodes → nodes}/core/constants.js +0 -0
  286. package/examples/jsm/{renderers/nodes → nodes}/display/ColorSpaceNode.js +10 -11
  287. package/examples/jsm/nodes/display/FrontFacingNode.js +21 -0
  288. package/examples/jsm/nodes/display/NormalMapNode.js +86 -0
  289. package/examples/jsm/nodes/display/ToneMappingNode.js +51 -0
  290. package/examples/jsm/nodes/fog/FogNode.js +31 -0
  291. package/examples/jsm/nodes/fog/FogRangeNode.js +27 -0
  292. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +33 -0
  293. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +9 -0
  294. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +27 -0
  295. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +18 -0
  296. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +18 -0
  297. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +18 -0
  298. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +94 -0
  299. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +22 -0
  300. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +12 -0
  301. package/examples/jsm/nodes/functions/material/getRoughness.js +18 -0
  302. package/examples/jsm/nodes/gpgpu/ComputeNode.js +63 -0
  303. package/examples/jsm/nodes/lighting/AONode.js +25 -0
  304. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +37 -0
  305. package/examples/jsm/nodes/lighting/EnvironmentNode.js +65 -0
  306. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +50 -0
  307. package/examples/jsm/nodes/lighting/LightingContextNode.js +75 -0
  308. package/examples/jsm/nodes/lighting/LightingNode.js +19 -0
  309. package/examples/jsm/nodes/lighting/LightsNode.js +120 -0
  310. package/examples/jsm/nodes/lighting/PunctualLightNode.js +68 -0
  311. package/examples/jsm/nodes/loaders/NodeLoader.js +107 -0
  312. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +42 -0
  313. package/examples/jsm/nodes/loaders/NodeObjectLoader.js +70 -0
  314. package/examples/jsm/{renderers/nodes → nodes}/materials/LineBasicNodeMaterial.js +11 -4
  315. package/examples/jsm/nodes/materials/Materials.js +65 -0
  316. package/examples/jsm/{renderers/nodes → nodes}/materials/MeshBasicNodeMaterial.js +13 -4
  317. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +162 -22
  318. package/examples/jsm/nodes/materials/NodeMaterial.js +128 -113
  319. package/examples/jsm/{renderers/nodes → nodes}/materials/PointsNodeMaterial.js +13 -4
  320. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +84 -16
  321. package/examples/jsm/nodes/math/CondNode.js +26 -95
  322. package/examples/jsm/nodes/math/MathNode.js +164 -187
  323. package/examples/jsm/nodes/math/OperatorNode.js +161 -41
  324. package/examples/jsm/{renderers/nodes → nodes}/parsers/GLSLNodeFunction.js +2 -2
  325. package/examples/jsm/{renderers/nodes → nodes}/parsers/GLSLNodeParser.js +0 -0
  326. package/examples/jsm/{renderers/nodes → nodes}/parsers/WGSLNodeFunction.js +20 -5
  327. package/examples/jsm/{renderers/nodes → nodes}/parsers/WGSLNodeParser.js +0 -0
  328. package/examples/jsm/nodes/procedural/CheckerNode.js +16 -57
  329. package/examples/jsm/nodes/shadernode/ShaderNode.js +262 -0
  330. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +274 -0
  331. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +106 -0
  332. package/examples/jsm/{renderers/nodes → nodes}/utils/ArrayElementNode.js +3 -3
  333. package/examples/jsm/{renderers/nodes → nodes}/utils/ConvertNode.js +11 -3
  334. package/examples/jsm/nodes/utils/JoinNode.js +17 -89
  335. package/examples/jsm/nodes/utils/MatcapUVNode.js +25 -0
  336. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +32 -0
  337. package/examples/jsm/{renderers/nodes → nodes}/utils/OscNode.js +18 -2
  338. package/examples/jsm/{renderers/nodes → nodes}/utils/SplitNode.js +16 -0
  339. package/examples/jsm/{renderers/nodes → nodes}/utils/SpriteSheetUVNode.js +3 -3
  340. package/examples/jsm/nodes/utils/TimerNode.js +30 -65
  341. package/examples/jsm/objects/Lensflare.js +2 -2
  342. package/examples/jsm/objects/LightningStorm.js +4 -4
  343. package/examples/jsm/objects/MarchingCubes.js +5 -9
  344. package/examples/jsm/objects/Reflector.js +8 -4
  345. package/examples/jsm/objects/ReflectorForSSRPass.js +2 -2
  346. package/examples/jsm/objects/Refractor.js +8 -4
  347. package/examples/jsm/objects/ShadowMesh.js +2 -2
  348. package/examples/jsm/objects/Sky.js +2 -2
  349. package/examples/jsm/objects/Water.js +2 -2
  350. package/examples/jsm/objects/Water2.js +2 -2
  351. package/examples/jsm/offscreen/jank.js +5 -5
  352. package/examples/jsm/offscreen/offscreen.js +1 -1
  353. package/examples/jsm/offscreen/scene.js +11 -11
  354. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +5 -7
  355. package/examples/jsm/postprocessing/AfterimagePass.js +0 -10
  356. package/examples/jsm/postprocessing/BloomPass.js +48 -20
  357. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  358. package/examples/jsm/postprocessing/EffectComposer.js +1 -9
  359. package/examples/jsm/postprocessing/LUTPass.js +2 -2
  360. package/examples/jsm/postprocessing/OutlinePass.js +7 -11
  361. package/examples/jsm/postprocessing/SAOPass.js +2 -9
  362. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -4
  363. package/examples/jsm/postprocessing/SSRPass.js +3 -9
  364. package/examples/jsm/postprocessing/TAARenderPass.js +4 -4
  365. package/examples/jsm/postprocessing/UnrealBloomPass.js +3 -8
  366. package/examples/jsm/renderers/CSS2DRenderer.js +21 -24
  367. package/examples/jsm/renderers/CSS3DRenderer.js +7 -8
  368. package/examples/jsm/renderers/Projector.js +101 -128
  369. package/examples/jsm/renderers/SVGRenderer.js +4 -4
  370. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +1 -1
  371. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +127 -23
  372. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +14 -3
  373. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +5 -5
  374. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +4 -4
  375. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +16 -10
  376. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +8 -7
  377. package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +43 -0
  378. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +14 -7
  379. package/examples/jsm/renderers/webgpu/WebGPUInfo.js +1 -1
  380. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +0 -6
  381. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +20 -20
  382. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +2 -1
  383. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +66 -0
  384. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -24
  385. package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +14 -14
  386. package/examples/jsm/renderers/webgpu/WebGPUSampler.js +2 -2
  387. package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +5 -8
  388. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +23 -20
  389. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +37 -18
  390. package/examples/jsm/renderers/webgpu/WebGPUUniform.js +14 -14
  391. package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +5 -32
  392. package/examples/jsm/renderers/webgpu/WebGPUUniformsGroup.js +2 -2
  393. package/examples/jsm/renderers/webgpu/constants.js +3 -2
  394. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +276 -284
  395. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeSampledTexture.js +20 -2
  396. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +24 -14
  397. package/examples/jsm/shaders/BlendShader.js +2 -1
  398. package/examples/jsm/shaders/CopyShader.js +4 -3
  399. package/examples/jsm/shaders/FXAAShader.js +219 -1051
  400. package/examples/jsm/shaders/FreiChenShader.js +1 -1
  401. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -1
  402. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +1 -1
  403. package/examples/jsm/shaders/SSRShader.js +3 -3
  404. package/examples/jsm/shaders/ToneMapShader.js +1 -1
  405. package/examples/jsm/utils/BufferGeometryUtils.js +292 -22
  406. package/examples/jsm/utils/GPUStatsPanel.js +1 -1
  407. package/examples/jsm/utils/LDrawUtils.js +6 -6
  408. package/examples/jsm/utils/SceneUtils.js +76 -2
  409. package/examples/jsm/utils/SkeletonUtils.js +1 -1
  410. package/examples/jsm/utils/UVsDebug.js +23 -32
  411. package/examples/jsm/webxr/ARButton.js +14 -4
  412. package/examples/jsm/webxr/OculusHandPointerModel.js +3 -3
  413. package/examples/jsm/webxr/Text2D.js +1 -1
  414. package/examples/jsm/webxr/VRButton.js +15 -1
  415. package/examples/jsm/webxr/XRHandMeshModel.js +3 -7
  416. package/examples/jsm/webxr/XRHandModelFactory.js +3 -0
  417. package/package.json +37 -19
  418. package/src/Three.Legacy.js +41 -1912
  419. package/src/Three.js +6 -3
  420. package/src/animation/AnimationClip.js +1 -1
  421. package/src/animation/AnimationMixer.js +5 -3
  422. package/src/animation/AnimationObjectGroup.js +2 -2
  423. package/src/animation/PropertyBinding.js +8 -18
  424. package/src/audio/PositionalAudio.js +8 -0
  425. package/src/cameras/ArrayCamera.js +2 -3
  426. package/src/cameras/Camera.js +2 -2
  427. package/src/cameras/CubeCamera.js +6 -1
  428. package/src/cameras/OrthographicCamera.js +2 -2
  429. package/src/cameras/PerspectiveCamera.js +2 -2
  430. package/src/constants.js +7 -2
  431. package/src/core/BufferAttribute.js +7 -12
  432. package/src/core/BufferGeometry.js +4 -4
  433. package/src/core/GLBufferAttribute.js +2 -2
  434. package/src/core/InstancedBufferAttribute.js +2 -2
  435. package/src/core/InstancedBufferGeometry.js +2 -2
  436. package/src/core/InstancedInterleavedBuffer.js +2 -2
  437. package/src/core/InterleavedBuffer.js +2 -2
  438. package/src/core/InterleavedBufferAttribute.js +5 -11
  439. package/src/core/Object3D.js +6 -3
  440. package/src/core/Raycaster.js +2 -2
  441. package/src/extras/DataUtils.js +127 -40
  442. package/src/extras/Earcut.js +2 -2
  443. package/src/extras/PMREMGenerator.js +132 -104
  444. package/src/extras/core/CurvePath.js +3 -3
  445. package/src/extras/core/ShapePath.js +5 -6
  446. package/src/extras/curves/ArcCurve.js +2 -2
  447. package/src/extras/curves/CatmullRomCurve3.js +2 -2
  448. package/src/extras/curves/CubicBezierCurve.js +2 -2
  449. package/src/extras/curves/CubicBezierCurve3.js +2 -2
  450. package/src/extras/curves/EllipseCurve.js +2 -2
  451. package/src/extras/curves/LineCurve.js +2 -2
  452. package/src/extras/curves/LineCurve3.js +2 -1
  453. package/src/extras/curves/QuadraticBezierCurve.js +2 -2
  454. package/src/extras/curves/QuadraticBezierCurve3.js +2 -2
  455. package/src/extras/curves/SplineCurve.js +2 -2
  456. package/src/geometries/CapsuleGeometry.js +33 -0
  457. package/src/geometries/ExtrudeGeometry.js +2 -0
  458. package/src/geometries/Geometries.js +1 -0
  459. package/src/geometries/TorusKnotGeometry.js +2 -2
  460. package/src/geometries/WireframeGeometry.js +3 -2
  461. package/src/helpers/BoxHelper.js +2 -2
  462. package/src/helpers/PointLightHelper.js +1 -1
  463. package/src/helpers/SkeletonHelper.js +3 -2
  464. package/src/lights/AmbientLight.js +2 -2
  465. package/src/lights/AmbientLightProbe.js +2 -2
  466. package/src/lights/DirectionalLight.js +2 -2
  467. package/src/lights/DirectionalLightShadow.js +2 -2
  468. package/src/lights/HemisphereLight.js +4 -4
  469. package/src/lights/HemisphereLightProbe.js +2 -2
  470. package/src/lights/Light.js +4 -4
  471. package/src/lights/LightProbe.js +2 -2
  472. package/src/lights/PointLight.js +4 -4
  473. package/src/lights/PointLightShadow.js +2 -2
  474. package/src/lights/RectAreaLight.js +2 -2
  475. package/src/lights/SpotLight.js +4 -4
  476. package/src/lights/SpotLightShadow.js +2 -2
  477. package/src/loaders/FileLoader.js +3 -1
  478. package/src/loaders/ImageBitmapLoader.js +2 -2
  479. package/src/loaders/ImageLoader.js +1 -1
  480. package/src/loaders/LoaderUtils.js +1 -1
  481. package/src/loaders/MaterialLoader.js +8 -3
  482. package/src/loaders/ObjectLoader.js +23 -25
  483. package/src/materials/LineBasicMaterial.js +6 -13
  484. package/src/materials/LineDashedMaterial.js +2 -15
  485. package/src/materials/Material.js +48 -14
  486. package/src/materials/Materials.js +66 -18
  487. package/src/materials/MeshBasicMaterial.js +6 -31
  488. package/src/materials/MeshDepthMaterial.js +2 -22
  489. package/src/materials/MeshDistanceMaterial.js +2 -22
  490. package/src/materials/MeshLambertMaterial.js +6 -34
  491. package/src/materials/MeshMatcapMaterial.js +6 -28
  492. package/src/materials/MeshNormalMaterial.js +2 -26
  493. package/src/materials/MeshPhongMaterial.js +6 -48
  494. package/src/materials/MeshPhysicalMaterial.js +32 -35
  495. package/src/materials/MeshStandardMaterial.js +6 -54
  496. package/src/materials/MeshToonMaterial.js +6 -38
  497. package/src/materials/PointsMaterial.js +6 -15
  498. package/src/materials/RawShaderMaterial.js +2 -2
  499. package/src/materials/ShaderMaterial.js +3 -17
  500. package/src/materials/ShadowMaterial.js +6 -8
  501. package/src/materials/SpriteMaterial.js +6 -12
  502. package/src/math/Box2.js +2 -2
  503. package/src/math/Box3.js +5 -5
  504. package/src/math/Color.js +84 -35
  505. package/src/math/ColorManagement.js +74 -0
  506. package/src/math/Euler.js +16 -14
  507. package/src/math/Interpolant.js +4 -9
  508. package/src/math/MathUtils.js +76 -7
  509. package/src/math/Matrix3.js +2 -2
  510. package/src/math/Matrix4.js +2 -3
  511. package/src/math/Plane.js +2 -2
  512. package/src/math/Quaternion.js +11 -2
  513. package/src/math/Spherical.js +1 -1
  514. package/src/math/SphericalHarmonics3.js +2 -2
  515. package/src/math/Vector2.js +2 -2
  516. package/src/math/Vector3.js +12 -3
  517. package/src/math/Vector4.js +2 -2
  518. package/src/math/interpolants/DiscreteInterpolant.js +1 -1
  519. package/src/objects/Bone.js +2 -2
  520. package/src/objects/Group.js +2 -2
  521. package/src/objects/InstancedMesh.js +4 -4
  522. package/src/objects/Line.js +76 -107
  523. package/src/objects/LineLoop.js +2 -2
  524. package/src/objects/LineSegments.js +15 -23
  525. package/src/objects/Mesh.js +82 -104
  526. package/src/objects/Points.js +32 -54
  527. package/src/objects/SkinnedMesh.js +5 -8
  528. package/src/objects/Sprite.js +4 -4
  529. package/src/renderers/WebGL3DRenderTarget.js +22 -0
  530. package/src/renderers/WebGLArrayRenderTarget.js +22 -0
  531. package/src/renderers/WebGLCubeRenderTarget.js +7 -14
  532. package/src/renderers/WebGLMultipleRenderTargets.js +8 -5
  533. package/src/renderers/WebGLRenderTarget.js +16 -18
  534. package/src/renderers/WebGLRenderer.js +108 -63
  535. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +46 -0
  536. package/src/renderers/shaders/ShaderChunk/common.glsl.js +1 -0
  537. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +12 -13
  538. package/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js +1 -1
  539. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +3 -19
  540. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +107 -0
  541. package/src/renderers/shaders/ShaderChunk/iridescence_pars_fragment.glsl.js +14 -0
  542. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -6
  543. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +25 -0
  544. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +0 -6
  545. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +23 -0
  546. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +43 -5
  547. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +24 -0
  548. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +1 -1
  549. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +7 -7
  550. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +1 -9
  551. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +16 -31
  552. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +1 -1
  553. package/src/renderers/shaders/ShaderChunk.js +6 -0
  554. package/src/renderers/shaders/ShaderLib/background.glsl.js +8 -0
  555. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +1 -0
  556. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +3 -2
  557. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +1 -0
  558. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -0
  559. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +6 -0
  560. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +1 -0
  561. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +10 -0
  562. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +1 -0
  563. package/src/renderers/shaders/ShaderLib/points.glsl.js +1 -0
  564. package/src/renderers/shaders/ShaderLib.js +6 -0
  565. package/src/renderers/shaders/UniformsLib.js +2 -2
  566. package/src/renderers/webgl/WebGLAttributes.js +6 -6
  567. package/src/renderers/webgl/WebGLBackground.js +3 -0
  568. package/src/renderers/webgl/WebGLBindingStates.js +57 -29
  569. package/src/renderers/webgl/WebGLLights.js +0 -1
  570. package/src/renderers/webgl/WebGLMaterials.js +72 -187
  571. package/src/renderers/webgl/WebGLMorphtargets.js +47 -23
  572. package/src/renderers/webgl/WebGLProgram.js +57 -19
  573. package/src/renderers/webgl/WebGLPrograms.js +75 -86
  574. package/src/renderers/webgl/WebGLShaderCache.js +4 -3
  575. package/src/renderers/webgl/WebGLShadowMap.js +6 -8
  576. package/src/renderers/webgl/WebGLTextures.js +567 -380
  577. package/src/renderers/webgl/WebGLUniforms.js +79 -80
  578. package/src/renderers/webgl/WebGLUtils.js +12 -1
  579. package/src/renderers/webxr/WebXRManager.js +60 -45
  580. package/src/scenes/Fog.js +2 -2
  581. package/src/scenes/FogExp2.js +2 -2
  582. package/src/scenes/Scene.js +2 -2
  583. package/src/textures/CanvasTexture.js +2 -2
  584. package/src/textures/CompressedTexture.js +2 -2
  585. package/src/textures/CubeTexture.js +2 -2
  586. package/src/textures/{DataTexture3D.js → Data3DTexture.js} +4 -4
  587. package/src/textures/{DataTexture2DArray.js → DataArrayTexture.js} +4 -4
  588. package/src/textures/DataTexture.js +2 -5
  589. package/src/textures/DepthTexture.js +5 -5
  590. package/src/textures/FramebufferTexture.js +2 -2
  591. package/src/textures/Source.js +123 -0
  592. package/src/textures/Texture.js +27 -97
  593. package/src/textures/VideoTexture.js +2 -2
  594. package/examples/js/csm/Frustum.js +0 -133
  595. package/examples/js/deprecated/Geometry.js +0 -1656
  596. package/examples/js/loaders/VRMLoader.js +0 -72
  597. package/examples/js/objects/ReflectorRTT.js +0 -16
  598. package/examples/js/postprocessing/SSRrPass.js +0 -494
  599. package/examples/js/shaders/SSRrShader.js +0 -336
  600. package/examples/jsm/deprecated/Geometry.js +0 -1869
  601. package/examples/jsm/libs/opentype.module.min.js +0 -119
  602. package/examples/jsm/loaders/NodeMaterialLoader.js +0 -263
  603. package/examples/jsm/loaders/VRMLoader.js +0 -78
  604. package/examples/jsm/nodes/accessors/ColorsNode.js +0 -56
  605. package/examples/jsm/nodes/accessors/LightNode.js +0 -60
  606. package/examples/jsm/nodes/accessors/ResolutionNode.js +0 -64
  607. package/examples/jsm/nodes/accessors/ScreenUVNode.js +0 -64
  608. package/examples/jsm/nodes/core/NodeLib.js +0 -64
  609. package/examples/jsm/nodes/core/StructNode.js +0 -106
  610. package/examples/jsm/nodes/effects/BlurNode.js +0 -171
  611. package/examples/jsm/nodes/effects/ColorAdjustmentNode.js +0 -140
  612. package/examples/jsm/nodes/effects/LuminanceNode.js +0 -75
  613. package/examples/jsm/nodes/inputs/BoolNode.js +0 -51
  614. package/examples/jsm/nodes/inputs/ColorNode.js +0 -58
  615. package/examples/jsm/nodes/inputs/CubeTextureNode.js +0 -108
  616. package/examples/jsm/nodes/inputs/FloatNode.js +0 -51
  617. package/examples/jsm/nodes/inputs/IntNode.js +0 -51
  618. package/examples/jsm/nodes/inputs/Matrix3Node.js +0 -63
  619. package/examples/jsm/nodes/inputs/Matrix4Node.js +0 -63
  620. package/examples/jsm/nodes/inputs/PropertyNode.js +0 -47
  621. package/examples/jsm/nodes/inputs/RTTNode.js +0 -157
  622. package/examples/jsm/nodes/inputs/ReflectorNode.js +0 -90
  623. package/examples/jsm/nodes/inputs/ScreenNode.js +0 -28
  624. package/examples/jsm/nodes/inputs/TextureNode.js +0 -116
  625. package/examples/jsm/nodes/inputs/Vector2Node.js +0 -57
  626. package/examples/jsm/nodes/inputs/Vector3Node.js +0 -58
  627. package/examples/jsm/nodes/inputs/Vector4Node.js +0 -59
  628. package/examples/jsm/nodes/materials/BasicNodeMaterial.js +0 -26
  629. package/examples/jsm/nodes/materials/PhongNodeMaterial.js +0 -36
  630. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +0 -40
  631. package/examples/jsm/nodes/materials/nodes/BasicNode.js +0 -154
  632. package/examples/jsm/nodes/materials/nodes/MeshStandardNode.js +0 -116
  633. package/examples/jsm/nodes/materials/nodes/PhongNode.js +0 -409
  634. package/examples/jsm/nodes/materials/nodes/RawNode.js +0 -62
  635. package/examples/jsm/nodes/materials/nodes/SpriteNode.js +0 -236
  636. package/examples/jsm/nodes/materials/nodes/StandardNode.js +0 -609
  637. package/examples/jsm/nodes/misc/BumpMapNode.js +0 -163
  638. package/examples/jsm/nodes/misc/NormalMapNode.js +0 -138
  639. package/examples/jsm/nodes/misc/TextureCubeNode.js +0 -86
  640. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +0 -280
  641. package/examples/jsm/nodes/postprocessing/NodePass.js +0 -93
  642. package/examples/jsm/nodes/postprocessing/NodePostProcessing.js +0 -148
  643. package/examples/jsm/nodes/procedural/Fractal3DNode.js +0 -104
  644. package/examples/jsm/nodes/procedural/Noise2DNode.js +0 -149
  645. package/examples/jsm/nodes/procedural/Noise3DNode.js +0 -141
  646. package/examples/jsm/nodes/utils/BypassNode.js +0 -85
  647. package/examples/jsm/nodes/utils/ColorSpaceNode.js +0 -145
  648. package/examples/jsm/nodes/utils/MaxMIPLevelNode.js +0 -56
  649. package/examples/jsm/nodes/utils/RemapNode.js +0 -155
  650. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -101
  651. package/examples/jsm/nodes/utils/SubSlotNode.js +0 -77
  652. package/examples/jsm/nodes/utils/SwitchNode.js +0 -103
  653. package/examples/jsm/nodes/utils/UVTransformNode.js +0 -66
  654. package/examples/jsm/nodes/utils/VelocityNode.js +0 -170
  655. package/examples/jsm/objects/ReflectorRTT.js +0 -15
  656. package/examples/jsm/postprocessing/SSRrPass.js +0 -579
  657. package/examples/jsm/renderers/nodes/Nodes.js +0 -166
  658. package/examples/jsm/renderers/nodes/ShaderNode.js +0 -373
  659. package/examples/jsm/renderers/nodes/accessors/CameraNode.js +0 -68
  660. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +0 -63
  661. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +0 -67
  662. package/examples/jsm/renderers/nodes/accessors/ReferenceNode.js +0 -91
  663. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +0 -107
  664. package/examples/jsm/renderers/nodes/accessors/UVNode.js +0 -25
  665. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +0 -23
  666. package/examples/jsm/renderers/nodes/core/AttributeNode.js +0 -54
  667. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +0 -32
  668. package/examples/jsm/renderers/nodes/core/FunctionCallNode.js +0 -67
  669. package/examples/jsm/renderers/nodes/core/FunctionNode.js +0 -87
  670. package/examples/jsm/renderers/nodes/core/InputNode.js +0 -66
  671. package/examples/jsm/renderers/nodes/core/Node.js +0 -104
  672. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +0 -634
  673. package/examples/jsm/renderers/nodes/core/NodeFrame.js +0 -59
  674. package/examples/jsm/renderers/nodes/core/NodeUniform.js +0 -28
  675. package/examples/jsm/renderers/nodes/core/TempNode.js +0 -43
  676. package/examples/jsm/renderers/nodes/core/VarNode.js +0 -51
  677. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +0 -87
  678. package/examples/jsm/renderers/nodes/functions/BSDFs.js +0 -122
  679. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +0 -27
  680. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +0 -25
  681. package/examples/jsm/renderers/nodes/inputs/ColorNode.js +0 -18
  682. package/examples/jsm/renderers/nodes/inputs/FloatNode.js +0 -17
  683. package/examples/jsm/renderers/nodes/inputs/IntNode.js +0 -17
  684. package/examples/jsm/renderers/nodes/inputs/Matrix3Node.js +0 -18
  685. package/examples/jsm/renderers/nodes/inputs/Matrix4Node.js +0 -18
  686. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +0 -74
  687. package/examples/jsm/renderers/nodes/inputs/Vector2Node.js +0 -18
  688. package/examples/jsm/renderers/nodes/inputs/Vector3Node.js +0 -18
  689. package/examples/jsm/renderers/nodes/inputs/Vector4Node.js +0 -18
  690. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +0 -59
  691. package/examples/jsm/renderers/nodes/lights/LightNode.js +0 -79
  692. package/examples/jsm/renderers/nodes/lights/LightsNode.js +0 -44
  693. package/examples/jsm/renderers/nodes/materials/Materials.js +0 -11
  694. package/examples/jsm/renderers/nodes/materials/MeshStandardNodeMaterial.js +0 -63
  695. package/examples/jsm/renderers/nodes/math/CondNode.js +0 -60
  696. package/examples/jsm/renderers/nodes/math/MathNode.js +0 -242
  697. package/examples/jsm/renderers/nodes/math/OperatorNode.js +0 -174
  698. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +0 -36
  699. package/examples/jsm/renderers/nodes/utils/JoinNode.js +0 -42
  700. package/examples/jsm/renderers/nodes/utils/TimerNode.js +0 -47
  701. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +0 -20
  702. package/examples/jsm/shaders/SSRrShader.js +0 -307
  703. package/src/renderers/WebGLMultisampleRenderTarget.js +0 -33
@@ -1,281 +1,258 @@
1
- import { TempNode } from '../core/TempNode.js';
1
+ import TempNode from '../core/TempNode.js';
2
+ import ExpressionNode from '../core/ExpressionNode.js';
3
+ import JoinNode from '../utils/JoinNode.js';
4
+ import SplitNode from '../utils/SplitNode.js';
5
+ import OperatorNode from './OperatorNode.js';
2
6
 
3
7
  class MathNode extends TempNode {
4
8
 
5
- constructor( a, bOrMethod, cOrMethod, method ) {
9
+ // 1 input
10
+
11
+ static RADIANS = 'radians';
12
+ static DEGREES = 'degrees';
13
+ static EXP = 'exp';
14
+ static EXP2 = 'exp2';
15
+ static LOG = 'log';
16
+ static LOG2 = 'log2';
17
+ static SQRT = 'sqrt';
18
+ static INVERSE_SQRT = 'inversesqrt';
19
+ static FLOOR = 'floor';
20
+ static CEIL = 'ceil';
21
+ static NORMALIZE = 'normalize';
22
+ static FRACT = 'fract';
23
+ static SIN = 'sin';
24
+ static COS = 'cos';
25
+ static TAN = 'tan';
26
+ static ASIN = 'asin';
27
+ static ACOS = 'acos';
28
+ static ATAN = 'atan';
29
+ static ABS = 'abs';
30
+ static SIGN = 'sign';
31
+ static LENGTH = 'length';
32
+ static NEGATE = 'negate';
33
+ static INVERT = 'invert';
34
+ static DFDX = 'dFdx';
35
+ static DFDY = 'dFdy';
36
+ static SATURATE = 'saturate';
37
+ static ROUND = 'round';
38
+
39
+ // 2 inputs
40
+
41
+ static MIN = 'min';
42
+ static MAX = 'max';
43
+ static MOD = 'mod';
44
+ static STEP = 'step';
45
+ static REFLECT = 'reflect';
46
+ static DISTANCE = 'distance';
47
+ static DOT = 'dot';
48
+ static CROSS = 'cross';
49
+ static POW = 'pow';
50
+ static TRANSFORM_DIRECTION = 'transformDirection';
51
+
52
+ // 3 inputs
53
+
54
+ static MIX = 'mix';
55
+ static CLAMP = 'clamp';
56
+ static REFRACT = 'refract';
57
+ static SMOOTHSTEP = 'smoothstep';
58
+ static FACEFORWARD = 'faceforward';
59
+
60
+ constructor( method, aNode, bNode = null, cNode = null ) {
6
61
 
7
62
  super();
8
63
 
9
- this.a = a;
10
- typeof bOrMethod !== 'string' ? this.b = bOrMethod : method = bOrMethod;
11
- typeof cOrMethod !== 'string' ? this.c = cOrMethod : method = cOrMethod;
12
-
13
64
  this.method = method;
14
65
 
66
+ this.aNode = aNode;
67
+ this.bNode = bNode;
68
+ this.cNode = cNode;
69
+
15
70
  }
16
71
 
17
- getNumInputs( /*builder*/ ) {
72
+ getInputType( builder ) {
18
73
 
19
- switch ( this.method ) {
74
+ const aType = this.aNode.getNodeType( builder );
75
+ const bType = this.bNode ? this.bNode.getNodeType( builder ) : null;
76
+ const cType = this.cNode ? this.cNode.getNodeType( builder ) : null;
20
77
 
21
- // variable
78
+ const aLen = builder.isMatrix( aType ) ? 0 : builder.getTypeLength( aType );
79
+ const bLen = builder.isMatrix( bType ) ? 0 : builder.getTypeLength( bType );
80
+ const cLen = builder.isMatrix( cType ) ? 0 : builder.getTypeLength( cType );
22
81
 
23
- case MathNode.ARCTAN:
82
+ if ( aLen > bLen && aLen > cLen ) {
24
83
 
25
- return this.b ? 2 : 1;
84
+ return aType;
26
85
 
27
- // 3
86
+ } else if ( bLen > cLen ) {
28
87
 
29
- case MathNode.MIX:
30
- case MathNode.CLAMP:
31
- case MathNode.REFRACT:
32
- case MathNode.SMOOTHSTEP:
33
- case MathNode.FACEFORWARD:
88
+ return bType;
34
89
 
35
- return 3;
90
+ } else if ( cLen > aLen ) {
36
91
 
37
- // 2
92
+ return cType;
38
93
 
39
- case MathNode.MIN:
40
- case MathNode.MAX:
41
- case MathNode.MOD:
42
- case MathNode.STEP:
43
- case MathNode.REFLECT:
44
- case MathNode.DISTANCE:
45
- case MathNode.DOT:
46
- case MathNode.CROSS:
47
- case MathNode.POW:
94
+ }
48
95
 
49
- return 2;
96
+ return aType;
50
97
 
51
- // 1
98
+ }
52
99
 
53
- default:
100
+ getNodeType( builder ) {
54
101
 
55
- return 1;
102
+ const method = this.method;
56
103
 
57
- }
104
+ if ( method === MathNode.LENGTH || method === MathNode.DISTANCE || method === MathNode.DOT ) {
58
105
 
59
- }
106
+ return 'float';
60
107
 
61
- getInputType( builder ) {
62
-
63
- const a = builder.getTypeLength( this.a.getType( builder ) );
64
- const b = this.b ? builder.getTypeLength( this.b.getType( builder ) ) : 0;
65
- const c = this.c ? builder.getTypeLength( this.c.getType( builder ) ) : 0;
66
-
67
- if ( a > b && a > c ) {
108
+ } else if ( method === MathNode.CROSS ) {
68
109
 
69
- return this.a.getType( builder );
110
+ return 'vec3';
70
111
 
71
- } else if ( b > c ) {
112
+ } else {
72
113
 
73
- return this.b.getType( builder );
114
+ return this.getInputType( builder );
74
115
 
75
116
  }
76
117
 
77
- return this.c.getType( builder );
78
-
79
118
  }
80
119
 
81
- getType( builder ) {
120
+ generate( builder, output ) {
82
121
 
83
- switch ( this.method ) {
122
+ const method = this.method;
84
123
 
85
- case MathNode.LENGTH:
86
- case MathNode.DISTANCE:
87
- case MathNode.DOT:
124
+ const type = this.getNodeType( builder );
125
+ const inputType = this.getInputType( builder );
88
126
 
89
- return 'f';
127
+ const a = this.aNode;
128
+ const b = this.bNode;
129
+ const c = this.cNode;
90
130
 
91
- case MathNode.CROSS:
131
+ const isWebGL = builder.renderer.isWebGLRenderer === true;
92
132
 
93
- return 'v3';
133
+ if ( isWebGL && ( method === MathNode.DFDX || method === MathNode.DFDY ) && output === 'vec3' ) {
94
134
 
95
- }
135
+ // Workaround for Adreno 3XX dFd*( vec3 ) bug. See #9988
96
136
 
97
- return this.getInputType( builder );
137
+ return new JoinNode( [
138
+ new MathNode( method, new SplitNode( a, 'x' ) ),
139
+ new MathNode( method, new SplitNode( a, 'y' ) ),
140
+ new MathNode( method, new SplitNode( a, 'z' ) )
141
+ ] ).build( builder );
98
142
 
99
- }
143
+ } else if ( method === MathNode.TRANSFORM_DIRECTION ) {
100
144
 
101
- generate( builder, output ) {
145
+ // dir can be either a direction vector or a normal vector
146
+ // upper-left 3x3 of matrix is assumed to be orthogonal
102
147
 
103
- let a, b, c;
104
- const al = this.a ? builder.getTypeLength( this.a.getType( builder ) ) : 0,
105
- bl = this.b ? builder.getTypeLength( this.b.getType( builder ) ) : 0,
106
- cl = this.c ? builder.getTypeLength( this.c.getType( builder ) ) : 0,
107
- inputType = this.getInputType( builder ),
108
- nodeType = this.getType( builder );
148
+ let tA = a;
149
+ let tB = b;
109
150
 
110
- switch ( this.method ) {
151
+ if ( builder.isMatrix( tA.getNodeType( builder ) ) ) {
111
152
 
112
- // 1 input
153
+ tB = new ExpressionNode( `${ builder.getType( 'vec4' ) }( ${ tB.build( builder, 'vec3' ) }, 0.0 )`, 'vec4' );
113
154
 
114
- case MathNode.NEGATE:
155
+ } else {
115
156
 
116
- return builder.format( '( -' + this.a.build( builder, inputType ) + ' )', inputType, output );
157
+ tA = new ExpressionNode( `${ builder.getType( 'vec4' ) }( ${ tA.build( builder, 'vec3' ) }, 0.0 )`, 'vec4' );
117
158
 
118
- case MathNode.INVERT:
159
+ }
119
160
 
120
- return builder.format( '( 1.0 - ' + this.a.build( builder, inputType ) + ' )', inputType, output );
161
+ const mulNode = new SplitNode( new OperatorNode( '*', tA, tB ), 'xyz' );
121
162
 
122
- // 2 inputs
163
+ return new MathNode( MathNode.NORMALIZE, mulNode ).build( builder );
123
164
 
124
- case MathNode.CROSS:
165
+ } else if ( method === MathNode.SATURATE ) {
125
166
 
126
- a = this.a.build( builder, 'v3' );
127
- b = this.b.build( builder, 'v3' );
167
+ return builder.format( `clamp( ${ a.build( builder, inputType ) }, 0.0, 1.0 )`, type, output );
128
168
 
129
- break;
169
+ } else if ( method === MathNode.NEGATE ) {
130
170
 
131
- case MathNode.STEP:
171
+ return builder.format( '( -' + a.build( builder, inputType ) + ' )', type, output );
132
172
 
133
- a = this.a.build( builder, al === 1 ? 'f' : inputType );
134
- b = this.b.build( builder, inputType );
173
+ } else if ( method === MathNode.INVERT ) {
135
174
 
136
- break;
175
+ return builder.format( '( 1.0 - ' + a.build( builder, inputType ) + ' )', type, output );
137
176
 
138
- case MathNode.MIN:
139
- case MathNode.MAX:
140
- case MathNode.MOD:
177
+ } else {
141
178
 
142
- a = this.a.build( builder, inputType );
143
- b = this.b.build( builder, bl === 1 ? 'f' : inputType );
179
+ const params = [];
144
180
 
145
- break;
181
+ if ( method === MathNode.CROSS ) {
146
182
 
147
- // 3 inputs
183
+ params.push(
184
+ a.build( builder, type ),
185
+ b.build( builder, type )
186
+ );
148
187
 
149
- case MathNode.REFRACT:
188
+ } else if ( method === MathNode.STEP ) {
150
189
 
151
- a = this.a.build( builder, inputType );
152
- b = this.b.build( builder, inputType );
153
- c = this.c.build( builder, 'f' );
190
+ params.push(
191
+ a.build( builder, builder.getTypeLength( a.getNodeType( builder ) ) === 1 ? 'float' : inputType ),
192
+ b.build( builder, inputType )
193
+ );
154
194
 
155
- break;
195
+ } else if ( ( isWebGL && ( method === MathNode.MIN || method === MathNode.MAX ) ) || method === MathNode.MOD ) {
156
196
 
157
- case MathNode.MIX:
197
+ params.push(
198
+ a.build( builder, inputType ),
199
+ b.build( builder, builder.getTypeLength( b.getNodeType( builder ) ) === 1 ? 'float' : inputType )
200
+ );
158
201
 
159
- a = this.a.build( builder, inputType );
160
- b = this.b.build( builder, inputType );
161
- c = this.c.build( builder, cl === 1 ? 'f' : inputType );
202
+ } else if ( method === MathNode.REFRACT ) {
162
203
 
163
- break;
204
+ params.push(
205
+ a.build( builder, inputType ),
206
+ b.build( builder, inputType ),
207
+ c.build( builder, 'float' )
208
+ );
164
209
 
165
- // default
210
+ } else if ( method === MathNode.MIX ) {
166
211
 
167
- default:
212
+ params.push(
213
+ a.build( builder, inputType ),
214
+ b.build( builder, inputType ),
215
+ c.build( builder, builder.getTypeLength( c.getNodeType( builder ) ) === 1 ? 'float' : inputType )
216
+ );
168
217
 
169
- a = this.a.build( builder, inputType );
170
- if ( this.b ) b = this.b.build( builder, inputType );
171
- if ( this.c ) c = this.c.build( builder, inputType );
218
+ } else {
172
219
 
173
- break;
220
+ params.push( a.build( builder, inputType ) );
174
221
 
175
- }
222
+ if ( c !== null ) {
176
223
 
177
- // build function call
224
+ params.push( b.build( builder, inputType ), c.build( builder, inputType ) );
178
225
 
179
- const params = [];
180
- params.push( a );
181
- if ( b ) params.push( b );
182
- if ( c ) params.push( c );
226
+ } else if ( b !== null ) {
183
227
 
184
- const numInputs = this.getNumInputs( builder );
228
+ params.push( b.build( builder, inputType ) );
185
229
 
186
- if ( params.length !== numInputs ) {
230
+ }
187
231
 
188
- throw Error( `Arguments not match used in "${this.method}". Require ${numInputs}, currently ${params.length}.` );
232
+ }
189
233
 
190
- }
234
+ return builder.format( `${ builder.getMethod( method ) }( ${params.join( ', ' )} )`, type, output );
191
235
 
192
- return builder.format( this.method + '( ' + params.join( ', ' ) + ' )', nodeType, output );
236
+ }
193
237
 
194
238
  }
195
239
 
196
- copy( source ) {
197
-
198
- super.copy( source );
240
+ serialize( data ) {
199
241
 
200
- this.a = source.a;
201
- this.b = source.b;
202
- this.c = source.c;
203
- this.method = source.method;
242
+ super.serialize( data );
204
243
 
205
- return this;
244
+ data.method = this.method;
206
245
 
207
246
  }
208
247
 
209
- toJSON( meta ) {
248
+ deserialize( data ) {
210
249
 
211
- let data = this.getJSONNode( meta );
212
-
213
- if ( ! data ) {
214
-
215
- data = this.createJSONNode( meta );
216
-
217
- data.a = this.a.toJSON( meta ).uuid;
218
- if ( this.b ) data.b = this.b.toJSON( meta ).uuid;
219
- if ( this.c ) data.c = this.c.toJSON( meta ).uuid;
220
-
221
- data.method = this.method;
222
-
223
- }
250
+ super.deserialize( data );
224
251
 
225
- return data;
252
+ this.method = data.method;
226
253
 
227
254
  }
228
255
 
229
256
  }
230
257
 
231
- // 1 input
232
-
233
- MathNode.RAD = 'radians';
234
- MathNode.DEG = 'degrees';
235
- MathNode.EXP = 'exp';
236
- MathNode.EXP2 = 'exp2';
237
- MathNode.LOG = 'log';
238
- MathNode.LOG2 = 'log2';
239
- MathNode.SQRT = 'sqrt';
240
- MathNode.INV_SQRT = 'inversesqrt';
241
- MathNode.FLOOR = 'floor';
242
- MathNode.CEIL = 'ceil';
243
- MathNode.NORMALIZE = 'normalize';
244
- MathNode.FRACT = 'fract';
245
- MathNode.SATURATE = 'saturate';
246
- MathNode.SIN = 'sin';
247
- MathNode.COS = 'cos';
248
- MathNode.TAN = 'tan';
249
- MathNode.ASIN = 'asin';
250
- MathNode.ACOS = 'acos';
251
- MathNode.ARCTAN = 'atan';
252
- MathNode.ABS = 'abs';
253
- MathNode.SIGN = 'sign';
254
- MathNode.LENGTH = 'length';
255
- MathNode.NEGATE = 'negate';
256
- MathNode.INVERT = 'invert';
257
-
258
- // 2 inputs
259
-
260
- MathNode.MIN = 'min';
261
- MathNode.MAX = 'max';
262
- MathNode.MOD = 'mod';
263
- MathNode.STEP = 'step';
264
- MathNode.REFLECT = 'reflect';
265
- MathNode.DISTANCE = 'distance';
266
- MathNode.DOT = 'dot';
267
- MathNode.CROSS = 'cross';
268
- MathNode.POW = 'pow';
269
-
270
- // 3 inputs
271
-
272
- MathNode.MIX = 'mix';
273
- MathNode.CLAMP = 'clamp';
274
- MathNode.REFRACT = 'refract';
275
- MathNode.SMOOTHSTEP = 'smoothstep';
276
- MathNode.FACEFORWARD = 'faceforward';
277
-
278
- MathNode.prototype.nodeType = 'Math';
279
- MathNode.prototype.hashProperties = [ 'method' ];
280
-
281
- export { MathNode };
258
+ export default MathNode;
@@ -1,86 +1,206 @@
1
- import { TempNode } from '../core/TempNode.js';
1
+ import TempNode from '../core/TempNode.js';
2
2
 
3
3
  class OperatorNode extends TempNode {
4
4
 
5
- constructor( a, b, op ) {
5
+ constructor( op, aNode, bNode, ...params ) {
6
6
 
7
7
  super();
8
8
 
9
- this.a = a;
10
- this.b = b;
11
9
  this.op = op;
12
10
 
11
+ if ( params.length > 0 ) {
12
+
13
+ let finalBNode = bNode;
14
+
15
+ for ( let i = 0; i < params.length; i ++ ) {
16
+
17
+ finalBNode = new OperatorNode( op, finalBNode, params[ i ] );
18
+
19
+ }
20
+
21
+ bNode = finalBNode;
22
+
23
+ }
24
+
25
+ this.aNode = aNode;
26
+ this.bNode = bNode;
27
+
13
28
  }
14
29
 
15
- getType( builder ) {
30
+ getNodeType( builder, output ) {
16
31
 
17
- const a = this.a.getType( builder ),
18
- b = this.b.getType( builder );
32
+ const op = this.op;
19
33
 
20
- if ( builder.isTypeMatrix( a ) ) {
34
+ const aNode = this.aNode;
35
+ const bNode = this.bNode;
21
36
 
22
- return 'v4';
37
+ const typeA = aNode.getNodeType( builder );
38
+ const typeB = bNode.getNodeType( builder );
23
39
 
24
- } else if ( builder.getTypeLength( b ) > builder.getTypeLength( a ) ) {
40
+ if ( typeA === 'void' || typeB === 'void' ) {
25
41
 
26
- // use the greater length vector
42
+ return 'void';
27
43
 
28
- return b;
44
+ } else if ( op === '=' || op === '%' ) {
29
45
 
30
- }
46
+ return typeA;
47
+
48
+ } else if ( op === '&' || op === '|' || op === '^' || op === '>>' || op === '<<' ) {
49
+
50
+ return 'int';
51
+
52
+ } else if ( op === '==' || op === '&&' || op === '||' || op === '^^' ) {
53
+
54
+ return 'bool';
55
+
56
+ } else if ( op === '<' || op === '>' || op === '<=' || op === '>=' ) {
57
+
58
+ const typeLength = builder.getTypeLength( output );
59
+
60
+ return typeLength > 1 ? `bvec${ typeLength }` : 'bool';
61
+
62
+ } else {
31
63
 
32
- return a;
64
+ if ( typeA === 'float' && builder.isMatrix( typeB ) ) {
65
+
66
+ return typeB;
67
+
68
+ } else if ( builder.isMatrix( typeA ) && builder.isVector( typeB ) ) {
69
+
70
+ // matrix x vector
71
+
72
+ return builder.getVectorFromMatrix( typeA );
73
+
74
+ } else if ( builder.isVector( typeA ) && builder.isMatrix( typeB ) ) {
75
+
76
+ // vector x matrix
77
+
78
+ return builder.getVectorFromMatrix( typeB );
79
+
80
+ } else if ( builder.getTypeLength( typeB ) > builder.getTypeLength( typeA ) ) {
81
+
82
+ // anytype x anytype: use the greater length vector
83
+
84
+ return typeB;
85
+
86
+ }
87
+
88
+ return typeA;
89
+
90
+ }
33
91
 
34
92
  }
35
93
 
36
94
  generate( builder, output ) {
37
95
 
38
- const type = this.getType( builder );
96
+ const op = this.op;
39
97
 
40
- const a = this.a.build( builder, type ),
41
- b = this.b.build( builder, type );
98
+ const aNode = this.aNode;
99
+ const bNode = this.bNode;
42
100
 
43
- return builder.format( '( ' + a + ' ' + this.op + ' ' + b + ' )', type, output );
101
+ const type = this.getNodeType( builder, output );
44
102
 
45
- }
103
+ let typeA = null;
104
+ let typeB = null;
46
105
 
47
- copy( source ) {
106
+ if ( type !== 'void' ) {
48
107
 
49
- super.copy( source );
108
+ typeA = aNode.getNodeType( builder );
109
+ typeB = bNode.getNodeType( builder );
50
110
 
51
- this.a = source.a;
52
- this.b = source.b;
53
- this.op = source.op;
111
+ if ( op === '=' ) {
54
112
 
55
- return this;
113
+ typeB = typeA;
56
114
 
57
- }
115
+ } else if ( op === '<' || op === '>' || op === '<=' || op === '>=' ) {
116
+
117
+ if ( builder.isVector( typeA ) ) {
118
+
119
+ typeB = typeA;
58
120
 
59
- toJSON( meta ) {
121
+ } else {
60
122
 
61
- let data = this.getJSONNode( meta );
123
+ typeA = typeB = 'float';
62
124
 
63
- if ( ! data ) {
125
+ }
64
126
 
65
- data = this.createJSONNode( meta );
127
+ } else if ( builder.isMatrix( typeA ) && builder.isVector( typeB ) ) {
66
128
 
67
- data.a = this.a.toJSON( meta ).uuid;
68
- data.b = this.b.toJSON( meta ).uuid;
69
- data.op = this.op;
129
+ // matrix x vector
130
+
131
+ typeB = builder.getVectorFromMatrix( typeA );
132
+
133
+ } else if ( builder.isVector( typeA ) && builder.isMatrix( typeB ) ) {
134
+
135
+ // vector x matrix
136
+
137
+ typeA = builder.getVectorFromMatrix( typeB );
138
+
139
+ } else {
140
+
141
+ // anytype x anytype
142
+
143
+ typeA = typeB = type;
144
+
145
+ }
146
+
147
+ } else {
148
+
149
+ typeA = typeB = type;
150
+
151
+ }
152
+
153
+ const a = aNode.build( builder, typeA );
154
+ const b = bNode.build( builder, typeB );
155
+
156
+ const outputLength = builder.getTypeLength( output );
157
+
158
+ if ( output !== 'void' ) {
159
+
160
+ if ( op === '=' ) {
161
+
162
+ builder.addFlowCode( `${a} ${this.op} ${b}` );
163
+
164
+ return a;
165
+
166
+ } else if ( op === '>' && outputLength > 1 ) {
167
+
168
+ return builder.format( `${ builder.getMethod( 'greaterThan' ) }( ${a}, ${b} )`, type, output );
169
+
170
+ } else if ( op === '<=' && outputLength > 1 ) {
171
+
172
+ return builder.format( `${ builder.getMethod( 'lessThanEqual' ) }( ${a}, ${b} )`, type, output );
173
+
174
+ } else {
175
+
176
+ return builder.format( `( ${a} ${this.op} ${b} )`, type, output );
177
+
178
+ }
179
+
180
+ } else if ( typeA !== 'void' ) {
181
+
182
+ return builder.format( `${a} ${this.op} ${b}`, type, output );
70
183
 
71
184
  }
72
185
 
73
- return data;
186
+ }
187
+
188
+ serialize( data ) {
189
+
190
+ super.serialize( data );
191
+
192
+ data.op = this.op;
74
193
 
75
194
  }
76
195
 
77
- }
196
+ deserialize( data ) {
78
197
 
79
- OperatorNode.ADD = '+';
80
- OperatorNode.SUB = '-';
81
- OperatorNode.MUL = '*';
82
- OperatorNode.DIV = '/';
198
+ super.deserialize( data );
83
199
 
84
- OperatorNode.prototype.nodeType = 'Operator';
200
+ this.op = data.op;
201
+
202
+ }
203
+
204
+ }
85
205
 
86
- export { OperatorNode };
206
+ export default OperatorNode;