super-three 0.136.1 → 0.144.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 (842) hide show
  1. package/README.md +31 -33
  2. package/build/three.cjs +36413 -0
  3. package/build/three.js +5108 -5809
  4. package/build/three.min.js +2 -2
  5. package/build/three.module.js +7877 -8586
  6. package/examples/js/animation/CCDIKSolver.js +3 -2
  7. package/examples/js/animation/MMDAnimationHelper.js +3 -1
  8. package/examples/js/animation/MMDPhysics.js +3 -18
  9. package/examples/js/controls/ArcballControls.js +19 -4
  10. package/examples/js/controls/FirstPersonControls.js +0 -7
  11. package/examples/js/controls/FlyControls.js +0 -8
  12. package/examples/js/controls/OrbitControls.js +0 -4
  13. package/examples/js/controls/PointerLockControls.js +3 -10
  14. package/examples/js/controls/TrackballControls.js +1 -6
  15. package/examples/js/controls/TransformControls.js +25 -22
  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 +9 -6
  20. package/examples/js/effects/AsciiEffect.js +10 -29
  21. package/examples/js/effects/OutlineEffect.js +4 -24
  22. package/examples/js/effects/ParallaxBarrierEffect.js +2 -2
  23. package/examples/js/effects/PeppersGhostEffect.js +2 -2
  24. package/examples/js/effects/StereoEffect.js +2 -2
  25. package/examples/js/environments/RoomEnvironment.js +22 -0
  26. package/examples/js/exporters/ColladaExporter.js +33 -20
  27. package/examples/js/exporters/DRACOExporter.js +0 -12
  28. package/examples/js/exporters/EXRExporter.js +458 -0
  29. package/examples/js/exporters/GLTFExporter.js +246 -119
  30. package/examples/js/exporters/OBJExporter.js +14 -41
  31. package/examples/js/exporters/PLYExporter.js +27 -44
  32. package/examples/js/exporters/STLExporter.js +0 -7
  33. package/examples/js/exporters/USDZExporter.js +19 -0
  34. package/examples/js/geometries/ConvexGeometry.js +1 -1
  35. package/examples/js/geometries/DecalGeometry.js +0 -7
  36. package/examples/js/geometries/LightningStrike.js +2 -2
  37. package/examples/js/geometries/ParametricGeometries.js +3 -3
  38. package/examples/js/geometries/ParametricGeometry.js +1 -8
  39. package/examples/js/geometries/TextGeometry.js +12 -10
  40. package/examples/js/helpers/OctreeHelper.js +74 -0
  41. package/examples/js/helpers/VertexNormalsHelper.js +4 -23
  42. package/examples/js/helpers/VertexTangentsHelper.js +3 -13
  43. package/examples/js/helpers/ViewHelper.js +266 -0
  44. package/examples/js/interactive/HTMLMesh.js +249 -42
  45. package/examples/js/interactive/SelectionHelper.js +3 -1
  46. package/examples/js/libs/ktx-parse.umd.js +1 -0
  47. package/examples/js/libs/meshopt_decoder.js +98 -32
  48. package/examples/js/libs/opentype.min.js +1 -118
  49. package/examples/js/lines/Line2.js +1 -2
  50. package/examples/js/lines/LineGeometry.js +10 -21
  51. package/examples/js/lines/LineMaterial.js +2 -3
  52. package/examples/js/lines/LineSegments2.js +214 -140
  53. package/examples/js/lines/LineSegmentsGeometry.js +3 -14
  54. package/examples/js/lines/Wireframe.js +2 -3
  55. package/examples/js/lines/WireframeGeometry2.js +1 -2
  56. package/examples/js/loaders/3MFLoader.js +21 -17
  57. package/examples/js/loaders/AMFLoader.js +1 -1
  58. package/examples/js/loaders/ColladaLoader.js +34 -12
  59. package/examples/js/loaders/DDSLoader.js +23 -30
  60. package/examples/js/loaders/DRACOLoader.js +2 -25
  61. package/examples/js/loaders/EXRLoader.js +279 -276
  62. package/examples/js/loaders/FBXLoader.js +21 -3
  63. package/examples/js/loaders/FontLoader.js +4 -18
  64. package/examples/js/loaders/GCodeLoader.js +0 -1
  65. package/examples/js/loaders/GLTFLoader.js +300 -95
  66. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -11
  67. package/examples/js/loaders/KMZLoader.js +1 -1
  68. package/examples/js/loaders/LDrawLoader.js +653 -480
  69. package/examples/js/loaders/LUT3dlLoader.js +1 -1
  70. package/examples/js/loaders/LUTCubeLoader.js +1 -1
  71. package/examples/js/loaders/LWOLoader.js +4 -2
  72. package/examples/js/loaders/LogLuvLoader.js +1 -2
  73. package/examples/js/loaders/MD2Loader.js +5 -5
  74. package/examples/js/loaders/MMDLoader.js +18 -4
  75. package/examples/js/loaders/MTLLoader.js +10 -3
  76. package/examples/js/loaders/NRRDLoader.js +1 -1
  77. package/examples/js/loaders/OBJLoader.js +16 -18
  78. package/examples/js/loaders/PCDLoader.js +81 -27
  79. package/examples/js/loaders/PDBLoader.js +11 -11
  80. package/examples/js/loaders/PLYLoader.js +8 -4
  81. package/examples/js/loaders/RGBELoader.js +3 -11
  82. package/examples/js/loaders/RGBMLoader.js +12 -15
  83. package/examples/js/loaders/STLLoader.js +1 -1
  84. package/examples/js/loaders/SVGLoader.js +23 -14
  85. package/examples/js/loaders/TIFFLoader.js +31 -0
  86. package/examples/js/loaders/VOXLoader.js +3 -4
  87. package/examples/js/loaders/VRMLLoader.js +33 -24
  88. package/examples/js/loaders/VTKLoader.js +261 -296
  89. package/examples/js/loaders/lwo/LWO2Parser.js +12 -11
  90. package/examples/js/loaders/lwo/LWO3Parser.js +12 -11
  91. package/examples/js/materials/MeshGouraudMaterial.js +385 -0
  92. package/examples/js/math/ColorConverter.js +0 -50
  93. package/examples/js/math/ConvexHull.js +6 -15
  94. package/examples/js/math/Lut.js +27 -26
  95. package/examples/js/misc/GPUComputationRenderer.js +23 -0
  96. package/examples/js/misc/MorphAnimMesh.js +2 -2
  97. package/examples/js/misc/ProgressiveLightMap.js +1 -1
  98. package/examples/js/misc/Volume.js +233 -234
  99. package/examples/js/misc/VolumeSlice.js +108 -106
  100. package/examples/js/modifiers/EdgeSplitModifier.js +0 -13
  101. package/examples/js/modifiers/SimplifyModifier.js +2 -19
  102. package/examples/js/modifiers/TessellateModifier.js +0 -7
  103. package/examples/js/objects/GroundProjectedEnv.js +193 -0
  104. package/examples/js/objects/Lensflare.js +4 -4
  105. package/examples/js/objects/LightningStorm.js +4 -5
  106. package/examples/js/objects/MarchingCubes.js +6 -11
  107. package/examples/js/objects/Reflector.js +18 -5
  108. package/examples/js/objects/ReflectorForSSRPass.js +4 -5
  109. package/examples/js/objects/Refractor.js +19 -7
  110. package/examples/js/objects/ShadowMesh.js +6 -3
  111. package/examples/js/objects/Sky.js +1 -1
  112. package/examples/js/objects/Water.js +1 -2
  113. package/examples/js/objects/Water2.js +1 -1
  114. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +6 -10
  115. package/examples/js/postprocessing/AfterimagePass.js +2 -6
  116. package/examples/js/postprocessing/BloomPass.js +50 -19
  117. package/examples/js/postprocessing/DotScreenPass.js +1 -1
  118. package/examples/js/postprocessing/EffectComposer.js +1 -6
  119. package/examples/js/postprocessing/LUTPass.js +2 -2
  120. package/examples/js/postprocessing/OutlinePass.js +13 -20
  121. package/examples/js/postprocessing/SAOPass.js +2 -7
  122. package/examples/js/postprocessing/SSAARenderPass.js +1 -6
  123. package/examples/js/postprocessing/SSRPass.js +3 -8
  124. package/examples/js/postprocessing/TAARenderPass.js +4 -4
  125. package/examples/js/postprocessing/UnrealBloomPass.js +3 -12
  126. package/examples/js/renderers/CSS2DRenderer.js +22 -21
  127. package/examples/js/renderers/CSS3DRenderer.js +42 -38
  128. package/examples/js/renderers/Projector.js +99 -147
  129. package/examples/js/renderers/SVGRenderer.js +3 -4
  130. package/examples/js/shaders/BlendShader.js +2 -1
  131. package/examples/js/shaders/CopyShader.js +4 -3
  132. package/examples/js/shaders/FXAAShader.js +239 -1069
  133. package/examples/js/shaders/FreiChenShader.js +1 -1
  134. package/examples/js/shaders/HorizontalBlurShader.js +1 -1
  135. package/examples/js/shaders/HorizontalTiltShiftShader.js +1 -1
  136. package/examples/js/shaders/LuminosityShader.js +1 -1
  137. package/examples/js/shaders/MMDToonShader.js +6 -2
  138. package/examples/js/shaders/SSRShader.js +3 -3
  139. package/examples/js/shaders/ToneMapShader.js +2 -2
  140. package/examples/js/utils/BufferGeometryUtils.js +282 -22
  141. package/examples/js/utils/GPUStatsPanel.js +1 -1
  142. package/examples/js/utils/GeometryUtils.js +2 -18
  143. package/examples/js/utils/LDrawUtils.js +182 -0
  144. package/examples/js/utils/PackedPhongMaterial.js +1 -1
  145. package/examples/js/utils/SceneUtils.js +57 -14
  146. package/examples/js/utils/SkeletonUtils.js +1 -1
  147. package/examples/js/utils/UVsDebug.js +23 -33
  148. package/examples/jsm/animation/CCDIKSolver.js +3 -9
  149. package/examples/jsm/animation/MMDPhysics.js +4 -23
  150. package/examples/jsm/capabilities/WebGPU.js +6 -0
  151. package/examples/jsm/controls/ArcballControls.js +19 -2
  152. package/examples/jsm/controls/FirstPersonControls.js +0 -7
  153. package/examples/jsm/controls/FlyControls.js +0 -7
  154. package/examples/jsm/controls/OrbitControls.js +0 -5
  155. package/examples/jsm/controls/PointerLockControls.js +4 -9
  156. package/examples/jsm/controls/TrackballControls.js +1 -7
  157. package/examples/jsm/controls/TransformControls.js +24 -22
  158. package/examples/jsm/csm/CSMFrustum.js +1 -1
  159. package/examples/jsm/csm/CSMShader.js +51 -35
  160. package/examples/jsm/curves/CurveExtras.js +15 -17
  161. package/examples/jsm/effects/AnaglyphEffect.js +6 -6
  162. package/examples/jsm/effects/AsciiEffect.js +9 -22
  163. package/examples/jsm/effects/OutlineEffect.js +4 -25
  164. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
  165. package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
  166. package/examples/jsm/effects/StereoEffect.js +2 -2
  167. package/examples/jsm/environments/RoomEnvironment.js +23 -0
  168. package/examples/jsm/exporters/ColladaExporter.js +35 -19
  169. package/examples/jsm/exporters/DRACOExporter.js +0 -13
  170. package/examples/jsm/exporters/EXRExporter.js +507 -0
  171. package/examples/jsm/exporters/GLTFExporter.js +276 -104
  172. package/examples/jsm/exporters/KTX2Exporter.js +281 -0
  173. package/examples/jsm/exporters/OBJExporter.js +11 -36
  174. package/examples/jsm/exporters/PLYExporter.js +37 -43
  175. package/examples/jsm/exporters/STLExporter.js +1 -9
  176. package/examples/jsm/exporters/USDZExporter.js +26 -3
  177. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  178. package/examples/jsm/geometries/DecalGeometry.js +0 -7
  179. package/examples/jsm/geometries/LightningStrike.js +2 -2
  180. package/examples/jsm/geometries/ParametricGeometries.js +3 -3
  181. package/examples/jsm/geometries/ParametricGeometry.js +0 -6
  182. package/examples/jsm/geometries/TextGeometry.js +13 -13
  183. package/examples/jsm/helpers/OctreeHelper.js +58 -0
  184. package/examples/jsm/helpers/VertexNormalsHelper.js +4 -25
  185. package/examples/jsm/helpers/VertexTangentsHelper.js +3 -15
  186. package/examples/jsm/helpers/ViewHelper.js +295 -0
  187. package/examples/jsm/interactive/HTMLMesh.js +268 -36
  188. package/examples/jsm/interactive/SelectionHelper.js +6 -4
  189. package/examples/jsm/libs/flow.module.js +947 -183
  190. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  191. package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
  192. package/examples/jsm/libs/mikktspace.module.js +128 -0
  193. package/examples/jsm/libs/opentype.module.js +14568 -0
  194. package/examples/jsm/libs/utif.module.js +1579 -0
  195. package/examples/jsm/libs/zstddec.module.js +1 -0
  196. package/examples/jsm/lines/Line2.js +2 -2
  197. package/examples/jsm/lines/LineGeometry.js +11 -19
  198. package/examples/jsm/lines/LineMaterial.js +3 -3
  199. package/examples/jsm/lines/LineSegments2.js +210 -145
  200. package/examples/jsm/lines/LineSegmentsGeometry.js +3 -12
  201. package/examples/jsm/lines/Wireframe.js +3 -3
  202. package/examples/jsm/lines/WireframeGeometry2.js +2 -2
  203. package/examples/jsm/loaders/3DMLoader.js +3 -2
  204. package/examples/jsm/loaders/3MFLoader.js +21 -17
  205. package/examples/jsm/loaders/AMFLoader.js +1 -1
  206. package/examples/jsm/loaders/ColladaLoader.js +41 -12
  207. package/examples/jsm/loaders/DDSLoader.js +21 -28
  208. package/examples/jsm/loaders/DRACOLoader.js +2 -28
  209. package/examples/jsm/loaders/EXRLoader.js +278 -275
  210. package/examples/jsm/loaders/FBXLoader.js +21 -3
  211. package/examples/jsm/loaders/FontLoader.js +5 -18
  212. package/examples/jsm/loaders/GCodeLoader.js +0 -1
  213. package/examples/jsm/loaders/GLTFLoader.js +314 -101
  214. package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
  215. package/examples/jsm/loaders/KMZLoader.js +1 -1
  216. package/examples/jsm/loaders/KTX2Loader.js +193 -40
  217. package/examples/jsm/loaders/LDrawLoader.js +641 -495
  218. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  219. package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
  220. package/examples/jsm/loaders/LWOLoader.js +5 -3
  221. package/examples/jsm/loaders/LogLuvLoader.js +2 -2
  222. package/examples/jsm/loaders/MD2Loader.js +5 -5
  223. package/examples/jsm/loaders/MMDLoader.js +21 -3
  224. package/examples/jsm/loaders/MTLLoader.js +11 -4
  225. package/examples/jsm/loaders/NRRDLoader.js +1 -2
  226. package/examples/jsm/loaders/OBJLoader.js +17 -21
  227. package/examples/jsm/loaders/PCDLoader.js +82 -28
  228. package/examples/jsm/loaders/PDBLoader.js +11 -11
  229. package/examples/jsm/loaders/PLYLoader.js +13 -5
  230. package/examples/jsm/loaders/RGBELoader.js +4 -12
  231. package/examples/jsm/loaders/RGBMLoader.js +14 -11
  232. package/examples/jsm/loaders/STLLoader.js +1 -1
  233. package/examples/jsm/loaders/SVGLoader.js +24 -13
  234. package/examples/jsm/loaders/TIFFLoader.js +36 -0
  235. package/examples/jsm/loaders/TTFLoader.js +1 -1
  236. package/examples/jsm/loaders/USDZLoader.js +393 -0
  237. package/examples/jsm/loaders/VOXLoader.js +5 -5
  238. package/examples/jsm/loaders/VRMLLoader.js +23 -26
  239. package/examples/jsm/loaders/VTKLoader.js +257 -285
  240. package/examples/jsm/loaders/ifc/web-ifc-api.js +9 -8
  241. package/examples/jsm/loaders/lwo/LWO2Parser.js +10 -12
  242. package/examples/jsm/loaders/lwo/LWO3Parser.js +10 -12
  243. package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
  244. package/examples/jsm/math/ColorConverter.js +1 -49
  245. package/examples/jsm/math/ConvexHull.js +6 -15
  246. package/examples/jsm/math/Lut.js +35 -25
  247. package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
  248. package/examples/jsm/misc/MorphAnimMesh.js +2 -2
  249. package/examples/jsm/misc/ProgressiveLightMap.js +1 -1
  250. package/examples/jsm/misc/Volume.js +204 -213
  251. package/examples/jsm/misc/VolumeSlice.js +96 -98
  252. package/examples/jsm/modifiers/EdgeSplitModifier.js +0 -13
  253. package/examples/jsm/modifiers/SimplifyModifier.js +2 -19
  254. package/examples/jsm/modifiers/TessellateModifier.js +0 -7
  255. package/examples/jsm/node-editor/NodeEditor.js +505 -182
  256. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +14 -0
  257. package/examples/jsm/node-editor/accessors/NormalEditor.js +9 -9
  258. package/examples/jsm/node-editor/accessors/PositionEditor.js +9 -9
  259. package/examples/jsm/node-editor/accessors/UVEditor.js +7 -8
  260. package/examples/jsm/node-editor/core/BaseNode.js +89 -0
  261. package/examples/jsm/node-editor/core/DataFile.js +59 -0
  262. package/examples/jsm/node-editor/core/FileEditor.js +20 -0
  263. package/examples/jsm/node-editor/core/FileURLEditor.js +29 -0
  264. package/examples/jsm/node-editor/display/BlendEditor.js +10 -9
  265. package/examples/jsm/node-editor/display/NormalMapEditor.js +49 -0
  266. package/examples/jsm/node-editor/examples/animate-uv.json +1 -1
  267. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -1
  268. package/examples/jsm/node-editor/examples/matcap.json +1 -0
  269. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -1
  270. package/examples/jsm/node-editor/examples/rim.json +1 -1
  271. package/examples/jsm/node-editor/inputs/ColorEditor.js +18 -13
  272. package/examples/jsm/node-editor/inputs/FloatEditor.js +8 -9
  273. package/examples/jsm/node-editor/inputs/SliderEditor.js +6 -7
  274. package/examples/jsm/node-editor/inputs/TextureEditor.js +155 -0
  275. package/examples/jsm/node-editor/inputs/Vector2Editor.js +9 -9
  276. package/examples/jsm/node-editor/inputs/Vector3Editor.js +11 -11
  277. package/examples/jsm/node-editor/inputs/Vector4Editor.js +12 -12
  278. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +87 -0
  279. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +102 -0
  280. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +31 -18
  281. package/examples/jsm/node-editor/math/AngleEditor.js +40 -0
  282. package/examples/jsm/node-editor/math/DotEditor.js +8 -9
  283. package/examples/jsm/node-editor/math/InvertEditor.js +8 -7
  284. package/examples/jsm/node-editor/math/LimiterEditor.js +28 -14
  285. package/examples/jsm/node-editor/math/NormalizeEditor.js +9 -7
  286. package/examples/jsm/node-editor/math/OperatorEditor.js +29 -16
  287. package/examples/jsm/node-editor/math/PowerEditor.js +20 -10
  288. package/examples/jsm/node-editor/math/TrigonometryEditor.js +15 -9
  289. package/examples/jsm/node-editor/procedural/CheckerEditor.js +7 -6
  290. package/examples/jsm/node-editor/scene/MeshEditor.js +99 -0
  291. package/examples/jsm/node-editor/scene/Object3DEditor.js +160 -0
  292. package/examples/jsm/node-editor/scene/PointsEditor.js +99 -0
  293. package/examples/jsm/node-editor/utils/JoinEditor.js +58 -0
  294. package/examples/jsm/node-editor/utils/OscillatorEditor.js +9 -8
  295. package/examples/jsm/node-editor/utils/PreviewEditor.js +166 -0
  296. package/examples/jsm/node-editor/utils/SplitEditor.js +39 -0
  297. package/examples/jsm/node-editor/utils/TimerEditor.js +7 -6
  298. package/examples/jsm/nodes/Nodes.js +313 -94
  299. package/examples/jsm/nodes/accessors/BufferNode.js +24 -0
  300. package/examples/jsm/nodes/accessors/CameraNode.js +27 -196
  301. package/examples/jsm/nodes/accessors/CubeTextureNode.js +107 -0
  302. package/examples/jsm/nodes/accessors/InstanceNode.js +58 -0
  303. package/examples/jsm/{renderers/nodes → nodes}/accessors/MaterialNode.js +49 -11
  304. package/examples/jsm/{renderers/nodes → nodes}/accessors/MaterialReferenceNode.js +0 -0
  305. package/examples/jsm/{renderers/nodes → nodes}/accessors/ModelNode.js +8 -0
  306. package/examples/jsm/{renderers/nodes → nodes}/accessors/ModelViewProjectionNode.js +0 -0
  307. package/examples/jsm/nodes/accessors/NormalNode.js +39 -99
  308. package/examples/jsm/{renderers/nodes → nodes}/accessors/Object3DNode.js +34 -17
  309. package/examples/jsm/{renderers/nodes → nodes}/accessors/PointUVNode.js +2 -2
  310. package/examples/jsm/nodes/accessors/PositionNode.js +41 -110
  311. package/examples/jsm/nodes/accessors/ReferenceNode.js +65 -0
  312. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
  313. package/examples/jsm/nodes/accessors/SkinningNode.js +102 -0
  314. package/examples/jsm/nodes/accessors/StorageBufferNode.js +21 -0
  315. package/examples/jsm/nodes/accessors/TextureNode.js +100 -0
  316. package/examples/jsm/nodes/accessors/UVNode.js +17 -43
  317. package/examples/jsm/nodes/accessors/UserDataNode.js +23 -0
  318. package/examples/jsm/nodes/core/ArrayUniformNode.js +23 -0
  319. package/examples/jsm/nodes/core/AttributeNode.js +33 -30
  320. package/examples/jsm/{renderers/nodes → nodes}/core/BypassNode.js +2 -2
  321. package/examples/jsm/nodes/core/CodeNode.js +50 -0
  322. package/examples/jsm/nodes/core/ConstNode.js +10 -106
  323. package/examples/jsm/{renderers/nodes → nodes}/core/ContextNode.js +17 -3
  324. package/examples/jsm/nodes/core/ExpressionNode.js +24 -7
  325. package/examples/jsm/nodes/core/FunctionCallNode.js +33 -59
  326. package/examples/jsm/nodes/core/FunctionNode.js +43 -216
  327. package/examples/jsm/nodes/core/InputNode.js +28 -60
  328. package/examples/jsm/nodes/core/InstanceIndexNode.js +21 -0
  329. package/examples/jsm/nodes/core/Node.js +230 -94
  330. package/examples/jsm/{renderers/nodes → nodes}/core/NodeAttribute.js +2 -2
  331. package/examples/jsm/nodes/core/NodeBuilder.js +388 -560
  332. package/examples/jsm/{renderers/nodes → nodes}/core/NodeCode.js +0 -0
  333. package/examples/jsm/nodes/core/NodeFrame.js +30 -23
  334. package/examples/jsm/{renderers/nodes → nodes}/core/NodeFunction.js +0 -0
  335. package/examples/jsm/{renderers/nodes → nodes}/core/NodeFunctionInput.js +0 -0
  336. package/examples/jsm/{renderers/nodes → nodes}/core/NodeKeywords.js +0 -0
  337. package/examples/jsm/{renderers/nodes → nodes}/core/NodeParser.js +0 -0
  338. package/examples/jsm/nodes/core/NodeUniform.js +8 -6
  339. package/examples/jsm/nodes/core/NodeUtils.js +90 -36
  340. package/examples/jsm/{renderers/nodes → nodes}/core/NodeVar.js +2 -2
  341. package/examples/jsm/{renderers/nodes/core/NodeVary.js → nodes/core/NodeVarying.js} +4 -4
  342. package/examples/jsm/{renderers/nodes → nodes}/core/PropertyNode.js +0 -0
  343. package/examples/jsm/nodes/core/TempNode.js +20 -112
  344. package/examples/jsm/nodes/core/UniformNode.js +46 -0
  345. package/examples/jsm/nodes/core/VarNode.js +58 -27
  346. package/examples/jsm/{renderers/nodes/core/VaryNode.js → nodes/core/VaryingNode.js} +7 -7
  347. package/examples/jsm/{renderers/nodes → nodes}/core/constants.js +0 -0
  348. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +94 -0
  349. package/examples/jsm/{renderers/nodes → nodes}/display/ColorSpaceNode.js +10 -11
  350. package/examples/jsm/nodes/display/FrontFacingNode.js +21 -0
  351. package/examples/jsm/nodes/display/NormalMapNode.js +86 -0
  352. package/examples/jsm/nodes/display/ToneMappingNode.js +51 -0
  353. package/examples/jsm/nodes/fog/FogNode.js +31 -0
  354. package/examples/jsm/nodes/fog/FogRangeNode.js +27 -0
  355. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +33 -0
  356. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +9 -0
  357. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +27 -0
  358. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +18 -0
  359. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +18 -0
  360. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +18 -0
  361. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +94 -0
  362. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +22 -0
  363. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +12 -0
  364. package/examples/jsm/nodes/functions/material/getRoughness.js +18 -0
  365. package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
  366. package/examples/jsm/nodes/gpgpu/ComputeNode.js +65 -0
  367. package/examples/jsm/nodes/lighting/AONode.js +25 -0
  368. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +37 -0
  369. package/examples/jsm/nodes/lighting/EnvironmentNode.js +66 -0
  370. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +50 -0
  371. package/examples/jsm/nodes/lighting/LightingContextNode.js +75 -0
  372. package/examples/jsm/nodes/lighting/LightingNode.js +19 -0
  373. package/examples/jsm/nodes/lighting/LightsNode.js +120 -0
  374. package/examples/jsm/nodes/lighting/PunctualLightNode.js +68 -0
  375. package/examples/jsm/nodes/loaders/NodeLoader.js +107 -0
  376. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +73 -0
  377. package/examples/jsm/nodes/loaders/NodeObjectLoader.js +70 -0
  378. package/examples/jsm/{renderers/nodes → nodes}/materials/LineBasicNodeMaterial.js +11 -4
  379. package/examples/jsm/nodes/materials/Materials.js +53 -0
  380. package/examples/jsm/{renderers/nodes → nodes}/materials/MeshBasicNodeMaterial.js +13 -4
  381. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
  382. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +159 -22
  383. package/examples/jsm/nodes/materials/NodeMaterial.js +128 -113
  384. package/examples/jsm/{renderers/nodes → nodes}/materials/PointsNodeMaterial.js +13 -4
  385. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +95 -16
  386. package/examples/jsm/nodes/materialx/Disclaimer.md +199 -0
  387. package/examples/jsm/nodes/materialx/functions/lib/mx_hsv.js +56 -0
  388. package/examples/jsm/nodes/materialx/functions/lib/mx_noise.js +607 -0
  389. package/examples/jsm/nodes/math/CondNode.js +26 -95
  390. package/examples/jsm/nodes/math/MathNode.js +156 -189
  391. package/examples/jsm/nodes/math/OperatorNode.js +161 -41
  392. package/examples/jsm/{renderers/nodes → nodes}/parsers/GLSLNodeFunction.js +23 -8
  393. package/examples/jsm/{renderers/nodes → nodes}/parsers/GLSLNodeParser.js +0 -0
  394. package/examples/jsm/{renderers/nodes → nodes}/parsers/WGSLNodeFunction.js +20 -5
  395. package/examples/jsm/{renderers/nodes → nodes}/parsers/WGSLNodeParser.js +0 -0
  396. package/examples/jsm/nodes/procedural/CheckerNode.js +16 -57
  397. package/examples/jsm/nodes/shadernode/ShaderNode.js +262 -0
  398. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +277 -0
  399. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +120 -0
  400. package/examples/jsm/{renderers/nodes → nodes}/utils/ArrayElementNode.js +3 -3
  401. package/examples/jsm/nodes/utils/ConvertNode.js +46 -0
  402. package/examples/jsm/nodes/utils/JoinNode.js +15 -87
  403. package/examples/jsm/nodes/utils/MatcapUVNode.js +25 -0
  404. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +33 -0
  405. package/examples/jsm/{renderers/nodes → nodes}/utils/OscNode.js +18 -2
  406. package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
  407. package/examples/jsm/nodes/utils/SplitNode.js +102 -0
  408. package/examples/jsm/{renderers/nodes → nodes}/utils/SpriteSheetUVNode.js +3 -3
  409. package/examples/jsm/nodes/utils/TimerNode.js +30 -65
  410. package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
  411. package/examples/jsm/objects/Lensflare.js +2 -2
  412. package/examples/jsm/objects/LightningStorm.js +4 -4
  413. package/examples/jsm/objects/MarchingCubes.js +5 -9
  414. package/examples/jsm/objects/Reflector.js +19 -8
  415. package/examples/jsm/objects/ReflectorForSSRPass.js +5 -7
  416. package/examples/jsm/objects/Refractor.js +19 -9
  417. package/examples/jsm/objects/ShadowMesh.js +10 -4
  418. package/examples/jsm/objects/Sky.js +2 -2
  419. package/examples/jsm/objects/Water.js +2 -2
  420. package/examples/jsm/objects/Water2.js +2 -2
  421. package/examples/jsm/offscreen/jank.js +5 -5
  422. package/examples/jsm/offscreen/offscreen.js +1 -1
  423. package/examples/jsm/offscreen/scene.js +11 -11
  424. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +5 -7
  425. package/examples/jsm/postprocessing/AfterimagePass.js +0 -10
  426. package/examples/jsm/postprocessing/BloomPass.js +48 -20
  427. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  428. package/examples/jsm/postprocessing/EffectComposer.js +1 -9
  429. package/examples/jsm/postprocessing/LUTPass.js +2 -2
  430. package/examples/jsm/postprocessing/OutlinePass.js +13 -18
  431. package/examples/jsm/postprocessing/SAOPass.js +2 -9
  432. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -4
  433. package/examples/jsm/postprocessing/SSRPass.js +3 -9
  434. package/examples/jsm/postprocessing/TAARenderPass.js +4 -4
  435. package/examples/jsm/postprocessing/UnrealBloomPass.js +3 -8
  436. package/examples/jsm/renderers/CSS2DRenderer.js +23 -21
  437. package/examples/jsm/renderers/CSS3DRenderer.js +41 -36
  438. package/examples/jsm/renderers/Projector.js +103 -152
  439. package/examples/jsm/renderers/SVGRenderer.js +4 -4
  440. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
  441. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +398 -183
  442. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +19 -4
  443. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +4 -4
  444. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +55 -13
  445. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +8 -7
  446. package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +43 -0
  447. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +20 -7
  448. package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
  449. package/examples/jsm/renderers/webgpu/WebGPUInfo.js +1 -1
  450. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -7
  451. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +37 -39
  452. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +18 -15
  453. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +66 -0
  454. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +103 -95
  455. package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +14 -14
  456. package/examples/jsm/renderers/webgpu/WebGPUSampler.js +2 -2
  457. package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +5 -8
  458. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +25 -20
  459. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +37 -18
  460. package/examples/jsm/renderers/webgpu/WebGPUUniform.js +14 -14
  461. package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +5 -32
  462. package/examples/jsm/renderers/webgpu/WebGPUUniformsGroup.js +2 -2
  463. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
  464. package/examples/jsm/renderers/webgpu/constants.js +3 -2
  465. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +287 -300
  466. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeSampledTexture.js +20 -2
  467. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +24 -14
  468. package/examples/jsm/shaders/BlendShader.js +2 -1
  469. package/examples/jsm/shaders/CopyShader.js +4 -3
  470. package/examples/jsm/shaders/FXAAShader.js +219 -1051
  471. package/examples/jsm/shaders/FreiChenShader.js +1 -1
  472. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -1
  473. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +1 -1
  474. package/examples/jsm/shaders/LuminosityShader.js +1 -1
  475. package/examples/jsm/shaders/MMDToonShader.js +2 -2
  476. package/examples/jsm/shaders/SSRShader.js +3 -3
  477. package/examples/jsm/shaders/ToneMapShader.js +2 -2
  478. package/examples/jsm/utils/BufferGeometryUtils.js +293 -22
  479. package/examples/jsm/utils/GPUStatsPanel.js +1 -1
  480. package/examples/jsm/utils/GeometryUtils.js +17 -25
  481. package/examples/jsm/utils/LDrawUtils.js +24 -17
  482. package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
  483. package/examples/jsm/utils/SceneUtils.js +73 -19
  484. package/examples/jsm/utils/SkeletonUtils.js +1 -1
  485. package/examples/jsm/utils/UVsDebug.js +23 -32
  486. package/examples/jsm/webxr/ARButton.js +14 -4
  487. package/examples/jsm/webxr/OculusHandPointerModel.js +9 -4
  488. package/examples/jsm/webxr/Text2D.js +1 -1
  489. package/examples/jsm/webxr/VRButton.js +16 -8
  490. package/examples/jsm/webxr/XRHandMeshModel.js +3 -7
  491. package/examples/jsm/webxr/XRHandModelFactory.js +3 -0
  492. package/package.json +57 -28
  493. package/src/Three.Legacy.js +164 -1809
  494. package/src/Three.js +9 -5
  495. package/src/animation/AnimationAction.js +6 -5
  496. package/src/animation/AnimationClip.js +2 -2
  497. package/src/animation/AnimationMixer.js +5 -3
  498. package/src/animation/AnimationObjectGroup.js +2 -2
  499. package/src/animation/AnimationUtils.js +204 -199
  500. package/src/animation/KeyframeTrack.js +1 -1
  501. package/src/animation/PropertyBinding.js +32 -23
  502. package/src/audio/PositionalAudio.js +8 -0
  503. package/src/cameras/ArrayCamera.js +2 -3
  504. package/src/cameras/Camera.js +2 -2
  505. package/src/cameras/CubeCamera.js +6 -8
  506. package/src/cameras/OrthographicCamera.js +2 -2
  507. package/src/cameras/PerspectiveCamera.js +2 -2
  508. package/src/constants.js +7 -6
  509. package/src/core/BufferAttribute.js +88 -123
  510. package/src/core/BufferGeometry.js +9 -47
  511. package/src/core/GLBufferAttribute.js +2 -2
  512. package/src/core/InstancedBufferAttribute.js +2 -12
  513. package/src/core/InstancedBufferGeometry.js +2 -2
  514. package/src/core/InstancedInterleavedBuffer.js +2 -2
  515. package/src/core/InterleavedBuffer.js +3 -3
  516. package/src/core/InterleavedBufferAttribute.js +61 -18
  517. package/src/core/Object3D.js +28 -8
  518. package/src/core/Raycaster.js +2 -2
  519. package/src/core/Uniform.js +0 -7
  520. package/src/core/UniformsGroup.js +92 -0
  521. package/src/extras/DataUtils.js +144 -41
  522. package/src/extras/Earcut.js +2 -2
  523. package/src/extras/PMREMGenerator.js +132 -104
  524. package/src/extras/core/CurvePath.js +3 -3
  525. package/src/extras/core/Path.js +1 -0
  526. package/src/extras/core/ShapePath.js +6 -10
  527. package/src/extras/curves/ArcCurve.js +2 -2
  528. package/src/extras/curves/CatmullRomCurve3.js +6 -4
  529. package/src/extras/curves/CubicBezierCurve.js +2 -2
  530. package/src/extras/curves/CubicBezierCurve3.js +2 -2
  531. package/src/extras/curves/EllipseCurve.js +2 -2
  532. package/src/extras/curves/LineCurve.js +2 -2
  533. package/src/extras/curves/LineCurve3.js +2 -1
  534. package/src/extras/curves/QuadraticBezierCurve.js +2 -2
  535. package/src/extras/curves/QuadraticBezierCurve3.js +2 -2
  536. package/src/extras/curves/SplineCurve.js +2 -2
  537. package/src/geometries/BoxGeometry.js +1 -1
  538. package/src/geometries/CapsuleGeometry.js +33 -0
  539. package/src/geometries/CircleGeometry.js +1 -1
  540. package/src/geometries/ConeGeometry.js +1 -1
  541. package/src/geometries/CylinderGeometry.js +2 -1
  542. package/src/geometries/DodecahedronGeometry.js +1 -1
  543. package/src/geometries/EdgesGeometry.js +5 -4
  544. package/src/geometries/ExtrudeGeometry.js +4 -11
  545. package/src/geometries/Geometries.js +1 -0
  546. package/src/geometries/IcosahedronGeometry.js +1 -1
  547. package/src/geometries/LatheGeometry.js +3 -3
  548. package/src/geometries/OctahedronGeometry.js +1 -1
  549. package/src/geometries/PlaneGeometry.js +2 -1
  550. package/src/geometries/PolyhedronGeometry.js +1 -1
  551. package/src/geometries/RingGeometry.js +1 -1
  552. package/src/geometries/ShapeGeometry.js +2 -1
  553. package/src/geometries/SphereGeometry.js +2 -1
  554. package/src/geometries/TetrahedronGeometry.js +1 -1
  555. package/src/geometries/TorusGeometry.js +2 -1
  556. package/src/geometries/TorusKnotGeometry.js +4 -3
  557. package/src/geometries/TubeGeometry.js +2 -1
  558. package/src/geometries/WireframeGeometry.js +4 -2
  559. package/src/helpers/BoxHelper.js +2 -2
  560. package/src/helpers/CameraHelper.js +97 -38
  561. package/src/helpers/DirectionalLightHelper.js +1 -0
  562. package/src/helpers/HemisphereLightHelper.js +1 -0
  563. package/src/helpers/PlaneHelper.js +6 -9
  564. package/src/helpers/PointLightHelper.js +1 -1
  565. package/src/helpers/PolarGridHelper.js +18 -14
  566. package/src/helpers/SkeletonHelper.js +3 -2
  567. package/src/helpers/SpotLightHelper.js +1 -0
  568. package/src/lights/AmbientLight.js +2 -2
  569. package/src/lights/AmbientLightProbe.js +2 -2
  570. package/src/lights/DirectionalLight.js +2 -2
  571. package/src/lights/DirectionalLightShadow.js +2 -2
  572. package/src/lights/HemisphereLight.js +4 -4
  573. package/src/lights/HemisphereLightProbe.js +2 -2
  574. package/src/lights/Light.js +4 -4
  575. package/src/lights/LightProbe.js +2 -2
  576. package/src/lights/PointLight.js +4 -4
  577. package/src/lights/PointLightShadow.js +2 -2
  578. package/src/lights/RectAreaLight.js +2 -2
  579. package/src/lights/SpotLight.js +6 -4
  580. package/src/lights/SpotLightShadow.js +2 -2
  581. package/src/loaders/FileLoader.js +35 -5
  582. package/src/loaders/ImageBitmapLoader.js +2 -2
  583. package/src/loaders/ImageLoader.js +1 -1
  584. package/src/loaders/LoaderUtils.js +1 -1
  585. package/src/loaders/LoadingManager.js +1 -1
  586. package/src/loaders/MaterialLoader.js +55 -8
  587. package/src/loaders/ObjectLoader.js +27 -66
  588. package/src/materials/LineBasicMaterial.js +6 -13
  589. package/src/materials/LineDashedMaterial.js +2 -15
  590. package/src/materials/Material.js +26 -24
  591. package/src/materials/Materials.js +39 -18
  592. package/src/materials/MeshBasicMaterial.js +6 -31
  593. package/src/materials/MeshDepthMaterial.js +2 -22
  594. package/src/materials/MeshDistanceMaterial.js +2 -22
  595. package/src/materials/MeshLambertMaterial.js +34 -35
  596. package/src/materials/MeshMatcapMaterial.js +6 -28
  597. package/src/materials/MeshNormalMaterial.js +2 -26
  598. package/src/materials/MeshPhongMaterial.js +6 -48
  599. package/src/materials/MeshPhysicalMaterial.js +32 -35
  600. package/src/materials/MeshStandardMaterial.js +6 -54
  601. package/src/materials/MeshToonMaterial.js +6 -38
  602. package/src/materials/PointsMaterial.js +6 -15
  603. package/src/materials/RawShaderMaterial.js +2 -2
  604. package/src/materials/ShaderMaterial.js +6 -24
  605. package/src/materials/ShadowMaterial.js +6 -8
  606. package/src/materials/SpriteMaterial.js +6 -12
  607. package/src/math/Box2.js +2 -2
  608. package/src/math/Box3.js +29 -15
  609. package/src/math/Color.js +87 -48
  610. package/src/math/ColorManagement.js +74 -0
  611. package/src/math/Euler.js +16 -14
  612. package/src/math/Interpolant.js +4 -9
  613. package/src/math/MathUtils.js +77 -14
  614. package/src/math/Matrix3.js +2 -8
  615. package/src/math/Matrix4.js +3 -28
  616. package/src/math/Plane.js +2 -2
  617. package/src/math/Quaternion.js +12 -23
  618. package/src/math/Spherical.js +1 -1
  619. package/src/math/SphericalHarmonics3.js +2 -2
  620. package/src/math/Vector2.js +5 -25
  621. package/src/math/Vector3.js +17 -47
  622. package/src/math/Vector4.js +5 -25
  623. package/src/math/interpolants/DiscreteInterpolant.js +1 -1
  624. package/src/objects/Bone.js +2 -2
  625. package/src/objects/Group.js +2 -2
  626. package/src/objects/InstancedMesh.js +4 -4
  627. package/src/objects/Line.js +76 -107
  628. package/src/objects/LineLoop.js +2 -2
  629. package/src/objects/LineSegments.js +15 -23
  630. package/src/objects/Mesh.js +82 -104
  631. package/src/objects/Points.js +32 -54
  632. package/src/objects/SkinnedMesh.js +5 -8
  633. package/src/objects/Sprite.js +4 -4
  634. package/src/renderers/WebGL3DRenderTarget.js +22 -0
  635. package/src/renderers/WebGLArrayRenderTarget.js +22 -0
  636. package/src/renderers/WebGLCubeRenderTarget.js +7 -14
  637. package/src/renderers/WebGLMultipleRenderTargets.js +8 -5
  638. package/src/renderers/WebGLRenderTarget.js +19 -18
  639. package/src/renderers/WebGLRenderer.js +195 -74
  640. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +46 -0
  641. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
  642. package/src/renderers/shaders/ShaderChunk/common.glsl.js +7 -5
  643. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +35 -36
  644. package/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js +1 -1
  645. package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
  646. package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
  647. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +3 -19
  648. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
  649. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +121 -0
  650. package/src/renderers/shaders/ShaderChunk/iridescence_pars_fragment.glsl.js +14 -0
  651. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -6
  652. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +48 -1
  653. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +0 -6
  654. package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
  655. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +30 -0
  656. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +26 -1
  657. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +56 -6
  658. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +24 -0
  659. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +1 -1
  660. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +7 -7
  661. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +1 -9
  662. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
  663. package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
  664. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
  665. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
  666. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
  667. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  668. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +16 -31
  669. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
  670. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +1 -1
  671. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
  672. package/src/renderers/shaders/ShaderChunk.js +10 -2
  673. package/src/renderers/shaders/ShaderLib/background.glsl.js +8 -0
  674. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +1 -0
  675. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +3 -3
  676. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +23 -50
  677. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -0
  678. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +6 -0
  679. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +1 -1
  680. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +10 -0
  681. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +1 -0
  682. package/src/renderers/shaders/ShaderLib/points.glsl.js +1 -0
  683. package/src/renderers/shaders/ShaderLib.js +37 -31
  684. package/src/renderers/shaders/UniformsLib.js +14 -13
  685. package/src/renderers/shaders/UniformsUtils.js +14 -0
  686. package/src/renderers/webgl/WebGLAttributes.js +6 -6
  687. package/src/renderers/webgl/WebGLBackground.js +7 -4
  688. package/src/renderers/webgl/WebGLBindingStates.js +57 -29
  689. package/src/renderers/webgl/WebGLGeometries.js +2 -2
  690. package/src/renderers/webgl/WebGLLights.js +37 -14
  691. package/src/renderers/webgl/WebGLMaterials.js +72 -187
  692. package/src/renderers/webgl/WebGLMorphtargets.js +43 -39
  693. package/src/renderers/webgl/WebGLProgram.js +63 -30
  694. package/src/renderers/webgl/WebGLPrograms.js +97 -104
  695. package/src/renderers/webgl/WebGLRenderLists.js +5 -4
  696. package/src/renderers/webgl/WebGLRenderStates.js +5 -4
  697. package/src/renderers/webgl/WebGLShaderCache.js +12 -8
  698. package/src/renderers/webgl/WebGLShadowMap.js +13 -20
  699. package/src/renderers/webgl/WebGLState.js +49 -2
  700. package/src/renderers/webgl/WebGLTextures.js +576 -386
  701. package/src/renderers/webgl/WebGLUniforms.js +81 -82
  702. package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
  703. package/src/renderers/webgl/WebGLUtils.js +14 -3
  704. package/src/renderers/webvr/WebVRManager.js +42 -9
  705. package/src/renderers/webvr/WebVRUtils.js +1 -1
  706. package/src/renderers/webxr/WebXRController.js +45 -37
  707. package/src/renderers/webxr/WebXRManager.js +110 -68
  708. package/src/scenes/Fog.js +2 -2
  709. package/src/scenes/FogExp2.js +2 -2
  710. package/src/scenes/Scene.js +18 -5
  711. package/src/textures/CanvasTexture.js +2 -2
  712. package/src/textures/CompressedTexture.js +2 -2
  713. package/src/textures/CubeTexture.js +2 -2
  714. package/src/textures/{DataTexture3D.js → Data3DTexture.js} +4 -4
  715. package/src/textures/{DataTexture2DArray.js → DataArrayTexture.js} +4 -4
  716. package/src/textures/DataTexture.js +2 -5
  717. package/src/textures/DepthTexture.js +5 -5
  718. package/src/textures/FramebufferTexture.js +2 -2
  719. package/src/textures/Source.js +123 -0
  720. package/src/textures/Texture.js +27 -97
  721. package/src/textures/VideoTexture.js +2 -2
  722. package/src/utils.js +15 -1
  723. package/examples/js/controls/experimental/CameraControls.js +0 -1044
  724. package/examples/js/csm/Frustum.js +0 -133
  725. package/examples/js/deprecated/Geometry.js +0 -1656
  726. package/examples/js/loaders/KTX2Loader.js +0 -566
  727. package/examples/js/loaders/VRMLoader.js +0 -72
  728. package/examples/js/objects/ReflectorRTT.js +0 -16
  729. package/examples/js/postprocessing/SSRrPass.js +0 -494
  730. package/examples/js/shaders/SSRrShader.js +0 -336
  731. package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
  732. package/examples/jsm/deprecated/Geometry.js +0 -1869
  733. package/examples/jsm/libs/opentype.module.min.js +0 -119
  734. package/examples/jsm/loaders/NodeMaterialLoader.js +0 -263
  735. package/examples/jsm/loaders/VRMLoader.js +0 -78
  736. package/examples/jsm/nodes/accessors/ColorsNode.js +0 -56
  737. package/examples/jsm/nodes/accessors/LightNode.js +0 -60
  738. package/examples/jsm/nodes/accessors/ReflectNode.js +0 -157
  739. package/examples/jsm/nodes/accessors/ResolutionNode.js +0 -64
  740. package/examples/jsm/nodes/accessors/ScreenUVNode.js +0 -64
  741. package/examples/jsm/nodes/core/NodeLib.js +0 -64
  742. package/examples/jsm/nodes/core/StructNode.js +0 -106
  743. package/examples/jsm/nodes/effects/BlurNode.js +0 -171
  744. package/examples/jsm/nodes/effects/ColorAdjustmentNode.js +0 -140
  745. package/examples/jsm/nodes/effects/LuminanceNode.js +0 -75
  746. package/examples/jsm/nodes/inputs/BoolNode.js +0 -51
  747. package/examples/jsm/nodes/inputs/ColorNode.js +0 -58
  748. package/examples/jsm/nodes/inputs/CubeTextureNode.js +0 -108
  749. package/examples/jsm/nodes/inputs/FloatNode.js +0 -51
  750. package/examples/jsm/nodes/inputs/IntNode.js +0 -51
  751. package/examples/jsm/nodes/inputs/Matrix3Node.js +0 -63
  752. package/examples/jsm/nodes/inputs/Matrix4Node.js +0 -63
  753. package/examples/jsm/nodes/inputs/PropertyNode.js +0 -47
  754. package/examples/jsm/nodes/inputs/RTTNode.js +0 -157
  755. package/examples/jsm/nodes/inputs/ReflectorNode.js +0 -90
  756. package/examples/jsm/nodes/inputs/ScreenNode.js +0 -28
  757. package/examples/jsm/nodes/inputs/TextureNode.js +0 -116
  758. package/examples/jsm/nodes/inputs/Vector2Node.js +0 -57
  759. package/examples/jsm/nodes/inputs/Vector3Node.js +0 -58
  760. package/examples/jsm/nodes/inputs/Vector4Node.js +0 -59
  761. package/examples/jsm/nodes/materials/BasicNodeMaterial.js +0 -26
  762. package/examples/jsm/nodes/materials/PhongNodeMaterial.js +0 -36
  763. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +0 -40
  764. package/examples/jsm/nodes/materials/nodes/BasicNode.js +0 -154
  765. package/examples/jsm/nodes/materials/nodes/MeshStandardNode.js +0 -116
  766. package/examples/jsm/nodes/materials/nodes/PhongNode.js +0 -409
  767. package/examples/jsm/nodes/materials/nodes/RawNode.js +0 -62
  768. package/examples/jsm/nodes/materials/nodes/SpriteNode.js +0 -236
  769. package/examples/jsm/nodes/materials/nodes/StandardNode.js +0 -609
  770. package/examples/jsm/nodes/misc/BumpMapNode.js +0 -163
  771. package/examples/jsm/nodes/misc/NormalMapNode.js +0 -138
  772. package/examples/jsm/nodes/misc/TextureCubeNode.js +0 -86
  773. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +0 -280
  774. package/examples/jsm/nodes/postprocessing/NodePass.js +0 -93
  775. package/examples/jsm/nodes/postprocessing/NodePostProcessing.js +0 -148
  776. package/examples/jsm/nodes/procedural/Fractal3DNode.js +0 -104
  777. package/examples/jsm/nodes/procedural/Noise2DNode.js +0 -149
  778. package/examples/jsm/nodes/procedural/Noise3DNode.js +0 -141
  779. package/examples/jsm/nodes/utils/BypassNode.js +0 -85
  780. package/examples/jsm/nodes/utils/ColorSpaceNode.js +0 -145
  781. package/examples/jsm/nodes/utils/MaxMIPLevelNode.js +0 -56
  782. package/examples/jsm/nodes/utils/RemapNode.js +0 -155
  783. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -101
  784. package/examples/jsm/nodes/utils/SubSlotNode.js +0 -77
  785. package/examples/jsm/nodes/utils/SwitchNode.js +0 -103
  786. package/examples/jsm/nodes/utils/UVTransformNode.js +0 -66
  787. package/examples/jsm/nodes/utils/VelocityNode.js +0 -170
  788. package/examples/jsm/objects/ReflectorRTT.js +0 -15
  789. package/examples/jsm/package.json +0 -3
  790. package/examples/jsm/postprocessing/SSRrPass.js +0 -579
  791. package/examples/jsm/renderers/nodes/Nodes.js +0 -166
  792. package/examples/jsm/renderers/nodes/ShaderNode.js +0 -373
  793. package/examples/jsm/renderers/nodes/accessors/CameraNode.js +0 -68
  794. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +0 -63
  795. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +0 -67
  796. package/examples/jsm/renderers/nodes/accessors/ReferenceNode.js +0 -91
  797. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +0 -107
  798. package/examples/jsm/renderers/nodes/accessors/UVNode.js +0 -25
  799. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +0 -23
  800. package/examples/jsm/renderers/nodes/core/AttributeNode.js +0 -54
  801. package/examples/jsm/renderers/nodes/core/CodeNode.js +0 -78
  802. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +0 -32
  803. package/examples/jsm/renderers/nodes/core/FunctionCallNode.js +0 -67
  804. package/examples/jsm/renderers/nodes/core/FunctionNode.js +0 -87
  805. package/examples/jsm/renderers/nodes/core/InputNode.js +0 -66
  806. package/examples/jsm/renderers/nodes/core/Node.js +0 -104
  807. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +0 -633
  808. package/examples/jsm/renderers/nodes/core/NodeFrame.js +0 -59
  809. package/examples/jsm/renderers/nodes/core/NodeUniform.js +0 -28
  810. package/examples/jsm/renderers/nodes/core/TempNode.js +0 -43
  811. package/examples/jsm/renderers/nodes/core/VarNode.js +0 -51
  812. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +0 -87
  813. package/examples/jsm/renderers/nodes/functions/BSDFs.js +0 -122
  814. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +0 -27
  815. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +0 -25
  816. package/examples/jsm/renderers/nodes/inputs/ColorNode.js +0 -18
  817. package/examples/jsm/renderers/nodes/inputs/FloatNode.js +0 -17
  818. package/examples/jsm/renderers/nodes/inputs/IntNode.js +0 -17
  819. package/examples/jsm/renderers/nodes/inputs/Matrix3Node.js +0 -18
  820. package/examples/jsm/renderers/nodes/inputs/Matrix4Node.js +0 -18
  821. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +0 -74
  822. package/examples/jsm/renderers/nodes/inputs/Vector2Node.js +0 -18
  823. package/examples/jsm/renderers/nodes/inputs/Vector3Node.js +0 -18
  824. package/examples/jsm/renderers/nodes/inputs/Vector4Node.js +0 -18
  825. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +0 -59
  826. package/examples/jsm/renderers/nodes/lights/LightNode.js +0 -79
  827. package/examples/jsm/renderers/nodes/lights/LightsNode.js +0 -44
  828. package/examples/jsm/renderers/nodes/materials/Materials.js +0 -11
  829. package/examples/jsm/renderers/nodes/materials/MeshStandardNodeMaterial.js +0 -63
  830. package/examples/jsm/renderers/nodes/math/CondNode.js +0 -60
  831. package/examples/jsm/renderers/nodes/math/MathNode.js +0 -242
  832. package/examples/jsm/renderers/nodes/math/OperatorNode.js +0 -174
  833. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +0 -36
  834. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +0 -33
  835. package/examples/jsm/renderers/nodes/utils/JoinNode.js +0 -42
  836. package/examples/jsm/renderers/nodes/utils/SplitNode.js +0 -55
  837. package/examples/jsm/renderers/nodes/utils/TimerNode.js +0 -47
  838. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
  839. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +0 -20
  840. package/examples/jsm/shaders/SSRrShader.js +0 -307
  841. package/src/renderers/WebGLMultisampleRenderTarget.js +0 -33
  842. package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
@@ -1,48 +1,63 @@
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, WGSLNodeParser, CodeNode, NodeMaterial } from 'three/nodes';
14
+
15
+ const gpuShaderStageLib = {
16
+ 'vertex': GPUShaderStage.VERTEX,
17
+ 'fragment': GPUShaderStage.FRAGMENT,
18
+ 'compute': GPUShaderStage.COMPUTE
19
+ };
20
+
21
+ const supports = {
22
+ instance: true
23
+ };
30
24
 
31
25
  const wgslTypeLib = {
32
26
  float: 'f32',
33
27
  int: 'i32',
28
+ uint: 'u32',
29
+ bool: 'bool',
30
+
34
31
  vec2: 'vec2<f32>',
32
+ ivec2: 'vec2<i32>',
33
+ uvec2: 'vec2<u32>',
34
+ bvec2: 'vec2<bool>',
35
+
35
36
  vec3: 'vec3<f32>',
37
+ ivec3: 'vec3<i32>',
38
+ uvec3: 'vec3<u32>',
39
+ bvec3: 'vec3<bool>',
40
+
36
41
  vec4: 'vec4<f32>',
42
+ ivec4: 'vec4<i32>',
37
43
  uvec4: 'vec4<u32>',
38
- bvec3: 'vec3<bool>',
44
+ bvec4: 'vec4<bool>',
45
+
39
46
  mat3: 'mat3x3<f32>',
40
- mat4: 'mat4x4<f32>'
47
+ imat3: 'mat3x3<i32>',
48
+ umat3: 'mat3x3<u32>',
49
+ bmat3: 'mat3x3<bool>',
50
+
51
+ mat4: 'mat4x4<f32>',
52
+ imat4: 'mat4x4<i32>',
53
+ umat4: 'mat4x4<u32>',
54
+ bmat4: 'mat4x4<bool>'
41
55
  };
42
56
 
43
57
  const wgslMethods = {
44
58
  dFdx: 'dpdx',
45
- dFdy: 'dpdy'
59
+ dFdy: 'dpdy',
60
+ inversesqrt: 'inverseSqrt'
46
61
  };
47
62
 
48
63
  const wgslPolyfill = {
@@ -67,263 +82,127 @@ fn repeatWrapping( uv : vec2<f32>, dimension : vec2<i32> ) -> vec2<i32> {
67
82
 
68
83
  return ( ( uvScaled % dimension ) + dimension ) % dimension;
69
84
 
70
- }
71
- ` ),
72
- inversesqrt: new CodeNode( `
73
- fn inversesqrt( x : f32 ) -> f32 {
74
-
75
- return 1.0 / sqrt( x );
76
-
77
85
  }
78
86
  ` )
79
87
  };
80
88
 
81
89
  class WebGPUNodeBuilder extends NodeBuilder {
82
90
 
83
- constructor( object, renderer, lightNode = null ) {
91
+ constructor( object, renderer ) {
84
92
 
85
93
  super( object, renderer, new WGSLNodeParser() );
86
94
 
87
- this.lightNode = lightNode;
88
-
89
- this.bindings = { vertex: [], fragment: [] };
90
- this.bindingsOffset = { vertex: 0, fragment: 0 };
95
+ this.bindings = { vertex: [], fragment: [], compute: [] };
96
+ this.bindingsOffset = { vertex: 0, fragment: 0, compute: 0 };
91
97
 
92
98
  this.uniformsGroup = {};
93
99
 
94
- this._parseObject();
100
+ this.builtins = {
101
+ vertex: new Map(),
102
+ fragment: new Map(),
103
+ compute: new Map(),
104
+ attribute: new Map()
105
+ };
95
106
 
96
107
  }
97
108
 
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;' ) );
109
+ build() {
172
110
 
173
- // ALPHA TEST
111
+ const { object, material } = this;
174
112
 
175
- let alphaTest = null;
113
+ if ( material !== null ) {
176
114
 
177
- if ( material.alphaTestNode && material.alphaTestNode.isNode ) {
115
+ NodeMaterial.fromMaterial( material ).build( this );
178
116
 
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 ) {
202
-
203
- metalnessNode = material.metalnessNode;
204
-
205
- } else {
206
-
207
- metalnessNode = new MaterialNode( MaterialNode.METALNESS );
208
-
209
- }
210
-
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 {
224
-
225
- roughnessNode = new MaterialNode( MaterialNode.ROUGHNESS );
226
-
227
- }
228
-
229
- roughnessNode = getRoughness( { roughness: roughnessNode } );
230
-
231
- this.addFlow( 'fragment', new VarNode( roughnessNode, 'Roughness', 'float' ) );
117
+ } else {
232
118
 
233
- // SPECULAR_TINT
119
+ this.addFlow( 'compute', object );
234
120
 
235
- this.addFlow( 'fragment', new VarNode( new ExpressionNode( 'mix( vec3<f32>( 0.04 ), Color.rgb, Metalness )', 'vec3' ), 'SpecularColor', 'color' ) );
121
+ }
236
122
 
237
- // NORMAL_VIEW
123
+ return super.build();
238
124
 
239
- let normalNode = null;
125
+ }
240
126
 
241
- if ( material.normalNode && material.normalNode.isNode ) {
127
+ addFlowCode( code ) {
242
128
 
243
- normalNode = material.normalNode;
129
+ if ( ! /;\s*$/.test( code ) ) {
244
130
 
245
- } else {
131
+ code += ';';
246
132
 
247
- normalNode = new NormalNode( NormalNode.VIEW );
133
+ }
248
134
 
249
- }
135
+ super.addFlowCode( code + '\n\t' );
250
136
 
251
- this.addFlow( 'fragment', new VarNode( normalNode, 'TransformedNormalView', 'vec3' ) );
137
+ }
252
138
 
253
- }
139
+ getSampler( textureProperty, uvSnippet, shaderStage = this.shaderStage ) {
254
140
 
255
- // LIGHT
141
+ if ( shaderStage === 'fragment' ) {
256
142
 
257
- let outputNode = diffuseColorNode;
143
+ return `textureSample( ${textureProperty}, ${textureProperty}_sampler, ${uvSnippet} )`;
258
144
 
259
- if ( lightNode && lightNode.isNode ) {
145
+ } else {
260
146
 
261
- const lightContextNode = new LightContextNode( lightNode );
147
+ this._include( 'repeatWrapping' );
262
148
 
263
- outputNode = this.addFlow( 'fragment', new VarNode( lightContextNode, 'Light', 'vec3' ) );
149
+ const dimension = `textureDimensions( ${textureProperty}, 0 )`;
264
150
 
265
- }
151
+ return `textureLoad( ${textureProperty}, repeatWrapping( ${uvSnippet}, ${dimension} ), 0 )`;
266
152
 
267
- // RESULT
153
+ }
268
154
 
269
- const outputNodeObj = nodeObject( outputNode );
155
+ }
270
156
 
271
- outputNode = join( outputNodeObj.x, outputNodeObj.y, outputNodeObj.z, nodeObject( diffuseColorNode ).w );
157
+ getSamplerLevel( textureProperty, uvSnippet, biasSnippet, shaderStage = this.shaderStage ) {
272
158
 
273
- //
159
+ if ( shaderStage === 'fragment' ) {
274
160
 
275
- const outputEncoding = this.renderer.outputEncoding;
161
+ return `textureSampleLevel( ${textureProperty}, ${textureProperty}_sampler, ${uvSnippet}, ${biasSnippet} )`;
276
162
 
277
- if ( outputEncoding !== LinearEncoding ) {
163
+ } else {
278
164
 
279
- outputNode = new ColorSpaceNode( ColorSpaceNode.LINEAR_TO_LINEAR, outputNode );
280
- outputNode.fromEncoding( outputEncoding );
165
+ this._include( 'repeatWrapping' );
281
166
 
282
- }
167
+ const dimension = `textureDimensions( ${textureProperty}, 0 )`;
283
168
 
284
- this.addFlow( 'fragment', new VarNode( outputNode, 'Output', 'vec4' ) );
169
+ return `textureLoad( ${textureProperty}, repeatWrapping( ${uvSnippet}, ${dimension} ), i32( ${biasSnippet} ) )`;
285
170
 
286
171
  }
287
172
 
288
173
  }
289
174
 
290
- addFlowCode( code ) {
291
-
292
- if ( ! /;\s*$/.test( code ) ) {
293
-
294
- code += ';';
295
-
296
- }
175
+ getTexture( textureProperty, uvSnippet, shaderStage = this.shaderStage ) {
297
176
 
298
- super.addFlowCode( code + '\n\t' );
177
+ return this.getSampler( textureProperty, uvSnippet, shaderStage );
299
178
 
300
179
  }
301
180
 
302
- getTexture( textureProperty, uvSnippet, biasSnippet, shaderStage = this.shaderStage ) {
181
+ getTextureLevel( textureProperty, uvSnippet, biasSnippet, shaderStage = this.shaderStage ) {
303
182
 
304
- if ( shaderStage === 'fragment' ) {
183
+ return this.getSamplerLevel( textureProperty, uvSnippet, biasSnippet, shaderStage );
305
184
 
306
- return `textureSample( ${textureProperty}, ${textureProperty}_sampler, ${uvSnippet} )`;
185
+ }
307
186
 
308
- } else {
187
+ getCubeTexture( textureProperty, uvSnippet, shaderStage = this.shaderStage ) {
309
188
 
310
- this._include( 'repeatWrapping' );
189
+ return this.getSampler( textureProperty, uvSnippet, shaderStage );
311
190
 
312
- const dimension = `textureDimensions( ${textureProperty}, 0 )`;
191
+ }
313
192
 
314
- return `textureLoad( ${textureProperty}, repeatWrapping( ${uvSnippet}, ${dimension} ), 0 )`;
193
+ getCubeTextureLevel( textureProperty, uvSnippet, biasSnippet, shaderStage = this.shaderStage ) {
315
194
 
316
- }
195
+ return this.getSamplerLevel( textureProperty, uvSnippet, biasSnippet, shaderStage );
317
196
 
318
197
  }
319
198
 
320
199
  getPropertyName( node, shaderStage = this.shaderStage ) {
321
200
 
322
- if ( node.isNodeVary === true ) {
201
+ if ( node.isNodeVarying === true ) {
323
202
 
324
203
  if ( shaderStage === 'vertex' ) {
325
204
 
326
- return `NodeVarys.${ node.name }`;
205
+ return `NodeVaryings.${ node.name }`;
327
206
 
328
207
  }
329
208
 
@@ -332,13 +211,13 @@ class WebGPUNodeBuilder extends NodeBuilder {
332
211
  const name = node.name;
333
212
  const type = node.type;
334
213
 
335
- if ( type === 'texture' ) {
214
+ if ( type === 'texture' || type === 'cubeTexture' ) {
336
215
 
337
216
  return name;
338
217
 
339
- } else if ( type === 'buffer' ) {
218
+ } else if ( type === 'buffer' || type === 'storageBuffer' ) {
340
219
 
341
- return `NodeBuffer.${name}`;
220
+ return `NodeBuffer_${node.node.id}.${name}`;
342
221
 
343
222
  } else {
344
223
 
@@ -356,7 +235,7 @@ class WebGPUNodeBuilder extends NodeBuilder {
356
235
 
357
236
  const bindings = this.bindings;
358
237
 
359
- return [ ...bindings.vertex, ...bindings.fragment ];
238
+ return this.material !== null ? [ ...bindings.vertex, ...bindings.fragment ] : bindings.compute;
360
239
 
361
240
  }
362
241
 
@@ -371,10 +250,21 @@ class WebGPUNodeBuilder extends NodeBuilder {
371
250
 
372
251
  const bindings = this.bindings[ shaderStage ];
373
252
 
374
- if ( type === 'texture' ) {
253
+ if ( type === 'texture' || type === 'cubeTexture' ) {
375
254
 
376
255
  const sampler = new WebGPUNodeSampler( `${uniformNode.name}_sampler`, uniformNode.node );
377
- const texture = new WebGPUNodeSampledTexture( uniformNode.name, uniformNode.node );
256
+
257
+ let texture = null;
258
+
259
+ if ( type === 'texture' ) {
260
+
261
+ texture = new WebGPUNodeSampledTexture( uniformNode.name, uniformNode.node );
262
+
263
+ } else if ( type === 'cubeTexture' ) {
264
+
265
+ texture = new WebGPUNodeSampledCubeTexture( uniformNode.name, uniformNode.node );
266
+
267
+ }
378
268
 
379
269
  // add first textures in sequence and group for last
380
270
  const lastBinding = bindings[ bindings.length - 1 ];
@@ -392,13 +282,13 @@ class WebGPUNodeBuilder extends NodeBuilder {
392
282
 
393
283
  uniformGPU = [ texture ];
394
284
 
395
-
396
285
  }
397
286
 
287
+ } else if ( type === 'buffer' || type === 'storageBuffer' ) {
398
288
 
399
- } else if ( type === 'buffer' ) {
400
-
401
- const buffer = new WebGPUUniformBuffer( 'NodeBuffer', node.value );
289
+ const bufferClass = type === 'storageBuffer' ? WebGPUStorageBuffer : WebGPUUniformBuffer;
290
+ const buffer = new bufferClass( 'NodeBuffer_' + node.id, node.value );
291
+ buffer.setVisibility( gpuShaderStageLib[ shaderStage ] );
402
292
 
403
293
  // add first textures in sequence and group for last
404
294
  const lastBinding = bindings[ bindings.length - 1 ];
@@ -414,7 +304,8 @@ class WebGPUNodeBuilder extends NodeBuilder {
414
304
 
415
305
  if ( uniformsGroup === undefined ) {
416
306
 
417
- uniformsGroup = new WebGPUNodeUniformsGroup( shaderStage );
307
+ uniformsGroup = new WebGPUUniformsGroup( 'nodeUniforms' );
308
+ uniformsGroup.setVisibility( gpuShaderStageLib[ shaderStage ] );
418
309
 
419
310
  this.uniformsGroup[ shaderStage ] = uniformsGroup;
420
311
 
@@ -422,13 +313,13 @@ class WebGPUNodeBuilder extends NodeBuilder {
422
313
 
423
314
  }
424
315
 
425
- if ( node.isArrayInputNode === true ) {
316
+ if ( node.isArrayUniformNode === true ) {
426
317
 
427
318
  uniformGPU = [];
428
319
 
429
- for ( const inputNode of node.nodes ) {
320
+ for ( const uniformNode of node.nodes ) {
430
321
 
431
- const uniformNodeGPU = this._getNodeUniform( inputNode, type );
322
+ const uniformNodeGPU = this._getNodeUniform( uniformNode, type );
432
323
 
433
324
  // fit bounds to buffer
434
325
  uniformNodeGPU.boundary = getVectorLength( uniformNodeGPU.itemSize );
@@ -464,107 +355,144 @@ class WebGPUNodeBuilder extends NodeBuilder {
464
355
 
465
356
  }
466
357
 
358
+ isReference( type ) {
359
+
360
+ return super.isReference( type ) || type === 'texture_2d' || type === 'texture_cube';
361
+
362
+ }
363
+
364
+ getBuiltin( name, property, type, shaderStage = this.shaderStage ) {
365
+
366
+ const map = this.builtins[ shaderStage ];
367
+
368
+ if ( map.has( name ) === false ) {
369
+
370
+ map.set( name, {
371
+ name,
372
+ property,
373
+ type
374
+ } );
375
+
376
+ }
377
+
378
+ return property;
379
+
380
+ }
381
+
382
+ getInstanceIndex() {
383
+
384
+ if ( this.shaderStage === 'vertex' ) {
385
+
386
+ return this.getBuiltin( 'instance_index', 'instanceIndex', 'u32', 'attribute' );
387
+
388
+ }
389
+
390
+ return 'instanceIndex';
391
+
392
+ }
393
+
394
+ getFrontFacing() {
395
+
396
+ return this.getBuiltin( 'front_facing', 'isFront', 'bool' );
397
+
398
+ }
399
+
467
400
  getAttributes( shaderStage ) {
468
401
 
469
- let snippet = '';
402
+ const snippets = [];
470
403
 
471
- if ( shaderStage === 'vertex' ) {
404
+ if ( shaderStage === 'vertex' || shaderStage === 'compute' ) {
405
+
406
+ if ( shaderStage === 'compute' ) {
407
+
408
+ this.getBuiltin( 'global_invocation_id', 'id', 'vec3<u32>', 'attribute' );
409
+
410
+ }
411
+
412
+ for ( const { name, property, type } of this.builtins.attribute.values() ) {
413
+
414
+ snippets.push( `@builtin( ${name} ) ${property} : ${type}` );
415
+
416
+ }
472
417
 
473
418
  const attributes = this.attributes;
474
419
  const length = attributes.length;
475
420
 
476
- snippet += '\n';
477
-
478
421
  for ( let index = 0; index < length; index ++ ) {
479
422
 
480
423
  const attribute = attributes[ index ];
481
424
  const name = attribute.name;
482
425
  const type = this.getType( attribute.type );
483
426
 
484
- snippet += `\t[[ location( ${index} ) ]] ${ name } : ${ type }`;
485
-
486
- if ( index + 1 < length ) {
487
-
488
- snippet += ',\n';
489
-
490
- }
427
+ snippets.push( `@location( ${index} ) ${ name } : ${ type }` );
491
428
 
492
429
  }
493
430
 
494
- snippet += '\n';
495
-
496
431
  }
497
432
 
498
- return snippet;
433
+ return snippets.join( ',\n\t' );
499
434
 
500
435
  }
501
436
 
502
437
  getVars( shaderStage ) {
503
438
 
504
- let snippet = '';
505
-
439
+ const snippets = [];
506
440
  const vars = this.vars[ shaderStage ];
507
441
 
508
- for ( let index = 0; index < vars.length; index ++ ) {
509
-
510
- const variable = vars[ index ];
442
+ for ( const variable of vars ) {
511
443
 
512
444
  const name = variable.name;
513
445
  const type = this.getType( variable.type );
514
446
 
515
- snippet += `var ${name} : ${type}; `;
447
+ snippets.push( `\tvar ${name} : ${type};` );
516
448
 
517
449
  }
518
450
 
519
- return snippet;
451
+ return `\n${ snippets.join( '\n' ) }\n`;
520
452
 
521
453
  }
522
454
 
523
- getVarys( shaderStage ) {
455
+ getVaryings( shaderStage ) {
524
456
 
525
- let snippet = '';
457
+ const snippets = [];
526
458
 
527
459
  if ( shaderStage === 'vertex' ) {
528
460
 
529
- snippet += '\t[[ builtin( position ) ]] Vertex: vec4<f32>;\n';
461
+ this.getBuiltin( 'position', 'Vertex', 'vec4<f32>', 'vertex' );
530
462
 
531
- const varys = this.varys;
463
+ const varyings = this.varyings;
532
464
 
533
- for ( let index = 0; index < varys.length; index ++ ) {
465
+ for ( let index = 0; index < varyings.length; index ++ ) {
534
466
 
535
- const vary = varys[ index ];
467
+ const varying = varyings[ index ];
536
468
 
537
- snippet += `\t[[ location( ${index} ) ]] ${ vary.name } : ${ this.getType( vary.type ) };\n`;
469
+ snippets.push( `@location( ${index} ) ${ varying.name } : ${ this.getType( varying.type ) }` );
538
470
 
539
471
  }
540
472
 
541
- snippet = this._getWGSLStruct( 'NodeVarysStruct', snippet );
542
-
543
473
  } else if ( shaderStage === 'fragment' ) {
544
474
 
545
- const varys = this.varys;
475
+ const varyings = this.varyings;
546
476
 
547
- snippet += '\n';
477
+ for ( let index = 0; index < varyings.length; index ++ ) {
548
478
 
549
- for ( let index = 0; index < varys.length; index ++ ) {
479
+ const varying = varyings[ index ];
550
480
 
551
- const vary = varys[ index ];
481
+ snippets.push( `@location( ${index} ) ${ varying.name } : ${ this.getType( varying.type ) }` );
552
482
 
553
- snippet += `\t[[ location( ${index} ) ]] ${ vary.name } : ${ this.getType( vary.type ) }`;
554
-
555
- if ( index + 1 < varys.length ) {
483
+ }
556
484
 
557
- snippet += ',\n';
485
+ }
558
486
 
559
- }
487
+ for ( const { name, property, type } of this.builtins[ shaderStage ].values() ) {
560
488
 
561
- }
562
-
563
- snippet += '\n';
489
+ snippets.push( `@builtin( ${name} ) ${property} : ${type}` );
564
490
 
565
491
  }
566
492
 
567
- return snippet;
493
+ const code = snippets.join( ',\n\t' );
494
+
495
+ return shaderStage === 'vertex' ? this._getWGSLStruct( 'NodeVaryingsStruct', '\t' + code ) : code;
568
496
 
569
497
  }
570
498
 
@@ -572,8 +500,9 @@ class WebGPUNodeBuilder extends NodeBuilder {
572
500
 
573
501
  const uniforms = this.uniforms[ shaderStage ];
574
502
 
575
- let snippet = '';
576
- let groupSnippet = '';
503
+ const bindingSnippets = [];
504
+ const bufferSnippets = [];
505
+ const groupSnippets = [];
577
506
 
578
507
  let index = this.bindingsOffset[ shaderStage ];
579
508
 
@@ -583,21 +512,33 @@ class WebGPUNodeBuilder extends NodeBuilder {
583
512
 
584
513
  if ( shaderStage === 'fragment' ) {
585
514
 
586
- snippet += `[[ group( 0 ), binding( ${index ++} ) ]] var ${uniform.name}_sampler : sampler; `;
515
+ bindingSnippets.push( `@group( 0 ) @binding( ${index ++} ) var ${uniform.name}_sampler : sampler;` );
516
+
517
+ }
518
+
519
+ bindingSnippets.push( `@group( 0 ) @binding( ${index ++} ) var ${uniform.name} : texture_2d<f32>;` );
520
+
521
+ } else if ( uniform.type === 'cubeTexture' ) {
522
+
523
+ if ( shaderStage === 'fragment' ) {
524
+
525
+ bindingSnippets.push( `@group( 0 ) @binding( ${index ++} ) var ${uniform.name}_sampler : sampler;` );
587
526
 
588
527
  }
589
528
 
590
- snippet += `[[ group( 0 ), binding( ${index ++} ) ]] var ${uniform.name} : texture_2d<f32>; `;
529
+ bindingSnippets.push( `@group( 0 ) @binding( ${index ++} ) var ${uniform.name} : texture_cube<f32>;` );
591
530
 
592
- } else if ( uniform.type === 'buffer' ) {
531
+ } else if ( uniform.type === 'buffer' || uniform.type === 'storageBuffer' ) {
593
532
 
594
533
  const bufferNode = uniform.node;
595
534
  const bufferType = this.getType( bufferNode.bufferType );
596
535
  const bufferCount = bufferNode.bufferCount;
597
536
 
598
- const bufferSnippet = `\t${uniform.name} : array< ${bufferType}, ${bufferCount} >;\n`;
537
+ const bufferCountSnippet = bufferCount > 0 ? ', ' + bufferCount : '';
538
+ const bufferSnippet = `\t${uniform.name} : array< ${bufferType}${bufferCountSnippet} >\n`;
539
+ const bufferAccessMode = bufferNode.isStorageBufferNode ? 'storage,read_write' : 'uniform';
599
540
 
600
- snippet += this._getWGSLUniforms( 'NodeBuffer', bufferSnippet, index ++ ) + '\n\n';
541
+ bufferSnippets.push( this._getWGSLStructBinding( 'NodeBuffer_' + bufferNode.id, bufferSnippet, bufferAccessMode, index ++ ) );
601
542
 
602
543
  } else {
603
544
 
@@ -607,11 +548,11 @@ class WebGPUNodeBuilder extends NodeBuilder {
607
548
 
608
549
  const length = uniform.value.length;
609
550
 
610
- groupSnippet += `uniform ${vectorType}[ ${length} ] ${uniform.name}; `;
551
+ groupSnippets.push( `uniform ${vectorType}[ ${length} ] ${uniform.name}` );
611
552
 
612
553
  } else {
613
554
 
614
- groupSnippet += `\t${uniform.name} : ${ vectorType};\n`;
555
+ groupSnippets.push( `\t${uniform.name} : ${ vectorType}` );
615
556
 
616
557
  }
617
558
 
@@ -619,32 +560,35 @@ class WebGPUNodeBuilder extends NodeBuilder {
619
560
 
620
561
  }
621
562
 
622
- if ( groupSnippet ) {
563
+ let code = bindingSnippets.join( '\n' );
564
+ code += bufferSnippets.join( '\n' );
623
565
 
624
- snippet += this._getWGSLUniforms( 'NodeUniforms', groupSnippet, index ++ );
566
+ if ( groupSnippets.length > 0 ) {
567
+
568
+ code += this._getWGSLStructBinding( 'NodeUniforms', groupSnippets.join( ',\n' ), 'uniform', index ++ );
625
569
 
626
570
  }
627
571
 
628
- return snippet;
572
+ return code;
629
573
 
630
574
  }
631
575
 
632
576
  buildCode() {
633
577
 
634
- const shadersData = { fragment: {}, vertex: {} };
578
+ const shadersData = this.material !== null ? { fragment: {}, vertex: {} } : { compute: {} };
635
579
 
636
580
  for ( const shaderStage in shadersData ) {
637
581
 
638
582
  let flow = '// code\n';
639
583
  flow += `\t${ this.flowCode[ shaderStage ] }`;
640
- flow += '\n';
584
+ flow += '\n\t';
641
585
 
642
586
  const flowNodes = this.flowNodes[ shaderStage ];
643
587
  const mainNode = flowNodes[ flowNodes.length - 1 ];
644
588
 
645
589
  for ( const node of flowNodes ) {
646
590
 
647
- const flowSlotData = this.getFlowData( shaderStage, node );
591
+ const flowSlotData = this.getFlowData( node/*, shaderStage*/ );
648
592
  const slotName = node.name;
649
593
 
650
594
  if ( slotName ) {
@@ -657,13 +601,13 @@ class WebGPUNodeBuilder extends NodeBuilder {
657
601
 
658
602
  flow += `${ flowSlotData.code }\n\t`;
659
603
 
660
- if ( node === mainNode ) {
604
+ if ( node === mainNode && shaderStage !== 'compute' ) {
661
605
 
662
606
  flow += '// FLOW RESULT\n\t';
663
607
 
664
608
  if ( shaderStage === 'vertex' ) {
665
609
 
666
- flow += 'NodeVarys.Vertex = ';
610
+ flow += 'NodeVaryings.Vertex = ';
667
611
 
668
612
  } else if ( shaderStage === 'fragment' ) {
669
613
 
@@ -681,15 +625,23 @@ class WebGPUNodeBuilder extends NodeBuilder {
681
625
 
682
626
  stageData.uniforms = this.getUniforms( shaderStage );
683
627
  stageData.attributes = this.getAttributes( shaderStage );
684
- stageData.varys = this.getVarys( shaderStage );
628
+ stageData.varyings = this.getVaryings( shaderStage );
685
629
  stageData.vars = this.getVars( shaderStage );
686
630
  stageData.codes = this.getCodes( shaderStage );
687
631
  stageData.flow = flow;
688
632
 
689
633
  }
690
634
 
691
- this.vertexShader = this._getWGSLVertexCode( shadersData.vertex );
692
- this.fragmentShader = this._getWGSLFragmentCode( shadersData.fragment );
635
+ if ( this.material !== null ) {
636
+
637
+ this.vertexShader = this._getWGSLVertexCode( shadersData.vertex );
638
+ this.fragmentShader = this._getWGSLFragmentCode( shadersData.fragment );
639
+
640
+ } else {
641
+
642
+ this.computeShader = this._getWGSLComputeCode( shadersData.compute, ( this.object.workgroupSize || [ 64 ] ).join( ', ' ) );
643
+
644
+ }
693
645
 
694
646
  }
695
647
 
@@ -711,6 +663,12 @@ class WebGPUNodeBuilder extends NodeBuilder {
711
663
 
712
664
  }
713
665
 
666
+ isAvailable( name ) {
667
+
668
+ return supports[ name ] === true;
669
+
670
+ }
671
+
714
672
  _include( name ) {
715
673
 
716
674
  wgslPolyfill[ name ].build( this );
@@ -738,17 +696,17 @@ class WebGPUNodeBuilder extends NodeBuilder {
738
696
  // uniforms
739
697
  ${shaderData.uniforms}
740
698
 
741
- // varys
742
- ${shaderData.varys}
699
+ // varyings
700
+ ${shaderData.varyings}
743
701
 
744
702
  // codes
745
703
  ${shaderData.codes}
746
704
 
747
- [[ stage( vertex ) ]]
748
- fn main( ${shaderData.attributes} ) -> NodeVarysStruct {
705
+ @vertex
706
+ fn main( ${shaderData.attributes} ) -> NodeVaryingsStruct {
749
707
 
750
708
  // system
751
- var NodeVarys: NodeVarysStruct;
709
+ var NodeVaryings: NodeVaryingsStruct;
752
710
 
753
711
  // vars
754
712
  ${shaderData.vars}
@@ -756,7 +714,7 @@ fn main( ${shaderData.attributes} ) -> NodeVarysStruct {
756
714
  // flow
757
715
  ${shaderData.flow}
758
716
 
759
- return NodeVarys;
717
+ return NodeVaryings;
760
718
 
761
719
  }
762
720
  `;
@@ -773,8 +731,37 @@ ${shaderData.uniforms}
773
731
  // codes
774
732
  ${shaderData.codes}
775
733
 
776
- [[ stage( fragment ) ]]
777
- fn main( ${shaderData.varys} ) -> [[ location( 0 ) ]] vec4<f32> {
734
+ @fragment
735
+ fn main( ${shaderData.varyings} ) -> @location( 0 ) vec4<f32> {
736
+
737
+ // vars
738
+ ${shaderData.vars}
739
+
740
+ // flow
741
+ ${shaderData.flow}
742
+
743
+ }
744
+ `;
745
+
746
+ }
747
+
748
+ _getWGSLComputeCode( shaderData, workgroupSize ) {
749
+
750
+ return `${ this.getSignature() }
751
+ // system
752
+ var<private> instanceIndex : u32;
753
+
754
+ // uniforms
755
+ ${shaderData.uniforms}
756
+
757
+ // codes
758
+ ${shaderData.codes}
759
+
760
+ @compute @workgroup_size( ${workgroupSize} )
761
+ fn main( ${shaderData.attributes} ) {
762
+
763
+ // system
764
+ instanceIndex = id.x;
778
765
 
779
766
  // vars
780
767
  ${shaderData.vars}
@@ -791,19 +778,19 @@ fn main( ${shaderData.varys} ) -> [[ location( 0 ) ]] vec4<f32> {
791
778
 
792
779
  return `
793
780
  struct ${name} {
794
- \n${vars}
781
+ ${vars}
795
782
  };`;
796
783
 
797
784
  }
798
785
 
799
- _getWGSLUniforms( name, vars, binding = 0, group = 0 ) {
786
+ _getWGSLStructBinding( name, vars, access, binding = 0, group = 0 ) {
800
787
 
801
788
  const structName = name + 'Struct';
802
789
  const structSnippet = this._getWGSLStruct( structName, vars );
803
790
 
804
791
  return `${structSnippet}
805
- [[ binding( ${binding} ), group( ${group} ) ]]
806
- var<uniform> ${name} : ${structName};`;
792
+ @binding( ${binding} ) @group( ${group} )
793
+ var<${access}> ${name} : ${structName};`;
807
794
 
808
795
  }
809
796