@playdrop/playdrop-cli 0.3.5-build.1 → 0.3.8-build.2

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 (1288) hide show
  1. package/config/client-meta.json +5 -5
  2. package/dist/apps/upload.js +1 -0
  3. package/dist/catalogue.d.ts +7 -0
  4. package/dist/catalogue.js +70 -33
  5. package/dist/commands/create.js +129 -70
  6. package/dist/commands/createRemixContent.d.ts +3 -0
  7. package/dist/commands/createRemixContent.js +310 -0
  8. package/dist/commands/generation.d.ts +0 -1
  9. package/dist/commands/generation.js +0 -18
  10. package/dist/commands/init.js +3 -3
  11. package/dist/commands/upload.js +11 -0
  12. package/dist/index.js +17 -4
  13. package/node_modules/@playdrop/ai-client/dist/index.d.ts +1 -1
  14. package/node_modules/@playdrop/ai-client/dist/index.d.ts.map +1 -1
  15. package/node_modules/@playdrop/ai-client/dist/index.js +1 -1
  16. package/node_modules/@playdrop/api-client/dist/client.d.ts +8 -2
  17. package/node_modules/@playdrop/api-client/dist/client.d.ts.map +1 -1
  18. package/node_modules/@playdrop/api-client/dist/client.js +2 -0
  19. package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts +3 -2
  20. package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts.map +1 -1
  21. package/node_modules/@playdrop/api-client/dist/domains/apps.js +24 -2
  22. package/node_modules/@playdrop/api-client/dist/domains/asset-packs.d.ts +3 -1
  23. package/node_modules/@playdrop/api-client/dist/domains/asset-packs.d.ts.map +1 -1
  24. package/node_modules/@playdrop/api-client/dist/domains/asset-packs.js +19 -1
  25. package/node_modules/@playdrop/api-client/dist/domains/assets.d.ts +3 -1
  26. package/node_modules/@playdrop/api-client/dist/domains/assets.d.ts.map +1 -1
  27. package/node_modules/@playdrop/api-client/dist/domains/assets.js +19 -1
  28. package/node_modules/@playdrop/api-client/dist/index.d.ts +3 -0
  29. package/node_modules/@playdrop/api-client/dist/index.d.ts.map +1 -1
  30. package/node_modules/@playdrop/api-client/dist/index.js +9 -0
  31. package/node_modules/@playdrop/config/client-meta.json +5 -5
  32. package/node_modules/@playdrop/types/dist/api.d.ts +22 -1
  33. package/node_modules/@playdrop/types/dist/api.d.ts.map +1 -1
  34. package/node_modules/@playdrop/types/dist/asset-pack.d.ts +1 -0
  35. package/node_modules/@playdrop/types/dist/asset-pack.d.ts.map +1 -1
  36. package/node_modules/@playdrop/types/dist/asset.d.ts +27 -0
  37. package/node_modules/@playdrop/types/dist/asset.d.ts.map +1 -1
  38. package/node_modules/@playdrop/types/dist/graph.d.ts +21 -0
  39. package/node_modules/@playdrop/types/dist/graph.d.ts.map +1 -1
  40. package/node_modules/@playdrop/types/dist/graph.js +66 -0
  41. package/node_modules/@playdrop/types/dist/version.d.ts +1 -0
  42. package/node_modules/@playdrop/types/dist/version.d.ts.map +1 -1
  43. package/node_modules/@playdrop/vox-three/dist/src/index.d.ts +1 -0
  44. package/node_modules/@playdrop/vox-three/dist/src/index.js +18 -0
  45. package/node_modules/@playdrop/vox-three/dist/src/index.js.map +1 -0
  46. package/node_modules/@playdrop/vox-three/dist/src/vox.d.ts +25 -0
  47. package/node_modules/@playdrop/vox-three/dist/src/vox.js +425 -0
  48. package/node_modules/@playdrop/vox-three/dist/src/vox.js.map +1 -0
  49. package/node_modules/@playdrop/vox-three/dist/test/vox.test.d.ts +1 -0
  50. package/node_modules/@playdrop/vox-three/dist/test/vox.test.js +79 -0
  51. package/node_modules/@playdrop/vox-three/dist/test/vox.test.js.map +1 -0
  52. package/node_modules/@playdrop/vox-three/package.json +25 -0
  53. package/node_modules/three/LICENSE +1 -1
  54. package/node_modules/three/README.md +7 -7
  55. package/node_modules/three/build/three.cjs +49655 -25499
  56. package/node_modules/three/build/three.core.js +58952 -0
  57. package/node_modules/three/build/three.core.min.js +6 -0
  58. package/node_modules/three/build/three.module.js +11162 -45962
  59. package/node_modules/three/build/three.module.min.js +2 -2
  60. package/node_modules/three/build/three.tsl.js +640 -0
  61. package/node_modules/three/build/three.tsl.min.js +6 -0
  62. package/node_modules/three/build/three.webgpu.js +79685 -0
  63. package/node_modules/three/build/three.webgpu.min.js +6 -0
  64. package/node_modules/three/build/three.webgpu.nodes.js +79456 -0
  65. package/node_modules/three/build/three.webgpu.nodes.min.js +6 -0
  66. package/node_modules/three/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  67. package/node_modules/three/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  68. package/node_modules/three/examples/jsm/Addons.js +8 -18
  69. package/node_modules/three/examples/jsm/animation/AnimationClipCreator.js +59 -7
  70. package/node_modules/three/examples/jsm/animation/CCDIKSolver.js +154 -45
  71. package/node_modules/three/examples/jsm/capabilities/WebGL.js +28 -23
  72. package/node_modules/three/examples/jsm/capabilities/WebGPU.js +19 -17
  73. package/node_modules/three/examples/jsm/controls/ArcballControls.js +636 -324
  74. package/node_modules/three/examples/jsm/controls/DragControls.js +332 -101
  75. package/node_modules/three/examples/jsm/controls/FirstPersonControls.js +291 -169
  76. package/node_modules/three/examples/jsm/controls/FlyControls.js +245 -191
  77. package/node_modules/three/examples/jsm/controls/MapControls.js +43 -9
  78. package/node_modules/three/examples/jsm/controls/OrbitControls.js +1156 -802
  79. package/node_modules/three/examples/jsm/controls/PointerLockControls.js +137 -35
  80. package/node_modules/three/examples/jsm/controls/TrackballControls.js +629 -456
  81. package/node_modules/three/examples/jsm/controls/TransformControls.js +442 -97
  82. package/node_modules/three/examples/jsm/csm/CSM.js +230 -17
  83. package/node_modules/three/examples/jsm/csm/CSMFrustum.js +61 -4
  84. package/node_modules/three/examples/jsm/csm/CSMHelper.js +50 -0
  85. package/node_modules/three/examples/jsm/csm/CSMShader.js +17 -5
  86. package/node_modules/three/examples/jsm/csm/CSMShadowNode.js +599 -0
  87. package/node_modules/three/examples/jsm/curves/CurveExtras.js +303 -31
  88. package/node_modules/three/examples/jsm/curves/NURBSCurve.js +91 -16
  89. package/node_modules/three/examples/jsm/curves/NURBSSurface.js +52 -6
  90. package/node_modules/three/examples/jsm/curves/NURBSUtils.js +102 -112
  91. package/node_modules/three/examples/jsm/curves/NURBSVolume.js +24 -4
  92. package/node_modules/three/examples/jsm/effects/AnaglyphEffect.js +39 -14
  93. package/node_modules/three/examples/jsm/effects/AsciiEffect.js +69 -22
  94. package/node_modules/three/examples/jsm/effects/OutlineEffect.js +61 -111
  95. package/node_modules/three/examples/jsm/effects/ParallaxBarrierEffect.js +48 -12
  96. package/node_modules/three/examples/jsm/effects/StereoEffect.js +37 -1
  97. package/node_modules/three/examples/jsm/environments/DebugEnvironment.js +50 -0
  98. package/node_modules/three/examples/jsm/environments/RoomEnvironment.js +82 -48
  99. package/node_modules/three/examples/jsm/exporters/DRACOExporter.js +59 -15
  100. package/node_modules/three/examples/jsm/exporters/EXRExporter.js +58 -19
  101. package/node_modules/three/examples/jsm/exporters/GLTFExporter.js +460 -174
  102. package/node_modules/three/examples/jsm/exporters/KTX2Exporter.js +80 -25
  103. package/node_modules/three/examples/jsm/exporters/OBJExporter.js +25 -1
  104. package/node_modules/three/examples/jsm/exporters/PLYExporter.js +51 -17
  105. package/node_modules/three/examples/jsm/exporters/STLExporter.js +27 -5
  106. package/node_modules/three/examples/jsm/exporters/USDZExporter.js +783 -268
  107. package/node_modules/three/examples/jsm/geometries/BoxLineGeometry.js +23 -0
  108. package/node_modules/three/examples/jsm/geometries/ConvexGeometry.js +19 -0
  109. package/node_modules/three/examples/jsm/geometries/DecalGeometry.js +94 -30
  110. package/node_modules/three/examples/jsm/geometries/ParametricFunctions.js +100 -0
  111. package/node_modules/three/examples/jsm/geometries/ParametricGeometry.js +38 -5
  112. package/node_modules/three/examples/jsm/geometries/RoundedBoxGeometry.js +68 -7
  113. package/node_modules/three/examples/jsm/geometries/TeapotGeometry.js +23 -38
  114. package/node_modules/three/examples/jsm/geometries/TextGeometry.js +48 -21
  115. package/node_modules/three/examples/jsm/gpgpu/BitonicSort.js +715 -0
  116. package/node_modules/three/examples/jsm/helpers/LightProbeHelper.js +79 -44
  117. package/node_modules/three/examples/jsm/helpers/LightProbeHelperGPU.js +102 -0
  118. package/node_modules/three/examples/jsm/helpers/OctreeHelper.js +36 -0
  119. package/node_modules/three/examples/jsm/helpers/PositionalAudioHelper.js +60 -0
  120. package/node_modules/three/examples/jsm/helpers/RapierHelper.js +59 -0
  121. package/node_modules/three/examples/jsm/helpers/RectAreaLightHelper.js +36 -3
  122. package/node_modules/three/examples/jsm/helpers/TextureHelper.js +28 -0
  123. package/node_modules/three/examples/jsm/helpers/TextureHelperGPU.js +214 -0
  124. package/node_modules/three/examples/jsm/helpers/VertexNormalsHelper.js +61 -2
  125. package/node_modules/three/examples/jsm/helpers/VertexTangentsHelper.js +47 -2
  126. package/node_modules/three/examples/jsm/helpers/ViewHelper.js +192 -65
  127. package/node_modules/three/examples/jsm/inspector/Inspector.js +427 -0
  128. package/node_modules/three/examples/jsm/inspector/RendererInspector.js +415 -0
  129. package/node_modules/three/examples/jsm/inspector/tabs/Console.js +204 -0
  130. package/node_modules/three/examples/jsm/inspector/tabs/Parameters.js +332 -0
  131. package/node_modules/three/examples/jsm/inspector/tabs/Performance.js +268 -0
  132. package/node_modules/three/examples/jsm/inspector/tabs/Viewer.js +166 -0
  133. package/node_modules/three/examples/jsm/inspector/ui/Graph.js +95 -0
  134. package/node_modules/three/examples/jsm/inspector/ui/Item.js +170 -0
  135. package/node_modules/three/examples/jsm/inspector/ui/List.js +75 -0
  136. package/node_modules/three/examples/jsm/inspector/ui/Profiler.js +170 -0
  137. package/node_modules/three/examples/jsm/inspector/ui/Style.js +654 -0
  138. package/node_modules/three/examples/jsm/inspector/ui/Tab.js +46 -0
  139. package/node_modules/three/examples/jsm/inspector/ui/Values.js +423 -0
  140. package/node_modules/three/examples/jsm/inspector/ui/utils.js +56 -0
  141. package/node_modules/three/examples/jsm/interactive/HTMLMesh.js +50 -21
  142. package/node_modules/three/examples/jsm/interactive/InteractiveGroup.js +170 -62
  143. package/node_modules/three/examples/jsm/interactive/SelectionBox.js +106 -9
  144. package/node_modules/three/examples/jsm/interactive/SelectionHelper.js +76 -30
  145. package/node_modules/three/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  146. package/node_modules/three/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  147. package/node_modules/three/examples/jsm/libs/demuxer_mp4.js +109 -0
  148. package/node_modules/three/examples/jsm/libs/draco/README.md +2 -2
  149. package/node_modules/three/examples/jsm/libs/fflate.module.js +694 -496
  150. package/node_modules/three/examples/jsm/libs/ktx-parse.module.js +1 -1
  151. package/node_modules/three/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  152. package/node_modules/three/examples/jsm/libs/motion-controllers.module.js +1 -1
  153. package/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.js +1 -8723
  154. package/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.module.js +1 -8734
  155. package/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  156. package/node_modules/three/examples/jsm/libs/tween.module.js +32 -14
  157. package/node_modules/three/examples/jsm/lighting/TiledLighting.js +42 -0
  158. package/node_modules/three/examples/jsm/lights/LightProbeGenerator.js +65 -14
  159. package/node_modules/three/examples/jsm/lights/RectAreaLightTexturesLib.js +127 -0
  160. package/node_modules/three/examples/jsm/lights/RectAreaLightUniformsLib.js +20 -59
  161. package/node_modules/three/examples/jsm/lines/Line2.js +41 -4
  162. package/node_modules/three/examples/jsm/lines/LineGeometry.js +80 -2
  163. package/node_modules/three/examples/jsm/lines/LineMaterial.js +100 -22
  164. package/node_modules/three/examples/jsm/lines/LineSegments2.js +69 -4
  165. package/node_modules/three/examples/jsm/lines/LineSegmentsGeometry.js +65 -8
  166. package/node_modules/three/examples/jsm/lines/Wireframe.js +58 -6
  167. package/node_modules/three/examples/jsm/lines/WireframeGeometry2.js +27 -2
  168. package/node_modules/three/examples/jsm/lines/webgpu/Line2.js +46 -0
  169. package/node_modules/three/examples/jsm/lines/webgpu/LineSegments2.js +411 -0
  170. package/node_modules/three/examples/jsm/lines/webgpu/Wireframe.js +86 -0
  171. package/node_modules/three/examples/jsm/loaders/3DMLoader.js +86 -23
  172. package/node_modules/three/examples/jsm/loaders/3MFLoader.js +148 -5
  173. package/node_modules/three/examples/jsm/loaders/AMFLoader.js +32 -12
  174. package/node_modules/three/examples/jsm/loaders/BVHLoader.js +59 -12
  175. package/node_modules/three/examples/jsm/loaders/ColladaLoader.js +51 -12
  176. package/node_modules/three/examples/jsm/loaders/DDSLoader.js +68 -1
  177. package/node_modules/three/examples/jsm/loaders/DRACOLoader.js +149 -23
  178. package/node_modules/three/examples/jsm/loaders/EXRLoader.js +584 -109
  179. package/node_modules/three/examples/jsm/loaders/FBXLoader.js +165 -97
  180. package/node_modules/three/examples/jsm/loaders/FontLoader.js +83 -6
  181. package/node_modules/three/examples/jsm/loaders/GCodeLoader.js +37 -6
  182. package/node_modules/three/examples/jsm/loaders/GLTFLoader.js +337 -108
  183. package/node_modules/three/examples/jsm/loaders/HDRCubeTextureLoader.js +52 -3
  184. package/node_modules/three/examples/jsm/loaders/HDRLoader.js +486 -0
  185. package/node_modules/three/examples/jsm/loaders/IESLoader.js +42 -0
  186. package/node_modules/three/examples/jsm/loaders/KMZLoader.js +33 -0
  187. package/node_modules/three/examples/jsm/loaders/KTX2Loader.js +441 -138
  188. package/node_modules/three/examples/jsm/loaders/KTXLoader.js +31 -10
  189. package/node_modules/three/examples/jsm/loaders/LDrawLoader.js +194 -145
  190. package/node_modules/three/examples/jsm/loaders/LUT3dlLoader.js +47 -25
  191. package/node_modules/three/examples/jsm/loaders/LUTCubeLoader.js +46 -23
  192. package/node_modules/three/examples/jsm/loaders/LUTImageLoader.js +79 -52
  193. package/node_modules/three/examples/jsm/loaders/LWOLoader.js +47 -20
  194. package/node_modules/three/examples/jsm/loaders/LottieLoader.js +54 -1
  195. package/node_modules/three/examples/jsm/loaders/MD2Loader.js +37 -1
  196. package/node_modules/three/examples/jsm/loaders/MDDLoader.js +57 -12
  197. package/node_modules/three/examples/jsm/loaders/MTLLoader.js +61 -35
  198. package/node_modules/three/examples/jsm/loaders/MaterialXLoader.js +291 -39
  199. package/node_modules/three/examples/jsm/loaders/NRRDLoader.js +38 -6
  200. package/node_modules/three/examples/jsm/loaders/OBJLoader.js +54 -4
  201. package/node_modules/three/examples/jsm/loaders/PCDLoader.js +183 -32
  202. package/node_modules/three/examples/jsm/loaders/PDBLoader.js +44 -4
  203. package/node_modules/three/examples/jsm/loaders/PLYLoader.js +78 -44
  204. package/node_modules/three/examples/jsm/loaders/PVRLoader.js +25 -6
  205. package/node_modules/three/examples/jsm/loaders/RGBELoader.js +6 -438
  206. package/node_modules/three/examples/jsm/loaders/STLLoader.js +51 -40
  207. package/node_modules/three/examples/jsm/loaders/SVGLoader.js +118 -24
  208. package/node_modules/three/examples/jsm/loaders/TDSLoader.js +92 -72
  209. package/node_modules/three/examples/jsm/loaders/TGALoader.js +23 -0
  210. package/node_modules/three/examples/jsm/loaders/TIFFLoader.js +23 -0
  211. package/node_modules/three/examples/jsm/loaders/TTFLoader.js +50 -3
  212. package/node_modules/three/examples/jsm/loaders/USDLoader.js +219 -0
  213. package/node_modules/three/examples/jsm/loaders/USDZLoader.js +4 -810
  214. package/node_modules/three/examples/jsm/loaders/UltraHDRLoader.js +630 -0
  215. package/node_modules/three/examples/jsm/loaders/VOXLoader.js +67 -2
  216. package/node_modules/three/examples/jsm/loaders/VRMLLoader.js +57 -21
  217. package/node_modules/three/examples/jsm/loaders/VTKLoader.js +119 -6
  218. package/node_modules/three/examples/jsm/loaders/XYZLoader.js +39 -2
  219. package/node_modules/three/examples/jsm/loaders/lwo/IFFParser.js +81 -78
  220. package/node_modules/three/examples/jsm/loaders/usd/USDAParser.js +741 -0
  221. package/node_modules/three/examples/jsm/loaders/usd/USDCParser.js +17 -0
  222. package/node_modules/three/examples/jsm/materials/LDrawConditionalLineMaterial.js +183 -0
  223. package/node_modules/three/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +154 -0
  224. package/node_modules/three/examples/jsm/materials/MeshGouraudMaterial.js +9 -1
  225. package/node_modules/three/examples/jsm/materials/MeshPostProcessingMaterial.js +25 -2
  226. package/node_modules/three/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  227. package/node_modules/three/examples/jsm/math/Capsule.js +91 -14
  228. package/node_modules/three/examples/jsm/math/ColorConverter.js +22 -0
  229. package/node_modules/three/examples/jsm/math/ColorSpaces.js +147 -0
  230. package/node_modules/three/examples/jsm/math/ConvexHull.js +517 -93
  231. package/node_modules/three/examples/jsm/math/ImprovedNoise.js +32 -15
  232. package/node_modules/three/examples/jsm/math/Lut.js +113 -0
  233. package/node_modules/three/examples/jsm/math/MeshSurfaceSampler.js +78 -13
  234. package/node_modules/three/examples/jsm/math/OBB.js +141 -29
  235. package/node_modules/three/examples/jsm/math/Octree.js +177 -25
  236. package/node_modules/three/examples/jsm/math/SimplexNoise.js +68 -42
  237. package/node_modules/three/examples/jsm/misc/ConvexObjectBreaker.js +45 -25
  238. package/node_modules/three/examples/jsm/misc/GPUComputationRenderer.js +105 -45
  239. package/node_modules/three/examples/jsm/misc/Gyroscope.js +12 -0
  240. package/node_modules/three/examples/jsm/misc/MD2Character.js +117 -2
  241. package/node_modules/three/examples/jsm/misc/MD2CharacterComplex.js +175 -11
  242. package/node_modules/three/examples/jsm/misc/MorphAnimMesh.js +44 -0
  243. package/node_modules/three/examples/jsm/misc/MorphBlendMesh.js +103 -0
  244. package/node_modules/three/examples/jsm/misc/ProgressiveLightMap.js +101 -54
  245. package/node_modules/three/examples/jsm/misc/ProgressiveLightMapGPU.js +322 -0
  246. package/node_modules/three/examples/jsm/misc/RollerCoaster.js +57 -0
  247. package/node_modules/three/examples/jsm/misc/TubePainter.js +437 -40
  248. package/node_modules/three/examples/jsm/misc/Volume.js +123 -75
  249. package/node_modules/three/examples/jsm/misc/VolumeSlice.js +95 -48
  250. package/node_modules/three/examples/jsm/modifiers/CurveModifier.js +77 -47
  251. package/node_modules/three/examples/jsm/modifiers/CurveModifierGPU.js +256 -0
  252. package/node_modules/three/examples/jsm/modifiers/EdgeSplitModifier.js +20 -0
  253. package/node_modules/three/examples/jsm/modifiers/SimplifyModifier.js +26 -11
  254. package/node_modules/three/examples/jsm/modifiers/TessellateModifier.js +35 -2
  255. package/node_modules/three/examples/jsm/objects/GroundedSkybox.js +25 -6
  256. package/node_modules/three/examples/jsm/objects/Lensflare.js +96 -4
  257. package/node_modules/three/examples/jsm/objects/LensflareMesh.js +376 -0
  258. package/node_modules/three/examples/jsm/objects/MarchingCubes.js +90 -5
  259. package/node_modules/three/examples/jsm/objects/Reflector.js +76 -2
  260. package/node_modules/three/examples/jsm/objects/ReflectorForSSRPass.js +41 -0
  261. package/node_modules/three/examples/jsm/objects/Refractor.js +62 -0
  262. package/node_modules/three/examples/jsm/objects/ShadowMesh.js +54 -4
  263. package/node_modules/three/examples/jsm/objects/Sky.js +30 -12
  264. package/node_modules/three/examples/jsm/objects/SkyMesh.js +243 -0
  265. package/node_modules/three/examples/jsm/objects/Water.js +45 -5
  266. package/node_modules/three/examples/jsm/objects/Water2.js +44 -4
  267. package/node_modules/three/examples/jsm/objects/Water2Mesh.js +199 -0
  268. package/node_modules/three/examples/jsm/objects/WaterMesh.js +196 -0
  269. package/node_modules/three/examples/jsm/physics/AmmoPhysics.js +48 -0
  270. package/node_modules/three/examples/jsm/physics/JoltPhysics.js +330 -0
  271. package/node_modules/three/examples/jsm/physics/RapierPhysics.js +231 -19
  272. package/node_modules/three/examples/jsm/postprocessing/AfterimagePass.js +110 -29
  273. package/node_modules/three/examples/jsm/postprocessing/BloomPass.js +128 -26
  274. package/node_modules/three/examples/jsm/postprocessing/BokehPass.js +99 -22
  275. package/node_modules/three/examples/jsm/postprocessing/ClearPass.js +54 -3
  276. package/node_modules/three/examples/jsm/postprocessing/CubeTexturePass.js +82 -21
  277. package/node_modules/three/examples/jsm/postprocessing/DotScreenPass.js +59 -10
  278. package/node_modules/three/examples/jsm/postprocessing/EffectComposer.js +135 -3
  279. package/node_modules/three/examples/jsm/postprocessing/FXAAPass.js +40 -0
  280. package/node_modules/three/examples/jsm/postprocessing/FilmPass.js +54 -5
  281. package/node_modules/three/examples/jsm/postprocessing/GTAOPass.js +202 -57
  282. package/node_modules/three/examples/jsm/postprocessing/GlitchPass.js +86 -37
  283. package/node_modules/three/examples/jsm/postprocessing/HalftonePass.js +65 -10
  284. package/node_modules/three/examples/jsm/postprocessing/LUTPass.js +43 -79
  285. package/node_modules/three/examples/jsm/postprocessing/MaskPass.js +91 -0
  286. package/node_modules/three/examples/jsm/postprocessing/OutlinePass.js +277 -155
  287. package/node_modules/three/examples/jsm/postprocessing/OutputPass.js +58 -14
  288. package/node_modules/three/examples/jsm/postprocessing/Pass.js +100 -4
  289. package/node_modules/three/examples/jsm/postprocessing/RenderPass.js +85 -1
  290. package/node_modules/three/examples/jsm/postprocessing/RenderPixelatedPass.js +124 -45
  291. package/node_modules/three/examples/jsm/postprocessing/RenderTransitionPass.js +267 -0
  292. package/node_modules/three/examples/jsm/postprocessing/SAOPass.js +128 -56
  293. package/node_modules/three/examples/jsm/postprocessing/SMAAPass.js +106 -75
  294. package/node_modules/three/examples/jsm/postprocessing/SSAARenderPass.js +120 -35
  295. package/node_modules/three/examples/jsm/postprocessing/SSAOPass.js +174 -67
  296. package/node_modules/three/examples/jsm/postprocessing/SSRPass.js +268 -53
  297. package/node_modules/three/examples/jsm/postprocessing/SavePass.js +69 -16
  298. package/node_modules/three/examples/jsm/postprocessing/ShaderPass.js +65 -7
  299. package/node_modules/three/examples/jsm/postprocessing/TAARenderPass.js +79 -24
  300. package/node_modules/three/examples/jsm/postprocessing/TexturePass.js +72 -8
  301. package/node_modules/three/examples/jsm/postprocessing/UnrealBloomPass.js +125 -46
  302. package/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +122 -9
  303. package/node_modules/three/examples/jsm/renderers/CSS3DRenderer.js +133 -8
  304. package/node_modules/three/examples/jsm/renderers/Projector.js +20 -2
  305. package/node_modules/three/examples/jsm/renderers/SVGRenderer.js +134 -5
  306. package/node_modules/three/examples/jsm/shaders/ACESFilmicToneMappingShader.js +12 -5
  307. package/node_modules/three/examples/jsm/shaders/AfterimageShader.js +8 -3
  308. package/node_modules/three/examples/jsm/shaders/BasicShader.js +8 -1
  309. package/node_modules/three/examples/jsm/shaders/BleachBypassShader.js +11 -5
  310. package/node_modules/three/examples/jsm/shaders/BlendShader.js +8 -1
  311. package/node_modules/three/examples/jsm/shaders/BokehShader.js +9 -3
  312. package/node_modules/three/examples/jsm/shaders/BokehShader2.js +11 -4
  313. package/node_modules/three/examples/jsm/shaders/BrightnessContrastShader.js +10 -4
  314. package/node_modules/three/examples/jsm/shaders/ColorCorrectionShader.js +8 -1
  315. package/node_modules/three/examples/jsm/shaders/ColorifyShader.js +9 -3
  316. package/node_modules/three/examples/jsm/shaders/ConvolutionShader.js +9 -38
  317. package/node_modules/three/examples/jsm/shaders/CopyShader.js +8 -1
  318. package/node_modules/three/examples/jsm/shaders/DOFMipMapShader.js +10 -3
  319. package/node_modules/three/examples/jsm/shaders/DepthLimitedBlurShader.js +10 -1
  320. package/node_modules/three/examples/jsm/shaders/DigitalGlitch.js +10 -7
  321. package/node_modules/three/examples/jsm/shaders/DotScreenShader.js +8 -3
  322. package/node_modules/three/examples/jsm/shaders/ExposureShader.js +8 -1
  323. package/node_modules/three/examples/jsm/shaders/FXAAShader.js +243 -233
  324. package/node_modules/three/examples/jsm/shaders/FilmShader.js +13 -0
  325. package/node_modules/three/examples/jsm/shaders/FocusShader.js +8 -3
  326. package/node_modules/three/examples/jsm/shaders/FreiChenShader.js +10 -3
  327. package/node_modules/three/examples/jsm/shaders/GTAOShader.js +37 -40
  328. package/node_modules/three/examples/jsm/shaders/GammaCorrectionShader.js +11 -2
  329. package/node_modules/three/examples/jsm/shaders/GodRaysShader.js +20 -8
  330. package/node_modules/three/examples/jsm/shaders/HalftoneShader.js +13 -4
  331. package/node_modules/three/examples/jsm/shaders/HorizontalBlurShader.js +12 -3
  332. package/node_modules/three/examples/jsm/shaders/HorizontalTiltShiftShader.js +9 -2
  333. package/node_modules/three/examples/jsm/shaders/HueSaturationShader.js +10 -3
  334. package/node_modules/three/examples/jsm/shaders/KaleidoShader.js +11 -4
  335. package/node_modules/three/examples/jsm/shaders/LuminosityHighPassShader.js +9 -7
  336. package/node_modules/three/examples/jsm/shaders/LuminosityShader.js +8 -2
  337. package/node_modules/three/examples/jsm/shaders/MirrorShader.js +10 -4
  338. package/node_modules/three/examples/jsm/shaders/NormalMapShader.js +7 -2
  339. package/node_modules/three/examples/jsm/shaders/OutputShader.js +24 -2
  340. package/node_modules/three/examples/jsm/shaders/PoissonDenoiseShader.js +24 -15
  341. package/node_modules/three/examples/jsm/shaders/RGBShiftShader.js +8 -1
  342. package/node_modules/three/examples/jsm/shaders/SAOShader.js +10 -1
  343. package/node_modules/three/examples/jsm/shaders/SMAAShader.js +24 -1
  344. package/node_modules/three/examples/jsm/shaders/SSAOShader.js +26 -5
  345. package/node_modules/three/examples/jsm/shaders/SSRShader.js +26 -1
  346. package/node_modules/three/examples/jsm/shaders/SepiaShader.js +8 -3
  347. package/node_modules/three/examples/jsm/shaders/SobelOperatorShader.js +9 -3
  348. package/node_modules/three/examples/jsm/shaders/SubsurfaceScatteringShader.js +13 -8
  349. package/node_modules/three/examples/jsm/shaders/TechnicolorShader.js +10 -4
  350. package/node_modules/three/examples/jsm/shaders/ToonShader.js +29 -6
  351. package/node_modules/three/examples/jsm/shaders/TriangleBlurShader.js +9 -4
  352. package/node_modules/three/examples/jsm/shaders/UnpackDepthRGBAShader.js +19 -4
  353. package/node_modules/three/examples/jsm/shaders/VelocityShader.js +8 -1
  354. package/node_modules/three/examples/jsm/shaders/VerticalBlurShader.js +9 -2
  355. package/node_modules/three/examples/jsm/shaders/VerticalTiltShiftShader.js +8 -1
  356. package/node_modules/three/examples/jsm/shaders/VignetteShader.js +8 -3
  357. package/node_modules/three/examples/jsm/shaders/VolumeShader.js +11 -2
  358. package/node_modules/three/examples/jsm/shaders/WaterRefractionShader.js +11 -0
  359. package/node_modules/three/examples/jsm/textures/FlakesTexture.js +14 -0
  360. package/node_modules/three/examples/jsm/transpiler/AST.js +392 -31
  361. package/node_modules/three/examples/jsm/transpiler/GLSLDecoder.js +366 -136
  362. package/node_modules/three/examples/jsm/transpiler/Linker.js +327 -0
  363. package/node_modules/three/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
  364. package/node_modules/three/examples/jsm/transpiler/TSLEncoder.js +336 -111
  365. package/node_modules/three/examples/jsm/transpiler/Transpiler.js +50 -1
  366. package/node_modules/three/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  367. package/node_modules/three/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  368. package/node_modules/three/examples/jsm/tsl/display/AfterImageNode.js +244 -0
  369. package/node_modules/three/examples/jsm/tsl/display/AnaglyphPassNode.js +107 -0
  370. package/node_modules/three/examples/jsm/tsl/display/AnamorphicNode.js +282 -0
  371. package/node_modules/three/examples/jsm/tsl/display/BleachBypass.js +33 -0
  372. package/node_modules/three/examples/jsm/tsl/display/BloomNode.js +524 -0
  373. package/node_modules/three/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  374. package/node_modules/three/examples/jsm/tsl/display/DenoiseNode.js +334 -0
  375. package/node_modules/three/examples/jsm/tsl/display/DepthOfFieldNode.js +554 -0
  376. package/node_modules/three/examples/jsm/tsl/display/DotScreenNode.js +104 -0
  377. package/node_modules/three/examples/jsm/tsl/display/FXAANode.js +365 -0
  378. package/node_modules/three/examples/jsm/tsl/display/FilmNode.js +101 -0
  379. package/node_modules/three/examples/jsm/tsl/display/GTAONode.js +570 -0
  380. package/node_modules/three/examples/jsm/tsl/display/GaussianBlurNode.js +380 -0
  381. package/node_modules/three/examples/jsm/tsl/display/LensflareNode.js +279 -0
  382. package/node_modules/three/examples/jsm/tsl/display/Lut3DNode.js +109 -0
  383. package/node_modules/three/examples/jsm/tsl/display/MotionBlur.js +33 -0
  384. package/node_modules/three/examples/jsm/tsl/display/OutlineNode.js +762 -0
  385. package/node_modules/three/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +89 -0
  386. package/node_modules/three/examples/jsm/tsl/display/PixelationPassNode.js +334 -0
  387. package/node_modules/three/examples/jsm/tsl/display/RGBShiftNode.js +96 -0
  388. package/node_modules/three/examples/jsm/tsl/display/SMAANode.js +768 -0
  389. package/node_modules/three/examples/jsm/tsl/display/SSAAPassNode.js +358 -0
  390. package/node_modules/three/examples/jsm/tsl/display/SSGINode.js +654 -0
  391. package/node_modules/three/examples/jsm/tsl/display/SSRNode.js +656 -0
  392. package/node_modules/three/examples/jsm/tsl/display/SSSNode.js +488 -0
  393. package/node_modules/three/examples/jsm/tsl/display/Sepia.js +24 -0
  394. package/node_modules/three/examples/jsm/tsl/display/SobelOperatorNode.js +168 -0
  395. package/node_modules/three/examples/jsm/tsl/display/StereoCompositePassNode.js +185 -0
  396. package/node_modules/three/examples/jsm/tsl/display/StereoPassNode.js +120 -0
  397. package/node_modules/three/examples/jsm/tsl/display/TRAANode.js +578 -0
  398. package/node_modules/three/examples/jsm/tsl/display/TransitionNode.js +141 -0
  399. package/node_modules/three/examples/jsm/tsl/display/boxBlur.js +65 -0
  400. package/node_modules/three/examples/jsm/tsl/display/hashBlur.js +54 -0
  401. package/node_modules/three/examples/jsm/tsl/lighting/TiledLightsNode.js +442 -0
  402. package/node_modules/three/examples/jsm/tsl/math/Bayer.js +34 -0
  403. package/node_modules/three/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  404. package/node_modules/three/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  405. package/node_modules/three/examples/jsm/tsl/utils/Raymarching.js +70 -0
  406. package/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +109 -45
  407. package/node_modules/three/examples/jsm/utils/CameraUtils.js +15 -6
  408. package/node_modules/three/examples/jsm/utils/GeometryCompressionUtils.js +54 -146
  409. package/node_modules/three/examples/jsm/utils/GeometryUtils.js +32 -27
  410. package/node_modules/three/examples/jsm/utils/LDrawUtils.js +13 -4
  411. package/node_modules/three/examples/jsm/utils/SceneOptimizer.js +458 -0
  412. package/node_modules/three/examples/jsm/utils/SceneUtils.js +112 -3
  413. package/node_modules/three/examples/jsm/utils/ShadowMapViewer.js +51 -31
  414. package/node_modules/three/examples/jsm/utils/ShadowMapViewerGPU.js +233 -0
  415. package/node_modules/three/examples/jsm/utils/SkeletonUtils.js +145 -68
  416. package/node_modules/three/examples/jsm/utils/SortUtils.js +23 -8
  417. package/node_modules/three/examples/jsm/utils/UVsDebug.js +12 -4
  418. package/node_modules/three/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +19 -2
  419. package/node_modules/three/examples/jsm/utils/WebGPUTextureUtils.js +81 -0
  420. package/node_modules/three/examples/jsm/utils/WorkerPool.js +67 -2
  421. package/node_modules/three/examples/jsm/webxr/ARButton.js +19 -0
  422. package/node_modules/three/examples/jsm/webxr/OculusHandModel.js +87 -2
  423. package/node_modules/three/examples/jsm/webxr/OculusHandPointerModel.js +148 -22
  424. package/node_modules/three/examples/jsm/webxr/Text2D.js +20 -6
  425. package/node_modules/three/examples/jsm/webxr/VRButton.js +44 -5
  426. package/node_modules/three/examples/jsm/webxr/XRButton.js +23 -1
  427. package/node_modules/three/examples/jsm/webxr/XRControllerModelFactory.js +103 -4
  428. package/node_modules/three/examples/jsm/webxr/XREstimatedLight.js +35 -4
  429. package/node_modules/three/examples/jsm/webxr/XRHandMeshModel.js +37 -0
  430. package/node_modules/three/examples/jsm/webxr/XRHandModelFactory.js +101 -9
  431. package/node_modules/three/examples/jsm/webxr/XRHandPrimitiveModel.js +44 -0
  432. package/node_modules/three/examples/jsm/webxr/XRPlanes.js +18 -0
  433. package/node_modules/three/package.json +25 -20
  434. package/node_modules/three/src/Three.Core.js +185 -0
  435. package/node_modules/three/src/Three.Legacy.js +0 -1
  436. package/node_modules/three/src/Three.TSL.js +633 -0
  437. package/node_modules/three/src/Three.WebGPU.Nodes.js +26 -0
  438. package/node_modules/three/src/Three.WebGPU.js +28 -0
  439. package/node_modules/three/src/Three.js +1 -176
  440. package/node_modules/three/src/animation/AnimationAction.js +262 -30
  441. package/node_modules/three/src/animation/AnimationClip.js +164 -9
  442. package/node_modules/three/src/animation/AnimationMixer.js +99 -15
  443. package/node_modules/three/src/animation/AnimationObjectGroup.js +45 -21
  444. package/node_modules/three/src/animation/AnimationUtils.js +169 -19
  445. package/node_modules/three/src/animation/KeyframeTrack.js +151 -16
  446. package/node_modules/three/src/animation/PropertyBinding.js +91 -16
  447. package/node_modules/three/src/animation/PropertyMixer.js +72 -5
  448. package/node_modules/three/src/animation/tracks/BooleanKeyframeTrack.js +42 -6
  449. package/node_modules/three/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  450. package/node_modules/three/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  451. package/node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.js +31 -3
  452. package/node_modules/three/src/animation/tracks/StringKeyframeTrack.js +42 -2
  453. package/node_modules/three/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  454. package/node_modules/three/src/audio/Audio.js +388 -10
  455. package/node_modules/three/src/audio/AudioAnalyser.js +58 -1
  456. package/node_modules/three/src/audio/AudioContext.js +15 -0
  457. package/node_modules/three/src/audio/AudioListener.js +89 -10
  458. package/node_modules/three/src/audio/PositionalAudio.js +107 -0
  459. package/node_modules/three/src/cameras/ArrayCamera.js +37 -0
  460. package/node_modules/three/src/cameras/Camera.js +61 -0
  461. package/node_modules/three/src/cameras/CubeCamera.js +66 -0
  462. package/node_modules/three/src/cameras/OrthographicCamera.js +110 -1
  463. package/node_modules/three/src/cameras/PerspectiveCamera.js +174 -35
  464. package/node_modules/three/src/cameras/StereoCamera.js +48 -2
  465. package/node_modules/three/src/constants.js +1477 -18
  466. package/node_modules/three/src/core/BufferAttribute.js +417 -23
  467. package/node_modules/three/src/core/BufferGeometry.js +416 -49
  468. package/node_modules/three/src/core/Clock.js +62 -8
  469. package/node_modules/three/src/core/EventDispatcher.js +52 -8
  470. package/node_modules/three/src/core/GLBufferAttribute.js +113 -2
  471. package/node_modules/three/src/core/InstancedBufferAttribute.js +29 -0
  472. package/node_modules/three/src/core/InstancedBufferGeometry.js +20 -0
  473. package/node_modules/three/src/core/InstancedInterleavedBuffer.js +26 -0
  474. package/node_modules/three/src/core/InterleavedBuffer.js +141 -16
  475. package/node_modules/three/src/core/InterleavedBufferAttribute.js +200 -2
  476. package/node_modules/three/src/core/Layers.js +71 -10
  477. package/node_modules/three/src/core/Object3D.js +665 -54
  478. package/node_modules/three/src/core/Raycaster.js +160 -8
  479. package/node_modules/three/src/core/RenderTarget.js +297 -36
  480. package/node_modules/three/src/core/RenderTarget3D.js +48 -0
  481. package/node_modules/three/src/core/Timer.js +184 -0
  482. package/node_modules/three/src/core/Uniform.js +29 -0
  483. package/node_modules/three/src/core/UniformsGroup.js +84 -2
  484. package/node_modules/three/src/extras/Controls.js +120 -0
  485. package/node_modules/three/src/extras/DataUtils.js +50 -9
  486. package/node_modules/three/src/extras/Earcut.js +18 -779
  487. package/node_modules/three/src/extras/ImageUtils.js +22 -14
  488. package/node_modules/three/src/extras/PMREMGenerator.js +329 -64
  489. package/node_modules/three/src/extras/ShapeUtils.js +24 -2
  490. package/node_modules/three/src/extras/TextureUtils.js +293 -0
  491. package/node_modules/three/src/extras/core/Curve.js +156 -55
  492. package/node_modules/three/src/extras/core/CurvePath.js +63 -22
  493. package/node_modules/three/src/extras/core/Interpolations.js +34 -2
  494. package/node_modules/three/src/extras/core/Path.js +134 -1
  495. package/node_modules/three/src/extras/core/Shape.js +66 -3
  496. package/node_modules/three/src/extras/core/ShapePath.js +80 -4
  497. package/node_modules/three/src/extras/curves/ArcCurve.js +22 -0
  498. package/node_modules/three/src/extras/curves/CatmullRomCurve3.js +89 -18
  499. package/node_modules/three/src/extras/curves/CubicBezierCurve.js +67 -0
  500. package/node_modules/three/src/extras/curves/CubicBezierCurve3.js +50 -0
  501. package/node_modules/three/src/extras/curves/EllipseCurve.js +104 -2
  502. package/node_modules/three/src/extras/curves/LineCurve.js +36 -0
  503. package/node_modules/three/src/extras/curves/LineCurve3.js +36 -0
  504. package/node_modules/three/src/extras/curves/QuadraticBezierCurve.js +59 -0
  505. package/node_modules/three/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  506. package/node_modules/three/src/extras/curves/SplineCurve.js +48 -0
  507. package/node_modules/three/src/extras/lib/earcut.js +685 -0
  508. package/node_modules/three/src/geometries/BoxGeometry.js +39 -0
  509. package/node_modules/three/src/geometries/CapsuleGeometry.js +196 -11
  510. package/node_modules/three/src/geometries/CircleGeometry.js +41 -0
  511. package/node_modules/three/src/geometries/ConeGeometry.js +39 -0
  512. package/node_modules/three/src/geometries/CylinderGeometry.js +51 -4
  513. package/node_modules/three/src/geometries/DodecahedronGeometry.js +33 -0
  514. package/node_modules/three/src/geometries/EdgesGeometry.js +30 -2
  515. package/node_modules/three/src/geometries/ExtrudeGeometry.js +146 -50
  516. package/node_modules/three/src/geometries/IcosahedronGeometry.js +33 -0
  517. package/node_modules/three/src/geometries/LatheGeometry.js +44 -3
  518. package/node_modules/three/src/geometries/OctahedronGeometry.js +33 -0
  519. package/node_modules/three/src/geometries/PlaneGeometry.js +35 -0
  520. package/node_modules/three/src/geometries/PolyhedronGeometry.js +29 -0
  521. package/node_modules/three/src/geometries/RingGeometry.js +37 -0
  522. package/node_modules/three/src/geometries/ShapeGeometry.js +38 -0
  523. package/node_modules/three/src/geometries/SphereGeometry.js +38 -0
  524. package/node_modules/three/src/geometries/TetrahedronGeometry.js +33 -0
  525. package/node_modules/three/src/geometries/TorusGeometry.js +36 -0
  526. package/node_modules/three/src/geometries/TorusKnotGeometry.js +39 -0
  527. package/node_modules/three/src/geometries/TubeGeometry.js +50 -0
  528. package/node_modules/three/src/geometries/WireframeGeometry.js +32 -0
  529. package/node_modules/three/src/helpers/ArrowHelper.js +62 -5
  530. package/node_modules/three/src/helpers/AxesHelper.js +28 -0
  531. package/node_modules/three/src/helpers/Box3Helper.js +28 -0
  532. package/node_modules/three/src/helpers/BoxHelper.js +43 -7
  533. package/node_modules/three/src/helpers/CameraHelper.js +100 -27
  534. package/node_modules/three/src/helpers/DirectionalLightHelper.js +52 -0
  535. package/node_modules/three/src/helpers/GridHelper.js +26 -0
  536. package/node_modules/three/src/helpers/HemisphereLightHelper.js +39 -0
  537. package/node_modules/three/src/helpers/PlaneHelper.js +33 -0
  538. package/node_modules/three/src/helpers/PointLightHelper.js +43 -0
  539. package/node_modules/three/src/helpers/PolarGridHelper.js +30 -0
  540. package/node_modules/three/src/helpers/SkeletonHelper.js +73 -7
  541. package/node_modules/three/src/helpers/SpotLightHelper.js +58 -1
  542. package/node_modules/three/src/lights/AmbientLight.js +25 -0
  543. package/node_modules/three/src/lights/DirectionalLight.js +57 -0
  544. package/node_modules/three/src/lights/DirectionalLightShadow.js +15 -0
  545. package/node_modules/three/src/lights/HemisphereLight.js +32 -0
  546. package/node_modules/three/src/lights/Light.js +37 -0
  547. package/node_modules/three/src/lights/LightProbe.js +43 -0
  548. package/node_modules/three/src/lights/LightShadow.js +198 -7
  549. package/node_modules/three/src/lights/PointLight.js +59 -0
  550. package/node_modules/three/src/lights/PointLightShadow.js +22 -1
  551. package/node_modules/three/src/lights/RectAreaLight.js +59 -0
  552. package/node_modules/three/src/lights/SpotLight.js +102 -0
  553. package/node_modules/three/src/lights/SpotLightShadow.js +33 -3
  554. package/node_modules/three/src/lights/webgpu/IESSpotLight.js +46 -0
  555. package/node_modules/three/src/lights/webgpu/ProjectorLight.js +46 -0
  556. package/node_modules/three/src/loaders/AnimationLoader.js +34 -2
  557. package/node_modules/three/src/loaders/AudioLoader.js +34 -2
  558. package/node_modules/three/src/loaders/BufferGeometryLoader.js +38 -13
  559. package/node_modules/three/src/loaders/Cache.js +47 -2
  560. package/node_modules/three/src/loaders/CompressedTextureLoader.js +36 -3
  561. package/node_modules/three/src/loaders/CubeTextureLoader.js +45 -0
  562. package/node_modules/three/src/loaders/DataTextureLoader.js +45 -8
  563. package/node_modules/three/src/loaders/FileLoader.js +90 -6
  564. package/node_modules/three/src/loaders/ImageBitmapLoader.js +108 -11
  565. package/node_modules/three/src/loaders/ImageLoader.js +85 -8
  566. package/node_modules/three/src/loaders/Loader.js +144 -0
  567. package/node_modules/three/src/loaders/LoaderUtils.js +18 -34
  568. package/node_modules/three/src/loaders/LoadingManager.js +187 -0
  569. package/node_modules/three/src/loaders/MaterialLoader.js +70 -4
  570. package/node_modules/three/src/loaders/ObjectLoader.js +146 -30
  571. package/node_modules/three/src/loaders/TextureLoader.js +33 -0
  572. package/node_modules/three/src/loaders/nodes/NodeLoader.js +194 -0
  573. package/node_modules/three/src/loaders/nodes/NodeMaterialLoader.js +108 -0
  574. package/node_modules/three/src/loaders/nodes/NodeObjectLoader.js +151 -0
  575. package/node_modules/three/src/materials/LineBasicMaterial.js +74 -1
  576. package/node_modules/three/src/materials/LineDashedMaterial.js +52 -1
  577. package/node_modules/three/src/materials/Material.js +504 -11
  578. package/node_modules/three/src/materials/MeshBasicMaterial.js +172 -3
  579. package/node_modules/three/src/materials/MeshDepthMaterial.js +94 -0
  580. package/node_modules/three/src/materials/MeshDistanceMaterial.js +76 -0
  581. package/node_modules/three/src/materials/MeshLambertMaterial.js +278 -1
  582. package/node_modules/three/src/materials/MeshMatcapMaterial.js +164 -0
  583. package/node_modules/three/src/materials/MeshNormalMaterial.js +114 -0
  584. package/node_modules/three/src/materials/MeshPhongMaterial.js +293 -1
  585. package/node_modules/three/src/materials/MeshPhysicalMaterial.js +316 -4
  586. package/node_modules/three/src/materials/MeshStandardMaterial.js +304 -3
  587. package/node_modules/three/src/materials/MeshToonMaterial.js +219 -0
  588. package/node_modules/three/src/materials/PointsMaterial.js +89 -0
  589. package/node_modules/three/src/materials/RawShaderMaterial.js +25 -0
  590. package/node_modules/three/src/materials/ShaderMaterial.js +215 -10
  591. package/node_modules/three/src/materials/ShadowMaterial.js +54 -0
  592. package/node_modules/three/src/materials/SpriteMaterial.js +82 -0
  593. package/node_modules/three/{examples/jsm/nodes/materials → src/materials/nodes}/Line2NodeMaterial.js +206 -100
  594. package/node_modules/three/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
  595. package/node_modules/three/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
  596. package/node_modules/three/src/materials/nodes/MeshBasicNodeMaterial.js +134 -0
  597. package/node_modules/three/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
  598. package/node_modules/three/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
  599. package/node_modules/three/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
  600. package/node_modules/three/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
  601. package/node_modules/three/src/materials/nodes/MeshPhysicalNodeMaterial.js +518 -0
  602. package/node_modules/three/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
  603. package/node_modules/three/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
  604. package/node_modules/three/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
  605. package/node_modules/three/src/materials/nodes/NodeMaterial.js +1310 -0
  606. package/node_modules/three/{examples/jsm/nodes/materials/Materials.js → src/materials/nodes/NodeMaterials.js} +7 -2
  607. package/node_modules/three/src/materials/nodes/PointsNodeMaterial.js +211 -0
  608. package/node_modules/three/src/materials/nodes/ShadowNodeMaterial.js +76 -0
  609. package/node_modules/three/src/materials/nodes/SpriteNodeMaterial.js +186 -0
  610. package/node_modules/three/src/materials/nodes/VolumeNodeMaterial.js +81 -0
  611. package/node_modules/three/src/materials/nodes/manager/NodeMaterialObserver.js +613 -0
  612. package/node_modules/three/src/math/Box2.js +181 -4
  613. package/node_modules/three/src/math/Box3.js +277 -6
  614. package/node_modules/three/src/math/Color.js +355 -11
  615. package/node_modules/three/src/math/ColorManagement.js +161 -85
  616. package/node_modules/three/src/math/Cylindrical.js +65 -6
  617. package/node_modules/three/src/math/Euler.js +139 -5
  618. package/node_modules/three/src/math/Frustum.js +108 -9
  619. package/node_modules/three/src/math/FrustumArray.js +258 -0
  620. package/node_modules/three/src/math/Interpolant.js +87 -8
  621. package/node_modules/three/src/math/Line3.js +223 -2
  622. package/node_modules/three/src/math/MathUtils.js +408 -20
  623. package/node_modules/three/src/math/Matrix2.js +124 -0
  624. package/node_modules/three/src/math/Matrix3.js +229 -4
  625. package/node_modules/three/src/math/Matrix4.js +416 -30
  626. package/node_modules/three/src/math/Plane.js +164 -2
  627. package/node_modules/three/src/math/Quaternion.js +345 -86
  628. package/node_modules/three/src/math/Ray.js +162 -0
  629. package/node_modules/three/src/math/Sphere.js +175 -0
  630. package/node_modules/three/src/math/Spherical.js +74 -13
  631. package/node_modules/three/src/math/SphericalHarmonics3.js +112 -14
  632. package/node_modules/three/src/math/Triangle.js +230 -2
  633. package/node_modules/three/src/math/Vector2.js +396 -10
  634. package/node_modules/three/src/math/Vector3.js +557 -20
  635. package/node_modules/three/src/math/Vector4.js +428 -9
  636. package/node_modules/three/src/math/interpolants/CubicInterpolant.js +10 -1
  637. package/node_modules/three/src/math/interpolants/DiscreteInterpolant.js +10 -2
  638. package/node_modules/three/src/math/interpolants/LinearInterpolant.js +13 -0
  639. package/node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  640. package/node_modules/three/src/nodes/Nodes.js +148 -0
  641. package/node_modules/three/src/nodes/TSL.js +173 -0
  642. package/node_modules/three/src/nodes/accessors/AccessorsUtils.js +53 -0
  643. package/node_modules/three/src/nodes/accessors/Arrays.js +68 -0
  644. package/node_modules/three/src/nodes/accessors/BatchNode.js +163 -0
  645. package/node_modules/three/src/nodes/accessors/Bitangent.js +82 -0
  646. package/node_modules/three/src/nodes/accessors/BufferAttributeNode.js +340 -0
  647. package/node_modules/three/src/nodes/accessors/BufferNode.js +101 -0
  648. package/node_modules/three/src/nodes/accessors/BuiltinNode.js +63 -0
  649. package/node_modules/three/src/nodes/accessors/Camera.js +282 -0
  650. package/node_modules/three/src/nodes/accessors/ClippingNode.js +255 -0
  651. package/node_modules/three/src/nodes/accessors/CubeTextureNode.js +190 -0
  652. package/node_modules/three/src/nodes/accessors/InstanceNode.js +244 -0
  653. package/node_modules/three/src/nodes/accessors/InstancedMeshNode.js +50 -0
  654. package/node_modules/three/src/nodes/accessors/Lights.js +139 -0
  655. package/node_modules/three/src/nodes/accessors/MaterialNode.js +775 -0
  656. package/node_modules/three/src/nodes/accessors/MaterialProperties.js +59 -0
  657. package/node_modules/three/src/nodes/accessors/MaterialReferenceNode.js +85 -0
  658. package/node_modules/three/src/nodes/accessors/ModelNode.js +184 -0
  659. package/node_modules/three/src/nodes/accessors/ModelViewProjectionNode.js +13 -0
  660. package/node_modules/three/{examples/jsm → src}/nodes/accessors/MorphNode.js +122 -57
  661. package/node_modules/three/src/nodes/accessors/Normal.js +243 -0
  662. package/node_modules/three/src/nodes/accessors/Object3DNode.js +268 -0
  663. package/node_modules/three/src/nodes/accessors/PointUVNode.js +55 -0
  664. package/node_modules/three/src/nodes/accessors/Position.js +90 -0
  665. package/node_modules/three/src/nodes/accessors/ReferenceBaseNode.js +357 -0
  666. package/node_modules/three/src/nodes/accessors/ReferenceNode.js +424 -0
  667. package/node_modules/three/src/nodes/accessors/ReflectVector.js +36 -0
  668. package/node_modules/three/src/nodes/accessors/RendererReferenceNode.js +79 -0
  669. package/node_modules/three/src/nodes/accessors/SceneNode.js +145 -0
  670. package/node_modules/three/src/nodes/accessors/SkinningNode.js +327 -0
  671. package/node_modules/three/src/nodes/accessors/StorageBufferNode.js +416 -0
  672. package/node_modules/three/src/nodes/accessors/StorageTextureNode.js +264 -0
  673. package/node_modules/three/src/nodes/accessors/Tangent.js +70 -0
  674. package/node_modules/three/src/nodes/accessors/TangentUtils.js +46 -0
  675. package/node_modules/three/src/nodes/accessors/Texture3DNode.js +199 -0
  676. package/node_modules/three/{examples/jsm/nodes/accessors/TextureBicubicNode.js → src/nodes/accessors/TextureBicubic.js} +28 -30
  677. package/node_modules/three/src/nodes/accessors/TextureNode.js +927 -0
  678. package/node_modules/three/src/nodes/accessors/TextureSizeNode.js +77 -0
  679. package/node_modules/three/src/nodes/accessors/UV.js +11 -0
  680. package/node_modules/three/src/nodes/accessors/UniformArrayNode.js +348 -0
  681. package/node_modules/three/src/nodes/accessors/UserDataNode.js +77 -0
  682. package/node_modules/three/src/nodes/accessors/VelocityNode.js +224 -0
  683. package/node_modules/three/src/nodes/accessors/VertexColorNode.js +110 -0
  684. package/node_modules/three/src/nodes/code/CodeNode.js +181 -0
  685. package/node_modules/three/src/nodes/code/ExpressionNode.js +68 -0
  686. package/node_modules/three/src/nodes/code/FunctionCallNode.js +187 -0
  687. package/node_modules/three/src/nodes/code/FunctionNode.js +183 -0
  688. package/node_modules/three/{examples/jsm → src}/nodes/code/ScriptableNode.js +253 -15
  689. package/node_modules/three/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +95 -9
  690. package/node_modules/three/src/nodes/core/ArrayNode.js +155 -0
  691. package/node_modules/three/src/nodes/core/AssignNode.js +202 -0
  692. package/node_modules/three/src/nodes/core/AttributeNode.js +168 -0
  693. package/node_modules/three/src/nodes/core/BypassNode.js +93 -0
  694. package/node_modules/three/src/nodes/core/ConstNode.js +67 -0
  695. package/node_modules/three/src/nodes/core/ContextNode.js +184 -0
  696. package/node_modules/three/src/nodes/core/IndexNode.js +164 -0
  697. package/node_modules/three/src/nodes/core/InputNode.js +136 -0
  698. package/node_modules/three/src/nodes/core/InspectorNode.js +128 -0
  699. package/node_modules/three/src/nodes/core/IsolateNode.js +133 -0
  700. package/node_modules/three/src/nodes/core/LightingModel.js +77 -0
  701. package/node_modules/three/src/nodes/core/MRTNode.js +150 -0
  702. package/node_modules/three/src/nodes/core/Node.js +1083 -0
  703. package/node_modules/three/src/nodes/core/NodeAttribute.js +53 -0
  704. package/node_modules/three/src/nodes/core/NodeBuilder.js +3081 -0
  705. package/node_modules/three/src/nodes/core/NodeCache.js +75 -0
  706. package/node_modules/three/src/nodes/core/NodeCode.js +46 -0
  707. package/node_modules/three/src/nodes/core/NodeFrame.js +306 -0
  708. package/node_modules/three/src/nodes/core/NodeFunction.js +69 -0
  709. package/node_modules/three/src/nodes/core/NodeFunctionInput.js +61 -0
  710. package/node_modules/three/src/nodes/core/NodeParser.js +23 -0
  711. package/node_modules/three/src/nodes/core/NodeUniform.js +91 -0
  712. package/node_modules/three/src/nodes/core/NodeUtils.js +406 -0
  713. package/node_modules/three/src/nodes/core/NodeVar.js +60 -0
  714. package/node_modules/three/src/nodes/core/NodeVarying.js +63 -0
  715. package/node_modules/three/src/nodes/core/OutputStructNode.js +103 -0
  716. package/node_modules/three/src/nodes/core/ParameterNode.js +94 -0
  717. package/node_modules/three/src/nodes/core/PropertyNode.js +351 -0
  718. package/node_modules/three/src/nodes/core/StackNode.js +377 -0
  719. package/node_modules/three/src/nodes/core/StructNode.js +120 -0
  720. package/node_modules/three/src/nodes/core/StructType.js +13 -0
  721. package/node_modules/three/src/nodes/core/StructTypeNode.js +154 -0
  722. package/node_modules/three/src/nodes/core/SubBuildNode.js +89 -0
  723. package/node_modules/three/src/nodes/core/TempNode.js +88 -0
  724. package/node_modules/three/src/nodes/core/UniformGroupNode.js +137 -0
  725. package/node_modules/three/src/nodes/core/UniformNode.js +243 -0
  726. package/node_modules/three/src/nodes/core/VarNode.js +342 -0
  727. package/node_modules/three/src/nodes/core/VaryingNode.js +227 -0
  728. package/node_modules/three/src/nodes/core/constants.js +68 -0
  729. package/node_modules/three/src/nodes/display/BlendModes.js +235 -0
  730. package/node_modules/three/src/nodes/display/BumpMapNode.js +117 -0
  731. package/node_modules/three/src/nodes/display/ColorAdjustment.js +141 -0
  732. package/node_modules/three/src/nodes/display/ColorSpaceFunctions.js +54 -0
  733. package/node_modules/three/src/nodes/display/ColorSpaceNode.js +164 -0
  734. package/node_modules/three/src/nodes/display/FrontFacingNode.js +102 -0
  735. package/node_modules/three/src/nodes/display/NormalMapNode.js +118 -0
  736. package/node_modules/three/src/nodes/display/PassNode.js +946 -0
  737. package/node_modules/three/src/nodes/display/PosterizeNode.js +65 -0
  738. package/node_modules/three/src/nodes/display/RenderOutputNode.js +150 -0
  739. package/node_modules/three/src/nodes/display/ScreenNode.js +290 -0
  740. package/node_modules/three/src/nodes/display/ToneMappingFunctions.js +242 -0
  741. package/node_modules/three/src/nodes/display/ToneMappingNode.js +147 -0
  742. package/node_modules/three/src/nodes/display/ToonOutlinePassNode.js +191 -0
  743. package/node_modules/three/src/nodes/display/ViewportDepthNode.js +294 -0
  744. package/node_modules/three/src/nodes/display/ViewportDepthTextureNode.js +67 -0
  745. package/node_modules/three/src/nodes/display/ViewportSharedTextureNode.js +73 -0
  746. package/node_modules/three/src/nodes/display/ViewportTextureNode.js +228 -0
  747. package/node_modules/three/src/nodes/fog/Fog.js +114 -0
  748. package/node_modules/three/src/nodes/functions/BSDF/BRDF_GGX.js +55 -0
  749. package/node_modules/three/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  750. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  751. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +9 -9
  752. package/node_modules/three/src/nodes/functions/BSDF/DFGApprox.js +71 -0
  753. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +2 -2
  754. package/node_modules/three/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
  755. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  756. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +2 -2
  757. package/node_modules/three/src/nodes/functions/BSDF/LTC.js +175 -0
  758. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  759. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -4
  760. package/node_modules/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
  761. package/node_modules/three/src/nodes/functions/BasicLightingModel.js +100 -0
  762. package/node_modules/three/src/nodes/functions/PhongLightingModel.js +99 -0
  763. package/node_modules/three/src/nodes/functions/PhysicalLightingModel.js +797 -0
  764. package/node_modules/three/src/nodes/functions/ShadowMaskModel.js +58 -0
  765. package/node_modules/three/src/nodes/functions/ToonLightingModel.js +70 -0
  766. package/node_modules/three/src/nodes/functions/VolumetricLightingModel.js +183 -0
  767. package/node_modules/three/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  768. package/node_modules/three/src/nodes/functions/material/getGeometryRoughness.js +19 -0
  769. package/node_modules/three/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  770. package/node_modules/three/{examples/jsm → src}/nodes/functions/material/getRoughness.js +2 -2
  771. package/node_modules/three/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  772. package/node_modules/three/src/nodes/geometry/RangeNode.js +208 -0
  773. package/node_modules/three/src/nodes/gpgpu/AtomicFunctionNode.js +274 -0
  774. package/node_modules/three/src/nodes/gpgpu/BarrierNode.js +89 -0
  775. package/node_modules/three/src/nodes/gpgpu/ComputeBuiltinNode.js +228 -0
  776. package/node_modules/three/src/nodes/gpgpu/ComputeNode.js +284 -0
  777. package/node_modules/three/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  778. package/node_modules/three/src/nodes/gpgpu/WorkgroupInfoNode.js +234 -0
  779. package/node_modules/three/src/nodes/lighting/AONode.js +45 -0
  780. package/node_modules/three/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +16 -8
  781. package/node_modules/three/src/nodes/lighting/AnalyticLightNode.js +256 -0
  782. package/node_modules/three/src/nodes/lighting/BasicEnvironmentNode.js +49 -0
  783. package/node_modules/three/src/nodes/lighting/BasicLightMapNode.js +49 -0
  784. package/node_modules/three/src/nodes/lighting/DirectionalLightNode.js +39 -0
  785. package/node_modules/three/src/nodes/lighting/EnvironmentNode.js +153 -0
  786. package/node_modules/three/src/nodes/lighting/HemisphereLightNode.js +87 -0
  787. package/node_modules/three/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +20 -10
  788. package/node_modules/three/src/nodes/lighting/IrradianceNode.js +44 -0
  789. package/node_modules/three/src/nodes/lighting/LightProbeNode.js +73 -0
  790. package/node_modules/three/src/nodes/lighting/LightUtils.js +25 -0
  791. package/node_modules/three/src/nodes/lighting/LightingContextNode.js +115 -0
  792. package/node_modules/three/src/nodes/lighting/LightingNode.js +36 -0
  793. package/node_modules/three/src/nodes/lighting/LightsNode.js +453 -0
  794. package/node_modules/three/src/nodes/lighting/PointLightNode.js +102 -0
  795. package/node_modules/three/src/nodes/lighting/PointShadowNode.js +312 -0
  796. package/node_modules/three/src/nodes/lighting/ProjectorLightNode.js +91 -0
  797. package/node_modules/three/src/nodes/lighting/RectAreaLightNode.js +133 -0
  798. package/node_modules/three/src/nodes/lighting/ShadowBaseNode.js +81 -0
  799. package/node_modules/three/src/nodes/lighting/ShadowFilterNode.js +276 -0
  800. package/node_modules/three/src/nodes/lighting/ShadowNode.js +811 -0
  801. package/node_modules/three/src/nodes/lighting/SpotLightNode.js +168 -0
  802. package/node_modules/three/src/nodes/materialx/MaterialXNodes.js +197 -0
  803. package/node_modules/three/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +43 -46
  804. package/node_modules/three/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +625 -564
  805. package/node_modules/three/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +3 -9
  806. package/node_modules/three/src/nodes/math/BitcastNode.js +156 -0
  807. package/node_modules/three/src/nodes/math/ConditionalNode.js +245 -0
  808. package/node_modules/three/src/nodes/math/Hash.js +21 -0
  809. package/node_modules/three/src/nodes/math/MathNode.js +1167 -0
  810. package/node_modules/three/src/nodes/math/MathUtils.js +54 -0
  811. package/node_modules/three/src/nodes/math/OperatorNode.js +751 -0
  812. package/node_modules/three/{examples/jsm → src}/nodes/math/TriNoise3D.js +34 -34
  813. package/node_modules/three/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +23 -7
  814. package/node_modules/three/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +11 -0
  815. package/node_modules/three/src/nodes/pmrem/PMREMNode.js +397 -0
  816. package/node_modules/three/src/nodes/pmrem/PMREMUtils.js +403 -0
  817. package/node_modules/three/src/nodes/procedural/Checker.js +22 -0
  818. package/node_modules/three/src/nodes/shapes/Shapes.js +33 -0
  819. package/node_modules/three/src/nodes/tsl/TSLBase.js +36 -0
  820. package/node_modules/three/src/nodes/tsl/TSLCore.js +1229 -0
  821. package/node_modules/three/src/nodes/utils/ArrayElementNode.js +77 -0
  822. package/node_modules/three/src/nodes/utils/ConvertNode.js +100 -0
  823. package/node_modules/three/src/nodes/utils/CubeMapNode.js +237 -0
  824. package/node_modules/three/src/nodes/utils/DebugNode.js +83 -0
  825. package/node_modules/three/src/nodes/utils/Discard.js +24 -0
  826. package/node_modules/three/src/nodes/utils/EquirectUV.js +27 -0
  827. package/node_modules/three/src/nodes/utils/EventNode.js +119 -0
  828. package/node_modules/three/src/nodes/utils/FlipNode.js +106 -0
  829. package/node_modules/three/src/nodes/utils/FunctionOverloadingNode.js +170 -0
  830. package/node_modules/three/src/nodes/utils/JoinNode.js +117 -0
  831. package/node_modules/three/src/nodes/utils/LoopNode.js +349 -0
  832. package/node_modules/three/src/nodes/utils/MatcapUV.js +22 -0
  833. package/node_modules/three/src/nodes/utils/MaxMipLevelNode.js +103 -0
  834. package/node_modules/three/src/nodes/utils/MemberNode.js +120 -0
  835. package/node_modules/three/src/nodes/utils/Oscillators.js +41 -0
  836. package/node_modules/three/src/nodes/utils/Packing.js +21 -0
  837. package/node_modules/three/src/nodes/utils/PostProcessingUtils.js +122 -0
  838. package/node_modules/three/src/nodes/utils/RTTNode.js +289 -0
  839. package/node_modules/three/src/nodes/utils/ReflectorNode.js +630 -0
  840. package/node_modules/three/src/nodes/utils/RemapNode.js +125 -0
  841. package/node_modules/three/{examples/jsm → src}/nodes/utils/RotateNode.js +48 -13
  842. package/node_modules/three/src/nodes/utils/SampleNode.js +91 -0
  843. package/node_modules/three/{examples/jsm → src}/nodes/utils/SetNode.js +50 -4
  844. package/node_modules/three/{examples/jsm → src}/nodes/utils/SplitNode.js +73 -6
  845. package/node_modules/three/src/nodes/utils/SpriteSheetUVNode.js +90 -0
  846. package/node_modules/three/src/nodes/utils/SpriteUtils.js +63 -0
  847. package/node_modules/three/src/nodes/utils/StorageArrayElementNode.js +143 -0
  848. package/node_modules/three/src/nodes/utils/Timer.js +26 -0
  849. package/node_modules/three/src/nodes/utils/TriplanarTextures.js +65 -0
  850. package/node_modules/three/src/nodes/utils/UVUtils.js +39 -0
  851. package/node_modules/three/src/nodes/utils/ViewportUtils.js +26 -0
  852. package/node_modules/three/src/objects/BatchedMesh.js +940 -305
  853. package/node_modules/three/src/objects/Bone.js +24 -0
  854. package/node_modules/three/src/objects/ClippingGroup.js +68 -0
  855. package/node_modules/three/src/objects/Group.js +24 -0
  856. package/node_modules/three/src/objects/InstancedMesh.js +182 -1
  857. package/node_modules/three/src/objects/LOD.js +120 -5
  858. package/node_modules/three/src/objects/Line.js +151 -44
  859. package/node_modules/three/src/objects/LineLoop.js +20 -0
  860. package/node_modules/three/src/objects/LineSegments.js +20 -1
  861. package/node_modules/three/src/objects/Mesh.js +91 -24
  862. package/node_modules/three/src/objects/Points.js +62 -0
  863. package/node_modules/three/src/objects/Skeleton.js +111 -5
  864. package/node_modules/three/src/objects/SkinnedMesh.js +102 -6
  865. package/node_modules/three/src/objects/Sprite.js +65 -1
  866. package/node_modules/three/src/renderers/WebGL3DRenderTarget.js +26 -0
  867. package/node_modules/three/src/renderers/WebGLArrayRenderTarget.js +26 -0
  868. package/node_modules/three/src/renderers/WebGLCubeRenderTarget.js +42 -15
  869. package/node_modules/three/src/renderers/WebGLRenderTarget.js +19 -0
  870. package/node_modules/three/src/renderers/WebGLRenderer.js +1222 -318
  871. package/node_modules/three/src/renderers/common/Animation.js +159 -0
  872. package/node_modules/three/{examples/jsm → src}/renderers/common/Attributes.js +45 -2
  873. package/node_modules/three/src/renderers/common/Backend.js +748 -0
  874. package/node_modules/three/src/renderers/common/Background.js +212 -0
  875. package/node_modules/three/src/renderers/common/BindGroup.js +61 -0
  876. package/node_modules/three/src/renderers/common/Binding.js +60 -0
  877. package/node_modules/three/src/renderers/common/Bindings.js +379 -0
  878. package/node_modules/three/src/renderers/common/Buffer.js +87 -0
  879. package/node_modules/three/src/renderers/common/BufferUtils.js +58 -0
  880. package/node_modules/three/src/renderers/common/BundleGroup.js +83 -0
  881. package/node_modules/three/src/renderers/common/CanvasTarget.js +341 -0
  882. package/node_modules/three/src/renderers/common/ChainMap.js +98 -0
  883. package/node_modules/three/src/renderers/common/ClippingContext.js +262 -0
  884. package/node_modules/three/src/renderers/common/Color4.js +77 -0
  885. package/node_modules/three/src/renderers/common/ComputePipeline.js +41 -0
  886. package/node_modules/three/{examples/jsm → src}/renderers/common/Constants.js +2 -1
  887. package/node_modules/three/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +43 -5
  888. package/node_modules/three/src/renderers/common/DataMap.js +90 -0
  889. package/node_modules/three/src/renderers/common/Geometries.js +370 -0
  890. package/node_modules/three/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  891. package/node_modules/three/src/renderers/common/Info.js +172 -0
  892. package/node_modules/three/src/renderers/common/InspectorBase.js +146 -0
  893. package/node_modules/three/src/renderers/common/Lighting.js +73 -0
  894. package/node_modules/three/src/renderers/common/Pipeline.js +35 -0
  895. package/node_modules/three/{examples/jsm → src}/renderers/common/Pipelines.js +150 -7
  896. package/node_modules/three/src/renderers/common/PostProcessing.js +226 -0
  897. package/node_modules/three/src/renderers/common/ProgrammableStage.js +78 -0
  898. package/node_modules/three/src/renderers/common/QuadMesh.js +112 -0
  899. package/node_modules/three/src/renderers/common/RenderBundle.js +24 -0
  900. package/node_modules/three/src/renderers/common/RenderBundles.js +67 -0
  901. package/node_modules/three/src/renderers/common/RenderContext.js +265 -0
  902. package/node_modules/three/src/renderers/common/RenderContexts.js +116 -0
  903. package/node_modules/three/src/renderers/common/RenderList.js +404 -0
  904. package/node_modules/three/src/renderers/common/RenderLists.js +77 -0
  905. package/node_modules/three/src/renderers/common/RenderObject.js +903 -0
  906. package/node_modules/three/src/renderers/common/RenderObjects.js +202 -0
  907. package/node_modules/three/src/renderers/common/RenderPipeline.js +40 -0
  908. package/node_modules/three/src/renderers/common/Renderer.js +3290 -0
  909. package/node_modules/three/src/renderers/common/RendererUtils.js +200 -0
  910. package/node_modules/three/src/renderers/common/SampledTexture.js +152 -0
  911. package/node_modules/three/src/renderers/common/Sampler.js +165 -0
  912. package/node_modules/three/src/renderers/common/Storage3DTexture.js +100 -0
  913. package/node_modules/three/src/renderers/common/StorageArrayTexture.js +84 -0
  914. package/node_modules/three/src/renderers/common/StorageBuffer.js +41 -0
  915. package/node_modules/three/src/renderers/common/StorageBufferAttribute.js +46 -0
  916. package/node_modules/three/src/renderers/common/StorageInstancedBufferAttribute.js +46 -0
  917. package/node_modules/three/src/renderers/common/StorageTexture.js +86 -0
  918. package/node_modules/three/src/renderers/common/Textures.js +544 -0
  919. package/node_modules/three/src/renderers/common/TimestampQueryPool.js +161 -0
  920. package/node_modules/three/src/renderers/common/Uniform.js +367 -0
  921. package/node_modules/three/src/renderers/common/UniformBuffer.js +34 -0
  922. package/node_modules/three/src/renderers/common/UniformsGroup.js +487 -0
  923. package/node_modules/three/src/renderers/common/XRManager.js +1676 -0
  924. package/node_modules/three/src/renderers/common/XRRenderTarget.js +91 -0
  925. package/node_modules/three/src/renderers/common/extras/PMREMGenerator.js +1034 -0
  926. package/node_modules/three/src/renderers/common/nodes/NodeBuilderState.js +152 -0
  927. package/node_modules/three/src/renderers/common/nodes/NodeLibrary.js +196 -0
  928. package/node_modules/three/src/renderers/common/nodes/NodeSampledTexture.js +140 -0
  929. package/node_modules/three/src/renderers/common/nodes/NodeSampler.js +62 -0
  930. package/node_modules/three/src/renderers/common/nodes/NodeStorageBuffer.js +61 -0
  931. package/node_modules/three/src/renderers/common/nodes/NodeUniform.js +418 -0
  932. package/node_modules/three/src/renderers/common/nodes/NodeUniformBuffer.js +53 -0
  933. package/node_modules/three/src/renderers/common/nodes/NodeUniformsGroup.js +51 -0
  934. package/node_modules/three/src/renderers/common/nodes/Nodes.js +840 -0
  935. package/node_modules/three/src/renderers/shaders/DFGLUTData.js +64 -0
  936. package/node_modules/three/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +31 -1
  937. package/node_modules/three/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  938. package/node_modules/three/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
  939. package/node_modules/three/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
  940. package/node_modules/three/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -33
  941. package/node_modules/three/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -22
  942. package/node_modules/three/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  943. package/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +2 -1
  944. package/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
  945. package/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +3 -3
  946. package/node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  947. package/node_modules/three/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
  948. package/node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  949. package/node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +55 -20
  950. package/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
  951. package/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  952. package/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +3 -11
  953. package/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +3 -17
  954. package/node_modules/three/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +3 -3
  955. package/node_modules/three/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
  956. package/node_modules/three/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +14 -0
  957. package/node_modules/three/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
  958. package/node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +12 -24
  959. package/node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
  960. package/node_modules/three/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  961. package/node_modules/three/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  962. package/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +59 -36
  963. package/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  964. package/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  965. package/node_modules/three/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +33 -2
  966. package/node_modules/three/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  967. package/node_modules/three/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
  968. package/node_modules/three/src/renderers/shaders/ShaderChunk.js +2 -2
  969. package/node_modules/three/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  970. package/node_modules/three/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +3 -2
  971. package/node_modules/three/src/renderers/shaders/ShaderLib/depth.glsl.js +21 -2
  972. package/node_modules/three/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  973. package/node_modules/three/src/renderers/shaders/ShaderLib/linedashed.glsl.js +1 -0
  974. package/node_modules/three/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -0
  975. package/node_modules/three/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +1 -0
  976. package/node_modules/three/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -0
  977. package/node_modules/three/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -0
  978. package/node_modules/three/src/renderers/shaders/ShaderLib/meshphong.glsl.js +1 -0
  979. package/node_modules/three/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +5 -0
  980. package/node_modules/three/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +1 -0
  981. package/node_modules/three/src/renderers/shaders/ShaderLib/points.glsl.js +1 -0
  982. package/node_modules/three/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -0
  983. package/node_modules/three/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  984. package/node_modules/three/src/renderers/shaders/ShaderLib.js +4 -2
  985. package/node_modules/three/src/renderers/shaders/UniformsLib.js +6 -4
  986. package/node_modules/three/src/renderers/shaders/UniformsUtils.js +31 -3
  987. package/node_modules/three/src/renderers/webgl/WebGLAttributes.js +46 -38
  988. package/node_modules/three/src/renderers/webgl/WebGLBackground.js +69 -5
  989. package/node_modules/three/src/renderers/webgl/WebGLBindingStates.js +14 -51
  990. package/node_modules/three/src/renderers/webgl/WebGLBufferRenderer.js +19 -22
  991. package/node_modules/three/src/renderers/webgl/WebGLCapabilities.js +39 -14
  992. package/node_modules/three/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
  993. package/node_modules/three/src/renderers/webgl/WebGLExtensions.js +8 -44
  994. package/node_modules/three/src/renderers/webgl/WebGLGeometries.js +0 -28
  995. package/node_modules/three/src/renderers/webgl/WebGLIndexedBufferRenderer.js +19 -21
  996. package/node_modules/three/src/renderers/webgl/WebGLInfo.js +3 -1
  997. package/node_modules/three/src/renderers/webgl/WebGLLights.js +21 -44
  998. package/node_modules/three/src/renderers/webgl/WebGLMaterials.js +33 -9
  999. package/node_modules/three/src/renderers/webgl/WebGLMorphtargets.js +78 -210
  1000. package/node_modules/three/src/renderers/webgl/WebGLProgram.js +103 -121
  1001. package/node_modules/three/src/renderers/webgl/WebGLPrograms.js +32 -26
  1002. package/node_modules/three/src/renderers/webgl/WebGLProperties.js +7 -0
  1003. package/node_modules/three/src/renderers/webgl/WebGLRenderStates.js +15 -9
  1004. package/node_modules/three/src/renderers/webgl/WebGLShadowMap.js +41 -29
  1005. package/node_modules/three/src/renderers/webgl/WebGLState.js +104 -100
  1006. package/node_modules/three/src/renderers/webgl/WebGLTextures.js +567 -408
  1007. package/node_modules/three/src/renderers/webgl/WebGLUniforms.js +12 -2
  1008. package/node_modules/three/src/renderers/webgl/WebGLUniformsGroups.js +13 -11
  1009. package/node_modules/three/src/renderers/webgl/WebGLUtils.js +11 -81
  1010. package/node_modules/three/src/renderers/webgl-fallback/WebGLBackend.js +2612 -0
  1011. package/node_modules/three/src/renderers/webgl-fallback/WebGLBufferRenderer.js +140 -0
  1012. package/node_modules/three/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +1577 -0
  1013. package/node_modules/three/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +76 -3
  1014. package/node_modules/three/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +64 -0
  1015. package/node_modules/three/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +5 -3
  1016. package/node_modules/three/src/renderers/webgl-fallback/utils/WebGLExtensions.js +83 -0
  1017. package/node_modules/three/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +427 -21
  1018. package/node_modules/three/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1309 -0
  1019. package/node_modules/three/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +396 -0
  1020. package/node_modules/three/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +72 -43
  1021. package/node_modules/three/src/renderers/webgpu/WebGPUBackend.js +2482 -0
  1022. package/node_modules/three/src/renderers/webgpu/WebGPURenderer.Nodes.js +69 -0
  1023. package/node_modules/three/src/renderers/webgpu/WebGPURenderer.js +106 -0
  1024. package/node_modules/three/src/renderers/webgpu/nodes/BasicNodeLibrary.js +66 -0
  1025. package/node_modules/three/src/renderers/webgpu/nodes/StandardNodeLibrary.js +100 -0
  1026. package/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +2247 -0
  1027. package/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeFunction.js +187 -0
  1028. package/node_modules/three/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  1029. package/node_modules/three/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +449 -0
  1030. package/node_modules/three/src/renderers/webgpu/utils/WebGPUBindingUtils.js +485 -0
  1031. package/node_modules/three/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +24 -4
  1032. package/node_modules/three/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +289 -72
  1033. package/node_modules/three/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +160 -8
  1034. package/node_modules/three/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1576 -0
  1035. package/node_modules/three/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +310 -0
  1036. package/node_modules/three/src/renderers/webgpu/utils/WebGPUUtils.js +247 -0
  1037. package/node_modules/three/src/renderers/webxr/WebXRController.js +87 -2
  1038. package/node_modules/three/src/renderers/webxr/WebXRDepthSensing.js +63 -13
  1039. package/node_modules/three/src/renderers/webxr/WebXRManager.js +323 -44
  1040. package/node_modules/three/src/scenes/Fog.js +60 -0
  1041. package/node_modules/three/src/scenes/FogExp2.js +51 -0
  1042. package/node_modules/three/src/scenes/Scene.js +103 -1
  1043. package/node_modules/three/src/textures/CanvasTexture.js +28 -0
  1044. package/node_modules/three/src/textures/CompressedArrayTexture.js +71 -0
  1045. package/node_modules/three/src/textures/CompressedCubeTexture.js +29 -0
  1046. package/node_modules/three/src/textures/CompressedTexture.js +64 -6
  1047. package/node_modules/three/src/textures/CubeTexture.js +52 -4
  1048. package/node_modules/three/src/textures/Data3DTexture.js +79 -2
  1049. package/node_modules/three/src/textures/DataArrayTexture.js +107 -0
  1050. package/node_modules/three/src/textures/DataTexture.js +65 -0
  1051. package/node_modules/three/src/textures/DepthTexture.js +59 -13
  1052. package/node_modules/three/src/textures/ExternalTexture.js +56 -0
  1053. package/node_modules/three/src/textures/FramebufferTexture.js +62 -0
  1054. package/node_modules/three/src/textures/Source.js +106 -4
  1055. package/node_modules/three/src/textures/Texture.js +490 -27
  1056. package/node_modules/three/src/textures/VideoFrameTexture.js +72 -0
  1057. package/node_modules/three/src/textures/VideoTexture.js +78 -6
  1058. package/node_modules/three/src/utils.js +128 -3
  1059. package/package.json +3 -2
  1060. package/node_modules/three/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  1061. package/node_modules/three/examples/jsm/animation/MMDPhysics.js +0 -1406
  1062. package/node_modules/three/examples/jsm/cameras/CinematicCamera.js +0 -208
  1063. package/node_modules/three/examples/jsm/effects/PeppersGhostEffect.js +0 -153
  1064. package/node_modules/three/examples/jsm/exporters/MMDExporter.js +0 -217
  1065. package/node_modules/three/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  1066. package/node_modules/three/examples/jsm/geometries/ParametricGeometries.js +0 -254
  1067. package/node_modules/three/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  1068. package/node_modules/three/examples/jsm/libs/mmdparser.module.js +0 -11530
  1069. package/node_modules/three/examples/jsm/lights/IESSpotLight.js +0 -25
  1070. package/node_modules/three/examples/jsm/loaders/LogLuvLoader.js +0 -606
  1071. package/node_modules/three/examples/jsm/loaders/MMDLoader.js +0 -2276
  1072. package/node_modules/three/examples/jsm/loaders/RGBMLoader.js +0 -1065
  1073. package/node_modules/three/examples/jsm/loaders/TiltLoader.js +0 -520
  1074. package/node_modules/three/examples/jsm/misc/Timer.js +0 -128
  1075. package/node_modules/three/examples/jsm/nodes/Nodes.js +0 -193
  1076. package/node_modules/three/examples/jsm/nodes/accessors/BitangentNode.js +0 -89
  1077. package/node_modules/three/examples/jsm/nodes/accessors/BufferAttributeNode.js +0 -127
  1078. package/node_modules/three/examples/jsm/nodes/accessors/BufferNode.js +0 -30
  1079. package/node_modules/three/examples/jsm/nodes/accessors/CameraNode.js +0 -119
  1080. package/node_modules/three/examples/jsm/nodes/accessors/CubeTextureNode.js +0 -61
  1081. package/node_modules/three/examples/jsm/nodes/accessors/InstanceNode.js +0 -71
  1082. package/node_modules/three/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  1083. package/node_modules/three/examples/jsm/nodes/accessors/MaterialNode.js +0 -314
  1084. package/node_modules/three/examples/jsm/nodes/accessors/MaterialReferenceNode.js +0 -51
  1085. package/node_modules/three/examples/jsm/nodes/accessors/ModelNode.js +0 -33
  1086. package/node_modules/three/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +0 -39
  1087. package/node_modules/three/examples/jsm/nodes/accessors/NormalNode.js +0 -96
  1088. package/node_modules/three/examples/jsm/nodes/accessors/Object3DNode.js +0 -150
  1089. package/node_modules/three/examples/jsm/nodes/accessors/PointUVNode.js +0 -26
  1090. package/node_modules/three/examples/jsm/nodes/accessors/PositionNode.js +0 -104
  1091. package/node_modules/three/examples/jsm/nodes/accessors/ReferenceNode.js +0 -102
  1092. package/node_modules/three/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -35
  1093. package/node_modules/three/examples/jsm/nodes/accessors/SceneNode.js +0 -52
  1094. package/node_modules/three/examples/jsm/nodes/accessors/SkinningNode.js +0 -103
  1095. package/node_modules/three/examples/jsm/nodes/accessors/StorageBufferNode.js +0 -54
  1096. package/node_modules/three/examples/jsm/nodes/accessors/TangentNode.js +0 -103
  1097. package/node_modules/three/examples/jsm/nodes/accessors/TextureNode.js +0 -367
  1098. package/node_modules/three/examples/jsm/nodes/accessors/TextureSizeNode.js +0 -35
  1099. package/node_modules/three/examples/jsm/nodes/accessors/TextureStoreNode.js +0 -82
  1100. package/node_modules/three/examples/jsm/nodes/accessors/UVNode.js +0 -47
  1101. package/node_modules/three/examples/jsm/nodes/accessors/UserDataNode.js +0 -29
  1102. package/node_modules/three/examples/jsm/nodes/accessors/VertexColorNode.js +0 -70
  1103. package/node_modules/three/examples/jsm/nodes/code/CodeNode.js +0 -78
  1104. package/node_modules/three/examples/jsm/nodes/code/ExpressionNode.js +0 -37
  1105. package/node_modules/three/examples/jsm/nodes/code/FunctionCallNode.js +0 -96
  1106. package/node_modules/three/examples/jsm/nodes/code/FunctionNode.js +0 -138
  1107. package/node_modules/three/examples/jsm/nodes/core/ArrayUniformNode.js +0 -26
  1108. package/node_modules/three/examples/jsm/nodes/core/AssignNode.js +0 -72
  1109. package/node_modules/three/examples/jsm/nodes/core/AttributeNode.js +0 -108
  1110. package/node_modules/three/examples/jsm/nodes/core/BypassNode.js +0 -45
  1111. package/node_modules/three/examples/jsm/nodes/core/CacheNode.js +0 -49
  1112. package/node_modules/three/examples/jsm/nodes/core/ConstNode.js +0 -32
  1113. package/node_modules/three/examples/jsm/nodes/core/ContextNode.js +0 -61
  1114. package/node_modules/three/examples/jsm/nodes/core/IndexNode.js +0 -66
  1115. package/node_modules/three/examples/jsm/nodes/core/InputNode.js +0 -83
  1116. package/node_modules/three/examples/jsm/nodes/core/LightingModel.js +0 -17
  1117. package/node_modules/three/examples/jsm/nodes/core/Node.js +0 -483
  1118. package/node_modules/three/examples/jsm/nodes/core/NodeAttribute.js +0 -15
  1119. package/node_modules/three/examples/jsm/nodes/core/NodeBuilder.js +0 -1256
  1120. package/node_modules/three/examples/jsm/nodes/core/NodeCache.js +0 -26
  1121. package/node_modules/three/examples/jsm/nodes/core/NodeCode.js +0 -15
  1122. package/node_modules/three/examples/jsm/nodes/core/NodeFrame.js +0 -143
  1123. package/node_modules/three/examples/jsm/nodes/core/NodeFunction.js +0 -22
  1124. package/node_modules/three/examples/jsm/nodes/core/NodeFunctionInput.js +0 -17
  1125. package/node_modules/three/examples/jsm/nodes/core/NodeKeywords.js +0 -80
  1126. package/node_modules/three/examples/jsm/nodes/core/NodeParser.js +0 -11
  1127. package/node_modules/three/examples/jsm/nodes/core/NodeUniform.js +0 -40
  1128. package/node_modules/three/examples/jsm/nodes/core/NodeUtils.js +0 -210
  1129. package/node_modules/three/examples/jsm/nodes/core/NodeVar.js +0 -14
  1130. package/node_modules/three/examples/jsm/nodes/core/NodeVarying.js +0 -17
  1131. package/node_modules/three/examples/jsm/nodes/core/OutputStructNode.js +0 -62
  1132. package/node_modules/three/examples/jsm/nodes/core/ParameterNode.js +0 -33
  1133. package/node_modules/three/examples/jsm/nodes/core/PropertyNode.js +0 -72
  1134. package/node_modules/three/examples/jsm/nodes/core/StackNode.js +0 -89
  1135. package/node_modules/three/examples/jsm/nodes/core/StructTypeNode.js +0 -24
  1136. package/node_modules/three/examples/jsm/nodes/core/TempNode.js +0 -58
  1137. package/node_modules/three/examples/jsm/nodes/core/UniformGroup.js +0 -13
  1138. package/node_modules/three/examples/jsm/nodes/core/UniformGroupNode.js +0 -36
  1139. package/node_modules/three/examples/jsm/nodes/core/UniformNode.js +0 -80
  1140. package/node_modules/three/examples/jsm/nodes/core/VarNode.js +0 -60
  1141. package/node_modules/three/examples/jsm/nodes/core/VaryingNode.js +0 -65
  1142. package/node_modules/three/examples/jsm/nodes/core/constants.js +0 -28
  1143. package/node_modules/three/examples/jsm/nodes/display/AfterImageNode.js +0 -148
  1144. package/node_modules/three/examples/jsm/nodes/display/AnamorphicNode.js +0 -148
  1145. package/node_modules/three/examples/jsm/nodes/display/BlendModeNode.js +0 -99
  1146. package/node_modules/three/examples/jsm/nodes/display/BumpMapNode.js +0 -99
  1147. package/node_modules/three/examples/jsm/nodes/display/ColorAdjustmentNode.js +0 -99
  1148. package/node_modules/three/examples/jsm/nodes/display/ColorSpaceNode.js +0 -108
  1149. package/node_modules/three/examples/jsm/nodes/display/FrontFacingNode.js +0 -27
  1150. package/node_modules/three/examples/jsm/nodes/display/GaussianBlurNode.js +0 -190
  1151. package/node_modules/three/examples/jsm/nodes/display/NormalMapNode.js +0 -108
  1152. package/node_modules/three/examples/jsm/nodes/display/PassNode.js +0 -183
  1153. package/node_modules/three/examples/jsm/nodes/display/PosterizeNode.js +0 -32
  1154. package/node_modules/three/examples/jsm/nodes/display/ToneMappingNode.js +0 -184
  1155. package/node_modules/three/examples/jsm/nodes/display/ViewportDepthNode.js +0 -97
  1156. package/node_modules/three/examples/jsm/nodes/display/ViewportDepthTextureNode.js +0 -31
  1157. package/node_modules/three/examples/jsm/nodes/display/ViewportNode.js +0 -134
  1158. package/node_modules/three/examples/jsm/nodes/display/ViewportSharedTextureNode.js +0 -31
  1159. package/node_modules/three/examples/jsm/nodes/display/ViewportTextureNode.js +0 -75
  1160. package/node_modules/three/examples/jsm/nodes/fog/FogExp2Node.js +0 -35
  1161. package/node_modules/three/examples/jsm/nodes/fog/FogNode.js +0 -38
  1162. package/node_modules/three/examples/jsm/nodes/fog/FogRangeNode.js +0 -34
  1163. package/node_modules/three/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +0 -40
  1164. package/node_modules/three/examples/jsm/nodes/functions/BSDF/DFGApprox.js +0 -30
  1165. package/node_modules/three/examples/jsm/nodes/functions/PhongLightingModel.js +0 -67
  1166. package/node_modules/three/examples/jsm/nodes/functions/PhysicalLightingModel.js +0 -393
  1167. package/node_modules/three/examples/jsm/nodes/functions/material/getGeometryRoughness.js +0 -13
  1168. package/node_modules/three/examples/jsm/nodes/geometry/RangeNode.js +0 -104
  1169. package/node_modules/three/examples/jsm/nodes/gpgpu/ComputeNode.js +0 -85
  1170. package/node_modules/three/examples/jsm/nodes/lighting/AONode.js +0 -27
  1171. package/node_modules/three/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -241
  1172. package/node_modules/three/examples/jsm/nodes/lighting/DirectionalLightNode.js +0 -40
  1173. package/node_modules/three/examples/jsm/nodes/lighting/EnvironmentNode.js +0 -181
  1174. package/node_modules/three/examples/jsm/nodes/lighting/HemisphereLightNode.js +0 -55
  1175. package/node_modules/three/examples/jsm/nodes/lighting/LightNode.js +0 -57
  1176. package/node_modules/three/examples/jsm/nodes/lighting/LightUtils.js +0 -17
  1177. package/node_modules/three/examples/jsm/nodes/lighting/LightingContextNode.js +0 -66
  1178. package/node_modules/three/examples/jsm/nodes/lighting/LightingNode.js +0 -21
  1179. package/node_modules/three/examples/jsm/nodes/lighting/LightsNode.js +0 -188
  1180. package/node_modules/three/examples/jsm/nodes/lighting/PointLightNode.js +0 -68
  1181. package/node_modules/three/examples/jsm/nodes/lighting/SpotLightNode.js +0 -89
  1182. package/node_modules/three/examples/jsm/nodes/loaders/NodeLoader.js +0 -108
  1183. package/node_modules/three/examples/jsm/nodes/loaders/NodeMaterialLoader.js +0 -59
  1184. package/node_modules/three/examples/jsm/nodes/loaders/NodeObjectLoader.js +0 -70
  1185. package/node_modules/three/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  1186. package/node_modules/three/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -28
  1187. package/node_modules/three/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +0 -54
  1188. package/node_modules/three/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  1189. package/node_modules/three/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +0 -34
  1190. package/node_modules/three/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  1191. package/node_modules/three/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -65
  1192. package/node_modules/three/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +0 -155
  1193. package/node_modules/three/examples/jsm/nodes/materials/MeshSSSNodeMaterial.js +0 -84
  1194. package/node_modules/three/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +0 -80
  1195. package/node_modules/three/examples/jsm/nodes/materials/NodeMaterial.js +0 -570
  1196. package/node_modules/three/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -39
  1197. package/node_modules/three/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -90
  1198. package/node_modules/three/examples/jsm/nodes/materialx/MaterialXNodes.js +0 -68
  1199. package/node_modules/three/examples/jsm/nodes/math/CondNode.js +0 -86
  1200. package/node_modules/three/examples/jsm/nodes/math/HashNode.js +0 -34
  1201. package/node_modules/three/examples/jsm/nodes/math/MathNode.js +0 -371
  1202. package/node_modules/three/examples/jsm/nodes/math/MathUtils.js +0 -15
  1203. package/node_modules/three/examples/jsm/nodes/math/OperatorNode.js +0 -274
  1204. package/node_modules/three/examples/jsm/nodes/procedural/CheckerNode.js +0 -42
  1205. package/node_modules/three/examples/jsm/nodes/shadernode/ShaderNode.js +0 -634
  1206. package/node_modules/three/examples/jsm/nodes/utils/ArrayElementNode.js +0 -41
  1207. package/node_modules/three/examples/jsm/nodes/utils/ConvertNode.js +0 -65
  1208. package/node_modules/three/examples/jsm/nodes/utils/DiscardNode.js +0 -27
  1209. package/node_modules/three/examples/jsm/nodes/utils/EquirectUVNode.js +0 -33
  1210. package/node_modules/three/examples/jsm/nodes/utils/FunctionOverloadingNode.js +0 -95
  1211. package/node_modules/three/examples/jsm/nodes/utils/JoinNode.js +0 -61
  1212. package/node_modules/three/examples/jsm/nodes/utils/LoopNode.js +0 -198
  1213. package/node_modules/three/examples/jsm/nodes/utils/MatcapUVNode.js +0 -30
  1214. package/node_modules/three/examples/jsm/nodes/utils/MaxMipLevelNode.js +0 -46
  1215. package/node_modules/three/examples/jsm/nodes/utils/OscNode.js +0 -81
  1216. package/node_modules/three/examples/jsm/nodes/utils/PackingNode.js +0 -55
  1217. package/node_modules/three/examples/jsm/nodes/utils/ReflectorNode.js +0 -227
  1218. package/node_modules/three/examples/jsm/nodes/utils/RemapNode.js +0 -42
  1219. package/node_modules/three/examples/jsm/nodes/utils/RotateUVNode.js +0 -35
  1220. package/node_modules/three/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
  1221. package/node_modules/three/examples/jsm/nodes/utils/SpriteSheetUVNode.js +0 -41
  1222. package/node_modules/three/examples/jsm/nodes/utils/TimerNode.js +0 -94
  1223. package/node_modules/three/examples/jsm/nodes/utils/TriplanarTexturesNode.js +0 -62
  1224. package/node_modules/three/examples/jsm/objects/InstancedPoints.js +0 -21
  1225. package/node_modules/three/examples/jsm/objects/QuadMesh.js +0 -66
  1226. package/node_modules/three/examples/jsm/renderers/common/Animation.js +0 -47
  1227. package/node_modules/three/examples/jsm/renderers/common/Backend.js +0 -195
  1228. package/node_modules/three/examples/jsm/renderers/common/Background.js +0 -134
  1229. package/node_modules/three/examples/jsm/renderers/common/Binding.js +0 -25
  1230. package/node_modules/three/examples/jsm/renderers/common/Bindings.js +0 -173
  1231. package/node_modules/three/examples/jsm/renderers/common/Buffer.js +0 -38
  1232. package/node_modules/three/examples/jsm/renderers/common/BufferUtils.js +0 -33
  1233. package/node_modules/three/examples/jsm/renderers/common/ChainMap.js +0 -89
  1234. package/node_modules/three/examples/jsm/renderers/common/Color4.js +0 -37
  1235. package/node_modules/three/examples/jsm/renderers/common/ComputePipeline.js +0 -17
  1236. package/node_modules/three/examples/jsm/renderers/common/DataMap.js +0 -54
  1237. package/node_modules/three/examples/jsm/renderers/common/Geometries.js +0 -215
  1238. package/node_modules/three/examples/jsm/renderers/common/Info.js +0 -107
  1239. package/node_modules/three/examples/jsm/renderers/common/Pipeline.js +0 -13
  1240. package/node_modules/three/examples/jsm/renderers/common/PostProcessing.js +0 -25
  1241. package/node_modules/three/examples/jsm/renderers/common/ProgrammableStage.js +0 -20
  1242. package/node_modules/three/examples/jsm/renderers/common/RenderContext.js +0 -41
  1243. package/node_modules/three/examples/jsm/renderers/common/RenderContexts.js +0 -74
  1244. package/node_modules/three/examples/jsm/renderers/common/RenderList.js +0 -186
  1245. package/node_modules/three/examples/jsm/renderers/common/RenderLists.js +0 -38
  1246. package/node_modules/three/examples/jsm/renderers/common/RenderObject.js +0 -178
  1247. package/node_modules/three/examples/jsm/renderers/common/RenderObjects.js +0 -91
  1248. package/node_modules/three/examples/jsm/renderers/common/RenderPipeline.js +0 -16
  1249. package/node_modules/three/examples/jsm/renderers/common/Renderer.js +0 -1247
  1250. package/node_modules/three/examples/jsm/renderers/common/SampledTexture.js +0 -83
  1251. package/node_modules/three/examples/jsm/renderers/common/Sampler.js +0 -18
  1252. package/node_modules/three/examples/jsm/renderers/common/StorageBuffer.js +0 -17
  1253. package/node_modules/three/examples/jsm/renderers/common/StorageBufferAttribute.js +0 -17
  1254. package/node_modules/three/examples/jsm/renderers/common/StorageTexture.js +0 -20
  1255. package/node_modules/three/examples/jsm/renderers/common/Textures.js +0 -354
  1256. package/node_modules/three/examples/jsm/renderers/common/Uniform.js +0 -140
  1257. package/node_modules/three/examples/jsm/renderers/common/UniformBuffer.js +0 -15
  1258. package/node_modules/three/examples/jsm/renderers/common/UniformsGroup.js +0 -299
  1259. package/node_modules/three/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  1260. package/node_modules/three/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +0 -49
  1261. package/node_modules/three/examples/jsm/renderers/common/nodes/NodeSampler.js +0 -15
  1262. package/node_modules/three/examples/jsm/renderers/common/nodes/NodeUniform.js +0 -135
  1263. package/node_modules/three/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +0 -44
  1264. package/node_modules/three/examples/jsm/renderers/common/nodes/Nodes.js +0 -495
  1265. package/node_modules/three/examples/jsm/renderers/webgl/WebGLBackend.js +0 -1362
  1266. package/node_modules/three/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +0 -679
  1267. package/node_modules/three/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +0 -36
  1268. package/node_modules/three/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +0 -36
  1269. package/node_modules/three/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +0 -647
  1270. package/node_modules/three/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -320
  1271. package/node_modules/three/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +0 -26
  1272. package/node_modules/three/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -794
  1273. package/node_modules/three/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +0 -51
  1274. package/node_modules/three/examples/jsm/renderers/webgpu/WebGPUBackend.js +0 -1321
  1275. package/node_modules/three/examples/jsm/renderers/webgpu/WebGPURenderer.js +0 -53
  1276. package/node_modules/three/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +0 -1103
  1277. package/node_modules/three/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  1278. package/node_modules/three/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +0 -287
  1279. package/node_modules/three/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +0 -244
  1280. package/node_modules/three/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +0 -1040
  1281. package/node_modules/three/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +0 -93
  1282. package/node_modules/three/examples/jsm/shaders/MMDToonShader.js +0 -134
  1283. package/node_modules/three/examples/jsm/utils/GPUStatsPanel.js +0 -128
  1284. package/node_modules/three/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  1285. package/node_modules/three/src/renderers/WebGL1Renderer.js +0 -7
  1286. package/node_modules/three/src/renderers/WebGLMultipleRenderTargets.js +0 -82
  1287. package/node_modules/three/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
  1288. /package/node_modules/three/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
@@ -0,0 +1,2247 @@
1
+ import NodeUniformsGroup from '../../common/nodes/NodeUniformsGroup.js';
2
+
3
+ import NodeSampler from '../../common/nodes/NodeSampler.js';
4
+ import { NodeSampledTexture, NodeSampledCubeTexture, NodeSampledTexture3D } from '../../common/nodes/NodeSampledTexture.js';
5
+
6
+ import NodeUniformBuffer from '../../common/nodes/NodeUniformBuffer.js';
7
+ import NodeStorageBuffer from '../../common/nodes/NodeStorageBuffer.js';
8
+
9
+ import { NodeBuilder, CodeNode } from '../../../nodes/Nodes.js';
10
+
11
+ import { getFormat } from '../utils/WebGPUTextureUtils.js';
12
+
13
+ import WGSLNodeParser from './WGSLNodeParser.js';
14
+ import { NodeAccess } from '../../../nodes/core/constants.js';
15
+
16
+ import VarNode from '../../../nodes/core/VarNode.js';
17
+ import ExpressionNode from '../../../nodes/code/ExpressionNode.js';
18
+
19
+ import { FloatType, RepeatWrapping, ClampToEdgeWrapping, MirroredRepeatWrapping, NearestFilter } from '../../../constants.js';
20
+ import { warn, error } from '../../../utils.js';
21
+
22
+ // GPUShaderStage is not defined in browsers not supporting WebGPU
23
+ const GPUShaderStage = ( typeof self !== 'undefined' ) ? self.GPUShaderStage : { VERTEX: 1, FRAGMENT: 2, COMPUTE: 4 };
24
+
25
+ const accessNames = {
26
+ [ NodeAccess.READ_ONLY ]: 'read',
27
+ [ NodeAccess.WRITE_ONLY ]: 'write',
28
+ [ NodeAccess.READ_WRITE ]: 'read_write'
29
+ };
30
+
31
+ const wrapNames = {
32
+ [ RepeatWrapping ]: 'repeat',
33
+ [ ClampToEdgeWrapping ]: 'clamp',
34
+ [ MirroredRepeatWrapping ]: 'mirror'
35
+ };
36
+
37
+ const gpuShaderStageLib = {
38
+ 'vertex': GPUShaderStage ? GPUShaderStage.VERTEX : 1,
39
+ 'fragment': GPUShaderStage ? GPUShaderStage.FRAGMENT : 2,
40
+ 'compute': GPUShaderStage ? GPUShaderStage.COMPUTE : 4
41
+ };
42
+
43
+ const supports = {
44
+ instance: true,
45
+ swizzleAssign: false,
46
+ storageBuffer: true
47
+ };
48
+
49
+ const wgslFnOpLib = {
50
+ '^^': 'tsl_xor'
51
+ };
52
+
53
+ const wgslTypeLib = {
54
+ float: 'f32',
55
+ int: 'i32',
56
+ uint: 'u32',
57
+ bool: 'bool',
58
+ color: 'vec3<f32>',
59
+
60
+ vec2: 'vec2<f32>',
61
+ ivec2: 'vec2<i32>',
62
+ uvec2: 'vec2<u32>',
63
+ bvec2: 'vec2<bool>',
64
+
65
+ vec3: 'vec3<f32>',
66
+ ivec3: 'vec3<i32>',
67
+ uvec3: 'vec3<u32>',
68
+ bvec3: 'vec3<bool>',
69
+
70
+ vec4: 'vec4<f32>',
71
+ ivec4: 'vec4<i32>',
72
+ uvec4: 'vec4<u32>',
73
+ bvec4: 'vec4<bool>',
74
+
75
+ mat2: 'mat2x2<f32>',
76
+ mat3: 'mat3x3<f32>',
77
+ mat4: 'mat4x4<f32>'
78
+ };
79
+
80
+ const wgslCodeCache = {};
81
+
82
+ const wgslPolyfill = {
83
+ tsl_xor: new CodeNode( 'fn tsl_xor( a : bool, b : bool ) -> bool { return ( a || b ) && !( a && b ); }' ),
84
+ mod_float: new CodeNode( 'fn tsl_mod_float( x : f32, y : f32 ) -> f32 { return x - y * floor( x / y ); }' ),
85
+ mod_vec2: new CodeNode( 'fn tsl_mod_vec2( x : vec2f, y : vec2f ) -> vec2f { return x - y * floor( x / y ); }' ),
86
+ mod_vec3: new CodeNode( 'fn tsl_mod_vec3( x : vec3f, y : vec3f ) -> vec3f { return x - y * floor( x / y ); }' ),
87
+ mod_vec4: new CodeNode( 'fn tsl_mod_vec4( x : vec4f, y : vec4f ) -> vec4f { return x - y * floor( x / y ); }' ),
88
+ equals_bool: new CodeNode( 'fn tsl_equals_bool( a : bool, b : bool ) -> bool { return a == b; }' ),
89
+ equals_bvec2: new CodeNode( 'fn tsl_equals_bvec2( a : vec2f, b : vec2f ) -> vec2<bool> { return vec2<bool>( a.x == b.x, a.y == b.y ); }' ),
90
+ equals_bvec3: new CodeNode( 'fn tsl_equals_bvec3( a : vec3f, b : vec3f ) -> vec3<bool> { return vec3<bool>( a.x == b.x, a.y == b.y, a.z == b.z ); }' ),
91
+ equals_bvec4: new CodeNode( 'fn tsl_equals_bvec4( a : vec4f, b : vec4f ) -> vec4<bool> { return vec4<bool>( a.x == b.x, a.y == b.y, a.z == b.z, a.w == b.w ); }' ),
92
+ repeatWrapping_float: new CodeNode( 'fn tsl_repeatWrapping_float( coord: f32 ) -> f32 { return fract( coord ); }' ),
93
+ mirrorWrapping_float: new CodeNode( 'fn tsl_mirrorWrapping_float( coord: f32 ) -> f32 { let mirrored = fract( coord * 0.5 ) * 2.0; return 1.0 - abs( 1.0 - mirrored ); }' ),
94
+ clampWrapping_float: new CodeNode( 'fn tsl_clampWrapping_float( coord: f32 ) -> f32 { return clamp( coord, 0.0, 1.0 ); }' ),
95
+ biquadraticTexture: new CodeNode( /* wgsl */`
96
+ fn tsl_biquadraticTexture( map : texture_2d<f32>, coord : vec2f, iRes : vec2u, level : u32 ) -> vec4f {
97
+
98
+ let res = vec2f( iRes );
99
+
100
+ let uvScaled = coord * res;
101
+ let uvWrapping = ( ( uvScaled % res ) + res ) % res;
102
+
103
+ // https://www.shadertoy.com/view/WtyXRy
104
+
105
+ let uv = uvWrapping - 0.5;
106
+ let iuv = floor( uv );
107
+ let f = fract( uv );
108
+
109
+ let rg1 = textureLoad( map, vec2u( iuv + vec2( 0.5, 0.5 ) ) % iRes, level );
110
+ let rg2 = textureLoad( map, vec2u( iuv + vec2( 1.5, 0.5 ) ) % iRes, level );
111
+ let rg3 = textureLoad( map, vec2u( iuv + vec2( 0.5, 1.5 ) ) % iRes, level );
112
+ let rg4 = textureLoad( map, vec2u( iuv + vec2( 1.5, 1.5 ) ) % iRes, level );
113
+
114
+ return mix( mix( rg1, rg2, f.x ), mix( rg3, rg4, f.x ), f.y );
115
+
116
+ }
117
+ ` )
118
+ };
119
+
120
+ const wgslMethods = {
121
+ dFdx: 'dpdx',
122
+ dFdy: '- dpdy',
123
+ mod_float: 'tsl_mod_float',
124
+ mod_vec2: 'tsl_mod_vec2',
125
+ mod_vec3: 'tsl_mod_vec3',
126
+ mod_vec4: 'tsl_mod_vec4',
127
+ equals_bool: 'tsl_equals_bool',
128
+ equals_bvec2: 'tsl_equals_bvec2',
129
+ equals_bvec3: 'tsl_equals_bvec3',
130
+ equals_bvec4: 'tsl_equals_bvec4',
131
+ inversesqrt: 'inverseSqrt',
132
+ bitcast: 'bitcast<f32>'
133
+ };
134
+
135
+ //
136
+
137
+ let diagnostics = '';
138
+
139
+ if ( ( typeof navigator !== 'undefined' && /Firefox|Deno/g.test( navigator.userAgent ) ) !== true ) {
140
+
141
+ diagnostics += 'diagnostic( off, derivative_uniformity );\n';
142
+
143
+ }
144
+
145
+ /**
146
+ * A node builder targeting WGSL.
147
+ *
148
+ * This module generates WGSL shader code from node materials and also
149
+ * generates the respective bindings and vertex buffer definitions. These
150
+ * data are later used by the renderer to create render and compute pipelines
151
+ * for render objects.
152
+ *
153
+ * @augments NodeBuilder
154
+ */
155
+ class WGSLNodeBuilder extends NodeBuilder {
156
+
157
+ /**
158
+ * Constructs a new WGSL node builder renderer.
159
+ *
160
+ * @param {Object3D} object - The 3D object.
161
+ * @param {Renderer} renderer - The renderer.
162
+ */
163
+ constructor( object, renderer ) {
164
+
165
+ super( object, renderer, new WGSLNodeParser() );
166
+
167
+ /**
168
+ * A dictionary that holds for each shader stage ('vertex', 'fragment', 'compute')
169
+ * another dictionary which manages UBOs per group ('render','frame','object').
170
+ *
171
+ * @type {Object<string,Object<string,NodeUniformsGroup>>}
172
+ */
173
+ this.uniformGroups = {};
174
+
175
+ /**
176
+ * A dictionary that holds for each shader stage a Map of builtins.
177
+ *
178
+ * @type {Object<string,Map<string,Object>>}
179
+ */
180
+ this.builtins = {};
181
+
182
+ /**
183
+ * A dictionary that holds for each shader stage a Set of directives.
184
+ *
185
+ * @type {Object<string,Set<string>>}
186
+ */
187
+ this.directives = {};
188
+
189
+ /**
190
+ * A map for managing scope arrays. Only relevant for when using
191
+ * {@link WorkgroupInfoNode} in context of compute shaders.
192
+ *
193
+ * @type {Map<string,Object>}
194
+ */
195
+ this.scopedArrays = new Map();
196
+
197
+ }
198
+
199
+ /**
200
+ * Generates the WGSL snippet for sampled textures.
201
+ *
202
+ * @private
203
+ * @param {Texture} texture - The texture.
204
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
205
+ * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
206
+ * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
207
+ * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
208
+ * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
209
+ * @return {string} The WGSL snippet.
210
+ */
211
+ _generateTextureSample( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {
212
+
213
+ if ( shaderStage === 'fragment' ) {
214
+
215
+ if ( depthSnippet ) {
216
+
217
+ if ( offsetSnippet ) {
218
+
219
+ return `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ offsetSnippet } )`;
220
+
221
+ }
222
+
223
+ return `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet } )`;
224
+
225
+ } else {
226
+
227
+ if ( offsetSnippet ) {
228
+
229
+ return `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ offsetSnippet } )`;
230
+
231
+ }
232
+
233
+ return `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet } )`;
234
+
235
+ }
236
+
237
+ } else {
238
+
239
+ return this.generateTextureSampleLevel( texture, textureProperty, uvSnippet, '0', depthSnippet );
240
+
241
+ }
242
+
243
+ }
244
+
245
+ /**
246
+ * Generates the WGSL snippet when sampling textures with explicit mip level.
247
+ *
248
+ * @private
249
+ * @param {Texture} texture - The texture.
250
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
251
+ * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
252
+ * @param {string} levelSnippet - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
253
+ * @param {string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
254
+ * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
255
+ * @return {string} The WGSL snippet.
256
+ */
257
+ generateTextureSampleLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet ) {
258
+
259
+ if ( this.isUnfilterable( texture ) === false ) {
260
+
261
+ if ( offsetSnippet ) {
262
+
263
+ return `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet }, ${ offsetSnippet } )`;
264
+
265
+ }
266
+
267
+ return `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet } )`;
268
+
269
+ } else if ( this.isFilteredTexture( texture ) ) {
270
+
271
+ return this.generateFilteredTexture( texture, textureProperty, uvSnippet, offsetSnippet, levelSnippet );
272
+
273
+ } else {
274
+
275
+ return this.generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, levelSnippet );
276
+
277
+ }
278
+
279
+ }
280
+
281
+ /**
282
+ * Generates a wrap function used in context of textures.
283
+ *
284
+ * @param {Texture} texture - The texture to generate the function for.
285
+ * @return {string} The name of the generated function.
286
+ */
287
+ generateWrapFunction( texture ) {
288
+
289
+ const functionName = `tsl_coord_${ wrapNames[ texture.wrapS ] }S_${ wrapNames[ texture.wrapT ] }_${ texture.isData3DTexture ? '3d' : '2d' }T`;
290
+
291
+ let nodeCode = wgslCodeCache[ functionName ];
292
+
293
+ if ( nodeCode === undefined ) {
294
+
295
+ const includes = [];
296
+
297
+ // For 3D textures, use vec3f; for texture arrays, keep vec2f since array index is separate
298
+ const coordType = texture.isData3DTexture ? 'vec3f' : 'vec2f';
299
+ let code = `fn ${ functionName }( coord : ${ coordType } ) -> ${ coordType } {\n\n\treturn ${ coordType }(\n`;
300
+
301
+ const addWrapSnippet = ( wrap, axis ) => {
302
+
303
+ if ( wrap === RepeatWrapping ) {
304
+
305
+ includes.push( wgslPolyfill.repeatWrapping_float );
306
+
307
+ code += `\t\ttsl_repeatWrapping_float( coord.${ axis } )`;
308
+
309
+ } else if ( wrap === ClampToEdgeWrapping ) {
310
+
311
+ includes.push( wgslPolyfill.clampWrapping_float );
312
+
313
+ code += `\t\ttsl_clampWrapping_float( coord.${ axis } )`;
314
+
315
+ } else if ( wrap === MirroredRepeatWrapping ) {
316
+
317
+ includes.push( wgslPolyfill.mirrorWrapping_float );
318
+
319
+ code += `\t\ttsl_mirrorWrapping_float( coord.${ axis } )`;
320
+
321
+ } else {
322
+
323
+ code += `\t\tcoord.${ axis }`;
324
+
325
+ warn( `WebGPURenderer: Unsupported texture wrap type "${ wrap }" for vertex shader.` );
326
+
327
+ }
328
+
329
+ };
330
+
331
+ addWrapSnippet( texture.wrapS, 'x' );
332
+
333
+ code += ',\n';
334
+
335
+ addWrapSnippet( texture.wrapT, 'y' );
336
+
337
+ if ( texture.isData3DTexture ) {
338
+
339
+ code += ',\n';
340
+ addWrapSnippet( texture.wrapR, 'z' );
341
+
342
+ }
343
+
344
+ code += '\n\t);\n\n}\n';
345
+
346
+ wgslCodeCache[ functionName ] = nodeCode = new CodeNode( code, includes );
347
+
348
+ }
349
+
350
+ nodeCode.build( this );
351
+
352
+ return functionName;
353
+
354
+ }
355
+
356
+ /**
357
+ * Generates the array declaration string.
358
+ *
359
+ * @param {string} type - The type.
360
+ * @param {?number} [count] - The count.
361
+ * @return {string} The generated value as a shader string.
362
+ */
363
+ generateArrayDeclaration( type, count ) {
364
+
365
+ return `array< ${ this.getType( type ) }, ${ count } >`;
366
+
367
+ }
368
+
369
+ /**
370
+ * Generates a WGSL variable that holds the texture dimension of the given texture.
371
+ * It also returns information about the number of layers (elements) of an arrayed
372
+ * texture as well as the cube face count of cube textures.
373
+ *
374
+ * @param {Texture} texture - The texture to generate the function for.
375
+ * @param {string} textureProperty - The name of the video texture uniform in the shader.
376
+ * @param {string} levelSnippet - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
377
+ * @return {string} The name of the dimension variable.
378
+ */
379
+ generateTextureDimension( texture, textureProperty, levelSnippet ) {
380
+
381
+ const textureData = this.getDataFromNode( texture, this.shaderStage, this.globalCache );
382
+
383
+ if ( textureData.dimensionsSnippet === undefined ) textureData.dimensionsSnippet = {};
384
+
385
+ let textureDimensionNode = textureData.dimensionsSnippet[ levelSnippet ];
386
+
387
+ if ( textureData.dimensionsSnippet[ levelSnippet ] === undefined ) {
388
+
389
+ let textureDimensionsParams;
390
+ let dimensionType;
391
+
392
+ const { primarySamples } = this.renderer.backend.utils.getTextureSampleData( texture );
393
+ const isMultisampled = primarySamples > 1;
394
+
395
+ if ( texture.isData3DTexture ) {
396
+
397
+ dimensionType = 'vec3<u32>';
398
+
399
+ } else {
400
+
401
+ // Regular 2D textures, depth textures, etc.
402
+ dimensionType = 'vec2<u32>';
403
+
404
+ }
405
+
406
+ // Build parameters string based on texture type and multisampling
407
+ if ( isMultisampled || texture.isStorageTexture ) {
408
+
409
+ textureDimensionsParams = textureProperty;
410
+
411
+ } else {
412
+
413
+ textureDimensionsParams = `${textureProperty}${levelSnippet ? `, u32( ${ levelSnippet } )` : ''}`;
414
+
415
+ }
416
+
417
+ textureDimensionNode = new VarNode( new ExpressionNode( `textureDimensions( ${ textureDimensionsParams } )`, dimensionType ) );
418
+
419
+ textureData.dimensionsSnippet[ levelSnippet ] = textureDimensionNode;
420
+
421
+ if ( texture.isArrayTexture || texture.isDataArrayTexture || texture.isData3DTexture ) {
422
+
423
+ textureData.arrayLayerCount = new VarNode(
424
+ new ExpressionNode(
425
+ `textureNumLayers(${textureProperty})`,
426
+ 'u32'
427
+ )
428
+ );
429
+
430
+ }
431
+
432
+ // For cube textures, we know it's always 6 faces
433
+ if ( texture.isTextureCube ) {
434
+
435
+ textureData.cubeFaceCount = new VarNode(
436
+ new ExpressionNode( '6u', 'u32' )
437
+ );
438
+
439
+ }
440
+
441
+ }
442
+
443
+ return textureDimensionNode.build( this );
444
+
445
+ }
446
+
447
+ /**
448
+ * Generates the WGSL snippet for a manual filtered texture.
449
+ *
450
+ * @param {Texture} texture - The texture.
451
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
452
+ * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
453
+ * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
454
+ * @param {string} [levelSnippet='0u'] - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
455
+ * @return {string} The WGSL snippet.
456
+ */
457
+ generateFilteredTexture( texture, textureProperty, uvSnippet, offsetSnippet, levelSnippet = '0u' ) {
458
+
459
+ this._include( 'biquadraticTexture' );
460
+
461
+ const wrapFunction = this.generateWrapFunction( texture );
462
+ const textureDimension = this.generateTextureDimension( texture, textureProperty, levelSnippet );
463
+
464
+ if ( offsetSnippet ) {
465
+
466
+ uvSnippet = `${ uvSnippet } + vec2<f32>(${ offsetSnippet }) / ${ textureDimension }`;
467
+
468
+ }
469
+
470
+ return `tsl_biquadraticTexture( ${ textureProperty }, ${ wrapFunction }( ${ uvSnippet } ), ${ textureDimension }, u32( ${ levelSnippet } ) )`;
471
+
472
+ }
473
+
474
+ /**
475
+ * Generates the WGSL snippet for a texture lookup with explicit level-of-detail.
476
+ * Since it's a lookup, no sampling or filtering is applied.
477
+ *
478
+ * @param {Texture} texture - The texture.
479
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
480
+ * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
481
+ * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
482
+ * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
483
+ * @param {string} [levelSnippet='0u'] - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
484
+ * @return {string} The WGSL snippet.
485
+ */
486
+ generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, levelSnippet = '0u' ) {
487
+
488
+ const wrapFunction = this.generateWrapFunction( texture );
489
+ const textureDimension = this.generateTextureDimension( texture, textureProperty, levelSnippet );
490
+
491
+ const vecType = texture.isData3DTexture ? 'vec3' : 'vec2';
492
+
493
+ if ( offsetSnippet ) {
494
+
495
+ uvSnippet = `${ uvSnippet } + ${ vecType }<f32>(${ offsetSnippet }) / ${ vecType }<f32>( ${ textureDimension } )`;
496
+
497
+ }
498
+
499
+ const coordSnippet = `${ vecType }<u32>( ${ wrapFunction }( ${ uvSnippet } ) * ${ vecType }<f32>( ${ textureDimension } ) )`;
500
+
501
+ return this.generateTextureLoad( texture, textureProperty, coordSnippet, levelSnippet, depthSnippet, null );
502
+
503
+ }
504
+
505
+ /**
506
+ * Generates the WGSL snippet that reads a single texel from a texture without sampling or filtering.
507
+ *
508
+ * @param {Texture} texture - The texture.
509
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
510
+ * @param {string} uvIndexSnippet - A WGSL snippet that represents texture coordinates used for sampling.
511
+ * @param {?string} levelSnippet - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
512
+ * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
513
+ * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
514
+ * @return {string} The WGSL snippet.
515
+ */
516
+ generateTextureLoad( texture, textureProperty, uvIndexSnippet, levelSnippet, depthSnippet, offsetSnippet ) {
517
+
518
+ if ( levelSnippet === null ) levelSnippet = '0u';
519
+
520
+ if ( offsetSnippet ) {
521
+
522
+ uvIndexSnippet = `${ uvIndexSnippet } + ${ offsetSnippet }`;
523
+
524
+ }
525
+
526
+ let snippet;
527
+
528
+ if ( depthSnippet ) {
529
+
530
+ snippet = `textureLoad( ${ textureProperty }, ${ uvIndexSnippet }, ${ depthSnippet }, u32( ${ levelSnippet } ) )`;
531
+
532
+ } else {
533
+
534
+ snippet = `textureLoad( ${ textureProperty }, ${ uvIndexSnippet }, u32( ${ levelSnippet } ) )`;
535
+
536
+ if ( this.renderer.backend.compatibilityMode && texture.isDepthTexture ) {
537
+
538
+ snippet += '.x';
539
+
540
+ }
541
+
542
+ }
543
+
544
+ return snippet;
545
+
546
+ }
547
+
548
+ /**
549
+ * Generates the WGSL snippet that writes a single texel to a texture.
550
+ *
551
+ * @param {Texture} texture - The texture.
552
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
553
+ * @param {string} uvIndexSnippet - A WGSL snippet that represents texture coordinates used for sampling.
554
+ * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
555
+ * @param {string} valueSnippet - A WGSL snippet that represent the new texel value.
556
+ * @return {string} The WGSL snippet.
557
+ */
558
+ generateTextureStore( texture, textureProperty, uvIndexSnippet, depthSnippet, valueSnippet ) {
559
+
560
+ let snippet;
561
+
562
+ if ( depthSnippet ) {
563
+
564
+ snippet = `textureStore( ${ textureProperty }, ${ uvIndexSnippet }, ${ depthSnippet }, ${ valueSnippet } )`;
565
+
566
+ } else {
567
+
568
+ snippet = `textureStore( ${ textureProperty }, ${ uvIndexSnippet }, ${ valueSnippet } )`;
569
+
570
+ }
571
+
572
+ return snippet;
573
+
574
+ }
575
+
576
+ /**
577
+ * Returns `true` if the sampled values of the given texture should be compared against a reference value.
578
+ *
579
+ * @param {Texture} texture - The texture.
580
+ * @return {boolean} Whether the sampled values of the given texture should be compared against a reference value or not.
581
+ */
582
+ isSampleCompare( texture ) {
583
+
584
+ return texture.isDepthTexture === true && texture.compareFunction !== null;
585
+
586
+ }
587
+
588
+ /**
589
+ * Returns `true` if the given texture is unfilterable.
590
+ *
591
+ * @param {Texture} texture - The texture.
592
+ * @return {boolean} Whether the given texture is unfilterable or not.
593
+ */
594
+ isUnfilterable( texture ) {
595
+
596
+ return this.getComponentTypeFromTexture( texture ) !== 'float' ||
597
+ ( ! this.isAvailable( 'float32Filterable' ) && texture.isDataTexture === true && texture.type === FloatType ) ||
598
+ ( this.isSampleCompare( texture ) === false && texture.minFilter === NearestFilter && texture.magFilter === NearestFilter ) ||
599
+ this.renderer.backend.utils.getTextureSampleData( texture ).primarySamples > 1;
600
+
601
+ }
602
+
603
+ /**
604
+ * Generates the WGSL snippet for sampling/loading the given texture.
605
+ *
606
+ * @param {Texture} texture - The texture.
607
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
608
+ * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
609
+ * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
610
+ * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
611
+ * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
612
+ * @return {string} The WGSL snippet.
613
+ */
614
+ generateTexture( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {
615
+
616
+ let snippet = null;
617
+
618
+ if ( this.isUnfilterable( texture ) ) {
619
+
620
+ snippet = this.generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, '0', shaderStage );
621
+
622
+ } else {
623
+
624
+ snippet = this._generateTextureSample( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, shaderStage );
625
+
626
+ }
627
+
628
+ return snippet;
629
+
630
+ }
631
+
632
+ /**
633
+ * Generates the WGSL snippet for sampling/loading the given texture using explicit gradients.
634
+ *
635
+ * @param {Texture} texture - The texture.
636
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
637
+ * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
638
+ * @param {Array<string>} gradSnippet - An array holding both gradient WGSL snippets.
639
+ * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
640
+ * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
641
+ * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
642
+ * @return {string} The WGSL snippet.
643
+ */
644
+ generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {
645
+
646
+ if ( shaderStage === 'fragment' ) {
647
+
648
+ // TODO handle i32 or u32 --> uvSnippet, array_index: A, ddx, ddy
649
+ if ( offsetSnippet ) {
650
+
651
+ return `textureSampleGrad( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] }, ${ offsetSnippet } )`;
652
+
653
+ }
654
+
655
+ return `textureSampleGrad( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] } )`;
656
+
657
+ } else {
658
+
659
+ error( `WebGPURenderer: THREE.TextureNode.gradient() does not support ${ shaderStage } shader.` );
660
+
661
+ }
662
+
663
+ }
664
+
665
+ /**
666
+ * Generates the WGSL snippet for sampling a depth texture and comparing the sampled depth values
667
+ * against a reference value.
668
+ *
669
+ * @param {Texture} texture - The texture.
670
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
671
+ * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
672
+ * @param {string} compareSnippet - A WGSL snippet that represents the reference value.
673
+ * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
674
+ * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
675
+ * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
676
+ * @return {string} The WGSL snippet.
677
+ */
678
+ generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {
679
+
680
+ if ( shaderStage === 'fragment' ) {
681
+
682
+ if ( texture.isDepthTexture === true && texture.isArrayTexture === true ) {
683
+
684
+ if ( offsetSnippet ) {
685
+
686
+ return `textureSampleCompare( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ compareSnippet }, ${ offsetSnippet } )`;
687
+
688
+ }
689
+
690
+ return `textureSampleCompare( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ compareSnippet } )`;
691
+
692
+ }
693
+
694
+ if ( offsetSnippet ) {
695
+
696
+ return `textureSampleCompare( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ compareSnippet }, ${ offsetSnippet } )`;
697
+
698
+ }
699
+
700
+ return `textureSampleCompare( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ compareSnippet } )`;
701
+
702
+ } else {
703
+
704
+ error( `WebGPURenderer: THREE.DepthTexture.compareFunction() does not support ${ shaderStage } shader.` );
705
+
706
+ }
707
+
708
+ }
709
+
710
+ /**
711
+ * Generates the WGSL snippet when sampling textures with explicit mip level.
712
+ *
713
+ * @param {Texture} texture - The texture.
714
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
715
+ * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
716
+ * @param {string} levelSnippet - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
717
+ * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
718
+ * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
719
+ * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
720
+ * @return {string} The WGSL snippet.
721
+ */
722
+ generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet ) {
723
+
724
+ if ( this.isUnfilterable( texture ) === false ) {
725
+
726
+ if ( offsetSnippet ) {
727
+
728
+ return `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet }, ${ offsetSnippet } )`;
729
+
730
+ }
731
+
732
+ return `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet } )`;
733
+
734
+ } else if ( this.isFilteredTexture( texture ) ) {
735
+
736
+ return this.generateFilteredTexture( texture, textureProperty, uvSnippet, offsetSnippet, levelSnippet );
737
+
738
+ } else {
739
+
740
+ return this.generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, levelSnippet );
741
+
742
+ }
743
+
744
+ }
745
+
746
+ /**
747
+ * Generates the WGSL snippet when sampling textures with a bias to the mip level.
748
+ *
749
+ * @param {Texture} texture - The texture.
750
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
751
+ * @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
752
+ * @param {string} biasSnippet - A WGSL snippet that represents the bias to apply to the mip level before sampling.
753
+ * @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
754
+ * @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
755
+ * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
756
+ * @return {string} The WGSL snippet.
757
+ */
758
+ generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {
759
+
760
+ if ( shaderStage === 'fragment' ) {
761
+
762
+ if ( offsetSnippet ) {
763
+
764
+ return `textureSampleBias( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ biasSnippet }, ${ offsetSnippet } )`;
765
+
766
+ }
767
+
768
+ return `textureSampleBias( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ biasSnippet } )`;
769
+
770
+ } else {
771
+
772
+ error( `WebGPURenderer: THREE.TextureNode.biasNode does not support ${ shaderStage } shader.` );
773
+
774
+ }
775
+
776
+ }
777
+
778
+ /**
779
+ * Returns a WGSL snippet that represents the property name of the given node.
780
+ *
781
+ * @param {Node} node - The node.
782
+ * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
783
+ * @return {string} The property name.
784
+ */
785
+ getPropertyName( node, shaderStage = this.shaderStage ) {
786
+
787
+ if ( node.isNodeVarying === true && node.needsInterpolation === true ) {
788
+
789
+ if ( shaderStage === 'vertex' ) {
790
+
791
+ return `varyings.${ node.name }`;
792
+
793
+ }
794
+
795
+ } else if ( node.isNodeUniform === true ) {
796
+
797
+ const name = node.name;
798
+ const type = node.type;
799
+
800
+ if ( type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'texture3D' ) {
801
+
802
+ return name;
803
+
804
+ } else if ( type === 'buffer' || type === 'storageBuffer' || type === 'indirectStorageBuffer' ) {
805
+
806
+ if ( this.isCustomStruct( node ) ) {
807
+
808
+ return name;
809
+
810
+ }
811
+
812
+ return name + '.value';
813
+
814
+ } else {
815
+
816
+ return node.groupNode.name + '.' + name;
817
+
818
+ }
819
+
820
+ }
821
+
822
+ return super.getPropertyName( node );
823
+
824
+ }
825
+
826
+ /**
827
+ * Returns the output struct name.
828
+ *
829
+ * @return {string} The name of the output struct.
830
+ */
831
+ getOutputStructName() {
832
+
833
+ return 'output';
834
+
835
+ }
836
+
837
+ /**
838
+ * Returns the native shader operator name for a given generic name.
839
+ *
840
+ * @param {string} op - The operator name to resolve.
841
+ * @return {?string} The resolved operator name.
842
+ */
843
+ getFunctionOperator( op ) {
844
+
845
+ const fnOp = wgslFnOpLib[ op ];
846
+
847
+ if ( fnOp !== undefined ) {
848
+
849
+ this._include( fnOp );
850
+
851
+ return fnOp;
852
+
853
+ }
854
+
855
+ return null;
856
+
857
+ }
858
+
859
+ /**
860
+ * Returns the node access for the given node and shader stage.
861
+ *
862
+ * @param {StorageTextureNode|StorageBufferNode} node - The storage node.
863
+ * @param {string} shaderStage - The shader stage.
864
+ * @return {string} The node access.
865
+ */
866
+ getNodeAccess( node, shaderStage ) {
867
+
868
+ if ( shaderStage !== 'compute' ) {
869
+
870
+ if ( node.isAtomic === true ) {
871
+
872
+ warn( 'WebGPURenderer: Atomic operations are only supported in compute shaders.' );
873
+
874
+ return NodeAccess.READ_WRITE;
875
+
876
+ }
877
+
878
+ return NodeAccess.READ_ONLY;
879
+
880
+ }
881
+
882
+ return node.access;
883
+
884
+ }
885
+
886
+ /**
887
+ * Returns A WGSL snippet representing the storage access.
888
+ *
889
+ * @param {StorageTextureNode|StorageBufferNode} node - The storage node.
890
+ * @param {string} shaderStage - The shader stage.
891
+ * @return {string} The WGSL snippet representing the storage access.
892
+ */
893
+ getStorageAccess( node, shaderStage ) {
894
+
895
+ return accessNames[ this.getNodeAccess( node, shaderStage ) ];
896
+
897
+ }
898
+
899
+ /**
900
+ * This method is one of the more important ones since it's responsible
901
+ * for generating a matching binding instance for the given uniform node.
902
+ *
903
+ * These bindings are later used in the renderer to create bind groups
904
+ * and layouts.
905
+ *
906
+ * @param {UniformNode} node - The uniform node.
907
+ * @param {string} type - The node data type.
908
+ * @param {string} shaderStage - The shader stage.
909
+ * @param {?string} [name=null] - An optional uniform name.
910
+ * @return {NodeUniform} The node uniform object.
911
+ */
912
+ getUniformFromNode( node, type, shaderStage, name = null ) {
913
+
914
+ const uniformNode = super.getUniformFromNode( node, type, shaderStage, name );
915
+ const nodeData = this.getDataFromNode( node, shaderStage, this.globalCache );
916
+
917
+ if ( nodeData.uniformGPU === undefined ) {
918
+
919
+ let uniformGPU;
920
+
921
+ const group = node.groupNode;
922
+ const groupName = group.name;
923
+
924
+ const bindings = this.getBindGroupArray( groupName, shaderStage );
925
+
926
+ if ( type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'texture3D' ) {
927
+
928
+ let texture = null;
929
+
930
+ const access = this.getNodeAccess( node, shaderStage );
931
+
932
+ if ( type === 'texture' || type === 'storageTexture' ) {
933
+
934
+ if ( node.value.is3DTexture === true ) {
935
+
936
+ texture = new NodeSampledTexture3D( uniformNode.name, uniformNode.node, group, access );
937
+
938
+ } else {
939
+
940
+ texture = new NodeSampledTexture( uniformNode.name, uniformNode.node, group, access );
941
+
942
+ }
943
+
944
+ } else if ( type === 'cubeTexture' ) {
945
+
946
+ texture = new NodeSampledCubeTexture( uniformNode.name, uniformNode.node, group, access );
947
+
948
+ } else if ( type === 'texture3D' ) {
949
+
950
+ texture = new NodeSampledTexture3D( uniformNode.name, uniformNode.node, group, access );
951
+
952
+ }
953
+
954
+ texture.store = node.isStorageTextureNode === true;
955
+ texture.mipLevel = texture.store ? node.mipLevel : 0;
956
+ texture.setVisibility( gpuShaderStageLib[ shaderStage ] );
957
+
958
+ if ( this.isUnfilterable( node.value ) === false && texture.store === false ) {
959
+
960
+ const sampler = new NodeSampler( `${ uniformNode.name }_sampler`, uniformNode.node, group );
961
+ sampler.setVisibility( gpuShaderStageLib[ shaderStage ] );
962
+
963
+ bindings.push( sampler, texture );
964
+
965
+ uniformGPU = [ sampler, texture ];
966
+
967
+ } else {
968
+
969
+ bindings.push( texture );
970
+
971
+ uniformGPU = [ texture ];
972
+
973
+ }
974
+
975
+ } else if ( type === 'buffer' || type === 'storageBuffer' || type === 'indirectStorageBuffer' ) {
976
+
977
+ const bufferClass = type === 'buffer' ? NodeUniformBuffer : NodeStorageBuffer;
978
+
979
+ const buffer = new bufferClass( node, group );
980
+ buffer.setVisibility( gpuShaderStageLib[ shaderStage ] );
981
+
982
+ bindings.push( buffer );
983
+
984
+ uniformGPU = buffer;
985
+
986
+ uniformNode.name = name ? name : 'NodeBuffer_' + uniformNode.id;
987
+
988
+ } else {
989
+
990
+ const uniformsStage = this.uniformGroups[ shaderStage ] || ( this.uniformGroups[ shaderStage ] = {} );
991
+
992
+ let uniformsGroup = uniformsStage[ groupName ];
993
+
994
+ if ( uniformsGroup === undefined ) {
995
+
996
+ uniformsGroup = new NodeUniformsGroup( groupName, group );
997
+ uniformsGroup.setVisibility( gpuShaderStageLib[ shaderStage ] );
998
+
999
+ uniformsStage[ groupName ] = uniformsGroup;
1000
+
1001
+ bindings.push( uniformsGroup );
1002
+
1003
+ }
1004
+
1005
+ uniformGPU = this.getNodeUniform( uniformNode, type );
1006
+
1007
+ uniformsGroup.addUniform( uniformGPU );
1008
+
1009
+ }
1010
+
1011
+ nodeData.uniformGPU = uniformGPU;
1012
+
1013
+ }
1014
+
1015
+ return uniformNode;
1016
+
1017
+ }
1018
+
1019
+ /**
1020
+ * This method should be used whenever builtins are required in nodes.
1021
+ * The internal builtins data structure will make sure builtins are
1022
+ * defined in the WGSL source.
1023
+ *
1024
+ * @param {string} name - The builtin name.
1025
+ * @param {string} property - The property name.
1026
+ * @param {string} type - The node data type.
1027
+ * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
1028
+ * @return {string} The property name.
1029
+ */
1030
+ getBuiltin( name, property, type, shaderStage = this.shaderStage ) {
1031
+
1032
+ const map = this.builtins[ shaderStage ] || ( this.builtins[ shaderStage ] = new Map() );
1033
+
1034
+ if ( map.has( name ) === false ) {
1035
+
1036
+ map.set( name, {
1037
+ name,
1038
+ property,
1039
+ type
1040
+ } );
1041
+
1042
+ }
1043
+
1044
+ return property;
1045
+
1046
+ }
1047
+
1048
+ /**
1049
+ * Returns `true` if the given builtin is defined in the given shader stage.
1050
+ *
1051
+ * @param {string} name - The builtin name.
1052
+ * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
1053
+ * @return {boolean} Whether the given builtin is defined in the given shader stage or not.
1054
+ */
1055
+ hasBuiltin( name, shaderStage = this.shaderStage ) {
1056
+
1057
+ return ( this.builtins[ shaderStage ] !== undefined && this.builtins[ shaderStage ].has( name ) );
1058
+
1059
+ }
1060
+
1061
+ /**
1062
+ * Returns the vertex index builtin.
1063
+ *
1064
+ * @return {string} The vertex index.
1065
+ */
1066
+ getVertexIndex() {
1067
+
1068
+ if ( this.shaderStage === 'vertex' ) {
1069
+
1070
+ return this.getBuiltin( 'vertex_index', 'vertexIndex', 'u32', 'attribute' );
1071
+
1072
+ }
1073
+
1074
+ return 'vertexIndex';
1075
+
1076
+ }
1077
+
1078
+ /**
1079
+ * Builds the given shader node.
1080
+ *
1081
+ * @param {ShaderNodeInternal} shaderNode - The shader node.
1082
+ * @return {string} The WGSL function code.
1083
+ */
1084
+ buildFunctionCode( shaderNode ) {
1085
+
1086
+ const layout = shaderNode.layout;
1087
+ const flowData = this.flowShaderNode( shaderNode );
1088
+
1089
+ const parameters = [];
1090
+
1091
+ for ( const input of layout.inputs ) {
1092
+
1093
+ parameters.push( input.name + ' : ' + this.getType( input.type ) );
1094
+
1095
+ }
1096
+
1097
+ //
1098
+
1099
+ let code = `fn ${ layout.name }( ${ parameters.join( ', ' ) } ) -> ${ this.getType( layout.type ) } {
1100
+ ${ flowData.vars }
1101
+ ${ flowData.code }
1102
+ `;
1103
+
1104
+ if ( flowData.result ) {
1105
+
1106
+ code += `\treturn ${ flowData.result };\n`;
1107
+
1108
+ }
1109
+
1110
+ code += '\n}\n';
1111
+
1112
+ //
1113
+
1114
+ return code;
1115
+
1116
+ }
1117
+
1118
+ /**
1119
+ * Contextually returns either the vertex stage instance index builtin
1120
+ * or the linearized index of an compute invocation within a grid of workgroups.
1121
+ *
1122
+ * @return {string} The instance index.
1123
+ */
1124
+ getInstanceIndex() {
1125
+
1126
+ if ( this.shaderStage === 'vertex' ) {
1127
+
1128
+ return this.getBuiltin( 'instance_index', 'instanceIndex', 'u32', 'attribute' );
1129
+
1130
+ }
1131
+
1132
+ return 'instanceIndex';
1133
+
1134
+ }
1135
+
1136
+
1137
+ /**
1138
+ * Returns a builtin representing the index of a compute invocation within the scope of a workgroup load.
1139
+ *
1140
+ * @return {string} The invocation local index.
1141
+ */
1142
+ getInvocationLocalIndex() {
1143
+
1144
+ return this.getBuiltin( 'local_invocation_index', 'invocationLocalIndex', 'u32', 'attribute' );
1145
+
1146
+ }
1147
+
1148
+ /**
1149
+ * Returns a builtin representing the size of a subgroup within the current shader.
1150
+ *
1151
+ * @return {string} The subgroup size.
1152
+ */
1153
+ getSubgroupSize() {
1154
+
1155
+ this.enableSubGroups();
1156
+
1157
+ return this.getBuiltin( 'subgroup_size', 'subgroupSize', 'u32', 'attribute' );
1158
+
1159
+ }
1160
+
1161
+ /**
1162
+ * Returns a builtin representing the index of a compute invocation within the scope of a subgroup.
1163
+ *
1164
+ * @return {string} The invocation subgroup index.
1165
+ */
1166
+ getInvocationSubgroupIndex() {
1167
+
1168
+ this.enableSubGroups();
1169
+
1170
+ return this.getBuiltin( 'subgroup_invocation_id', 'invocationSubgroupIndex', 'u32', 'attribute' );
1171
+
1172
+ }
1173
+
1174
+ /**
1175
+ * Returns a builtin representing the index of a compute invocation's subgroup within its workgroup.
1176
+ *
1177
+ * @return {string} The subgroup index.
1178
+ */
1179
+ getSubgroupIndex() {
1180
+
1181
+ this.enableSubGroups();
1182
+
1183
+ return this.getBuiltin( 'subgroup_id', 'subgroupIndex', 'u32', 'attribute' );
1184
+
1185
+ }
1186
+
1187
+ /**
1188
+ * Overwritten as a NOP since this method is intended for the WebGL 2 backend.
1189
+ *
1190
+ * @return {null} Null.
1191
+ */
1192
+ getDrawIndex() {
1193
+
1194
+ return null;
1195
+
1196
+ }
1197
+
1198
+ /**
1199
+ * Returns the front facing builtin.
1200
+ *
1201
+ * @return {string} The front facing builtin.
1202
+ */
1203
+ getFrontFacing() {
1204
+
1205
+ return this.getBuiltin( 'front_facing', 'isFront', 'bool' );
1206
+
1207
+ }
1208
+
1209
+ /**
1210
+ * Returns the frag coord builtin.
1211
+ *
1212
+ * @return {string} The frag coord builtin.
1213
+ */
1214
+ getFragCoord() {
1215
+
1216
+ return this.getBuiltin( 'position', 'fragCoord', 'vec4<f32>' ) + '.xy';
1217
+
1218
+ }
1219
+
1220
+ /**
1221
+ * Returns the frag depth builtin.
1222
+ *
1223
+ * @return {string} The frag depth builtin.
1224
+ */
1225
+ getFragDepth() {
1226
+
1227
+ return 'output.' + this.getBuiltin( 'frag_depth', 'depth', 'f32', 'output' );
1228
+
1229
+ }
1230
+
1231
+ /**
1232
+ * Returns the clip distances builtin.
1233
+ *
1234
+ * @return {string} The clip distances builtin.
1235
+ */
1236
+ getClipDistance() {
1237
+
1238
+ return 'varyings.hw_clip_distances';
1239
+
1240
+ }
1241
+
1242
+ /**
1243
+ * Whether to flip texture data along its vertical axis or not.
1244
+ *
1245
+ * @return {boolean} Returns always `false` in context of WGSL.
1246
+ */
1247
+ isFlipY() {
1248
+
1249
+ return false;
1250
+
1251
+ }
1252
+
1253
+ /**
1254
+ * Enables the given directive for the given shader stage.
1255
+ *
1256
+ * @param {string} name - The directive name.
1257
+ * @param {string} [shaderStage=this.shaderStage] - The shader stage to enable the directive for.
1258
+ */
1259
+ enableDirective( name, shaderStage = this.shaderStage ) {
1260
+
1261
+ const stage = this.directives[ shaderStage ] || ( this.directives[ shaderStage ] = new Set() );
1262
+ stage.add( name );
1263
+
1264
+ }
1265
+
1266
+ /**
1267
+ * Returns the directives of the given shader stage as a WGSL string.
1268
+ *
1269
+ * @param {string} shaderStage - The shader stage.
1270
+ * @return {string} A WGSL snippet that enables the directives of the given stage.
1271
+ */
1272
+ getDirectives( shaderStage ) {
1273
+
1274
+ const snippets = [];
1275
+ const directives = this.directives[ shaderStage ];
1276
+
1277
+ if ( directives !== undefined ) {
1278
+
1279
+ for ( const directive of directives ) {
1280
+
1281
+ snippets.push( `enable ${directive};` );
1282
+
1283
+ }
1284
+
1285
+ }
1286
+
1287
+ return snippets.join( '\n' );
1288
+
1289
+ }
1290
+
1291
+ /**
1292
+ * Enables the 'subgroups' directive.
1293
+ */
1294
+ enableSubGroups() {
1295
+
1296
+ this.enableDirective( 'subgroups' );
1297
+
1298
+ }
1299
+
1300
+ /**
1301
+ * Enables the 'subgroups-f16' directive.
1302
+ */
1303
+ enableSubgroupsF16() {
1304
+
1305
+ this.enableDirective( 'subgroups-f16' );
1306
+
1307
+ }
1308
+
1309
+ /**
1310
+ * Enables the 'clip_distances' directive.
1311
+ */
1312
+ enableClipDistances() {
1313
+
1314
+ this.enableDirective( 'clip_distances' );
1315
+
1316
+ }
1317
+
1318
+ /**
1319
+ * Enables the 'f16' directive.
1320
+ */
1321
+ enableShaderF16() {
1322
+
1323
+ this.enableDirective( 'f16' );
1324
+
1325
+ }
1326
+
1327
+ /**
1328
+ * Enables the 'dual_source_blending' directive.
1329
+ */
1330
+ enableDualSourceBlending() {
1331
+
1332
+ this.enableDirective( 'dual_source_blending' );
1333
+
1334
+ }
1335
+
1336
+ /**
1337
+ * Enables hardware clipping.
1338
+ *
1339
+ * @param {string} planeCount - The clipping plane count.
1340
+ */
1341
+ enableHardwareClipping( planeCount ) {
1342
+
1343
+ this.enableClipDistances();
1344
+ this.getBuiltin( 'clip_distances', 'hw_clip_distances', `array<f32, ${ planeCount } >`, 'vertex' );
1345
+
1346
+ }
1347
+
1348
+ /**
1349
+ * Returns the builtins of the given shader stage as a WGSL string.
1350
+ *
1351
+ * @param {string} shaderStage - The shader stage.
1352
+ * @return {string} A WGSL snippet that represents the builtins of the given stage.
1353
+ */
1354
+ getBuiltins( shaderStage ) {
1355
+
1356
+ const snippets = [];
1357
+ const builtins = this.builtins[ shaderStage ];
1358
+
1359
+ if ( builtins !== undefined ) {
1360
+
1361
+ for ( const { name, property, type } of builtins.values() ) {
1362
+
1363
+ snippets.push( `@builtin( ${name} ) ${property} : ${type}` );
1364
+
1365
+ }
1366
+
1367
+ }
1368
+
1369
+ return snippets.join( ',\n\t' );
1370
+
1371
+ }
1372
+
1373
+ /**
1374
+ * This method should be used when a new scoped buffer is used in context of
1375
+ * compute shaders. It adds the array to the internal data structure which is
1376
+ * later used to generate the respective WGSL.
1377
+ *
1378
+ * @param {string} name - The array name.
1379
+ * @param {string} scope - The scope.
1380
+ * @param {string} bufferType - The buffer type.
1381
+ * @param {string} bufferCount - The buffer count.
1382
+ * @return {string} The array name.
1383
+ */
1384
+ getScopedArray( name, scope, bufferType, bufferCount ) {
1385
+
1386
+ if ( this.scopedArrays.has( name ) === false ) {
1387
+
1388
+ this.scopedArrays.set( name, {
1389
+ name,
1390
+ scope,
1391
+ bufferType,
1392
+ bufferCount
1393
+ } );
1394
+
1395
+ }
1396
+
1397
+ return name;
1398
+
1399
+ }
1400
+
1401
+ /**
1402
+ * Returns the scoped arrays of the given shader stage as a WGSL string.
1403
+ *
1404
+ * @param {string} shaderStage - The shader stage.
1405
+ * @return {string|undefined} The WGSL snippet that defines the scoped arrays.
1406
+ * Returns `undefined` when used in the vertex or fragment stage.
1407
+ */
1408
+ getScopedArrays( shaderStage ) {
1409
+
1410
+ if ( shaderStage !== 'compute' ) {
1411
+
1412
+ return;
1413
+
1414
+ }
1415
+
1416
+ const snippets = [];
1417
+
1418
+ for ( const { name, scope, bufferType, bufferCount } of this.scopedArrays.values() ) {
1419
+
1420
+ const type = this.getType( bufferType );
1421
+
1422
+ snippets.push( `var<${scope}> ${name}: array< ${type}, ${bufferCount} >;` );
1423
+
1424
+ }
1425
+
1426
+ return snippets.join( '\n' );
1427
+
1428
+ }
1429
+
1430
+ /**
1431
+ * Returns the shader attributes of the given shader stage as a WGSL string.
1432
+ *
1433
+ * @param {string} shaderStage - The shader stage.
1434
+ * @return {string} The WGSL snippet that defines the shader attributes.
1435
+ */
1436
+ getAttributes( shaderStage ) {
1437
+
1438
+ const snippets = [];
1439
+
1440
+ if ( shaderStage === 'compute' ) {
1441
+
1442
+ this.getBuiltin( 'global_invocation_id', 'globalId', 'vec3<u32>', 'attribute' );
1443
+ this.getBuiltin( 'workgroup_id', 'workgroupId', 'vec3<u32>', 'attribute' );
1444
+ this.getBuiltin( 'local_invocation_id', 'localId', 'vec3<u32>', 'attribute' );
1445
+ this.getBuiltin( 'num_workgroups', 'numWorkgroups', 'vec3<u32>', 'attribute' );
1446
+
1447
+ if ( this.renderer.hasFeature( 'subgroups' ) ) {
1448
+
1449
+ this.enableDirective( 'subgroups', shaderStage );
1450
+ this.getBuiltin( 'subgroup_size', 'subgroupSize', 'u32', 'attribute' );
1451
+
1452
+ }
1453
+
1454
+ }
1455
+
1456
+ if ( shaderStage === 'vertex' || shaderStage === 'compute' ) {
1457
+
1458
+ const builtins = this.getBuiltins( 'attribute' );
1459
+
1460
+ if ( builtins ) snippets.push( builtins );
1461
+
1462
+ const attributes = this.getAttributesArray();
1463
+
1464
+ for ( let index = 0, length = attributes.length; index < length; index ++ ) {
1465
+
1466
+ const attribute = attributes[ index ];
1467
+ const name = attribute.name;
1468
+ const type = this.getType( attribute.type );
1469
+
1470
+ snippets.push( `@location( ${index} ) ${ name } : ${ type }` );
1471
+
1472
+ }
1473
+
1474
+ }
1475
+
1476
+ return snippets.join( ',\n\t' );
1477
+
1478
+ }
1479
+
1480
+ /**
1481
+ * Returns the members of the given struct type node as a WGSL string.
1482
+ *
1483
+ * @param {StructTypeNode} struct - The struct type node.
1484
+ * @return {string} The WGSL snippet that defines the struct members.
1485
+ */
1486
+ getStructMembers( struct ) {
1487
+
1488
+ const snippets = [];
1489
+
1490
+ for ( const member of struct.members ) {
1491
+
1492
+ const prefix = struct.output ? '@location( ' + member.index + ' ) ' : '';
1493
+
1494
+ let type = this.getType( member.type );
1495
+
1496
+ if ( member.atomic ) {
1497
+
1498
+ type = 'atomic< ' + type + ' >';
1499
+
1500
+ }
1501
+
1502
+ snippets.push( `\t${ prefix + member.name } : ${ type }` );
1503
+
1504
+ }
1505
+
1506
+ if ( struct.output ) {
1507
+
1508
+ snippets.push( `\t${ this.getBuiltins( 'output' ) }` );
1509
+
1510
+ }
1511
+
1512
+ return snippets.join( ',\n' );
1513
+
1514
+ }
1515
+
1516
+ /**
1517
+ * Returns the structs of the given shader stage as a WGSL string.
1518
+ *
1519
+ * @param {string} shaderStage - The shader stage.
1520
+ * @return {string} The WGSL snippet that defines the structs.
1521
+ */
1522
+ getStructs( shaderStage ) {
1523
+
1524
+ let result = '';
1525
+
1526
+ const structs = this.structs[ shaderStage ];
1527
+
1528
+ if ( structs.length > 0 ) {
1529
+
1530
+ const snippets = [];
1531
+
1532
+ for ( const struct of structs ) {
1533
+
1534
+ let snippet = `struct ${ struct.name } {\n`;
1535
+ snippet += this.getStructMembers( struct );
1536
+ snippet += '\n};';
1537
+
1538
+ snippets.push( snippet );
1539
+
1540
+ }
1541
+
1542
+ result = '\n' + snippets.join( '\n\n' ) + '\n';
1543
+
1544
+ }
1545
+
1546
+ return result;
1547
+
1548
+ }
1549
+
1550
+ /**
1551
+ * Returns a WGSL string representing a variable.
1552
+ *
1553
+ * @param {string} type - The variable's type.
1554
+ * @param {string} name - The variable's name.
1555
+ * @param {?number} [count=null] - The array length.
1556
+ * @return {string} The WGSL snippet that defines a variable.
1557
+ */
1558
+ getVar( type, name, count = null ) {
1559
+
1560
+ let snippet = `var ${ name } : `;
1561
+
1562
+ if ( count !== null ) {
1563
+
1564
+ snippet += this.generateArrayDeclaration( type, count );
1565
+
1566
+ } else {
1567
+
1568
+ snippet += this.getType( type );
1569
+
1570
+ }
1571
+
1572
+ return snippet;
1573
+
1574
+ }
1575
+
1576
+ /**
1577
+ * Returns the variables of the given shader stage as a WGSL string.
1578
+ *
1579
+ * @param {string} shaderStage - The shader stage.
1580
+ * @return {string} The WGSL snippet that defines the variables.
1581
+ */
1582
+ getVars( shaderStage ) {
1583
+
1584
+ const snippets = [];
1585
+ const vars = this.vars[ shaderStage ];
1586
+
1587
+ if ( vars !== undefined ) {
1588
+
1589
+ for ( const variable of vars ) {
1590
+
1591
+ snippets.push( `\t${ this.getVar( variable.type, variable.name, variable.count ) };` );
1592
+
1593
+ }
1594
+
1595
+ }
1596
+
1597
+ return `\n${ snippets.join( '\n' ) }\n`;
1598
+
1599
+ }
1600
+
1601
+ /**
1602
+ * Returns the varyings of the given shader stage as a WGSL string.
1603
+ *
1604
+ * @param {string} shaderStage - The shader stage.
1605
+ * @return {string} The WGSL snippet that defines the varyings.
1606
+ */
1607
+ getVaryings( shaderStage ) {
1608
+
1609
+ const snippets = [];
1610
+
1611
+ if ( shaderStage === 'vertex' ) {
1612
+
1613
+ this.getBuiltin( 'position', 'Vertex', 'vec4<f32>', 'vertex' );
1614
+
1615
+ }
1616
+
1617
+ if ( shaderStage === 'vertex' || shaderStage === 'fragment' ) {
1618
+
1619
+ const varyings = this.varyings;
1620
+ const vars = this.vars[ shaderStage ];
1621
+
1622
+ for ( let index = 0; index < varyings.length; index ++ ) {
1623
+
1624
+ const varying = varyings[ index ];
1625
+
1626
+ if ( varying.needsInterpolation ) {
1627
+
1628
+ let attributesSnippet = `@location( ${index} )`;
1629
+
1630
+ if ( varying.interpolationType ) {
1631
+
1632
+ const samplingSnippet = varying.interpolationSampling !== null ? `, ${ varying.interpolationSampling } )` : ' )';
1633
+
1634
+ attributesSnippet += ` @interpolate( ${ varying.interpolationType }${ samplingSnippet }`;
1635
+
1636
+ // Otherwise, optimize interpolation when sensible
1637
+
1638
+ } else if ( /^(int|uint|ivec|uvec)/.test( varying.type ) ) {
1639
+
1640
+ attributesSnippet += ` @interpolate( ${ this.renderer.backend.compatibilityMode ? 'flat, either' : 'flat' } )`;
1641
+
1642
+ }
1643
+
1644
+ snippets.push( `${ attributesSnippet } ${ varying.name } : ${ this.getType( varying.type ) }` );
1645
+
1646
+ } else if ( shaderStage === 'vertex' && vars.includes( varying ) === false ) {
1647
+
1648
+ vars.push( varying );
1649
+
1650
+ }
1651
+
1652
+ }
1653
+
1654
+ }
1655
+
1656
+ const builtins = this.getBuiltins( shaderStage );
1657
+
1658
+ if ( builtins ) snippets.push( builtins );
1659
+
1660
+ const code = snippets.join( ',\n\t' );
1661
+
1662
+ return shaderStage === 'vertex' ? this._getWGSLStruct( 'VaryingsStruct', '\t' + code ) : code;
1663
+
1664
+ }
1665
+
1666
+ isCustomStruct( nodeUniform ) {
1667
+
1668
+ const attribute = nodeUniform.value;
1669
+ const bufferNode = nodeUniform.node;
1670
+
1671
+ const isAttributeStructType = ( attribute.isBufferAttribute || attribute.isInstancedBufferAttribute ) && bufferNode.structTypeNode !== null;
1672
+
1673
+ const isStructArray =
1674
+ ( bufferNode.value && bufferNode.value.array ) &&
1675
+ ( typeof bufferNode.value.itemSize === 'number' && bufferNode.value.array.length > bufferNode.value.itemSize );
1676
+
1677
+ return isAttributeStructType && ! isStructArray;
1678
+
1679
+ }
1680
+
1681
+ /**
1682
+ * Returns the uniforms of the given shader stage as a WGSL string.
1683
+ *
1684
+ * @param {string} shaderStage - The shader stage.
1685
+ * @return {string} The WGSL snippet that defines the uniforms.
1686
+ */
1687
+ getUniforms( shaderStage ) {
1688
+
1689
+ const uniforms = this.uniforms[ shaderStage ];
1690
+
1691
+ const bindingSnippets = [];
1692
+ const bufferSnippets = [];
1693
+ const structSnippets = [];
1694
+ const uniformGroups = {};
1695
+
1696
+ for ( const uniform of uniforms ) {
1697
+
1698
+ const groupName = uniform.groupNode.name;
1699
+ const uniformIndexes = this.bindingsIndexes[ groupName ];
1700
+
1701
+ if ( uniform.type === 'texture' || uniform.type === 'cubeTexture' || uniform.type === 'storageTexture' || uniform.type === 'texture3D' ) {
1702
+
1703
+ const texture = uniform.node.value;
1704
+
1705
+ if ( this.isUnfilterable( texture ) === false && uniform.node.isStorageTextureNode !== true ) {
1706
+
1707
+ if ( this.isSampleCompare( texture ) ) {
1708
+
1709
+ bindingSnippets.push( `@binding( ${ uniformIndexes.binding ++ } ) @group( ${ uniformIndexes.group } ) var ${ uniform.name }_sampler : sampler_comparison;` );
1710
+
1711
+ } else {
1712
+
1713
+ bindingSnippets.push( `@binding( ${ uniformIndexes.binding ++ } ) @group( ${ uniformIndexes.group } ) var ${ uniform.name }_sampler : sampler;` );
1714
+
1715
+ }
1716
+
1717
+ }
1718
+
1719
+ let textureType;
1720
+
1721
+ let multisampled = '';
1722
+
1723
+ const { primarySamples } = this.renderer.backend.utils.getTextureSampleData( texture );
1724
+
1725
+ if ( primarySamples > 1 ) {
1726
+
1727
+ multisampled = '_multisampled';
1728
+
1729
+ }
1730
+
1731
+ if ( texture.isCubeTexture === true ) {
1732
+
1733
+ textureType = 'texture_cube<f32>';
1734
+
1735
+ } else if ( texture.isDepthTexture === true ) {
1736
+
1737
+ if ( this.renderer.backend.compatibilityMode && texture.compareFunction === null ) {
1738
+
1739
+ textureType = `texture${ multisampled }_2d<f32>`;
1740
+
1741
+ } else {
1742
+
1743
+ textureType = `texture_depth${ multisampled }_2d${ texture.isArrayTexture === true ? '_array' : '' }`;
1744
+
1745
+ }
1746
+
1747
+ } else if ( uniform.node.isStorageTextureNode === true ) {
1748
+
1749
+ const format = getFormat( texture );
1750
+ const access = this.getStorageAccess( uniform.node, shaderStage );
1751
+
1752
+ const is3D = uniform.node.value.is3DTexture;
1753
+ const isArrayTexture = uniform.node.value.isArrayTexture;
1754
+
1755
+ const dimension = is3D ? '3d' : `2d${ isArrayTexture ? '_array' : '' }`;
1756
+
1757
+ textureType = `texture_storage_${ dimension }<${ format }, ${ access }>`;
1758
+
1759
+ } else if ( texture.isArrayTexture === true || texture.isDataArrayTexture === true || texture.isCompressedArrayTexture === true ) {
1760
+
1761
+ textureType = 'texture_2d_array<f32>';
1762
+
1763
+ } else if ( texture.is3DTexture === true || texture.isData3DTexture === true ) {
1764
+
1765
+ textureType = 'texture_3d<f32>';
1766
+
1767
+ } else {
1768
+
1769
+ const componentPrefix = this.getComponentTypeFromTexture( texture ).charAt( 0 );
1770
+
1771
+ textureType = `texture${ multisampled }_2d<${ componentPrefix }32>`;
1772
+
1773
+ }
1774
+
1775
+ bindingSnippets.push( `@binding( ${ uniformIndexes.binding ++ } ) @group( ${ uniformIndexes.group } ) var ${ uniform.name } : ${ textureType };` );
1776
+
1777
+ } else if ( uniform.type === 'buffer' || uniform.type === 'storageBuffer' || uniform.type === 'indirectStorageBuffer' ) {
1778
+
1779
+ const bufferNode = uniform.node;
1780
+ const bufferType = this.getType( bufferNode.getNodeType( this ) );
1781
+ const bufferCount = bufferNode.bufferCount;
1782
+ const bufferCountSnippet = bufferCount > 0 && uniform.type === 'buffer' ? ', ' + bufferCount : '';
1783
+ const bufferAccessMode = bufferNode.isStorageBufferNode ? `storage, ${ this.getStorageAccess( bufferNode, shaderStage ) }` : 'uniform';
1784
+
1785
+ if ( this.isCustomStruct( uniform ) ) {
1786
+
1787
+ bufferSnippets.push( `@binding( ${ uniformIndexes.binding ++ } ) @group( ${ uniformIndexes.group } ) var<${ bufferAccessMode }> ${ uniform.name } : ${ bufferType };` );
1788
+
1789
+ } else {
1790
+
1791
+ const bufferTypeSnippet = bufferNode.isAtomic ? `atomic<${ bufferType }>` : `${ bufferType }`;
1792
+ const bufferSnippet = `\tvalue : array< ${ bufferTypeSnippet }${ bufferCountSnippet } >`;
1793
+
1794
+ bufferSnippets.push( this._getWGSLStructBinding( uniform.name, bufferSnippet, bufferAccessMode, uniformIndexes.binding ++, uniformIndexes.group ) );
1795
+
1796
+ }
1797
+
1798
+ } else {
1799
+
1800
+ const vectorType = this.getType( this.getVectorType( uniform.type ) );
1801
+ const groupName = uniform.groupNode.name;
1802
+
1803
+ const group = uniformGroups[ groupName ] || ( uniformGroups[ groupName ] = {
1804
+ index: uniformIndexes.binding ++,
1805
+ id: uniformIndexes.group,
1806
+ snippets: []
1807
+ } );
1808
+
1809
+ group.snippets.push( `\t${ uniform.name } : ${ vectorType }` );
1810
+
1811
+ }
1812
+
1813
+ }
1814
+
1815
+ for ( const name in uniformGroups ) {
1816
+
1817
+ const group = uniformGroups[ name ];
1818
+
1819
+ structSnippets.push( this._getWGSLStructBinding( name, group.snippets.join( ',\n' ), 'uniform', group.index, group.id ) );
1820
+
1821
+ }
1822
+
1823
+ let code = bindingSnippets.join( '\n' );
1824
+ code += bufferSnippets.join( '\n' );
1825
+ code += structSnippets.join( '\n' );
1826
+
1827
+ return code;
1828
+
1829
+ }
1830
+
1831
+ /**
1832
+ * Controls the code build of the shader stages.
1833
+ */
1834
+ buildCode() {
1835
+
1836
+ const shadersData = this.material !== null ? { fragment: {}, vertex: {} } : { compute: {} };
1837
+
1838
+ this.sortBindingGroups();
1839
+
1840
+ for ( const shaderStage in shadersData ) {
1841
+
1842
+ this.shaderStage = shaderStage;
1843
+
1844
+ const stageData = shadersData[ shaderStage ];
1845
+ stageData.uniforms = this.getUniforms( shaderStage );
1846
+ stageData.attributes = this.getAttributes( shaderStage );
1847
+ stageData.varyings = this.getVaryings( shaderStage );
1848
+ stageData.structs = this.getStructs( shaderStage );
1849
+ stageData.vars = this.getVars( shaderStage );
1850
+ stageData.codes = this.getCodes( shaderStage );
1851
+ stageData.directives = this.getDirectives( shaderStage );
1852
+ stageData.scopedArrays = this.getScopedArrays( shaderStage );
1853
+
1854
+ //
1855
+
1856
+ let flow = '// code\n\n';
1857
+ flow += this.flowCode[ shaderStage ];
1858
+
1859
+ const flowNodes = this.flowNodes[ shaderStage ];
1860
+ const mainNode = flowNodes[ flowNodes.length - 1 ];
1861
+
1862
+ const outputNode = mainNode.outputNode;
1863
+ const isOutputStruct = ( outputNode !== undefined && outputNode.isOutputStructNode === true );
1864
+
1865
+ for ( const node of flowNodes ) {
1866
+
1867
+ const flowSlotData = this.getFlowData( node/*, shaderStage*/ );
1868
+ const slotName = node.name;
1869
+
1870
+ if ( slotName ) {
1871
+
1872
+ if ( flow.length > 0 ) flow += '\n';
1873
+
1874
+ flow += `\t// flow -> ${ slotName }\n`;
1875
+
1876
+ }
1877
+
1878
+ flow += `${ flowSlotData.code }\n\t`;
1879
+
1880
+ if ( node === mainNode && shaderStage !== 'compute' ) {
1881
+
1882
+ flow += '// result\n\n\t';
1883
+
1884
+ if ( shaderStage === 'vertex' ) {
1885
+
1886
+ flow += `varyings.Vertex = ${ flowSlotData.result };`;
1887
+
1888
+ } else if ( shaderStage === 'fragment' ) {
1889
+
1890
+ if ( isOutputStruct ) {
1891
+
1892
+ stageData.returnType = outputNode.getNodeType( this );
1893
+ stageData.structs += 'var<private> output : ' + stageData.returnType + ';';
1894
+
1895
+ flow += `return ${ flowSlotData.result };`;
1896
+
1897
+ } else {
1898
+
1899
+ let structSnippet = '\t@location(0) color: vec4<f32>';
1900
+
1901
+ const builtins = this.getBuiltins( 'output' );
1902
+
1903
+ if ( builtins ) structSnippet += ',\n\t' + builtins;
1904
+
1905
+ stageData.returnType = 'OutputStruct';
1906
+ stageData.structs += this._getWGSLStruct( 'OutputStruct', structSnippet );
1907
+ stageData.structs += '\nvar<private> output : OutputStruct;';
1908
+
1909
+ flow += `output.color = ${ flowSlotData.result };\n\n\treturn output;`;
1910
+
1911
+ }
1912
+
1913
+ }
1914
+
1915
+ }
1916
+
1917
+ }
1918
+
1919
+ stageData.flow = flow;
1920
+
1921
+ }
1922
+
1923
+ this.shaderStage = null;
1924
+
1925
+ if ( this.material !== null ) {
1926
+
1927
+ this.vertexShader = this._getWGSLVertexCode( shadersData.vertex );
1928
+ this.fragmentShader = this._getWGSLFragmentCode( shadersData.fragment );
1929
+
1930
+ } else {
1931
+
1932
+ // Early strictly validated in computeNode
1933
+
1934
+ const workgroupSize = this.object.workgroupSize;
1935
+
1936
+ this.computeShader = this._getWGSLComputeCode( shadersData.compute, workgroupSize );
1937
+
1938
+ }
1939
+
1940
+ }
1941
+
1942
+ /**
1943
+ * Returns the native shader method name for a given generic name.
1944
+ *
1945
+ * @param {string} method - The method name to resolve.
1946
+ * @param {?string} [output=null] - An optional output.
1947
+ * @return {string} The resolved WGSL method name.
1948
+ */
1949
+ getMethod( method, output = null ) {
1950
+
1951
+ let wgslMethod;
1952
+
1953
+ if ( output !== null ) {
1954
+
1955
+ wgslMethod = this._getWGSLMethod( method + '_' + output );
1956
+
1957
+ }
1958
+
1959
+ if ( wgslMethod === undefined ) {
1960
+
1961
+ wgslMethod = this._getWGSLMethod( method );
1962
+
1963
+ }
1964
+
1965
+ return wgslMethod || method;
1966
+
1967
+ }
1968
+
1969
+ /**
1970
+ * Returns the bitcast method name for a given input and outputType.
1971
+ *
1972
+ * @param {string} type - The output type to bitcast to.
1973
+ * @return {string} The resolved WGSL bitcast invocation.
1974
+ */
1975
+ getBitcastMethod( type ) {
1976
+
1977
+ const dataType = this.getType( type );
1978
+
1979
+ return `bitcast<${ dataType }>`;
1980
+
1981
+ }
1982
+
1983
+ /**
1984
+ * Returns the native snippet for a ternary operation.
1985
+ *
1986
+ * @param {string} condSnippet - The condition determining which expression gets resolved.
1987
+ * @param {string} ifSnippet - The expression to resolve to if the condition is true.
1988
+ * @param {string} elseSnippet - The expression to resolve to if the condition is false.
1989
+ * @return {string} The resolved method name.
1990
+ */
1991
+ getTernary( condSnippet, ifSnippet, elseSnippet ) {
1992
+
1993
+ return `select( ${elseSnippet}, ${ifSnippet}, ${condSnippet} )`;
1994
+
1995
+ }
1996
+
1997
+
1998
+ /**
1999
+ * Returns the WGSL type of the given node data type.
2000
+ *
2001
+ * @param {string} type - The node data type.
2002
+ * @return {string} The WGSL type.
2003
+ */
2004
+ getType( type ) {
2005
+
2006
+ return wgslTypeLib[ type ] || type;
2007
+
2008
+ }
2009
+
2010
+ /**
2011
+ * Whether the requested feature is available or not.
2012
+ *
2013
+ * @param {string} name - The requested feature.
2014
+ * @return {boolean} Whether the requested feature is supported or not.
2015
+ */
2016
+ isAvailable( name ) {
2017
+
2018
+ let result = supports[ name ];
2019
+
2020
+ if ( result === undefined ) {
2021
+
2022
+ if ( name === 'float32Filterable' ) {
2023
+
2024
+ result = this.renderer.hasFeature( 'float32-filterable' );
2025
+
2026
+ } else if ( name === 'clipDistance' ) {
2027
+
2028
+ result = this.renderer.hasFeature( 'clip-distances' );
2029
+
2030
+ }
2031
+
2032
+ supports[ name ] = result;
2033
+
2034
+ }
2035
+
2036
+ return result;
2037
+
2038
+ }
2039
+
2040
+ /**
2041
+ * Returns the native shader method name for a given generic name.
2042
+ *
2043
+ * @private
2044
+ * @param {string} method - The method name to resolve.
2045
+ * @return {string} The resolved WGSL method name.
2046
+ */
2047
+ _getWGSLMethod( method ) {
2048
+
2049
+ if ( wgslPolyfill[ method ] !== undefined ) {
2050
+
2051
+ this._include( method );
2052
+
2053
+ }
2054
+
2055
+ return wgslMethods[ method ];
2056
+
2057
+ }
2058
+
2059
+ /**
2060
+ * Includes the given method name into the current
2061
+ * function node.
2062
+ *
2063
+ * @private
2064
+ * @param {string} name - The method name to include.
2065
+ * @return {CodeNode} The respective code node.
2066
+ */
2067
+ _include( name ) {
2068
+
2069
+ const codeNode = wgslPolyfill[ name ];
2070
+ codeNode.build( this );
2071
+
2072
+ this.addInclude( codeNode );
2073
+
2074
+ return codeNode;
2075
+
2076
+ }
2077
+
2078
+ /**
2079
+ * Returns a WGSL vertex shader based on the given shader data.
2080
+ *
2081
+ * @private
2082
+ * @param {Object} shaderData - The shader data.
2083
+ * @return {string} The vertex shader.
2084
+ */
2085
+ _getWGSLVertexCode( shaderData ) {
2086
+
2087
+ return `${ this.getSignature() }
2088
+ // directives
2089
+ ${shaderData.directives}
2090
+
2091
+ // structs
2092
+ ${shaderData.structs}
2093
+
2094
+ // uniforms
2095
+ ${shaderData.uniforms}
2096
+
2097
+ // varyings
2098
+ ${shaderData.varyings}
2099
+ var<private> varyings : VaryingsStruct;
2100
+
2101
+ // codes
2102
+ ${shaderData.codes}
2103
+
2104
+ @vertex
2105
+ fn main( ${shaderData.attributes} ) -> VaryingsStruct {
2106
+
2107
+ // vars
2108
+ ${shaderData.vars}
2109
+
2110
+ // flow
2111
+ ${shaderData.flow}
2112
+
2113
+ return varyings;
2114
+
2115
+ }
2116
+ `;
2117
+
2118
+ }
2119
+
2120
+ /**
2121
+ * Returns a WGSL fragment shader based on the given shader data.
2122
+ *
2123
+ * @private
2124
+ * @param {Object} shaderData - The shader data.
2125
+ * @return {string} The vertex shader.
2126
+ */
2127
+ _getWGSLFragmentCode( shaderData ) {
2128
+
2129
+ return `${ this.getSignature() }
2130
+ // global
2131
+ ${ diagnostics }
2132
+
2133
+ // structs
2134
+ ${shaderData.structs}
2135
+
2136
+ // uniforms
2137
+ ${shaderData.uniforms}
2138
+
2139
+ // codes
2140
+ ${shaderData.codes}
2141
+
2142
+ @fragment
2143
+ fn main( ${shaderData.varyings} ) -> ${shaderData.returnType} {
2144
+
2145
+ // vars
2146
+ ${shaderData.vars}
2147
+
2148
+ // flow
2149
+ ${shaderData.flow}
2150
+
2151
+ }
2152
+ `;
2153
+
2154
+ }
2155
+
2156
+ /**
2157
+ * Returns a WGSL compute shader based on the given shader data.
2158
+ *
2159
+ * @private
2160
+ * @param {Object} shaderData - The shader data.
2161
+ * @param {string} workgroupSize - The workgroup size.
2162
+ * @return {string} The vertex shader.
2163
+ */
2164
+ _getWGSLComputeCode( shaderData, workgroupSize ) {
2165
+
2166
+ const [ workgroupSizeX, workgroupSizeY, workgroupSizeZ ] = workgroupSize;
2167
+
2168
+ return `${ this.getSignature() }
2169
+ // directives
2170
+ ${ shaderData.directives }
2171
+
2172
+ // system
2173
+ var<private> instanceIndex : u32;
2174
+
2175
+ // locals
2176
+ ${ shaderData.scopedArrays }
2177
+
2178
+ // structs
2179
+ ${ shaderData.structs }
2180
+
2181
+ // uniforms
2182
+ ${ shaderData.uniforms }
2183
+
2184
+ // codes
2185
+ ${ shaderData.codes }
2186
+
2187
+ @compute @workgroup_size( ${ workgroupSizeX }, ${ workgroupSizeY }, ${ workgroupSizeZ } )
2188
+ fn main( ${ shaderData.attributes } ) {
2189
+
2190
+ // system
2191
+ instanceIndex = globalId.x
2192
+ + globalId.y * ( ${ workgroupSizeX } * numWorkgroups.x )
2193
+ + globalId.z * ( ${ workgroupSizeX } * numWorkgroups.x ) * ( ${ workgroupSizeY } * numWorkgroups.y );
2194
+
2195
+ // vars
2196
+ ${ shaderData.vars }
2197
+
2198
+ // flow
2199
+ ${ shaderData.flow }
2200
+
2201
+ }
2202
+ `;
2203
+
2204
+ }
2205
+
2206
+ /**
2207
+ * Returns a WGSL struct based on the given name and variables.
2208
+ *
2209
+ * @private
2210
+ * @param {string} name - The struct name.
2211
+ * @param {string} vars - The struct variables.
2212
+ * @return {string} The WGSL snippet representing a struct.
2213
+ */
2214
+ _getWGSLStruct( name, vars ) {
2215
+
2216
+ return `
2217
+ struct ${name} {
2218
+ ${vars}
2219
+ };`;
2220
+
2221
+ }
2222
+
2223
+ /**
2224
+ * Returns a WGSL struct binding.
2225
+ *
2226
+ * @private
2227
+ * @param {string} name - The struct name.
2228
+ * @param {string} vars - The struct variables.
2229
+ * @param {string} access - The access.
2230
+ * @param {number} [binding=0] - The binding index.
2231
+ * @param {number} [group=0] - The group index.
2232
+ * @return {string} The WGSL snippet representing a struct binding.
2233
+ */
2234
+ _getWGSLStructBinding( name, vars, access, binding = 0, group = 0 ) {
2235
+
2236
+ const structName = name + 'Struct';
2237
+ const structSnippet = this._getWGSLStruct( structName, vars );
2238
+
2239
+ return `${structSnippet}
2240
+ @binding( ${ binding } ) @group( ${ group } )
2241
+ var<${access}> ${ name } : ${ structName };`;
2242
+
2243
+ }
2244
+
2245
+ }
2246
+
2247
+ export default WGSLNodeBuilder;