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