@plastic-software/three 0.175.13 → 0.178.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 (529) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +7747 -6792
  3. package/build/three.core.js +7371 -6576
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +190 -30
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +19 -11
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +4989 -2235
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +5082 -2469
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -1
  14. package/examples/jsm/animation/AnimationClipCreator.js +1 -0
  15. package/examples/jsm/animation/CCDIKSolver.js +6 -3
  16. package/examples/jsm/capabilities/WebGL.js +1 -27
  17. package/examples/jsm/capabilities/WebGPU.js +1 -0
  18. package/examples/jsm/controls/ArcballControls.js +15 -4
  19. package/examples/jsm/controls/DragControls.js +1 -0
  20. package/examples/jsm/controls/FirstPersonControls.js +1 -0
  21. package/examples/jsm/controls/FlyControls.js +1 -0
  22. package/examples/jsm/controls/MapControls.js +1 -0
  23. package/examples/jsm/controls/OrbitControls.js +1 -0
  24. package/examples/jsm/controls/PointerLockControls.js +5 -3
  25. package/examples/jsm/controls/TrackballControls.js +1 -0
  26. package/examples/jsm/controls/TransformControls.js +62 -14
  27. package/examples/jsm/csm/CSM.js +2 -0
  28. package/examples/jsm/csm/CSMFrustum.js +2 -0
  29. package/examples/jsm/csm/CSMHelper.js +1 -0
  30. package/examples/jsm/csm/CSMShader.js +4 -1
  31. package/examples/jsm/csm/CSMShadowNode.js +18 -4
  32. package/examples/jsm/curves/CurveExtras.js +14 -0
  33. package/examples/jsm/curves/NURBSCurve.js +1 -0
  34. package/examples/jsm/curves/NURBSSurface.js +2 -0
  35. package/examples/jsm/curves/NURBSUtils.js +4 -1
  36. package/examples/jsm/curves/NURBSVolume.js +2 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +2 -0
  38. package/examples/jsm/effects/AsciiEffect.js +2 -0
  39. package/examples/jsm/effects/OutlineEffect.js +2 -0
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
  41. package/examples/jsm/effects/StereoEffect.js +2 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +1 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +49 -35
  44. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  45. package/examples/jsm/exporters/EXRExporter.js +2 -0
  46. package/examples/jsm/exporters/GLTFExporter.js +7 -4
  47. package/examples/jsm/exporters/KTX2Exporter.js +2 -0
  48. package/examples/jsm/exporters/OBJExporter.js +3 -1
  49. package/examples/jsm/exporters/PLYExporter.js +4 -2
  50. package/examples/jsm/exporters/STLExporter.js +2 -0
  51. package/examples/jsm/exporters/USDZExporter.js +12 -10
  52. package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +1 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +1 -0
  55. package/examples/jsm/geometries/ParametricFunctions.js +4 -1
  56. package/examples/jsm/geometries/ParametricGeometry.js +1 -0
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +2 -1
  58. package/examples/jsm/geometries/TeapotGeometry.js +1 -0
  59. package/examples/jsm/geometries/TextGeometry.js +1 -0
  60. package/examples/jsm/helpers/LightProbeHelper.js +1 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
  64. package/examples/jsm/helpers/RapierHelper.js +59 -0
  65. package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
  66. package/examples/jsm/helpers/TextureHelper.js +1 -0
  67. package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
  68. package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
  69. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
  70. package/examples/jsm/helpers/ViewHelper.js +1 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +7 -0
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -0
  73. package/examples/jsm/interactive/SelectionBox.js +2 -0
  74. package/examples/jsm/interactive/SelectionHelper.js +2 -0
  75. package/examples/jsm/lighting/TiledLighting.js +1 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +1 -0
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  79. package/examples/jsm/lines/Line2.js +1 -0
  80. package/examples/jsm/lines/LineGeometry.js +1 -0
  81. package/examples/jsm/lines/LineMaterial.js +4 -4
  82. package/examples/jsm/lines/LineSegments2.js +1 -0
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  84. package/examples/jsm/lines/Wireframe.js +1 -0
  85. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  88. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  89. package/examples/jsm/loaders/3DMLoader.js +1 -0
  90. package/examples/jsm/loaders/3MFLoader.js +1 -0
  91. package/examples/jsm/loaders/AMFLoader.js +1 -0
  92. package/examples/jsm/loaders/BVHLoader.js +1 -0
  93. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  94. package/examples/jsm/loaders/DDSLoader.js +1 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  96. package/examples/jsm/loaders/EXRLoader.js +1 -0
  97. package/examples/jsm/loaders/FBXLoader.js +25 -23
  98. package/examples/jsm/loaders/FontLoader.js +1 -0
  99. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  100. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  102. package/examples/jsm/loaders/IESLoader.js +1 -0
  103. package/examples/jsm/loaders/KMZLoader.js +1 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  105. package/examples/jsm/loaders/KTXLoader.js +1 -0
  106. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  107. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  108. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  110. package/examples/jsm/loaders/LWOLoader.js +1 -13
  111. package/examples/jsm/loaders/LottieLoader.js +15 -0
  112. package/examples/jsm/loaders/MD2Loader.js +1 -0
  113. package/examples/jsm/loaders/MDDLoader.js +1 -0
  114. package/examples/jsm/loaders/MTLLoader.js +4 -3
  115. package/examples/jsm/loaders/MaterialXLoader.js +1 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  117. package/examples/jsm/loaders/OBJLoader.js +1 -0
  118. package/examples/jsm/loaders/PCDLoader.js +122 -19
  119. package/examples/jsm/loaders/PDBLoader.js +1 -0
  120. package/examples/jsm/loaders/PLYLoader.js +1 -0
  121. package/examples/jsm/loaders/PVRLoader.js +1 -0
  122. package/examples/jsm/loaders/RGBELoader.js +1 -0
  123. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  124. package/examples/jsm/loaders/STLLoader.js +1 -0
  125. package/examples/jsm/loaders/SVGLoader.js +1 -0
  126. package/examples/jsm/loaders/TDSLoader.js +1 -0
  127. package/examples/jsm/loaders/TGALoader.js +1 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  129. package/examples/jsm/loaders/TTFLoader.js +1 -0
  130. package/examples/jsm/loaders/USDZLoader.js +1 -0
  131. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  132. package/examples/jsm/loaders/VOXLoader.js +1 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  134. package/examples/jsm/loaders/VTKLoader.js +1 -0
  135. package/examples/jsm/loaders/XYZLoader.js +1 -0
  136. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  137. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  138. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  139. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  140. package/examples/jsm/math/Capsule.js +2 -0
  141. package/examples/jsm/math/ColorConverter.js +1 -0
  142. package/examples/jsm/math/ConvexHull.js +2 -0
  143. package/examples/jsm/math/ImprovedNoise.js +19 -14
  144. package/examples/jsm/math/Lut.js +2 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  146. package/examples/jsm/math/OBB.js +2 -0
  147. package/examples/jsm/math/Octree.js +20 -1
  148. package/examples/jsm/math/SimplexNoise.js +2 -0
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  150. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  151. package/examples/jsm/misc/Gyroscope.js +1 -0
  152. package/examples/jsm/misc/MD2Character.js +2 -0
  153. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  154. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  158. package/examples/jsm/misc/RollerCoaster.js +5 -0
  159. package/examples/jsm/misc/Timer.js +2 -0
  160. package/examples/jsm/misc/TubePainter.js +1 -0
  161. package/examples/jsm/misc/Volume.js +2 -0
  162. package/examples/jsm/misc/VolumeSlice.js +1 -0
  163. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  167. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  168. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  169. package/examples/jsm/objects/Lensflare.js +3 -0
  170. package/examples/jsm/objects/LensflareMesh.js +1 -0
  171. package/examples/jsm/objects/MarchingCubes.js +2 -0
  172. package/examples/jsm/objects/Reflector.js +1 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  174. package/examples/jsm/objects/Refractor.js +1 -0
  175. package/examples/jsm/objects/ShadowMesh.js +1 -0
  176. package/examples/jsm/objects/Sky.js +2 -1
  177. package/examples/jsm/objects/SkyMesh.js +20 -17
  178. package/examples/jsm/objects/Water.js +1 -0
  179. package/examples/jsm/objects/Water2.js +1 -0
  180. package/examples/jsm/objects/Water2Mesh.js +3 -1
  181. package/examples/jsm/objects/WaterMesh.js +2 -1
  182. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  183. package/examples/jsm/physics/JoltPhysics.js +1 -0
  184. package/examples/jsm/physics/RapierPhysics.js +139 -12
  185. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  186. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  187. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  188. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  190. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  191. package/examples/jsm/postprocessing/EffectComposer.js +4 -2
  192. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  193. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  194. package/examples/jsm/postprocessing/GTAOPass.js +4 -3
  195. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  196. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  197. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  198. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  199. package/examples/jsm/postprocessing/OutlinePass.js +5 -2
  200. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  201. package/examples/jsm/postprocessing/Pass.js +3 -1
  202. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  203. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  204. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  205. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  206. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  207. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  208. package/examples/jsm/postprocessing/SSAOPass.js +2 -1
  209. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  210. package/examples/jsm/postprocessing/SavePass.js +2 -1
  211. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  212. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  213. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  214. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  215. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  216. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  217. package/examples/jsm/renderers/Projector.js +2 -0
  218. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  219. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  220. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  221. package/examples/jsm/shaders/BasicShader.js +4 -1
  222. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  223. package/examples/jsm/shaders/BlendShader.js +4 -1
  224. package/examples/jsm/shaders/BokehShader.js +4 -1
  225. package/examples/jsm/shaders/BokehShader2.js +4 -1
  226. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  227. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  228. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  229. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  230. package/examples/jsm/shaders/CopyShader.js +4 -1
  231. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  232. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  233. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  234. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  235. package/examples/jsm/shaders/ExposureShader.js +4 -1
  236. package/examples/jsm/shaders/FXAAShader.js +4 -1
  237. package/examples/jsm/shaders/FilmShader.js +4 -1
  238. package/examples/jsm/shaders/FocusShader.js +4 -1
  239. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  240. package/examples/jsm/shaders/GTAOShader.js +4 -1
  241. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  242. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  243. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  244. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  245. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  246. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  247. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  248. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  249. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  250. package/examples/jsm/shaders/MirrorShader.js +4 -1
  251. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  252. package/examples/jsm/shaders/OutputShader.js +4 -1
  253. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  254. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  255. package/examples/jsm/shaders/SAOShader.js +4 -1
  256. package/examples/jsm/shaders/SMAAShader.js +1 -0
  257. package/examples/jsm/shaders/SSAOShader.js +4 -1
  258. package/examples/jsm/shaders/SSRShader.js +1 -0
  259. package/examples/jsm/shaders/SepiaShader.js +4 -1
  260. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  261. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  262. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  263. package/examples/jsm/shaders/ToonShader.js +2 -1
  264. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  265. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +4 -1
  266. package/examples/jsm/shaders/VelocityShader.js +4 -1
  267. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  268. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  269. package/examples/jsm/shaders/VignetteShader.js +4 -1
  270. package/examples/jsm/shaders/VolumeShader.js +5 -2
  271. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  272. package/examples/jsm/textures/FlakesTexture.js +2 -0
  273. package/examples/jsm/transpiler/AST.js +381 -30
  274. package/examples/jsm/transpiler/GLSLDecoder.js +226 -87
  275. package/examples/jsm/transpiler/Linker.js +327 -0
  276. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  277. package/examples/jsm/transpiler/Transpiler.js +19 -1
  278. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  279. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  280. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  281. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  282. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  283. package/examples/jsm/tsl/display/BloomNode.js +1 -0
  284. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  285. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  286. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  287. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  288. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  289. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  290. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  291. package/examples/jsm/tsl/display/GaussianBlurNode.js +4 -29
  292. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  293. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  294. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  295. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  296. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  297. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  298. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  299. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  300. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  301. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  302. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  303. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  304. package/examples/jsm/tsl/display/TRAAPassNode.js +5 -4
  305. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  306. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  307. package/examples/jsm/tsl/lighting/TiledLightsNode.js +4 -3
  308. package/examples/jsm/tsl/math/Bayer.js +4 -1
  309. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  310. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  311. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  312. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  313. package/examples/jsm/utils/CameraUtils.js +4 -1
  314. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  315. package/examples/jsm/utils/GeometryUtils.js +4 -1
  316. package/examples/jsm/utils/LDrawUtils.js +2 -0
  317. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  318. package/examples/jsm/utils/SceneUtils.js +4 -1
  319. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  320. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  321. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  322. package/examples/jsm/utils/SortUtils.js +4 -1
  323. package/examples/jsm/utils/UVsDebug.js +4 -1
  324. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  325. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  326. package/examples/jsm/utils/WorkerPool.js +2 -0
  327. package/examples/jsm/webxr/ARButton.js +1 -0
  328. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  329. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  330. package/examples/jsm/webxr/Text2D.js +4 -1
  331. package/examples/jsm/webxr/VRButton.js +1 -0
  332. package/examples/jsm/webxr/XRButton.js +1 -0
  333. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  334. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  335. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  336. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  338. package/examples/jsm/webxr/XRPlanes.js +1 -0
  339. package/package.json +6 -4
  340. package/src/Three.Core.js +1 -1
  341. package/src/Three.TSL.js +18 -10
  342. package/src/Three.WebGPU.Nodes.js +1 -0
  343. package/src/Three.WebGPU.js +3 -0
  344. package/src/audio/AudioListener.js +13 -10
  345. package/src/cameras/ArrayCamera.js +9 -1
  346. package/src/constants.js +47 -20
  347. package/src/core/BufferAttribute.js +3 -3
  348. package/src/core/BufferGeometry.js +2 -5
  349. package/src/core/Clock.js +2 -8
  350. package/src/core/GLBufferAttribute.js +13 -1
  351. package/src/core/Object3D.js +23 -22
  352. package/src/core/RenderTarget.js +65 -21
  353. package/src/core/RenderTarget3D.js +1 -0
  354. package/src/extras/TextureUtils.js +1 -5
  355. package/src/extras/core/Curve.js +1 -1
  356. package/src/extras/core/Path.js +22 -22
  357. package/src/geometries/CapsuleGeometry.js +167 -17
  358. package/src/geometries/ExtrudeGeometry.js +39 -29
  359. package/src/helpers/ArrowHelper.js +2 -2
  360. package/src/helpers/SkeletonHelper.js +1 -1
  361. package/src/lights/LightShadow.js +14 -0
  362. package/src/lights/SpotLightShadow.js +9 -1
  363. package/src/lights/webgpu/ProjectorLight.js +46 -0
  364. package/src/loaders/BufferGeometryLoader.js +1 -10
  365. package/src/loaders/FileLoader.js +2 -2
  366. package/src/loaders/ImageBitmapLoader.js +25 -9
  367. package/src/loaders/ImageLoader.js +55 -8
  368. package/src/loaders/ObjectLoader.js +44 -16
  369. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  370. package/src/materials/Material.js +1 -7
  371. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  372. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  373. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  374. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  375. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  376. package/src/materials/nodes/NodeMaterial.js +105 -19
  377. package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
  378. package/src/math/Box3.js +28 -0
  379. package/src/math/Color.js +7 -7
  380. package/src/math/ColorManagement.js +22 -3
  381. package/src/math/Frustum.js +6 -1
  382. package/src/math/FrustumArray.js +253 -0
  383. package/src/math/Quaternion.js +1 -1
  384. package/src/math/Ray.js +2 -0
  385. package/src/math/Sphere.js +28 -0
  386. package/src/nodes/Nodes.js +2 -3
  387. package/src/nodes/TSL.js +5 -3
  388. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  389. package/src/nodes/accessors/Bitangent.js +54 -26
  390. package/src/nodes/accessors/Camera.js +31 -4
  391. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  392. package/src/nodes/accessors/InstanceNode.js +5 -4
  393. package/src/nodes/accessors/Lights.js +2 -2
  394. package/src/nodes/accessors/MaterialNode.js +4 -0
  395. package/src/nodes/accessors/ModelNode.js +1 -1
  396. package/src/nodes/accessors/Normal.js +102 -16
  397. package/src/nodes/accessors/Object3DNode.js +7 -8
  398. package/src/nodes/accessors/Position.js +14 -4
  399. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  400. package/src/nodes/accessors/ReferenceNode.js +1 -1
  401. package/src/nodes/accessors/ReflectVector.js +3 -3
  402. package/src/nodes/accessors/SkinningNode.js +3 -2
  403. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  404. package/src/nodes/accessors/StorageTextureNode.js +14 -3
  405. package/src/nodes/accessors/Tangent.js +25 -17
  406. package/src/nodes/accessors/TangentUtils.js +46 -0
  407. package/src/nodes/accessors/TextureBicubic.js +21 -3
  408. package/src/nodes/accessors/TextureNode.js +59 -8
  409. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  410. package/src/nodes/accessors/VelocityNode.js +1 -0
  411. package/src/nodes/accessors/VertexColorNode.js +4 -4
  412. package/src/nodes/code/CodeNode.js +8 -11
  413. package/src/nodes/core/AssignNode.js +27 -5
  414. package/src/nodes/core/AttributeNode.js +2 -2
  415. package/src/nodes/core/ContextNode.js +7 -3
  416. package/src/nodes/core/Node.js +69 -20
  417. package/src/nodes/core/NodeBuilder.js +248 -29
  418. package/src/nodes/core/NodeUtils.js +42 -0
  419. package/src/nodes/core/NodeVarying.js +19 -1
  420. package/src/nodes/core/PropertyNode.js +8 -12
  421. package/src/nodes/core/StackNode.js +129 -26
  422. package/src/nodes/core/StructTypeNode.js +26 -4
  423. package/src/nodes/core/SubBuildNode.js +89 -0
  424. package/src/nodes/core/VarNode.js +11 -2
  425. package/src/nodes/core/VaryingNode.js +45 -24
  426. package/src/nodes/display/BlendModes.js +42 -1
  427. package/src/nodes/display/ColorSpaceNode.js +4 -27
  428. package/src/nodes/display/FrontFacingNode.js +34 -2
  429. package/src/nodes/display/NormalMapNode.js +19 -50
  430. package/src/nodes/display/PassNode.js +18 -19
  431. package/src/nodes/display/ScreenNode.js +0 -26
  432. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  433. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  434. package/src/nodes/functions/PhongLightingModel.js +3 -3
  435. package/src/nodes/functions/PhysicalLightingModel.js +14 -14
  436. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  437. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  438. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  439. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  440. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  441. package/src/nodes/gpgpu/ComputeNode.js +1 -1
  442. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  443. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  444. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  445. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  446. package/src/nodes/lighting/LightsNode.js +29 -11
  447. package/src/nodes/lighting/ProjectorLightNode.js +78 -0
  448. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  449. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  450. package/src/nodes/lighting/ShadowNode.js +174 -242
  451. package/src/nodes/lighting/SpotLightNode.js +44 -7
  452. package/src/nodes/materialx/lib/mx_noise.js +1 -1
  453. package/src/nodes/math/ConditionalNode.js +0 -19
  454. package/src/nodes/math/MathNode.js +68 -21
  455. package/src/nodes/math/OperatorNode.js +108 -98
  456. package/src/nodes/shapes/Shapes.js +5 -4
  457. package/src/nodes/tsl/TSLBase.js +1 -0
  458. package/src/nodes/tsl/TSLCore.js +160 -65
  459. package/src/nodes/utils/DebugNode.js +15 -3
  460. package/src/nodes/utils/Discard.js +2 -2
  461. package/src/nodes/utils/EquirectUV.js +27 -0
  462. package/src/nodes/utils/LoopNode.js +64 -34
  463. package/src/nodes/utils/MatcapUV.js +22 -0
  464. package/src/nodes/utils/RTTNode.js +13 -5
  465. package/src/nodes/utils/ReflectorNode.js +77 -7
  466. package/src/nodes/utils/SampleNode.js +81 -0
  467. package/src/nodes/utils/TriplanarTextures.js +65 -0
  468. package/src/objects/BatchedMesh.js +16 -4
  469. package/src/objects/Mesh.js +9 -0
  470. package/src/objects/Skeleton.js +1 -1
  471. package/src/objects/Sprite.js +9 -0
  472. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  473. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  474. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  475. package/src/renderers/WebGLRenderer.js +25 -11
  476. package/src/renderers/common/Animation.js +2 -2
  477. package/src/renderers/common/Background.js +13 -2
  478. package/src/renderers/common/CubeRenderTarget.js +1 -1
  479. package/src/renderers/common/RenderList.js +0 -4
  480. package/src/renderers/common/RenderObject.js +80 -4
  481. package/src/renderers/common/Renderer.js +116 -8
  482. package/src/renderers/common/Storage3DTexture.js +79 -0
  483. package/src/renderers/common/StorageArrayTexture.js +63 -0
  484. package/src/renderers/common/Textures.js +15 -21
  485. package/src/renderers/common/TimestampQueryPool.js +1 -0
  486. package/src/renderers/common/Uniform.js +1 -1
  487. package/src/renderers/common/UniformsGroup.js +14 -18
  488. package/src/renderers/common/XRManager.js +157 -27
  489. package/src/renderers/common/XRRenderTarget.js +21 -4
  490. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  491. package/src/renderers/common/nodes/Nodes.js +13 -3
  492. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +1 -1
  493. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  494. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  495. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  496. package/src/renderers/webgl/WebGLPrograms.js +4 -2
  497. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  498. package/src/renderers/webgl/WebGLState.js +4 -4
  499. package/src/renderers/webgl/WebGLTextures.js +144 -4
  500. package/src/renderers/webgl/WebGLUtils.js +1 -3
  501. package/src/renderers/webgl-fallback/WebGLBackend.js +244 -87
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +73 -7
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  504. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  507. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  508. package/src/renderers/webgpu/WebGPUBackend.js +451 -128
  509. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  510. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  511. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  512. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +86 -33
  513. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  514. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  515. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +28 -5
  516. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  517. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -8
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +45 -50
  519. package/src/renderers/webxr/WebXRController.js +1 -1
  520. package/src/renderers/webxr/WebXRManager.js +2 -1
  521. package/src/textures/DepthTexture.js +6 -10
  522. package/src/textures/Source.js +22 -0
  523. package/src/textures/Texture.js +118 -1
  524. package/src/textures/VideoTexture.js +1 -1
  525. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  526. package/src/core/RenderTargetArray.js +0 -40
  527. package/src/nodes/utils/EquirectUVNode.js +0 -65
  528. package/src/nodes/utils/MatcapUVNode.js +0 -49
  529. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -11,6 +11,8 @@ import { AddEquation, BackSide, CustomBlending, DepthFormat, DepthStencilFormat,
11
11
  import { DepthTexture } from '../../textures/DepthTexture.js';
12
12
  import { XRRenderTarget } from './XRRenderTarget.js';
13
13
  import { CylinderGeometry } from '../../geometries/CylinderGeometry.js';
14
+ import QuadMesh from './QuadMesh.js';
15
+ import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
14
16
  import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
15
17
  import { MeshBasicMaterial } from '../../materials/MeshBasicMaterial.js';
16
18
  import { Mesh } from '../../objects/Mesh.js';
@@ -32,8 +34,9 @@ class XRManager extends EventDispatcher {
32
34
  * Constructs a new XR manager.
33
35
  *
34
36
  * @param {Renderer} renderer - The renderer.
37
+ * @param {boolean} [multiview=false] - Enables multiview if the device supports it.
35
38
  */
36
- constructor( renderer ) {
39
+ constructor( renderer, multiview = false ) {
37
40
 
38
41
  super();
39
42
 
@@ -168,6 +171,8 @@ class XRManager extends EventDispatcher {
168
171
  */
169
172
  this._supportsLayers = false;
170
173
 
174
+ this._frameBufferTargets = null;
175
+
171
176
  /**
172
177
  * Helper function to create native WebXR Layer.
173
178
  *
@@ -354,6 +359,26 @@ class XRManager extends EventDispatcher {
354
359
  */
355
360
  this._useLayers = ( typeof XRWebGLBinding !== 'undefined' && 'createProjectionLayer' in XRWebGLBinding.prototype ); // eslint-disable-line compat/compat
356
361
 
362
+ /**
363
+ * Whether the usage of multiview has been requested by the application or not.
364
+ *
365
+ * @private
366
+ * @type {boolean}
367
+ * @default false
368
+ * @readonly
369
+ */
370
+ this._useMultiviewIfPossible = multiview;
371
+
372
+ /**
373
+ * Whether the usage of multiview is actually enabled. This flag only evaluates to `true`
374
+ * if multiview has been requested by the application and the `OVR_multiview2` is available.
375
+ *
376
+ * @private
377
+ * @type {boolean}
378
+ * @readonly
379
+ */
380
+ this._useMultiview = false;
381
+
357
382
  }
358
383
 
359
384
  /**
@@ -564,7 +589,33 @@ class XRManager extends EventDispatcher {
564
589
 
565
590
  }
566
591
 
567
- createQuadLayer( width, height, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = [] ) {
592
+ /**
593
+ * Returns `true` if the engine renders to a multiview target.
594
+ *
595
+ * @return {boolean} Whether the engine renders to a multiview render target or not.
596
+ */
597
+ useMultiview() {
598
+
599
+ return this._useMultiview;
600
+
601
+ }
602
+
603
+ /**
604
+ * This method can be used in XR applications to create a quadratic layer that presents a separate
605
+ * rendered scene.
606
+ *
607
+ * @param {number} width - The width of the layer plane in world units.
608
+ * @param {number} height - The height of the layer plane in world units.
609
+ * @param {Vector3} translation - The position/translation of the layer plane in world units.
610
+ * @param {Quaternion} quaternion - The orientation of the layer plane expressed as a quaternion.
611
+ * @param {number} pixelwidth - The width of the layer's render target in pixels.
612
+ * @param {number} pixelheight - The height of the layer's render target in pixels.
613
+ * @param {Function} rendercall - A callback function that renders the layer. Similar to code in
614
+ * the default animation loop, this method can be used to update/transform 3D object in the layer's scene.
615
+ * @param {Object} [attributes={}] - Allows to configure the layer's render target.
616
+ * @return {Mesh} A mesh representing the quadratic XR layer. This mesh should be added to the XR scene.
617
+ */
618
+ createQuadLayer( width, height, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = {} ) {
568
619
 
569
620
  const geometry = new PlaneGeometry( width, height );
570
621
  const renderTarget = new XRRenderTarget(
@@ -590,6 +641,8 @@ class XRManager extends EventDispatcher {
590
641
  resolveStencilBuffer: false
591
642
  } );
592
643
 
644
+ renderTarget._autoAllocateDepthBuffer = true;
645
+
593
646
  const material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );
594
647
  material.map = renderTarget.texture;
595
648
  material.map.offset.y = 1;
@@ -637,7 +690,23 @@ class XRManager extends EventDispatcher {
637
690
 
638
691
  }
639
692
 
640
- createCylinderLayer( radius, centralAngle, aspectratio, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = [] ) {
693
+ /**
694
+ * This method can be used in XR applications to create a cylindrical layer that presents a separate
695
+ * rendered scene.
696
+ *
697
+ * @param {number} radius - The radius of the cylinder in world units.
698
+ * @param {number} centralAngle - The central angle of the cylinder in radians.
699
+ * @param {number} aspectratio - The aspect ratio.
700
+ * @param {Vector3} translation - The position/translation of the layer plane in world units.
701
+ * @param {Quaternion} quaternion - The orientation of the layer plane expressed as a quaternion.
702
+ * @param {number} pixelwidth - The width of the layer's render target in pixels.
703
+ * @param {number} pixelheight - The height of the layer's render target in pixels.
704
+ * @param {Function} rendercall - A callback function that renders the layer. Similar to code in
705
+ * the default animation loop, this method can be used to update/transform 3D object in the layer's scene.
706
+ * @param {Object} [attributes={}] - Allows to configure the layer's render target.
707
+ * @return {Mesh} A mesh representing the cylindrical XR layer. This mesh should be added to the XR scene.
708
+ */
709
+ createCylinderLayer( radius, centralAngle, aspectratio, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = {} ) {
641
710
 
642
711
  const geometry = new CylinderGeometry( radius, radius, radius * centralAngle / aspectratio, 64, 64, true, Math.PI - centralAngle / 2, centralAngle );
643
712
  const renderTarget = new XRRenderTarget(
@@ -663,6 +732,8 @@ class XRManager extends EventDispatcher {
663
732
  resolveStencilBuffer: false
664
733
  } );
665
734
 
735
+ renderTarget._autoAllocateDepthBuffer = true;
736
+
666
737
  const material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );
667
738
  material.map = renderTarget.texture;
668
739
  material.map.offset.y = 1;
@@ -711,39 +782,80 @@ class XRManager extends EventDispatcher {
711
782
 
712
783
  }
713
784
 
785
+ /**
786
+ * Renders the XR layers that have been previously added to the scene.
787
+ *
788
+ * This method is usually called in your animation loop before rendering
789
+ * the actual scene via `renderer.render( scene, camera );`.
790
+ */
714
791
  renderLayers( ) {
715
792
 
716
793
  const translationObject = new Vector3();
717
794
  const quaternionObject = new Quaternion();
795
+ const renderer = this._renderer;
718
796
 
719
797
  const wasPresenting = this.isPresenting;
798
+ const rendererOutputTarget = renderer.getOutputRenderTarget();
799
+ const rendererFramebufferTarget = renderer._frameBufferTarget;
720
800
  this.isPresenting = false;
721
801
 
802
+ const rendererSize = new Vector2();
803
+ renderer.getSize( rendererSize );
804
+ const rendererQuad = renderer._quad;
805
+
722
806
  for ( const layer of this._layers ) {
723
807
 
724
808
  layer.renderTarget.isXRRenderTarget = this._session !== null;
725
- layer.renderTarget.hasExternalTextures = layer.renderTarget.isXRRenderTarget;
726
- layer.renderTarget.autoAllocateDepthBuffer = ! layer.renderTarget.isXRRenderTarget;
809
+ layer.renderTarget._hasExternalTextures = layer.renderTarget.isXRRenderTarget;
727
810
 
728
811
  if ( layer.renderTarget.isXRRenderTarget && this._supportsLayers ) {
729
812
 
730
813
  layer.xrlayer.transform = new XRRigidTransform( layer.plane.getWorldPosition( translationObject ), layer.plane.getWorldQuaternion( quaternionObject ) );
731
814
 
732
815
  const glSubImage = this._glBinding.getSubImage( layer.xrlayer, this._xrFrame );
733
- this._renderer.backend.setXRRenderTargetTextures(
816
+ renderer.backend.setXRRenderTargetTextures(
734
817
  layer.renderTarget,
735
818
  glSubImage.colorTexture,
736
- glSubImage.depthStencilTexture );
819
+ undefined );
737
820
 
738
- }
821
+ renderer._setXRLayerSize( layer.renderTarget.width, layer.renderTarget.height );
822
+ renderer.setOutputRenderTarget( layer.renderTarget );
823
+ renderer.setRenderTarget( null );
824
+ renderer._frameBufferTarget = null;
825
+
826
+ this._frameBufferTargets || ( this._frameBufferTargets = new WeakMap() );
827
+ const { frameBufferTarget, quad } = this._frameBufferTargets.get( layer.renderTarget ) || { frameBufferTarget: null, quad: null };
828
+ if ( ! frameBufferTarget ) {
829
+
830
+ renderer._quad = new QuadMesh( new NodeMaterial() );
831
+ this._frameBufferTargets.set( layer.renderTarget, { frameBufferTarget: renderer._getFrameBufferTarget(), quad: renderer._quad } );
832
+
833
+ } else {
834
+
835
+ renderer._frameBufferTarget = frameBufferTarget;
836
+ renderer._quad = quad;
837
+
838
+ }
839
+
840
+ layer.rendercall();
841
+
842
+ renderer._frameBufferTarget = null;
843
+
844
+ } else {
845
+
846
+ renderer.setRenderTarget( layer.renderTarget );
847
+ layer.rendercall();
739
848
 
740
- this._renderer.setRenderTarget( layer.renderTarget );
741
- layer.rendercall();
849
+ }
742
850
 
743
851
  }
744
852
 
853
+ renderer.setRenderTarget( null );
854
+ renderer.setOutputRenderTarget( rendererOutputTarget );
855
+ renderer._frameBufferTarget = rendererFramebufferTarget;
856
+ renderer._setXRLayerSize( rendererSize.x, rendererSize.y );
857
+ renderer._quad = rendererQuad;
745
858
  this.isPresenting = wasPresenting;
746
- this._renderer.setRenderTarget( null );
747
859
 
748
860
  }
749
861
 
@@ -822,9 +934,17 @@ class XRManager extends EventDispatcher {
822
934
  const projectionlayerInit = {
823
935
  colorFormat: gl.RGBA8,
824
936
  depthFormat: glDepthFormat,
825
- scaleFactor: this._framebufferScaleFactor
937
+ scaleFactor: this._framebufferScaleFactor,
938
+ clearOnAccess: false
826
939
  };
827
940
 
941
+ if ( this._useMultiviewIfPossible && renderer.hasFeature( 'OVR_multiview2' ) ) {
942
+
943
+ projectionlayerInit.textureType = 'texture-array';
944
+ this._useMultiview = true;
945
+
946
+ }
947
+
828
948
  const glBinding = new XRWebGLBinding( session, gl );
829
949
  const glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
830
950
  const layersArray = [ glProjLayer ];
@@ -833,7 +953,10 @@ class XRManager extends EventDispatcher {
833
953
  this._glProjLayer = glProjLayer;
834
954
 
835
955
  renderer.setPixelRatio( 1 );
836
- renderer.setSize( glProjLayer.textureWidth, glProjLayer.textureHeight, false );
956
+ renderer._setXRLayerSize( glProjLayer.textureWidth, glProjLayer.textureHeight );
957
+
958
+ const depth = this._useMultiview ? 2 : 1;
959
+ const depthTexture = new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat, depth );
837
960
 
838
961
  this._xrRenderTarget = new XRRenderTarget(
839
962
  glProjLayer.textureWidth,
@@ -842,19 +965,22 @@ class XRManager extends EventDispatcher {
842
965
  format: RGBAFormat,
843
966
  type: UnsignedByteType,
844
967
  colorSpace: renderer.outputColorSpace,
845
- depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),
968
+ depthTexture: depthTexture,
846
969
  stencilBuffer: renderer.stencil,
847
970
  samples: attributes.antialias ? 4 : 0,
848
971
  resolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false ),
849
972
  resolveStencilBuffer: ( glProjLayer.ignoreDepthValues === false ),
973
+ depth: this._useMultiview ? 2 : 1,
974
+ multiview: this._useMultiview
850
975
  } );
851
976
 
852
- this._xrRenderTarget.hasExternalTextures = true;
853
-
854
- this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
977
+ this._xrRenderTarget._hasExternalTextures = true;
978
+ this._xrRenderTarget.depth = this._useMultiview ? 2 : 1;
855
979
 
856
980
  this._supportsLayers = session.enabledFeatures.includes( 'layers' );
857
981
 
982
+ this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
983
+
858
984
  if ( this._supportsLayers ) {
859
985
 
860
986
  // switch layers to native
@@ -895,7 +1021,7 @@ class XRManager extends EventDispatcher {
895
1021
  session.updateRenderState( { baseLayer: glBaseLayer } );
896
1022
 
897
1023
  renderer.setPixelRatio( 1 );
898
- renderer.setSize( glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight, false );
1024
+ renderer._setXRLayerSize( glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight );
899
1025
 
900
1026
  this._xrRenderTarget = new XRRenderTarget(
901
1027
  glBaseLayer.framebufferWidth,
@@ -910,6 +1036,9 @@ class XRManager extends EventDispatcher {
910
1036
  }
911
1037
  );
912
1038
 
1039
+ this._xrRenderTarget._isOpaqueFramebuffer = true;
1040
+ this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
1041
+
913
1042
  }
914
1043
 
915
1044
  //
@@ -950,6 +1079,7 @@ class XRManager extends EventDispatcher {
950
1079
 
951
1080
  cameraXR.near = cameraR.near = cameraL.near = depthNear;
952
1081
  cameraXR.far = cameraR.far = cameraL.far = depthFar;
1082
+ cameraXR.isMultiViewCamera = this._useMultiview;
953
1083
 
954
1084
  if ( this._currentDepthNear !== cameraXR.near || this._currentDepthFar !== cameraXR.far ) {
955
1085
 
@@ -1212,9 +1342,7 @@ function onSessionEnd() {
1212
1342
 
1213
1343
  // restore framebuffer/rendering state
1214
1344
 
1215
- renderer.backend.setXRTarget( null );
1216
- renderer.setOutputRenderTarget( null );
1217
- renderer.setRenderTarget( null );
1345
+ renderer._resetXRState();
1218
1346
 
1219
1347
  this._session = null;
1220
1348
  this._xrRenderTarget = null;
@@ -1252,6 +1380,8 @@ function onSessionEnd() {
1252
1380
 
1253
1381
  layer.plane.material = layer.material;
1254
1382
  layer.material.map = layer.renderTarget.texture;
1383
+ layer.material.map.offset.y = 1;
1384
+ layer.material.map.repeat.y = - 1;
1255
1385
  delete layer.xrlayer;
1256
1386
 
1257
1387
  }
@@ -1261,9 +1391,9 @@ function onSessionEnd() {
1261
1391
  //
1262
1392
 
1263
1393
  this.isPresenting = false;
1394
+ this._useMultiview = false;
1264
1395
 
1265
1396
  renderer._animation.stop();
1266
-
1267
1397
  renderer._animation.setAnimationLoop( this._currentAnimationLoop );
1268
1398
  renderer._animation.setContext( this._currentAnimationContext );
1269
1399
  renderer._animation.start();
@@ -1351,25 +1481,25 @@ function createXRLayer( layer ) {
1351
1481
 
1352
1482
  return this._glBinding.createQuadLayer( {
1353
1483
  transform: new XRRigidTransform( layer.translation, layer.quaternion ),
1354
- depthFormat: this._gl.DEPTH_COMPONENT,
1355
1484
  width: layer.width / 2,
1356
1485
  height: layer.height / 2,
1357
1486
  space: this._referenceSpace,
1358
1487
  viewPixelWidth: layer.pixelwidth,
1359
- viewPixelHeight: layer.pixelheight
1488
+ viewPixelHeight: layer.pixelheight,
1489
+ clearOnAccess: false
1360
1490
  } );
1361
1491
 
1362
1492
  } else {
1363
1493
 
1364
1494
  return this._glBinding.createCylinderLayer( {
1365
1495
  transform: new XRRigidTransform( layer.translation, layer.quaternion ),
1366
- depthFormat: this._gl.DEPTH_COMPONENT,
1367
1496
  radius: layer.radius,
1368
1497
  centralAngle: layer.centralAngle,
1369
1498
  aspectRatio: layer.aspectRatio,
1370
1499
  space: this._referenceSpace,
1371
1500
  viewPixelWidth: layer.pixelwidth,
1372
- viewPixelHeight: layer.pixelheight
1501
+ viewPixelHeight: layer.pixelheight,
1502
+ clearOnAccess: false
1373
1503
  } );
1374
1504
 
1375
1505
  }
@@ -1431,7 +1561,7 @@ function onAnimationFrame( time, frame ) {
1431
1561
  backend.setXRRenderTargetTextures(
1432
1562
  this._xrRenderTarget,
1433
1563
  glSubImage.colorTexture,
1434
- this._glProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture
1564
+ ( this._glProjLayer.ignoreDepthValues && ! this._useMultiview ) ? undefined : glSubImage.depthStencilTexture
1435
1565
  );
1436
1566
 
1437
1567
  }
@@ -34,10 +34,11 @@ class XRRenderTarget extends RenderTarget {
34
34
  * are defined by external textures. This flag is
35
35
  * set to `true` when using the WebXR Layers API.
36
36
  *
37
+ * @private
37
38
  * @type {boolean}
38
39
  * @default false
39
40
  */
40
- this.hasExternalTextures = false;
41
+ this._hasExternalTextures = false;
41
42
 
42
43
  /**
43
44
  * Whether a depth buffer should automatically be allocated
@@ -50,10 +51,25 @@ class XRRenderTarget extends RenderTarget {
50
51
  *
51
52
  * Reference: {@link https://www.w3.org/TR/webxrlayers-1/#dom-xrprojectionlayer-ignoredepthvalues}.
52
53
  *
54
+ * @private
53
55
  * @type {boolean}
54
56
  * @default true
55
57
  */
56
- this.autoAllocateDepthBuffer = true;
58
+ this._autoAllocateDepthBuffer = true;
59
+
60
+ /**
61
+ * Whether this render target is associated with a XRWebGLLayer.
62
+ *
63
+ * A XRWebGLLayer points to an opaque framebuffer. Basically,
64
+ * this means that you don't have access to its bound color,
65
+ * stencil and depth buffers. We need to handle this framebuffer
66
+ * differently since its textures are always bound.
67
+ *
68
+ * @private
69
+ * @type {boolean}
70
+ * @default false
71
+ * */
72
+ this._isOpaqueFramebuffer = false;
57
73
 
58
74
  }
59
75
 
@@ -61,8 +77,9 @@ class XRRenderTarget extends RenderTarget {
61
77
 
62
78
  super.copy( source );
63
79
 
64
- this.hasExternalTextures = source.hasExternalTextures;
65
- this.autoAllocateDepthBuffer = source.autoAllocateDepthBuffer;
80
+ this._hasExternalTextures = source._hasExternalTextures;
81
+ this._autoAllocateDepthBuffer = source._autoAllocateDepthBuffer;
82
+ this._isOpaqueFramebuffer = source._isOpaqueFramebuffer;
66
83
 
67
84
  return this;
68
85
 
@@ -1,6 +1,6 @@
1
1
  import NodeMaterial from '../../../materials/nodes/NodeMaterial.js';
2
2
  import { getDirection, blur } from '../../../nodes/pmrem/PMREMUtils.js';
3
- import { equirectUV } from '../../../nodes/utils/EquirectUVNode.js';
3
+ import { equirectUV } from '../../../nodes/utils/EquirectUV.js';
4
4
  import { uniform } from '../../../nodes/core/UniformNode.js';
5
5
  import { uniformArray } from '../../../nodes/accessors/UniformArrayNode.js';
6
6
  import { texture } from '../../../nodes/accessors/TextureNode.js';
@@ -161,7 +161,7 @@ class PMREMGenerator {
161
161
 
162
162
  console.warn( 'THREE.PMREMGenerator: .fromScene() called before the backend is initialized. Try using .fromSceneAsync() instead.' );
163
163
 
164
- const cubeUVRenderTarget = renderTarget || this._allocateTargets();
164
+ const cubeUVRenderTarget = renderTarget || this._allocateTarget();
165
165
 
166
166
  options.renderTarget = cubeUVRenderTarget;
167
167
 
@@ -175,9 +175,11 @@ class PMREMGenerator {
175
175
  _oldActiveCubeFace = this._renderer.getActiveCubeFace();
176
176
  _oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
177
177
 
178
- const cubeUVRenderTarget = renderTarget || this._allocateTargets();
178
+ const cubeUVRenderTarget = renderTarget || this._allocateTarget();
179
179
  cubeUVRenderTarget.depthBuffer = true;
180
180
 
181
+ this._init( cubeUVRenderTarget );
182
+
181
183
  this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position );
182
184
 
183
185
  if ( sigma > 0 ) {
@@ -238,7 +240,7 @@ class PMREMGenerator {
238
240
 
239
241
  this._setSizeFromTexture( equirectangular );
240
242
 
241
- const cubeUVRenderTarget = renderTarget || this._allocateTargets();
243
+ const cubeUVRenderTarget = renderTarget || this._allocateTarget();
242
244
 
243
245
  this.fromEquirectangularAsync( equirectangular, cubeUVRenderTarget );
244
246
 
@@ -286,7 +288,7 @@ class PMREMGenerator {
286
288
 
287
289
  this._setSizeFromTexture( cubemap );
288
290
 
289
- const cubeUVRenderTarget = renderTarget || this._allocateTargets();
291
+ const cubeUVRenderTarget = renderTarget || this._allocateTarget();
290
292
 
291
293
  this.fromCubemapAsync( cubemap, renderTarget );
292
294
 
@@ -423,7 +425,8 @@ class PMREMGenerator {
423
425
  _oldActiveCubeFace = this._renderer.getActiveCubeFace();
424
426
  _oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
425
427
 
426
- const cubeUVRenderTarget = renderTarget || this._allocateTargets();
428
+ const cubeUVRenderTarget = renderTarget || this._allocateTarget();
429
+ this._init( cubeUVRenderTarget );
427
430
  this._textureToCubeUV( texture, cubeUVRenderTarget );
428
431
  this._applyPMREM( cubeUVRenderTarget );
429
432
  this._cleanup( cubeUVRenderTarget );
@@ -432,24 +435,20 @@ class PMREMGenerator {
432
435
 
433
436
  }
434
437
 
435
- _allocateTargets() {
438
+ _allocateTarget() {
436
439
 
437
440
  const width = 3 * Math.max( this._cubeSize, 16 * 7 );
438
441
  const height = 4 * this._cubeSize;
439
442
 
440
- const params = {
441
- magFilter: LinearFilter,
442
- minFilter: LinearFilter,
443
- generateMipmaps: false,
444
- type: HalfFloatType,
445
- format: RGBAFormat,
446
- colorSpace: LinearSRGBColorSpace,
447
- //depthBuffer: false
448
- };
443
+ const cubeUVRenderTarget = _createRenderTarget( width, height );
444
+
445
+ return cubeUVRenderTarget;
446
+
447
+ }
449
448
 
450
- const cubeUVRenderTarget = _createRenderTarget( width, height, params );
449
+ _init( renderTarget ) {
451
450
 
452
- if ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height ) {
451
+ if ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== renderTarget.width || this._pingPongRenderTarget.height !== renderTarget.height ) {
453
452
 
454
453
  if ( this._pingPongRenderTarget !== null ) {
455
454
 
@@ -457,17 +456,15 @@ class PMREMGenerator {
457
456
 
458
457
  }
459
458
 
460
- this._pingPongRenderTarget = _createRenderTarget( width, height, params );
459
+ this._pingPongRenderTarget = _createRenderTarget( renderTarget.width, renderTarget.height );
461
460
 
462
461
  const { _lodMax } = this;
463
462
  ( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas, lodMeshes: this._lodMeshes } = _createPlanes( _lodMax ) );
464
463
 
465
- this._blurMaterial = _getBlurShader( _lodMax, width, height );
464
+ this._blurMaterial = _getBlurShader( _lodMax, renderTarget.width, renderTarget.height );
466
465
 
467
466
  }
468
467
 
469
- return cubeUVRenderTarget;
470
-
471
468
  }
472
469
 
473
470
  async _compileMaterial( material ) {
@@ -849,7 +846,17 @@ function _createPlanes( lodMax ) {
849
846
 
850
847
  }
851
848
 
852
- function _createRenderTarget( width, height, params ) {
849
+ function _createRenderTarget( width, height ) {
850
+
851
+ const params = {
852
+ magFilter: LinearFilter,
853
+ minFilter: LinearFilter,
854
+ generateMipmaps: false,
855
+ type: HalfFloatType,
856
+ format: RGBAFormat,
857
+ colorSpace: LinearSRGBColorSpace,
858
+ //depthBuffer: false
859
+ };
853
860
 
854
861
  const cubeUVRenderTarget = new RenderTarget( width, height, params );
855
862
  cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;
@@ -3,7 +3,8 @@ import ChainMap from '../ChainMap.js';
3
3
  import NodeBuilderState from './NodeBuilderState.js';
4
4
  import { cubeMapNode } from '../../../nodes/utils/CubeMapNode.js';
5
5
  import { NodeFrame } from '../../../nodes/Nodes.js';
6
- import { objectGroup, renderGroup, frameGroup, cubeTexture, texture, fog, rangeFogFactor, densityFogFactor, reference, pmremTexture, screenUV } from '../../../nodes/TSL.js';
6
+ import { objectGroup, renderGroup, frameGroup, cubeTexture, texture, texture3D, vec3, fog, rangeFogFactor, densityFogFactor, reference, pmremTexture, screenUV } from '../../../nodes/TSL.js';
7
+ import { builtin } from '../../../nodes/accessors/BuiltinNode.js';
7
8
 
8
9
  import { CubeUVReflectionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../../constants.js';
9
10
  import { hashArray } from '../../../nodes/core/NodeUtils.js';
@@ -201,6 +202,12 @@ class Nodes extends DataMap {
201
202
  nodeBuilder.environmentNode = this.getEnvironmentNode( renderObject.scene );
202
203
  nodeBuilder.fogNode = this.getFogNode( renderObject.scene );
203
204
  nodeBuilder.clippingContext = renderObject.clippingContext;
205
+ if ( this.renderer.getOutputRenderTarget() ? this.renderer.getOutputRenderTarget().multiview : false ) {
206
+
207
+ nodeBuilder.enableMultiview();
208
+
209
+ }
210
+
204
211
  nodeBuilder.build();
205
212
 
206
213
  nodeBuilderState = this._createNodeBuilderState( nodeBuilder );
@@ -403,6 +410,7 @@ class Nodes extends DataMap {
403
410
  if ( environmentNode ) _cacheKeyValues.push( environmentNode.getCacheKey() );
404
411
  if ( fogNode ) _cacheKeyValues.push( fogNode.getCacheKey() );
405
412
 
413
+ _cacheKeyValues.push( this.renderer.getOutputRenderTarget() && this.renderer.getOutputRenderTarget().multiview ? 1 : 0 );
406
414
  _cacheKeyValues.push( this.renderer.shadowMap.enabled ? 1 : 0 );
407
415
 
408
416
  cacheKeyData.callId = callId;
@@ -658,7 +666,7 @@ class Nodes extends DataMap {
658
666
 
659
667
  const renderer = this.renderer;
660
668
 
661
- return renderer.toneMapping + ',' + renderer.currentColorSpace;
669
+ return renderer.toneMapping + ',' + renderer.currentColorSpace + ',' + renderer.xr.isPresenting;
662
670
 
663
671
  }
664
672
 
@@ -689,7 +697,9 @@ class Nodes extends DataMap {
689
697
  const renderer = this.renderer;
690
698
  const cacheKey = this.getOutputCacheKey();
691
699
 
692
- const output = texture( outputTarget, screenUV ).renderOutput( renderer.toneMapping, renderer.currentColorSpace );
700
+ const output = outputTarget.isArrayTexture ?
701
+ texture3D( outputTarget, vec3( screenUV, builtin( 'gl_ViewID_OVR' ) ) ).renderOutput( renderer.toneMapping, renderer.currentColorSpace ) :
702
+ texture( outputTarget, screenUV ).renderOutput( renderer.toneMapping, renderer.currentColorSpace );
693
703
 
694
704
  _outputNodeMap.set( outputTarget, cacheKey );
695
705
 
@@ -1,7 +1,7 @@
1
1
  export default /* glsl */`
2
2
  #ifdef USE_CLEARCOAT_NORMALMAP_TRIPLANAR
3
3
 
4
- vec3 clearcoatNormal = normalize(normalMatrix * transpose(mat3(texture3DMatrix)) * texture2DTriplanarNormal( clearcoatNormalMap, clearcoatNormalMapTransform, clearcoatNormalScale, normalize(mat3(texture3DMatrix) * vModelNormal.xyz), triplanarCoords, triplanarWeights ));
4
+ clearcoatNormal = normalize(normalMatrix * transpose(mat3(texture3DMatrix)) * texture2DTriplanarNormal( clearcoatNormalMap, clearcoatNormalMapTransform, clearcoatNormalScale, normalize(mat3(texture3DMatrix) * vModelNormal.xyz), triplanarCoords, triplanarWeights ));
5
5
 
6
6
  #ifdef FLIP_SIDED
7
7
 
@@ -1,7 +1,7 @@
1
1
  export default /* glsl */`
2
2
  #ifdef PREMULTIPLIED_ALPHA
3
3
 
4
- // Get get normal blending with premultipled, use with CustomBlending, OneFactor, OneMinusSrcAlphaFactor, AddEquation.
4
+ // Get normal blending with premultipled, use with CustomBlending, OneFactor, OneMinusSrcAlphaFactor, AddEquation.
5
5
  gl_FragColor.rgb *= gl_FragColor.a;
6
6
 
7
7
  #endif
@@ -23,7 +23,7 @@ void main() {
23
23
 
24
24
  #ifdef DECODE_VIDEO_TEXTURE
25
25
 
26
- // use inline sRGB decode until browsers properly support SRGB8_APLHA8 with video textures
26
+ // use inline sRGB decode until browsers properly support SRGB8_ALPHA8 with video textures
27
27
 
28
28
  texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );
29
29
 
@@ -21,6 +21,10 @@ function WebGLAttributes( gl ) {
21
21
 
22
22
  type = gl.FLOAT;
23
23
 
24
+ } else if ( typeof Float16Array !== 'undefined' && array instanceof Float16Array ) {
25
+
26
+ type = gl.HALF_FLOAT;
27
+
24
28
  } else if ( array instanceof Uint16Array ) {
25
29
 
26
30
  if ( attribute.isFloat16BufferAttribute ) {
@@ -310,7 +310,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
310
310
  useFog: material.fog === true,
311
311
  fogExp2: ( !! fog && fog.isFogExp2 ),
312
312
 
313
- flatShading: material.flatShading === true,
313
+ flatShading: ( material.flatShading === true && material.wireframe === false ),
314
314
 
315
315
  sizeAttenuation: material.sizeAttenuation === true,
316
316
  logarithmicDepthBuffer: logarithmicDepthBuffer,
@@ -530,8 +530,10 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
530
530
  _programLayers.enable( 20 );
531
531
  if ( parameters.batchingColor )
532
532
  _programLayers.enable( 21 );
533
- if ( parameters.batchingMatrix )
533
+ if ( parameters.gradientMap )
534
534
  _programLayers.enable( 22 );
535
+ if ( parameters.batchingMatrix )
536
+ _programLayers.enable( 23 );
535
537
 
536
538
  array.push( _programLayers.mask );
537
539
  _programLayers.disableAll();