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,48 +1,68 @@
1
- import { LinearEncoding } from 'three';
2
-
3
- import WebGPUNodeUniformsGroup from './WebGPUNodeUniformsGroup.js';
1
+ import WebGPUUniformsGroup from '../WebGPUUniformsGroup.js';
4
2
  import {
5
3
  FloatNodeUniform, Vector2NodeUniform, Vector3NodeUniform, Vector4NodeUniform,
6
4
  ColorNodeUniform, Matrix3NodeUniform, Matrix4NodeUniform
7
5
  } from './WebGPUNodeUniform.js';
8
6
  import WebGPUNodeSampler from './WebGPUNodeSampler.js';
9
- import { WebGPUNodeSampledTexture } from './WebGPUNodeSampledTexture.js';
7
+ import { WebGPUNodeSampledTexture, WebGPUNodeSampledCubeTexture } from './WebGPUNodeSampledTexture.js';
10
8
 
11
9
  import WebGPUUniformBuffer from '../WebGPUUniformBuffer.js';
10
+ import WebGPUStorageBuffer from '../WebGPUStorageBuffer.js';
12
11
  import { getVectorLength, getStrideLength } from '../WebGPUBufferUtils.js';
13
12
 
14
- import VarNode from '../../nodes/core/VarNode.js';
15
- import CodeNode from '../../nodes/core/CodeNode.js';
16
- import BypassNode from '../../nodes/core/BypassNode.js';
17
- import ExpressionNode from '../../nodes/core/ExpressionNode.js';
18
- import NodeBuilder from '../../nodes/core/NodeBuilder.js';
19
- import MaterialNode from '../../nodes/accessors/MaterialNode.js';
20
- import PositionNode from '../../nodes/accessors/PositionNode.js';
21
- import NormalNode from '../../nodes/accessors/NormalNode.js';
22
- import ModelViewProjectionNode from '../../nodes/accessors/ModelViewProjectionNode.js';
23
- import SkinningNode from '../../nodes/accessors/SkinningNode.js';
24
- import ColorSpaceNode from '../../nodes/display/ColorSpaceNode.js';
25
- import LightContextNode from '../../nodes/lights/LightContextNode.js';
26
- import OperatorNode from '../../nodes/math/OperatorNode.js';
27
- import WGSLNodeParser from '../../nodes/parsers/WGSLNodeParser.js';
28
- import { vec4, join, nodeObject } from '../../nodes/ShaderNode.js';
29
- import { getRoughness } from '../../nodes/functions/PhysicalMaterialFunctions.js';
13
+ import NodeBuilder from 'three-nodes/core/NodeBuilder.js';
14
+ import WGSLNodeParser from 'three-nodes/parsers/WGSLNodeParser.js';
15
+
16
+ import CodeNode from 'three-nodes/core/CodeNode.js';
17
+
18
+ import { NodeMaterial } from 'three-nodes/materials/Materials.js';
19
+
20
+ const gpuShaderStageLib = {
21
+ 'vertex': GPUShaderStage.VERTEX,
22
+ 'fragment': GPUShaderStage.FRAGMENT,
23
+ 'compute': GPUShaderStage.COMPUTE
24
+ };
25
+
26
+ const supports = {
27
+ instance: true
28
+ };
30
29
 
31
30
  const wgslTypeLib = {
32
31
  float: 'f32',
33
32
  int: 'i32',
33
+ uint: 'u32',
34
+ bool: 'bool',
35
+
34
36
  vec2: 'vec2<f32>',
37
+ ivec2: 'vec2<i32>',
38
+ uvec2: 'vec2<u32>',
39
+ bvec2: 'vec2<bool>',
40
+
35
41
  vec3: 'vec3<f32>',
42
+ ivec3: 'vec3<i32>',
43
+ uvec3: 'vec3<u32>',
44
+ bvec3: 'vec3<bool>',
45
+
36
46
  vec4: 'vec4<f32>',
47
+ ivec4: 'vec4<i32>',
37
48
  uvec4: 'vec4<u32>',
38
- bvec3: 'vec3<bool>',
49
+ bvec4: 'vec4<bool>',
50
+
39
51
  mat3: 'mat3x3<f32>',
40
- mat4: 'mat4x4<f32>'
52
+ imat3: 'mat3x3<i32>',
53
+ umat3: 'mat3x3<u32>',
54
+ bmat3: 'mat3x3<bool>',
55
+
56
+ mat4: 'mat4x4<f32>',
57
+ imat4: 'mat4x4<i32>',
58
+ umat4: 'mat4x4<u32>',
59
+ bmat4: 'mat4x4<bool>'
41
60
  };
42
61
 
43
62
  const wgslMethods = {
44
63
  dFdx: 'dpdx',
45
- dFdy: 'dpdy'
64
+ dFdy: 'dpdy',
65
+ inversesqrt: 'inverseSqrt'
46
66
  };
47
67
 
48
68
  const wgslPolyfill = {
@@ -67,253 +87,117 @@ fn repeatWrapping( uv : vec2<f32>, dimension : vec2<i32> ) -> vec2<i32> {
67
87
 
68
88
  return ( ( uvScaled % dimension ) + dimension ) % dimension;
69
89
 
70
- }
71
- ` ),
72
- inversesqrt: new CodeNode( `
73
- fn inversesqrt( x : f32 ) -> f32 {
74
-
75
- return 1.0 / sqrt( x );
76
-
77
90
  }
78
91
  ` )
79
92
  };
80
93
 
81
94
  class WebGPUNodeBuilder extends NodeBuilder {
82
95
 
83
- constructor( object, renderer, lightNode = null ) {
96
+ constructor( object, renderer ) {
84
97
 
85
98
  super( object, renderer, new WGSLNodeParser() );
86
99
 
87
- this.lightNode = lightNode;
88
-
89
- this.bindings = { vertex: [], fragment: [] };
90
- this.bindingsOffset = { vertex: 0, fragment: 0 };
100
+ this.bindings = { vertex: [], fragment: [], compute: [] };
101
+ this.bindingsOffset = { vertex: 0, fragment: 0, compute: 0 };
91
102
 
92
103
  this.uniformsGroup = {};
93
104
 
94
- this._parseObject();
105
+ this.builtins = {
106
+ vertex: new Map(),
107
+ fragment: new Map(),
108
+ compute: new Map(),
109
+ attribute: new Map()
110
+ };
95
111
 
96
112
  }
97
113
 
98
- _parseObject() {
99
-
100
- const object = this.object;
101
- const material = this.material;
102
-
103
- // parse inputs
104
-
105
- if ( material.isMeshStandardMaterial || material.isMeshBasicMaterial || material.isPointsMaterial || material.isLineBasicMaterial ) {
106
-
107
- let lightNode = material.lightNode;
108
-
109
- // VERTEX STAGE
110
-
111
- let vertex = new PositionNode( PositionNode.GEOMETRY );
112
-
113
- if ( lightNode === null && this.lightNode && this.lightNode.hasLights === true ) {
114
-
115
- lightNode = this.lightNode;
116
-
117
- }
118
-
119
- if ( material.positionNode && material.positionNode.isNode ) {
120
-
121
- const assignPositionNode = new OperatorNode( '=', new PositionNode( PositionNode.LOCAL ), material.positionNode );
122
-
123
- vertex = new BypassNode( vertex, assignPositionNode );
124
-
125
- }
126
-
127
- if ( object.isSkinnedMesh === true ) {
128
-
129
- vertex = new BypassNode( vertex, new SkinningNode( object ) );
130
-
131
- }
132
-
133
- this.context.vertex = vertex;
134
-
135
- this.addFlow( 'vertex', new VarNode( new ModelViewProjectionNode(), 'MVP', 'vec4' ) );
136
-
137
- // COLOR
138
-
139
- let colorNode = null;
140
-
141
- if ( material.colorNode && material.colorNode.isNode ) {
142
-
143
- colorNode = material.colorNode;
144
-
145
- } else {
146
-
147
- colorNode = new MaterialNode( MaterialNode.COLOR );
148
-
149
- }
150
-
151
- colorNode = this.addFlow( 'fragment', new VarNode( colorNode, 'Color', 'vec4' ) );
152
-
153
- const diffuseColorNode = this.addFlow( 'fragment', new VarNode( colorNode, 'DiffuseColor', 'vec4' ) );
154
-
155
- // OPACITY
156
-
157
- let opacityNode = null;
158
-
159
- if ( material.opacityNode && material.opacityNode.isNode ) {
160
-
161
- opacityNode = material.opacityNode;
162
-
163
- } else {
164
-
165
- opacityNode = new VarNode( new MaterialNode( MaterialNode.OPACITY ) );
166
-
167
- }
168
-
169
- this.addFlow( 'fragment', new VarNode( opacityNode, 'OPACITY', 'float' ) );
170
-
171
- this.addFlow( 'fragment', new ExpressionNode( 'DiffuseColor.a = DiffuseColor.a * OPACITY;' ) );
172
-
173
- // ALPHA TEST
174
-
175
- let alphaTest = null;
176
-
177
- if ( material.alphaTestNode && material.alphaTestNode.isNode ) {
178
-
179
- alphaTest = material.alphaTestNode;
180
-
181
- } else if ( material.alphaTest > 0 ) {
182
-
183
- alphaTest = new MaterialNode( MaterialNode.ALPHA_TEST );
184
-
185
- }
186
-
187
- if ( alphaTest !== null ) {
188
-
189
- this.addFlow( 'fragment', new VarNode( alphaTest, 'AlphaTest', 'float' ) );
190
-
191
- this.addFlow( 'fragment', new ExpressionNode( 'if ( DiffuseColor.a <= AlphaTest ) { discard; }' ) );
192
-
193
- }
194
-
195
- if ( material.isMeshStandardMaterial ) {
196
-
197
- // METALNESS
198
-
199
- let metalnessNode = null;
200
-
201
- if ( material.metalnessNode && material.metalnessNode.isNode ) {
114
+ build() {
202
115
 
203
- metalnessNode = material.metalnessNode;
116
+ const { object, material } = this;
204
117
 
205
- } else {
206
-
207
- metalnessNode = new MaterialNode( MaterialNode.METALNESS );
208
-
209
- }
118
+ if ( material !== null ) {
210
119
 
211
- this.addFlow( 'fragment', new VarNode( metalnessNode, 'Metalness', 'float' ) );
212
-
213
- this.addFlow( 'fragment', new ExpressionNode( 'DiffuseColor = vec4<f32>( DiffuseColor.rgb * ( 1.0 - Metalness ), DiffuseColor.a );' ) );
214
-
215
- // ROUGHNESS
216
-
217
- let roughnessNode = null;
218
-
219
- if ( material.roughnessNode && material.roughnessNode.isNode ) {
220
-
221
- roughnessNode = material.roughnessNode;
222
-
223
- } else {
120
+ NodeMaterial.fromMaterial( material ).build( this );
224
121
 
225
- roughnessNode = new MaterialNode( MaterialNode.ROUGHNESS );
226
-
227
- }
228
-
229
- roughnessNode = getRoughness( { roughness: roughnessNode } );
122
+ } else {
230
123
 
231
- this.addFlow( 'fragment', new VarNode( roughnessNode, 'Roughness', 'float' ) );
124
+ this.addFlow( 'compute', object );
232
125
 
233
- // SPECULAR_TINT
126
+ }
234
127
 
235
- this.addFlow( 'fragment', new VarNode( new ExpressionNode( 'mix( vec3<f32>( 0.04 ), Color.rgb, Metalness )', 'vec3' ), 'SpecularColor', 'color' ) );
128
+ return super.build();
236
129
 
237
- // NORMAL_VIEW
130
+ }
238
131
 
239
- let normalNode = null;
132
+ addFlowCode( code ) {
240
133
 
241
- if ( material.normalNode && material.normalNode.isNode ) {
134
+ if ( ! /;\s*$/.test( code ) ) {
242
135
 
243
- normalNode = material.normalNode;
136
+ code += ';';
244
137
 
245
- } else {
138
+ }
246
139
 
247
- normalNode = new NormalNode( NormalNode.VIEW );
140
+ super.addFlowCode( code + '\n\t' );
248
141
 
249
- }
142
+ }
250
143
 
251
- this.addFlow( 'fragment', new VarNode( normalNode, 'TransformedNormalView', 'vec3' ) );
144
+ getSampler( textureProperty, uvSnippet, shaderStage = this.shaderStage ) {
252
145
 
253
- }
254
-
255
- // LIGHT
146
+ if ( shaderStage === 'fragment' ) {
256
147
 
257
- let outputNode = diffuseColorNode;
148
+ return `textureSample( ${textureProperty}, ${textureProperty}_sampler, ${uvSnippet} )`;
258
149
 
259
- if ( lightNode && lightNode.isNode ) {
150
+ } else {
260
151
 
261
- const lightContextNode = new LightContextNode( lightNode );
152
+ this._include( 'repeatWrapping' );
262
153
 
263
- outputNode = this.addFlow( 'fragment', new VarNode( lightContextNode, 'Light', 'vec3' ) );
154
+ const dimension = `textureDimensions( ${textureProperty}, 0 )`;
264
155
 
265
- }
156
+ return `textureLoad( ${textureProperty}, repeatWrapping( ${uvSnippet}, ${dimension} ), 0 )`;
266
157
 
267
- // RESULT
158
+ }
268
159
 
269
- const outputNodeObj = nodeObject( outputNode );
160
+ }
270
161
 
271
- outputNode = join( outputNodeObj.x, outputNodeObj.y, outputNodeObj.z, nodeObject( diffuseColorNode ).w );
162
+ getSamplerLevel( textureProperty, uvSnippet, biasSnippet, shaderStage = this.shaderStage ) {
272
163
 
273
- //
164
+ if ( shaderStage === 'fragment' ) {
274
165
 
275
- const outputEncoding = this.renderer.outputEncoding;
166
+ return `textureSampleLevel( ${textureProperty}, ${textureProperty}_sampler, ${uvSnippet}, ${biasSnippet} )`;
276
167
 
277
- if ( outputEncoding !== LinearEncoding ) {
168
+ } else {
278
169
 
279
- outputNode = new ColorSpaceNode( ColorSpaceNode.LINEAR_TO_LINEAR, outputNode );
280
- outputNode.fromEncoding( outputEncoding );
170
+ this._include( 'repeatWrapping' );
281
171
 
282
- }
172
+ const dimension = `textureDimensions( ${textureProperty}, 0 )`;
283
173
 
284
- this.addFlow( 'fragment', new VarNode( outputNode, 'Output', 'vec4' ) );
174
+ return `textureLoad( ${textureProperty}, repeatWrapping( ${uvSnippet}, ${dimension} ), i32( ${biasSnippet} ) )`;
285
175
 
286
176
  }
287
177
 
288
178
  }
289
179
 
290
- addFlowCode( code ) {
291
-
292
- if ( ! /;\s*$/.test( code ) ) {
293
-
294
- code += ';';
180
+ getTexture( textureProperty, uvSnippet, shaderStage = this.shaderStage ) {
295
181
 
296
- }
297
-
298
- super.addFlowCode( code + '\n\t' );
182
+ return this.getSampler( textureProperty, uvSnippet, shaderStage );
299
183
 
300
184
  }
301
185
 
302
- getTexture( textureProperty, uvSnippet, biasSnippet, shaderStage = this.shaderStage ) {
186
+ getTextureLevel( textureProperty, uvSnippet, biasSnippet, shaderStage = this.shaderStage ) {
303
187
 
304
- if ( shaderStage === 'fragment' ) {
188
+ return this.getSamplerLevel( textureProperty, uvSnippet, biasSnippet, shaderStage );
305
189
 
306
- return `textureSample( ${textureProperty}, ${textureProperty}_sampler, ${uvSnippet} )`;
190
+ }
307
191
 
308
- } else {
192
+ getCubeTexture( textureProperty, uvSnippet, shaderStage = this.shaderStage ) {
309
193
 
310
- this._include( 'repeatWrapping' );
194
+ return this.getSampler( textureProperty, uvSnippet, shaderStage );
311
195
 
312
- const dimension = `textureDimensions( ${textureProperty}, 0 )`;
196
+ }
313
197
 
314
- return `textureLoad( ${textureProperty}, repeatWrapping( ${uvSnippet}, ${dimension} ), 0 )`;
198
+ getCubeTextureLevel( textureProperty, uvSnippet, biasSnippet, shaderStage = this.shaderStage ) {
315
199
 
316
- }
200
+ return this.getSamplerLevel( textureProperty, uvSnippet, biasSnippet, shaderStage );
317
201
 
318
202
  }
319
203
 
@@ -332,13 +216,13 @@ class WebGPUNodeBuilder extends NodeBuilder {
332
216
  const name = node.name;
333
217
  const type = node.type;
334
218
 
335
- if ( type === 'texture' ) {
219
+ if ( type === 'texture' || type === 'cubeTexture' ) {
336
220
 
337
221
  return name;
338
222
 
339
- } else if ( type === 'buffer' ) {
223
+ } else if ( type === 'buffer' || type === 'storageBuffer' ) {
340
224
 
341
- return `NodeBuffer.${name}`;
225
+ return `NodeBuffer_${node.node.id}.${name}`;
342
226
 
343
227
  } else {
344
228
 
@@ -356,7 +240,7 @@ class WebGPUNodeBuilder extends NodeBuilder {
356
240
 
357
241
  const bindings = this.bindings;
358
242
 
359
- return [ ...bindings.vertex, ...bindings.fragment ];
243
+ return this.material !== null ? [ ...bindings.vertex, ...bindings.fragment ] : bindings.compute;
360
244
 
361
245
  }
362
246
 
@@ -371,10 +255,21 @@ class WebGPUNodeBuilder extends NodeBuilder {
371
255
 
372
256
  const bindings = this.bindings[ shaderStage ];
373
257
 
374
- if ( type === 'texture' ) {
258
+ if ( type === 'texture' || type === 'cubeTexture' ) {
375
259
 
376
260
  const sampler = new WebGPUNodeSampler( `${uniformNode.name}_sampler`, uniformNode.node );
377
- const texture = new WebGPUNodeSampledTexture( uniformNode.name, uniformNode.node );
261
+
262
+ let texture = null;
263
+
264
+ if ( type === 'texture' ) {
265
+
266
+ texture = new WebGPUNodeSampledTexture( uniformNode.name, uniformNode.node );
267
+
268
+ } else if ( type === 'cubeTexture' ) {
269
+
270
+ texture = new WebGPUNodeSampledCubeTexture( uniformNode.name, uniformNode.node );
271
+
272
+ }
378
273
 
379
274
  // add first textures in sequence and group for last
380
275
  const lastBinding = bindings[ bindings.length - 1 ];
@@ -392,13 +287,13 @@ class WebGPUNodeBuilder extends NodeBuilder {
392
287
 
393
288
  uniformGPU = [ texture ];
394
289
 
395
-
396
290
  }
397
291
 
292
+ } else if ( type === 'buffer' || type === 'storageBuffer' ) {
398
293
 
399
- } else if ( type === 'buffer' ) {
400
-
401
- const buffer = new WebGPUUniformBuffer( 'NodeBuffer', node.value );
294
+ const bufferClass = type === 'storageBuffer' ? WebGPUStorageBuffer : WebGPUUniformBuffer;
295
+ const buffer = new bufferClass( 'NodeBuffer_' + node.id, node.value );
296
+ buffer.setVisibility( gpuShaderStageLib[ shaderStage ] );
402
297
 
403
298
  // add first textures in sequence and group for last
404
299
  const lastBinding = bindings[ bindings.length - 1 ];
@@ -414,7 +309,8 @@ class WebGPUNodeBuilder extends NodeBuilder {
414
309
 
415
310
  if ( uniformsGroup === undefined ) {
416
311
 
417
- uniformsGroup = new WebGPUNodeUniformsGroup( shaderStage );
312
+ uniformsGroup = new WebGPUUniformsGroup( 'nodeUniforms' );
313
+ uniformsGroup.setVisibility( gpuShaderStageLib[ shaderStage ] );
418
314
 
419
315
  this.uniformsGroup[ shaderStage ] = uniformsGroup;
420
316
 
@@ -422,13 +318,13 @@ class WebGPUNodeBuilder extends NodeBuilder {
422
318
 
423
319
  }
424
320
 
425
- if ( node.isArrayInputNode === true ) {
321
+ if ( node.isArrayUniformNode === true ) {
426
322
 
427
323
  uniformGPU = [];
428
324
 
429
- for ( const inputNode of node.nodes ) {
325
+ for ( const uniformNode of node.nodes ) {
430
326
 
431
- const uniformNodeGPU = this._getNodeUniform( inputNode, type );
327
+ const uniformNodeGPU = this._getNodeUniform( uniformNode, type );
432
328
 
433
329
  // fit bounds to buffer
434
330
  uniformNodeGPU.boundary = getVectorLength( uniformNodeGPU.itemSize );
@@ -464,69 +360,110 @@ class WebGPUNodeBuilder extends NodeBuilder {
464
360
 
465
361
  }
466
362
 
363
+ isReference( type ) {
364
+
365
+ return super.isReference( type ) || type === 'texture_2d' || type === 'texture_cube';
366
+
367
+ }
368
+
369
+ getBuiltin( name, property, type, shaderStage = this.shaderStage ) {
370
+
371
+ const map = this.builtins[ shaderStage ];
372
+
373
+ if ( map.has( name ) === false ) {
374
+
375
+ map.set( name, {
376
+ name,
377
+ property,
378
+ type
379
+ } );
380
+
381
+ }
382
+
383
+ return property;
384
+
385
+ }
386
+
387
+ getInstanceIndex() {
388
+
389
+ if ( this.shaderStage === 'vertex' ) {
390
+
391
+ return this.getBuiltin( 'instance_index', 'instanceIndex', 'u32', 'attribute' );
392
+
393
+ }
394
+
395
+ return 'instanceIndex';
396
+
397
+ }
398
+
399
+ getFrontFacing() {
400
+
401
+ return this.getBuiltin( 'front_facing', 'isFront', 'bool' );
402
+
403
+ }
404
+
467
405
  getAttributes( shaderStage ) {
468
406
 
469
- let snippet = '';
407
+ const snippets = [];
470
408
 
471
- if ( shaderStage === 'vertex' ) {
409
+ if ( shaderStage === 'vertex' || shaderStage === 'compute' ) {
410
+
411
+ if ( shaderStage === 'compute' ) {
412
+
413
+ this.getBuiltin( 'global_invocation_id', 'id', 'vec3<u32>', 'attribute' );
414
+
415
+ }
416
+
417
+ for ( const { name, property, type } of this.builtins.attribute.values() ) {
418
+
419
+ snippets.push( `@builtin( ${name} ) ${property} : ${type}` );
420
+
421
+ }
472
422
 
473
423
  const attributes = this.attributes;
474
424
  const length = attributes.length;
475
425
 
476
- snippet += '\n';
477
-
478
426
  for ( let index = 0; index < length; index ++ ) {
479
427
 
480
428
  const attribute = attributes[ index ];
481
429
  const name = attribute.name;
482
430
  const type = this.getType( attribute.type );
483
431
 
484
- snippet += `\t[[ location( ${index} ) ]] ${ name } : ${ type }`;
485
-
486
- if ( index + 1 < length ) {
487
-
488
- snippet += ',\n';
489
-
490
- }
432
+ snippets.push( `@location( ${index} ) ${ name } : ${ type }` );
491
433
 
492
434
  }
493
435
 
494
- snippet += '\n';
495
-
496
436
  }
497
437
 
498
- return snippet;
438
+ return snippets.join( ',\n\t' );
499
439
 
500
440
  }
501
441
 
502
442
  getVars( shaderStage ) {
503
443
 
504
- let snippet = '';
505
-
444
+ const snippets = [];
506
445
  const vars = this.vars[ shaderStage ];
507
446
 
508
- for ( let index = 0; index < vars.length; index ++ ) {
509
-
510
- const variable = vars[ index ];
447
+ for (const variable of vars) {
511
448
 
512
449
  const name = variable.name;
513
450
  const type = this.getType( variable.type );
514
451
 
515
- snippet += `var ${name} : ${type}; `;
452
+ snippets.push( `\tvar ${name} : ${type};` );
516
453
 
517
454
  }
518
455
 
519
- return snippet;
456
+ return `\n${ snippets.join( '\n' ) }\n`;
520
457
 
521
458
  }
522
459
 
523
460
  getVarys( shaderStage ) {
524
461
 
525
- let snippet = '';
462
+ const snippets = [];
526
463
 
527
464
  if ( shaderStage === 'vertex' ) {
528
465
 
529
- snippet += '\t[[ builtin( position ) ]] Vertex: vec4<f32>;\n';
466
+ this.getBuiltin( 'position', 'Vertex', 'vec4<f32>', 'vertex' );
530
467
 
531
468
  const varys = this.varys;
532
469
 
@@ -534,37 +471,33 @@ class WebGPUNodeBuilder extends NodeBuilder {
534
471
 
535
472
  const vary = varys[ index ];
536
473
 
537
- snippet += `\t[[ location( ${index} ) ]] ${ vary.name } : ${ this.getType( vary.type ) };\n`;
474
+ snippets.push( `@location( ${index} ) ${ vary.name } : ${ this.getType( vary.type ) }` );
538
475
 
539
476
  }
540
477
 
541
- snippet = this._getWGSLStruct( 'NodeVarysStruct', snippet );
542
-
543
478
  } else if ( shaderStage === 'fragment' ) {
544
479
 
545
480
  const varys = this.varys;
546
481
 
547
- snippet += '\n';
548
-
549
482
  for ( let index = 0; index < varys.length; index ++ ) {
550
483
 
551
484
  const vary = varys[ index ];
552
485
 
553
- snippet += `\t[[ location( ${index} ) ]] ${ vary.name } : ${ this.getType( vary.type ) }`;
486
+ snippets.push( `@location( ${index} ) ${ vary.name } : ${ this.getType( vary.type ) }` );
554
487
 
555
- if ( index + 1 < varys.length ) {
556
-
557
- snippet += ',\n';
488
+ }
558
489
 
559
- }
490
+ }
560
491
 
561
- }
492
+ for ( const { name, property, type } of this.builtins[ shaderStage ].values() ) {
562
493
 
563
- snippet += '\n';
494
+ snippets.push( `@builtin( ${name} ) ${property} : ${type}` );
564
495
 
565
496
  }
566
497
 
567
- return snippet;
498
+ const code = snippets.join( ',\n\t' );
499
+
500
+ return shaderStage === 'vertex' ? this._getWGSLStruct( 'NodeVarysStruct', '\t' + code ) : code;
568
501
 
569
502
  }
570
503
 
@@ -572,8 +505,9 @@ class WebGPUNodeBuilder extends NodeBuilder {
572
505
 
573
506
  const uniforms = this.uniforms[ shaderStage ];
574
507
 
575
- let snippet = '';
576
- let groupSnippet = '';
508
+ const bindingSnippets = [];
509
+ const bufferSnippets = [];
510
+ const groupSnippets = [];
577
511
 
578
512
  let index = this.bindingsOffset[ shaderStage ];
579
513
 
@@ -583,21 +517,33 @@ class WebGPUNodeBuilder extends NodeBuilder {
583
517
 
584
518
  if ( shaderStage === 'fragment' ) {
585
519
 
586
- snippet += `[[ group( 0 ), binding( ${index ++} ) ]] var ${uniform.name}_sampler : sampler; `;
520
+ bindingSnippets.push( `@group( 0 ) @binding( ${index ++} ) var ${uniform.name}_sampler : sampler;` );
587
521
 
588
522
  }
589
523
 
590
- snippet += `[[ group( 0 ), binding( ${index ++} ) ]] var ${uniform.name} : texture_2d<f32>; `;
524
+ bindingSnippets.push( `@group( 0 ) @binding( ${index ++} ) var ${uniform.name} : texture_2d<f32>;` );
525
+
526
+ } else if ( uniform.type === 'cubeTexture' ) {
591
527
 
592
- } else if ( uniform.type === 'buffer' ) {
528
+ if ( shaderStage === 'fragment' ) {
529
+
530
+ bindingSnippets.push( `@group( 0 ) @binding( ${index ++} ) var ${uniform.name}_sampler : sampler;` );
531
+
532
+ }
533
+
534
+ bindingSnippets.push( `@group( 0 ) @binding( ${index ++} ) var ${uniform.name} : texture_cube<f32>;` );
535
+
536
+ } else if ( uniform.type === 'buffer' || uniform.type === 'storageBuffer' ) {
593
537
 
594
538
  const bufferNode = uniform.node;
595
539
  const bufferType = this.getType( bufferNode.bufferType );
596
540
  const bufferCount = bufferNode.bufferCount;
597
541
 
598
- const bufferSnippet = `\t${uniform.name} : array< ${bufferType}, ${bufferCount} >;\n`;
542
+ const bufferCountSnippet = bufferCount > 0 ? ', ' + bufferCount : '';
543
+ const bufferSnippet = `\t${uniform.name} : array< ${bufferType}${bufferCountSnippet} >\n`;
544
+ const bufferAccessMode = bufferNode.isStorageBufferNode ? 'storage,read_write' : 'uniform';
599
545
 
600
- snippet += this._getWGSLUniforms( 'NodeBuffer', bufferSnippet, index ++ ) + '\n\n';
546
+ bufferSnippets.push( this._getWGSLStructBinding( 'NodeBuffer_' + bufferNode.id, bufferSnippet, bufferAccessMode, index ++ ) );
601
547
 
602
548
  } else {
603
549
 
@@ -607,11 +553,11 @@ class WebGPUNodeBuilder extends NodeBuilder {
607
553
 
608
554
  const length = uniform.value.length;
609
555
 
610
- groupSnippet += `uniform ${vectorType}[ ${length} ] ${uniform.name}; `;
556
+ groupSnippets.push( `uniform ${vectorType}[ ${length} ] ${uniform.name}` );
611
557
 
612
558
  } else {
613
559
 
614
- groupSnippet += `\t${uniform.name} : ${ vectorType};\n`;
560
+ groupSnippets.push( `\t${uniform.name} : ${ vectorType}` );
615
561
 
616
562
  }
617
563
 
@@ -619,32 +565,35 @@ class WebGPUNodeBuilder extends NodeBuilder {
619
565
 
620
566
  }
621
567
 
622
- if ( groupSnippet ) {
568
+ let code = bindingSnippets.join( '\n' );
569
+ code += bufferSnippets.join( '\n' );
623
570
 
624
- snippet += this._getWGSLUniforms( 'NodeUniforms', groupSnippet, index ++ );
571
+ if ( groupSnippets.length > 0 ) {
572
+
573
+ code += this._getWGSLStructBinding( 'NodeUniforms', groupSnippets.join( ',\n' ), 'uniform', index ++ );
625
574
 
626
575
  }
627
576
 
628
- return snippet;
577
+ return code;
629
578
 
630
579
  }
631
580
 
632
581
  buildCode() {
633
582
 
634
- const shadersData = { fragment: {}, vertex: {} };
583
+ const shadersData = this.material !== null ? { fragment: {}, vertex: {} } : { compute: {} };
635
584
 
636
585
  for ( const shaderStage in shadersData ) {
637
586
 
638
587
  let flow = '// code\n';
639
588
  flow += `\t${ this.flowCode[ shaderStage ] }`;
640
- flow += '\n';
589
+ flow += '\n\t';
641
590
 
642
591
  const flowNodes = this.flowNodes[ shaderStage ];
643
592
  const mainNode = flowNodes[ flowNodes.length - 1 ];
644
593
 
645
594
  for ( const node of flowNodes ) {
646
595
 
647
- const flowSlotData = this.getFlowData( shaderStage, node );
596
+ const flowSlotData = this.getFlowData( node/*, shaderStage*/ );
648
597
  const slotName = node.name;
649
598
 
650
599
  if ( slotName ) {
@@ -657,7 +606,7 @@ class WebGPUNodeBuilder extends NodeBuilder {
657
606
 
658
607
  flow += `${ flowSlotData.code }\n\t`;
659
608
 
660
- if ( node === mainNode ) {
609
+ if ( node === mainNode && shaderStage !== 'compute' ) {
661
610
 
662
611
  flow += '// FLOW RESULT\n\t';
663
612
 
@@ -688,8 +637,16 @@ class WebGPUNodeBuilder extends NodeBuilder {
688
637
 
689
638
  }
690
639
 
691
- this.vertexShader = this._getWGSLVertexCode( shadersData.vertex );
692
- this.fragmentShader = this._getWGSLFragmentCode( shadersData.fragment );
640
+ if ( this.material !== null ) {
641
+
642
+ this.vertexShader = this._getWGSLVertexCode( shadersData.vertex );
643
+ this.fragmentShader = this._getWGSLFragmentCode( shadersData.fragment );
644
+
645
+ } else {
646
+
647
+ this.computeShader = this._getWGSLComputeCode( shadersData.compute, ( this.object.workgroupSize || [ 64 ] ).join( ', ' ) );
648
+
649
+ }
693
650
 
694
651
  }
695
652
 
@@ -711,6 +668,12 @@ class WebGPUNodeBuilder extends NodeBuilder {
711
668
 
712
669
  }
713
670
 
671
+ isAvailable( name ) {
672
+
673
+ return supports[ name ] === true;
674
+
675
+ }
676
+
714
677
  _include( name ) {
715
678
 
716
679
  wgslPolyfill[ name ].build( this );
@@ -744,7 +707,7 @@ ${shaderData.varys}
744
707
  // codes
745
708
  ${shaderData.codes}
746
709
 
747
- [[ stage( vertex ) ]]
710
+ @stage( vertex )
748
711
  fn main( ${shaderData.attributes} ) -> NodeVarysStruct {
749
712
 
750
713
  // system
@@ -773,8 +736,37 @@ ${shaderData.uniforms}
773
736
  // codes
774
737
  ${shaderData.codes}
775
738
 
776
- [[ stage( fragment ) ]]
777
- fn main( ${shaderData.varys} ) -> [[ location( 0 ) ]] vec4<f32> {
739
+ @stage( fragment )
740
+ fn main( ${shaderData.varys} ) -> @location( 0 ) vec4<f32> {
741
+
742
+ // vars
743
+ ${shaderData.vars}
744
+
745
+ // flow
746
+ ${shaderData.flow}
747
+
748
+ }
749
+ `;
750
+
751
+ }
752
+
753
+ _getWGSLComputeCode( shaderData, workgroupSize ) {
754
+
755
+ return `${ this.getSignature() }
756
+ // system
757
+ var<private> instanceIndex : u32;
758
+
759
+ // uniforms
760
+ ${shaderData.uniforms}
761
+
762
+ // codes
763
+ ${shaderData.codes}
764
+
765
+ @stage( compute ) @workgroup_size( ${workgroupSize} )
766
+ fn main( ${shaderData.attributes} ) {
767
+
768
+ // system
769
+ instanceIndex = id.x;
778
770
 
779
771
  // vars
780
772
  ${shaderData.vars}
@@ -791,19 +783,19 @@ fn main( ${shaderData.varys} ) -> [[ location( 0 ) ]] vec4<f32> {
791
783
 
792
784
  return `
793
785
  struct ${name} {
794
- \n${vars}
786
+ ${vars}
795
787
  };`;
796
788
 
797
789
  }
798
790
 
799
- _getWGSLUniforms( name, vars, binding = 0, group = 0 ) {
791
+ _getWGSLStructBinding( name, vars, access, binding = 0, group = 0 ) {
800
792
 
801
793
  const structName = name + 'Struct';
802
794
  const structSnippet = this._getWGSLStruct( structName, vars );
803
795
 
804
796
  return `${structSnippet}
805
- [[ binding( ${binding} ), group( ${group} ) ]]
806
- var<uniform> ${name} : ${structName};`;
797
+ @binding( ${binding} ) @group( ${group} )
798
+ var<${access}> ${name} : ${structName};`;
807
799
 
808
800
  }
809
801