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