@plastic-software/three 0.174.0 → 0.175.1

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 (567) hide show
  1. package/build/three.cjs +10744 -1476
  2. package/build/three.core.js +9633 -1096
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +918 -189
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +4 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2658 -1697
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2654 -1709
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +93 -39
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +171 -48
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +71 -29
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +41 -3
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +35 -0
  94. package/examples/jsm/loaders/DDSLoader.js +24 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +42 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +218 -5
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +86 -18
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +38 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +81 -61
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +79 -2
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +108 -72
  162. package/examples/jsm/misc/VolumeSlice.js +88 -45
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +70 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +131 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +266 -133
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/Transpiler.js +31 -0
  273. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  274. package/examples/jsm/tsl/display/BloomNode.js +1 -1
  275. package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
  276. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  277. package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
  278. package/examples/jsm/tsl/math/Bayer.js +14 -1
  279. package/examples/jsm/tsl/utils/Raymarching.js +4 -2
  280. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  281. package/examples/jsm/utils/CameraUtils.js +10 -7
  282. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  283. package/examples/jsm/utils/GeometryUtils.js +12 -13
  284. package/examples/jsm/utils/LDrawUtils.js +11 -4
  285. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  286. package/examples/jsm/utils/SceneUtils.js +50 -3
  287. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  288. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  289. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  290. package/examples/jsm/utils/SortUtils.js +14 -5
  291. package/examples/jsm/utils/UVsDebug.js +9 -4
  292. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  293. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  294. package/examples/jsm/utils/WorkerPool.js +65 -2
  295. package/examples/jsm/webxr/ARButton.js +18 -0
  296. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  297. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  298. package/examples/jsm/webxr/Text2D.js +11 -0
  299. package/examples/jsm/webxr/VRButton.js +30 -0
  300. package/examples/jsm/webxr/XRButton.js +22 -0
  301. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  302. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  303. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  304. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  305. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  306. package/examples/jsm/webxr/XRPlanes.js +17 -0
  307. package/package.json +1 -1
  308. package/src/Three.TSL.js +3 -1
  309. package/src/animation/AnimationAction.js +262 -30
  310. package/src/animation/AnimationClip.js +141 -2
  311. package/src/animation/AnimationMixer.js +99 -15
  312. package/src/animation/AnimationObjectGroup.js +41 -18
  313. package/src/animation/AnimationUtils.js +168 -18
  314. package/src/animation/KeyframeTrack.js +144 -10
  315. package/src/animation/PropertyBinding.js +77 -3
  316. package/src/animation/PropertyMixer.js +72 -5
  317. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  318. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  319. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  320. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  321. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  322. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  323. package/src/audio/AudioAnalyser.js +1 -1
  324. package/src/audio/AudioListener.js +2 -2
  325. package/src/audio/PositionalAudio.js +5 -5
  326. package/src/constants.js +1432 -5
  327. package/src/core/BufferAttribute.js +413 -3
  328. package/src/core/BufferGeometry.js +337 -1
  329. package/src/core/Clock.js +60 -0
  330. package/src/core/GLBufferAttribute.js +99 -0
  331. package/src/core/InstancedBufferAttribute.js +29 -0
  332. package/src/core/InstancedBufferGeometry.js +20 -0
  333. package/src/core/InstancedInterleavedBuffer.js +26 -0
  334. package/src/core/InterleavedBuffer.js +137 -3
  335. package/src/core/InterleavedBufferAttribute.js +197 -0
  336. package/src/core/Layers.js +71 -10
  337. package/src/core/Object3D.js +23 -0
  338. package/src/core/Raycaster.js +134 -1
  339. package/src/core/RenderTarget.js +166 -7
  340. package/src/core/RenderTarget3D.js +25 -0
  341. package/src/core/RenderTargetArray.js +18 -0
  342. package/src/core/Uniform.js +29 -0
  343. package/src/core/UniformsGroup.js +84 -2
  344. package/src/extras/Controls.js +16 -1
  345. package/src/extras/Earcut.js +3 -781
  346. package/src/extras/ImageUtils.js +3 -2
  347. package/src/extras/PMREMGenerator.js +22 -17
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/extras/core/Path.js +1 -1
  350. package/src/extras/lib/earcut.js +685 -0
  351. package/src/geometries/ConeGeometry.js +2 -2
  352. package/src/geometries/CylinderGeometry.js +2 -2
  353. package/src/geometries/ExtrudeGeometry.js +71 -39
  354. package/src/geometries/LatheGeometry.js +1 -1
  355. package/src/lights/LightShadow.js +1 -1
  356. package/src/lights/webgpu/IESSpotLight.js +1 -1
  357. package/src/loaders/AnimationLoader.js +31 -0
  358. package/src/loaders/AudioLoader.js +31 -0
  359. package/src/loaders/BufferGeometryLoader.js +34 -0
  360. package/src/loaders/Cache.js +45 -0
  361. package/src/loaders/CompressedTextureLoader.js +36 -3
  362. package/src/loaders/CubeTextureLoader.js +45 -0
  363. package/src/loaders/DataTextureLoader.js +44 -3
  364. package/src/loaders/FileLoader.js +57 -1
  365. package/src/loaders/ImageBitmapLoader.js +57 -0
  366. package/src/loaders/ImageLoader.js +30 -0
  367. package/src/loaders/Loader.js +4 -6
  368. package/src/loaders/LoaderUtils.js +18 -36
  369. package/src/loaders/LoadingManager.js +142 -0
  370. package/src/loaders/MaterialLoader.js +57 -0
  371. package/src/loaders/ObjectLoader.js +58 -1
  372. package/src/loaders/TextureLoader.js +33 -0
  373. package/src/loaders/nodes/NodeLoader.js +6 -2
  374. package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
  375. package/src/loaders/nodes/NodeObjectLoader.js +3 -3
  376. package/src/materials/LineBasicMaterial.js +74 -1
  377. package/src/materials/LineDashedMaterial.js +52 -0
  378. package/src/materials/Material.js +18 -3
  379. package/src/materials/MeshBasicMaterial.js +165 -0
  380. package/src/materials/MeshDepthMaterial.js +93 -0
  381. package/src/materials/MeshDistanceMaterial.js +76 -0
  382. package/src/materials/MeshLambertMaterial.js +273 -0
  383. package/src/materials/MeshMatcapMaterial.js +142 -0
  384. package/src/materials/MeshNormalMaterial.js +113 -0
  385. package/src/materials/MeshPhongMaterial.js +288 -0
  386. package/src/materials/MeshPhysicalMaterial.js +292 -1
  387. package/src/materials/MeshStandardMaterial.js +297 -0
  388. package/src/materials/MeshToonMaterial.js +218 -0
  389. package/src/materials/PointsMaterial.js +89 -0
  390. package/src/materials/RawShaderMaterial.js +25 -0
  391. package/src/materials/ShaderMaterial.js +215 -6
  392. package/src/materials/ShadowMaterial.js +54 -0
  393. package/src/materials/SpriteMaterial.js +82 -0
  394. package/src/materials/nodes/Line2NodeMaterial.js +1 -1
  395. package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
  396. package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
  397. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  398. package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
  399. package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
  400. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  401. package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
  402. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
  403. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  404. package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
  405. package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
  406. package/src/materials/nodes/NodeMaterial.js +7 -3
  407. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  408. package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
  409. package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
  410. package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
  411. package/src/math/Color.js +1 -1
  412. package/src/math/MathUtils.js +223 -0
  413. package/src/nodes/Nodes.js +1 -0
  414. package/src/nodes/accessors/BatchNode.js +8 -8
  415. package/src/nodes/accessors/BuiltinNode.js +1 -1
  416. package/src/nodes/accessors/CubeTextureNode.js +1 -1
  417. package/src/nodes/accessors/InstanceNode.js +5 -5
  418. package/src/nodes/accessors/InstancedMeshNode.js +1 -1
  419. package/src/nodes/accessors/MorphNode.js +27 -23
  420. package/src/nodes/accessors/Normal.js +1 -1
  421. package/src/nodes/accessors/Object3DNode.js +12 -12
  422. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  423. package/src/nodes/accessors/ReferenceNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +46 -37
  425. package/src/nodes/accessors/StorageBufferNode.js +1 -1
  426. package/src/nodes/accessors/StorageTextureNode.js +3 -3
  427. package/src/nodes/accessors/Texture3DNode.js +1 -1
  428. package/src/nodes/accessors/TextureNode.js +25 -5
  429. package/src/nodes/accessors/TextureSizeNode.js +1 -1
  430. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  431. package/src/nodes/code/CodeNode.js +4 -4
  432. package/src/nodes/code/ExpressionNode.js +4 -4
  433. package/src/nodes/code/FunctionCallNode.js +23 -3
  434. package/src/nodes/code/ScriptableNode.js +4 -4
  435. package/src/nodes/code/ScriptableValueNode.js +2 -2
  436. package/src/nodes/core/AssignNode.js +1 -1
  437. package/src/nodes/core/AttributeNode.js +1 -1
  438. package/src/nodes/core/BypassNode.js +1 -1
  439. package/src/nodes/core/CacheNode.js +1 -1
  440. package/src/nodes/core/ContextNode.js +1 -1
  441. package/src/nodes/core/InputNode.js +2 -2
  442. package/src/nodes/core/Node.js +14 -2
  443. package/src/nodes/core/NodeBuilder.js +86 -14
  444. package/src/nodes/core/StackNode.js +5 -5
  445. package/src/nodes/core/StructNode.js +1 -1
  446. package/src/nodes/core/StructTypeNode.js +2 -2
  447. package/src/nodes/core/VarNode.js +2 -8
  448. package/src/nodes/core/VaryingNode.js +3 -3
  449. package/src/nodes/display/BlendModes.js +4 -4
  450. package/src/nodes/display/BumpMapNode.js +1 -1
  451. package/src/nodes/display/NormalMapNode.js +1 -1
  452. package/src/nodes/display/PosterizeNode.js +1 -1
  453. package/src/nodes/display/ScreenNode.js +3 -3
  454. package/src/nodes/display/ViewportDepthNode.js +2 -2
  455. package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
  456. package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
  457. package/src/nodes/display/ViewportTextureNode.js +4 -4
  458. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  459. package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
  460. package/src/nodes/geometry/RangeNode.js +1 -1
  461. package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
  462. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  463. package/src/nodes/gpgpu/ComputeNode.js +30 -2
  464. package/src/nodes/lighting/AnalyticLightNode.js +9 -1
  465. package/src/nodes/lighting/LightsNode.js +3 -3
  466. package/src/nodes/lighting/ShadowNode.js +1 -1
  467. package/src/nodes/math/ConditionalNode.js +20 -3
  468. package/src/nodes/math/MathNode.js +83 -78
  469. package/src/nodes/math/OperatorNode.js +171 -82
  470. package/src/nodes/pmrem/PMREMNode.js +4 -4
  471. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  472. package/src/nodes/tsl/TSLBase.js +2 -1
  473. package/src/nodes/tsl/TSLCore.js +115 -12
  474. package/src/nodes/utils/ArrayElementNode.js +3 -1
  475. package/src/nodes/utils/CubeMapNode.js +3 -3
  476. package/src/nodes/utils/DebugNode.js +70 -0
  477. package/src/nodes/utils/EquirectUVNode.js +2 -2
  478. package/src/nodes/utils/JoinNode.js +27 -2
  479. package/src/nodes/utils/LoopNode.js +58 -28
  480. package/src/nodes/utils/MaxMipLevelNode.js +1 -1
  481. package/src/nodes/utils/ReflectorNode.js +2 -2
  482. package/src/nodes/utils/RemapNode.js +6 -6
  483. package/src/nodes/utils/RotateNode.js +1 -1
  484. package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
  485. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  486. package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
  487. package/src/objects/BatchedMesh.js +4 -4
  488. package/src/objects/InstancedMesh.js +2 -2
  489. package/src/objects/LOD.js +1 -1
  490. package/src/objects/Skeleton.js +1 -1
  491. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  492. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  493. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  494. package/src/renderers/WebGLRenderTarget.js +19 -0
  495. package/src/renderers/WebGLRenderer.js +617 -79
  496. package/src/renderers/common/Animation.js +2 -2
  497. package/src/renderers/common/Attributes.js +2 -2
  498. package/src/renderers/common/Backend.js +12 -3
  499. package/src/renderers/common/Background.js +1 -0
  500. package/src/renderers/common/Color4.js +1 -1
  501. package/src/renderers/common/CubeRenderTarget.js +13 -0
  502. package/src/renderers/common/PostProcessing.js +2 -0
  503. package/src/renderers/common/QuadMesh.js +2 -0
  504. package/src/renderers/common/RenderList.js +2 -2
  505. package/src/renderers/common/RenderObject.js +1 -1
  506. package/src/renderers/common/RenderObjects.js +2 -2
  507. package/src/renderers/common/Renderer.js +52 -31
  508. package/src/renderers/common/XRManager.js +333 -10
  509. package/src/renderers/common/extras/PMREMGenerator.js +6 -0
  510. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  511. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +10 -1
  512. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
  513. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
  514. package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
  515. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
  516. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
  517. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
  518. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
  519. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
  520. package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
  521. package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
  522. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
  523. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
  524. package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
  525. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
  526. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
  527. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
  528. package/src/renderers/shaders/ShaderChunk.js +2 -0
  529. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
  530. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
  531. package/src/renderers/shaders/UniformsLib.js +6 -5
  532. package/src/renderers/shaders/UniformsUtils.js +1 -3
  533. package/src/renderers/webgl/WebGLBackground.js +4 -2
  534. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  535. package/src/renderers/webgl/WebGLProgram.js +25 -5
  536. package/src/renderers/webgl/WebGLPrograms.js +21 -7
  537. package/src/renderers/webgl/WebGLState.js +9 -9
  538. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  539. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  540. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  541. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  542. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  543. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  544. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  545. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  546. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  547. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  548. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  549. package/src/renderers/webxr/WebXRController.js +87 -2
  550. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  551. package/src/renderers/webxr/WebXRManager.js +173 -1
  552. package/src/scenes/Scene.js +2 -1
  553. package/src/textures/CanvasTexture.js +28 -0
  554. package/src/textures/CompressedArrayTexture.js +57 -0
  555. package/src/textures/CompressedCubeTexture.js +29 -0
  556. package/src/textures/CompressedTexture.js +64 -6
  557. package/src/textures/CubeTexture.js +52 -4
  558. package/src/textures/Data3DTexture.js +77 -0
  559. package/src/textures/DataArrayTexture.js +93 -0
  560. package/src/textures/DataTexture.js +65 -0
  561. package/src/textures/DepthTexture.js +59 -9
  562. package/src/textures/FramebufferTexture.js +62 -0
  563. package/src/textures/Source.js +69 -0
  564. package/src/textures/Texture.js +5 -5
  565. package/src/textures/VideoFrameTexture.js +43 -6
  566. package/src/textures/VideoTexture.js +49 -4
  567. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -1,14 +1,19 @@
1
1
  import { ArrayCamera } from '../../cameras/ArrayCamera.js';
2
2
  import { EventDispatcher } from '../../core/EventDispatcher.js';
3
3
  import { PerspectiveCamera } from '../../cameras/PerspectiveCamera.js';
4
+ import { Quaternion } from '../../math/Quaternion.js';
4
5
  import { RAD2DEG } from '../../math/MathUtils.js';
5
6
  import { Vector2 } from '../../math/Vector2.js';
6
7
  import { Vector3 } from '../../math/Vector3.js';
7
8
  import { Vector4 } from '../../math/Vector4.js';
8
9
  import { WebXRController } from '../webxr/WebXRController.js';
9
- import { DepthFormat, DepthStencilFormat, RGBAFormat, UnsignedByteType, UnsignedInt248Type, UnsignedIntType } from '../../constants.js';
10
+ import { AddEquation, BackSide, CustomBlending, DepthFormat, DepthStencilFormat, FrontSide, RGBAFormat, UnsignedByteType, UnsignedInt248Type, UnsignedIntType, ZeroFactor } from '../../constants.js';
10
11
  import { DepthTexture } from '../../textures/DepthTexture.js';
11
12
  import { XRRenderTarget } from './XRRenderTarget.js';
13
+ import { CylinderGeometry } from '../../geometries/CylinderGeometry.js';
14
+ import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
15
+ import { MeshBasicMaterial } from '../../materials/MeshBasicMaterial.js';
16
+ import { Mesh } from '../../objects/Mesh.js';
12
17
 
13
18
  const _cameraLPos = /*@__PURE__*/ new Vector3();
14
19
  const _cameraRPos = /*@__PURE__*/ new Vector3();
@@ -146,6 +151,40 @@ class XRManager extends EventDispatcher {
146
151
  */
147
152
  this._xrRenderTarget = null;
148
153
 
154
+ /**
155
+ * An array holding all the non-projection layers
156
+ *
157
+ * @private
158
+ * @type {Array<Object>}
159
+ * @default []
160
+ */
161
+ this._layers = [];
162
+
163
+ /**
164
+ * Whether the device has support for all layer types.
165
+ *
166
+ * @type {boolean}
167
+ * @default false
168
+ */
169
+ this._supportsLayers = false;
170
+
171
+ /**
172
+ * Helper function to create native WebXR Layer.
173
+ *
174
+ * @private
175
+ * @type {Function}
176
+ */
177
+ this._createXRLayer = createXRLayer.bind( this );
178
+
179
+ /**
180
+ * The current WebGL context.
181
+ *
182
+ * @private
183
+ * @type {?WebGL2RenderingContext}
184
+ * @default null
185
+ */
186
+ this._gl = null;
187
+
149
188
  /**
150
189
  * The current animation context.
151
190
  *
@@ -229,7 +268,7 @@ class XRManager extends EventDispatcher {
229
268
  * The current XR reference space type.
230
269
  *
231
270
  * @private
232
- * @type {string}
271
+ * @type {XRReferenceSpaceType}
233
272
  * @default 'local-floor'
234
273
  */
235
274
  this._referenceSpaceType = 'local-floor';
@@ -439,7 +478,7 @@ class XRManager extends EventDispatcher {
439
478
  /**
440
479
  * Returns the reference space type.
441
480
  *
442
- * @return {string} The reference space type.
481
+ * @return {XRReferenceSpaceType} The reference space type.
443
482
  */
444
483
  getReferenceSpaceType() {
445
484
 
@@ -452,7 +491,7 @@ class XRManager extends EventDispatcher {
452
491
  *
453
492
  * This method can not be used during a XR session.
454
493
  *
455
- * @param {string} type - The reference space type.
494
+ * @param {XRReferenceSpaceType} type - The reference space type.
456
495
  */
457
496
  setReferenceSpaceType( type ) {
458
497
 
@@ -502,7 +541,7 @@ class XRManager extends EventDispatcher {
502
541
  /**
503
542
  * Returns the environment blend mode from the current XR session.
504
543
  *
505
- * @return {?('opaque'|'additive'|'alpha-blend')} The environment blend mode. Returns `null` when used outside of a XR session.
544
+ * @return {'opaque'|'additive'|'alpha-blend'|undefined} The environment blend mode. Returns `undefined` when used outside of a XR session.
506
545
  */
507
546
  getEnvironmentBlendMode() {
508
547
 
@@ -525,6 +564,190 @@ class XRManager extends EventDispatcher {
525
564
 
526
565
  }
527
566
 
567
+ createQuadLayer( width, height, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = [] ) {
568
+
569
+ const geometry = new PlaneGeometry( width, height );
570
+ const renderTarget = new XRRenderTarget(
571
+ pixelwidth,
572
+ pixelheight,
573
+ {
574
+ format: RGBAFormat,
575
+ type: UnsignedByteType,
576
+ depthTexture: new DepthTexture(
577
+ pixelwidth,
578
+ pixelheight,
579
+ attributes.stencil ? UnsignedInt248Type : UnsignedIntType,
580
+ undefined,
581
+ undefined,
582
+ undefined,
583
+ undefined,
584
+ undefined,
585
+ undefined,
586
+ attributes.stencil ? DepthStencilFormat : DepthFormat
587
+ ),
588
+ stencilBuffer: attributes.stencil,
589
+ resolveDepthBuffer: false,
590
+ resolveStencilBuffer: false
591
+ } );
592
+
593
+ const material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );
594
+ material.map = renderTarget.texture;
595
+ material.map.offset.y = 1;
596
+ material.map.repeat.y = - 1;
597
+ const plane = new Mesh( geometry, material );
598
+ plane.position.copy( translation );
599
+ plane.quaternion.copy( quaternion );
600
+
601
+ const layer = {
602
+ type: 'quad',
603
+ width: width,
604
+ height: height,
605
+ translation: translation,
606
+ quaternion: quaternion,
607
+ pixelwidth: pixelwidth,
608
+ pixelheight: pixelheight,
609
+ plane: plane,
610
+ material: material,
611
+ rendercall: rendercall,
612
+ renderTarget: renderTarget };
613
+
614
+ this._layers.push( layer );
615
+
616
+ if ( this._session !== null ) {
617
+
618
+ layer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );
619
+ layer.plane.material.blending = CustomBlending;
620
+ layer.plane.material.blendEquation = AddEquation;
621
+ layer.plane.material.blendSrc = ZeroFactor;
622
+ layer.plane.material.blendDst = ZeroFactor;
623
+
624
+ layer.xrlayer = this._createXRLayer( layer );
625
+
626
+ const xrlayers = this._session.renderState.layers;
627
+ xrlayers.unshift( layer.xrlayer );
628
+ this._session.updateRenderState( { layers: xrlayers } );
629
+
630
+ } else {
631
+
632
+ renderTarget.isXRRenderTarget = false;
633
+
634
+ }
635
+
636
+ return plane;
637
+
638
+ }
639
+
640
+ createCylinderLayer( radius, centralAngle, aspectratio, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = [] ) {
641
+
642
+ const geometry = new CylinderGeometry( radius, radius, radius * centralAngle / aspectratio, 64, 64, true, Math.PI - centralAngle / 2, centralAngle );
643
+ const renderTarget = new XRRenderTarget(
644
+ pixelwidth,
645
+ pixelheight,
646
+ {
647
+ format: RGBAFormat,
648
+ type: UnsignedByteType,
649
+ depthTexture: new DepthTexture(
650
+ pixelwidth,
651
+ pixelheight,
652
+ attributes.stencil ? UnsignedInt248Type : UnsignedIntType,
653
+ undefined,
654
+ undefined,
655
+ undefined,
656
+ undefined,
657
+ undefined,
658
+ undefined,
659
+ attributes.stencil ? DepthStencilFormat : DepthFormat
660
+ ),
661
+ stencilBuffer: attributes.stencil,
662
+ resolveDepthBuffer: false,
663
+ resolveStencilBuffer: false
664
+ } );
665
+
666
+ const material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );
667
+ material.map = renderTarget.texture;
668
+ material.map.offset.y = 1;
669
+ material.map.repeat.y = - 1;
670
+ const plane = new Mesh( geometry, material );
671
+ plane.position.copy( translation );
672
+ plane.quaternion.copy( quaternion );
673
+
674
+ const layer = {
675
+ type: 'cylinder',
676
+ radius: radius,
677
+ centralAngle: centralAngle,
678
+ aspectratio: aspectratio,
679
+ translation: translation,
680
+ quaternion: quaternion,
681
+ pixelwidth: pixelwidth,
682
+ pixelheight: pixelheight,
683
+ plane: plane,
684
+ material: material,
685
+ rendercall: rendercall,
686
+ renderTarget: renderTarget };
687
+
688
+ this._layers.push( layer );
689
+
690
+ if ( this._session !== null ) {
691
+
692
+ layer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );
693
+ layer.plane.material.blending = CustomBlending;
694
+ layer.plane.material.blendEquation = AddEquation;
695
+ layer.plane.material.blendSrc = ZeroFactor;
696
+ layer.plane.material.blendDst = ZeroFactor;
697
+
698
+ layer.xrlayer = this._createXRLayer( layer );
699
+
700
+ const xrlayers = this._session.renderState.layers;
701
+ xrlayers.unshift( layer.xrlayer );
702
+ this._session.updateRenderState( { layers: xrlayers } );
703
+
704
+ } else {
705
+
706
+ renderTarget.isXRRenderTarget = false;
707
+
708
+ }
709
+
710
+ return plane;
711
+
712
+ }
713
+
714
+ renderLayers( ) {
715
+
716
+ const translationObject = new Vector3();
717
+ const quaternionObject = new Quaternion();
718
+
719
+ const wasPresenting = this.isPresenting;
720
+ this.isPresenting = false;
721
+
722
+ for ( const layer of this._layers ) {
723
+
724
+ layer.renderTarget.isXRRenderTarget = this._session !== null;
725
+ layer.renderTarget.hasExternalTextures = layer.renderTarget.isXRRenderTarget;
726
+ layer.renderTarget.autoAllocateDepthBuffer = ! layer.renderTarget.isXRRenderTarget;
727
+
728
+ if ( layer.renderTarget.isXRRenderTarget && this._supportsLayers ) {
729
+
730
+ layer.xrlayer.transform = new XRRigidTransform( layer.plane.getWorldPosition( translationObject ), layer.plane.getWorldQuaternion( quaternionObject ) );
731
+
732
+ const glSubImage = this._glBinding.getSubImage( layer.xrlayer, this._xrFrame );
733
+ this._renderer.backend.setXRRenderTargetTextures(
734
+ layer.renderTarget,
735
+ glSubImage.colorTexture,
736
+ glSubImage.depthStencilTexture );
737
+
738
+ }
739
+
740
+ this._renderer.setRenderTarget( layer.renderTarget );
741
+ layer.rendercall();
742
+
743
+ }
744
+
745
+ this.isPresenting = wasPresenting;
746
+ this._renderer.setRenderTarget( null );
747
+
748
+ }
749
+
750
+
528
751
  /**
529
752
  * Returns the current XR session.
530
753
  *
@@ -550,7 +773,9 @@ class XRManager extends EventDispatcher {
550
773
  const renderer = this._renderer;
551
774
  const backend = renderer.backend;
552
775
 
553
- const gl = renderer.getContext();
776
+ this._gl = renderer.getContext();
777
+ const gl = this._gl;
778
+ const attributes = gl.getContextAttributes();
554
779
 
555
780
  this._session = session;
556
781
 
@@ -602,12 +827,11 @@ class XRManager extends EventDispatcher {
602
827
 
603
828
  const glBinding = new XRWebGLBinding( session, gl );
604
829
  const glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
830
+ const layersArray = [ glProjLayer ];
605
831
 
606
832
  this._glBinding = glBinding;
607
833
  this._glProjLayer = glProjLayer;
608
834
 
609
- session.updateRenderState( { layers: [ glProjLayer ] } );
610
-
611
835
  renderer.setPixelRatio( 1 );
612
836
  renderer.setSize( glProjLayer.textureWidth, glProjLayer.textureHeight, false );
613
837
 
@@ -620,12 +844,39 @@ class XRManager extends EventDispatcher {
620
844
  colorSpace: renderer.outputColorSpace,
621
845
  depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),
622
846
  stencilBuffer: renderer.stencil,
847
+ samples: attributes.antialias ? 4 : 0,
623
848
  resolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false ),
624
849
  resolveStencilBuffer: ( glProjLayer.ignoreDepthValues === false ),
625
850
  } );
626
851
 
627
852
  this._xrRenderTarget.hasExternalTextures = true;
628
853
 
854
+ this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
855
+
856
+ this._supportsLayers = session.enabledFeatures.includes( 'layers' );
857
+
858
+ if ( this._supportsLayers ) {
859
+
860
+ // switch layers to native
861
+ for ( const layer of this._layers ) {
862
+
863
+ // change material so it "punches" out a hole to show the XR Layer.
864
+ layer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: layer.type === 'cylinder' ? BackSide : FrontSide } );
865
+ layer.plane.material.blending = CustomBlending;
866
+ layer.plane.material.blendEquation = AddEquation;
867
+ layer.plane.material.blendSrc = ZeroFactor;
868
+ layer.plane.material.blendDst = ZeroFactor;
869
+
870
+ layer.xrlayer = this._createXRLayer( layer );
871
+
872
+ layersArray.unshift( layer.xrlayer );
873
+
874
+ }
875
+
876
+ }
877
+
878
+ session.updateRenderState( { layers: layersArray } );
879
+
629
880
  } else {
630
881
 
631
882
  // fallback to XRWebGLLayer
@@ -665,8 +916,6 @@ class XRManager extends EventDispatcher {
665
916
 
666
917
  this.setFoveation( this.getFoveation() );
667
918
 
668
- this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
669
-
670
919
  renderer._animation.setAnimationLoop( this._onAnimationFrame );
671
920
  renderer._animation.setContext( session );
672
921
  renderer._animation.start();
@@ -965,10 +1214,50 @@ function onSessionEnd() {
965
1214
 
966
1215
  renderer.backend.setXRTarget( null );
967
1216
  renderer.setOutputRenderTarget( null );
1217
+ renderer.setRenderTarget( null );
968
1218
 
969
1219
  this._session = null;
970
1220
  this._xrRenderTarget = null;
971
1221
 
1222
+ // switch layers back to emulated
1223
+ if ( this._supportsLayers === true ) {
1224
+
1225
+ for ( const layer of this._layers ) {
1226
+
1227
+ // Recreate layer render target to reset state
1228
+ layer.renderTarget = new XRRenderTarget(
1229
+ layer.pixelwidth,
1230
+ layer.pixelheight,
1231
+ {
1232
+ format: RGBAFormat,
1233
+ type: UnsignedByteType,
1234
+ depthTexture: new DepthTexture(
1235
+ layer.pixelwidth,
1236
+ layer.pixelheight,
1237
+ layer.stencilBuffer ? UnsignedInt248Type : UnsignedIntType,
1238
+ undefined,
1239
+ undefined,
1240
+ undefined,
1241
+ undefined,
1242
+ undefined,
1243
+ undefined,
1244
+ layer.stencilBuffer ? DepthStencilFormat : DepthFormat
1245
+ ),
1246
+ stencilBuffer: layer.stencilBuffer,
1247
+ resolveDepthBuffer: false,
1248
+ resolveStencilBuffer: false
1249
+ } );
1250
+
1251
+ layer.renderTarget.isXRRenderTarget = false;
1252
+
1253
+ layer.plane.material = layer.material;
1254
+ layer.material.map = layer.renderTarget.texture;
1255
+ delete layer.xrlayer;
1256
+
1257
+ }
1258
+
1259
+ }
1260
+
972
1261
  //
973
1262
 
974
1263
  this.isPresenting = false;
@@ -1055,6 +1344,40 @@ function onInputSourcesChange( event ) {
1055
1344
 
1056
1345
  }
1057
1346
 
1347
+ // Creation method for native WebXR layers
1348
+ function createXRLayer( layer ) {
1349
+
1350
+ if ( layer.type === 'quad' ) {
1351
+
1352
+ return this._glBinding.createQuadLayer( {
1353
+ transform: new XRRigidTransform( layer.translation, layer.quaternion ),
1354
+ depthFormat: this._gl.DEPTH_COMPONENT,
1355
+ width: layer.width / 2,
1356
+ height: layer.height / 2,
1357
+ space: this._referenceSpace,
1358
+ viewPixelWidth: layer.pixelwidth,
1359
+ viewPixelHeight: layer.pixelheight
1360
+ } );
1361
+
1362
+ } else {
1363
+
1364
+ return this._glBinding.createCylinderLayer( {
1365
+ transform: new XRRigidTransform( layer.translation, layer.quaternion ),
1366
+ depthFormat: this._gl.DEPTH_COMPONENT,
1367
+ radius: layer.radius,
1368
+ centralAngle: layer.centralAngle,
1369
+ aspectRatio: layer.aspectRatio,
1370
+ space: this._referenceSpace,
1371
+ viewPixelWidth: layer.pixelwidth,
1372
+ viewPixelHeight: layer.pixelheight
1373
+ } );
1374
+
1375
+ }
1376
+
1377
+ }
1378
+
1379
+ // Animation Loop
1380
+
1058
1381
  function onAnimationFrame( time, frame ) {
1059
1382
 
1060
1383
  if ( frame === undefined ) return;
@@ -100,6 +100,11 @@ const _outputDirection = /*@__PURE__*/ vec3( _direction.x, _direction.y, _direct
100
100
  */
101
101
  class PMREMGenerator {
102
102
 
103
+ /**
104
+ * Constructs a new PMREM generator.
105
+ *
106
+ * @param {Renderer} renderer - The renderer.
107
+ */
103
108
  constructor( renderer ) {
104
109
 
105
110
  this._renderer = renderer;
@@ -641,6 +646,7 @@ class PMREMGenerator {
641
646
  * the poles) to approximate the orthogonally-separable blur. It is least
642
647
  * accurate at the poles, but still does a decent job.
643
648
  *
649
+ * @private
644
650
  * @param {RenderTarget} cubeUVRenderTarget - The cubemap render target.
645
651
  * @param {number} lodIn - The input level-of-detail.
646
652
  * @param {number} lodOut - The output level-of-detail.
@@ -14,9 +14,9 @@ class NodeBuilderState {
14
14
  /**
15
15
  * Constructs a new node builder state.
16
16
  *
17
- * @param {?string} vertexShader - The native vertex shader code.
18
- * @param {?string} fragmentShader - The native fragment shader code.
19
- * @param {?string} computeShader - The native compute shader code.
17
+ * @param {string} vertexShader - The native vertex shader code.
18
+ * @param {string} fragmentShader - The native fragment shader code.
19
+ * @param {string} computeShader - The native compute shader code.
20
20
  * @param {Array<NodeAttribute>} nodeAttributes - An array of node attributes.
21
21
  * @param {Array<BindGroup>} bindings - An array of bind groups.
22
22
  * @param {Array<Node>} updateNodes - An array of nodes that implement their `update()` method.
@@ -1,7 +1,16 @@
1
1
  export default /* glsl */`
2
2
  #ifdef USE_ALPHAMAP
3
+ #ifdef USE_ALPHAMAP_TRIPLANAR
3
4
 
4
- diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;
5
+ diffuseColor.a *= texture2DTriplanar( alphaMap, alphaMapTransform, triplanarCoords, triplanarWeights ).g;
5
6
 
7
+ #else
8
+ #if defined( USE_ALPHAMAP_CYLINDRICAL )
9
+ vec2 vAlphaMapUv = ( alphaMapTransform * vec3( positionBasedUv, 1 ) ).xy;
10
+ #endif
11
+
12
+ diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;
13
+
14
+ #endif
6
15
  #endif
7
16
  `;
@@ -2,7 +2,14 @@ export default /* glsl */`
2
2
  #ifdef USE_AOMAP
3
3
 
4
4
  // reads channel R, compatible with a combined OcclusionRoughnessMetallic (RGB) texture
5
- float ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;
5
+ #ifdef USE_AOMAP_TRIPLANAR
6
+ float ambientOcclusion = ( texture2DTriplanar( aoMap, aoMapTransform, triplanarCoords, triplanarWeights ).r - 1.0 ) * aoMapIntensity + 1.0;
7
+ #else
8
+ #if defined( USE_AOMAP_CYLINDRICAL )
9
+ vec2 vAoMapUv = ( aoMapTransform * vec3( positionBasedUv, 1 ) ).xy;
10
+ #endif
11
+ float ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;
12
+ #endif
6
13
 
7
14
  reflectedLight.indirectDiffuse *= ambientOcclusion;
8
15
 
@@ -1,5 +1,9 @@
1
1
  export default /* glsl */`
2
- #ifdef USE_CLEARCOAT_NORMALMAP
2
+ #ifdef USE_CLEARCOAT_NORMALMAP_TRIPLANAR
3
+
4
+ normal = normalize(normalMatrix * transpose(mat3(texture3DMatrix)) * texture2DTriplanarNormal( clearcoatNormalMap, clearcoatNormalMapTransform, clearcoatNormalScale, normalize(mat3(texture3DMatrix) * vModelNormal.xyz), triplanarCoords, triplanarWeights ));
5
+
6
+ #elif defined( USE_CLEARCOAT_NORMALMAP )
3
7
 
4
8
  vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;
5
9
  clearcoatMapN.xy *= clearcoatNormalScale;
@@ -134,4 +134,86 @@ float F_Schlick( const in float f0, const in float f90, const in float dotVH ) {
134
134
  return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );
135
135
 
136
136
  } // validated
137
+
138
+ #if defined( USE_MAP_TRIPLANAR ) || \
139
+ defined( USE_ALPHAMAP_TRIPLANAR ) || \
140
+ defined( USE_NORMALMAP_TRIPLANAR ) || \
141
+ defined( USE_ROUGHNESSMAP_TRIPLANAR ) || \
142
+ defined( USE_AOMAP_TRIPLANAR ) || \
143
+ defined( USE_METALNESSMAP_TRIPLANAR ) || \
144
+ defined( USE_CLEARCOAT_NORMALMAP_TRIPLANAR )
145
+
146
+ #define USE_TRIPLANAR
147
+
148
+ #endif
149
+
150
+ #if defined( USE_MAP_TRIPLANAR ) || \
151
+ defined( USE_ALPHAMAP_TRIPLANAR ) || \
152
+ defined( USE_ROUGHNESSMAP_TRIPLANAR ) || \
153
+ defined( USE_AOMAP_TRIPLANAR ) || \
154
+ defined( USE_METALNESSMAP_TRIPLANAR )
155
+
156
+ vec4 texture2DTriplanar( sampler2D map, mat3 uvTransform, vec3 coords, vec3 weights ) {
157
+ return weights.x * texture2D( map, (uvTransform * vec3(coords.zy, 1)).xy ) +
158
+ weights.y * texture2D( map, (uvTransform * vec3(coords.xz, 1)).xy ) +
159
+ weights.z * texture2D( map, (uvTransform * vec3(coords.xy, 1)).xy );
160
+
161
+ }
162
+
163
+ #endif
164
+
165
+ #if defined( USE_NORMALMAP_TRIPLANAR ) || defined( USE_CLEARCOAT_NORMALMAP_TRIPLANAR )
166
+
167
+ vec3 texture2DTriplanarNormal( sampler2D normalMap, mat3 uvTransform, vec2 normalMapScale, vec3 normal, vec3 coords, vec3 weights ) {
168
+ // Whiteout blend
169
+
170
+ // Triplanar uvs
171
+ vec2 uvX = coords.zy; // x facing plane
172
+ vec2 uvY = coords.xz; // y facing plane
173
+ vec2 uvZ = coords.xy; // z facing plane
174
+
175
+ // Tangent space normal maps
176
+ vec3 tnormalX = texture2D( normalMap, (uvTransform * vec3(uvX, 1)).xy ).xyz * 2.0 - 1.0;
177
+ vec3 tnormalY = texture2D( normalMap, (uvTransform * vec3(uvY, 1)).xy ).xyz * 2.0 - 1.0;
178
+ vec3 tnormalZ = texture2D( normalMap, (uvTransform * vec3(uvZ, 1)).xy ).xyz * 2.0 - 1.0;
179
+
180
+ tnormalX.xy *= normalMapScale;
181
+ tnormalY.xy *= normalMapScale;
182
+ tnormalZ.xy *= normalMapScale;
183
+
184
+ // Swizzle world normals into tangent space and apply Whiteout blend
185
+ tnormalX = vec3(
186
+ tnormalX.xy + normal.zy,
187
+ abs(tnormalX.z) * normal.x
188
+ );
189
+ tnormalY = vec3(
190
+ tnormalY.xy + normal.xz,
191
+ abs(tnormalY.z) * normal.y
192
+ );
193
+ tnormalZ = vec3(
194
+ tnormalZ.xy + normal.xy,
195
+ abs(tnormalZ.z) * normal.z
196
+ );
197
+
198
+ // Swizzle tangent normals to match world orientation and triblend
199
+ return normalize(
200
+ tnormalX.zyx * weights.x +
201
+ tnormalY.xzy * weights.y +
202
+ tnormalZ.xyz * weights.z
203
+ );
204
+ }
205
+
206
+ #endif
207
+
208
+ #if defined( USE_MAP_CYLINDRICAL ) || \
209
+ defined( USE_ALPHAMAP_CYLINDRICAL ) || \
210
+ defined( USE_NORMALMAP_CYLINDRICAL ) || \
211
+ defined( USE_ROUGHNESSMAP_CYLINDRICAL ) || \
212
+ defined( USE_AOMAP_CYLINDRICAL ) || \
213
+ defined( USE_METALNESSMAP_CYLINDRICAL ) || \
214
+ defined( USE_CLEARCOAT_NORMALMAP_CYLINDRICAL )
215
+
216
+ #define USE_CYLINDRICAL
217
+
218
+ #endif
137
219
  `;
@@ -5,6 +5,11 @@ vec3 transformedNormal = objectNormal;
5
5
 
6
6
  vec3 transformedTangent = objectTangent;
7
7
 
8
+ #endif
9
+ #if defined( USE_TANGENT_FROM_NORMAL ) || defined( USE_NORMALMAP_TRIPLANAR )
10
+
11
+ mat3 tangentMatrix = mat3(1.0);
12
+
8
13
  #endif
9
14
 
10
15
  #ifdef USE_BATCHING
@@ -20,7 +25,12 @@ vec3 transformedNormal = objectNormal;
20
25
 
21
26
  transformedTangent = bm * transformedTangent;
22
27
 
23
- #endif
28
+ #endif
29
+ #if defined( USE_TANGENT_FROM_NORMAL ) || defined( USE_NORMALMAP_TRIPLANAR )
30
+
31
+ tangentMatrix = bm * tangentMatrix;
32
+
33
+ #endif
24
34
 
25
35
  #endif
26
36
 
@@ -37,7 +47,12 @@ vec3 transformedNormal = objectNormal;
37
47
 
38
48
  transformedTangent = im * transformedTangent;
39
49
 
40
- #endif
50
+ #endif
51
+ #if defined( USE_TANGENT_FROM_NORMAL ) || defined( USE_NORMALMAP_TRIPLANAR )
52
+
53
+ tangentMatrix = im * tangentMatrix;
54
+
55
+ #endif
41
56
 
42
57
  #endif
43
58
 
@@ -59,5 +74,10 @@ transformedNormal = normalMatrix * transformedNormal;
59
74
 
60
75
  #endif
61
76
 
77
+ #endif
78
+ #if defined( USE_TANGENT_FROM_NORMAL ) || defined( USE_NORMALMAP_TRIPLANAR )
79
+
80
+ tangentMatrix = mat3( modelViewMatrix ) * tangentMatrix;
81
+
62
82
  #endif
63
83
  `;
@@ -1,7 +1,18 @@
1
1
  export default /* glsl */`
2
2
  #ifdef USE_MAP
3
3
 
4
- vec4 sampledDiffuseColor = texture2D( map, vMapUv );
4
+ #ifdef USE_MAP_TRIPLANAR
5
+
6
+ vec4 sampledDiffuseColor = texture2DTriplanar( map, mapTransform, triplanarCoords, triplanarWeights );
7
+
8
+ #else
9
+ #if defined( USE_MAP_CYLINDRICAL )
10
+ vec2 vMapUv = ( mapTransform * vec3( positionBasedUv, 1 ) ).xy;
11
+ #endif
12
+
13
+ vec4 sampledDiffuseColor = texture2D( map, vMapUv );
14
+
15
+ #endif
5
16
 
6
17
  #ifdef DECODE_VIDEO_TEXTURE
7
18