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,970 +1,798 @@
1
- import {
2
- CubeReflectionMapping,
3
- CubeRefractionMapping,
4
- CubeUVReflectionMapping,
5
- CubeUVRefractionMapping,
6
- LinearEncoding,
7
- sRGBEncoding
8
- } from 'three';
9
-
10
- import { NodeUniform } from './NodeUniform.js';
11
- import { NodeUtils } from './NodeUtils.js';
12
- import { NodeLib } from './NodeLib.js';
13
- import { FunctionNode } from './FunctionNode.js';
14
- import { ConstNode } from './ConstNode.js';
15
- import { StructNode } from './StructNode.js';
16
- import { Vector2Node } from '../inputs/Vector2Node.js';
17
- import { Vector3Node } from '../inputs/Vector3Node.js';
18
- import { Vector4Node } from '../inputs/Vector4Node.js';
19
- import { TextureNode } from '../inputs/TextureNode.js';
20
- import { CubeTextureNode } from '../inputs/CubeTextureNode.js';
21
- import { TextureCubeNode } from '../misc/TextureCubeNode.js';
22
-
23
-
24
- const elements = NodeUtils.elements,
25
- constructors = [ 'float', 'vec2', 'vec3', 'vec4' ],
26
- convertFormatToType = {
27
- float: 'f',
28
- vec2: 'v2',
29
- vec3: 'v3',
30
- vec4: 'v4',
31
- mat4: 'v4',
32
- int: 'i',
33
- bool: 'b'
34
- },
35
- convertTypeToFormat = {
36
- t: 'sampler2D',
37
- tc: 'samplerCube',
38
- b: 'bool',
39
- i: 'int',
40
- f: 'float',
41
- c: 'vec3',
42
- v2: 'vec2',
43
- v3: 'vec3',
44
- v4: 'vec4',
45
- m3: 'mat3',
46
- m4: 'mat4'
47
- };
1
+ import NodeUniform from './NodeUniform.js';
2
+ import NodeAttribute from './NodeAttribute.js';
3
+ import NodeVary from './NodeVary.js';
4
+ import NodeVar from './NodeVar.js';
5
+ import NodeCode from './NodeCode.js';
6
+ import NodeKeywords from './NodeKeywords.js';
7
+ import { NodeUpdateType } from './constants.js';
48
8
 
49
- class NodeBuilder {
50
-
51
- constructor() {
52
-
53
- this.slots = [];
54
- this.caches = [];
55
- this.contexts = [];
56
-
57
- this.keywords = {};
58
-
59
- this.nodeData = {};
60
-
61
- this.requires = {
62
- uv: [],
63
- color: [],
64
- lights: false,
65
- fog: false,
66
- transparent: false,
67
- irradiance: false
68
- };
69
-
70
- this.includes = {
71
- consts: [],
72
- functions: [],
73
- structs: []
74
- };
75
-
76
- this.attributes = {};
77
-
78
- this.prefixCode = /* glsl */`
79
- #ifdef TEXTURE_LOD_EXT
80
-
81
- #define texCube(a, b) textureCube(a, b)
82
- #define texCubeBias(a, b, c) textureCubeLodEXT(a, b, c)
9
+ import { REVISION, LinearEncoding } from 'three';
83
10
 
84
- #define tex2D(a, b) texture2D(a, b)
85
- #define tex2DBias(a, b, c) texture2DLodEXT(a, b, c)
11
+ export const defaultShaderStages = [ 'fragment', 'vertex' ];
12
+ export const shaderStages = [ ...defaultShaderStages, 'compute' ];
13
+ export const vector = [ 'x', 'y', 'z', 'w' ];
86
14
 
87
- #else
15
+ const typeFromLength = new Map();
16
+ typeFromLength.set( 1, 'float' );
17
+ typeFromLength.set( 2, 'vec2' );
18
+ typeFromLength.set( 3, 'vec3' );
19
+ typeFromLength.set( 4, 'vec4' );
20
+ typeFromLength.set( 9, 'mat3' );
21
+ typeFromLength.set( 16, 'mat4' );
88
22
 
89
- #define texCube(a, b) textureCube(a, b)
90
- #define texCubeBias(a, b, c) textureCube(a, b, c)
23
+ const toFloat = ( value ) => {
91
24
 
92
- #define tex2D(a, b) texture2D(a, b)
93
- #define tex2DBias(a, b, c) texture2D(a, b, c)
25
+ value = Number( value );
94
26
 
95
- #endif
27
+ return value + ( value % 1 ? '' : '.0' );
96
28
 
97
- #include <packing>
98
- #include <common>`;
29
+ };
99
30
 
100
- this.parsCode = {
101
- vertex: '',
102
- fragment: ''
103
- };
104
-
105
- this.code = {
106
- vertex: '',
107
- fragment: ''
108
- };
109
-
110
- this.nodeCode = {
111
- vertex: '',
112
- fragment: ''
113
- };
31
+ class NodeBuilder {
114
32
 
115
- this.resultCode = {
116
- vertex: '',
117
- fragment: ''
118
- };
33
+ constructor( object, renderer, parser ) {
119
34
 
120
- this.finalCode = {
121
- vertex: '',
122
- fragment: ''
123
- };
35
+ this.object = object;
36
+ this.material = object.material || null;
37
+ this.geometry = object.geometry || null;
38
+ this.renderer = renderer;
39
+ this.parser = parser;
124
40
 
125
- this.inputs = {
126
- uniforms: {
127
- list: [],
128
- vertex: [],
129
- fragment: []
130
- },
131
- vars: {
132
- varying: [],
133
- vertex: [],
134
- fragment: []
135
- }
41
+ this.nodes = [];
42
+ this.updateNodes = [];
43
+ this.hashNodes = {};
44
+
45
+ this.scene = null;
46
+ this.lightsNode = null;
47
+ this.fogNode = null;
48
+
49
+ this.vertexShader = null;
50
+ this.fragmentShader = null;
51
+ this.computeShader = null;
52
+
53
+ this.flowNodes = { vertex: [], fragment: [], compute: [] };
54
+ this.flowCode = { vertex: '', fragment: '', compute: [] };
55
+ this.uniforms = { vertex: [], fragment: [], compute: [], index: 0 };
56
+ this.codes = { vertex: [], fragment: [], compute: [] };
57
+ this.attributes = [];
58
+ this.varys = [];
59
+ this.vars = { vertex: [], fragment: [], compute: [] };
60
+ this.flow = { code: '' };
61
+ this.stack = [];
62
+
63
+ this.context = {
64
+ keywords: new NodeKeywords(),
65
+ material: object.material
136
66
  };
137
67
 
138
- // send to material
139
-
140
- this.defines = {};
68
+ this.nodesData = new WeakMap();
69
+ this.flowsData = new WeakMap();
141
70
 
142
- this.uniforms = {};
71
+ this.shaderStage = null;
72
+ this.buildStage = null;
143
73
 
144
- this.extensions = {};
145
-
146
- this.updaters = [];
147
-
148
- this.nodes = [];
74
+ }
149
75
 
150
- // --
76
+ get node() {
151
77
 
152
- this.analyzing = false;
78
+ return this.stack[ this.stack.length - 1 ];
153
79
 
154
80
  }
155
81
 
156
- build( vertex, fragment ) {
157
-
158
- this.buildShader( 'vertex', vertex );
159
- this.buildShader( 'fragment', fragment );
82
+ addStack( node ) {
160
83
 
161
- for ( let i = 0; i < this.requires.uv.length; i ++ ) {
84
+ /*
85
+ if ( this.stack.indexOf( node ) !== - 1 ) {
162
86
 
163
- if ( this.requires.uv[ i ] ) {
87
+ console.warn( 'Recursive node: ', node );
164
88
 
165
- const uvIndex = i > 0 ? i + 1 : '';
89
+ }
90
+ */
166
91
 
167
- this.addVaryCode( 'varying vec2 vUv' + uvIndex + ';' );
92
+ this.stack.push( node );
168
93
 
169
- if ( i > 0 ) {
94
+ }
170
95
 
171
- this.addVertexParsCode( 'attribute vec2 uv' + uvIndex + ';' );
96
+ removeStack( node ) {
172
97
 
173
- }
98
+ const lastStack = this.stack.pop();
174
99
 
175
- this.addVertexFinalCode( 'vUv' + uvIndex + ' = uv' + uvIndex + ';' );
100
+ if ( lastStack !== node ) {
176
101
 
177
- }
102
+ throw new Error( 'NodeBuilder: Invalid node stack!' );
178
103
 
179
104
  }
180
105
 
181
- if ( this.requires.color[ 0 ] ) {
182
-
183
- this.addVaryCode( 'varying vec4 vColor;' );
184
- this.addVertexParsCode( 'attribute vec4 color;' );
185
-
186
- this.addVertexFinalCode( 'vColor = color;' );
187
-
188
- }
106
+ }
189
107
 
190
- if ( this.requires.color[ 1 ] ) {
108
+ setHashNode( node, hash ) {
191
109
 
192
- this.addVaryCode( 'varying vec4 vColor2;' );
193
- this.addVertexParsCode( 'attribute vec4 color2;' );
110
+ this.hashNodes[ hash ] = node;
194
111
 
195
- this.addVertexFinalCode( 'vColor2 = color2;' );
112
+ }
196
113
 
197
- }
114
+ addNode( node ) {
198
115
 
199
- if ( this.requires.position ) {
116
+ if ( this.nodes.indexOf( node ) === - 1 ) {
200
117
 
201
- this.addVaryCode( 'varying vec3 vPosition;' );
118
+ const updateType = node.getUpdateType( this );
202
119
 
203
- this.addVertexFinalCode( 'vPosition = transformed;' );
120
+ if ( updateType !== NodeUpdateType.None ) {
204
121
 
205
- }
122
+ this.updateNodes.push( node );
206
123
 
207
- if ( this.requires.worldPosition ) {
124
+ }
208
125
 
209
- this.addVaryCode( 'varying vec3 vWPosition;' );
126
+ this.nodes.push( node );
210
127
 
211
- this.addVertexFinalCode( 'vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;' );
128
+ this.setHashNode( node, node.getHash( this ) );
212
129
 
213
130
  }
214
131
 
215
- if ( this.requires.normal ) {
216
-
217
- this.addVaryCode( 'varying vec3 vObjectNormal;' );
218
-
219
- this.addVertexFinalCode( 'vObjectNormal = normal;' );
132
+ }
220
133
 
221
- }
134
+ getMethod( method ) {
222
135
 
223
- if ( this.requires.worldNormal ) {
136
+ return method;
224
137
 
225
- this.addVaryCode( 'varying vec3 vWNormal;' );
138
+ }
226
139
 
227
- this.addVertexFinalCode( 'vWNormal = inverseTransformDirection( transformedNormal, viewMatrix ).xyz;' );
140
+ getNodeFromHash( hash ) {
228
141
 
229
- }
230
-
231
- return this;
142
+ return this.hashNodes[ hash ];
232
143
 
233
144
  }
234
145
 
235
- buildShader( shader, node ) {
146
+ addFlow( shaderStage, node ) {
147
+
148
+ this.flowNodes[ shaderStage ].push( node );
236
149
 
237
- this.resultCode[ shader ] = node.build( this.setShader( shader ), 'v4' );
150
+ return node;
238
151
 
239
152
  }
240
153
 
241
- setMaterial( material, renderer ) {
154
+ setContext( context ) {
242
155
 
243
- this.material = material;
244
- this.renderer = renderer;
156
+ this.context = context;
245
157
 
246
- this.requires.lights = material.lights;
247
- this.requires.fog = material.fog;
158
+ }
248
159
 
249
- this.mergeDefines( material.defines );
160
+ getContext() {
250
161
 
251
- return this;
162
+ return this.context;
252
163
 
253
164
  }
254
165
 
255
- addFlow( slot, cache, context ) {
166
+ isAvailable( /*name*/ ) {
256
167
 
257
- return this.addSlot( slot ).addCache( cache ).addContext( context );
168
+ return false;
258
169
 
259
170
  }
260
171
 
261
- removeFlow() {
172
+ getInstanceIndex() {
262
173
 
263
- return this.removeSlot().removeCache().removeContext();
174
+ console.warn( 'Abstract function.' );
264
175
 
265
176
  }
266
177
 
267
- addCache( name ) {
178
+ getFrontFacing() {
268
179
 
269
- this.cache = name || '';
270
- this.caches.push( this.cache );
271
-
272
- return this;
180
+ console.warn( 'Abstract function.' );
273
181
 
274
182
  }
275
183
 
276
- removeCache() {
277
-
278
- this.caches.pop();
279
- this.cache = this.caches[ this.caches.length - 1 ] || '';
184
+ getTexture( /* textureProperty, uvSnippet */ ) {
280
185
 
281
- return this;
186
+ console.warn( 'Abstract function.' );
282
187
 
283
188
  }
284
189
 
285
- addContext( context ) {
286
-
287
- this.context = Object.assign( {}, this.context, context );
288
- this.context.extra = this.context.extra || {};
190
+ getTextureLevel( /* textureProperty, uvSnippet, levelSnippet */ ) {
289
191
 
290
- this.contexts.push( this.context );
291
-
292
- return this;
192
+ console.warn( 'Abstract function.' );
293
193
 
294
194
  }
295
195
 
296
- removeContext() {
297
-
298
- this.contexts.pop();
299
- this.context = this.contexts[ this.contexts.length - 1 ] || {};
196
+ getCubeTexture( /* textureProperty, uvSnippet */ ) {
300
197
 
301
- return this;
198
+ console.warn( 'Abstract function.' );
302
199
 
303
200
  }
304
201
 
305
- addSlot( name = '' ) {
202
+ getCubeTextureLevel( /* textureProperty, uvSnippet, levelSnippet */ ) {
306
203
 
307
- this.slot = name;
308
- this.slots.push( this.slot );
309
-
310
- return this;
204
+ console.warn( 'Abstract function.' );
311
205
 
312
206
  }
313
207
 
314
- removeSlot() {
208
+ // @TODO: rename to .generateConst()
209
+ getConst( type, value ) {
315
210
 
316
- this.slots.pop();
317
- this.slot = this.slots[ this.slots.length - 1 ] || '';
211
+ if ( type === 'float' ) return toFloat( value );
212
+ if ( type === 'int' ) return `${ Math.round( value ) }`;
213
+ if ( type === 'uint' ) return value >= 0 ? `${ Math.round( value ) }u` : '0u';
214
+ if ( type === 'bool' ) return value ? 'true' : 'false';
215
+ if ( type === 'color' ) return `${ this.getType( 'vec3' ) }( ${ toFloat( value.r ) }, ${ toFloat( value.g ) }, ${ toFloat( value.b ) } )`;
318
216
 
319
- return this;
217
+ const typeLength = this.getTypeLength( type );
320
218
 
321
- }
219
+ const componentType = this.getComponentType( type );
322
220
 
323
- addVertexCode( code ) {
221
+ const getConst = value => this.getConst( componentType, value );
324
222
 
325
- this.addCode( code, 'vertex' );
223
+ if ( typeLength === 2 ) {
326
224
 
327
- }
225
+ return `${ this.getType( type ) }( ${ getConst( value.x ) }, ${ getConst( value.y ) } )`;
328
226
 
329
- addFragmentCode( code ) {
227
+ } else if ( typeLength === 3 ) {
330
228
 
331
- this.addCode( code, 'fragment' );
229
+ return `${ this.getType( type ) }( ${ getConst( value.x ) }, ${ getConst( value.y ) }, ${ getConst( value.z ) } )`;
332
230
 
333
- }
231
+ } else if ( typeLength === 4 ) {
334
232
 
335
- addCode( code, shader ) {
233
+ return `${ this.getType( type ) }( ${ getConst( value.x ) }, ${ getConst( value.y ) }, ${ getConst( value.z ) }, ${ getConst( value.w ) } )`;
336
234
 
337
- this.code[ shader || this.shader ] += code + '\n';
235
+ } else if ( typeLength > 4 ) {
338
236
 
339
- }
237
+ return `${ this.getType( type ) }()`;
340
238
 
341
- addVertexNodeCode( code ) {
239
+ }
342
240
 
343
- this.addNodeCode( code, 'vertex' );
241
+ throw new Error( `NodeBuilder: Type '${type}' not found in generate constant attempt.` );
344
242
 
345
243
  }
346
244
 
347
- addFragmentNodeCode( code ) {
245
+ getType( type ) {
348
246
 
349
- this.addNodeCode( code, 'fragment' );
247
+ return type;
350
248
 
351
249
  }
352
250
 
353
- addNodeCode( code, shader ) {
251
+ generateMethod( method ) {
354
252
 
355
- this.nodeCode[ shader || this.shader ] += code + '\n';
253
+ return method;
356
254
 
357
255
  }
358
256
 
359
- clearNodeCode( shader ) {
257
+ getAttribute( name, type ) {
360
258
 
361
- shader = shader || this.shader;
259
+ const attributes = this.attributes;
362
260
 
363
- const code = this.nodeCode[ shader ];
261
+ // find attribute
364
262
 
365
- this.nodeCode[ shader ] = '';
263
+ for ( const attribute of attributes ) {
366
264
 
367
- return code;
265
+ if ( attribute.name === name ) {
368
266
 
369
- }
267
+ return attribute;
370
268
 
371
- clearVertexNodeCode( ) {
269
+ }
372
270
 
373
- return this.clearNodeCode( 'vertex' );
271
+ }
374
272
 
375
- }
273
+ // create a new if no exist
376
274
 
377
- clearFragmentNodeCode( ) {
275
+ const attribute = new NodeAttribute( name, type );
378
276
 
379
- return this.clearNodeCode( 'fragment' );
277
+ attributes.push( attribute );
278
+
279
+ return attribute;
380
280
 
381
281
  }
382
282
 
383
- addVertexFinalCode( code ) {
283
+ getPropertyName( node/*, shaderStage*/ ) {
384
284
 
385
- this.addFinalCode( code, 'vertex' );
285
+ return node.name;
386
286
 
387
287
  }
388
288
 
389
- addFragmentFinalCode( code ) {
289
+ isVector( type ) {
390
290
 
391
- this.addFinalCode( code, 'fragment' );
291
+ return /vec\d/.test( type );
392
292
 
393
293
  }
394
294
 
395
- addFinalCode( code, shader ) {
295
+ isMatrix( type ) {
396
296
 
397
- this.finalCode[ shader || this.shader ] += code + '\n';
297
+ return /mat\d/.test( type );
398
298
 
399
299
  }
400
300
 
401
- addVertexParsCode( code ) {
301
+ isReference( type ) {
402
302
 
403
- this.addParsCode( code, 'vertex' );
303
+ return type === 'void' || type === 'property' || type === 'sampler' || type === 'texture' || type === 'cubeTexture';
404
304
 
405
305
  }
406
306
 
407
- addFragmentParsCode( code ) {
307
+ isShaderStage( shaderStage ) {
408
308
 
409
- this.addParsCode( code, 'fragment' );
309
+ return this.shaderStage === shaderStage;
410
310
 
411
311
  }
412
312
 
413
- addParsCode( code, shader ) {
313
+ getTextureEncodingFromMap( map ) {
414
314
 
415
- this.parsCode[ shader || this.shader ] += code + '\n';
315
+ let encoding;
416
316
 
417
- }
317
+ if ( map && map.isTexture ) {
418
318
 
419
- addVaryCode( code ) {
319
+ encoding = map.encoding;
420
320
 
421
- this.addVertexParsCode( code );
422
- this.addFragmentParsCode( code );
321
+ } else if ( map && map.isWebGLRenderTarget ) {
423
322
 
424
- }
425
-
426
- isCache( name ) {
323
+ encoding = map.texture.encoding;
427
324
 
428
- return this.caches.indexOf( name ) !== - 1;
325
+ } else {
429
326
 
430
- }
327
+ encoding = LinearEncoding;
431
328
 
432
- isSlot( name ) {
329
+ }
433
330
 
434
- return this.slots.indexOf( name ) !== - 1;
331
+ return encoding;
435
332
 
436
333
  }
437
334
 
438
- define( name, value ) {
335
+ getComponentType( type ) {
439
336
 
440
- this.defines[ name ] = value === undefined ? 1 : value;
337
+ type = this.getVectorType( type );
441
338
 
442
- }
339
+ const componentType = /(b|i|u|)(vec|mat)([2-4])/.exec( type );
340
+
341
+ if ( componentType === null ) return null;
443
342
 
444
- require( name ) {
343
+ if ( componentType[ 1 ] === 'b' ) return 'bool';
344
+ if ( componentType[ 1 ] === 'i' ) return 'int';
345
+ if ( componentType[ 1 ] === 'u' ) return 'uint';
445
346
 
446
- this.requires[ name ] = true;
347
+ return 'float';
447
348
 
448
349
  }
449
350
 
450
- isDefined( name ) {
351
+ getVectorType( type ) {
451
352
 
452
- return this.defines[ name ] !== undefined;
353
+ if ( type === 'color' ) return 'vec3';
354
+ if ( type === 'texture' ) return 'vec4';
453
355
 
454
- }
356
+ return type;
455
357
 
456
- getVar( uuid, type, ns, shader = 'varying', prefix = 'V', label = '' ) {
358
+ }
457
359
 
458
- const vars = this.getVars( shader );
459
- let data = vars[ uuid ];
360
+ getTypeFromLength( length ) {
460
361
 
461
- if ( ! data ) {
362
+ return typeFromLength.get( length );
462
363
 
463
- const index = vars.length,
464
- name = ns ? ns : 'node' + prefix + index + ( label ? '_' + label : '' );
364
+ }
465
365
 
466
- data = { name: name, type: type };
366
+ getTypeLength( type ) {
467
367
 
468
- vars.push( data );
469
- vars[ uuid ] = data;
368
+ const vecType = this.getVectorType( type );
369
+ const vecNum = /vec([2-4])/.exec( vecType );
470
370
 
471
- }
371
+ if ( vecNum !== null ) return Number( vecNum[ 1 ] );
372
+ if ( vecType === 'float' || vecType === 'bool' || vecType === 'int' || vecType === 'uint' ) return 1;
373
+ if ( /mat3/.test( type ) === true ) return 9;
374
+ if ( /mat4/.test( type ) === true ) return 16;
472
375
 
473
- return data;
376
+ return 0;
474
377
 
475
378
  }
476
379
 
477
- getTempVar( uuid, type, ns, label ) {
380
+ getVectorFromMatrix( type ) {
478
381
 
479
- return this.getVar( uuid, type, ns, this.shader, 'T', label );
382
+ return type.replace( 'mat', 'vec' );
480
383
 
481
384
  }
482
385
 
483
- getAttribute( name, type ) {
386
+ getDataFromNode( node, shaderStage = this.shaderStage ) {
484
387
 
485
- if ( ! this.attributes[ name ] ) {
388
+ let nodeData = this.nodesData.get( node );
486
389
 
487
- const varying = this.getVar( name, type );
390
+ if ( nodeData === undefined ) {
488
391
 
489
- this.addVertexParsCode( 'attribute ' + type + ' ' + name + ';' );
490
- this.addVertexFinalCode( varying.name + ' = ' + name + ';' );
392
+ nodeData = { vertex: {}, fragment: {}, compute: {} };
491
393
 
492
- this.attributes[ name ] = { varying: varying, name: name, type: type };
394
+ this.nodesData.set( node, nodeData );
493
395
 
494
396
  }
495
397
 
496
- return this.attributes[ name ];
398
+ return shaderStage !== null ? nodeData[ shaderStage ] : nodeData;
497
399
 
498
400
  }
499
401
 
500
- getCode( shader ) {
402
+ getNodeProperties( node, shaderStage = this.shaderStage ) {
501
403
 
502
- return [
503
- this.prefixCode,
504
- this.parsCode[ shader ],
505
- this.getVarListCode( this.getVars( 'varying' ), 'varying' ),
506
- this.getVarListCode( this.inputs.uniforms[ shader ], 'uniform' ),
507
- this.getIncludesCode( 'consts', shader ),
508
- this.getIncludesCode( 'structs', shader ),
509
- this.getIncludesCode( 'functions', shader ),
510
- 'void main() {',
511
- this.getVarListCode( this.getVars( shader ) ),
512
- this.code[ shader ],
513
- this.resultCode[ shader ],
514
- this.finalCode[ shader ],
515
- '}'
516
- ].join( '\n' );
404
+ const nodeData = this.getDataFromNode( this, shaderStage );
405
+ const constructHash = node.getConstructHash( this );
517
406
 
518
- }
407
+ nodeData.properties = nodeData.properties || {};
408
+ nodeData.properties[ constructHash ] = nodeData.properties[ constructHash ] || { outputNode: null };
519
409
 
520
- getVarListCode( vars, prefix = '' ) {
410
+ return nodeData.properties[ constructHash ];
521
411
 
522
- let code = '';
412
+ }
523
413
 
524
- for ( let i = 0, l = vars.length; i < l; ++ i ) {
414
+ getUniformFromNode( node, shaderStage, type ) {
525
415
 
526
- const nVar = vars[ i ],
527
- type = nVar.type,
528
- name = nVar.name;
416
+ const nodeData = this.getDataFromNode( node, shaderStage );
529
417
 
530
- const formatType = this.getFormatByType( type );
418
+ let nodeUniform = nodeData.uniform;
531
419
 
532
- if ( formatType === undefined ) {
420
+ if ( nodeUniform === undefined ) {
533
421
 
534
- throw new Error( 'Node pars ' + formatType + ' not found.' );
422
+ const index = this.uniforms.index ++;
535
423
 
536
- }
424
+ nodeUniform = new NodeUniform( 'nodeUniform' + index, type, node );
425
+
426
+ this.uniforms[ shaderStage ].push( nodeUniform );
537
427
 
538
- code += prefix + ' ' + formatType + ' ' + name + ';\n';
428
+ nodeData.uniform = nodeUniform;
539
429
 
540
430
  }
541
431
 
542
- return code;
432
+ return nodeUniform;
543
433
 
544
434
  }
545
435
 
546
- getVars( shader ) {
436
+ getVarFromNode( node, type, shaderStage = this.shaderStage ) {
547
437
 
548
- return this.inputs.vars[ shader || this.shader ];
438
+ const nodeData = this.getDataFromNode( node, shaderStage );
549
439
 
550
- }
440
+ let nodeVar = nodeData.variable;
551
441
 
552
- getNodeData( node ) {
442
+ if ( nodeVar === undefined ) {
553
443
 
554
- const uuid = node.isNode ? node.uuid : node;
444
+ const vars = this.vars[ shaderStage ];
445
+ const index = vars.length;
555
446
 
556
- return this.nodeData[ uuid ] = this.nodeData[ uuid ] || {};
447
+ nodeVar = new NodeVar( 'nodeVar' + index, type );
557
448
 
558
- }
449
+ vars.push( nodeVar );
559
450
 
560
- createUniform( shader, type, node, ns, needsUpdate, label ) {
451
+ nodeData.variable = nodeVar;
561
452
 
562
- const uniforms = this.inputs.uniforms,
563
- index = uniforms.list.length;
453
+ }
564
454
 
565
- const uniform = new NodeUniform( {
566
- type: type,
567
- name: ns ? ns : 'nodeU' + index + ( label ? '_' + label : '' ),
568
- node: node,
569
- needsUpdate: needsUpdate
570
- } );
455
+ return nodeVar;
571
456
 
572
- uniforms.list.push( uniform );
457
+ }
573
458
 
574
- uniforms[ shader ].push( uniform );
575
- uniforms[ shader ][ uniform.name ] = uniform;
459
+ getVaryFromNode( node, type ) {
576
460
 
577
- this.uniforms[ uniform.name ] = uniform;
461
+ const nodeData = this.getDataFromNode( node, null );
578
462
 
579
- return uniform;
463
+ let nodeVary = nodeData.vary;
580
464
 
581
- }
465
+ if ( nodeVary === undefined ) {
582
466
 
583
- createVertexUniform( type, node, ns, needsUpdate, label ) {
467
+ const varys = this.varys;
468
+ const index = varys.length;
584
469
 
585
- return this.createUniform( 'vertex', type, node, ns, needsUpdate, label );
470
+ nodeVary = new NodeVary( 'nodeVary' + index, type );
586
471
 
587
- }
472
+ varys.push( nodeVary );
473
+
474
+ nodeData.vary = nodeVary;
588
475
 
589
- createFragmentUniform( type, node, ns, needsUpdate, label ) {
476
+ }
590
477
 
591
- return this.createUniform( 'fragment', type, node, ns, needsUpdate, label );
478
+ return nodeVary;
592
479
 
593
480
  }
594
481
 
595
- include( node, parent, source ) {
482
+ getCodeFromNode( node, type, shaderStage = this.shaderStage ) {
596
483
 
597
- let includesStruct;
484
+ const nodeData = this.getDataFromNode( node );
598
485
 
599
- node = typeof node === 'string' ? NodeLib.get( node ) : node;
486
+ let nodeCode = nodeData.code;
600
487
 
601
- if ( this.context.include === false ) {
488
+ if ( nodeCode === undefined ) {
602
489
 
603
- return node.name;
490
+ const codes = this.codes[ shaderStage ];
491
+ const index = codes.length;
604
492
 
605
- }
493
+ nodeCode = new NodeCode( 'nodeCode' + index, type );
606
494
 
495
+ codes.push( nodeCode );
607
496
 
608
- if ( node instanceof FunctionNode ) {
497
+ nodeData.code = nodeCode;
609
498
 
610
- includesStruct = this.includes.functions;
499
+ }
611
500
 
612
- } else if ( node instanceof ConstNode ) {
501
+ return nodeCode;
613
502
 
614
- includesStruct = this.includes.consts;
503
+ }
615
504
 
616
- } else if ( node instanceof StructNode ) {
505
+ addFlowCode( code ) {
617
506
 
618
- includesStruct = this.includes.structs;
507
+ this.flow.code += code;
619
508
 
620
- }
509
+ }
621
510
 
622
- const includes = includesStruct[ this.shader ] = includesStruct[ this.shader ] || [];
511
+ getFlowData( node/*, shaderStage*/ ) {
623
512
 
624
- if ( node ) {
513
+ return this.flowsData.get( node );
625
514
 
626
- let included = includes[ node.name ];
515
+ }
627
516
 
628
- if ( ! included ) {
517
+ flowNode( node ) {
629
518
 
630
- included = includes[ node.name ] = {
631
- node: node,
632
- deps: []
633
- };
519
+ const output = node.getNodeType( this );
634
520
 
635
- includes.push( included );
521
+ const flowData = this.flowChildNode( node, output );
636
522
 
637
- included.src = node.build( this, 'source' );
523
+ this.flowsData.set( node, flowData );
638
524
 
639
- }
525
+ return flowData;
640
526
 
641
- if ( node instanceof FunctionNode && parent && includes[ parent.name ] && includes[ parent.name ].deps.indexOf( node ) == - 1 ) {
527
+ }
642
528
 
643
- includes[ parent.name ].deps.push( node );
529
+ flowChildNode( node, output = null ) {
644
530
 
645
- if ( node.includes && node.includes.length ) {
531
+ const previousFlow = this.flow;
646
532
 
647
- let i = 0;
533
+ const flow = {
534
+ code: '',
535
+ };
648
536
 
649
- do {
537
+ this.flow = flow;
650
538
 
651
- this.include( node.includes[ i ++ ], parent );
539
+ flow.result = node.build( this, output );
652
540
 
653
- } while ( i < node.includes.length );
541
+ this.flow = previousFlow;
654
542
 
655
- }
543
+ return flow;
656
544
 
657
- }
545
+ }
658
546
 
659
- if ( source ) {
547
+ flowNodeFromShaderStage( shaderStage, node, output = null, propertyName = null ) {
660
548
 
661
- included.src = source;
549
+ const previousShaderStage = this.shaderStage;
662
550
 
663
- }
551
+ this.setShaderStage( shaderStage );
664
552
 
665
- return node.name;
553
+ const flowData = this.flowChildNode( node, output );
666
554
 
667
- } else {
555
+ if ( propertyName !== null ) {
668
556
 
669
- throw new Error( 'Include not found.' );
557
+ flowData.code += `${propertyName} = ${flowData.result};\n\t`;
670
558
 
671
559
  }
672
560
 
673
- }
561
+ this.flowCode[ shaderStage ] = this.flowCode[ shaderStage ] + flowData.code;
674
562
 
675
- colorToVectorProperties( color ) {
563
+ this.setShaderStage( previousShaderStage );
676
564
 
677
- return color.replace( 'r', 'x' ).replace( 'g', 'y' ).replace( 'b', 'z' ).replace( 'a', 'w' );
565
+ return flowData;
678
566
 
679
567
  }
680
568
 
681
- colorToVector( color ) {
569
+ getAttributes( /*shaderStage*/ ) {
682
570
 
683
- return color.replace( /c/g, 'v3' );
571
+ console.warn( 'Abstract function.' );
684
572
 
685
573
  }
686
574
 
687
- getIncludes( type, shader ) {
575
+ getVarys( /*shaderStage*/ ) {
688
576
 
689
- return this.includes[ type ][ shader || this.shader ];
577
+ console.warn( 'Abstract function.' );
690
578
 
691
579
  }
692
580
 
693
- getIncludesCode( type, shader ) {
694
-
695
- let includes = this.getIncludes( type, shader );
581
+ getVars( shaderStage ) {
696
582
 
697
- if ( ! includes ) return '';
583
+ let snippet = '';
698
584
 
699
- let code = '';
700
-
701
- includes = includes.sort( sortByPosition );
585
+ const vars = this.vars[ shaderStage ];
702
586
 
703
- for ( let i = 0; i < includes.length; i ++ ) {
587
+ for ( const variable of vars ) {
704
588
 
705
- if ( includes[ i ].src ) code += includes[ i ].src + '\n';
589
+ snippet += `${variable.type} ${variable.name}; `;
706
590
 
707
591
  }
708
592
 
709
- return code;
593
+ return snippet;
710
594
 
711
595
  }
712
596
 
713
- getConstructorFromLength( len ) {
597
+ getUniforms( /*shaderStage*/ ) {
714
598
 
715
- return constructors[ len - 1 ];
599
+ console.warn( 'Abstract function.' );
716
600
 
717
601
  }
718
602
 
719
- isTypeMatrix( format ) {
603
+ getCodes( shaderStage ) {
720
604
 
721
- return /^m/.test( format );
605
+ const codes = this.codes[ shaderStage ];
722
606
 
723
- }
724
-
725
- getTypeLength( type ) {
726
-
727
- if ( type === 'f' ) return 1;
607
+ let code = '';
728
608
 
729
- return parseInt( this.colorToVector( type ).substr( 1 ) );
609
+ for ( const nodeCode of codes ) {
730
610
 
731
- }
611
+ code += nodeCode.code + '\n';
732
612
 
733
- getTypeFromLength( len ) {
734
-
735
- if ( len === 1 ) return 'f';
613
+ }
736
614
 
737
- return 'v' + len;
615
+ return code;
738
616
 
739
617
  }
740
618
 
741
- findNode() {
742
-
743
- for ( let i = 0; i < arguments.length; i ++ ) {
744
-
745
- const nodeCandidate = arguments[ i ];
619
+ getHash() {
746
620
 
747
- if ( nodeCandidate !== undefined && nodeCandidate.isNode ) {
748
-
749
- return nodeCandidate;
750
-
751
- }
752
-
753
- }
621
+ return this.vertexShader + this.fragmentShader + this.computeShader;
754
622
 
755
623
  }
756
624
 
757
- resolve() {
758
-
759
- for ( let i = 0; i < arguments.length; i ++ ) {
625
+ setShaderStage( shaderStage ) {
760
626
 
761
- const nodeCandidate = arguments[ i ];
627
+ this.shaderStage = shaderStage;
762
628
 
763
- if ( nodeCandidate !== undefined ) {
629
+ }
764
630
 
765
- if ( nodeCandidate.isNode ) {
631
+ getShaderStage() {
766
632
 
767
- return nodeCandidate;
633
+ return this.shaderStage;
768
634
 
769
- } else if ( nodeCandidate.isTexture ) {
635
+ }
770
636
 
771
- switch ( nodeCandidate.mapping ) {
637
+ setBuildStage( buildStage ) {
772
638
 
773
- case CubeReflectionMapping:
774
- case CubeRefractionMapping:
639
+ this.buildStage = buildStage;
775
640
 
776
- return new CubeTextureNode( nodeCandidate );
641
+ }
777
642
 
778
- break;
643
+ getBuildStage() {
779
644
 
780
- case CubeUVReflectionMapping:
781
- case CubeUVRefractionMapping:
645
+ return this.buildStage;
782
646
 
783
- return new TextureCubeNode( new TextureNode( nodeCandidate ) );
647
+ }
784
648
 
785
- break;
649
+ buildCode() {
786
650
 
787
- default:
651
+ console.warn( 'Abstract function.' );
788
652
 
789
- return new TextureNode( nodeCandidate );
653
+ }
790
654
 
791
- }
655
+ build() {
792
656
 
793
- } else if ( nodeCandidate.isVector2 ) {
657
+ // stage 1: generate shader node
794
658
 
795
- return new Vector2Node( nodeCandidate );
659
+ this.setBuildStage( 'construct' );
796
660
 
797
- } else if ( nodeCandidate.isVector3 ) {
661
+ for ( const shaderStage of shaderStages ) {
798
662
 
799
- return new Vector3Node( nodeCandidate );
663
+ this.setShaderStage( shaderStage );
800
664
 
801
- } else if ( nodeCandidate.isVector4 ) {
665
+ const flowNodes = this.flowNodes[ shaderStage ];
802
666
 
803
- return new Vector4Node( nodeCandidate );
667
+ for ( const node of flowNodes ) {
804
668
 
805
- }
669
+ node.build( this );
806
670
 
807
671
  }
808
672
 
809
673
  }
810
674
 
811
- }
675
+ // stage 2: analyze nodes to possible optimization and validation
812
676
 
813
- format( code, from, to ) {
677
+ this.setBuildStage( 'analyze' );
814
678
 
815
- const typeToType = this.colorToVector( to + ' <- ' + from );
679
+ for ( const shaderStage of shaderStages ) {
816
680
 
817
- switch ( typeToType ) {
681
+ this.setShaderStage( shaderStage );
818
682
 
819
- case 'f <- v2' : return code + '.x';
820
- case 'f <- v3' : return code + '.x';
821
- case 'f <- v4' : return code + '.x';
822
- case 'f <- i' :
823
- case 'f <- b' : return 'float( ' + code + ' )';
683
+ const flowNodes = this.flowNodes[ shaderStage ];
824
684
 
825
- case 'v2 <- f' : return 'vec2( ' + code + ' )';
826
- case 'v2 <- v3': return code + '.xy';
827
- case 'v2 <- v4': return code + '.xy';
828
- case 'v2 <- i' :
829
- case 'v2 <- b' : return 'vec2( float( ' + code + ' ) )';
685
+ for ( const node of flowNodes ) {
830
686
 
831
- case 'v3 <- f' : return 'vec3( ' + code + ' )';
832
- case 'v3 <- v2': return 'vec3( ' + code + ', 0.0 )';
833
- case 'v3 <- v4': return code + '.xyz';
834
- case 'v3 <- i' :
835
- case 'v3 <- b' : return 'vec2( float( ' + code + ' ) )';
687
+ node.build( this );
836
688
 
837
- case 'v4 <- f' : return 'vec4( ' + code + ' )';
838
- case 'v4 <- v2': return 'vec4( ' + code + ', 0.0, 1.0 )';
839
- case 'v4 <- v3': return 'vec4( ' + code + ', 1.0 )';
840
- case 'v4 <- i' :
841
- case 'v4 <- b' : return 'vec4( float( ' + code + ' ) )';
842
-
843
- case 'i <- f' :
844
- case 'i <- b' : return 'int( ' + code + ' )';
845
- case 'i <- v2' : return 'int( ' + code + '.x )';
846
- case 'i <- v3' : return 'int( ' + code + '.x )';
847
- case 'i <- v4' : return 'int( ' + code + '.x )';
848
-
849
- case 'b <- f' : return '( ' + code + ' != 0.0 )';
850
- case 'b <- v2' : return '( ' + code + ' != vec2( 0.0 ) )';
851
- case 'b <- v3' : return '( ' + code + ' != vec3( 0.0 ) )';
852
- case 'b <- v4' : return '( ' + code + ' != vec4( 0.0 ) )';
853
- case 'b <- i' : return '( ' + code + ' != 0 )';
689
+ }
854
690
 
855
691
  }
856
692
 
857
- return code;
693
+ // stage 3: pre-build vertex code used in fragment shader
858
694
 
859
- }
695
+ this.setBuildStage( 'generate' );
860
696
 
861
- getTypeByFormat( format ) {
697
+ if ( this.context.vertex && this.context.vertex.isNode ) {
862
698
 
863
- return convertFormatToType[ format ] || format;
699
+ this.flowNodeFromShaderStage( 'vertex', this.context.vertex );
864
700
 
865
- }
701
+ }
866
702
 
867
- getFormatByType( type ) {
703
+ // stage 4: generate shader
868
704
 
869
- return convertTypeToFormat[ type ] || type;
705
+ this.setBuildStage( 'generate' );
870
706
 
871
- }
707
+ for ( const shaderStage of shaderStages ) {
872
708
 
873
- getUuid( uuid, useCache ) {
709
+ this.setShaderStage( shaderStage );
874
710
 
875
- useCache = useCache !== undefined ? useCache : true;
711
+ const flowNodes = this.flowNodes[ shaderStage ];
876
712
 
877
- if ( useCache && this.cache ) uuid = this.cache + '-' + uuid;
713
+ for ( const node of flowNodes ) {
878
714
 
879
- return uuid;
715
+ this.flowNode( node );
880
716
 
881
- }
717
+ }
882
718
 
883
- getElementByIndex( index ) {
719
+ }
884
720
 
885
- return elements[ index ];
721
+ this.setBuildStage( null );
722
+ this.setShaderStage( null );
886
723
 
887
- }
724
+ // stage 5: build code for a specific output
888
725
 
889
- getIndexByElement( elm ) {
726
+ this.buildCode();
890
727
 
891
- return elements.indexOf( elm );
728
+ return this;
892
729
 
893
730
  }
894
731
 
895
- isShader( shader ) {
896
-
897
- return this.shader === shader;
732
+ format( snippet, fromType, toType ) {
898
733
 
899
- }
734
+ fromType = this.getVectorType( fromType );
735
+ toType = this.getVectorType( toType );
900
736
 
901
- setShader( shader ) {
737
+ if ( fromType === toType || toType === null || this.isReference( toType ) ) {
902
738
 
903
- this.shader = shader;
739
+ return snippet;
904
740
 
905
- return this;
741
+ }
906
742
 
907
- }
743
+ const fromTypeLength = this.getTypeLength( fromType );
744
+ const toTypeLength = this.getTypeLength( toType );
908
745
 
909
- mergeDefines( defines ) {
746
+ if ( fromTypeLength > 4 ) { // fromType is matrix-like
910
747
 
911
- for ( const name in defines ) {
748
+ // @TODO: ignore for now
912
749
 
913
- this.defines[ name ] = defines[ name ];
750
+ return snippet;
914
751
 
915
752
  }
916
753
 
917
- return this.defines;
918
-
919
- }
920
-
921
- mergeUniform( uniforms ) {
754
+ if ( toTypeLength > 4 || toTypeLength === 0 ) { // toType is matrix-like or unknown
922
755
 
923
- for ( const name in uniforms ) {
756
+ // @TODO: ignore for now
924
757
 
925
- this.uniforms[ name ] = uniforms[ name ];
758
+ return snippet;
926
759
 
927
760
  }
928
761
 
929
- return this.uniforms;
762
+ if ( fromTypeLength === toTypeLength ) {
930
763
 
931
- }
764
+ return `${ this.getType( toType ) }( ${ snippet } )`;
932
765
 
933
- getTextureEncodingFromMap( map ) {
934
-
935
- let encoding;
936
-
937
- if ( ! map ) {
766
+ }
938
767
 
939
- encoding = LinearEncoding;
768
+ if ( fromTypeLength > toTypeLength ) {
940
769
 
941
- } else if ( map.isTexture ) {
770
+ return this.format( `${ snippet }.${ 'xyz'.slice( 0, toTypeLength ) }`, this.getTypeFromLength( toTypeLength ), toType );
942
771
 
943
- encoding = map.encoding;
772
+ }
944
773
 
945
- } else if ( map.isWebGLRenderTarget ) {
774
+ if ( toTypeLength === 4 ) { // toType is vec4-like
946
775
 
947
- console.warn( 'THREE.WebGLPrograms.getTextureEncodingFromMap: don\'t use render targets as textures. Use their .texture property instead.' );
948
- encoding = map.texture.encoding;
776
+ return `${ this.getType( toType ) }( ${ this.format( snippet, fromType, 'vec3' ) }, 1.0 )`;
949
777
 
950
778
  }
951
779
 
952
- if ( encoding === LinearEncoding && this.context.gamma ) {
780
+ if ( fromTypeLength === 2 ) { // fromType is vec2-like and toType is vec3-like
953
781
 
954
- encoding = sRGBEncoding;
782
+ return `${ this.getType( toType ) }( ${ this.format( snippet, fromType, 'vec2' ) }, 0.0 )`;
955
783
 
956
784
  }
957
785
 
958
- return encoding;
786
+ return `${ this.getType( toType ) }( ${ snippet } )`; // fromType is float-like
959
787
 
960
788
  }
961
789
 
962
- }
790
+ getSignature() {
963
791
 
964
- function sortByPosition( a, b ) {
792
+ return `// Three.js r${ REVISION } - NodeMaterial System\n`;
965
793
 
966
- return a.deps.length - b.deps.length;
794
+ }
967
795
 
968
796
  }
969
797
 
970
- export { NodeBuilder };
798
+ export default NodeBuilder;