@gnsx/three 0.184.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1182) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +85 -0
  3. package/build/three.cjs +79695 -0
  4. package/build/three.core.js +59732 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +19552 -0
  7. package/build/three.module.min.js +6 -0
  8. package/build/three.tsl.js +654 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +83969 -0
  11. package/build/three.webgpu.min.js +6 -0
  12. package/build/three.webgpu.nodes.js +83702 -0
  13. package/build/three.webgpu.nodes.min.js +6 -0
  14. package/examples/fonts/LICENSE +13 -0
  15. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  16. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  17. package/examples/fonts/README.md +11 -0
  18. package/examples/fonts/droid/NOTICE +190 -0
  19. package/examples/fonts/droid/README.txt +18 -0
  20. package/examples/fonts/droid/droid_sans_bold.typeface.json +1 -0
  21. package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +1 -0
  22. package/examples/fonts/droid/droid_sans_regular.typeface.json +1 -0
  23. package/examples/fonts/droid/droid_serif_bold.typeface.json +1 -0
  24. package/examples/fonts/droid/droid_serif_regular.typeface.json +1 -0
  25. package/examples/fonts/gentilis_bold.typeface.json +1 -0
  26. package/examples/fonts/gentilis_regular.typeface.json +1 -0
  27. package/examples/fonts/helvetiker_bold.typeface.json +1 -0
  28. package/examples/fonts/helvetiker_regular.typeface.json +1 -0
  29. package/examples/fonts/optimer_bold.typeface.json +1 -0
  30. package/examples/fonts/optimer_regular.typeface.json +1 -0
  31. package/examples/fonts/ttf/README.md +9 -0
  32. package/examples/fonts/ttf/kenpixel.ttf +0 -0
  33. package/examples/jsm/Addons.js +293 -0
  34. package/examples/jsm/animation/AnimationClipCreator.js +168 -0
  35. package/examples/jsm/animation/CCDIKSolver.js +595 -0
  36. package/examples/jsm/capabilities/WebGL.js +113 -0
  37. package/examples/jsm/capabilities/WebGPU.js +59 -0
  38. package/examples/jsm/controls/ArcballControls.js +3539 -0
  39. package/examples/jsm/controls/DragControls.js +452 -0
  40. package/examples/jsm/controls/FirstPersonControls.js +451 -0
  41. package/examples/jsm/controls/FlyControls.js +384 -0
  42. package/examples/jsm/controls/MapControls.js +116 -0
  43. package/examples/jsm/controls/OrbitControls.js +1963 -0
  44. package/examples/jsm/controls/PointerLockControls.js +264 -0
  45. package/examples/jsm/controls/TrackballControls.js +1001 -0
  46. package/examples/jsm/controls/TransformControls.js +1950 -0
  47. package/examples/jsm/csm/CSM.js +598 -0
  48. package/examples/jsm/csm/CSMFrustum.js +209 -0
  49. package/examples/jsm/csm/CSMHelper.js +243 -0
  50. package/examples/jsm/csm/CSMShader.js +307 -0
  51. package/examples/jsm/csm/CSMShadowNode.js +603 -0
  52. package/examples/jsm/curves/CurveExtras.js +694 -0
  53. package/examples/jsm/curves/NURBSCurve.js +155 -0
  54. package/examples/jsm/curves/NURBSSurface.js +98 -0
  55. package/examples/jsm/curves/NURBSUtils.js +532 -0
  56. package/examples/jsm/curves/NURBSVolume.js +82 -0
  57. package/examples/jsm/effects/AnaglyphEffect.js +274 -0
  58. package/examples/jsm/effects/AsciiEffect.js +310 -0
  59. package/examples/jsm/effects/OutlineEffect.js +489 -0
  60. package/examples/jsm/effects/ParallaxBarrierEffect.js +155 -0
  61. package/examples/jsm/effects/StereoEffect.js +91 -0
  62. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  63. package/examples/jsm/environments/DebugEnvironment.js +102 -0
  64. package/examples/jsm/environments/RoomEnvironment.js +185 -0
  65. package/examples/jsm/exporters/DRACOExporter.js +311 -0
  66. package/examples/jsm/exporters/EXRExporter.js +618 -0
  67. package/examples/jsm/exporters/GLTFExporter.js +3738 -0
  68. package/examples/jsm/exporters/KTX2Exporter.js +347 -0
  69. package/examples/jsm/exporters/OBJExporter.js +308 -0
  70. package/examples/jsm/exporters/PLYExporter.js +562 -0
  71. package/examples/jsm/exporters/STLExporter.js +221 -0
  72. package/examples/jsm/exporters/USDZExporter.js +1254 -0
  73. package/examples/jsm/geometries/BoxLineGeometry.js +92 -0
  74. package/examples/jsm/geometries/ConvexGeometry.js +72 -0
  75. package/examples/jsm/geometries/DecalGeometry.js +420 -0
  76. package/examples/jsm/geometries/ParametricFunctions.js +100 -0
  77. package/examples/jsm/geometries/ParametricGeometry.js +172 -0
  78. package/examples/jsm/geometries/RoundedBoxGeometry.js +216 -0
  79. package/examples/jsm/geometries/TeapotGeometry.js +689 -0
  80. package/examples/jsm/geometries/TextGeometry.js +102 -0
  81. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  82. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  83. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  84. package/examples/jsm/helpers/LightProbeHelper.js +165 -0
  85. package/examples/jsm/helpers/LightProbeHelperGPU.js +102 -0
  86. package/examples/jsm/helpers/OctreeHelper.js +109 -0
  87. package/examples/jsm/helpers/PositionalAudioHelper.js +169 -0
  88. package/examples/jsm/helpers/RapierHelper.js +59 -0
  89. package/examples/jsm/helpers/RectAreaLightHelper.js +118 -0
  90. package/examples/jsm/helpers/TextureHelper.js +265 -0
  91. package/examples/jsm/helpers/TextureHelperGPU.js +214 -0
  92. package/examples/jsm/helpers/VertexNormalsHelper.js +155 -0
  93. package/examples/jsm/helpers/VertexTangentsHelper.js +133 -0
  94. package/examples/jsm/helpers/ViewHelper.js +519 -0
  95. package/examples/jsm/inspector/Extension.js +13 -0
  96. package/examples/jsm/inspector/Inspector.js +542 -0
  97. package/examples/jsm/inspector/RendererInspector.js +425 -0
  98. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  99. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  100. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  101. package/examples/jsm/inspector/tabs/Console.js +238 -0
  102. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  103. package/examples/jsm/inspector/tabs/Parameters.js +380 -0
  104. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  105. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  106. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  107. package/examples/jsm/inspector/tabs/Viewer.js +268 -0
  108. package/examples/jsm/inspector/ui/Graph.js +95 -0
  109. package/examples/jsm/inspector/ui/Item.js +170 -0
  110. package/examples/jsm/inspector/ui/List.js +75 -0
  111. package/examples/jsm/inspector/ui/Profiler.js +2072 -0
  112. package/examples/jsm/inspector/ui/Style.js +1667 -0
  113. package/examples/jsm/inspector/ui/Tab.js +265 -0
  114. package/examples/jsm/inspector/ui/Values.js +476 -0
  115. package/examples/jsm/inspector/ui/utils.js +69 -0
  116. package/examples/jsm/interaction/InteractionManager.js +226 -0
  117. package/examples/jsm/interactive/HTMLMesh.js +601 -0
  118. package/examples/jsm/interactive/InteractiveGroup.js +224 -0
  119. package/examples/jsm/interactive/SelectionBox.js +324 -0
  120. package/examples/jsm/interactive/SelectionHelper.js +150 -0
  121. package/examples/jsm/libs/ammo.wasm.js +822 -0
  122. package/examples/jsm/libs/ammo.wasm.wasm +0 -0
  123. package/examples/jsm/libs/basis/README.md +46 -0
  124. package/examples/jsm/libs/basis/basis_transcoder.js +19 -0
  125. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  126. package/examples/jsm/libs/chevrotain.module.min.js +141 -0
  127. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  128. package/examples/jsm/libs/draco/README.md +32 -0
  129. package/examples/jsm/libs/draco/draco_decoder.js +34 -0
  130. package/examples/jsm/libs/draco/draco_decoder.wasm +0 -0
  131. package/examples/jsm/libs/draco/draco_encoder.js +33 -0
  132. package/examples/jsm/libs/draco/draco_wasm_wrapper.js +117 -0
  133. package/examples/jsm/libs/draco/gltf/draco_decoder.js +33 -0
  134. package/examples/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
  135. package/examples/jsm/libs/draco/gltf/draco_encoder.js +33 -0
  136. package/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
  137. package/examples/jsm/libs/ecsy.module.js +1792 -0
  138. package/examples/jsm/libs/fflate.module.js +2672 -0
  139. package/examples/jsm/libs/ktx-parse.module.js +1 -0
  140. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  141. package/examples/jsm/libs/lottie_canvas.module.js +14849 -0
  142. package/examples/jsm/libs/meshopt_decoder.module.js +196 -0
  143. package/examples/jsm/libs/mikktspace.module.js +128 -0
  144. package/examples/jsm/libs/motion-controllers.module.js +397 -0
  145. package/examples/jsm/libs/opentype.module.js +14506 -0
  146. package/examples/jsm/libs/potpack.module.js +125 -0
  147. package/examples/jsm/libs/rhino3dm/rhino3dm.js +21 -0
  148. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +16 -0
  149. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  150. package/examples/jsm/libs/stats.module.js +167 -0
  151. package/examples/jsm/libs/surfaceNet.js +201 -0
  152. package/examples/jsm/libs/tween.module.js +876 -0
  153. package/examples/jsm/libs/utif.module.js +1665 -0
  154. package/examples/jsm/libs/zstddec.module.js +1 -0
  155. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  156. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  157. package/examples/jsm/lighting/TiledLighting.js +42 -0
  158. package/examples/jsm/lights/LightProbeGenerator.js +337 -0
  159. package/examples/jsm/lights/RectAreaLightTexturesLib.js +127 -0
  160. package/examples/jsm/lights/RectAreaLightUniformsLib.js +40 -0
  161. package/examples/jsm/lines/Line2.js +56 -0
  162. package/examples/jsm/lines/LineGeometry.js +157 -0
  163. package/examples/jsm/lines/LineMaterial.js +703 -0
  164. package/examples/jsm/lines/LineSegments2.js +426 -0
  165. package/examples/jsm/lines/LineSegmentsGeometry.js +298 -0
  166. package/examples/jsm/lines/Wireframe.js +108 -0
  167. package/examples/jsm/lines/WireframeGeometry2.js +49 -0
  168. package/examples/jsm/lines/webgpu/Line2.js +46 -0
  169. package/examples/jsm/lines/webgpu/LineSegments2.js +411 -0
  170. package/examples/jsm/lines/webgpu/Wireframe.js +86 -0
  171. package/examples/jsm/loaders/3DMLoader.js +1836 -0
  172. package/examples/jsm/loaders/3MFLoader.js +1621 -0
  173. package/examples/jsm/loaders/AMFLoader.js +541 -0
  174. package/examples/jsm/loaders/BVHLoader.js +484 -0
  175. package/examples/jsm/loaders/ColladaLoader.js +153 -0
  176. package/examples/jsm/loaders/DDSLoader.js +385 -0
  177. package/examples/jsm/loaders/DRACOLoader.js +739 -0
  178. package/examples/jsm/loaders/EXRLoader.js +3423 -0
  179. package/examples/jsm/loaders/FBXLoader.js +4580 -0
  180. package/examples/jsm/loaders/FontLoader.js +260 -0
  181. package/examples/jsm/loaders/GCodeLoader.js +318 -0
  182. package/examples/jsm/loaders/GLTFLoader.js +4860 -0
  183. package/examples/jsm/loaders/HDRCubeTextureLoader.js +164 -0
  184. package/examples/jsm/loaders/HDRLoader.js +485 -0
  185. package/examples/jsm/loaders/IESLoader.js +379 -0
  186. package/examples/jsm/loaders/KMZLoader.js +163 -0
  187. package/examples/jsm/loaders/KTX2Loader.js +1257 -0
  188. package/examples/jsm/loaders/KTXLoader.js +197 -0
  189. package/examples/jsm/loaders/LDrawLoader.js +2510 -0
  190. package/examples/jsm/loaders/LUT3dlLoader.js +205 -0
  191. package/examples/jsm/loaders/LUTCubeLoader.js +190 -0
  192. package/examples/jsm/loaders/LUTImageLoader.js +190 -0
  193. package/examples/jsm/loaders/LWOLoader.js +1047 -0
  194. package/examples/jsm/loaders/LottieLoader.js +130 -0
  195. package/examples/jsm/loaders/MD2Loader.js +435 -0
  196. package/examples/jsm/loaders/MDDLoader.js +147 -0
  197. package/examples/jsm/loaders/MTLLoader.js +593 -0
  198. package/examples/jsm/loaders/MaterialXLoader.js +1104 -0
  199. package/examples/jsm/loaders/NRRDLoader.js +718 -0
  200. package/examples/jsm/loaders/OBJLoader.js +955 -0
  201. package/examples/jsm/loaders/PCDLoader.js +620 -0
  202. package/examples/jsm/loaders/PDBLoader.js +272 -0
  203. package/examples/jsm/loaders/PLYLoader.js +805 -0
  204. package/examples/jsm/loaders/PVRLoader.js +270 -0
  205. package/examples/jsm/loaders/RGBELoader.js +18 -0
  206. package/examples/jsm/loaders/STLLoader.js +421 -0
  207. package/examples/jsm/loaders/SVGLoader.js +3267 -0
  208. package/examples/jsm/loaders/TDSLoader.js +1142 -0
  209. package/examples/jsm/loaders/TGALoader.js +538 -0
  210. package/examples/jsm/loaders/TIFFLoader.js +59 -0
  211. package/examples/jsm/loaders/TTFLoader.js +261 -0
  212. package/examples/jsm/loaders/USDLoader.js +279 -0
  213. package/examples/jsm/loaders/USDZLoader.js +16 -0
  214. package/examples/jsm/loaders/UltraHDRLoader.js +755 -0
  215. package/examples/jsm/loaders/VOXLoader.js +919 -0
  216. package/examples/jsm/loaders/VRMLLoader.js +3646 -0
  217. package/examples/jsm/loaders/VTKLoader.js +1293 -0
  218. package/examples/jsm/loaders/XYZLoader.js +143 -0
  219. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  220. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  221. package/examples/jsm/loaders/lwo/IFFParser.js +1217 -0
  222. package/examples/jsm/loaders/lwo/LWO2Parser.js +414 -0
  223. package/examples/jsm/loaders/lwo/LWO3Parser.js +373 -0
  224. package/examples/jsm/loaders/usd/USDAParser.js +828 -0
  225. package/examples/jsm/loaders/usd/USDCParser.js +1878 -0
  226. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  227. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +183 -0
  228. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +154 -0
  229. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  230. package/examples/jsm/math/Capsule.js +159 -0
  231. package/examples/jsm/math/ColorConverter.js +58 -0
  232. package/examples/jsm/math/ColorSpaces.js +147 -0
  233. package/examples/jsm/math/ConvexHull.js +1695 -0
  234. package/examples/jsm/math/ImprovedNoise.js +88 -0
  235. package/examples/jsm/math/Lut.js +317 -0
  236. package/examples/jsm/math/MeshSurfaceSampler.js +315 -0
  237. package/examples/jsm/math/OBB.js +535 -0
  238. package/examples/jsm/math/Octree.js +822 -0
  239. package/examples/jsm/math/SimplexNoise.js +470 -0
  240. package/examples/jsm/misc/ConvexObjectBreaker.js +539 -0
  241. package/examples/jsm/misc/GPUComputationRenderer.js +508 -0
  242. package/examples/jsm/misc/Gyroscope.js +78 -0
  243. package/examples/jsm/misc/MD2Character.js +391 -0
  244. package/examples/jsm/misc/MD2CharacterComplex.js +740 -0
  245. package/examples/jsm/misc/MorphAnimMesh.js +119 -0
  246. package/examples/jsm/misc/MorphBlendMesh.js +425 -0
  247. package/examples/jsm/misc/ProgressiveLightMap.js +370 -0
  248. package/examples/jsm/misc/ProgressiveLightMapGPU.js +322 -0
  249. package/examples/jsm/misc/RollerCoaster.js +661 -0
  250. package/examples/jsm/misc/TubePainter.js +599 -0
  251. package/examples/jsm/misc/Volume.js +520 -0
  252. package/examples/jsm/misc/VolumeSlice.js +275 -0
  253. package/examples/jsm/modifiers/CurveModifier.js +374 -0
  254. package/examples/jsm/modifiers/CurveModifierGPU.js +256 -0
  255. package/examples/jsm/modifiers/EdgeSplitModifier.js +299 -0
  256. package/examples/jsm/modifiers/SimplifyModifier.js +632 -0
  257. package/examples/jsm/modifiers/TessellateModifier.js +340 -0
  258. package/examples/jsm/objects/GroundedSkybox.js +69 -0
  259. package/examples/jsm/objects/Lensflare.js +489 -0
  260. package/examples/jsm/objects/LensflareMesh.js +376 -0
  261. package/examples/jsm/objects/MarchingCubes.js +1261 -0
  262. package/examples/jsm/objects/Reflector.js +386 -0
  263. package/examples/jsm/objects/ReflectorForSSRPass.js +393 -0
  264. package/examples/jsm/objects/Refractor.js +389 -0
  265. package/examples/jsm/objects/ShadowMesh.js +130 -0
  266. package/examples/jsm/objects/Sky.js +321 -0
  267. package/examples/jsm/objects/SkyMesh.js +377 -0
  268. package/examples/jsm/objects/Water.js +374 -0
  269. package/examples/jsm/objects/Water2.js +403 -0
  270. package/examples/jsm/objects/Water2Mesh.js +199 -0
  271. package/examples/jsm/objects/WaterMesh.js +194 -0
  272. package/examples/jsm/offscreen/jank.js +45 -0
  273. package/examples/jsm/offscreen/offscreen.js +8 -0
  274. package/examples/jsm/offscreen/scene.js +86 -0
  275. package/examples/jsm/physics/AmmoPhysics.js +359 -0
  276. package/examples/jsm/physics/JoltPhysics.js +334 -0
  277. package/examples/jsm/physics/RapierPhysics.js +436 -0
  278. package/examples/jsm/postprocessing/AfterimagePass.js +185 -0
  279. package/examples/jsm/postprocessing/BloomPass.js +274 -0
  280. package/examples/jsm/postprocessing/BokehPass.js +218 -0
  281. package/examples/jsm/postprocessing/ClearPass.js +97 -0
  282. package/examples/jsm/postprocessing/CubeTexturePass.js +146 -0
  283. package/examples/jsm/postprocessing/DotScreenPass.js +114 -0
  284. package/examples/jsm/postprocessing/EffectComposer.js +365 -0
  285. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  286. package/examples/jsm/postprocessing/FilmPass.js +113 -0
  287. package/examples/jsm/postprocessing/GTAOPass.js +727 -0
  288. package/examples/jsm/postprocessing/GlitchPass.js +177 -0
  289. package/examples/jsm/postprocessing/HalftonePass.js +134 -0
  290. package/examples/jsm/postprocessing/LUTPass.js +138 -0
  291. package/examples/jsm/postprocessing/MaskPass.js +195 -0
  292. package/examples/jsm/postprocessing/OutlinePass.js +776 -0
  293. package/examples/jsm/postprocessing/OutputPass.js +148 -0
  294. package/examples/jsm/postprocessing/Pass.js +191 -0
  295. package/examples/jsm/postprocessing/RenderPass.js +193 -0
  296. package/examples/jsm/postprocessing/RenderPixelatedPass.js +314 -0
  297. package/examples/jsm/postprocessing/RenderTransitionPass.js +267 -0
  298. package/examples/jsm/postprocessing/SAOPass.js +407 -0
  299. package/examples/jsm/postprocessing/SMAAPass.js +230 -0
  300. package/examples/jsm/postprocessing/SSAARenderPass.js +313 -0
  301. package/examples/jsm/postprocessing/SSAOPass.js +527 -0
  302. package/examples/jsm/postprocessing/SSRPass.js +856 -0
  303. package/examples/jsm/postprocessing/SavePass.js +132 -0
  304. package/examples/jsm/postprocessing/ShaderPass.js +135 -0
  305. package/examples/jsm/postprocessing/TAARenderPass.js +243 -0
  306. package/examples/jsm/postprocessing/TexturePass.js +131 -0
  307. package/examples/jsm/postprocessing/UnrealBloomPass.js +524 -0
  308. package/examples/jsm/renderers/CSS2DRenderer.js +328 -0
  309. package/examples/jsm/renderers/CSS3DRenderer.js +454 -0
  310. package/examples/jsm/renderers/Projector.js +1154 -0
  311. package/examples/jsm/renderers/SVGRenderer.js +799 -0
  312. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +96 -0
  313. package/examples/jsm/shaders/AfterimageShader.js +63 -0
  314. package/examples/jsm/shaders/BasicShader.js +36 -0
  315. package/examples/jsm/shaders/BleachBypassShader.js +68 -0
  316. package/examples/jsm/shaders/BlendShader.js +56 -0
  317. package/examples/jsm/shaders/BokehShader.js +151 -0
  318. package/examples/jsm/shaders/BokehShader2.js +404 -0
  319. package/examples/jsm/shaders/BrightnessContrastShader.js +62 -0
  320. package/examples/jsm/shaders/ColorCorrectionShader.js +59 -0
  321. package/examples/jsm/shaders/ColorifyShader.js +57 -0
  322. package/examples/jsm/shaders/ConvolutionShader.js +74 -0
  323. package/examples/jsm/shaders/CopyShader.js +52 -0
  324. package/examples/jsm/shaders/DOFMipMapShader.js +63 -0
  325. package/examples/jsm/shaders/DepthLimitedBlurShader.js +180 -0
  326. package/examples/jsm/shaders/DigitalGlitch.js +104 -0
  327. package/examples/jsm/shaders/DotScreenShader.js +75 -0
  328. package/examples/jsm/shaders/ExposureShader.js +51 -0
  329. package/examples/jsm/shaders/FXAAShader.js +298 -0
  330. package/examples/jsm/shaders/FilmShader.js +72 -0
  331. package/examples/jsm/shaders/FocusShader.js +94 -0
  332. package/examples/jsm/shaders/FreiChenShader.js +103 -0
  333. package/examples/jsm/shaders/GTAOShader.js +434 -0
  334. package/examples/jsm/shaders/GammaCorrectionShader.js +52 -0
  335. package/examples/jsm/shaders/HalftoneShader.js +332 -0
  336. package/examples/jsm/shaders/HorizontalBlurShader.js +68 -0
  337. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +70 -0
  338. package/examples/jsm/shaders/HueSaturationShader.js +74 -0
  339. package/examples/jsm/shaders/KaleidoShader.js +65 -0
  340. package/examples/jsm/shaders/LuminosityHighPassShader.js +68 -0
  341. package/examples/jsm/shaders/LuminosityShader.js +54 -0
  342. package/examples/jsm/shaders/MirrorShader.js +62 -0
  343. package/examples/jsm/shaders/NormalMapShader.js +60 -0
  344. package/examples/jsm/shaders/OutputShader.js +103 -0
  345. package/examples/jsm/shaders/PoissonDenoiseShader.js +239 -0
  346. package/examples/jsm/shaders/RGBShiftShader.js +61 -0
  347. package/examples/jsm/shaders/SAOShader.js +201 -0
  348. package/examples/jsm/shaders/SMAAShader.js +489 -0
  349. package/examples/jsm/shaders/SSAOShader.js +331 -0
  350. package/examples/jsm/shaders/SSRShader.js +396 -0
  351. package/examples/jsm/shaders/SepiaShader.js +57 -0
  352. package/examples/jsm/shaders/SobelOperatorShader.js +98 -0
  353. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +95 -0
  354. package/examples/jsm/shaders/TechnicolorShader.js +51 -0
  355. package/examples/jsm/shaders/ToonShader.js +349 -0
  356. package/examples/jsm/shaders/TriangleBlurShader.js +79 -0
  357. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +60 -0
  358. package/examples/jsm/shaders/VelocityShader.js +137 -0
  359. package/examples/jsm/shaders/VerticalBlurShader.js +66 -0
  360. package/examples/jsm/shaders/VerticalTiltShiftShader.js +70 -0
  361. package/examples/jsm/shaders/VignetteShader.js +56 -0
  362. package/examples/jsm/shaders/VolumeShader.js +298 -0
  363. package/examples/jsm/shaders/WaterRefractionShader.js +106 -0
  364. package/examples/jsm/textures/FlakesTexture.js +54 -0
  365. package/examples/jsm/transpiler/AST.js +675 -0
  366. package/examples/jsm/transpiler/GLSLDecoder.js +1228 -0
  367. package/examples/jsm/transpiler/Linker.js +327 -0
  368. package/examples/jsm/transpiler/ShaderToyDecoder.js +51 -0
  369. package/examples/jsm/transpiler/TSLEncoder.js +983 -0
  370. package/examples/jsm/transpiler/Transpiler.js +67 -0
  371. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  372. package/examples/jsm/transpiler/WGSLEncoder.js +839 -0
  373. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  374. package/examples/jsm/tsl/display/AfterImageNode.js +254 -0
  375. package/examples/jsm/tsl/display/AnaglyphPassNode.js +549 -0
  376. package/examples/jsm/tsl/display/AnamorphicNode.js +293 -0
  377. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  378. package/examples/jsm/tsl/display/BleachBypass.js +33 -0
  379. package/examples/jsm/tsl/display/BloomNode.js +534 -0
  380. package/examples/jsm/tsl/display/CRT.js +150 -0
  381. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +174 -0
  382. package/examples/jsm/tsl/display/DenoiseNode.js +334 -0
  383. package/examples/jsm/tsl/display/DepthOfFieldNode.js +554 -0
  384. package/examples/jsm/tsl/display/DotScreenNode.js +104 -0
  385. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  386. package/examples/jsm/tsl/display/FXAANode.js +365 -0
  387. package/examples/jsm/tsl/display/FilmNode.js +101 -0
  388. package/examples/jsm/tsl/display/GTAONode.js +572 -0
  389. package/examples/jsm/tsl/display/GaussianBlurNode.js +399 -0
  390. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  391. package/examples/jsm/tsl/display/LensflareNode.js +279 -0
  392. package/examples/jsm/tsl/display/Lut3DNode.js +109 -0
  393. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  394. package/examples/jsm/tsl/display/OutlineNode.js +812 -0
  395. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +89 -0
  396. package/examples/jsm/tsl/display/PixelationPassNode.js +335 -0
  397. package/examples/jsm/tsl/display/RGBShiftNode.js +96 -0
  398. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  399. package/examples/jsm/tsl/display/SMAANode.js +768 -0
  400. package/examples/jsm/tsl/display/SSAAPassNode.js +358 -0
  401. package/examples/jsm/tsl/display/SSGINode.js +638 -0
  402. package/examples/jsm/tsl/display/SSRNode.js +656 -0
  403. package/examples/jsm/tsl/display/SSSNode.js +490 -0
  404. package/examples/jsm/tsl/display/Sepia.js +24 -0
  405. package/examples/jsm/tsl/display/Shape.js +29 -0
  406. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  407. package/examples/jsm/tsl/display/SobelOperatorNode.js +168 -0
  408. package/examples/jsm/tsl/display/StereoCompositePassNode.js +192 -0
  409. package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
  410. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  411. package/examples/jsm/tsl/display/TRAANode.js +767 -0
  412. package/examples/jsm/tsl/display/TransitionNode.js +141 -0
  413. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  414. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  415. package/examples/jsm/tsl/display/hashBlur.js +54 -0
  416. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  417. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  418. package/examples/jsm/tsl/lighting/TiledLightsNode.js +442 -0
  419. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  420. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  421. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  422. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  423. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  424. package/examples/jsm/tsl/math/Bayer.js +84 -0
  425. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  426. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  427. package/examples/jsm/tsl/utils/Raymarching.js +70 -0
  428. package/examples/jsm/utils/BufferGeometryUtils.js +1434 -0
  429. package/examples/jsm/utils/CameraUtils.js +82 -0
  430. package/examples/jsm/utils/ColorUtils.js +76 -0
  431. package/examples/jsm/utils/GeometryCompressionUtils.js +547 -0
  432. package/examples/jsm/utils/GeometryUtils.js +226 -0
  433. package/examples/jsm/utils/LDrawUtils.js +211 -0
  434. package/examples/jsm/utils/SceneOptimizer.js +458 -0
  435. package/examples/jsm/utils/SceneUtils.js +363 -0
  436. package/examples/jsm/utils/ShadowMapViewer.js +244 -0
  437. package/examples/jsm/utils/ShadowMapViewerGPU.js +233 -0
  438. package/examples/jsm/utils/SkeletonUtils.js +496 -0
  439. package/examples/jsm/utils/SortUtils.js +175 -0
  440. package/examples/jsm/utils/UVsDebug.js +173 -0
  441. package/examples/jsm/utils/WebGLTextureUtils.js +115 -0
  442. package/examples/jsm/utils/WebGPUTextureUtils.js +81 -0
  443. package/examples/jsm/utils/WorkerPool.js +167 -0
  444. package/examples/jsm/webxr/ARButton.js +251 -0
  445. package/examples/jsm/webxr/OculusHandModel.js +194 -0
  446. package/examples/jsm/webxr/OculusHandPointerModel.js +539 -0
  447. package/examples/jsm/webxr/Text2D.js +52 -0
  448. package/examples/jsm/webxr/VRButton.js +264 -0
  449. package/examples/jsm/webxr/XRButton.js +246 -0
  450. package/examples/jsm/webxr/XRControllerModelFactory.js +403 -0
  451. package/examples/jsm/webxr/XREstimatedLight.js +254 -0
  452. package/examples/jsm/webxr/XRHandMeshModel.js +177 -0
  453. package/examples/jsm/webxr/XRHandModelFactory.js +198 -0
  454. package/examples/jsm/webxr/XRHandPrimitiveModel.js +147 -0
  455. package/examples/jsm/webxr/XRPlanes.js +118 -0
  456. package/package.json +123 -0
  457. package/src/Three.Core.js +187 -0
  458. package/src/Three.Legacy.js +0 -0
  459. package/src/Three.TSL.js +647 -0
  460. package/src/Three.WebGPU.Nodes.js +31 -0
  461. package/src/Three.WebGPU.js +37 -0
  462. package/src/Three.js +10 -0
  463. package/src/animation/AnimationAction.js +942 -0
  464. package/src/animation/AnimationClip.js +628 -0
  465. package/src/animation/AnimationMixer.js +860 -0
  466. package/src/animation/AnimationObjectGroup.js +411 -0
  467. package/src/animation/AnimationUtils.js +495 -0
  468. package/src/animation/KeyframeTrack.js +636 -0
  469. package/src/animation/PropertyBinding.js +794 -0
  470. package/src/animation/PropertyMixer.js +385 -0
  471. package/src/animation/tracks/BooleanKeyframeTrack.js +55 -0
  472. package/src/animation/tracks/ColorKeyframeTrack.js +36 -0
  473. package/src/animation/tracks/NumberKeyframeTrack.js +36 -0
  474. package/src/animation/tracks/QuaternionKeyframeTrack.js +51 -0
  475. package/src/animation/tracks/StringKeyframeTrack.js +55 -0
  476. package/src/animation/tracks/VectorKeyframeTrack.js +36 -0
  477. package/src/audio/Audio.js +778 -0
  478. package/src/audio/AudioAnalyser.js +97 -0
  479. package/src/audio/AudioContext.js +40 -0
  480. package/src/audio/AudioListener.js +218 -0
  481. package/src/audio/PositionalAudio.js +253 -0
  482. package/src/cameras/ArrayCamera.js +54 -0
  483. package/src/cameras/Camera.js +160 -0
  484. package/src/cameras/CubeCamera.js +259 -0
  485. package/src/cameras/OrthographicCamera.js +245 -0
  486. package/src/cameras/PerspectiveCamera.js +407 -0
  487. package/src/cameras/StereoCamera.js +146 -0
  488. package/src/constants.js +1760 -0
  489. package/src/core/BufferAttribute.js +1056 -0
  490. package/src/core/BufferGeometry.js +1458 -0
  491. package/src/core/Clock.js +135 -0
  492. package/src/core/EventDispatcher.js +131 -0
  493. package/src/core/GLBufferAttribute.js +171 -0
  494. package/src/core/InstancedBufferAttribute.js +68 -0
  495. package/src/core/InstancedBufferGeometry.js +60 -0
  496. package/src/core/InstancedInterleavedBuffer.js +74 -0
  497. package/src/core/InterleavedBuffer.js +291 -0
  498. package/src/core/InterleavedBufferAttribute.js +549 -0
  499. package/src/core/Layers.js +121 -0
  500. package/src/core/Object3D.js +1667 -0
  501. package/src/core/Raycaster.js +262 -0
  502. package/src/core/RenderTarget.js +392 -0
  503. package/src/core/RenderTarget3D.js +48 -0
  504. package/src/core/Timer.js +184 -0
  505. package/src/core/Uniform.js +46 -0
  506. package/src/core/UniformsGroup.js +180 -0
  507. package/src/extras/Controls.js +120 -0
  508. package/src/extras/DataUtils.js +217 -0
  509. package/src/extras/Earcut.js +28 -0
  510. package/src/extras/ImageUtils.js +137 -0
  511. package/src/extras/PMREMGenerator.js +1167 -0
  512. package/src/extras/ShapeUtils.js +114 -0
  513. package/src/extras/TextureUtils.js +297 -0
  514. package/src/extras/core/Curve.js +517 -0
  515. package/src/extras/core/CurvePath.js +296 -0
  516. package/src/extras/core/Interpolations.js +111 -0
  517. package/src/extras/core/Path.js +329 -0
  518. package/src/extras/core/Shape.js +165 -0
  519. package/src/extras/core/ShapePath.js +367 -0
  520. package/src/extras/curves/ArcCurve.js +39 -0
  521. package/src/extras/curves/CatmullRomCurve3.js +327 -0
  522. package/src/extras/curves/CubicBezierCurve.js +145 -0
  523. package/src/extras/curves/CubicBezierCurve3.js +129 -0
  524. package/src/extras/curves/Curves.js +10 -0
  525. package/src/extras/curves/EllipseCurve.js +258 -0
  526. package/src/extras/curves/LineCurve.js +128 -0
  527. package/src/extras/curves/LineCurve3.js +128 -0
  528. package/src/extras/curves/QuadraticBezierCurve.js +133 -0
  529. package/src/extras/curves/QuadraticBezierCurve3.js +118 -0
  530. package/src/extras/curves/SplineCurve.js +145 -0
  531. package/src/extras/lib/earcut.js +685 -0
  532. package/src/geometries/BoxGeometry.js +219 -0
  533. package/src/geometries/CapsuleGeometry.js +218 -0
  534. package/src/geometries/CircleGeometry.js +142 -0
  535. package/src/geometries/ConeGeometry.js +70 -0
  536. package/src/geometries/CylinderGeometry.js +333 -0
  537. package/src/geometries/DodecahedronGeometry.js +99 -0
  538. package/src/geometries/EdgesGeometry.js +180 -0
  539. package/src/geometries/ExtrudeGeometry.js +910 -0
  540. package/src/geometries/Geometries.js +21 -0
  541. package/src/geometries/IcosahedronGeometry.js +75 -0
  542. package/src/geometries/LatheGeometry.js +230 -0
  543. package/src/geometries/OctahedronGeometry.js +70 -0
  544. package/src/geometries/PlaneGeometry.js +133 -0
  545. package/src/geometries/PolyhedronGeometry.js +348 -0
  546. package/src/geometries/RingGeometry.js +165 -0
  547. package/src/geometries/ShapeGeometry.js +233 -0
  548. package/src/geometries/SphereGeometry.js +175 -0
  549. package/src/geometries/TetrahedronGeometry.js +67 -0
  550. package/src/geometries/TorusGeometry.js +161 -0
  551. package/src/geometries/TorusKnotGeometry.js +206 -0
  552. package/src/geometries/TubeGeometry.js +253 -0
  553. package/src/geometries/WireframeGeometry.js +179 -0
  554. package/src/helpers/ArrowHelper.js +171 -0
  555. package/src/helpers/AxesHelper.js +96 -0
  556. package/src/helpers/Box3Helper.js +83 -0
  557. package/src/helpers/BoxHelper.js +149 -0
  558. package/src/helpers/CameraHelper.js +345 -0
  559. package/src/helpers/DirectionalLightHelper.js +148 -0
  560. package/src/helpers/GridHelper.js +82 -0
  561. package/src/helpers/HemisphereLightHelper.js +130 -0
  562. package/src/helpers/PlaneHelper.js +96 -0
  563. package/src/helpers/PointLightHelper.js +111 -0
  564. package/src/helpers/PolarGridHelper.js +126 -0
  565. package/src/helpers/SkeletonHelper.js +194 -0
  566. package/src/helpers/SpotLightHelper.js +154 -0
  567. package/src/lights/AmbientLight.js +42 -0
  568. package/src/lights/DirectionalLight.js +113 -0
  569. package/src/lights/DirectionalLightShadow.js +31 -0
  570. package/src/lights/HemisphereLight.js +76 -0
  571. package/src/lights/Light.js +85 -0
  572. package/src/lights/LightProbe.js +75 -0
  573. package/src/lights/LightShadow.js +347 -0
  574. package/src/lights/PointLight.js +131 -0
  575. package/src/lights/PointLightShadow.js +31 -0
  576. package/src/lights/RectAreaLight.js +115 -0
  577. package/src/lights/SpotLight.js +194 -0
  578. package/src/lights/SpotLightShadow.js +80 -0
  579. package/src/lights/webgpu/IESSpotLight.js +47 -0
  580. package/src/lights/webgpu/ProjectorLight.js +46 -0
  581. package/src/loaders/AnimationLoader.js +98 -0
  582. package/src/loaders/AudioLoader.js +108 -0
  583. package/src/loaders/BufferGeometryLoader.js +242 -0
  584. package/src/loaders/Cache.js +115 -0
  585. package/src/loaders/CompressedTextureLoader.js +167 -0
  586. package/src/loaders/CubeTextureLoader.js +103 -0
  587. package/src/loaders/DataTextureLoader.js +174 -0
  588. package/src/loaders/FileLoader.js +367 -0
  589. package/src/loaders/ImageBitmapLoader.js +223 -0
  590. package/src/loaders/ImageLoader.js +168 -0
  591. package/src/loaders/Loader.js +222 -0
  592. package/src/loaders/LoaderUtils.js +59 -0
  593. package/src/loaders/LoadingManager.js +329 -0
  594. package/src/loaders/MaterialLoader.js +439 -0
  595. package/src/loaders/ObjectLoader.js +1304 -0
  596. package/src/loaders/TextureLoader.js +74 -0
  597. package/src/loaders/nodes/NodeLoader.js +194 -0
  598. package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
  599. package/src/loaders/nodes/NodeObjectLoader.js +169 -0
  600. package/src/materials/LineBasicMaterial.js +122 -0
  601. package/src/materials/LineDashedMaterial.js +86 -0
  602. package/src/materials/Material.js +1017 -0
  603. package/src/materials/Materials.js +39 -0
  604. package/src/materials/MeshBasicMaterial.js +250 -0
  605. package/src/materials/MeshDepthMaterial.js +148 -0
  606. package/src/materials/MeshDistanceMaterial.js +119 -0
  607. package/src/materials/MeshLambertMaterial.js +402 -0
  608. package/src/materials/MeshMatcapMaterial.js +245 -0
  609. package/src/materials/MeshNormalMaterial.js +175 -0
  610. package/src/materials/MeshPhongMaterial.js +421 -0
  611. package/src/materials/MeshPhysicalMaterial.js +536 -0
  612. package/src/materials/MeshStandardMaterial.js +425 -0
  613. package/src/materials/MeshToonMaterial.js +321 -0
  614. package/src/materials/PointsMaterial.js +139 -0
  615. package/src/materials/RawShaderMaterial.js +42 -0
  616. package/src/materials/ShaderMaterial.js +413 -0
  617. package/src/materials/ShadowMaterial.js +91 -0
  618. package/src/materials/SpriteMaterial.js +136 -0
  619. package/src/materials/nodes/Line2NodeMaterial.js +569 -0
  620. package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
  621. package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
  622. package/src/materials/nodes/MeshBasicNodeMaterial.js +134 -0
  623. package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
  624. package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
  625. package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
  626. package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
  627. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +521 -0
  628. package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
  629. package/src/materials/nodes/MeshStandardNodeMaterial.js +187 -0
  630. package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
  631. package/src/materials/nodes/NodeMaterial.js +1330 -0
  632. package/src/materials/nodes/NodeMaterials.js +21 -0
  633. package/src/materials/nodes/PointsNodeMaterial.js +211 -0
  634. package/src/materials/nodes/ShadowNodeMaterial.js +76 -0
  635. package/src/materials/nodes/SpriteNodeMaterial.js +186 -0
  636. package/src/materials/nodes/VolumeNodeMaterial.js +81 -0
  637. package/src/materials/nodes/manager/NodeMaterialObserver.js +718 -0
  638. package/src/math/Box2.js +381 -0
  639. package/src/math/Box3.js +805 -0
  640. package/src/math/Color.js +967 -0
  641. package/src/math/ColorManagement.js +215 -0
  642. package/src/math/Cylindrical.js +120 -0
  643. package/src/math/Euler.js +449 -0
  644. package/src/math/Frustum.js +285 -0
  645. package/src/math/FrustumArray.js +258 -0
  646. package/src/math/Interpolant.js +320 -0
  647. package/src/math/Line3.js +337 -0
  648. package/src/math/MathUtils.js +751 -0
  649. package/src/math/Matrix2.js +128 -0
  650. package/src/math/Matrix3.js +617 -0
  651. package/src/math/Matrix4.js +1314 -0
  652. package/src/math/Plane.js +368 -0
  653. package/src/math/Quaternion.js +918 -0
  654. package/src/math/Ray.js +655 -0
  655. package/src/math/Sphere.js +420 -0
  656. package/src/math/Spherical.js +147 -0
  657. package/src/math/SphericalHarmonics3.js +341 -0
  658. package/src/math/Triangle.js +539 -0
  659. package/src/math/Vector2.js +870 -0
  660. package/src/math/Vector3.js +1263 -0
  661. package/src/math/Vector4.js +1067 -0
  662. package/src/math/interpolants/BezierInterpolant.js +108 -0
  663. package/src/math/interpolants/CubicInterpolant.js +159 -0
  664. package/src/math/interpolants/DiscreteInterpolant.js +34 -0
  665. package/src/math/interpolants/LinearInterpolant.js +51 -0
  666. package/src/math/interpolants/QuaternionLinearInterpolant.js +48 -0
  667. package/src/nodes/Nodes.js +166 -0
  668. package/src/nodes/TSL.js +173 -0
  669. package/src/nodes/accessors/AccessorsUtils.js +53 -0
  670. package/src/nodes/accessors/Arrays.js +68 -0
  671. package/src/nodes/accessors/BatchNode.js +163 -0
  672. package/src/nodes/accessors/Bitangent.js +82 -0
  673. package/src/nodes/accessors/BufferAttributeNode.js +432 -0
  674. package/src/nodes/accessors/BufferNode.js +128 -0
  675. package/src/nodes/accessors/BuiltinNode.js +63 -0
  676. package/src/nodes/accessors/Camera.js +403 -0
  677. package/src/nodes/accessors/ClippingNode.js +255 -0
  678. package/src/nodes/accessors/CubeTextureNode.js +215 -0
  679. package/src/nodes/accessors/InstanceNode.js +349 -0
  680. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  681. package/src/nodes/accessors/Lights.js +139 -0
  682. package/src/nodes/accessors/MaterialNode.js +783 -0
  683. package/src/nodes/accessors/MaterialProperties.js +56 -0
  684. package/src/nodes/accessors/MaterialReferenceNode.js +84 -0
  685. package/src/nodes/accessors/ModelNode.js +184 -0
  686. package/src/nodes/accessors/ModelViewProjectionNode.js +13 -0
  687. package/src/nodes/accessors/MorphNode.js +310 -0
  688. package/src/nodes/accessors/Normal.js +243 -0
  689. package/src/nodes/accessors/Object3DNode.js +268 -0
  690. package/src/nodes/accessors/PointUVNode.js +55 -0
  691. package/src/nodes/accessors/Position.js +122 -0
  692. package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
  693. package/src/nodes/accessors/ReferenceNode.js +424 -0
  694. package/src/nodes/accessors/ReflectVector.js +36 -0
  695. package/src/nodes/accessors/RendererReferenceNode.js +78 -0
  696. package/src/nodes/accessors/SceneProperties.js +47 -0
  697. package/src/nodes/accessors/SkinningNode.js +328 -0
  698. package/src/nodes/accessors/StorageBufferNode.js +405 -0
  699. package/src/nodes/accessors/StorageTextureNode.js +295 -0
  700. package/src/nodes/accessors/Tangent.js +60 -0
  701. package/src/nodes/accessors/TangentUtils.js +46 -0
  702. package/src/nodes/accessors/Texture3DNode.js +196 -0
  703. package/src/nodes/accessors/TextureBicubic.js +92 -0
  704. package/src/nodes/accessors/TextureNode.js +971 -0
  705. package/src/nodes/accessors/TextureSizeNode.js +77 -0
  706. package/src/nodes/accessors/UV.js +11 -0
  707. package/src/nodes/accessors/UniformArrayNode.js +350 -0
  708. package/src/nodes/accessors/UserDataNode.js +76 -0
  709. package/src/nodes/accessors/VelocityNode.js +224 -0
  710. package/src/nodes/accessors/VertexColorNode.js +109 -0
  711. package/src/nodes/code/CodeNode.js +181 -0
  712. package/src/nodes/code/ExpressionNode.js +68 -0
  713. package/src/nodes/code/FunctionCallNode.js +187 -0
  714. package/src/nodes/code/FunctionNode.js +182 -0
  715. package/src/nodes/core/ArrayNode.js +174 -0
  716. package/src/nodes/core/AssignNode.js +202 -0
  717. package/src/nodes/core/AttributeNode.js +168 -0
  718. package/src/nodes/core/BypassNode.js +93 -0
  719. package/src/nodes/core/ConstNode.js +67 -0
  720. package/src/nodes/core/ContextNode.js +283 -0
  721. package/src/nodes/core/IndexNode.js +165 -0
  722. package/src/nodes/core/InputNode.js +136 -0
  723. package/src/nodes/core/InspectorNode.js +128 -0
  724. package/src/nodes/core/IsolateNode.js +133 -0
  725. package/src/nodes/core/LightingModel.js +77 -0
  726. package/src/nodes/core/MRTNode.js +196 -0
  727. package/src/nodes/core/Node.js +1180 -0
  728. package/src/nodes/core/NodeAttribute.js +53 -0
  729. package/src/nodes/core/NodeBuilder.js +3299 -0
  730. package/src/nodes/core/NodeCache.js +75 -0
  731. package/src/nodes/core/NodeCode.js +46 -0
  732. package/src/nodes/core/NodeError.js +28 -0
  733. package/src/nodes/core/NodeFrame.js +314 -0
  734. package/src/nodes/core/NodeFunction.js +69 -0
  735. package/src/nodes/core/NodeFunctionInput.js +61 -0
  736. package/src/nodes/core/NodeParser.js +23 -0
  737. package/src/nodes/core/NodeUniform.js +91 -0
  738. package/src/nodes/core/NodeUtils.js +408 -0
  739. package/src/nodes/core/NodeVar.js +60 -0
  740. package/src/nodes/core/NodeVarying.js +63 -0
  741. package/src/nodes/core/OutputStructNode.js +105 -0
  742. package/src/nodes/core/ParameterNode.js +94 -0
  743. package/src/nodes/core/PropertyNode.js +367 -0
  744. package/src/nodes/core/StackNode.js +426 -0
  745. package/src/nodes/core/StackTrace.js +139 -0
  746. package/src/nodes/core/StructNode.js +134 -0
  747. package/src/nodes/core/StructType.js +13 -0
  748. package/src/nodes/core/StructTypeNode.js +148 -0
  749. package/src/nodes/core/SubBuildNode.js +89 -0
  750. package/src/nodes/core/TempNode.js +88 -0
  751. package/src/nodes/core/UniformGroupNode.js +167 -0
  752. package/src/nodes/core/UniformNode.js +259 -0
  753. package/src/nodes/core/VarNode.js +367 -0
  754. package/src/nodes/core/VaryingNode.js +210 -0
  755. package/src/nodes/core/constants.js +68 -0
  756. package/src/nodes/display/BlendModes.js +171 -0
  757. package/src/nodes/display/BumpMapNode.js +117 -0
  758. package/src/nodes/display/ColorAdjustment.js +158 -0
  759. package/src/nodes/display/ColorSpaceFunctions.js +54 -0
  760. package/src/nodes/display/ColorSpaceNode.js +164 -0
  761. package/src/nodes/display/FrontFacingNode.js +102 -0
  762. package/src/nodes/display/NormalMapNode.js +153 -0
  763. package/src/nodes/display/PassNode.js +1055 -0
  764. package/src/nodes/display/RenderOutputNode.js +150 -0
  765. package/src/nodes/display/ScreenNode.js +292 -0
  766. package/src/nodes/display/ToneMappingFunctions.js +242 -0
  767. package/src/nodes/display/ToneMappingNode.js +147 -0
  768. package/src/nodes/display/ToonOutlinePassNode.js +191 -0
  769. package/src/nodes/display/ViewportDepthNode.js +342 -0
  770. package/src/nodes/display/ViewportDepthTextureNode.js +63 -0
  771. package/src/nodes/display/ViewportSharedTextureNode.js +73 -0
  772. package/src/nodes/display/ViewportTextureNode.js +256 -0
  773. package/src/nodes/fog/Fog.js +97 -0
  774. package/src/nodes/functions/BSDF/BRDF_GGX.js +55 -0
  775. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  776. package/src/nodes/functions/BSDF/BRDF_Lambert.js +9 -0
  777. package/src/nodes/functions/BSDF/BRDF_Sheen.js +57 -0
  778. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  779. package/src/nodes/functions/BSDF/D_GGX.js +23 -0
  780. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
  781. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
  782. package/src/nodes/functions/BSDF/F_Schlick.js +16 -0
  783. package/src/nodes/functions/BSDF/LTC.js +175 -0
  784. package/src/nodes/functions/BSDF/Schlick_to_F0.js +21 -0
  785. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +26 -0
  786. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
  787. package/src/nodes/functions/BasicLightingModel.js +100 -0
  788. package/src/nodes/functions/PhongLightingModel.js +99 -0
  789. package/src/nodes/functions/PhysicalLightingModel.js +878 -0
  790. package/src/nodes/functions/ShadowMaskModel.js +58 -0
  791. package/src/nodes/functions/ToonLightingModel.js +70 -0
  792. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  793. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  794. package/src/nodes/functions/material/getGeometryRoughness.js +19 -0
  795. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  796. package/src/nodes/functions/material/getRoughness.js +18 -0
  797. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  798. package/src/nodes/geometry/RangeNode.js +210 -0
  799. package/src/nodes/gpgpu/AtomicFunctionNode.js +274 -0
  800. package/src/nodes/gpgpu/BarrierNode.js +98 -0
  801. package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
  802. package/src/nodes/gpgpu/ComputeNode.js +310 -0
  803. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  804. package/src/nodes/gpgpu/WorkgroupInfoNode.js +234 -0
  805. package/src/nodes/lighting/AONode.js +45 -0
  806. package/src/nodes/lighting/AmbientLightNode.js +35 -0
  807. package/src/nodes/lighting/AnalyticLightNode.js +309 -0
  808. package/src/nodes/lighting/BasicEnvironmentNode.js +49 -0
  809. package/src/nodes/lighting/BasicLightMapNode.js +49 -0
  810. package/src/nodes/lighting/DirectionalLightNode.js +39 -0
  811. package/src/nodes/lighting/EnvironmentNode.js +178 -0
  812. package/src/nodes/lighting/HemisphereLightNode.js +87 -0
  813. package/src/nodes/lighting/IESSpotLightNode.js +49 -0
  814. package/src/nodes/lighting/IrradianceNode.js +44 -0
  815. package/src/nodes/lighting/LightProbeNode.js +73 -0
  816. package/src/nodes/lighting/LightUtils.js +25 -0
  817. package/src/nodes/lighting/LightingContextNode.js +115 -0
  818. package/src/nodes/lighting/LightingNode.js +36 -0
  819. package/src/nodes/lighting/LightsNode.js +432 -0
  820. package/src/nodes/lighting/PointLightNode.js +102 -0
  821. package/src/nodes/lighting/PointShadowNode.js +325 -0
  822. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  823. package/src/nodes/lighting/RectAreaLightNode.js +133 -0
  824. package/src/nodes/lighting/ShadowBaseNode.js +81 -0
  825. package/src/nodes/lighting/ShadowFilterNode.js +264 -0
  826. package/src/nodes/lighting/ShadowNode.js +889 -0
  827. package/src/nodes/lighting/SpotLightNode.js +168 -0
  828. package/src/nodes/materialx/DISCLAIMER.md +199 -0
  829. package/src/nodes/materialx/MaterialXNodes.js +197 -0
  830. package/src/nodes/materialx/lib/mx_hsv.js +127 -0
  831. package/src/nodes/materialx/lib/mx_noise.js +1491 -0
  832. package/src/nodes/materialx/lib/mx_transform_color.js +23 -0
  833. package/src/nodes/math/BitcastNode.js +156 -0
  834. package/src/nodes/math/BitcountNode.js +433 -0
  835. package/src/nodes/math/ConditionalNode.js +245 -0
  836. package/src/nodes/math/Hash.js +21 -0
  837. package/src/nodes/math/MathNode.js +1202 -0
  838. package/src/nodes/math/MathUtils.js +54 -0
  839. package/src/nodes/math/OperatorNode.js +752 -0
  840. package/src/nodes/math/PackFloatNode.js +98 -0
  841. package/src/nodes/math/TriNoise3D.js +71 -0
  842. package/src/nodes/math/UnpackFloatNode.js +96 -0
  843. package/src/nodes/parsers/GLSLNodeFunction.js +168 -0
  844. package/src/nodes/parsers/GLSLNodeParser.js +25 -0
  845. package/src/nodes/pmrem/PMREMNode.js +397 -0
  846. package/src/nodes/pmrem/PMREMUtils.js +397 -0
  847. package/src/nodes/procedural/Checker.js +22 -0
  848. package/src/nodes/shapes/Shapes.js +33 -0
  849. package/src/nodes/tsl/TSLBase.js +36 -0
  850. package/src/nodes/tsl/TSLCore.js +1250 -0
  851. package/src/nodes/utils/ArrayElementNode.js +90 -0
  852. package/src/nodes/utils/ConvertNode.js +100 -0
  853. package/src/nodes/utils/CubeMapNode.js +237 -0
  854. package/src/nodes/utils/DebugNode.js +83 -0
  855. package/src/nodes/utils/Discard.js +24 -0
  856. package/src/nodes/utils/EquirectUV.js +27 -0
  857. package/src/nodes/utils/EventNode.js +148 -0
  858. package/src/nodes/utils/FlipNode.js +106 -0
  859. package/src/nodes/utils/FunctionOverloadingNode.js +170 -0
  860. package/src/nodes/utils/JoinNode.js +117 -0
  861. package/src/nodes/utils/LoopNode.js +349 -0
  862. package/src/nodes/utils/MatcapUV.js +22 -0
  863. package/src/nodes/utils/MaxMipLevelNode.js +103 -0
  864. package/src/nodes/utils/MemberNode.js +120 -0
  865. package/src/nodes/utils/Oscillators.js +41 -0
  866. package/src/nodes/utils/Packing.js +33 -0
  867. package/src/nodes/utils/PostProcessingUtils.js +154 -0
  868. package/src/nodes/utils/RTTNode.js +289 -0
  869. package/src/nodes/utils/ReflectorNode.js +629 -0
  870. package/src/nodes/utils/Remap.js +48 -0
  871. package/src/nodes/utils/RotateNode.js +103 -0
  872. package/src/nodes/utils/SampleNode.js +91 -0
  873. package/src/nodes/utils/SetNode.js +108 -0
  874. package/src/nodes/utils/SplitNode.js +179 -0
  875. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  876. package/src/nodes/utils/SpriteUtils.js +63 -0
  877. package/src/nodes/utils/StorageArrayElementNode.js +143 -0
  878. package/src/nodes/utils/Timer.js +26 -0
  879. package/src/nodes/utils/TriplanarTextures.js +65 -0
  880. package/src/nodes/utils/UVUtils.js +67 -0
  881. package/src/nodes/utils/ViewportUtils.js +26 -0
  882. package/src/objects/BatchedMesh.js +1682 -0
  883. package/src/objects/Bone.js +41 -0
  884. package/src/objects/ClippingGroup.js +68 -0
  885. package/src/objects/Group.js +41 -0
  886. package/src/objects/InstancedMesh.js +422 -0
  887. package/src/objects/LOD.js +329 -0
  888. package/src/objects/Line.js +329 -0
  889. package/src/objects/LineLoop.js +37 -0
  890. package/src/objects/LineSegments.js +74 -0
  891. package/src/objects/Mesh.js +496 -0
  892. package/src/objects/Points.js +228 -0
  893. package/src/objects/Skeleton.js +392 -0
  894. package/src/objects/SkinnedMesh.js +370 -0
  895. package/src/objects/Sprite.js +245 -0
  896. package/src/renderers/WebGL3DRenderTarget.js +48 -0
  897. package/src/renderers/WebGLArrayRenderTarget.js +48 -0
  898. package/src/renderers/WebGLCubeRenderTarget.js +182 -0
  899. package/src/renderers/WebGLRenderTarget.js +34 -0
  900. package/src/renderers/WebGLRenderer.js +3699 -0
  901. package/src/renderers/common/Animation.js +159 -0
  902. package/src/renderers/common/Attributes.js +132 -0
  903. package/src/renderers/common/Backend.js +769 -0
  904. package/src/renderers/common/Background.js +225 -0
  905. package/src/renderers/common/BindGroup.js +46 -0
  906. package/src/renderers/common/Binding.js +71 -0
  907. package/src/renderers/common/Bindings.js +394 -0
  908. package/src/renderers/common/BlendMode.js +143 -0
  909. package/src/renderers/common/Buffer.js +127 -0
  910. package/src/renderers/common/BufferUtils.js +58 -0
  911. package/src/renderers/common/BundleGroup.js +83 -0
  912. package/src/renderers/common/CanvasTarget.js +341 -0
  913. package/src/renderers/common/ChainMap.js +122 -0
  914. package/src/renderers/common/ClippingContext.js +262 -0
  915. package/src/renderers/common/Color4.js +77 -0
  916. package/src/renderers/common/ComputePipeline.js +41 -0
  917. package/src/renderers/common/Constants.js +15 -0
  918. package/src/renderers/common/CubeRenderTarget.js +147 -0
  919. package/src/renderers/common/DataMap.js +90 -0
  920. package/src/renderers/common/Geometries.js +396 -0
  921. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  922. package/src/renderers/common/Info.js +501 -0
  923. package/src/renderers/common/InspectorBase.js +151 -0
  924. package/src/renderers/common/Lighting.js +57 -0
  925. package/src/renderers/common/Pipeline.js +35 -0
  926. package/src/renderers/common/Pipelines.js +498 -0
  927. package/src/renderers/common/PostProcessing.js +28 -0
  928. package/src/renderers/common/ProgrammableStage.js +78 -0
  929. package/src/renderers/common/QuadMesh.js +112 -0
  930. package/src/renderers/common/ReadbackBuffer.js +78 -0
  931. package/src/renderers/common/RenderBundle.js +26 -0
  932. package/src/renderers/common/RenderBundles.js +71 -0
  933. package/src/renderers/common/RenderContext.js +281 -0
  934. package/src/renderers/common/RenderContexts.js +100 -0
  935. package/src/renderers/common/RenderList.js +404 -0
  936. package/src/renderers/common/RenderLists.js +78 -0
  937. package/src/renderers/common/RenderObject.js +915 -0
  938. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  939. package/src/renderers/common/RenderObjects.js +218 -0
  940. package/src/renderers/common/RenderPipeline.js +255 -0
  941. package/src/renderers/common/Renderer.js +3654 -0
  942. package/src/renderers/common/RendererUtils.js +200 -0
  943. package/src/renderers/common/SampledTexture.js +152 -0
  944. package/src/renderers/common/Sampler.js +165 -0
  945. package/src/renderers/common/Storage3DTexture.js +100 -0
  946. package/src/renderers/common/StorageArrayTexture.js +84 -0
  947. package/src/renderers/common/StorageBuffer.js +53 -0
  948. package/src/renderers/common/StorageBufferAttribute.js +46 -0
  949. package/src/renderers/common/StorageInstancedBufferAttribute.js +46 -0
  950. package/src/renderers/common/StorageTexture.js +86 -0
  951. package/src/renderers/common/Textures.js +629 -0
  952. package/src/renderers/common/TimestampQueryPool.js +163 -0
  953. package/src/renderers/common/Uniform.js +375 -0
  954. package/src/renderers/common/UniformBuffer.js +34 -0
  955. package/src/renderers/common/UniformsGroup.js +548 -0
  956. package/src/renderers/common/XRManager.js +1684 -0
  957. package/src/renderers/common/XRRenderTarget.js +91 -0
  958. package/src/renderers/common/extras/PMREMGenerator.js +1042 -0
  959. package/src/renderers/common/nodes/NodeBuilderState.js +152 -0
  960. package/src/renderers/common/nodes/NodeLibrary.js +196 -0
  961. package/src/renderers/common/nodes/NodeManager.js +983 -0
  962. package/src/renderers/common/nodes/NodeSampledTexture.js +140 -0
  963. package/src/renderers/common/nodes/NodeSampler.js +62 -0
  964. package/src/renderers/common/nodes/NodeStorageBuffer.js +72 -0
  965. package/src/renderers/common/nodes/NodeUniform.js +418 -0
  966. package/src/renderers/common/nodes/NodeUniformBuffer.js +105 -0
  967. package/src/renderers/common/nodes/NodeUniformsGroup.js +51 -0
  968. package/src/renderers/shaders/DFGLUTData.js +49 -0
  969. package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
  970. package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
  971. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +7 -0
  972. package/src/renderers/shaders/ShaderChunk/alphamap_pars_fragment.glsl.js +7 -0
  973. package/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl.js +16 -0
  974. package/src/renderers/shaders/ShaderChunk/alphatest_pars_fragment.glsl.js +5 -0
  975. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +26 -0
  976. package/src/renderers/shaders/ShaderChunk/aomap_pars_fragment.glsl.js +8 -0
  977. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +49 -0
  978. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
  979. package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +9 -0
  980. package/src/renderers/shaders/ShaderChunk/beginnormal_vertex.glsl.js +9 -0
  981. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +33 -0
  982. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +43 -0
  983. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +7 -0
  984. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +10 -0
  985. package/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js +21 -0
  986. package/src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl.js +78 -0
  987. package/src/renderers/shaders/ShaderChunk/clipping_planes_pars_fragment.glsl.js +9 -0
  988. package/src/renderers/shaders/ShaderChunk/clipping_planes_pars_vertex.glsl.js +7 -0
  989. package/src/renderers/shaders/ShaderChunk/clipping_planes_vertex.glsl.js +7 -0
  990. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +7 -0
  991. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +7 -0
  992. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +7 -0
  993. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +29 -0
  994. package/src/renderers/shaders/ShaderChunk/colorspace_fragment.glsl.js +3 -0
  995. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +15 -0
  996. package/src/renderers/shaders/ShaderChunk/common.glsl.js +125 -0
  997. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +186 -0
  998. package/src/renderers/shaders/ShaderChunk/default_fragment.glsl.js +5 -0
  999. package/src/renderers/shaders/ShaderChunk/default_vertex.glsl.js +5 -0
  1000. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +63 -0
  1001. package/src/renderers/shaders/ShaderChunk/displacementmap_pars_vertex.glsl.js +9 -0
  1002. package/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js +7 -0
  1003. package/src/renderers/shaders/ShaderChunk/dithering_fragment.glsl.js +7 -0
  1004. package/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js +20 -0
  1005. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +17 -0
  1006. package/src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl.js +7 -0
  1007. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +14 -0
  1008. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +58 -0
  1009. package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +21 -0
  1010. package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +22 -0
  1011. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +69 -0
  1012. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +37 -0
  1013. package/src/renderers/shaders/ShaderChunk/fog_fragment.glsl.js +17 -0
  1014. package/src/renderers/shaders/ShaderChunk/fog_pars_fragment.glsl.js +19 -0
  1015. package/src/renderers/shaders/ShaderChunk/fog_pars_vertex.glsl.js +7 -0
  1016. package/src/renderers/shaders/ShaderChunk/fog_vertex.glsl.js +7 -0
  1017. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +27 -0
  1018. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +120 -0
  1019. package/src/renderers/shaders/ShaderChunk/iridescence_pars_fragment.glsl.js +14 -0
  1020. package/src/renderers/shaders/ShaderChunk/lightmap_pars_fragment.glsl.js +8 -0
  1021. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  1022. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +213 -0
  1023. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +19 -0
  1024. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +44 -0
  1025. package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
  1026. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +28 -0
  1027. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +216 -0
  1028. package/src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl.js +7 -0
  1029. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +32 -0
  1030. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +161 -0
  1031. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +656 -0
  1032. package/src/renderers/shaders/ShaderChunk/lights_toon_fragment.glsl.js +4 -0
  1033. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +26 -0
  1034. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +9 -0
  1035. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +9 -0
  1036. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +8 -0
  1037. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +8 -0
  1038. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +17 -0
  1039. package/src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl.js +7 -0
  1040. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +27 -0
  1041. package/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js +27 -0
  1042. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +12 -0
  1043. package/src/renderers/shaders/ShaderChunk/metalnessmap_pars_fragment.glsl.js +7 -0
  1044. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +24 -0
  1045. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +14 -0
  1046. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +16 -0
  1047. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +26 -0
  1048. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +16 -0
  1049. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +76 -0
  1050. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +40 -0
  1051. package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +14 -0
  1052. package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +14 -0
  1053. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +14 -0
  1054. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +43 -0
  1055. package/src/renderers/shaders/ShaderChunk/opaque_fragment.glsl.js +11 -0
  1056. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +116 -0
  1057. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +7 -0
  1058. package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +19 -0
  1059. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -0
  1060. package/src/renderers/shaders/ShaderChunk/roughnessmap_pars_fragment.glsl.js +7 -0
  1061. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +376 -0
  1062. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +71 -0
  1063. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +78 -0
  1064. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +66 -0
  1065. package/src/renderers/shaders/ShaderChunk/skinbase_vertex.glsl.js +10 -0
  1066. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +25 -0
  1067. package/src/renderers/shaders/ShaderChunk/skinning_vertex.glsl.js +15 -0
  1068. package/src/renderers/shaders/ShaderChunk/skinnormal_vertex.glsl.js +20 -0
  1069. package/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js +14 -0
  1070. package/src/renderers/shaders/ShaderChunk/specularmap_pars_fragment.glsl.js +7 -0
  1071. package/src/renderers/shaders/ShaderChunk/tonemapping_fragment.glsl.js +7 -0
  1072. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +200 -0
  1073. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +36 -0
  1074. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +235 -0
  1075. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +119 -0
  1076. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +145 -0
  1077. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +122 -0
  1078. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +21 -0
  1079. package/src/renderers/shaders/ShaderChunk.js +272 -0
  1080. package/src/renderers/shaders/ShaderLib/background.glsl.js +40 -0
  1081. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  1082. package/src/renderers/shaders/ShaderLib/cube.glsl.js +36 -0
  1083. package/src/renderers/shaders/ShaderLib/depth.glsl.js +117 -0
  1084. package/src/renderers/shaders/ShaderLib/distance.glsl.js +77 -0
  1085. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +35 -0
  1086. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +76 -0
  1087. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +116 -0
  1088. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +126 -0
  1089. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +112 -0
  1090. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +86 -0
  1091. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +128 -0
  1092. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +224 -0
  1093. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +118 -0
  1094. package/src/renderers/shaders/ShaderLib/points.glsl.js +87 -0
  1095. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +58 -0
  1096. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +79 -0
  1097. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +51 -0
  1098. package/src/renderers/shaders/ShaderLib.js +362 -0
  1099. package/src/renderers/shaders/UniformsLib.js +234 -0
  1100. package/src/renderers/shaders/UniformsUtils.js +154 -0
  1101. package/src/renderers/webgl/WebGLAnimation.js +54 -0
  1102. package/src/renderers/webgl/WebGLAttributes.js +237 -0
  1103. package/src/renderers/webgl/WebGLBackground.js +303 -0
  1104. package/src/renderers/webgl/WebGLBindingStates.js +666 -0
  1105. package/src/renderers/webgl/WebGLBufferRenderer.js +57 -0
  1106. package/src/renderers/webgl/WebGLCapabilities.js +150 -0
  1107. package/src/renderers/webgl/WebGLClipping.js +171 -0
  1108. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  1109. package/src/renderers/webgl/WebGLExtensions.js +61 -0
  1110. package/src/renderers/webgl/WebGLGeometries.js +186 -0
  1111. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +68 -0
  1112. package/src/renderers/webgl/WebGLInfo.js +73 -0
  1113. package/src/renderers/webgl/WebGLLights.js +584 -0
  1114. package/src/renderers/webgl/WebGLMaterials.js +602 -0
  1115. package/src/renderers/webgl/WebGLMorphtargets.js +168 -0
  1116. package/src/renderers/webgl/WebGLObjects.js +94 -0
  1117. package/src/renderers/webgl/WebGLOutput.js +270 -0
  1118. package/src/renderers/webgl/WebGLProgram.js +1031 -0
  1119. package/src/renderers/webgl/WebGLPrograms.js +679 -0
  1120. package/src/renderers/webgl/WebGLProperties.js +55 -0
  1121. package/src/renderers/webgl/WebGLRenderLists.js +253 -0
  1122. package/src/renderers/webgl/WebGLRenderStates.js +124 -0
  1123. package/src/renderers/webgl/WebGLShader.js +12 -0
  1124. package/src/renderers/webgl/WebGLShaderCache.js +124 -0
  1125. package/src/renderers/webgl/WebGLShadowMap.js +600 -0
  1126. package/src/renderers/webgl/WebGLState.js +1370 -0
  1127. package/src/renderers/webgl/WebGLTextures.js +2506 -0
  1128. package/src/renderers/webgl/WebGLUniforms.js +1203 -0
  1129. package/src/renderers/webgl/WebGLUniformsGroups.js +413 -0
  1130. package/src/renderers/webgl/WebGLUtils.js +217 -0
  1131. package/src/renderers/webgl-fallback/WebGLBackend.js +2783 -0
  1132. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +99 -0
  1133. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +1676 -0
  1134. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +359 -0
  1135. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +89 -0
  1136. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +13 -0
  1137. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +83 -0
  1138. package/src/renderers/webgl-fallback/utils/WebGLState.js +1361 -0
  1139. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1324 -0
  1140. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +396 -0
  1141. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +317 -0
  1142. package/src/renderers/webgpu/WebGPUBackend.js +2602 -0
  1143. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +69 -0
  1144. package/src/renderers/webgpu/WebGPURenderer.js +107 -0
  1145. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +66 -0
  1146. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +100 -0
  1147. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +2523 -0
  1148. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +187 -0
  1149. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +25 -0
  1150. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +522 -0
  1151. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +642 -0
  1152. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  1153. package/src/renderers/webgpu/utils/WebGPUConstants.js +354 -0
  1154. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +846 -0
  1155. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +389 -0
  1156. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1673 -0
  1157. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +310 -0
  1158. package/src/renderers/webgpu/utils/WebGPUUtils.js +269 -0
  1159. package/src/renderers/webxr/WebXRController.js +440 -0
  1160. package/src/renderers/webxr/WebXRDepthSensing.js +155 -0
  1161. package/src/renderers/webxr/WebXRManager.js +1103 -0
  1162. package/src/scenes/Fog.js +98 -0
  1163. package/src/scenes/FogExp2.js +86 -0
  1164. package/src/scenes/Scene.js +165 -0
  1165. package/src/textures/CanvasTexture.js +45 -0
  1166. package/src/textures/CompressedArrayTexture.js +89 -0
  1167. package/src/textures/CompressedCubeTexture.js +48 -0
  1168. package/src/textures/CompressedTexture.js +86 -0
  1169. package/src/textures/CubeDepthTexture.js +76 -0
  1170. package/src/textures/CubeTexture.js +81 -0
  1171. package/src/textures/Data3DTexture.js +112 -0
  1172. package/src/textures/DataArrayTexture.js +134 -0
  1173. package/src/textures/DataTexture.js +87 -0
  1174. package/src/textures/DepthTexture.js +104 -0
  1175. package/src/textures/ExternalTexture.js +56 -0
  1176. package/src/textures/FramebufferTexture.js +85 -0
  1177. package/src/textures/HTMLTexture.js +74 -0
  1178. package/src/textures/Source.js +230 -0
  1179. package/src/textures/Texture.js +812 -0
  1180. package/src/textures/VideoFrameTexture.js +72 -0
  1181. package/src/textures/VideoTexture.js +127 -0
  1182. package/src/utils.js +493 -0
@@ -0,0 +1,1676 @@
1
+ import { GLSLNodeParser, NodeBuilder, TextureNode, vectorComponents, CodeNode } from '../../../nodes/Nodes.js';
2
+
3
+ import NodeUniformBuffer from '../../common/nodes/NodeUniformBuffer.js';
4
+ import NodeUniformsGroup from '../../common/nodes/NodeUniformsGroup.js';
5
+
6
+ import { NodeSampledTexture, NodeSampledCubeTexture, NodeSampledTexture3D } from '../../common/nodes/NodeSampledTexture.js';
7
+
8
+ import { NoColorSpace, ByteType, ShortType, RGBAIntegerFormat, RGBIntegerFormat, RedIntegerFormat, RGIntegerFormat, UnsignedByteType, UnsignedIntType, UnsignedShortType, RedFormat, RGFormat, IntType, RGBFormat, RGBAFormat, FloatType } from '../../../constants.js';
9
+ import { DataTexture } from '../../../textures/DataTexture.js';
10
+ import { error } from '../../../utils.js';
11
+
12
+ const glslPolyfills = {
13
+ bitcast_int_uint: new CodeNode( /* glsl */'uint tsl_bitcast_int_to_uint ( int x ) { return floatBitsToUint( intBitsToFloat ( x ) ); }' ),
14
+ bitcast_uint_int: new CodeNode( /* glsl */'uint tsl_bitcast_uint_to_int ( uint x ) { return floatBitsToInt( uintBitsToFloat ( x ) ); }' )
15
+ };
16
+
17
+ const glslMethods = {
18
+ textureDimensions: 'textureSize',
19
+ equals: 'equal',
20
+ bitcast_float_int: 'floatBitsToInt',
21
+ bitcast_int_float: 'intBitsToFloat',
22
+ bitcast_uint_float: 'uintBitsToFloat',
23
+ bitcast_float_uint: 'floatBitsToUint',
24
+ bitcast_uint_int: 'tsl_bitcast_uint_to_int',
25
+ bitcast_int_uint: 'tsl_bitcast_int_to_uint',
26
+ floatpack_snorm_2x16: 'packSnorm2x16',
27
+ floatpack_unorm_2x16: 'packUnorm2x16',
28
+ floatpack_float16_2x16: 'packHalf2x16',
29
+ floatunpack_snorm_2x16: 'unpackSnorm2x16',
30
+ floatunpack_unorm_2x16: 'unpackUnorm2x16',
31
+ floatunpack_float16_2x16: 'unpackHalf2x16'
32
+ };
33
+
34
+ const precisionLib = {
35
+ low: 'lowp',
36
+ medium: 'mediump',
37
+ high: 'highp'
38
+ };
39
+
40
+ const supports = {
41
+ swizzleAssign: true,
42
+ storageBuffer: false
43
+ };
44
+
45
+ const interpolationTypeMap = {
46
+ perspective: 'smooth',
47
+ linear: 'noperspective'
48
+ };
49
+
50
+ const interpolationModeMap = {
51
+ 'centroid': 'centroid'
52
+ };
53
+
54
+ const defaultPrecisions = `
55
+ precision highp float;
56
+ precision highp int;
57
+ precision highp sampler2D;
58
+ precision highp sampler3D;
59
+ precision highp samplerCube;
60
+ precision highp sampler2DArray;
61
+
62
+ precision highp usampler2D;
63
+ precision highp usampler3D;
64
+ precision highp usamplerCube;
65
+ precision highp usampler2DArray;
66
+
67
+ precision highp isampler2D;
68
+ precision highp isampler3D;
69
+ precision highp isamplerCube;
70
+ precision highp isampler2DArray;
71
+
72
+ precision highp sampler2DShadow;
73
+ precision highp sampler2DArrayShadow;
74
+ precision highp samplerCubeShadow;
75
+ `;
76
+
77
+ /**
78
+ * A node builder targeting GLSL.
79
+ *
80
+ * This module generates GLSL shader code from node materials and also
81
+ * generates the respective bindings and vertex buffer definitions. These
82
+ * data are later used by the renderer to create render and compute pipelines
83
+ * for render objects.
84
+ *
85
+ * @augments NodeBuilder
86
+ */
87
+ class GLSLNodeBuilder extends NodeBuilder {
88
+
89
+ /**
90
+ * Constructs a new GLSL node builder renderer.
91
+ *
92
+ * @param {Object3D} object - The 3D object.
93
+ * @param {Renderer} renderer - The renderer.
94
+ */
95
+ constructor( object, renderer ) {
96
+
97
+ super( object, renderer, new GLSLNodeParser() );
98
+
99
+ /**
100
+ * A dictionary holds for each shader stage ('vertex', 'fragment', 'compute')
101
+ * another dictionary which manages UBOs per group ('render','frame','object').
102
+ *
103
+ * @type {Object<string,Object<string,NodeUniformsGroup>>}
104
+ */
105
+ this.uniformGroups = {};
106
+
107
+ /**
108
+ * An array that holds objects defining the varying and attribute data in
109
+ * context of Transform Feedback.
110
+ *
111
+ * @type {Array<Object<string,AttributeNode|string>>}
112
+ */
113
+ this.transforms = [];
114
+
115
+ /**
116
+ * A dictionary that holds for each shader stage a Map of used extensions.
117
+ *
118
+ * @type {Object<string,Map<string,Object>>}
119
+ */
120
+ this.extensions = {};
121
+
122
+ /**
123
+ * A dictionary that holds for each shader stage an Array of used builtins.
124
+ *
125
+ * @type {Object<string,Array<string>>}
126
+ */
127
+ this.builtins = { vertex: [], fragment: [], compute: [] };
128
+
129
+ }
130
+
131
+ /**
132
+ * Checks if the given texture requires a manual conversion to the working color space.
133
+ *
134
+ * @param {Texture} texture - The texture to check.
135
+ * @return {boolean} Whether the given texture requires a conversion to working color space or not.
136
+ */
137
+ needsToWorkingColorSpace( texture ) {
138
+
139
+ return texture.isVideoTexture === true && texture.colorSpace !== NoColorSpace;
140
+
141
+ }
142
+
143
+ /**
144
+ * Includes the given method name into the current
145
+ * function node.
146
+ *
147
+ * @private
148
+ * @param {string} name - The method name to include.
149
+ * @return {CodeNode} The respective code node.
150
+ */
151
+ _include( name ) {
152
+
153
+ const codeNode = glslPolyfills[ name ];
154
+ codeNode.build( this );
155
+
156
+ this.addInclude( codeNode );
157
+
158
+ return codeNode;
159
+
160
+ }
161
+
162
+ /**
163
+ * Returns the native shader method name for a given generic name.
164
+ *
165
+ * @param {string} method - The method name to resolve.
166
+ * @return {string} The resolved GLSL method name.
167
+ */
168
+ getMethod( method ) {
169
+
170
+ if ( glslPolyfills[ method ] !== undefined ) {
171
+
172
+ this._include( method );
173
+
174
+ }
175
+
176
+ return glslMethods[ method ] || method;
177
+
178
+ }
179
+
180
+ /**
181
+ * Returns the bitcast method name for a given input and outputType.
182
+ *
183
+ * @param {string} type - The output type to bitcast to.
184
+ * @param {string} inputType - The input type of the.
185
+ * @return {string} The resolved WGSL bitcast invocation.
186
+ */
187
+ getBitcastMethod( type, inputType ) {
188
+
189
+ return this.getMethod( `bitcast_${ inputType }_${ type }` );
190
+
191
+ }
192
+
193
+ /**
194
+ * Returns the float packing method name for a given numeric encoding.
195
+ *
196
+ * @param {string} encoding - The numeric encoding that describes how the float values are mapped to the integer range.
197
+ * @returns {string} The resolved GLSL float packing method name.
198
+ */
199
+ getFloatPackingMethod( encoding ) {
200
+
201
+ return this.getMethod( `floatpack_${ encoding }_2x16` );
202
+
203
+ }
204
+
205
+ /**
206
+ * Returns the float unpacking method name for a given numeric encoding.
207
+ *
208
+ * @param {string} encoding - The numeric encoding that describes how the integer values are mapped to the float range.
209
+ * @returns {string} The resolved GLSL float unpacking method name.
210
+ */
211
+ getFloatUnpackingMethod( encoding ) {
212
+
213
+ return this.getMethod( `floatunpack_${ encoding }_2x16` );
214
+
215
+ }
216
+
217
+ /**
218
+ * Returns the native snippet for a ternary operation.
219
+ *
220
+ * @param {string} condSnippet - The condition determining which expression gets resolved.
221
+ * @param {string} ifSnippet - The expression to resolve to if the condition is true.
222
+ * @param {string} elseSnippet - The expression to resolve to if the condition is false.
223
+ * @return {string} The resolved method name.
224
+ */
225
+ getTernary( condSnippet, ifSnippet, elseSnippet ) {
226
+
227
+ return `${condSnippet} ? ${ifSnippet} : ${elseSnippet}`;
228
+
229
+ }
230
+
231
+ /**
232
+ * Returns the output struct name. Not relevant for GLSL.
233
+ *
234
+ * @return {string}
235
+ */
236
+ getOutputStructName() {
237
+
238
+ return '';
239
+
240
+ }
241
+
242
+ /**
243
+ * Builds the given shader node.
244
+ *
245
+ * @param {ShaderNodeInternal} shaderNode - The shader node.
246
+ * @return {string} The GLSL function code.
247
+ */
248
+ buildFunctionCode( shaderNode ) {
249
+
250
+ const layout = shaderNode.layout;
251
+ const flowData = this.flowShaderNode( shaderNode );
252
+
253
+ const parameters = [];
254
+
255
+ for ( const input of layout.inputs ) {
256
+
257
+ parameters.push( this.getType( input.type ) + ' ' + input.name );
258
+
259
+ }
260
+
261
+ //
262
+
263
+ const code = `${ this.getType( layout.type ) } ${ layout.name }( ${ parameters.join( ', ' ) } ) {
264
+
265
+ ${ flowData.vars }
266
+
267
+ ${ flowData.code }
268
+ return ${ flowData.result };
269
+
270
+ }`;
271
+
272
+ //
273
+
274
+ return code;
275
+
276
+ }
277
+
278
+ /**
279
+ * Setups the Pixel Buffer Object (PBO) for the given storage
280
+ * buffer node.
281
+ *
282
+ * @param {StorageBufferNode} storageBufferNode - The storage buffer node.
283
+ */
284
+ setupPBO( storageBufferNode ) {
285
+
286
+ const attribute = storageBufferNode.value;
287
+
288
+ if ( attribute.pbo === undefined ) {
289
+
290
+ const originalArray = attribute.array;
291
+ const numElements = attribute.count * attribute.itemSize;
292
+
293
+ const { itemSize } = attribute;
294
+
295
+ const isInteger = attribute.array.constructor.name.toLowerCase().includes( 'int' );
296
+
297
+ let format = isInteger ? RedIntegerFormat : RedFormat;
298
+
299
+ if ( itemSize === 2 ) {
300
+
301
+ format = isInteger ? RGIntegerFormat : RGFormat;
302
+
303
+ } else if ( itemSize === 3 ) {
304
+
305
+ format = isInteger ? RGBIntegerFormat : RGBFormat;
306
+
307
+ } else if ( itemSize === 4 ) {
308
+
309
+ format = isInteger ? RGBAIntegerFormat : RGBAFormat;
310
+
311
+ }
312
+
313
+ const typeMap = {
314
+ Float32Array: FloatType,
315
+ Uint8Array: UnsignedByteType,
316
+ Uint16Array: UnsignedShortType,
317
+ Uint32Array: UnsignedIntType,
318
+ Int8Array: ByteType,
319
+ Int16Array: ShortType,
320
+ Int32Array: IntType,
321
+ Uint8ClampedArray: UnsignedByteType,
322
+ };
323
+
324
+ const width = Math.pow( 2, Math.ceil( Math.log2( Math.sqrt( numElements / itemSize ) ) ) );
325
+ let height = Math.ceil( ( numElements / itemSize ) / width );
326
+ if ( width * height * itemSize < numElements ) height ++; // Ensure enough space
327
+
328
+ const newSize = width * height * itemSize;
329
+
330
+ const newArray = new originalArray.constructor( newSize );
331
+
332
+ newArray.set( originalArray, 0 );
333
+
334
+ attribute.array = newArray;
335
+
336
+ const pboTexture = new DataTexture( attribute.array, width, height, format, typeMap[ attribute.array.constructor.name ] || FloatType );
337
+ pboTexture.needsUpdate = true;
338
+ pboTexture.isPBOTexture = true;
339
+
340
+ const pbo = new TextureNode( pboTexture, null, null );
341
+ pbo.setPrecision( 'high' );
342
+
343
+ attribute.pboNode = pbo;
344
+ attribute.pbo = pbo.value;
345
+
346
+ this.getUniformFromNode( attribute.pboNode, 'texture', this.shaderStage, this.context.nodeName );
347
+
348
+ }
349
+
350
+ }
351
+
352
+ /**
353
+ * Returns a GLSL snippet that represents the property name of the given node.
354
+ *
355
+ * @param {Node} node - The node.
356
+ * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
357
+ * @return {string} The property name.
358
+ */
359
+ getPropertyName( node, shaderStage = this.shaderStage ) {
360
+
361
+ if ( node.isNodeUniform && node.node.isTextureNode !== true && node.node.isBufferNode !== true ) {
362
+
363
+ return node.name;
364
+
365
+ }
366
+
367
+ return super.getPropertyName( node, shaderStage );
368
+
369
+ }
370
+
371
+ /**
372
+ * Setups the Pixel Buffer Object (PBO) for the given storage
373
+ * buffer node.
374
+ *
375
+ * @param {StorageArrayElementNode} storageArrayElementNode - The storage array element node.
376
+ * @return {string} The property name.
377
+ */
378
+ generatePBO( storageArrayElementNode ) {
379
+
380
+ const { node, indexNode } = storageArrayElementNode;
381
+ const attribute = node.value;
382
+
383
+ if ( this.renderer.backend.has( attribute ) ) {
384
+
385
+ const attributeData = this.renderer.backend.get( attribute );
386
+ attributeData.pbo = attribute.pbo;
387
+
388
+ }
389
+
390
+ const nodeUniform = this.getUniformFromNode( attribute.pboNode, 'texture', this.shaderStage, this.context.nodeName );
391
+ const textureName = this.getPropertyName( nodeUniform );
392
+
393
+ this.increaseUsage( indexNode ); // force cache generate to be used as index in x,y
394
+ const indexSnippet = indexNode.build( this, 'uint' );
395
+
396
+ const elementNodeData = this.getDataFromNode( storageArrayElementNode );
397
+
398
+ let propertyName = elementNodeData.propertyName;
399
+
400
+ if ( propertyName === undefined ) {
401
+
402
+ // property element
403
+
404
+ const nodeVar = this.getVarFromNode( storageArrayElementNode );
405
+
406
+ propertyName = this.getPropertyName( nodeVar );
407
+
408
+ // property size
409
+
410
+ const bufferNodeData = this.getDataFromNode( node );
411
+
412
+ let propertySizeName = bufferNodeData.propertySizeName;
413
+
414
+ if ( propertySizeName === undefined ) {
415
+
416
+ propertySizeName = propertyName + 'Size';
417
+
418
+ this.getVarFromNode( node, propertySizeName, 'uint' );
419
+
420
+ this.addLineFlowCode( `${ propertySizeName } = uint( textureSize( ${ textureName }, 0 ).x )`, storageArrayElementNode );
421
+
422
+ bufferNodeData.propertySizeName = propertySizeName;
423
+
424
+ }
425
+
426
+ //
427
+
428
+ const { itemSize } = attribute;
429
+
430
+ const channel = '.' + vectorComponents.join( '' ).slice( 0, itemSize );
431
+ const uvSnippet = `ivec2(${indexSnippet} % ${ propertySizeName }, ${indexSnippet} / ${ propertySizeName })`;
432
+
433
+ const snippet = this.generateTextureLoad( null, textureName, uvSnippet, '0', null, null );
434
+
435
+ //
436
+
437
+
438
+ let prefix = 'vec4';
439
+
440
+ if ( attribute.pbo.type === UnsignedIntType ) {
441
+
442
+ prefix = 'uvec4';
443
+
444
+ } else if ( attribute.pbo.type === IntType ) {
445
+
446
+ prefix = 'ivec4';
447
+
448
+ }
449
+
450
+ this.addLineFlowCode( `${ propertyName } = ${prefix}(${ snippet })${channel}`, storageArrayElementNode );
451
+
452
+ elementNodeData.propertyName = propertyName;
453
+
454
+ }
455
+
456
+ return propertyName;
457
+
458
+ }
459
+
460
+ /**
461
+ * Generates the GLSL snippet that reads a single texel from a texture without sampling or filtering.
462
+ *
463
+ * @param {?Texture} texture - The texture.
464
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
465
+ * @param {string} uvIndexSnippet - A GLSL snippet that represents texture coordinates used for sampling.
466
+ * @param {?string} levelSnippet - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
467
+ * @param {?string} depthSnippet - A GLSL snippet that represents the 0-based texture array index to sample.
468
+ * @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
469
+ * @return {string} The GLSL snippet.
470
+ */
471
+ generateTextureLoad( texture, textureProperty, uvIndexSnippet, levelSnippet, depthSnippet, offsetSnippet ) {
472
+
473
+ if ( levelSnippet === null ) levelSnippet = '0';
474
+
475
+ let snippet;
476
+
477
+ if ( depthSnippet ) {
478
+
479
+ if ( offsetSnippet ) {
480
+
481
+ snippet = `texelFetchOffset( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), int( ${ levelSnippet } ), ${ offsetSnippet } )`;
482
+
483
+ } else {
484
+
485
+ snippet = `texelFetch( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), int( ${ levelSnippet } ) )`;
486
+
487
+ }
488
+
489
+ } else {
490
+
491
+ if ( offsetSnippet ) {
492
+
493
+ snippet = `texelFetchOffset( ${ textureProperty }, ${ uvIndexSnippet }, int( ${ levelSnippet } ), ${ offsetSnippet } )`;
494
+
495
+ } else {
496
+
497
+ snippet = `texelFetch( ${ textureProperty }, ${ uvIndexSnippet }, int( ${ levelSnippet } ) )`;
498
+
499
+ }
500
+
501
+ }
502
+
503
+ if ( texture !== null && texture.isDepthTexture ) {
504
+
505
+ snippet += '.x';
506
+
507
+ }
508
+
509
+ return snippet;
510
+
511
+ }
512
+
513
+ /**
514
+ * Generates the GLSL snippet for sampling/loading the given texture.
515
+ *
516
+ * @param {Texture} texture - The texture.
517
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
518
+ * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
519
+ * @param {?string} depthSnippet - A GLSL snippet that represents the 0-based texture array index to sample.
520
+ * @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
521
+ * @return {string} The GLSL snippet.
522
+ */
523
+ generateTexture( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet ) {
524
+
525
+ if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
526
+
527
+ if ( texture.isDepthTexture ) {
528
+
529
+ if ( offsetSnippet ) return `textureOffset( ${ textureProperty }, ${ uvSnippet }, ${ offsetSnippet } ).x`;
530
+
531
+ return `texture( ${ textureProperty }, ${ uvSnippet } ).x`;
532
+
533
+ }
534
+
535
+ if ( offsetSnippet ) return `textureOffset( ${ textureProperty }, ${ uvSnippet }, ${ offsetSnippet } )`;
536
+
537
+ return `texture( ${ textureProperty }, ${ uvSnippet } )`;
538
+
539
+ }
540
+
541
+ /**
542
+ * Generates the GLSL snippet when sampling textures with explicit mip level.
543
+ *
544
+ * @param {Texture} texture - The texture.
545
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
546
+ * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
547
+ * @param {string} levelSnippet - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
548
+ * @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
549
+ * @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
550
+ * @return {string} The GLSL snippet.
551
+ */
552
+ generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet ) {
553
+
554
+ if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
555
+
556
+ if ( offsetSnippet ) {
557
+
558
+ return `textureLodOffset( ${ textureProperty }, ${ uvSnippet }, ${ levelSnippet }, ${ offsetSnippet } )`;
559
+
560
+ }
561
+
562
+ return `textureLod( ${ textureProperty }, ${ uvSnippet }, ${ levelSnippet } )`;
563
+
564
+ }
565
+
566
+ /**
567
+ * Generates the GLSL snippet when sampling textures with a bias to the mip level.
568
+ *
569
+ * @param {Texture} texture - The texture.
570
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
571
+ * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
572
+ * @param {string} biasSnippet - A GLSL snippet that represents the bias to apply to the mip level before sampling.
573
+ * @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
574
+ * @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
575
+ * @return {string} The GLSL snippet.
576
+ */
577
+ generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, offsetSnippet ) {
578
+
579
+ if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
580
+
581
+ if ( offsetSnippet ) {
582
+
583
+ return `textureOffset( ${ textureProperty }, ${ uvSnippet }, ${ offsetSnippet }, ${ biasSnippet } )`;
584
+
585
+ }
586
+
587
+ return `texture( ${ textureProperty }, ${ uvSnippet }, ${ biasSnippet } )`;
588
+
589
+ }
590
+
591
+ /**
592
+ * Generates the GLSL snippet for sampling/loading the given texture using explicit gradients.
593
+ *
594
+ * @param {Texture} texture - The texture.
595
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
596
+ * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
597
+ * @param {Array<string>} gradSnippet - An array holding both gradient GLSL snippets.
598
+ * @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
599
+ * @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
600
+ * @return {string} The GLSL snippet.
601
+ */
602
+ generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, offsetSnippet ) {
603
+
604
+ if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
605
+
606
+ if ( offsetSnippet ) {
607
+
608
+ return `textureGradOffset( ${ textureProperty }, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] }, ${ offsetSnippet } )`;
609
+
610
+ }
611
+
612
+ return `textureGrad( ${ textureProperty }, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] } )`;
613
+
614
+ }
615
+
616
+ /**
617
+ * Generates the GLSL snippet for sampling a depth texture and comparing the sampled depth values
618
+ * against a reference value.
619
+ *
620
+ * @param {Texture} texture - The texture.
621
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
622
+ * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
623
+ * @param {string} compareSnippet - A GLSL snippet that represents the reference value.
624
+ * @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
625
+ * @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
626
+ * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
627
+ * @return {string} The GLSL snippet.
628
+ */
629
+ generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {
630
+
631
+ if ( shaderStage === 'fragment' ) {
632
+
633
+ // Cube shadow maps use vec4(direction, compareValue)
634
+ if ( texture.isCubeTexture ) {
635
+
636
+ return `texture( ${ textureProperty }, vec4( ${ uvSnippet }, ${ compareSnippet } ) )`;
637
+
638
+ }
639
+
640
+ if ( depthSnippet ) {
641
+
642
+ if ( offsetSnippet ) {
643
+
644
+ return `textureOffset( ${ textureProperty }, vec4( ${ uvSnippet }, ${ depthSnippet }, ${ compareSnippet } ), ${ offsetSnippet } )`;
645
+
646
+ }
647
+
648
+ return `texture( ${ textureProperty }, vec4( ${ uvSnippet }, ${ depthSnippet }, ${ compareSnippet } ) )`;
649
+
650
+ }
651
+
652
+ if ( offsetSnippet ) {
653
+
654
+ return `textureOffset( ${ textureProperty }, vec3( ${ uvSnippet }, ${ compareSnippet } ), ${ offsetSnippet } )`;
655
+
656
+ }
657
+
658
+ return `texture( ${ textureProperty }, vec3( ${ uvSnippet }, ${ compareSnippet } ) )`;
659
+
660
+ } else {
661
+
662
+ error( `WebGPURenderer: THREE.DepthTexture.compareFunction() does not support ${ shaderStage } shader.` );
663
+
664
+ }
665
+
666
+ }
667
+
668
+ /**
669
+ * Returns the uniforms of the given shader stage as a GLSL string.
670
+ *
671
+ * @param {string} shaderStage - The shader stage.
672
+ * @return {string} The GLSL snippet that defines the uniforms.
673
+ */
674
+ getUniforms( shaderStage ) {
675
+
676
+ const uniforms = this.uniforms[ shaderStage ];
677
+
678
+ const bindingSnippets = [];
679
+ const uniformGroups = {};
680
+
681
+ for ( const uniform of uniforms ) {
682
+
683
+ let snippet = null;
684
+ let group = false;
685
+
686
+ if ( uniform.type === 'texture' || uniform.type === 'texture3D' ) {
687
+
688
+ const texture = uniform.node.value;
689
+
690
+ let typePrefix = '';
691
+
692
+ if ( texture.isDataTexture === true || texture.isData3DTexture === true ) {
693
+
694
+ if ( texture.type === UnsignedIntType ) {
695
+
696
+ typePrefix = 'u';
697
+
698
+ } else if ( texture.type === IntType ) {
699
+
700
+ typePrefix = 'i';
701
+
702
+ }
703
+
704
+ }
705
+
706
+ if ( uniform.type === 'texture3D' && texture.isArrayTexture === false ) {
707
+
708
+ snippet = `${typePrefix}sampler3D ${ uniform.name };`;
709
+
710
+ } else if ( texture.compareFunction ) {
711
+
712
+ if ( texture.isArrayTexture === true ) {
713
+
714
+ snippet = `sampler2DArrayShadow ${ uniform.name };`;
715
+
716
+ } else {
717
+
718
+ snippet = `sampler2DShadow ${ uniform.name };`;
719
+
720
+ }
721
+
722
+ } else if ( texture.isArrayTexture === true || texture.isDataArrayTexture === true || texture.isCompressedArrayTexture === true ) {
723
+
724
+ snippet = `${typePrefix}sampler2DArray ${ uniform.name };`;
725
+
726
+ } else {
727
+
728
+ snippet = `${typePrefix}sampler2D ${ uniform.name };`;
729
+
730
+ }
731
+
732
+ } else if ( uniform.type === 'cubeTexture' ) {
733
+
734
+ snippet = `samplerCube ${ uniform.name };`;
735
+
736
+ } else if ( uniform.type === 'cubeDepthTexture' ) {
737
+
738
+ const texture = uniform.node.value;
739
+
740
+ if ( texture.compareFunction ) {
741
+
742
+ snippet = `samplerCubeShadow ${ uniform.name };`;
743
+
744
+ } else {
745
+
746
+ snippet = `samplerCube ${ uniform.name };`;
747
+
748
+ }
749
+
750
+ } else if ( uniform.type === 'buffer' ) {
751
+
752
+ const bufferNode = uniform.node;
753
+ const bufferType = this.getType( bufferNode.bufferType );
754
+ const bufferCount = bufferNode.bufferCount;
755
+
756
+ const bufferCountSnippet = bufferCount > 0 ? bufferCount : '';
757
+ snippet = `${bufferNode.name} {\n\t${ bufferType } ${ uniform.name }[${ bufferCountSnippet }];\n};\n`;
758
+
759
+ } else {
760
+
761
+ const groupName = uniform.groupNode.name;
762
+
763
+ // Check if this group has already been processed
764
+ if ( uniformGroups[ groupName ] === undefined ) {
765
+
766
+ // Get the shared uniform group that contains uniforms from all stages
767
+ const sharedUniformGroup = this.uniformGroups[ groupName ];
768
+
769
+ if ( sharedUniformGroup !== undefined ) {
770
+
771
+ // Generate snippets for ALL uniforms in this shared group
772
+ const snippets = [];
773
+
774
+ for ( const sharedUniform of sharedUniformGroup.uniforms ) {
775
+
776
+ const type = sharedUniform.getType();
777
+ const vectorType = this.getVectorType( type );
778
+ const precision = sharedUniform.nodeUniform.node.precision;
779
+
780
+ let uniformSnippet = `${ vectorType } ${ sharedUniform.name };`;
781
+
782
+ if ( precision !== null ) {
783
+
784
+ uniformSnippet = precisionLib[ precision ] + ' ' + uniformSnippet;
785
+
786
+ }
787
+
788
+ snippets.push( '\t' + uniformSnippet );
789
+
790
+ }
791
+
792
+ uniformGroups[ groupName ] = snippets;
793
+
794
+ }
795
+
796
+ }
797
+
798
+ group = true;
799
+
800
+ }
801
+
802
+ if ( ! group ) {
803
+
804
+ const precision = uniform.node.precision;
805
+
806
+ if ( precision !== null ) {
807
+
808
+ snippet = precisionLib[ precision ] + ' ' + snippet;
809
+
810
+ }
811
+
812
+ snippet = 'uniform ' + snippet;
813
+
814
+ bindingSnippets.push( snippet );
815
+
816
+ }
817
+
818
+ }
819
+
820
+ let output = '';
821
+
822
+ for ( const name in uniformGroups ) {
823
+
824
+ const groupSnippets = uniformGroups[ name ];
825
+
826
+ output += this._getGLSLUniformStruct( name, groupSnippets.join( '\n' ) ) + '\n';
827
+
828
+ }
829
+
830
+ output += bindingSnippets.join( '\n' );
831
+
832
+ return output;
833
+
834
+ }
835
+
836
+ /**
837
+ * Returns the type for a given buffer attribute.
838
+ *
839
+ * @param {BufferAttribute} attribute - The buffer attribute.
840
+ * @return {string} The type.
841
+ */
842
+ getTypeFromAttribute( attribute ) {
843
+
844
+ let nodeType = super.getTypeFromAttribute( attribute );
845
+
846
+ if ( /^[iu]/.test( nodeType ) && attribute.gpuType !== IntType ) {
847
+
848
+ let dataAttribute = attribute;
849
+
850
+ if ( attribute.isInterleavedBufferAttribute ) dataAttribute = attribute.data;
851
+
852
+ const array = dataAttribute.array;
853
+
854
+ if ( ( array instanceof Uint32Array || array instanceof Int32Array ) === false ) {
855
+
856
+ nodeType = nodeType.slice( 1 );
857
+
858
+ }
859
+
860
+ }
861
+
862
+ return nodeType;
863
+
864
+ }
865
+
866
+ /**
867
+ * Returns the shader attributes of the given shader stage as a GLSL string.
868
+ *
869
+ * @param {string} shaderStage - The shader stage.
870
+ * @return {string} The GLSL snippet that defines the shader attributes.
871
+ */
872
+ getAttributes( shaderStage ) {
873
+
874
+ let snippet = '';
875
+
876
+ if ( shaderStage === 'vertex' || shaderStage === 'compute' ) {
877
+
878
+ const attributes = this.getAttributesArray();
879
+
880
+ let location = 0;
881
+
882
+ for ( const attribute of attributes ) {
883
+
884
+ snippet += `layout( location = ${ location ++ } ) in ${ attribute.type } ${ attribute.name };\n`;
885
+
886
+ }
887
+
888
+ }
889
+
890
+ return snippet;
891
+
892
+ }
893
+
894
+ /**
895
+ * Returns the members of the given struct type node as a GLSL string.
896
+ *
897
+ * @param {StructTypeNode} struct - The struct type node.
898
+ * @return {string} The GLSL snippet that defines the struct members.
899
+ */
900
+ getStructMembers( struct ) {
901
+
902
+ const snippets = [];
903
+
904
+ for ( const member of struct.members ) {
905
+
906
+ snippets.push( `\t${ member.type } ${ member.name };` );
907
+
908
+ }
909
+
910
+ return snippets.join( '\n' );
911
+
912
+ }
913
+
914
+ /**
915
+ * Returns the structs of the given shader stage as a GLSL string.
916
+ *
917
+ * @param {string} shaderStage - The shader stage.
918
+ * @return {string} The GLSL snippet that defines the structs.
919
+ */
920
+ getStructs( shaderStage ) {
921
+
922
+ const snippets = [];
923
+ const structs = this.structs[ shaderStage ];
924
+
925
+ const outputSnippet = [];
926
+
927
+ for ( const struct of structs ) {
928
+
929
+ if ( struct.output ) {
930
+
931
+ for ( const member of struct.members ) {
932
+
933
+ outputSnippet.push( `layout( location = ${ member.index } ) out ${ member.type } ${ member.name };` );
934
+
935
+ }
936
+
937
+ } else {
938
+
939
+ let snippet = 'struct ' + struct.name + ' {\n';
940
+ snippet += this.getStructMembers( struct );
941
+ snippet += '\n};\n';
942
+
943
+ snippets.push( snippet );
944
+
945
+ }
946
+
947
+ }
948
+
949
+ if ( outputSnippet.length === 0 ) {
950
+
951
+ outputSnippet.push( 'layout( location = 0 ) out vec4 fragColor;' );
952
+
953
+ }
954
+
955
+ return '\n' + outputSnippet.join( '\n' ) + '\n\n' + snippets.join( '\n' );
956
+
957
+ }
958
+
959
+ /**
960
+ * Returns the varyings of the given shader stage as a GLSL string.
961
+ *
962
+ * @param {string} shaderStage - The shader stage.
963
+ * @return {string} The GLSL snippet that defines the varyings.
964
+ */
965
+ getVaryings( shaderStage ) {
966
+
967
+ let snippet = '';
968
+
969
+ const varyings = this.varyings;
970
+
971
+ if ( shaderStage === 'vertex' || shaderStage === 'compute' ) {
972
+
973
+ for ( const varying of varyings ) {
974
+
975
+ if ( shaderStage === 'compute' ) varying.needsInterpolation = true;
976
+
977
+ const type = this.getType( varying.type );
978
+
979
+ if ( varying.needsInterpolation ) {
980
+
981
+ if ( varying.interpolationType ) {
982
+
983
+ const interpolationType = interpolationTypeMap[ varying.interpolationType ] || varying.interpolationType;
984
+ const sampling = interpolationModeMap[ varying.interpolationSampling ] || '';
985
+
986
+ snippet += `${ interpolationType } ${ sampling } out ${ type } ${ varying.name };\n`;
987
+
988
+ } else {
989
+
990
+ const flat = type.includes( 'int' ) || type.includes( 'uv' ) || type.includes( 'iv' ) ? 'flat ' : '';
991
+
992
+ snippet += `${ flat }out ${ type } ${ varying.name };\n`;
993
+
994
+ }
995
+
996
+ } else {
997
+
998
+ snippet += `${type} ${varying.name};\n`; // generate variable (no varying required)
999
+
1000
+ }
1001
+
1002
+ }
1003
+
1004
+ } else if ( shaderStage === 'fragment' ) {
1005
+
1006
+ for ( const varying of varyings ) {
1007
+
1008
+ if ( varying.needsInterpolation ) {
1009
+
1010
+ const type = this.getType( varying.type );
1011
+
1012
+ if ( varying.interpolationType ) {
1013
+
1014
+ const interpolationType = interpolationTypeMap[ varying.interpolationType ] || varying.interpolationType;
1015
+ const sampling = interpolationModeMap[ varying.interpolationSampling ] || '';
1016
+
1017
+ snippet += `${ interpolationType } ${ sampling } in ${ type } ${ varying.name };\n`;
1018
+
1019
+
1020
+ } else {
1021
+
1022
+ const flat = type.includes( 'int' ) || type.includes( 'uv' ) || type.includes( 'iv' ) ? 'flat ' : '';
1023
+
1024
+ snippet += `${ flat }in ${ type } ${ varying.name };\n`;
1025
+
1026
+ }
1027
+
1028
+ }
1029
+
1030
+ }
1031
+
1032
+ }
1033
+
1034
+ for ( const builtin of this.builtins[ shaderStage ] ) {
1035
+
1036
+ snippet += `${builtin};\n`;
1037
+
1038
+ }
1039
+
1040
+ return snippet;
1041
+
1042
+ }
1043
+
1044
+ /**
1045
+ * Returns the vertex index builtin.
1046
+ *
1047
+ * @return {string} The vertex index.
1048
+ */
1049
+ getVertexIndex() {
1050
+
1051
+ return 'uint( gl_VertexID )';
1052
+
1053
+ }
1054
+
1055
+ /**
1056
+ * Contextually returns either the vertex stage instance index builtin
1057
+ * or the linearized index of an compute invocation within a grid of workgroups.
1058
+ *
1059
+ * @return {string} The instance index.
1060
+ */
1061
+ getInstanceIndex() {
1062
+
1063
+ return 'uint( gl_InstanceID )';
1064
+
1065
+ }
1066
+
1067
+ /**
1068
+ * Returns a builtin representing the index of an invocation within its workgroup.
1069
+ *
1070
+ * @return {string} The invocation local index.
1071
+ */
1072
+ getInvocationLocalIndex() {
1073
+
1074
+ const workgroupSize = this.object.workgroupSize;
1075
+
1076
+ const size = workgroupSize.reduce( ( acc, curr ) => acc * curr, 1 );
1077
+
1078
+ return `uint( gl_InstanceID ) % ${size}u`;
1079
+
1080
+ }
1081
+
1082
+ /**
1083
+ * Returns a builtin representing the size of a subgroup within the current shader.
1084
+ */
1085
+ getSubgroupSize() {
1086
+
1087
+ error( 'GLSLNodeBuilder: WebGLBackend does not support the subgroupSize node' );
1088
+
1089
+ }
1090
+
1091
+ /**
1092
+ * Returns a builtin representing the index of an invocation within its subgroup.
1093
+ */
1094
+ getInvocationSubgroupIndex() {
1095
+
1096
+ error( 'GLSLNodeBuilder: WebGLBackend does not support the invocationSubgroupIndex node' );
1097
+
1098
+ }
1099
+
1100
+ /**
1101
+ * Returns a builtin representing the index of the current invocation's subgroup within its workgroup.
1102
+ */
1103
+ getSubgroupIndex() {
1104
+
1105
+ error( 'GLSLNodeBuilder: WebGLBackend does not support the subgroupIndex node' );
1106
+
1107
+ }
1108
+
1109
+ /**
1110
+ * Returns the draw index builtin.
1111
+ *
1112
+ * @return {?string} The drawIndex shader string. Returns `null` if `WEBGL_multi_draw` isn't supported by the device.
1113
+ */
1114
+ getDrawIndex() {
1115
+
1116
+ const extensions = this.renderer.backend.extensions;
1117
+
1118
+ if ( extensions.has( 'WEBGL_multi_draw' ) ) {
1119
+
1120
+ return 'uint( gl_DrawID )';
1121
+
1122
+ } else {
1123
+
1124
+ return 'nodeUniformDrawId'; // fallback to uniform
1125
+
1126
+ }
1127
+
1128
+ }
1129
+
1130
+ /**
1131
+ * Returns the front facing builtin.
1132
+ *
1133
+ * @return {string} The front facing builtin.
1134
+ */
1135
+ getFrontFacing() {
1136
+
1137
+ return 'gl_FrontFacing';
1138
+
1139
+ }
1140
+
1141
+ /**
1142
+ * Returns the frag coord builtin.
1143
+ *
1144
+ * @return {string} The frag coord builtin.
1145
+ */
1146
+ getFragCoord() {
1147
+
1148
+ return 'gl_FragCoord.xy';
1149
+
1150
+ }
1151
+
1152
+ /**
1153
+ * Returns the frag depth builtin.
1154
+ *
1155
+ * @return {string} The frag depth builtin.
1156
+ */
1157
+ getFragDepth() {
1158
+
1159
+ return 'gl_FragDepth';
1160
+
1161
+ }
1162
+
1163
+ /**
1164
+ * Enables the given extension.
1165
+ *
1166
+ * @param {string} name - The extension name.
1167
+ * @param {string} behavior - The extension behavior.
1168
+ * @param {string} [shaderStage=this.shaderStage] - The shader stage.
1169
+ */
1170
+ enableExtension( name, behavior, shaderStage = this.shaderStage ) {
1171
+
1172
+ const map = this.extensions[ shaderStage ] || ( this.extensions[ shaderStage ] = new Map() );
1173
+
1174
+ if ( map.has( name ) === false ) {
1175
+
1176
+ map.set( name, {
1177
+ name,
1178
+ behavior
1179
+ } );
1180
+
1181
+ }
1182
+
1183
+ }
1184
+
1185
+ /**
1186
+ * Returns the enabled extensions of the given shader stage as a GLSL string.
1187
+ *
1188
+ * @param {string} shaderStage - The shader stage.
1189
+ * @return {string} The GLSL snippet that defines the enabled extensions.
1190
+ */
1191
+ getExtensions( shaderStage ) {
1192
+
1193
+ const snippets = [];
1194
+
1195
+ if ( shaderStage === 'vertex' ) {
1196
+
1197
+ const ext = this.renderer.backend.extensions;
1198
+ const isBatchedMesh = this.object.isBatchedMesh;
1199
+
1200
+ if ( isBatchedMesh && ext.has( 'WEBGL_multi_draw' ) ) {
1201
+
1202
+ this.enableExtension( 'GL_ANGLE_multi_draw', 'require', shaderStage );
1203
+
1204
+ }
1205
+
1206
+ }
1207
+
1208
+ const extensions = this.extensions[ shaderStage ];
1209
+
1210
+ if ( extensions !== undefined ) {
1211
+
1212
+ for ( const { name, behavior } of extensions.values() ) {
1213
+
1214
+ snippets.push( `#extension ${name} : ${behavior}` );
1215
+
1216
+ }
1217
+
1218
+ }
1219
+
1220
+ return snippets.join( '\n' );
1221
+
1222
+ }
1223
+
1224
+ /**
1225
+ * Returns the clip distances builtin.
1226
+ *
1227
+ * @return {string} The clip distances builtin.
1228
+ */
1229
+ getClipDistance() {
1230
+
1231
+ return 'gl_ClipDistance';
1232
+
1233
+ }
1234
+
1235
+ /**
1236
+ * Whether the requested feature is available or not.
1237
+ *
1238
+ * @param {string} name - The requested feature.
1239
+ * @return {boolean} Whether the requested feature is supported or not.
1240
+ */
1241
+ isAvailable( name ) {
1242
+
1243
+ let result = supports[ name ];
1244
+
1245
+ if ( result === undefined ) {
1246
+
1247
+ let extensionName;
1248
+
1249
+ result = false;
1250
+
1251
+ switch ( name ) {
1252
+
1253
+ case 'float32Filterable':
1254
+ extensionName = 'OES_texture_float_linear';
1255
+ break;
1256
+
1257
+ case 'clipDistance':
1258
+ extensionName = 'WEBGL_clip_cull_distance';
1259
+ break;
1260
+
1261
+ }
1262
+
1263
+ if ( extensionName !== undefined ) {
1264
+
1265
+ const extensions = this.renderer.backend.extensions;
1266
+
1267
+ if ( extensions.has( extensionName ) ) {
1268
+
1269
+ extensions.get( extensionName );
1270
+ result = true;
1271
+
1272
+ }
1273
+
1274
+ }
1275
+
1276
+ supports[ name ] = result;
1277
+
1278
+ }
1279
+
1280
+ return result;
1281
+
1282
+ }
1283
+
1284
+ /**
1285
+ * Whether to flip texture data along its vertical axis or not.
1286
+ *
1287
+ * @return {boolean} Returns always `true` in context of GLSL.
1288
+ */
1289
+ isFlipY() {
1290
+
1291
+ return true;
1292
+
1293
+ }
1294
+
1295
+ /**
1296
+ * Enables hardware clipping.
1297
+ *
1298
+ * @param {string} planeCount - The clipping plane count.
1299
+ */
1300
+ enableHardwareClipping( planeCount ) {
1301
+
1302
+ this.enableExtension( 'GL_ANGLE_clip_cull_distance', 'require' );
1303
+
1304
+ this.builtins[ 'vertex' ].push( `out float gl_ClipDistance[ ${ planeCount } ]` );
1305
+
1306
+ }
1307
+
1308
+ /**
1309
+ * Enables multiview.
1310
+ */
1311
+ enableMultiview() {
1312
+
1313
+ this.enableExtension( 'GL_OVR_multiview2', 'require', 'fragment' );
1314
+ this.enableExtension( 'GL_OVR_multiview2', 'require', 'vertex' );
1315
+
1316
+ this.builtins[ 'vertex' ].push( 'layout(num_views = 2) in' );
1317
+
1318
+ }
1319
+
1320
+ /**
1321
+ * Registers a transform in context of Transform Feedback.
1322
+ *
1323
+ * @param {string} varyingName - The varying name.
1324
+ * @param {AttributeNode} attributeNode - The attribute node.
1325
+ */
1326
+ registerTransform( varyingName, attributeNode ) {
1327
+
1328
+ this.transforms.push( { varyingName, attributeNode } );
1329
+
1330
+ }
1331
+
1332
+ /**
1333
+ * Returns the transforms of the given shader stage as a GLSL string.
1334
+ *
1335
+ * @param {string} shaderStage - The shader stage.
1336
+ * @return {string} The GLSL snippet that defines the transforms.
1337
+ */
1338
+ getTransforms( /* shaderStage */ ) {
1339
+
1340
+ const transforms = this.transforms;
1341
+
1342
+ let snippet = '';
1343
+
1344
+ for ( let i = 0; i < transforms.length; i ++ ) {
1345
+
1346
+ const transform = transforms[ i ];
1347
+ const attributeName = this.getPropertyName( transform.attributeNode );
1348
+
1349
+ if ( attributeName ) snippet += `${ transform.varyingName } = ${ attributeName };\n\t`;
1350
+
1351
+ }
1352
+
1353
+ return snippet;
1354
+
1355
+ }
1356
+
1357
+ /**
1358
+ * Returns a GLSL struct based on the given name and variables.
1359
+ *
1360
+ * @private
1361
+ * @param {string} name - The struct name.
1362
+ * @param {string} vars - The struct variables.
1363
+ * @return {string} The GLSL snippet representing a struct.
1364
+ */
1365
+ _getGLSLUniformStruct( name, vars ) {
1366
+
1367
+ return `
1368
+ layout( std140 ) uniform ${name} {
1369
+ ${vars}
1370
+ };`;
1371
+
1372
+ }
1373
+
1374
+ /**
1375
+ * Returns a GLSL vertex shader based on the given shader data.
1376
+ *
1377
+ * @private
1378
+ * @param {Object} shaderData - The shader data.
1379
+ * @return {string} The vertex shader.
1380
+ */
1381
+ _getGLSLVertexCode( shaderData ) {
1382
+
1383
+ return `#version 300 es
1384
+
1385
+ ${ this.getSignature() }
1386
+
1387
+ // extensions
1388
+ ${shaderData.extensions}
1389
+
1390
+ // precision
1391
+ ${ defaultPrecisions }
1392
+
1393
+ // uniforms
1394
+ ${shaderData.uniforms}
1395
+
1396
+ // varyings
1397
+ ${shaderData.varyings}
1398
+
1399
+ // attributes
1400
+ ${shaderData.attributes}
1401
+
1402
+ // vars
1403
+ ${shaderData.vars}
1404
+
1405
+ // codes
1406
+ ${shaderData.codes}
1407
+
1408
+ void main() {
1409
+
1410
+ // transforms
1411
+ ${shaderData.transforms}
1412
+
1413
+ // flow
1414
+ ${shaderData.flow}
1415
+
1416
+ gl_PointSize = 1.0;
1417
+
1418
+ }
1419
+ `;
1420
+
1421
+ }
1422
+
1423
+ /**
1424
+ * Returns a GLSL fragment shader based on the given shader data.
1425
+ *
1426
+ * @private
1427
+ * @param {Object} shaderData - The shader data.
1428
+ * @return {string} The vertex shader.
1429
+ */
1430
+ _getGLSLFragmentCode( shaderData ) {
1431
+
1432
+ return `#version 300 es
1433
+
1434
+ ${ this.getSignature() }
1435
+
1436
+ // extensions
1437
+ ${shaderData.extensions}
1438
+
1439
+ // precision
1440
+ ${ defaultPrecisions }
1441
+
1442
+ // structs
1443
+ ${shaderData.structs}
1444
+
1445
+ // uniforms
1446
+ ${shaderData.uniforms}
1447
+
1448
+ // varyings
1449
+ ${shaderData.varyings}
1450
+
1451
+ // vars
1452
+ ${shaderData.vars}
1453
+
1454
+ // codes
1455
+ ${shaderData.codes}
1456
+
1457
+ void main() {
1458
+
1459
+ // flow
1460
+ ${shaderData.flow}
1461
+
1462
+ }
1463
+ `;
1464
+
1465
+ }
1466
+
1467
+ /**
1468
+ * Controls the code build of the shader stages.
1469
+ */
1470
+ buildCode() {
1471
+
1472
+ const shadersData = this.material !== null ? { fragment: {}, vertex: {} } : { compute: {} };
1473
+
1474
+ this.sortBindingGroups();
1475
+
1476
+ for ( const shaderStage in shadersData ) {
1477
+
1478
+ let flow = '// code\n\n';
1479
+ flow += this.flowCode[ shaderStage ];
1480
+
1481
+ const flowNodes = this.flowNodes[ shaderStage ];
1482
+ const mainNode = flowNodes[ flowNodes.length - 1 ];
1483
+
1484
+ for ( const node of flowNodes ) {
1485
+
1486
+ const flowSlotData = this.getFlowData( node/*, shaderStage*/ );
1487
+ const slotName = node.name;
1488
+
1489
+ if ( slotName ) {
1490
+
1491
+ if ( flow.length > 0 ) flow += '\n';
1492
+
1493
+ flow += `\t// flow -> ${ slotName }\n\t`;
1494
+
1495
+ }
1496
+
1497
+ flow += `${ flowSlotData.code }\n\t`;
1498
+
1499
+ if ( node === mainNode && shaderStage !== 'compute' ) {
1500
+
1501
+ flow += '// result\n\t';
1502
+
1503
+ if ( shaderStage === 'vertex' ) {
1504
+
1505
+ flow += 'gl_Position = ';
1506
+ flow += `${ flowSlotData.result };`;
1507
+
1508
+ } else if ( shaderStage === 'fragment' ) {
1509
+
1510
+ if ( ! node.outputNode.isOutputStructNode ) {
1511
+
1512
+ flow += 'fragColor = ';
1513
+ flow += `${ flowSlotData.result };`;
1514
+
1515
+ }
1516
+
1517
+ }
1518
+
1519
+ }
1520
+
1521
+ }
1522
+
1523
+ const stageData = shadersData[ shaderStage ];
1524
+
1525
+ stageData.extensions = this.getExtensions( shaderStage );
1526
+ stageData.uniforms = this.getUniforms( shaderStage );
1527
+ stageData.attributes = this.getAttributes( shaderStage );
1528
+ stageData.varyings = this.getVaryings( shaderStage );
1529
+ stageData.vars = this.getVars( shaderStage, true );
1530
+ stageData.structs = this.getStructs( shaderStage );
1531
+ stageData.codes = this.getCodes( shaderStage );
1532
+ stageData.transforms = this.getTransforms( shaderStage );
1533
+ stageData.flow = flow;
1534
+
1535
+ // fallbacks
1536
+
1537
+ if ( shaderStage === 'vertex' ) {
1538
+
1539
+ const ext = this.renderer.backend.extensions;
1540
+
1541
+ if ( this.object.isBatchedMesh && ext.has( 'WEBGL_multi_draw' ) === false ) {
1542
+
1543
+ stageData.uniforms += '\nuniform uint nodeUniformDrawId;\n';
1544
+
1545
+ }
1546
+
1547
+ }
1548
+
1549
+ }
1550
+
1551
+ if ( this.material !== null ) {
1552
+
1553
+ this.vertexShader = this._getGLSLVertexCode( shadersData.vertex );
1554
+ this.fragmentShader = this._getGLSLFragmentCode( shadersData.fragment );
1555
+
1556
+ } else {
1557
+
1558
+ this.computeShader = this._getGLSLVertexCode( shadersData.compute );
1559
+
1560
+ }
1561
+
1562
+ }
1563
+
1564
+ /**
1565
+ * This method is one of the more important ones since it's responsible
1566
+ * for generating a matching binding instance for the given uniform node.
1567
+ *
1568
+ * These bindings are later used in the renderer to create bind groups
1569
+ * and layouts.
1570
+ *
1571
+ * @param {UniformNode} node - The uniform node.
1572
+ * @param {string} type - The node data type.
1573
+ * @param {string} shaderStage - The shader stage.
1574
+ * @param {?string} [name=null] - An optional uniform name.
1575
+ * @return {NodeUniform} The node uniform object.
1576
+ */
1577
+ getUniformFromNode( node, type, shaderStage, name = null ) {
1578
+
1579
+ const uniformNode = super.getUniformFromNode( node, type, shaderStage, name );
1580
+ const nodeData = this.getDataFromNode( node, shaderStage, this.globalCache );
1581
+
1582
+ let uniformGPU = nodeData.uniformGPU;
1583
+
1584
+ if ( uniformGPU === undefined ) {
1585
+
1586
+ const group = node.groupNode;
1587
+ const groupName = group.name;
1588
+
1589
+ const bindings = this.getBindGroupArray( groupName, shaderStage );
1590
+
1591
+ if ( type === 'texture' ) {
1592
+
1593
+ uniformGPU = new NodeSampledTexture( uniformNode.name, uniformNode.node, group );
1594
+ bindings.push( uniformGPU );
1595
+
1596
+ } else if ( type === 'cubeTexture' || type === 'cubeDepthTexture' ) {
1597
+
1598
+ uniformGPU = new NodeSampledCubeTexture( uniformNode.name, uniformNode.node, group );
1599
+ bindings.push( uniformGPU );
1600
+
1601
+ } else if ( type === 'texture3D' ) {
1602
+
1603
+ uniformGPU = new NodeSampledTexture3D( uniformNode.name, uniformNode.node, group );
1604
+ bindings.push( uniformGPU );
1605
+
1606
+ } else if ( type === 'buffer' ) {
1607
+
1608
+ uniformNode.name = `buffer${ node.id }`;
1609
+
1610
+ const sharedData = this.getSharedDataFromNode( node );
1611
+
1612
+ let buffer = sharedData.buffer;
1613
+
1614
+ if ( buffer === undefined ) {
1615
+
1616
+ node.name = `NodeBuffer_${ node.id }`;
1617
+
1618
+ buffer = new NodeUniformBuffer( node, group );
1619
+ buffer.name = node.name;
1620
+
1621
+ sharedData.buffer = buffer;
1622
+
1623
+ }
1624
+
1625
+ bindings.push( buffer );
1626
+
1627
+ uniformGPU = buffer;
1628
+
1629
+ } else {
1630
+
1631
+ let uniformsGroup = this.uniformGroups[ groupName ];
1632
+
1633
+ if ( uniformsGroup === undefined ) {
1634
+
1635
+ uniformsGroup = new NodeUniformsGroup( groupName, group );
1636
+
1637
+ this.uniformGroups[ groupName ] = uniformsGroup;
1638
+
1639
+ bindings.push( uniformsGroup );
1640
+
1641
+ } else {
1642
+
1643
+ // Add to bindings for this stage if not already present
1644
+ if ( bindings.indexOf( uniformsGroup ) === - 1 ) {
1645
+
1646
+ bindings.push( uniformsGroup );
1647
+
1648
+ }
1649
+
1650
+ }
1651
+
1652
+ uniformGPU = this.getNodeUniform( uniformNode, type );
1653
+
1654
+ // Only add uniform if not already present in the group (check by name to avoid duplicates across stages)
1655
+ const uniformName = uniformGPU.name;
1656
+ const alreadyExists = uniformsGroup.uniforms.some( u => u.name === uniformName );
1657
+
1658
+ if ( ! alreadyExists ) {
1659
+
1660
+ uniformsGroup.addUniform( uniformGPU );
1661
+
1662
+ }
1663
+
1664
+ }
1665
+
1666
+ nodeData.uniformGPU = uniformGPU;
1667
+
1668
+ }
1669
+
1670
+ return uniformNode;
1671
+
1672
+ }
1673
+
1674
+ }
1675
+
1676
+ export default GLSLNodeBuilder;