super-three 0.136.0 → 0.141.0

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