@gnsx/three 0.184.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1182) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +85 -0
  3. package/build/three.cjs +79695 -0
  4. package/build/three.core.js +59732 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +19552 -0
  7. package/build/three.module.min.js +6 -0
  8. package/build/three.tsl.js +654 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +83969 -0
  11. package/build/three.webgpu.min.js +6 -0
  12. package/build/three.webgpu.nodes.js +83702 -0
  13. package/build/three.webgpu.nodes.min.js +6 -0
  14. package/examples/fonts/LICENSE +13 -0
  15. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  16. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  17. package/examples/fonts/README.md +11 -0
  18. package/examples/fonts/droid/NOTICE +190 -0
  19. package/examples/fonts/droid/README.txt +18 -0
  20. package/examples/fonts/droid/droid_sans_bold.typeface.json +1 -0
  21. package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +1 -0
  22. package/examples/fonts/droid/droid_sans_regular.typeface.json +1 -0
  23. package/examples/fonts/droid/droid_serif_bold.typeface.json +1 -0
  24. package/examples/fonts/droid/droid_serif_regular.typeface.json +1 -0
  25. package/examples/fonts/gentilis_bold.typeface.json +1 -0
  26. package/examples/fonts/gentilis_regular.typeface.json +1 -0
  27. package/examples/fonts/helvetiker_bold.typeface.json +1 -0
  28. package/examples/fonts/helvetiker_regular.typeface.json +1 -0
  29. package/examples/fonts/optimer_bold.typeface.json +1 -0
  30. package/examples/fonts/optimer_regular.typeface.json +1 -0
  31. package/examples/fonts/ttf/README.md +9 -0
  32. package/examples/fonts/ttf/kenpixel.ttf +0 -0
  33. package/examples/jsm/Addons.js +293 -0
  34. package/examples/jsm/animation/AnimationClipCreator.js +168 -0
  35. package/examples/jsm/animation/CCDIKSolver.js +595 -0
  36. package/examples/jsm/capabilities/WebGL.js +113 -0
  37. package/examples/jsm/capabilities/WebGPU.js +59 -0
  38. package/examples/jsm/controls/ArcballControls.js +3539 -0
  39. package/examples/jsm/controls/DragControls.js +452 -0
  40. package/examples/jsm/controls/FirstPersonControls.js +451 -0
  41. package/examples/jsm/controls/FlyControls.js +384 -0
  42. package/examples/jsm/controls/MapControls.js +116 -0
  43. package/examples/jsm/controls/OrbitControls.js +1963 -0
  44. package/examples/jsm/controls/PointerLockControls.js +264 -0
  45. package/examples/jsm/controls/TrackballControls.js +1001 -0
  46. package/examples/jsm/controls/TransformControls.js +1950 -0
  47. package/examples/jsm/csm/CSM.js +598 -0
  48. package/examples/jsm/csm/CSMFrustum.js +209 -0
  49. package/examples/jsm/csm/CSMHelper.js +243 -0
  50. package/examples/jsm/csm/CSMShader.js +307 -0
  51. package/examples/jsm/csm/CSMShadowNode.js +603 -0
  52. package/examples/jsm/curves/CurveExtras.js +694 -0
  53. package/examples/jsm/curves/NURBSCurve.js +155 -0
  54. package/examples/jsm/curves/NURBSSurface.js +98 -0
  55. package/examples/jsm/curves/NURBSUtils.js +532 -0
  56. package/examples/jsm/curves/NURBSVolume.js +82 -0
  57. package/examples/jsm/effects/AnaglyphEffect.js +274 -0
  58. package/examples/jsm/effects/AsciiEffect.js +310 -0
  59. package/examples/jsm/effects/OutlineEffect.js +489 -0
  60. package/examples/jsm/effects/ParallaxBarrierEffect.js +155 -0
  61. package/examples/jsm/effects/StereoEffect.js +91 -0
  62. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  63. package/examples/jsm/environments/DebugEnvironment.js +102 -0
  64. package/examples/jsm/environments/RoomEnvironment.js +185 -0
  65. package/examples/jsm/exporters/DRACOExporter.js +311 -0
  66. package/examples/jsm/exporters/EXRExporter.js +618 -0
  67. package/examples/jsm/exporters/GLTFExporter.js +3738 -0
  68. package/examples/jsm/exporters/KTX2Exporter.js +347 -0
  69. package/examples/jsm/exporters/OBJExporter.js +308 -0
  70. package/examples/jsm/exporters/PLYExporter.js +562 -0
  71. package/examples/jsm/exporters/STLExporter.js +221 -0
  72. package/examples/jsm/exporters/USDZExporter.js +1254 -0
  73. package/examples/jsm/geometries/BoxLineGeometry.js +92 -0
  74. package/examples/jsm/geometries/ConvexGeometry.js +72 -0
  75. package/examples/jsm/geometries/DecalGeometry.js +420 -0
  76. package/examples/jsm/geometries/ParametricFunctions.js +100 -0
  77. package/examples/jsm/geometries/ParametricGeometry.js +172 -0
  78. package/examples/jsm/geometries/RoundedBoxGeometry.js +216 -0
  79. package/examples/jsm/geometries/TeapotGeometry.js +689 -0
  80. package/examples/jsm/geometries/TextGeometry.js +102 -0
  81. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  82. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  83. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  84. package/examples/jsm/helpers/LightProbeHelper.js +165 -0
  85. package/examples/jsm/helpers/LightProbeHelperGPU.js +102 -0
  86. package/examples/jsm/helpers/OctreeHelper.js +109 -0
  87. package/examples/jsm/helpers/PositionalAudioHelper.js +169 -0
  88. package/examples/jsm/helpers/RapierHelper.js +59 -0
  89. package/examples/jsm/helpers/RectAreaLightHelper.js +118 -0
  90. package/examples/jsm/helpers/TextureHelper.js +265 -0
  91. package/examples/jsm/helpers/TextureHelperGPU.js +214 -0
  92. package/examples/jsm/helpers/VertexNormalsHelper.js +155 -0
  93. package/examples/jsm/helpers/VertexTangentsHelper.js +133 -0
  94. package/examples/jsm/helpers/ViewHelper.js +519 -0
  95. package/examples/jsm/inspector/Extension.js +13 -0
  96. package/examples/jsm/inspector/Inspector.js +542 -0
  97. package/examples/jsm/inspector/RendererInspector.js +425 -0
  98. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  99. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  100. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  101. package/examples/jsm/inspector/tabs/Console.js +238 -0
  102. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  103. package/examples/jsm/inspector/tabs/Parameters.js +380 -0
  104. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  105. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  106. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  107. package/examples/jsm/inspector/tabs/Viewer.js +268 -0
  108. package/examples/jsm/inspector/ui/Graph.js +95 -0
  109. package/examples/jsm/inspector/ui/Item.js +170 -0
  110. package/examples/jsm/inspector/ui/List.js +75 -0
  111. package/examples/jsm/inspector/ui/Profiler.js +2072 -0
  112. package/examples/jsm/inspector/ui/Style.js +1667 -0
  113. package/examples/jsm/inspector/ui/Tab.js +265 -0
  114. package/examples/jsm/inspector/ui/Values.js +476 -0
  115. package/examples/jsm/inspector/ui/utils.js +69 -0
  116. package/examples/jsm/interaction/InteractionManager.js +226 -0
  117. package/examples/jsm/interactive/HTMLMesh.js +601 -0
  118. package/examples/jsm/interactive/InteractiveGroup.js +224 -0
  119. package/examples/jsm/interactive/SelectionBox.js +324 -0
  120. package/examples/jsm/interactive/SelectionHelper.js +150 -0
  121. package/examples/jsm/libs/ammo.wasm.js +822 -0
  122. package/examples/jsm/libs/ammo.wasm.wasm +0 -0
  123. package/examples/jsm/libs/basis/README.md +46 -0
  124. package/examples/jsm/libs/basis/basis_transcoder.js +19 -0
  125. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  126. package/examples/jsm/libs/chevrotain.module.min.js +141 -0
  127. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  128. package/examples/jsm/libs/draco/README.md +32 -0
  129. package/examples/jsm/libs/draco/draco_decoder.js +34 -0
  130. package/examples/jsm/libs/draco/draco_decoder.wasm +0 -0
  131. package/examples/jsm/libs/draco/draco_encoder.js +33 -0
  132. package/examples/jsm/libs/draco/draco_wasm_wrapper.js +117 -0
  133. package/examples/jsm/libs/draco/gltf/draco_decoder.js +33 -0
  134. package/examples/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
  135. package/examples/jsm/libs/draco/gltf/draco_encoder.js +33 -0
  136. package/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
  137. package/examples/jsm/libs/ecsy.module.js +1792 -0
  138. package/examples/jsm/libs/fflate.module.js +2672 -0
  139. package/examples/jsm/libs/ktx-parse.module.js +1 -0
  140. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  141. package/examples/jsm/libs/lottie_canvas.module.js +14849 -0
  142. package/examples/jsm/libs/meshopt_decoder.module.js +196 -0
  143. package/examples/jsm/libs/mikktspace.module.js +128 -0
  144. package/examples/jsm/libs/motion-controllers.module.js +397 -0
  145. package/examples/jsm/libs/opentype.module.js +14506 -0
  146. package/examples/jsm/libs/potpack.module.js +125 -0
  147. package/examples/jsm/libs/rhino3dm/rhino3dm.js +21 -0
  148. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +16 -0
  149. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  150. package/examples/jsm/libs/stats.module.js +167 -0
  151. package/examples/jsm/libs/surfaceNet.js +201 -0
  152. package/examples/jsm/libs/tween.module.js +876 -0
  153. package/examples/jsm/libs/utif.module.js +1665 -0
  154. package/examples/jsm/libs/zstddec.module.js +1 -0
  155. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  156. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  157. package/examples/jsm/lighting/TiledLighting.js +42 -0
  158. package/examples/jsm/lights/LightProbeGenerator.js +337 -0
  159. package/examples/jsm/lights/RectAreaLightTexturesLib.js +127 -0
  160. package/examples/jsm/lights/RectAreaLightUniformsLib.js +40 -0
  161. package/examples/jsm/lines/Line2.js +56 -0
  162. package/examples/jsm/lines/LineGeometry.js +157 -0
  163. package/examples/jsm/lines/LineMaterial.js +703 -0
  164. package/examples/jsm/lines/LineSegments2.js +426 -0
  165. package/examples/jsm/lines/LineSegmentsGeometry.js +298 -0
  166. package/examples/jsm/lines/Wireframe.js +108 -0
  167. package/examples/jsm/lines/WireframeGeometry2.js +49 -0
  168. package/examples/jsm/lines/webgpu/Line2.js +46 -0
  169. package/examples/jsm/lines/webgpu/LineSegments2.js +411 -0
  170. package/examples/jsm/lines/webgpu/Wireframe.js +86 -0
  171. package/examples/jsm/loaders/3DMLoader.js +1836 -0
  172. package/examples/jsm/loaders/3MFLoader.js +1621 -0
  173. package/examples/jsm/loaders/AMFLoader.js +541 -0
  174. package/examples/jsm/loaders/BVHLoader.js +484 -0
  175. package/examples/jsm/loaders/ColladaLoader.js +153 -0
  176. package/examples/jsm/loaders/DDSLoader.js +385 -0
  177. package/examples/jsm/loaders/DRACOLoader.js +739 -0
  178. package/examples/jsm/loaders/EXRLoader.js +3423 -0
  179. package/examples/jsm/loaders/FBXLoader.js +4580 -0
  180. package/examples/jsm/loaders/FontLoader.js +260 -0
  181. package/examples/jsm/loaders/GCodeLoader.js +318 -0
  182. package/examples/jsm/loaders/GLTFLoader.js +4860 -0
  183. package/examples/jsm/loaders/HDRCubeTextureLoader.js +164 -0
  184. package/examples/jsm/loaders/HDRLoader.js +485 -0
  185. package/examples/jsm/loaders/IESLoader.js +379 -0
  186. package/examples/jsm/loaders/KMZLoader.js +163 -0
  187. package/examples/jsm/loaders/KTX2Loader.js +1257 -0
  188. package/examples/jsm/loaders/KTXLoader.js +197 -0
  189. package/examples/jsm/loaders/LDrawLoader.js +2510 -0
  190. package/examples/jsm/loaders/LUT3dlLoader.js +205 -0
  191. package/examples/jsm/loaders/LUTCubeLoader.js +190 -0
  192. package/examples/jsm/loaders/LUTImageLoader.js +190 -0
  193. package/examples/jsm/loaders/LWOLoader.js +1047 -0
  194. package/examples/jsm/loaders/LottieLoader.js +130 -0
  195. package/examples/jsm/loaders/MD2Loader.js +435 -0
  196. package/examples/jsm/loaders/MDDLoader.js +147 -0
  197. package/examples/jsm/loaders/MTLLoader.js +593 -0
  198. package/examples/jsm/loaders/MaterialXLoader.js +1104 -0
  199. package/examples/jsm/loaders/NRRDLoader.js +718 -0
  200. package/examples/jsm/loaders/OBJLoader.js +955 -0
  201. package/examples/jsm/loaders/PCDLoader.js +620 -0
  202. package/examples/jsm/loaders/PDBLoader.js +272 -0
  203. package/examples/jsm/loaders/PLYLoader.js +805 -0
  204. package/examples/jsm/loaders/PVRLoader.js +270 -0
  205. package/examples/jsm/loaders/RGBELoader.js +18 -0
  206. package/examples/jsm/loaders/STLLoader.js +421 -0
  207. package/examples/jsm/loaders/SVGLoader.js +3267 -0
  208. package/examples/jsm/loaders/TDSLoader.js +1142 -0
  209. package/examples/jsm/loaders/TGALoader.js +538 -0
  210. package/examples/jsm/loaders/TIFFLoader.js +59 -0
  211. package/examples/jsm/loaders/TTFLoader.js +261 -0
  212. package/examples/jsm/loaders/USDLoader.js +279 -0
  213. package/examples/jsm/loaders/USDZLoader.js +16 -0
  214. package/examples/jsm/loaders/UltraHDRLoader.js +755 -0
  215. package/examples/jsm/loaders/VOXLoader.js +919 -0
  216. package/examples/jsm/loaders/VRMLLoader.js +3646 -0
  217. package/examples/jsm/loaders/VTKLoader.js +1293 -0
  218. package/examples/jsm/loaders/XYZLoader.js +143 -0
  219. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  220. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  221. package/examples/jsm/loaders/lwo/IFFParser.js +1217 -0
  222. package/examples/jsm/loaders/lwo/LWO2Parser.js +414 -0
  223. package/examples/jsm/loaders/lwo/LWO3Parser.js +373 -0
  224. package/examples/jsm/loaders/usd/USDAParser.js +828 -0
  225. package/examples/jsm/loaders/usd/USDCParser.js +1878 -0
  226. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  227. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +183 -0
  228. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +154 -0
  229. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  230. package/examples/jsm/math/Capsule.js +159 -0
  231. package/examples/jsm/math/ColorConverter.js +58 -0
  232. package/examples/jsm/math/ColorSpaces.js +147 -0
  233. package/examples/jsm/math/ConvexHull.js +1695 -0
  234. package/examples/jsm/math/ImprovedNoise.js +88 -0
  235. package/examples/jsm/math/Lut.js +317 -0
  236. package/examples/jsm/math/MeshSurfaceSampler.js +315 -0
  237. package/examples/jsm/math/OBB.js +535 -0
  238. package/examples/jsm/math/Octree.js +822 -0
  239. package/examples/jsm/math/SimplexNoise.js +470 -0
  240. package/examples/jsm/misc/ConvexObjectBreaker.js +539 -0
  241. package/examples/jsm/misc/GPUComputationRenderer.js +508 -0
  242. package/examples/jsm/misc/Gyroscope.js +78 -0
  243. package/examples/jsm/misc/MD2Character.js +391 -0
  244. package/examples/jsm/misc/MD2CharacterComplex.js +740 -0
  245. package/examples/jsm/misc/MorphAnimMesh.js +119 -0
  246. package/examples/jsm/misc/MorphBlendMesh.js +425 -0
  247. package/examples/jsm/misc/ProgressiveLightMap.js +370 -0
  248. package/examples/jsm/misc/ProgressiveLightMapGPU.js +322 -0
  249. package/examples/jsm/misc/RollerCoaster.js +661 -0
  250. package/examples/jsm/misc/TubePainter.js +599 -0
  251. package/examples/jsm/misc/Volume.js +520 -0
  252. package/examples/jsm/misc/VolumeSlice.js +275 -0
  253. package/examples/jsm/modifiers/CurveModifier.js +374 -0
  254. package/examples/jsm/modifiers/CurveModifierGPU.js +256 -0
  255. package/examples/jsm/modifiers/EdgeSplitModifier.js +299 -0
  256. package/examples/jsm/modifiers/SimplifyModifier.js +632 -0
  257. package/examples/jsm/modifiers/TessellateModifier.js +340 -0
  258. package/examples/jsm/objects/GroundedSkybox.js +69 -0
  259. package/examples/jsm/objects/Lensflare.js +489 -0
  260. package/examples/jsm/objects/LensflareMesh.js +376 -0
  261. package/examples/jsm/objects/MarchingCubes.js +1261 -0
  262. package/examples/jsm/objects/Reflector.js +386 -0
  263. package/examples/jsm/objects/ReflectorForSSRPass.js +393 -0
  264. package/examples/jsm/objects/Refractor.js +389 -0
  265. package/examples/jsm/objects/ShadowMesh.js +130 -0
  266. package/examples/jsm/objects/Sky.js +321 -0
  267. package/examples/jsm/objects/SkyMesh.js +377 -0
  268. package/examples/jsm/objects/Water.js +374 -0
  269. package/examples/jsm/objects/Water2.js +403 -0
  270. package/examples/jsm/objects/Water2Mesh.js +199 -0
  271. package/examples/jsm/objects/WaterMesh.js +194 -0
  272. package/examples/jsm/offscreen/jank.js +45 -0
  273. package/examples/jsm/offscreen/offscreen.js +8 -0
  274. package/examples/jsm/offscreen/scene.js +86 -0
  275. package/examples/jsm/physics/AmmoPhysics.js +359 -0
  276. package/examples/jsm/physics/JoltPhysics.js +334 -0
  277. package/examples/jsm/physics/RapierPhysics.js +436 -0
  278. package/examples/jsm/postprocessing/AfterimagePass.js +185 -0
  279. package/examples/jsm/postprocessing/BloomPass.js +274 -0
  280. package/examples/jsm/postprocessing/BokehPass.js +218 -0
  281. package/examples/jsm/postprocessing/ClearPass.js +97 -0
  282. package/examples/jsm/postprocessing/CubeTexturePass.js +146 -0
  283. package/examples/jsm/postprocessing/DotScreenPass.js +114 -0
  284. package/examples/jsm/postprocessing/EffectComposer.js +365 -0
  285. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  286. package/examples/jsm/postprocessing/FilmPass.js +113 -0
  287. package/examples/jsm/postprocessing/GTAOPass.js +727 -0
  288. package/examples/jsm/postprocessing/GlitchPass.js +177 -0
  289. package/examples/jsm/postprocessing/HalftonePass.js +134 -0
  290. package/examples/jsm/postprocessing/LUTPass.js +138 -0
  291. package/examples/jsm/postprocessing/MaskPass.js +195 -0
  292. package/examples/jsm/postprocessing/OutlinePass.js +776 -0
  293. package/examples/jsm/postprocessing/OutputPass.js +148 -0
  294. package/examples/jsm/postprocessing/Pass.js +191 -0
  295. package/examples/jsm/postprocessing/RenderPass.js +193 -0
  296. package/examples/jsm/postprocessing/RenderPixelatedPass.js +314 -0
  297. package/examples/jsm/postprocessing/RenderTransitionPass.js +267 -0
  298. package/examples/jsm/postprocessing/SAOPass.js +407 -0
  299. package/examples/jsm/postprocessing/SMAAPass.js +230 -0
  300. package/examples/jsm/postprocessing/SSAARenderPass.js +313 -0
  301. package/examples/jsm/postprocessing/SSAOPass.js +527 -0
  302. package/examples/jsm/postprocessing/SSRPass.js +856 -0
  303. package/examples/jsm/postprocessing/SavePass.js +132 -0
  304. package/examples/jsm/postprocessing/ShaderPass.js +135 -0
  305. package/examples/jsm/postprocessing/TAARenderPass.js +243 -0
  306. package/examples/jsm/postprocessing/TexturePass.js +131 -0
  307. package/examples/jsm/postprocessing/UnrealBloomPass.js +524 -0
  308. package/examples/jsm/renderers/CSS2DRenderer.js +328 -0
  309. package/examples/jsm/renderers/CSS3DRenderer.js +454 -0
  310. package/examples/jsm/renderers/Projector.js +1154 -0
  311. package/examples/jsm/renderers/SVGRenderer.js +799 -0
  312. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +96 -0
  313. package/examples/jsm/shaders/AfterimageShader.js +63 -0
  314. package/examples/jsm/shaders/BasicShader.js +36 -0
  315. package/examples/jsm/shaders/BleachBypassShader.js +68 -0
  316. package/examples/jsm/shaders/BlendShader.js +56 -0
  317. package/examples/jsm/shaders/BokehShader.js +151 -0
  318. package/examples/jsm/shaders/BokehShader2.js +404 -0
  319. package/examples/jsm/shaders/BrightnessContrastShader.js +62 -0
  320. package/examples/jsm/shaders/ColorCorrectionShader.js +59 -0
  321. package/examples/jsm/shaders/ColorifyShader.js +57 -0
  322. package/examples/jsm/shaders/ConvolutionShader.js +74 -0
  323. package/examples/jsm/shaders/CopyShader.js +52 -0
  324. package/examples/jsm/shaders/DOFMipMapShader.js +63 -0
  325. package/examples/jsm/shaders/DepthLimitedBlurShader.js +180 -0
  326. package/examples/jsm/shaders/DigitalGlitch.js +104 -0
  327. package/examples/jsm/shaders/DotScreenShader.js +75 -0
  328. package/examples/jsm/shaders/ExposureShader.js +51 -0
  329. package/examples/jsm/shaders/FXAAShader.js +298 -0
  330. package/examples/jsm/shaders/FilmShader.js +72 -0
  331. package/examples/jsm/shaders/FocusShader.js +94 -0
  332. package/examples/jsm/shaders/FreiChenShader.js +103 -0
  333. package/examples/jsm/shaders/GTAOShader.js +434 -0
  334. package/examples/jsm/shaders/GammaCorrectionShader.js +52 -0
  335. package/examples/jsm/shaders/HalftoneShader.js +332 -0
  336. package/examples/jsm/shaders/HorizontalBlurShader.js +68 -0
  337. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +70 -0
  338. package/examples/jsm/shaders/HueSaturationShader.js +74 -0
  339. package/examples/jsm/shaders/KaleidoShader.js +65 -0
  340. package/examples/jsm/shaders/LuminosityHighPassShader.js +68 -0
  341. package/examples/jsm/shaders/LuminosityShader.js +54 -0
  342. package/examples/jsm/shaders/MirrorShader.js +62 -0
  343. package/examples/jsm/shaders/NormalMapShader.js +60 -0
  344. package/examples/jsm/shaders/OutputShader.js +103 -0
  345. package/examples/jsm/shaders/PoissonDenoiseShader.js +239 -0
  346. package/examples/jsm/shaders/RGBShiftShader.js +61 -0
  347. package/examples/jsm/shaders/SAOShader.js +201 -0
  348. package/examples/jsm/shaders/SMAAShader.js +489 -0
  349. package/examples/jsm/shaders/SSAOShader.js +331 -0
  350. package/examples/jsm/shaders/SSRShader.js +396 -0
  351. package/examples/jsm/shaders/SepiaShader.js +57 -0
  352. package/examples/jsm/shaders/SobelOperatorShader.js +98 -0
  353. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +95 -0
  354. package/examples/jsm/shaders/TechnicolorShader.js +51 -0
  355. package/examples/jsm/shaders/ToonShader.js +349 -0
  356. package/examples/jsm/shaders/TriangleBlurShader.js +79 -0
  357. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +60 -0
  358. package/examples/jsm/shaders/VelocityShader.js +137 -0
  359. package/examples/jsm/shaders/VerticalBlurShader.js +66 -0
  360. package/examples/jsm/shaders/VerticalTiltShiftShader.js +70 -0
  361. package/examples/jsm/shaders/VignetteShader.js +56 -0
  362. package/examples/jsm/shaders/VolumeShader.js +298 -0
  363. package/examples/jsm/shaders/WaterRefractionShader.js +106 -0
  364. package/examples/jsm/textures/FlakesTexture.js +54 -0
  365. package/examples/jsm/transpiler/AST.js +675 -0
  366. package/examples/jsm/transpiler/GLSLDecoder.js +1228 -0
  367. package/examples/jsm/transpiler/Linker.js +327 -0
  368. package/examples/jsm/transpiler/ShaderToyDecoder.js +51 -0
  369. package/examples/jsm/transpiler/TSLEncoder.js +983 -0
  370. package/examples/jsm/transpiler/Transpiler.js +67 -0
  371. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  372. package/examples/jsm/transpiler/WGSLEncoder.js +839 -0
  373. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  374. package/examples/jsm/tsl/display/AfterImageNode.js +254 -0
  375. package/examples/jsm/tsl/display/AnaglyphPassNode.js +549 -0
  376. package/examples/jsm/tsl/display/AnamorphicNode.js +293 -0
  377. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  378. package/examples/jsm/tsl/display/BleachBypass.js +33 -0
  379. package/examples/jsm/tsl/display/BloomNode.js +534 -0
  380. package/examples/jsm/tsl/display/CRT.js +150 -0
  381. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +174 -0
  382. package/examples/jsm/tsl/display/DenoiseNode.js +334 -0
  383. package/examples/jsm/tsl/display/DepthOfFieldNode.js +554 -0
  384. package/examples/jsm/tsl/display/DotScreenNode.js +104 -0
  385. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  386. package/examples/jsm/tsl/display/FXAANode.js +365 -0
  387. package/examples/jsm/tsl/display/FilmNode.js +101 -0
  388. package/examples/jsm/tsl/display/GTAONode.js +572 -0
  389. package/examples/jsm/tsl/display/GaussianBlurNode.js +399 -0
  390. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  391. package/examples/jsm/tsl/display/LensflareNode.js +279 -0
  392. package/examples/jsm/tsl/display/Lut3DNode.js +109 -0
  393. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  394. package/examples/jsm/tsl/display/OutlineNode.js +812 -0
  395. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +89 -0
  396. package/examples/jsm/tsl/display/PixelationPassNode.js +335 -0
  397. package/examples/jsm/tsl/display/RGBShiftNode.js +96 -0
  398. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  399. package/examples/jsm/tsl/display/SMAANode.js +768 -0
  400. package/examples/jsm/tsl/display/SSAAPassNode.js +358 -0
  401. package/examples/jsm/tsl/display/SSGINode.js +638 -0
  402. package/examples/jsm/tsl/display/SSRNode.js +656 -0
  403. package/examples/jsm/tsl/display/SSSNode.js +490 -0
  404. package/examples/jsm/tsl/display/Sepia.js +24 -0
  405. package/examples/jsm/tsl/display/Shape.js +29 -0
  406. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  407. package/examples/jsm/tsl/display/SobelOperatorNode.js +168 -0
  408. package/examples/jsm/tsl/display/StereoCompositePassNode.js +192 -0
  409. package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
  410. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  411. package/examples/jsm/tsl/display/TRAANode.js +767 -0
  412. package/examples/jsm/tsl/display/TransitionNode.js +141 -0
  413. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  414. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  415. package/examples/jsm/tsl/display/hashBlur.js +54 -0
  416. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  417. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  418. package/examples/jsm/tsl/lighting/TiledLightsNode.js +442 -0
  419. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  420. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  421. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  422. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  423. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  424. package/examples/jsm/tsl/math/Bayer.js +84 -0
  425. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  426. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  427. package/examples/jsm/tsl/utils/Raymarching.js +70 -0
  428. package/examples/jsm/utils/BufferGeometryUtils.js +1434 -0
  429. package/examples/jsm/utils/CameraUtils.js +82 -0
  430. package/examples/jsm/utils/ColorUtils.js +76 -0
  431. package/examples/jsm/utils/GeometryCompressionUtils.js +547 -0
  432. package/examples/jsm/utils/GeometryUtils.js +226 -0
  433. package/examples/jsm/utils/LDrawUtils.js +211 -0
  434. package/examples/jsm/utils/SceneOptimizer.js +458 -0
  435. package/examples/jsm/utils/SceneUtils.js +363 -0
  436. package/examples/jsm/utils/ShadowMapViewer.js +244 -0
  437. package/examples/jsm/utils/ShadowMapViewerGPU.js +233 -0
  438. package/examples/jsm/utils/SkeletonUtils.js +496 -0
  439. package/examples/jsm/utils/SortUtils.js +175 -0
  440. package/examples/jsm/utils/UVsDebug.js +173 -0
  441. package/examples/jsm/utils/WebGLTextureUtils.js +115 -0
  442. package/examples/jsm/utils/WebGPUTextureUtils.js +81 -0
  443. package/examples/jsm/utils/WorkerPool.js +167 -0
  444. package/examples/jsm/webxr/ARButton.js +251 -0
  445. package/examples/jsm/webxr/OculusHandModel.js +194 -0
  446. package/examples/jsm/webxr/OculusHandPointerModel.js +539 -0
  447. package/examples/jsm/webxr/Text2D.js +52 -0
  448. package/examples/jsm/webxr/VRButton.js +264 -0
  449. package/examples/jsm/webxr/XRButton.js +246 -0
  450. package/examples/jsm/webxr/XRControllerModelFactory.js +403 -0
  451. package/examples/jsm/webxr/XREstimatedLight.js +254 -0
  452. package/examples/jsm/webxr/XRHandMeshModel.js +177 -0
  453. package/examples/jsm/webxr/XRHandModelFactory.js +198 -0
  454. package/examples/jsm/webxr/XRHandPrimitiveModel.js +147 -0
  455. package/examples/jsm/webxr/XRPlanes.js +118 -0
  456. package/package.json +123 -0
  457. package/src/Three.Core.js +187 -0
  458. package/src/Three.Legacy.js +0 -0
  459. package/src/Three.TSL.js +647 -0
  460. package/src/Three.WebGPU.Nodes.js +31 -0
  461. package/src/Three.WebGPU.js +37 -0
  462. package/src/Three.js +10 -0
  463. package/src/animation/AnimationAction.js +942 -0
  464. package/src/animation/AnimationClip.js +628 -0
  465. package/src/animation/AnimationMixer.js +860 -0
  466. package/src/animation/AnimationObjectGroup.js +411 -0
  467. package/src/animation/AnimationUtils.js +495 -0
  468. package/src/animation/KeyframeTrack.js +636 -0
  469. package/src/animation/PropertyBinding.js +794 -0
  470. package/src/animation/PropertyMixer.js +385 -0
  471. package/src/animation/tracks/BooleanKeyframeTrack.js +55 -0
  472. package/src/animation/tracks/ColorKeyframeTrack.js +36 -0
  473. package/src/animation/tracks/NumberKeyframeTrack.js +36 -0
  474. package/src/animation/tracks/QuaternionKeyframeTrack.js +51 -0
  475. package/src/animation/tracks/StringKeyframeTrack.js +55 -0
  476. package/src/animation/tracks/VectorKeyframeTrack.js +36 -0
  477. package/src/audio/Audio.js +778 -0
  478. package/src/audio/AudioAnalyser.js +97 -0
  479. package/src/audio/AudioContext.js +40 -0
  480. package/src/audio/AudioListener.js +218 -0
  481. package/src/audio/PositionalAudio.js +253 -0
  482. package/src/cameras/ArrayCamera.js +54 -0
  483. package/src/cameras/Camera.js +160 -0
  484. package/src/cameras/CubeCamera.js +259 -0
  485. package/src/cameras/OrthographicCamera.js +245 -0
  486. package/src/cameras/PerspectiveCamera.js +407 -0
  487. package/src/cameras/StereoCamera.js +146 -0
  488. package/src/constants.js +1760 -0
  489. package/src/core/BufferAttribute.js +1056 -0
  490. package/src/core/BufferGeometry.js +1458 -0
  491. package/src/core/Clock.js +135 -0
  492. package/src/core/EventDispatcher.js +131 -0
  493. package/src/core/GLBufferAttribute.js +171 -0
  494. package/src/core/InstancedBufferAttribute.js +68 -0
  495. package/src/core/InstancedBufferGeometry.js +60 -0
  496. package/src/core/InstancedInterleavedBuffer.js +74 -0
  497. package/src/core/InterleavedBuffer.js +291 -0
  498. package/src/core/InterleavedBufferAttribute.js +549 -0
  499. package/src/core/Layers.js +121 -0
  500. package/src/core/Object3D.js +1667 -0
  501. package/src/core/Raycaster.js +262 -0
  502. package/src/core/RenderTarget.js +392 -0
  503. package/src/core/RenderTarget3D.js +48 -0
  504. package/src/core/Timer.js +184 -0
  505. package/src/core/Uniform.js +46 -0
  506. package/src/core/UniformsGroup.js +180 -0
  507. package/src/extras/Controls.js +120 -0
  508. package/src/extras/DataUtils.js +217 -0
  509. package/src/extras/Earcut.js +28 -0
  510. package/src/extras/ImageUtils.js +137 -0
  511. package/src/extras/PMREMGenerator.js +1167 -0
  512. package/src/extras/ShapeUtils.js +114 -0
  513. package/src/extras/TextureUtils.js +297 -0
  514. package/src/extras/core/Curve.js +517 -0
  515. package/src/extras/core/CurvePath.js +296 -0
  516. package/src/extras/core/Interpolations.js +111 -0
  517. package/src/extras/core/Path.js +329 -0
  518. package/src/extras/core/Shape.js +165 -0
  519. package/src/extras/core/ShapePath.js +367 -0
  520. package/src/extras/curves/ArcCurve.js +39 -0
  521. package/src/extras/curves/CatmullRomCurve3.js +327 -0
  522. package/src/extras/curves/CubicBezierCurve.js +145 -0
  523. package/src/extras/curves/CubicBezierCurve3.js +129 -0
  524. package/src/extras/curves/Curves.js +10 -0
  525. package/src/extras/curves/EllipseCurve.js +258 -0
  526. package/src/extras/curves/LineCurve.js +128 -0
  527. package/src/extras/curves/LineCurve3.js +128 -0
  528. package/src/extras/curves/QuadraticBezierCurve.js +133 -0
  529. package/src/extras/curves/QuadraticBezierCurve3.js +118 -0
  530. package/src/extras/curves/SplineCurve.js +145 -0
  531. package/src/extras/lib/earcut.js +685 -0
  532. package/src/geometries/BoxGeometry.js +219 -0
  533. package/src/geometries/CapsuleGeometry.js +218 -0
  534. package/src/geometries/CircleGeometry.js +142 -0
  535. package/src/geometries/ConeGeometry.js +70 -0
  536. package/src/geometries/CylinderGeometry.js +333 -0
  537. package/src/geometries/DodecahedronGeometry.js +99 -0
  538. package/src/geometries/EdgesGeometry.js +180 -0
  539. package/src/geometries/ExtrudeGeometry.js +910 -0
  540. package/src/geometries/Geometries.js +21 -0
  541. package/src/geometries/IcosahedronGeometry.js +75 -0
  542. package/src/geometries/LatheGeometry.js +230 -0
  543. package/src/geometries/OctahedronGeometry.js +70 -0
  544. package/src/geometries/PlaneGeometry.js +133 -0
  545. package/src/geometries/PolyhedronGeometry.js +348 -0
  546. package/src/geometries/RingGeometry.js +165 -0
  547. package/src/geometries/ShapeGeometry.js +233 -0
  548. package/src/geometries/SphereGeometry.js +175 -0
  549. package/src/geometries/TetrahedronGeometry.js +67 -0
  550. package/src/geometries/TorusGeometry.js +161 -0
  551. package/src/geometries/TorusKnotGeometry.js +206 -0
  552. package/src/geometries/TubeGeometry.js +253 -0
  553. package/src/geometries/WireframeGeometry.js +179 -0
  554. package/src/helpers/ArrowHelper.js +171 -0
  555. package/src/helpers/AxesHelper.js +96 -0
  556. package/src/helpers/Box3Helper.js +83 -0
  557. package/src/helpers/BoxHelper.js +149 -0
  558. package/src/helpers/CameraHelper.js +345 -0
  559. package/src/helpers/DirectionalLightHelper.js +148 -0
  560. package/src/helpers/GridHelper.js +82 -0
  561. package/src/helpers/HemisphereLightHelper.js +130 -0
  562. package/src/helpers/PlaneHelper.js +96 -0
  563. package/src/helpers/PointLightHelper.js +111 -0
  564. package/src/helpers/PolarGridHelper.js +126 -0
  565. package/src/helpers/SkeletonHelper.js +194 -0
  566. package/src/helpers/SpotLightHelper.js +154 -0
  567. package/src/lights/AmbientLight.js +42 -0
  568. package/src/lights/DirectionalLight.js +113 -0
  569. package/src/lights/DirectionalLightShadow.js +31 -0
  570. package/src/lights/HemisphereLight.js +76 -0
  571. package/src/lights/Light.js +85 -0
  572. package/src/lights/LightProbe.js +75 -0
  573. package/src/lights/LightShadow.js +347 -0
  574. package/src/lights/PointLight.js +131 -0
  575. package/src/lights/PointLightShadow.js +31 -0
  576. package/src/lights/RectAreaLight.js +115 -0
  577. package/src/lights/SpotLight.js +194 -0
  578. package/src/lights/SpotLightShadow.js +80 -0
  579. package/src/lights/webgpu/IESSpotLight.js +47 -0
  580. package/src/lights/webgpu/ProjectorLight.js +46 -0
  581. package/src/loaders/AnimationLoader.js +98 -0
  582. package/src/loaders/AudioLoader.js +108 -0
  583. package/src/loaders/BufferGeometryLoader.js +242 -0
  584. package/src/loaders/Cache.js +115 -0
  585. package/src/loaders/CompressedTextureLoader.js +167 -0
  586. package/src/loaders/CubeTextureLoader.js +103 -0
  587. package/src/loaders/DataTextureLoader.js +174 -0
  588. package/src/loaders/FileLoader.js +367 -0
  589. package/src/loaders/ImageBitmapLoader.js +223 -0
  590. package/src/loaders/ImageLoader.js +168 -0
  591. package/src/loaders/Loader.js +222 -0
  592. package/src/loaders/LoaderUtils.js +59 -0
  593. package/src/loaders/LoadingManager.js +329 -0
  594. package/src/loaders/MaterialLoader.js +439 -0
  595. package/src/loaders/ObjectLoader.js +1304 -0
  596. package/src/loaders/TextureLoader.js +74 -0
  597. package/src/loaders/nodes/NodeLoader.js +194 -0
  598. package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
  599. package/src/loaders/nodes/NodeObjectLoader.js +169 -0
  600. package/src/materials/LineBasicMaterial.js +122 -0
  601. package/src/materials/LineDashedMaterial.js +86 -0
  602. package/src/materials/Material.js +1017 -0
  603. package/src/materials/Materials.js +39 -0
  604. package/src/materials/MeshBasicMaterial.js +250 -0
  605. package/src/materials/MeshDepthMaterial.js +148 -0
  606. package/src/materials/MeshDistanceMaterial.js +119 -0
  607. package/src/materials/MeshLambertMaterial.js +402 -0
  608. package/src/materials/MeshMatcapMaterial.js +245 -0
  609. package/src/materials/MeshNormalMaterial.js +175 -0
  610. package/src/materials/MeshPhongMaterial.js +421 -0
  611. package/src/materials/MeshPhysicalMaterial.js +536 -0
  612. package/src/materials/MeshStandardMaterial.js +425 -0
  613. package/src/materials/MeshToonMaterial.js +321 -0
  614. package/src/materials/PointsMaterial.js +139 -0
  615. package/src/materials/RawShaderMaterial.js +42 -0
  616. package/src/materials/ShaderMaterial.js +413 -0
  617. package/src/materials/ShadowMaterial.js +91 -0
  618. package/src/materials/SpriteMaterial.js +136 -0
  619. package/src/materials/nodes/Line2NodeMaterial.js +569 -0
  620. package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
  621. package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
  622. package/src/materials/nodes/MeshBasicNodeMaterial.js +134 -0
  623. package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
  624. package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
  625. package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
  626. package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
  627. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +521 -0
  628. package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
  629. package/src/materials/nodes/MeshStandardNodeMaterial.js +187 -0
  630. package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
  631. package/src/materials/nodes/NodeMaterial.js +1330 -0
  632. package/src/materials/nodes/NodeMaterials.js +21 -0
  633. package/src/materials/nodes/PointsNodeMaterial.js +211 -0
  634. package/src/materials/nodes/ShadowNodeMaterial.js +76 -0
  635. package/src/materials/nodes/SpriteNodeMaterial.js +186 -0
  636. package/src/materials/nodes/VolumeNodeMaterial.js +81 -0
  637. package/src/materials/nodes/manager/NodeMaterialObserver.js +718 -0
  638. package/src/math/Box2.js +381 -0
  639. package/src/math/Box3.js +805 -0
  640. package/src/math/Color.js +967 -0
  641. package/src/math/ColorManagement.js +215 -0
  642. package/src/math/Cylindrical.js +120 -0
  643. package/src/math/Euler.js +449 -0
  644. package/src/math/Frustum.js +285 -0
  645. package/src/math/FrustumArray.js +258 -0
  646. package/src/math/Interpolant.js +320 -0
  647. package/src/math/Line3.js +337 -0
  648. package/src/math/MathUtils.js +751 -0
  649. package/src/math/Matrix2.js +128 -0
  650. package/src/math/Matrix3.js +617 -0
  651. package/src/math/Matrix4.js +1314 -0
  652. package/src/math/Plane.js +368 -0
  653. package/src/math/Quaternion.js +918 -0
  654. package/src/math/Ray.js +655 -0
  655. package/src/math/Sphere.js +420 -0
  656. package/src/math/Spherical.js +147 -0
  657. package/src/math/SphericalHarmonics3.js +341 -0
  658. package/src/math/Triangle.js +539 -0
  659. package/src/math/Vector2.js +870 -0
  660. package/src/math/Vector3.js +1263 -0
  661. package/src/math/Vector4.js +1067 -0
  662. package/src/math/interpolants/BezierInterpolant.js +108 -0
  663. package/src/math/interpolants/CubicInterpolant.js +159 -0
  664. package/src/math/interpolants/DiscreteInterpolant.js +34 -0
  665. package/src/math/interpolants/LinearInterpolant.js +51 -0
  666. package/src/math/interpolants/QuaternionLinearInterpolant.js +48 -0
  667. package/src/nodes/Nodes.js +166 -0
  668. package/src/nodes/TSL.js +173 -0
  669. package/src/nodes/accessors/AccessorsUtils.js +53 -0
  670. package/src/nodes/accessors/Arrays.js +68 -0
  671. package/src/nodes/accessors/BatchNode.js +163 -0
  672. package/src/nodes/accessors/Bitangent.js +82 -0
  673. package/src/nodes/accessors/BufferAttributeNode.js +432 -0
  674. package/src/nodes/accessors/BufferNode.js +128 -0
  675. package/src/nodes/accessors/BuiltinNode.js +63 -0
  676. package/src/nodes/accessors/Camera.js +403 -0
  677. package/src/nodes/accessors/ClippingNode.js +255 -0
  678. package/src/nodes/accessors/CubeTextureNode.js +215 -0
  679. package/src/nodes/accessors/InstanceNode.js +349 -0
  680. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  681. package/src/nodes/accessors/Lights.js +139 -0
  682. package/src/nodes/accessors/MaterialNode.js +783 -0
  683. package/src/nodes/accessors/MaterialProperties.js +56 -0
  684. package/src/nodes/accessors/MaterialReferenceNode.js +84 -0
  685. package/src/nodes/accessors/ModelNode.js +184 -0
  686. package/src/nodes/accessors/ModelViewProjectionNode.js +13 -0
  687. package/src/nodes/accessors/MorphNode.js +310 -0
  688. package/src/nodes/accessors/Normal.js +243 -0
  689. package/src/nodes/accessors/Object3DNode.js +268 -0
  690. package/src/nodes/accessors/PointUVNode.js +55 -0
  691. package/src/nodes/accessors/Position.js +122 -0
  692. package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
  693. package/src/nodes/accessors/ReferenceNode.js +424 -0
  694. package/src/nodes/accessors/ReflectVector.js +36 -0
  695. package/src/nodes/accessors/RendererReferenceNode.js +78 -0
  696. package/src/nodes/accessors/SceneProperties.js +47 -0
  697. package/src/nodes/accessors/SkinningNode.js +328 -0
  698. package/src/nodes/accessors/StorageBufferNode.js +405 -0
  699. package/src/nodes/accessors/StorageTextureNode.js +295 -0
  700. package/src/nodes/accessors/Tangent.js +60 -0
  701. package/src/nodes/accessors/TangentUtils.js +46 -0
  702. package/src/nodes/accessors/Texture3DNode.js +196 -0
  703. package/src/nodes/accessors/TextureBicubic.js +92 -0
  704. package/src/nodes/accessors/TextureNode.js +971 -0
  705. package/src/nodes/accessors/TextureSizeNode.js +77 -0
  706. package/src/nodes/accessors/UV.js +11 -0
  707. package/src/nodes/accessors/UniformArrayNode.js +350 -0
  708. package/src/nodes/accessors/UserDataNode.js +76 -0
  709. package/src/nodes/accessors/VelocityNode.js +224 -0
  710. package/src/nodes/accessors/VertexColorNode.js +109 -0
  711. package/src/nodes/code/CodeNode.js +181 -0
  712. package/src/nodes/code/ExpressionNode.js +68 -0
  713. package/src/nodes/code/FunctionCallNode.js +187 -0
  714. package/src/nodes/code/FunctionNode.js +182 -0
  715. package/src/nodes/core/ArrayNode.js +174 -0
  716. package/src/nodes/core/AssignNode.js +202 -0
  717. package/src/nodes/core/AttributeNode.js +168 -0
  718. package/src/nodes/core/BypassNode.js +93 -0
  719. package/src/nodes/core/ConstNode.js +67 -0
  720. package/src/nodes/core/ContextNode.js +283 -0
  721. package/src/nodes/core/IndexNode.js +165 -0
  722. package/src/nodes/core/InputNode.js +136 -0
  723. package/src/nodes/core/InspectorNode.js +128 -0
  724. package/src/nodes/core/IsolateNode.js +133 -0
  725. package/src/nodes/core/LightingModel.js +77 -0
  726. package/src/nodes/core/MRTNode.js +196 -0
  727. package/src/nodes/core/Node.js +1180 -0
  728. package/src/nodes/core/NodeAttribute.js +53 -0
  729. package/src/nodes/core/NodeBuilder.js +3299 -0
  730. package/src/nodes/core/NodeCache.js +75 -0
  731. package/src/nodes/core/NodeCode.js +46 -0
  732. package/src/nodes/core/NodeError.js +28 -0
  733. package/src/nodes/core/NodeFrame.js +314 -0
  734. package/src/nodes/core/NodeFunction.js +69 -0
  735. package/src/nodes/core/NodeFunctionInput.js +61 -0
  736. package/src/nodes/core/NodeParser.js +23 -0
  737. package/src/nodes/core/NodeUniform.js +91 -0
  738. package/src/nodes/core/NodeUtils.js +408 -0
  739. package/src/nodes/core/NodeVar.js +60 -0
  740. package/src/nodes/core/NodeVarying.js +63 -0
  741. package/src/nodes/core/OutputStructNode.js +105 -0
  742. package/src/nodes/core/ParameterNode.js +94 -0
  743. package/src/nodes/core/PropertyNode.js +367 -0
  744. package/src/nodes/core/StackNode.js +426 -0
  745. package/src/nodes/core/StackTrace.js +139 -0
  746. package/src/nodes/core/StructNode.js +134 -0
  747. package/src/nodes/core/StructType.js +13 -0
  748. package/src/nodes/core/StructTypeNode.js +148 -0
  749. package/src/nodes/core/SubBuildNode.js +89 -0
  750. package/src/nodes/core/TempNode.js +88 -0
  751. package/src/nodes/core/UniformGroupNode.js +167 -0
  752. package/src/nodes/core/UniformNode.js +259 -0
  753. package/src/nodes/core/VarNode.js +367 -0
  754. package/src/nodes/core/VaryingNode.js +210 -0
  755. package/src/nodes/core/constants.js +68 -0
  756. package/src/nodes/display/BlendModes.js +171 -0
  757. package/src/nodes/display/BumpMapNode.js +117 -0
  758. package/src/nodes/display/ColorAdjustment.js +158 -0
  759. package/src/nodes/display/ColorSpaceFunctions.js +54 -0
  760. package/src/nodes/display/ColorSpaceNode.js +164 -0
  761. package/src/nodes/display/FrontFacingNode.js +102 -0
  762. package/src/nodes/display/NormalMapNode.js +153 -0
  763. package/src/nodes/display/PassNode.js +1055 -0
  764. package/src/nodes/display/RenderOutputNode.js +150 -0
  765. package/src/nodes/display/ScreenNode.js +292 -0
  766. package/src/nodes/display/ToneMappingFunctions.js +242 -0
  767. package/src/nodes/display/ToneMappingNode.js +147 -0
  768. package/src/nodes/display/ToonOutlinePassNode.js +191 -0
  769. package/src/nodes/display/ViewportDepthNode.js +342 -0
  770. package/src/nodes/display/ViewportDepthTextureNode.js +63 -0
  771. package/src/nodes/display/ViewportSharedTextureNode.js +73 -0
  772. package/src/nodes/display/ViewportTextureNode.js +256 -0
  773. package/src/nodes/fog/Fog.js +97 -0
  774. package/src/nodes/functions/BSDF/BRDF_GGX.js +55 -0
  775. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  776. package/src/nodes/functions/BSDF/BRDF_Lambert.js +9 -0
  777. package/src/nodes/functions/BSDF/BRDF_Sheen.js +57 -0
  778. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  779. package/src/nodes/functions/BSDF/D_GGX.js +23 -0
  780. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
  781. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
  782. package/src/nodes/functions/BSDF/F_Schlick.js +16 -0
  783. package/src/nodes/functions/BSDF/LTC.js +175 -0
  784. package/src/nodes/functions/BSDF/Schlick_to_F0.js +21 -0
  785. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +26 -0
  786. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
  787. package/src/nodes/functions/BasicLightingModel.js +100 -0
  788. package/src/nodes/functions/PhongLightingModel.js +99 -0
  789. package/src/nodes/functions/PhysicalLightingModel.js +878 -0
  790. package/src/nodes/functions/ShadowMaskModel.js +58 -0
  791. package/src/nodes/functions/ToonLightingModel.js +70 -0
  792. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  793. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  794. package/src/nodes/functions/material/getGeometryRoughness.js +19 -0
  795. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  796. package/src/nodes/functions/material/getRoughness.js +18 -0
  797. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  798. package/src/nodes/geometry/RangeNode.js +210 -0
  799. package/src/nodes/gpgpu/AtomicFunctionNode.js +274 -0
  800. package/src/nodes/gpgpu/BarrierNode.js +98 -0
  801. package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
  802. package/src/nodes/gpgpu/ComputeNode.js +310 -0
  803. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  804. package/src/nodes/gpgpu/WorkgroupInfoNode.js +234 -0
  805. package/src/nodes/lighting/AONode.js +45 -0
  806. package/src/nodes/lighting/AmbientLightNode.js +35 -0
  807. package/src/nodes/lighting/AnalyticLightNode.js +309 -0
  808. package/src/nodes/lighting/BasicEnvironmentNode.js +49 -0
  809. package/src/nodes/lighting/BasicLightMapNode.js +49 -0
  810. package/src/nodes/lighting/DirectionalLightNode.js +39 -0
  811. package/src/nodes/lighting/EnvironmentNode.js +178 -0
  812. package/src/nodes/lighting/HemisphereLightNode.js +87 -0
  813. package/src/nodes/lighting/IESSpotLightNode.js +49 -0
  814. package/src/nodes/lighting/IrradianceNode.js +44 -0
  815. package/src/nodes/lighting/LightProbeNode.js +73 -0
  816. package/src/nodes/lighting/LightUtils.js +25 -0
  817. package/src/nodes/lighting/LightingContextNode.js +115 -0
  818. package/src/nodes/lighting/LightingNode.js +36 -0
  819. package/src/nodes/lighting/LightsNode.js +432 -0
  820. package/src/nodes/lighting/PointLightNode.js +102 -0
  821. package/src/nodes/lighting/PointShadowNode.js +325 -0
  822. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  823. package/src/nodes/lighting/RectAreaLightNode.js +133 -0
  824. package/src/nodes/lighting/ShadowBaseNode.js +81 -0
  825. package/src/nodes/lighting/ShadowFilterNode.js +264 -0
  826. package/src/nodes/lighting/ShadowNode.js +889 -0
  827. package/src/nodes/lighting/SpotLightNode.js +168 -0
  828. package/src/nodes/materialx/DISCLAIMER.md +199 -0
  829. package/src/nodes/materialx/MaterialXNodes.js +197 -0
  830. package/src/nodes/materialx/lib/mx_hsv.js +127 -0
  831. package/src/nodes/materialx/lib/mx_noise.js +1491 -0
  832. package/src/nodes/materialx/lib/mx_transform_color.js +23 -0
  833. package/src/nodes/math/BitcastNode.js +156 -0
  834. package/src/nodes/math/BitcountNode.js +433 -0
  835. package/src/nodes/math/ConditionalNode.js +245 -0
  836. package/src/nodes/math/Hash.js +21 -0
  837. package/src/nodes/math/MathNode.js +1202 -0
  838. package/src/nodes/math/MathUtils.js +54 -0
  839. package/src/nodes/math/OperatorNode.js +752 -0
  840. package/src/nodes/math/PackFloatNode.js +98 -0
  841. package/src/nodes/math/TriNoise3D.js +71 -0
  842. package/src/nodes/math/UnpackFloatNode.js +96 -0
  843. package/src/nodes/parsers/GLSLNodeFunction.js +168 -0
  844. package/src/nodes/parsers/GLSLNodeParser.js +25 -0
  845. package/src/nodes/pmrem/PMREMNode.js +397 -0
  846. package/src/nodes/pmrem/PMREMUtils.js +397 -0
  847. package/src/nodes/procedural/Checker.js +22 -0
  848. package/src/nodes/shapes/Shapes.js +33 -0
  849. package/src/nodes/tsl/TSLBase.js +36 -0
  850. package/src/nodes/tsl/TSLCore.js +1250 -0
  851. package/src/nodes/utils/ArrayElementNode.js +90 -0
  852. package/src/nodes/utils/ConvertNode.js +100 -0
  853. package/src/nodes/utils/CubeMapNode.js +237 -0
  854. package/src/nodes/utils/DebugNode.js +83 -0
  855. package/src/nodes/utils/Discard.js +24 -0
  856. package/src/nodes/utils/EquirectUV.js +27 -0
  857. package/src/nodes/utils/EventNode.js +148 -0
  858. package/src/nodes/utils/FlipNode.js +106 -0
  859. package/src/nodes/utils/FunctionOverloadingNode.js +170 -0
  860. package/src/nodes/utils/JoinNode.js +117 -0
  861. package/src/nodes/utils/LoopNode.js +349 -0
  862. package/src/nodes/utils/MatcapUV.js +22 -0
  863. package/src/nodes/utils/MaxMipLevelNode.js +103 -0
  864. package/src/nodes/utils/MemberNode.js +120 -0
  865. package/src/nodes/utils/Oscillators.js +41 -0
  866. package/src/nodes/utils/Packing.js +33 -0
  867. package/src/nodes/utils/PostProcessingUtils.js +154 -0
  868. package/src/nodes/utils/RTTNode.js +289 -0
  869. package/src/nodes/utils/ReflectorNode.js +629 -0
  870. package/src/nodes/utils/Remap.js +48 -0
  871. package/src/nodes/utils/RotateNode.js +103 -0
  872. package/src/nodes/utils/SampleNode.js +91 -0
  873. package/src/nodes/utils/SetNode.js +108 -0
  874. package/src/nodes/utils/SplitNode.js +179 -0
  875. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  876. package/src/nodes/utils/SpriteUtils.js +63 -0
  877. package/src/nodes/utils/StorageArrayElementNode.js +143 -0
  878. package/src/nodes/utils/Timer.js +26 -0
  879. package/src/nodes/utils/TriplanarTextures.js +65 -0
  880. package/src/nodes/utils/UVUtils.js +67 -0
  881. package/src/nodes/utils/ViewportUtils.js +26 -0
  882. package/src/objects/BatchedMesh.js +1682 -0
  883. package/src/objects/Bone.js +41 -0
  884. package/src/objects/ClippingGroup.js +68 -0
  885. package/src/objects/Group.js +41 -0
  886. package/src/objects/InstancedMesh.js +422 -0
  887. package/src/objects/LOD.js +329 -0
  888. package/src/objects/Line.js +329 -0
  889. package/src/objects/LineLoop.js +37 -0
  890. package/src/objects/LineSegments.js +74 -0
  891. package/src/objects/Mesh.js +496 -0
  892. package/src/objects/Points.js +228 -0
  893. package/src/objects/Skeleton.js +392 -0
  894. package/src/objects/SkinnedMesh.js +370 -0
  895. package/src/objects/Sprite.js +245 -0
  896. package/src/renderers/WebGL3DRenderTarget.js +48 -0
  897. package/src/renderers/WebGLArrayRenderTarget.js +48 -0
  898. package/src/renderers/WebGLCubeRenderTarget.js +182 -0
  899. package/src/renderers/WebGLRenderTarget.js +34 -0
  900. package/src/renderers/WebGLRenderer.js +3699 -0
  901. package/src/renderers/common/Animation.js +159 -0
  902. package/src/renderers/common/Attributes.js +132 -0
  903. package/src/renderers/common/Backend.js +769 -0
  904. package/src/renderers/common/Background.js +225 -0
  905. package/src/renderers/common/BindGroup.js +46 -0
  906. package/src/renderers/common/Binding.js +71 -0
  907. package/src/renderers/common/Bindings.js +394 -0
  908. package/src/renderers/common/BlendMode.js +143 -0
  909. package/src/renderers/common/Buffer.js +127 -0
  910. package/src/renderers/common/BufferUtils.js +58 -0
  911. package/src/renderers/common/BundleGroup.js +83 -0
  912. package/src/renderers/common/CanvasTarget.js +341 -0
  913. package/src/renderers/common/ChainMap.js +122 -0
  914. package/src/renderers/common/ClippingContext.js +262 -0
  915. package/src/renderers/common/Color4.js +77 -0
  916. package/src/renderers/common/ComputePipeline.js +41 -0
  917. package/src/renderers/common/Constants.js +15 -0
  918. package/src/renderers/common/CubeRenderTarget.js +147 -0
  919. package/src/renderers/common/DataMap.js +90 -0
  920. package/src/renderers/common/Geometries.js +396 -0
  921. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  922. package/src/renderers/common/Info.js +501 -0
  923. package/src/renderers/common/InspectorBase.js +151 -0
  924. package/src/renderers/common/Lighting.js +57 -0
  925. package/src/renderers/common/Pipeline.js +35 -0
  926. package/src/renderers/common/Pipelines.js +498 -0
  927. package/src/renderers/common/PostProcessing.js +28 -0
  928. package/src/renderers/common/ProgrammableStage.js +78 -0
  929. package/src/renderers/common/QuadMesh.js +112 -0
  930. package/src/renderers/common/ReadbackBuffer.js +78 -0
  931. package/src/renderers/common/RenderBundle.js +26 -0
  932. package/src/renderers/common/RenderBundles.js +71 -0
  933. package/src/renderers/common/RenderContext.js +281 -0
  934. package/src/renderers/common/RenderContexts.js +100 -0
  935. package/src/renderers/common/RenderList.js +404 -0
  936. package/src/renderers/common/RenderLists.js +78 -0
  937. package/src/renderers/common/RenderObject.js +915 -0
  938. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  939. package/src/renderers/common/RenderObjects.js +218 -0
  940. package/src/renderers/common/RenderPipeline.js +255 -0
  941. package/src/renderers/common/Renderer.js +3654 -0
  942. package/src/renderers/common/RendererUtils.js +200 -0
  943. package/src/renderers/common/SampledTexture.js +152 -0
  944. package/src/renderers/common/Sampler.js +165 -0
  945. package/src/renderers/common/Storage3DTexture.js +100 -0
  946. package/src/renderers/common/StorageArrayTexture.js +84 -0
  947. package/src/renderers/common/StorageBuffer.js +53 -0
  948. package/src/renderers/common/StorageBufferAttribute.js +46 -0
  949. package/src/renderers/common/StorageInstancedBufferAttribute.js +46 -0
  950. package/src/renderers/common/StorageTexture.js +86 -0
  951. package/src/renderers/common/Textures.js +629 -0
  952. package/src/renderers/common/TimestampQueryPool.js +163 -0
  953. package/src/renderers/common/Uniform.js +375 -0
  954. package/src/renderers/common/UniformBuffer.js +34 -0
  955. package/src/renderers/common/UniformsGroup.js +548 -0
  956. package/src/renderers/common/XRManager.js +1684 -0
  957. package/src/renderers/common/XRRenderTarget.js +91 -0
  958. package/src/renderers/common/extras/PMREMGenerator.js +1042 -0
  959. package/src/renderers/common/nodes/NodeBuilderState.js +152 -0
  960. package/src/renderers/common/nodes/NodeLibrary.js +196 -0
  961. package/src/renderers/common/nodes/NodeManager.js +983 -0
  962. package/src/renderers/common/nodes/NodeSampledTexture.js +140 -0
  963. package/src/renderers/common/nodes/NodeSampler.js +62 -0
  964. package/src/renderers/common/nodes/NodeStorageBuffer.js +72 -0
  965. package/src/renderers/common/nodes/NodeUniform.js +418 -0
  966. package/src/renderers/common/nodes/NodeUniformBuffer.js +105 -0
  967. package/src/renderers/common/nodes/NodeUniformsGroup.js +51 -0
  968. package/src/renderers/shaders/DFGLUTData.js +49 -0
  969. package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
  970. package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
  971. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +7 -0
  972. package/src/renderers/shaders/ShaderChunk/alphamap_pars_fragment.glsl.js +7 -0
  973. package/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl.js +16 -0
  974. package/src/renderers/shaders/ShaderChunk/alphatest_pars_fragment.glsl.js +5 -0
  975. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +26 -0
  976. package/src/renderers/shaders/ShaderChunk/aomap_pars_fragment.glsl.js +8 -0
  977. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +49 -0
  978. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
  979. package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +9 -0
  980. package/src/renderers/shaders/ShaderChunk/beginnormal_vertex.glsl.js +9 -0
  981. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +33 -0
  982. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +43 -0
  983. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +7 -0
  984. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +10 -0
  985. package/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js +21 -0
  986. package/src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl.js +78 -0
  987. package/src/renderers/shaders/ShaderChunk/clipping_planes_pars_fragment.glsl.js +9 -0
  988. package/src/renderers/shaders/ShaderChunk/clipping_planes_pars_vertex.glsl.js +7 -0
  989. package/src/renderers/shaders/ShaderChunk/clipping_planes_vertex.glsl.js +7 -0
  990. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +7 -0
  991. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +7 -0
  992. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +7 -0
  993. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +29 -0
  994. package/src/renderers/shaders/ShaderChunk/colorspace_fragment.glsl.js +3 -0
  995. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +15 -0
  996. package/src/renderers/shaders/ShaderChunk/common.glsl.js +125 -0
  997. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +186 -0
  998. package/src/renderers/shaders/ShaderChunk/default_fragment.glsl.js +5 -0
  999. package/src/renderers/shaders/ShaderChunk/default_vertex.glsl.js +5 -0
  1000. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +63 -0
  1001. package/src/renderers/shaders/ShaderChunk/displacementmap_pars_vertex.glsl.js +9 -0
  1002. package/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js +7 -0
  1003. package/src/renderers/shaders/ShaderChunk/dithering_fragment.glsl.js +7 -0
  1004. package/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js +20 -0
  1005. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +17 -0
  1006. package/src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl.js +7 -0
  1007. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +14 -0
  1008. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +58 -0
  1009. package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +21 -0
  1010. package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +22 -0
  1011. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +69 -0
  1012. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +37 -0
  1013. package/src/renderers/shaders/ShaderChunk/fog_fragment.glsl.js +17 -0
  1014. package/src/renderers/shaders/ShaderChunk/fog_pars_fragment.glsl.js +19 -0
  1015. package/src/renderers/shaders/ShaderChunk/fog_pars_vertex.glsl.js +7 -0
  1016. package/src/renderers/shaders/ShaderChunk/fog_vertex.glsl.js +7 -0
  1017. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +27 -0
  1018. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +120 -0
  1019. package/src/renderers/shaders/ShaderChunk/iridescence_pars_fragment.glsl.js +14 -0
  1020. package/src/renderers/shaders/ShaderChunk/lightmap_pars_fragment.glsl.js +8 -0
  1021. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  1022. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +213 -0
  1023. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +19 -0
  1024. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +44 -0
  1025. package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
  1026. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +28 -0
  1027. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +216 -0
  1028. package/src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl.js +7 -0
  1029. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +32 -0
  1030. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +161 -0
  1031. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +656 -0
  1032. package/src/renderers/shaders/ShaderChunk/lights_toon_fragment.glsl.js +4 -0
  1033. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +26 -0
  1034. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +9 -0
  1035. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +9 -0
  1036. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +8 -0
  1037. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +8 -0
  1038. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +17 -0
  1039. package/src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl.js +7 -0
  1040. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +27 -0
  1041. package/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js +27 -0
  1042. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +12 -0
  1043. package/src/renderers/shaders/ShaderChunk/metalnessmap_pars_fragment.glsl.js +7 -0
  1044. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +24 -0
  1045. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +14 -0
  1046. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +16 -0
  1047. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +26 -0
  1048. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +16 -0
  1049. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +76 -0
  1050. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +40 -0
  1051. package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +14 -0
  1052. package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +14 -0
  1053. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +14 -0
  1054. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +43 -0
  1055. package/src/renderers/shaders/ShaderChunk/opaque_fragment.glsl.js +11 -0
  1056. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +116 -0
  1057. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +7 -0
  1058. package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +19 -0
  1059. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -0
  1060. package/src/renderers/shaders/ShaderChunk/roughnessmap_pars_fragment.glsl.js +7 -0
  1061. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +376 -0
  1062. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +71 -0
  1063. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +78 -0
  1064. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +66 -0
  1065. package/src/renderers/shaders/ShaderChunk/skinbase_vertex.glsl.js +10 -0
  1066. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +25 -0
  1067. package/src/renderers/shaders/ShaderChunk/skinning_vertex.glsl.js +15 -0
  1068. package/src/renderers/shaders/ShaderChunk/skinnormal_vertex.glsl.js +20 -0
  1069. package/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js +14 -0
  1070. package/src/renderers/shaders/ShaderChunk/specularmap_pars_fragment.glsl.js +7 -0
  1071. package/src/renderers/shaders/ShaderChunk/tonemapping_fragment.glsl.js +7 -0
  1072. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +200 -0
  1073. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +36 -0
  1074. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +235 -0
  1075. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +119 -0
  1076. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +145 -0
  1077. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +122 -0
  1078. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +21 -0
  1079. package/src/renderers/shaders/ShaderChunk.js +272 -0
  1080. package/src/renderers/shaders/ShaderLib/background.glsl.js +40 -0
  1081. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  1082. package/src/renderers/shaders/ShaderLib/cube.glsl.js +36 -0
  1083. package/src/renderers/shaders/ShaderLib/depth.glsl.js +117 -0
  1084. package/src/renderers/shaders/ShaderLib/distance.glsl.js +77 -0
  1085. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +35 -0
  1086. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +76 -0
  1087. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +116 -0
  1088. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +126 -0
  1089. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +112 -0
  1090. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +86 -0
  1091. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +128 -0
  1092. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +224 -0
  1093. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +118 -0
  1094. package/src/renderers/shaders/ShaderLib/points.glsl.js +87 -0
  1095. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +58 -0
  1096. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +79 -0
  1097. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +51 -0
  1098. package/src/renderers/shaders/ShaderLib.js +362 -0
  1099. package/src/renderers/shaders/UniformsLib.js +234 -0
  1100. package/src/renderers/shaders/UniformsUtils.js +154 -0
  1101. package/src/renderers/webgl/WebGLAnimation.js +54 -0
  1102. package/src/renderers/webgl/WebGLAttributes.js +237 -0
  1103. package/src/renderers/webgl/WebGLBackground.js +303 -0
  1104. package/src/renderers/webgl/WebGLBindingStates.js +666 -0
  1105. package/src/renderers/webgl/WebGLBufferRenderer.js +57 -0
  1106. package/src/renderers/webgl/WebGLCapabilities.js +150 -0
  1107. package/src/renderers/webgl/WebGLClipping.js +171 -0
  1108. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  1109. package/src/renderers/webgl/WebGLExtensions.js +61 -0
  1110. package/src/renderers/webgl/WebGLGeometries.js +186 -0
  1111. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +68 -0
  1112. package/src/renderers/webgl/WebGLInfo.js +73 -0
  1113. package/src/renderers/webgl/WebGLLights.js +584 -0
  1114. package/src/renderers/webgl/WebGLMaterials.js +602 -0
  1115. package/src/renderers/webgl/WebGLMorphtargets.js +168 -0
  1116. package/src/renderers/webgl/WebGLObjects.js +94 -0
  1117. package/src/renderers/webgl/WebGLOutput.js +270 -0
  1118. package/src/renderers/webgl/WebGLProgram.js +1031 -0
  1119. package/src/renderers/webgl/WebGLPrograms.js +679 -0
  1120. package/src/renderers/webgl/WebGLProperties.js +55 -0
  1121. package/src/renderers/webgl/WebGLRenderLists.js +253 -0
  1122. package/src/renderers/webgl/WebGLRenderStates.js +124 -0
  1123. package/src/renderers/webgl/WebGLShader.js +12 -0
  1124. package/src/renderers/webgl/WebGLShaderCache.js +124 -0
  1125. package/src/renderers/webgl/WebGLShadowMap.js +600 -0
  1126. package/src/renderers/webgl/WebGLState.js +1370 -0
  1127. package/src/renderers/webgl/WebGLTextures.js +2506 -0
  1128. package/src/renderers/webgl/WebGLUniforms.js +1203 -0
  1129. package/src/renderers/webgl/WebGLUniformsGroups.js +413 -0
  1130. package/src/renderers/webgl/WebGLUtils.js +217 -0
  1131. package/src/renderers/webgl-fallback/WebGLBackend.js +2783 -0
  1132. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +99 -0
  1133. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +1676 -0
  1134. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +359 -0
  1135. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +89 -0
  1136. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +13 -0
  1137. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +83 -0
  1138. package/src/renderers/webgl-fallback/utils/WebGLState.js +1361 -0
  1139. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1324 -0
  1140. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +396 -0
  1141. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +317 -0
  1142. package/src/renderers/webgpu/WebGPUBackend.js +2602 -0
  1143. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +69 -0
  1144. package/src/renderers/webgpu/WebGPURenderer.js +107 -0
  1145. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +66 -0
  1146. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +100 -0
  1147. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +2523 -0
  1148. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +187 -0
  1149. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +25 -0
  1150. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +522 -0
  1151. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +642 -0
  1152. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  1153. package/src/renderers/webgpu/utils/WebGPUConstants.js +354 -0
  1154. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +846 -0
  1155. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +389 -0
  1156. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1673 -0
  1157. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +310 -0
  1158. package/src/renderers/webgpu/utils/WebGPUUtils.js +269 -0
  1159. package/src/renderers/webxr/WebXRController.js +440 -0
  1160. package/src/renderers/webxr/WebXRDepthSensing.js +155 -0
  1161. package/src/renderers/webxr/WebXRManager.js +1103 -0
  1162. package/src/scenes/Fog.js +98 -0
  1163. package/src/scenes/FogExp2.js +86 -0
  1164. package/src/scenes/Scene.js +165 -0
  1165. package/src/textures/CanvasTexture.js +45 -0
  1166. package/src/textures/CompressedArrayTexture.js +89 -0
  1167. package/src/textures/CompressedCubeTexture.js +48 -0
  1168. package/src/textures/CompressedTexture.js +86 -0
  1169. package/src/textures/CubeDepthTexture.js +76 -0
  1170. package/src/textures/CubeTexture.js +81 -0
  1171. package/src/textures/Data3DTexture.js +112 -0
  1172. package/src/textures/DataArrayTexture.js +134 -0
  1173. package/src/textures/DataTexture.js +87 -0
  1174. package/src/textures/DepthTexture.js +104 -0
  1175. package/src/textures/ExternalTexture.js +56 -0
  1176. package/src/textures/FramebufferTexture.js +85 -0
  1177. package/src/textures/HTMLTexture.js +74 -0
  1178. package/src/textures/Source.js +230 -0
  1179. package/src/textures/Texture.js +812 -0
  1180. package/src/textures/VideoFrameTexture.js +72 -0
  1181. package/src/textures/VideoTexture.js +127 -0
  1182. package/src/utils.js +493 -0
@@ -0,0 +1,1684 @@
1
+ import { ArrayCamera } from '../../cameras/ArrayCamera.js';
2
+ import { EventDispatcher } from '../../core/EventDispatcher.js';
3
+ import { PerspectiveCamera } from '../../cameras/PerspectiveCamera.js';
4
+ import { Quaternion } from '../../math/Quaternion.js';
5
+ import { RAD2DEG } from '../../math/MathUtils.js';
6
+ import { Vector2 } from '../../math/Vector2.js';
7
+ import { Vector3 } from '../../math/Vector3.js';
8
+ import { Vector4 } from '../../math/Vector4.js';
9
+ import { WebXRController } from '../webxr/WebXRController.js';
10
+ import { AddEquation, BackSide, CustomBlending, DepthFormat, DepthStencilFormat, FrontSide, RGBAFormat, UnsignedByteType, UnsignedInt248Type, UnsignedIntType, ZeroFactor } from '../../constants.js';
11
+ import { DepthTexture } from '../../textures/DepthTexture.js';
12
+ import { XRRenderTarget } from './XRRenderTarget.js';
13
+ import { CylinderGeometry } from '../../geometries/CylinderGeometry.js';
14
+ import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
15
+ import { MeshBasicMaterial } from '../../materials/MeshBasicMaterial.js';
16
+ import { Mesh } from '../../objects/Mesh.js';
17
+ import { warn } from '../../utils.js';
18
+ import { renderOutput } from '../../nodes/display/RenderOutputNode.js';
19
+
20
+ const _cameraLPos = /*@__PURE__*/ new Vector3();
21
+ const _cameraRPos = /*@__PURE__*/ new Vector3();
22
+
23
+ const _contextNodeLib = /*@__PURE__*/ new WeakMap();
24
+
25
+ /**
26
+ * The XR manager is built on top of the WebXR Device API to
27
+ * manage XR sessions with `WebGPURenderer`.
28
+ *
29
+ * XR is currently only supported with a WebGL 2 backend.
30
+ *
31
+ * @augments EventDispatcher
32
+ */
33
+ class XRManager extends EventDispatcher {
34
+
35
+ /**
36
+ * Constructs a new XR manager.
37
+ *
38
+ * @param {Renderer} renderer - The renderer.
39
+ * @param {boolean} [multiview=false] - Enables multiview if the device supports it.
40
+ */
41
+ constructor( renderer, multiview = false ) {
42
+
43
+ super();
44
+
45
+ /**
46
+ * This flag globally enables XR rendering.
47
+ *
48
+ * @type {boolean}
49
+ * @default false
50
+ */
51
+ this.enabled = false;
52
+
53
+ /**
54
+ * Whether the XR device is currently presenting or not.
55
+ *
56
+ * @type {boolean}
57
+ * @default false
58
+ * @readonly
59
+ */
60
+ this.isPresenting = false;
61
+
62
+ /**
63
+ * Whether the XR camera should automatically be updated or not.
64
+ *
65
+ * @type {boolean}
66
+ * @default true
67
+ */
68
+ this.cameraAutoUpdate = true;
69
+
70
+ /**
71
+ * The renderer.
72
+ *
73
+ * @private
74
+ * @type {Renderer}
75
+ */
76
+ this._renderer = renderer;
77
+
78
+ // camera
79
+
80
+ /**
81
+ * Represents the camera for the left eye.
82
+ *
83
+ * @private
84
+ * @type {PerspectiveCamera}
85
+ */
86
+ this._cameraL = new PerspectiveCamera();
87
+ this._cameraL.viewport = new Vector4();
88
+
89
+ /**
90
+ * Represents the camera for the right eye.
91
+ *
92
+ * @private
93
+ * @type {PerspectiveCamera}
94
+ */
95
+ this._cameraR = new PerspectiveCamera();
96
+ this._cameraR.viewport = new Vector4();
97
+
98
+ /**
99
+ * A list of cameras used for rendering the XR views.
100
+ *
101
+ * @private
102
+ * @type {Array<Camera>}
103
+ */
104
+ this._cameras = [ this._cameraL, this._cameraR ];
105
+
106
+ /**
107
+ * The main XR camera.
108
+ *
109
+ * @private
110
+ * @type {ArrayCamera}
111
+ */
112
+ this._cameraXR = new ArrayCamera();
113
+
114
+ /**
115
+ * The current near value of the XR camera.
116
+ *
117
+ * @private
118
+ * @type {?number}
119
+ * @default null
120
+ */
121
+ this._currentDepthNear = null;
122
+
123
+ /**
124
+ * The current far value of the XR camera.
125
+ *
126
+ * @private
127
+ * @type {?number}
128
+ * @default null
129
+ */
130
+ this._currentDepthFar = null;
131
+
132
+ /**
133
+ * A list of WebXR controllers requested by the application.
134
+ *
135
+ * @private
136
+ * @type {Array<WebXRController>}
137
+ */
138
+ this._controllers = [];
139
+
140
+ /**
141
+ * A list of XR input source. Each input source belongs to
142
+ * an instance of WebXRController.
143
+ *
144
+ * @private
145
+ * @type {Array<XRInputSource?>}
146
+ */
147
+ this._controllerInputSources = [];
148
+
149
+ /**
150
+ * The XR render target that represents the rendering destination
151
+ * during an active XR session.
152
+ *
153
+ * @private
154
+ * @type {?RenderTarget}
155
+ * @default null
156
+ */
157
+ this._xrRenderTarget = null;
158
+
159
+ /**
160
+ * An array holding all the non-projection layers
161
+ *
162
+ * @private
163
+ * @type {Array<Object>}
164
+ * @default []
165
+ */
166
+ this._layers = [];
167
+
168
+ /**
169
+ * Whether the XR session uses layers.
170
+ *
171
+ * @private
172
+ * @type {boolean}
173
+ * @default false
174
+ */
175
+ this._sessionUsesLayers = false;
176
+
177
+ /**
178
+ * Whether the device supports binding gl objects.
179
+ *
180
+ * @private
181
+ * @type {boolean}
182
+ * @readonly
183
+ */
184
+ this._supportsGlBinding = typeof XRWebGLBinding !== 'undefined';
185
+
186
+ /**
187
+ * Helper function to create native WebXR Layer.
188
+ *
189
+ * @private
190
+ * @type {Function}
191
+ */
192
+ this._createXRLayer = createXRLayer.bind( this );
193
+
194
+ /**
195
+ * The current WebGL context.
196
+ *
197
+ * @private
198
+ * @type {?WebGL2RenderingContext}
199
+ * @default null
200
+ */
201
+ this._gl = null;
202
+
203
+ /**
204
+ * The current animation context.
205
+ *
206
+ * @private
207
+ * @type {?Window}
208
+ * @default null
209
+ */
210
+ this._currentAnimationContext = null;
211
+
212
+ /**
213
+ * The current animation loop.
214
+ *
215
+ * @private
216
+ * @type {?Function}
217
+ * @default null
218
+ */
219
+ this._currentAnimationLoop = null;
220
+
221
+ /**
222
+ * The current pixel ratio.
223
+ *
224
+ * @private
225
+ * @type {?number}
226
+ * @default null
227
+ */
228
+ this._currentPixelRatio = null;
229
+
230
+ /**
231
+ * The current size of the renderer's canvas
232
+ * in logical pixel unit.
233
+ *
234
+ * @private
235
+ * @type {Vector2}
236
+ */
237
+ this._currentSize = new Vector2();
238
+
239
+ /**
240
+ * The default event listener for handling events inside a XR session.
241
+ *
242
+ * @private
243
+ * @type {Function}
244
+ */
245
+ this._onSessionEvent = onSessionEvent.bind( this );
246
+
247
+ /**
248
+ * The event listener for handling the end of a XR session.
249
+ *
250
+ * @private
251
+ * @type {Function}
252
+ */
253
+ this._onSessionEnd = onSessionEnd.bind( this );
254
+
255
+ /**
256
+ * The event listener for handling the `inputsourceschange` event.
257
+ *
258
+ * @private
259
+ * @type {Function}
260
+ */
261
+ this._onInputSourcesChange = onInputSourcesChange.bind( this );
262
+
263
+ /**
264
+ * The animation loop which is used as a replacement for the default
265
+ * animation loop of the application. It is only used when a XR session
266
+ * is active.
267
+ *
268
+ * @private
269
+ * @type {Function}
270
+ */
271
+ this._onAnimationFrame = onAnimationFrame.bind( this );
272
+
273
+ /**
274
+ * The current XR reference space.
275
+ *
276
+ * @private
277
+ * @type {?XRReferenceSpace}
278
+ * @default null
279
+ */
280
+ this._referenceSpace = null;
281
+
282
+ /**
283
+ * The current XR reference space type.
284
+ *
285
+ * @private
286
+ * @type {XRReferenceSpaceType}
287
+ * @default 'local-floor'
288
+ */
289
+ this._referenceSpaceType = 'local-floor';
290
+
291
+ /**
292
+ * A custom reference space defined by the application.
293
+ *
294
+ * @private
295
+ * @type {?XRReferenceSpace}
296
+ * @default null
297
+ */
298
+ this._customReferenceSpace = null;
299
+
300
+ /**
301
+ * The framebuffer scale factor.
302
+ *
303
+ * @private
304
+ * @type {number}
305
+ * @default 1
306
+ */
307
+ this._framebufferScaleFactor = 1;
308
+
309
+ /**
310
+ * The foveation factor.
311
+ *
312
+ * @private
313
+ * @type {number}
314
+ * @default 1
315
+ */
316
+ this._foveation = 1.0;
317
+
318
+ /**
319
+ * A reference to the current XR session.
320
+ *
321
+ * @private
322
+ * @type {?XRSession}
323
+ * @default null
324
+ */
325
+ this._session = null;
326
+
327
+ /**
328
+ * A reference to the current XR base layer.
329
+ *
330
+ * @private
331
+ * @type {?XRWebGLLayer}
332
+ * @default null
333
+ */
334
+ this._glBaseLayer = null;
335
+
336
+ /**
337
+ * A reference to the current XR binding.
338
+ *
339
+ * @private
340
+ * @type {?XRWebGLBinding}
341
+ * @default null
342
+ */
343
+ this._glBinding = null;
344
+
345
+ /**
346
+ * A reference to the current XR projection layer.
347
+ *
348
+ * @private
349
+ * @type {?XRProjectionLayer}
350
+ * @default null
351
+ */
352
+ this._glProjLayer = null;
353
+
354
+ /**
355
+ * A reference to the current XR frame.
356
+ *
357
+ * @private
358
+ * @type {?XRFrame}
359
+ * @default null
360
+ */
361
+ this._xrFrame = null;
362
+
363
+ /**
364
+ * Whether the browser supports the APIs necessary to use XRProjectionLayers.
365
+ *
366
+ * Note: this does not represent XRSession explicitly requesting
367
+ * `'layers'` as a feature - see `_sessionUsesLayers` and #30112
368
+ *
369
+ * @private
370
+ * @type {boolean}
371
+ * @readonly
372
+ */
373
+ this._supportsLayers = ( this._supportsGlBinding && 'createProjectionLayer' in XRWebGLBinding.prototype ); // eslint-disable-line compat/compat
374
+
375
+ /**
376
+ * Whether the usage of multiview has been requested by the application or not.
377
+ *
378
+ * @private
379
+ * @type {boolean}
380
+ * @default false
381
+ * @readonly
382
+ */
383
+ this._useMultiviewIfPossible = multiview;
384
+
385
+ /**
386
+ * Whether the usage of multiview is actually enabled. This flag only evaluates to `true`
387
+ * if multiview has been requested by the application and the `OVR_multiview2` is available.
388
+ *
389
+ * @private
390
+ * @type {boolean}
391
+ * @readonly
392
+ */
393
+ this._useMultiview = false;
394
+
395
+ }
396
+
397
+ /**
398
+ * Returns an instance of `THREE.Group` that represents the transformation
399
+ * of a XR controller in target ray space. The requested controller is defined
400
+ * by the given index.
401
+ *
402
+ * @param {number} index - The index of the XR controller.
403
+ * @return {Group} A group that represents the controller's transformation.
404
+ */
405
+ getController( index ) {
406
+
407
+ const controller = this._getController( index );
408
+
409
+ return controller.getTargetRaySpace();
410
+
411
+ }
412
+
413
+ /**
414
+ * Returns an instance of `THREE.Group` that represents the transformation
415
+ * of a XR controller in grip space. The requested controller is defined
416
+ * by the given index.
417
+ *
418
+ * @param {number} index - The index of the XR controller.
419
+ * @return {Group} A group that represents the controller's transformation.
420
+ */
421
+ getControllerGrip( index ) {
422
+
423
+ const controller = this._getController( index );
424
+
425
+ return controller.getGripSpace();
426
+
427
+ }
428
+
429
+ /**
430
+ * Returns an instance of `THREE.Group` that represents the transformation
431
+ * of a XR controller in hand space. The requested controller is defined
432
+ * by the given index.
433
+ *
434
+ * @param {number} index - The index of the XR controller.
435
+ * @return {Group} A group that represents the controller's transformation.
436
+ */
437
+ getHand( index ) {
438
+
439
+ const controller = this._getController( index );
440
+
441
+ return controller.getHandSpace();
442
+
443
+ }
444
+
445
+ /**
446
+ * Returns the foveation value.
447
+ *
448
+ * @return {number|undefined} The foveation value. Returns `undefined` if no base or projection layer is defined.
449
+ */
450
+ getFoveation() {
451
+
452
+ if ( this._glProjLayer === null && this._glBaseLayer === null ) {
453
+
454
+ return undefined;
455
+
456
+ }
457
+
458
+ return this._foveation;
459
+
460
+ }
461
+
462
+ /**
463
+ * Sets the foveation value.
464
+ *
465
+ * @param {number} foveation - A number in the range `[0,1]` where `0` means no foveation (full resolution)
466
+ * and `1` means maximum foveation (the edges render at lower resolution).
467
+ */
468
+ setFoveation( foveation ) {
469
+
470
+ this._foveation = foveation;
471
+
472
+ if ( this._glProjLayer !== null ) {
473
+
474
+ this._glProjLayer.fixedFoveation = foveation;
475
+
476
+ }
477
+
478
+ if ( this._glBaseLayer !== null && this._glBaseLayer.fixedFoveation !== undefined ) {
479
+
480
+ this._glBaseLayer.fixedFoveation = foveation;
481
+
482
+ }
483
+
484
+ }
485
+
486
+ /**
487
+ * Returns the framebuffer scale factor.
488
+ *
489
+ * @return {number} The framebuffer scale factor.
490
+ */
491
+ getFramebufferScaleFactor() {
492
+
493
+ return this._framebufferScaleFactor;
494
+
495
+ }
496
+
497
+ /**
498
+ * Sets the framebuffer scale factor.
499
+ *
500
+ * This method can not be used during a XR session.
501
+ *
502
+ * @param {number} factor - The framebuffer scale factor.
503
+ */
504
+ setFramebufferScaleFactor( factor ) {
505
+
506
+ this._framebufferScaleFactor = factor;
507
+
508
+ if ( this.isPresenting === true ) {
509
+
510
+ warn( 'XRManager: Cannot change framebuffer scale while presenting.' );
511
+
512
+ }
513
+
514
+ }
515
+
516
+ /**
517
+ * Returns the reference space type.
518
+ *
519
+ * @return {XRReferenceSpaceType} The reference space type.
520
+ */
521
+ getReferenceSpaceType() {
522
+
523
+ return this._referenceSpaceType;
524
+
525
+ }
526
+
527
+ /**
528
+ * Sets the reference space type.
529
+ *
530
+ * This method can not be used during a XR session.
531
+ *
532
+ * @param {XRReferenceSpaceType} type - The reference space type.
533
+ */
534
+ setReferenceSpaceType( type ) {
535
+
536
+ this._referenceSpaceType = type;
537
+
538
+ if ( this.isPresenting === true ) {
539
+
540
+ warn( 'XRManager: Cannot change reference space type while presenting.' );
541
+
542
+ }
543
+
544
+ }
545
+
546
+ /**
547
+ * Returns the XR reference space.
548
+ *
549
+ * @return {XRReferenceSpace} The XR reference space.
550
+ */
551
+ getReferenceSpace() {
552
+
553
+ return this._customReferenceSpace || this._referenceSpace;
554
+
555
+ }
556
+
557
+ /**
558
+ * Sets a custom XR reference space.
559
+ *
560
+ * @param {XRReferenceSpace} space - The XR reference space.
561
+ */
562
+ setReferenceSpace( space ) {
563
+
564
+ this._customReferenceSpace = space;
565
+
566
+ }
567
+
568
+ /**
569
+ * Returns the XR camera.
570
+ *
571
+ * @return {ArrayCamera} The XR camera.
572
+ */
573
+ getCamera() {
574
+
575
+ return this._cameraXR;
576
+
577
+ }
578
+
579
+ /**
580
+ * Returns the environment blend mode from the current XR session.
581
+ *
582
+ * @return {'opaque'|'additive'|'alpha-blend'|undefined} The environment blend mode. Returns `undefined` when used outside of a XR session.
583
+ */
584
+ getEnvironmentBlendMode() {
585
+
586
+ if ( this._session !== null ) {
587
+
588
+ return this._session.environmentBlendMode;
589
+
590
+ }
591
+
592
+ }
593
+
594
+
595
+ /**
596
+ * Returns the current XR binding.
597
+ *
598
+ * Creates a new binding if needed and the browser is
599
+ * capable of doing so.
600
+ *
601
+ * @return {?XRWebGLBinding} The XR binding. Returns `null` if one cannot be created.
602
+ */
603
+ getBinding() {
604
+
605
+ if ( this._glBinding === null && this._supportsGlBinding ) {
606
+
607
+ this._glBinding = new XRWebGLBinding( this._session, this._gl );
608
+
609
+ }
610
+
611
+ return this._glBinding;
612
+
613
+ }
614
+
615
+ /**
616
+ * Returns the current XR frame.
617
+ *
618
+ * @return {?XRFrame} The XR frame. Returns `null` when used outside a XR session.
619
+ */
620
+ getFrame() {
621
+
622
+ return this._xrFrame;
623
+
624
+ }
625
+
626
+ /**
627
+ * Returns `true` if the engine renders to a multiview target.
628
+ *
629
+ * @return {boolean} Whether the engine renders to a multiview render target or not.
630
+ */
631
+ useMultiview() {
632
+
633
+ return this._useMultiview;
634
+
635
+ }
636
+
637
+ /**
638
+ * This method can be used in XR applications to create a quadratic layer that presents a separate
639
+ * rendered scene.
640
+ *
641
+ * @param {number} width - The width of the layer plane in world units.
642
+ * @param {number} height - The height of the layer plane in world units.
643
+ * @param {Vector3} translation - The position/translation of the layer plane in world units.
644
+ * @param {Quaternion} quaternion - The orientation of the layer plane expressed as a quaternion.
645
+ * @param {number} pixelwidth - The width of the layer's render target in pixels.
646
+ * @param {number} pixelheight - The height of the layer's render target in pixels.
647
+ * @param {Function} rendercall - A callback function that renders the layer. Similar to code in
648
+ * the default animation loop, this method can be used to update/transform 3D object in the layer's scene.
649
+ * @param {Object} [attributes={}] - Allows to configure the layer's render target.
650
+ * @return {Mesh} A mesh representing the quadratic XR layer. This mesh should be added to the XR scene.
651
+ */
652
+ createQuadLayer( width, height, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = {} ) {
653
+
654
+ const geometry = new PlaneGeometry( width, height );
655
+ const renderTarget = new XRRenderTarget(
656
+ pixelwidth,
657
+ pixelheight,
658
+ {
659
+ format: RGBAFormat,
660
+ type: UnsignedByteType,
661
+ depthTexture: new DepthTexture(
662
+ pixelwidth,
663
+ pixelheight,
664
+ attributes.stencil ? UnsignedInt248Type : UnsignedIntType,
665
+ undefined,
666
+ undefined,
667
+ undefined,
668
+ undefined,
669
+ undefined,
670
+ undefined,
671
+ attributes.stencil ? DepthStencilFormat : DepthFormat
672
+ ),
673
+ stencilBuffer: attributes.stencil,
674
+ resolveDepthBuffer: false,
675
+ resolveStencilBuffer: false
676
+ } );
677
+
678
+ renderTarget._autoAllocateDepthBuffer = true;
679
+
680
+ const material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );
681
+ material.map = renderTarget.texture;
682
+ material.map.offset.y = 1;
683
+ material.map.repeat.y = - 1;
684
+ const plane = new Mesh( geometry, material );
685
+ plane.position.copy( translation );
686
+ plane.quaternion.copy( quaternion );
687
+
688
+ const layer = {
689
+ type: 'quad',
690
+ width: width,
691
+ height: height,
692
+ translation: translation,
693
+ quaternion: quaternion,
694
+ pixelwidth: pixelwidth,
695
+ pixelheight: pixelheight,
696
+ plane: plane,
697
+ material: material,
698
+ rendercall: rendercall,
699
+ renderTarget: renderTarget };
700
+
701
+ this._layers.push( layer );
702
+
703
+ if ( this._session !== null ) {
704
+
705
+ layer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );
706
+ layer.plane.material.blending = CustomBlending;
707
+ layer.plane.material.blendEquation = AddEquation;
708
+ layer.plane.material.blendSrc = ZeroFactor;
709
+ layer.plane.material.blendDst = ZeroFactor;
710
+
711
+ layer.xrlayer = this._createXRLayer( layer );
712
+
713
+ const xrlayers = this._session.renderState.layers;
714
+ xrlayers.unshift( layer.xrlayer );
715
+ this._session.updateRenderState( { layers: xrlayers } );
716
+
717
+ } else {
718
+
719
+ renderTarget.isXRRenderTarget = false;
720
+
721
+ }
722
+
723
+ return plane;
724
+
725
+ }
726
+
727
+ /**
728
+ * This method can be used in XR applications to create a cylindrical layer that presents a separate
729
+ * rendered scene.
730
+ *
731
+ * @param {number} radius - The radius of the cylinder in world units.
732
+ * @param {number} centralAngle - The central angle of the cylinder in radians.
733
+ * @param {number} aspectratio - The aspect ratio.
734
+ * @param {Vector3} translation - The position/translation of the layer plane in world units.
735
+ * @param {Quaternion} quaternion - The orientation of the layer plane expressed as a quaternion.
736
+ * @param {number} pixelwidth - The width of the layer's render target in pixels.
737
+ * @param {number} pixelheight - The height of the layer's render target in pixels.
738
+ * @param {Function} rendercall - A callback function that renders the layer. Similar to code in
739
+ * the default animation loop, this method can be used to update/transform 3D object in the layer's scene.
740
+ * @param {Object} [attributes={}] - Allows to configure the layer's render target.
741
+ * @return {Mesh} A mesh representing the cylindrical XR layer. This mesh should be added to the XR scene.
742
+ */
743
+ createCylinderLayer( radius, centralAngle, aspectratio, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = {} ) {
744
+
745
+ const geometry = new CylinderGeometry( radius, radius, radius * centralAngle / aspectratio, 64, 64, true, Math.PI - centralAngle / 2, centralAngle );
746
+ const renderTarget = new XRRenderTarget(
747
+ pixelwidth,
748
+ pixelheight,
749
+ {
750
+ format: RGBAFormat,
751
+ type: UnsignedByteType,
752
+ depthTexture: new DepthTexture(
753
+ pixelwidth,
754
+ pixelheight,
755
+ attributes.stencil ? UnsignedInt248Type : UnsignedIntType,
756
+ undefined,
757
+ undefined,
758
+ undefined,
759
+ undefined,
760
+ undefined,
761
+ undefined,
762
+ attributes.stencil ? DepthStencilFormat : DepthFormat
763
+ ),
764
+ stencilBuffer: attributes.stencil,
765
+ resolveDepthBuffer: false,
766
+ resolveStencilBuffer: false
767
+ } );
768
+
769
+ renderTarget._autoAllocateDepthBuffer = true;
770
+
771
+ const material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );
772
+ material.map = renderTarget.texture;
773
+ material.map.offset.y = 1;
774
+ material.map.repeat.y = - 1;
775
+ const plane = new Mesh( geometry, material );
776
+ plane.position.copy( translation );
777
+ plane.quaternion.copy( quaternion );
778
+
779
+ const layer = {
780
+ type: 'cylinder',
781
+ radius: radius,
782
+ centralAngle: centralAngle,
783
+ aspectratio: aspectratio,
784
+ translation: translation,
785
+ quaternion: quaternion,
786
+ pixelwidth: pixelwidth,
787
+ pixelheight: pixelheight,
788
+ plane: plane,
789
+ material: material,
790
+ rendercall: rendercall,
791
+ renderTarget: renderTarget };
792
+
793
+ this._layers.push( layer );
794
+
795
+ if ( this._session !== null ) {
796
+
797
+ layer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );
798
+ layer.plane.material.blending = CustomBlending;
799
+ layer.plane.material.blendEquation = AddEquation;
800
+ layer.plane.material.blendSrc = ZeroFactor;
801
+ layer.plane.material.blendDst = ZeroFactor;
802
+
803
+ layer.xrlayer = this._createXRLayer( layer );
804
+
805
+ const xrlayers = this._session.renderState.layers;
806
+ xrlayers.unshift( layer.xrlayer );
807
+ this._session.updateRenderState( { layers: xrlayers } );
808
+
809
+ } else {
810
+
811
+ renderTarget.isXRRenderTarget = false;
812
+
813
+ }
814
+
815
+ return plane;
816
+
817
+ }
818
+
819
+ /**
820
+ * Renders the XR layers that have been previously added to the scene.
821
+ *
822
+ * This method is usually called in your animation loop before rendering
823
+ * the actual scene via `renderer.render( scene, camera );`.
824
+ */
825
+ renderLayers( ) {
826
+
827
+ const translationObject = new Vector3();
828
+ const quaternionObject = new Quaternion();
829
+ const renderer = this._renderer;
830
+
831
+ const wasPresenting = this.isPresenting;
832
+
833
+ this.isPresenting = false;
834
+
835
+ const rendererSize = new Vector2();
836
+ renderer.getSize( rendererSize );
837
+
838
+ const currentRenderTarget = renderer.getRenderTarget();
839
+
840
+ for ( const layer of this._layers ) {
841
+
842
+ layer.renderTarget.isXRRenderTarget = this._session !== null;
843
+ layer.renderTarget._hasExternalTextures = layer.renderTarget.isXRRenderTarget;
844
+
845
+ const currentContextNode = renderer.contextNode;
846
+
847
+ let contextNode;
848
+
849
+ if ( layer.renderTarget.isXRRenderTarget && this._sessionUsesLayers ) {
850
+
851
+ layer.xrlayer.transform = new XRRigidTransform( layer.plane.getWorldPosition( translationObject ), layer.plane.getWorldQuaternion( quaternionObject ) );
852
+
853
+ const glSubImage = this._glBinding.getSubImage( layer.xrlayer, this._xrFrame );
854
+ renderer.backend.setXRRenderTargetTextures(
855
+ layer.renderTarget,
856
+ glSubImage.colorTexture,
857
+ undefined );
858
+
859
+ renderer._setXRLayerSize( layer.renderTarget.width, layer.renderTarget.height );
860
+
861
+ contextNode = _contextNodeLib.get( currentContextNode );
862
+
863
+ if ( contextNode === undefined ) {
864
+
865
+ // Apply ToneMapping and OutputColorSpace directly in the material shader
866
+
867
+ contextNode = currentContextNode.context( {
868
+
869
+ getOutput: ( outputNode ) => {
870
+
871
+ return renderOutput( outputNode, renderer.toneMapping, renderer.outputColorSpace );
872
+
873
+ }
874
+
875
+ } );
876
+
877
+ _contextNodeLib.set( currentContextNode, contextNode );
878
+
879
+ }
880
+
881
+ } else {
882
+
883
+ contextNode = currentContextNode;
884
+
885
+ }
886
+
887
+ renderer.contextNode = contextNode;
888
+
889
+ renderer.setRenderTarget( layer.renderTarget );
890
+
891
+ layer.rendercall();
892
+
893
+ renderer.contextNode = currentContextNode;
894
+
895
+ }
896
+
897
+ renderer.setRenderTarget( currentRenderTarget );
898
+ renderer._setXRLayerSize( rendererSize.x, rendererSize.y );
899
+
900
+ this.isPresenting = wasPresenting;
901
+
902
+ }
903
+
904
+
905
+ /**
906
+ * Returns the current XR session.
907
+ *
908
+ * @return {?XRSession} The XR session. Returns `null` when used outside a XR session.
909
+ */
910
+ getSession() {
911
+
912
+ return this._session;
913
+
914
+ }
915
+
916
+ /**
917
+ * After a XR session has been requested usually with one of the `*Button` modules, it
918
+ * is injected into the renderer with this method. This method triggers the start of
919
+ * the actual XR rendering.
920
+ *
921
+ * @async
922
+ * @param {XRSession} session - The XR session to set.
923
+ * @return {Promise} A Promise that resolves when the session has been set.
924
+ */
925
+ async setSession( session ) {
926
+
927
+ const renderer = this._renderer;
928
+ const backend = renderer.backend;
929
+
930
+ this._gl = renderer.getContext();
931
+ const gl = this._gl;
932
+ const attributes = gl.getContextAttributes();
933
+
934
+ this._session = session;
935
+
936
+ if ( session !== null ) {
937
+
938
+ if ( backend.isWebGPUBackend === true ) throw new Error( 'THREE.XRManager: XR is currently not supported with a WebGPU backend. Use WebGL by passing "{ forceWebGL: true }" to the constructor of the renderer.' );
939
+
940
+ session.addEventListener( 'select', this._onSessionEvent );
941
+ session.addEventListener( 'selectstart', this._onSessionEvent );
942
+ session.addEventListener( 'selectend', this._onSessionEvent );
943
+ session.addEventListener( 'squeeze', this._onSessionEvent );
944
+ session.addEventListener( 'squeezestart', this._onSessionEvent );
945
+ session.addEventListener( 'squeezeend', this._onSessionEvent );
946
+ session.addEventListener( 'end', this._onSessionEnd );
947
+ session.addEventListener( 'inputsourceschange', this._onInputSourcesChange );
948
+
949
+ await backend.makeXRCompatible();
950
+
951
+ this._currentPixelRatio = renderer.getPixelRatio();
952
+ renderer.getSize( this._currentSize );
953
+
954
+ this._currentAnimationContext = renderer._animation.getContext();
955
+ this._currentAnimationLoop = renderer._animation.getAnimationLoop();
956
+ renderer._animation.stop();
957
+
958
+ //
959
+
960
+ if ( this._supportsLayers === true ) {
961
+
962
+ // default path using XRProjectionLayer
963
+
964
+ let depthFormat = null;
965
+ let depthType = null;
966
+ let glDepthFormat = null;
967
+
968
+ if ( renderer.depth ) {
969
+
970
+ glDepthFormat = renderer.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24;
971
+ depthFormat = renderer.stencil ? DepthStencilFormat : DepthFormat;
972
+ depthType = renderer.stencil ? UnsignedInt248Type : UnsignedIntType;
973
+
974
+ }
975
+
976
+ const projectionlayerInit = {
977
+ colorFormat: gl.RGBA8,
978
+ depthFormat: glDepthFormat,
979
+ scaleFactor: this._framebufferScaleFactor,
980
+ clearOnAccess: false
981
+ };
982
+
983
+ if ( this._useMultiviewIfPossible && renderer.hasFeature( 'OVR_multiview2' ) ) {
984
+
985
+ projectionlayerInit.textureType = 'texture-array';
986
+ this._useMultiview = true;
987
+
988
+ }
989
+
990
+ this._glBinding = this.getBinding();
991
+ const glProjLayer = this._glBinding.createProjectionLayer( projectionlayerInit );
992
+ const layersArray = [ glProjLayer ];
993
+
994
+ this._glProjLayer = glProjLayer;
995
+
996
+ renderer.setPixelRatio( 1 );
997
+ renderer._setXRLayerSize( glProjLayer.textureWidth, glProjLayer.textureHeight );
998
+
999
+ const depth = this._useMultiview ? 2 : 1;
1000
+ const depthTexture = new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat, depth );
1001
+
1002
+ this._xrRenderTarget = new XRRenderTarget(
1003
+ glProjLayer.textureWidth,
1004
+ glProjLayer.textureHeight,
1005
+ {
1006
+ format: RGBAFormat,
1007
+ type: UnsignedByteType,
1008
+ colorSpace: renderer.outputColorSpace,
1009
+ depthTexture: depthTexture,
1010
+ stencilBuffer: renderer.stencil,
1011
+ samples: attributes.antialias ? 4 : 0,
1012
+ resolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false ),
1013
+ resolveStencilBuffer: ( glProjLayer.ignoreDepthValues === false ),
1014
+ depth: this._useMultiview ? 2 : 1,
1015
+ multiview: this._useMultiview
1016
+ } );
1017
+
1018
+ this._xrRenderTarget._hasExternalTextures = true;
1019
+ this._xrRenderTarget.depth = this._useMultiview ? 2 : 1;
1020
+
1021
+ this._sessionUsesLayers = session.enabledFeatures.includes( 'layers' );
1022
+
1023
+ this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
1024
+
1025
+ if ( this._sessionUsesLayers ) {
1026
+
1027
+ // switch layers to native
1028
+ for ( const layer of this._layers ) {
1029
+
1030
+ // change material so it "punches" out a hole to show the XR Layer.
1031
+ layer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: layer.type === 'cylinder' ? BackSide : FrontSide } );
1032
+ layer.plane.material.blending = CustomBlending;
1033
+ layer.plane.material.blendEquation = AddEquation;
1034
+ layer.plane.material.blendSrc = ZeroFactor;
1035
+ layer.plane.material.blendDst = ZeroFactor;
1036
+
1037
+ layer.xrlayer = this._createXRLayer( layer );
1038
+
1039
+ layersArray.unshift( layer.xrlayer );
1040
+
1041
+ }
1042
+
1043
+ }
1044
+
1045
+ session.updateRenderState( { layers: layersArray } );
1046
+
1047
+ } else {
1048
+
1049
+ // fallback to XRWebGLLayer
1050
+
1051
+ const layerInit = {
1052
+ antialias: renderer.currentSamples > 0,
1053
+ alpha: true,
1054
+ depth: renderer.depth,
1055
+ stencil: renderer.stencil,
1056
+ framebufferScaleFactor: this.getFramebufferScaleFactor()
1057
+ };
1058
+
1059
+ const glBaseLayer = new XRWebGLLayer( session, gl, layerInit );
1060
+ this._glBaseLayer = glBaseLayer;
1061
+
1062
+ session.updateRenderState( { baseLayer: glBaseLayer } );
1063
+
1064
+ renderer.setPixelRatio( 1 );
1065
+ renderer._setXRLayerSize( glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight );
1066
+
1067
+ this._xrRenderTarget = new XRRenderTarget(
1068
+ glBaseLayer.framebufferWidth,
1069
+ glBaseLayer.framebufferHeight,
1070
+ {
1071
+ format: RGBAFormat,
1072
+ type: UnsignedByteType,
1073
+ colorSpace: renderer.outputColorSpace,
1074
+ stencilBuffer: renderer.stencil,
1075
+ resolveDepthBuffer: ( glBaseLayer.ignoreDepthValues === false ),
1076
+ resolveStencilBuffer: ( glBaseLayer.ignoreDepthValues === false ),
1077
+ }
1078
+ );
1079
+
1080
+ this._xrRenderTarget._isOpaqueFramebuffer = true;
1081
+ this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
1082
+
1083
+ }
1084
+
1085
+ //
1086
+
1087
+ this.setFoveation( this.getFoveation() );
1088
+
1089
+ renderer._animation.setAnimationLoop( this._onAnimationFrame );
1090
+ renderer._animation.setContext( session );
1091
+ renderer._animation.start();
1092
+
1093
+ this.isPresenting = true;
1094
+
1095
+ this.dispatchEvent( { type: 'sessionstart' } );
1096
+
1097
+ }
1098
+
1099
+ }
1100
+
1101
+ /**
1102
+ * This method is called by the renderer per frame and updates the XR camera
1103
+ * and it sub cameras based on the given camera. The given camera is the "user"
1104
+ * camera created on application level and used for non-XR rendering.
1105
+ *
1106
+ * @param {PerspectiveCamera} camera - The camera.
1107
+ */
1108
+ updateCamera( camera ) {
1109
+
1110
+ const session = this._session;
1111
+
1112
+ if ( session === null ) return;
1113
+
1114
+ const depthNear = camera.near;
1115
+ const depthFar = camera.far;
1116
+
1117
+ const cameraXR = this._cameraXR;
1118
+ const cameraL = this._cameraL;
1119
+ const cameraR = this._cameraR;
1120
+
1121
+ cameraXR.near = cameraR.near = cameraL.near = depthNear;
1122
+ cameraXR.far = cameraR.far = cameraL.far = depthFar;
1123
+ cameraXR.isMultiViewCamera = this._useMultiview;
1124
+
1125
+ if ( this._currentDepthNear !== cameraXR.near || this._currentDepthFar !== cameraXR.far ) {
1126
+
1127
+ // Note that the new renderState won't apply until the next frame. See #18320
1128
+
1129
+ session.updateRenderState( {
1130
+ depthNear: cameraXR.near,
1131
+ depthFar: cameraXR.far
1132
+ } );
1133
+
1134
+ this._currentDepthNear = cameraXR.near;
1135
+ this._currentDepthFar = cameraXR.far;
1136
+
1137
+ }
1138
+
1139
+ // inherit camera layers and enable eye layers (1 = left, 2 = right)
1140
+ cameraXR.layers.mask = camera.layers.mask | 0b110;
1141
+ cameraL.layers.mask = cameraXR.layers.mask & ~ 0b100;
1142
+ cameraR.layers.mask = cameraXR.layers.mask & ~ 0b010;
1143
+
1144
+
1145
+ const parent = camera.parent;
1146
+ const cameras = cameraXR.cameras;
1147
+
1148
+ updateCamera( cameraXR, parent );
1149
+
1150
+ for ( let i = 0; i < cameras.length; i ++ ) {
1151
+
1152
+ updateCamera( cameras[ i ], parent );
1153
+
1154
+ }
1155
+
1156
+ // update projection matrix for proper view frustum culling
1157
+
1158
+ if ( cameras.length === 2 ) {
1159
+
1160
+ setProjectionFromUnion( cameraXR, cameraL, cameraR );
1161
+
1162
+ } else {
1163
+
1164
+ // assume single camera setup (AR)
1165
+
1166
+ cameraXR.projectionMatrix.copy( cameraL.projectionMatrix );
1167
+
1168
+ }
1169
+
1170
+ // update user camera and its children
1171
+
1172
+ updateUserCamera( camera, cameraXR, parent );
1173
+
1174
+
1175
+ }
1176
+
1177
+ /**
1178
+ * Returns a WebXR controller for the given controller index.
1179
+ *
1180
+ * @private
1181
+ * @param {number} index - The controller index.
1182
+ * @return {WebXRController} The XR controller.
1183
+ */
1184
+ _getController( index ) {
1185
+
1186
+ let controller = this._controllers[ index ];
1187
+
1188
+ if ( controller === undefined ) {
1189
+
1190
+ controller = new WebXRController();
1191
+ this._controllers[ index ] = controller;
1192
+
1193
+ }
1194
+
1195
+ return controller;
1196
+
1197
+ }
1198
+
1199
+ }
1200
+
1201
+ /**
1202
+ * Assumes 2 cameras that are parallel and share an X-axis, and that
1203
+ * the cameras' projection and world matrices have already been set.
1204
+ * And that near and far planes are identical for both cameras.
1205
+ * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765
1206
+ *
1207
+ * @param {ArrayCamera} camera - The camera to update.
1208
+ * @param {PerspectiveCamera} cameraL - The left camera.
1209
+ * @param {PerspectiveCamera} cameraR - The right camera.
1210
+ */
1211
+ function setProjectionFromUnion( camera, cameraL, cameraR ) {
1212
+
1213
+ _cameraLPos.setFromMatrixPosition( cameraL.matrixWorld );
1214
+ _cameraRPos.setFromMatrixPosition( cameraR.matrixWorld );
1215
+
1216
+ const ipd = _cameraLPos.distanceTo( _cameraRPos );
1217
+
1218
+ const projL = cameraL.projectionMatrix.elements;
1219
+ const projR = cameraR.projectionMatrix.elements;
1220
+
1221
+ // VR systems will have identical far and near planes, and
1222
+ // most likely identical top and bottom frustum extents.
1223
+ // Use the left camera for these values.
1224
+ const near = projL[ 14 ] / ( projL[ 10 ] - 1 );
1225
+ const far = projL[ 14 ] / ( projL[ 10 ] + 1 );
1226
+ const topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];
1227
+ const bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];
1228
+
1229
+ const leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];
1230
+ const rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];
1231
+ const left = near * leftFov;
1232
+ const right = near * rightFov;
1233
+
1234
+ // Calculate the new camera's position offset from the
1235
+ // left camera. xOffset should be roughly half `ipd`.
1236
+ const zOffset = ipd / ( - leftFov + rightFov );
1237
+ const xOffset = zOffset * - leftFov;
1238
+
1239
+ // TODO: Better way to apply this offset?
1240
+ cameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );
1241
+ camera.translateX( xOffset );
1242
+ camera.translateZ( zOffset );
1243
+ camera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );
1244
+ camera.matrixWorldInverse.copy( camera.matrixWorld ).invert();
1245
+
1246
+ // Check if the projection uses an infinite far plane.
1247
+ if ( projL[ 10 ] === - 1.0 ) {
1248
+
1249
+ // Use the projection matrix from the left eye.
1250
+ // The camera offset is sufficient to include the view volumes
1251
+ // of both eyes (assuming symmetric projections).
1252
+ camera.projectionMatrix.copy( cameraL.projectionMatrix );
1253
+ camera.projectionMatrixInverse.copy( cameraL.projectionMatrixInverse );
1254
+
1255
+ } else {
1256
+
1257
+ // Find the union of the frustum values of the cameras and scale
1258
+ // the values so that the near plane's position does not change in world space,
1259
+ // although must now be relative to the new union camera.
1260
+ const near2 = near + zOffset;
1261
+ const far2 = far + zOffset;
1262
+ const left2 = left - xOffset;
1263
+ const right2 = right + ( ipd - xOffset );
1264
+ const top2 = topFov * far / far2 * near2;
1265
+ const bottom2 = bottomFov * far / far2 * near2;
1266
+
1267
+ camera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );
1268
+ camera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();
1269
+
1270
+ }
1271
+
1272
+ }
1273
+
1274
+ /**
1275
+ * Updates the world matrices for the given camera based on the parent 3D object.
1276
+ *
1277
+ * @inner
1278
+ * @param {Camera} camera - The camera to update.
1279
+ * @param {Object3D} parent - The parent 3D object.
1280
+ */
1281
+ function updateCamera( camera, parent ) {
1282
+
1283
+ if ( parent === null ) {
1284
+
1285
+ camera.matrixWorld.copy( camera.matrix );
1286
+
1287
+ } else {
1288
+
1289
+ camera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );
1290
+
1291
+ }
1292
+
1293
+ camera.matrixWorldInverse.copy( camera.matrixWorld ).invert();
1294
+
1295
+ }
1296
+
1297
+ /**
1298
+ * Updates the given camera with the transformation of the XR camera and parent object.
1299
+ *
1300
+ * @inner
1301
+ * @param {Camera} camera - The camera to update.
1302
+ * @param {ArrayCamera} cameraXR - The XR camera.
1303
+ * @param {Object3D} parent - The parent 3D object.
1304
+ */
1305
+ function updateUserCamera( camera, cameraXR, parent ) {
1306
+
1307
+ if ( parent === null ) {
1308
+
1309
+ camera.matrix.copy( cameraXR.matrixWorld );
1310
+
1311
+ } else {
1312
+
1313
+ camera.matrix.copy( parent.matrixWorld );
1314
+ camera.matrix.invert();
1315
+ camera.matrix.multiply( cameraXR.matrixWorld );
1316
+
1317
+ }
1318
+
1319
+ camera.matrix.decompose( camera.position, camera.quaternion, camera.scale );
1320
+ camera.updateMatrixWorld( true );
1321
+
1322
+ camera.projectionMatrix.copy( cameraXR.projectionMatrix );
1323
+ camera.projectionMatrixInverse.copy( cameraXR.projectionMatrixInverse );
1324
+
1325
+ if ( camera.isPerspectiveCamera ) {
1326
+
1327
+ camera.fov = RAD2DEG * 2 * Math.atan( 1 / camera.projectionMatrix.elements[ 5 ] );
1328
+ camera.zoom = 1;
1329
+
1330
+ }
1331
+
1332
+ }
1333
+
1334
+ function onSessionEvent( event ) {
1335
+
1336
+ const controllerIndex = this._controllerInputSources.indexOf( event.inputSource );
1337
+
1338
+ if ( controllerIndex === - 1 ) {
1339
+
1340
+ return;
1341
+
1342
+ }
1343
+
1344
+ const controller = this._controllers[ controllerIndex ];
1345
+
1346
+ if ( controller !== undefined ) {
1347
+
1348
+ const referenceSpace = this.getReferenceSpace();
1349
+
1350
+ controller.update( event.inputSource, event.frame, referenceSpace );
1351
+ controller.dispatchEvent( { type: event.type, data: event.inputSource } );
1352
+
1353
+ }
1354
+
1355
+ }
1356
+
1357
+ function onSessionEnd() {
1358
+
1359
+ const session = this._session;
1360
+ const renderer = this._renderer;
1361
+
1362
+ session.removeEventListener( 'select', this._onSessionEvent );
1363
+ session.removeEventListener( 'selectstart', this._onSessionEvent );
1364
+ session.removeEventListener( 'selectend', this._onSessionEvent );
1365
+ session.removeEventListener( 'squeeze', this._onSessionEvent );
1366
+ session.removeEventListener( 'squeezestart', this._onSessionEvent );
1367
+ session.removeEventListener( 'squeezeend', this._onSessionEvent );
1368
+ session.removeEventListener( 'end', this._onSessionEnd );
1369
+ session.removeEventListener( 'inputsourceschange', this._onInputSourcesChange );
1370
+
1371
+ for ( let i = 0; i < this._controllers.length; i ++ ) {
1372
+
1373
+ const inputSource = this._controllerInputSources[ i ];
1374
+
1375
+ if ( inputSource === null ) continue;
1376
+
1377
+ this._controllerInputSources[ i ] = null;
1378
+
1379
+ this._controllers[ i ].disconnect( inputSource );
1380
+
1381
+ }
1382
+
1383
+ this._currentDepthNear = null;
1384
+ this._currentDepthFar = null;
1385
+
1386
+ // restore framebuffer/rendering state
1387
+
1388
+ renderer._resetXRState();
1389
+
1390
+ this._session = null;
1391
+ this._xrRenderTarget = null;
1392
+ this._glBinding = null;
1393
+ this._glBaseLayer = null;
1394
+ this._glProjLayer = null;
1395
+
1396
+ // switch layers back to emulated
1397
+ if ( this._sessionUsesLayers === true ) {
1398
+
1399
+ for ( const layer of this._layers ) {
1400
+
1401
+ // Recreate layer render target to reset state
1402
+ layer.renderTarget = new XRRenderTarget(
1403
+ layer.pixelwidth,
1404
+ layer.pixelheight,
1405
+ {
1406
+ format: RGBAFormat,
1407
+ type: UnsignedByteType,
1408
+ depthTexture: new DepthTexture(
1409
+ layer.pixelwidth,
1410
+ layer.pixelheight,
1411
+ layer.stencilBuffer ? UnsignedInt248Type : UnsignedIntType,
1412
+ undefined,
1413
+ undefined,
1414
+ undefined,
1415
+ undefined,
1416
+ undefined,
1417
+ undefined,
1418
+ layer.stencilBuffer ? DepthStencilFormat : DepthFormat
1419
+ ),
1420
+ stencilBuffer: layer.stencilBuffer,
1421
+ resolveDepthBuffer: false,
1422
+ resolveStencilBuffer: false
1423
+ } );
1424
+
1425
+ layer.renderTarget.isXRRenderTarget = false;
1426
+
1427
+ layer.plane.material = layer.material;
1428
+ layer.material.map = layer.renderTarget.texture;
1429
+ layer.material.map.offset.y = 1;
1430
+ layer.material.map.repeat.y = - 1;
1431
+ delete layer.xrlayer;
1432
+
1433
+ }
1434
+
1435
+ }
1436
+
1437
+ //
1438
+
1439
+ this.isPresenting = false;
1440
+ this._useMultiview = false;
1441
+
1442
+ renderer._animation.stop();
1443
+ renderer._animation.setAnimationLoop( this._currentAnimationLoop );
1444
+ renderer._animation.setContext( this._currentAnimationContext );
1445
+ renderer._animation.start();
1446
+
1447
+ renderer.setPixelRatio( this._currentPixelRatio );
1448
+ renderer.setSize( this._currentSize.width, this._currentSize.height, false );
1449
+
1450
+ this.dispatchEvent( { type: 'sessionend' } );
1451
+
1452
+ }
1453
+
1454
+ function onInputSourcesChange( event ) {
1455
+
1456
+ const controllers = this._controllers;
1457
+ const controllerInputSources = this._controllerInputSources;
1458
+
1459
+ // Notify disconnected
1460
+
1461
+ for ( let i = 0; i < event.removed.length; i ++ ) {
1462
+
1463
+ const inputSource = event.removed[ i ];
1464
+ const index = controllerInputSources.indexOf( inputSource );
1465
+
1466
+ if ( index >= 0 ) {
1467
+
1468
+ controllerInputSources[ index ] = null;
1469
+ controllers[ index ].disconnect( inputSource );
1470
+
1471
+ }
1472
+
1473
+ }
1474
+
1475
+ // Notify connected
1476
+
1477
+ for ( let i = 0; i < event.added.length; i ++ ) {
1478
+
1479
+ const inputSource = event.added[ i ];
1480
+
1481
+ let controllerIndex = controllerInputSources.indexOf( inputSource );
1482
+
1483
+ if ( controllerIndex === - 1 ) {
1484
+
1485
+ // Assign input source a controller that currently has no input source
1486
+
1487
+ for ( let i = 0; i < controllers.length; i ++ ) {
1488
+
1489
+ if ( i >= controllerInputSources.length ) {
1490
+
1491
+ controllerInputSources.push( inputSource );
1492
+ controllerIndex = i;
1493
+ break;
1494
+
1495
+ } else if ( controllerInputSources[ i ] === null ) {
1496
+
1497
+ controllerInputSources[ i ] = inputSource;
1498
+ controllerIndex = i;
1499
+ break;
1500
+
1501
+ }
1502
+
1503
+ }
1504
+
1505
+ // If all controllers do currently receive input we ignore new ones
1506
+
1507
+ if ( controllerIndex === - 1 ) break;
1508
+
1509
+ }
1510
+
1511
+ const controller = controllers[ controllerIndex ];
1512
+
1513
+ if ( controller ) {
1514
+
1515
+ controller.connect( inputSource );
1516
+
1517
+ }
1518
+
1519
+ }
1520
+
1521
+ }
1522
+
1523
+ // Creation method for native WebXR layers
1524
+ function createXRLayer( layer ) {
1525
+
1526
+ if ( layer.type === 'quad' ) {
1527
+
1528
+ return this._glBinding.createQuadLayer( {
1529
+ transform: new XRRigidTransform( layer.translation, layer.quaternion ),
1530
+ width: layer.width / 2,
1531
+ height: layer.height / 2,
1532
+ space: this._referenceSpace,
1533
+ viewPixelWidth: layer.pixelwidth,
1534
+ viewPixelHeight: layer.pixelheight,
1535
+ clearOnAccess: false
1536
+ } );
1537
+
1538
+ } else {
1539
+
1540
+ return this._glBinding.createCylinderLayer( {
1541
+ transform: new XRRigidTransform( layer.translation, layer.quaternion ),
1542
+ radius: layer.radius,
1543
+ centralAngle: layer.centralAngle,
1544
+ aspectRatio: layer.aspectRatio,
1545
+ space: this._referenceSpace,
1546
+ viewPixelWidth: layer.pixelwidth,
1547
+ viewPixelHeight: layer.pixelheight,
1548
+ clearOnAccess: false
1549
+ } );
1550
+
1551
+ }
1552
+
1553
+ }
1554
+
1555
+ // Animation Loop
1556
+
1557
+ function onAnimationFrame( time, frame ) {
1558
+
1559
+ if ( frame === undefined ) return;
1560
+
1561
+ const cameraXR = this._cameraXR;
1562
+ const renderer = this._renderer;
1563
+ const backend = renderer.backend;
1564
+
1565
+ const glBaseLayer = this._glBaseLayer;
1566
+
1567
+ const referenceSpace = this.getReferenceSpace();
1568
+ const pose = frame.getViewerPose( referenceSpace );
1569
+
1570
+ this._xrFrame = frame;
1571
+
1572
+ if ( pose !== null ) {
1573
+
1574
+ const views = pose.views;
1575
+
1576
+ if ( this._glBaseLayer !== null ) {
1577
+
1578
+ backend.setXRTarget( glBaseLayer.framebuffer );
1579
+
1580
+ }
1581
+
1582
+ let cameraXRNeedsUpdate = false;
1583
+
1584
+ // check if it's necessary to rebuild cameraXR's camera list
1585
+
1586
+ if ( views.length !== cameraXR.cameras.length ) {
1587
+
1588
+ cameraXR.cameras.length = 0;
1589
+ cameraXRNeedsUpdate = true;
1590
+
1591
+ }
1592
+
1593
+ for ( let i = 0; i < views.length; i ++ ) {
1594
+
1595
+ const view = views[ i ];
1596
+
1597
+ let viewport;
1598
+
1599
+ if ( this._supportsLayers === true ) {
1600
+
1601
+ const glSubImage = this._glBinding.getViewSubImage( this._glProjLayer, view );
1602
+ viewport = glSubImage.viewport;
1603
+
1604
+ // For side-by-side projection, we only produce a single texture for both eyes.
1605
+ if ( i === 0 ) {
1606
+
1607
+ backend.setXRRenderTargetTextures(
1608
+ this._xrRenderTarget,
1609
+ glSubImage.colorTexture,
1610
+ ( this._glProjLayer.ignoreDepthValues && ! this._useMultiview ) ? undefined : glSubImage.depthStencilTexture
1611
+ );
1612
+
1613
+ }
1614
+
1615
+ } else {
1616
+
1617
+ viewport = glBaseLayer.getViewport( view );
1618
+
1619
+ }
1620
+
1621
+ let camera = this._cameras[ i ];
1622
+
1623
+ if ( camera === undefined ) {
1624
+
1625
+ camera = new PerspectiveCamera();
1626
+ camera.layers.enable( i );
1627
+ camera.viewport = new Vector4();
1628
+ this._cameras[ i ] = camera;
1629
+
1630
+ }
1631
+
1632
+ camera.matrix.fromArray( view.transform.matrix );
1633
+ camera.matrix.decompose( camera.position, camera.quaternion, camera.scale );
1634
+ camera.projectionMatrix.fromArray( view.projectionMatrix );
1635
+ camera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();
1636
+ camera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );
1637
+
1638
+ if ( i === 0 ) {
1639
+
1640
+ cameraXR.matrix.copy( camera.matrix );
1641
+ cameraXR.matrix.decompose( cameraXR.position, cameraXR.quaternion, cameraXR.scale );
1642
+
1643
+ }
1644
+
1645
+ if ( cameraXRNeedsUpdate === true ) {
1646
+
1647
+ cameraXR.cameras.push( camera );
1648
+
1649
+ }
1650
+
1651
+ }
1652
+
1653
+ renderer.setOutputRenderTarget( this._xrRenderTarget );
1654
+
1655
+ }
1656
+
1657
+ //
1658
+
1659
+ for ( let i = 0; i < this._controllers.length; i ++ ) {
1660
+
1661
+ const inputSource = this._controllerInputSources[ i ];
1662
+ const controller = this._controllers[ i ];
1663
+
1664
+ if ( inputSource !== null && controller !== undefined ) {
1665
+
1666
+ controller.update( inputSource, frame, referenceSpace );
1667
+
1668
+ }
1669
+
1670
+ }
1671
+
1672
+ if ( this._currentAnimationLoop ) this._currentAnimationLoop( time, frame );
1673
+
1674
+ if ( frame.detectedPlanes ) {
1675
+
1676
+ this.dispatchEvent( { type: 'planesdetected', data: frame } );
1677
+
1678
+ }
1679
+
1680
+ this._xrFrame = null;
1681
+
1682
+ }
1683
+
1684
+ export default XRManager;