@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
@@ -171,6 +171,16 @@ class RenderObject {
171
171
  */
172
172
  this.attributes = null;
173
173
 
174
+ /**
175
+ * An object holding the version of the
176
+ * attributes. The keys are the attribute names
177
+ * and the values are the attribute versions.
178
+ *
179
+ * @type {?Object<string, number>}
180
+ * @default null
181
+ */
182
+ this.attributesId = null;
183
+
174
184
  /**
175
185
  * A reference to a render pipeline the render
176
186
  * object is processed with.
@@ -290,7 +300,7 @@ class RenderObject {
290
300
 
291
301
  /**
292
302
  * An event listener which is executed when `dispose()` is called on
293
- * the render object's material.
303
+ * the material of this render object.
294
304
  *
295
305
  * @method
296
306
  */
@@ -300,7 +310,23 @@ class RenderObject {
300
310
 
301
311
  };
302
312
 
313
+ /**
314
+ * An event listener which is executed when `dispose()` is called on
315
+ * the geometry of this render object.
316
+ *
317
+ * @method
318
+ */
319
+ this.onGeometryDispose = () => {
320
+
321
+ // clear geometry cache attributes
322
+
323
+ this.attributes = null;
324
+ this.attributesId = null;
325
+
326
+ };
327
+
303
328
  this.material.addEventListener( 'dispose', this.onMaterialDispose );
329
+ this.geometry.addEventListener( 'dispose', this.onGeometryDispose );
304
330
 
305
331
  }
306
332
 
@@ -439,6 +465,7 @@ class RenderObject {
439
465
 
440
466
  this.geometry = geometry;
441
467
  this.attributes = null;
468
+ this.attributesId = null;
442
469
 
443
470
  }
444
471
 
@@ -458,9 +485,25 @@ class RenderObject {
458
485
  const attributes = [];
459
486
  const vertexBuffers = new Set();
460
487
 
488
+ const attributesId = {};
489
+
461
490
  for ( const nodeAttribute of nodeAttributes ) {
462
491
 
463
- const attribute = nodeAttribute.node && nodeAttribute.node.attribute ? nodeAttribute.node.attribute : geometry.getAttribute( nodeAttribute.name );
492
+ let attribute;
493
+
494
+ if ( nodeAttribute.node && nodeAttribute.node.attribute ) {
495
+
496
+ // node attribute
497
+ attribute = nodeAttribute.node.attribute;
498
+
499
+ } else {
500
+
501
+ // geometry attribute
502
+ attribute = geometry.getAttribute( nodeAttribute.name );
503
+
504
+ attributesId[ nodeAttribute.name ] = attribute.version;
505
+
506
+ }
464
507
 
465
508
  if ( attribute === undefined ) continue;
466
509
 
@@ -472,6 +515,7 @@ class RenderObject {
472
515
  }
473
516
 
474
517
  this.attributes = attributes;
518
+ this.attributesId = attributesId;
475
519
  this.vertexBuffers = Array.from( vertexBuffers.values() );
476
520
 
477
521
  return attributes;
@@ -509,7 +553,18 @@ class RenderObject {
509
553
 
510
554
  const index = this.getIndex();
511
555
  const hasIndex = ( index !== null );
512
- const instanceCount = geometry.isInstancedBufferGeometry ? geometry.instanceCount : ( object.count > 1 ? object.count : 1 );
556
+
557
+ let instanceCount = 1;
558
+
559
+ if ( geometry.isInstancedBufferGeometry === true ) {
560
+
561
+ instanceCount = geometry.instanceCount;
562
+
563
+ } else if ( object.count !== undefined ) {
564
+
565
+ instanceCount = Math.max( 0, object.count );
566
+
567
+ }
513
568
 
514
569
  if ( instanceCount === 0 ) return null;
515
570
 
@@ -725,7 +780,27 @@ class RenderObject {
725
780
  */
726
781
  get needsGeometryUpdate() {
727
782
 
728
- return this.geometry.id !== this.object.geometry.id;
783
+ if ( this.geometry.id !== this.object.geometry.id ) return true;
784
+
785
+ if ( this.attributes !== null ) {
786
+
787
+ const attributesId = this.attributesId;
788
+
789
+ for ( const name in attributesId ) {
790
+
791
+ const attribute = this.geometry.getAttribute( name );
792
+
793
+ if ( attribute === undefined || attributesId[ name ] !== attribute.id ) {
794
+
795
+ return true;
796
+
797
+ }
798
+
799
+ }
800
+
801
+ }
802
+
803
+ return false;
729
804
 
730
805
  }
731
806
 
@@ -803,6 +878,7 @@ class RenderObject {
803
878
  dispose() {
804
879
 
805
880
  this.material.removeEventListener( 'dispose', this.onMaterialDispose );
881
+ this.geometry.removeEventListener( 'dispose', this.onGeometryDispose );
806
882
 
807
883
  this.onDispose();
808
884
 
@@ -22,16 +22,21 @@ import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
22
22
 
23
23
  import { Scene } from '../../scenes/Scene.js';
24
24
  import { Frustum } from '../../math/Frustum.js';
25
+ import { FrustumArray } from '../../math/FrustumArray.js';
25
26
  import { Matrix4 } from '../../math/Matrix4.js';
26
27
  import { Vector2 } from '../../math/Vector2.js';
27
28
  import { Vector4 } from '../../math/Vector4.js';
28
29
  import { RenderTarget } from '../../core/RenderTarget.js';
29
30
  import { DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping, LinearFilter, LinearSRGBColorSpace, HalfFloatType, RGBAFormat, PCFShadowMap } from '../../constants.js';
30
31
 
32
+ import { highpModelNormalViewMatrix, highpModelViewMatrix } from '../../nodes/accessors/ModelNode.js';
33
+
31
34
  const _scene = /*@__PURE__*/ new Scene();
32
35
  const _drawingBufferSize = /*@__PURE__*/ new Vector2();
33
36
  const _screen = /*@__PURE__*/ new Vector4();
34
37
  const _frustum = /*@__PURE__*/ new Frustum();
38
+ const _frustumArray = /*@__PURE__*/ new FrustumArray();
39
+
35
40
  const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
36
41
  const _vector4 = /*@__PURE__*/ new Vector4();
37
42
 
@@ -54,6 +59,7 @@ class Renderer {
54
59
  * @property {?Function} [getFallback=null] - This callback function can be used to provide a fallback backend, if the primary backend can't be targeted.
55
60
  * @property {number} [colorBufferType=HalfFloatType] - Defines the type of color buffers. The default `HalfFloatType` is recommend for best
56
61
  * quality. To save memory and bandwidth, `UnsignedByteType` might be used. This will reduce rendering quality though.
62
+ * @property {boolean} [multiview=false] - If set to `true`, the renderer will use multiview during WebXR rendering if supported.
57
63
  */
58
64
 
59
65
  /**
@@ -84,7 +90,8 @@ class Renderer {
84
90
  antialias = false,
85
91
  samples = 0,
86
92
  getFallback = null,
87
- colorBufferType = HalfFloatType
93
+ colorBufferType = HalfFloatType,
94
+ multiview = false
88
95
  } = parameters;
89
96
 
90
97
  /**
@@ -225,7 +232,15 @@ class Renderer {
225
232
  */
226
233
  this.info = new Info();
227
234
 
228
- this.nodes = {
235
+ /**
236
+ * Stores override nodes for specific transformations or calculations.
237
+ * These nodes can be used to replace default behavior in the rendering pipeline.
238
+ *
239
+ * @type {Object}
240
+ * @property {?Node} modelViewMatrix - An override node for the model-view matrix.
241
+ * @property {?Node} modelNormalViewMatrix - An override node for the model normal view matrix.
242
+ */
243
+ this.overrideNodes = {
229
244
  modelViewMatrix: null,
230
245
  modelNormalViewMatrix: null
231
246
  };
@@ -676,7 +691,7 @@ class Renderer {
676
691
  *
677
692
  * @type {XRManager}
678
693
  */
679
- this.xr = new XRManager( this );
694
+ this.xr = new XRManager( this, multiview );
680
695
 
681
696
  /**
682
697
  * Debug configuration.
@@ -977,6 +992,43 @@ class Renderer {
977
992
 
978
993
  }
979
994
 
995
+ /**
996
+ * Enables or disables high precision for model-view and normal-view matrices.
997
+ * When enabled, will use CPU 64-bit precision for higher precision instead of GPU 32-bit for higher performance.
998
+ *
999
+ * NOTE: 64-bit precision is not compatible with `InstancedMesh` and `SkinnedMesh`.
1000
+ *
1001
+ * @param {boolean} value - Whether to enable or disable high precision.
1002
+ * @type {boolean}
1003
+ */
1004
+ set highPrecision( value ) {
1005
+
1006
+ if ( value === true ) {
1007
+
1008
+ this.overrideNodes.modelViewMatrix = highpModelViewMatrix;
1009
+ this.overrideNodes.modelNormalViewMatrix = highpModelNormalViewMatrix;
1010
+
1011
+ } else if ( this.highPrecision ) {
1012
+
1013
+ this.overrideNodes.modelViewMatrix = null;
1014
+ this.overrideNodes.modelNormalViewMatrix = null;
1015
+
1016
+ }
1017
+
1018
+ }
1019
+
1020
+ /**
1021
+ * Returns whether high precision is enabled or not.
1022
+ *
1023
+ * @return {boolean} Whether high precision is enabled or not.
1024
+ * @type {boolean}
1025
+ */
1026
+ get highPrecision() {
1027
+
1028
+ return this.overrideNodes.modelViewMatrix === highpModelViewMatrix && this.overrideNodes.modelNormalViewMatrix === highpModelNormalViewMatrix;
1029
+
1030
+ }
1031
+
980
1032
  /**
981
1033
  * Sets the given MRT configuration.
982
1034
  *
@@ -1187,14 +1239,28 @@ class Renderer {
1187
1239
 
1188
1240
  }
1189
1241
 
1242
+ const outputRenderTarget = this.getOutputRenderTarget();
1243
+
1190
1244
  frameBufferTarget.depthBuffer = depth;
1191
1245
  frameBufferTarget.stencilBuffer = stencil;
1192
- frameBufferTarget.setSize( width, height );
1246
+ if ( outputRenderTarget !== null ) {
1247
+
1248
+ frameBufferTarget.setSize( outputRenderTarget.width, outputRenderTarget.height, outputRenderTarget.depth );
1249
+
1250
+ } else {
1251
+
1252
+ frameBufferTarget.setSize( width, height, 1 );
1253
+
1254
+ }
1255
+
1193
1256
  frameBufferTarget.viewport.copy( this._viewport );
1194
1257
  frameBufferTarget.scissor.copy( this._scissor );
1195
1258
  frameBufferTarget.viewport.multiplyScalar( this._pixelRatio );
1196
1259
  frameBufferTarget.scissor.multiplyScalar( this._pixelRatio );
1197
1260
  frameBufferTarget.scissorTest = this._scissorTest;
1261
+ frameBufferTarget.multiview = outputRenderTarget !== null ? outputRenderTarget.multiview : false;
1262
+ frameBufferTarget.resolveDepthBuffer = outputRenderTarget !== null ? outputRenderTarget.resolveDepthBuffer : true;
1263
+ frameBufferTarget._autoAllocateDepthBuffer = outputRenderTarget !== null ? outputRenderTarget._autoAllocateDepthBuffer : false;
1198
1264
 
1199
1265
  return frameBufferTarget;
1200
1266
 
@@ -1341,8 +1407,14 @@ class Renderer {
1341
1407
 
1342
1408
  //
1343
1409
 
1344
- _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
1345
- _frustum.setFromProjectionMatrix( _projScreenMatrix, coordinateSystem );
1410
+ const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
1411
+
1412
+ if ( ! camera.isArrayCamera ) {
1413
+
1414
+ _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
1415
+ frustum.setFromProjectionMatrix( _projScreenMatrix, coordinateSystem );
1416
+
1417
+ }
1346
1418
 
1347
1419
  const renderList = this._renderLists.get( scene, camera );
1348
1420
  renderList.begin();
@@ -1396,6 +1468,7 @@ class Renderer {
1396
1468
 
1397
1469
  //
1398
1470
 
1471
+ renderContext.camera = camera;
1399
1472
  this.backend.beginRender( renderContext );
1400
1473
 
1401
1474
  // process render lists
@@ -1443,6 +1516,15 @@ class Renderer {
1443
1516
 
1444
1517
  }
1445
1518
 
1519
+ _setXRLayerSize( width, height ) {
1520
+
1521
+ this._width = width;
1522
+ this._height = height;
1523
+
1524
+ this.setViewport( 0, 0, width, height );
1525
+
1526
+ }
1527
+
1446
1528
  /**
1447
1529
  * The output pass performs tone mapping and color space conversion.
1448
1530
  *
@@ -2163,6 +2245,21 @@ class Renderer {
2163
2245
 
2164
2246
  }
2165
2247
 
2248
+ /**
2249
+ * Resets the renderer to the initial state before WebXR started.
2250
+ *
2251
+ */
2252
+ _resetXRState() {
2253
+
2254
+ this.backend.setXRTarget( null );
2255
+ this.setOutputRenderTarget( null );
2256
+ this.setRenderTarget( null );
2257
+
2258
+ this._frameBufferTarget.dispose();
2259
+ this._frameBufferTarget = null;
2260
+
2261
+ }
2262
+
2166
2263
  /**
2167
2264
  * Callback for {@link Renderer#setRenderObjectFunction}.
2168
2265
  *
@@ -2545,7 +2642,9 @@ class Renderer {
2545
2642
 
2546
2643
  } else if ( object.isSprite ) {
2547
2644
 
2548
- if ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {
2645
+ const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
2646
+
2647
+ if ( ! object.frustumCulled || frustum.intersectsSprite( object, camera ) ) {
2549
2648
 
2550
2649
  if ( this.sortObjects === true ) {
2551
2650
 
@@ -2569,7 +2668,9 @@ class Renderer {
2569
2668
 
2570
2669
  } else if ( object.isMesh || object.isLine || object.isPoints ) {
2571
2670
 
2572
- if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {
2671
+ const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
2672
+
2673
+ if ( ! object.frustumCulled || frustum.intersectsObject( object, camera ) ) {
2573
2674
 
2574
2675
  const { geometry, material } = object;
2575
2676
 
@@ -2791,6 +2892,13 @@ class Renderer {
2791
2892
 
2792
2893
  }
2793
2894
 
2895
+ if ( material.castShadowPositionNode && material.castShadowPositionNode.isNode ) {
2896
+
2897
+ overridePositionNode = overrideMaterial.positionNode;
2898
+ overrideMaterial.positionNode = material.castShadowPositionNode;
2899
+
2900
+ }
2901
+
2794
2902
  }
2795
2903
 
2796
2904
  material = overrideMaterial;
@@ -0,0 +1,79 @@
1
+ import { Texture } from '../../textures/Texture.js';
2
+ import { LinearFilter, ClampToEdgeWrapping } from '../../constants.js';
3
+
4
+ /**
5
+ * This special type of texture is intended for compute shaders.
6
+ * It can be used to compute the data of a texture with a compute shader.
7
+ *
8
+ * Note: This type of texture can only be used with `WebGPURenderer`
9
+ * and a WebGPU backend.
10
+ *
11
+ * @augments Texture
12
+ */
13
+ class Storage3DTexture extends Texture {
14
+
15
+ /**
16
+ * Constructs a new storage texture.
17
+ *
18
+ * @param {number} [width=1] - The storage texture's width.
19
+ * @param {number} [height=1] - The storage texture's height.
20
+ * @param {number} [depth=1] - The storage texture's depth.
21
+ */
22
+ constructor( width = 1, height = 1, depth = 1 ) {
23
+
24
+ super();
25
+
26
+ //inherited from texture. Must be false for 3DTexture
27
+ this.isArrayTexture = false;
28
+
29
+ /**
30
+ * The image object which just represents the texture's dimension.
31
+ *
32
+ * @type {{width: number, height: number, depth: number}}
33
+ */
34
+ this.image = { width, height, depth };
35
+
36
+ /**
37
+ * The default `magFilter` for storage textures is `THREE.LinearFilter`.
38
+ *
39
+ * @type {number}
40
+ */
41
+ this.magFilter = LinearFilter;
42
+
43
+ /**
44
+ * The default `minFilter` for storage textures is `THREE.LinearFilter`.
45
+ *
46
+ * @type {number}
47
+ */
48
+ this.minFilter = LinearFilter;
49
+
50
+ /**
51
+ * This defines how the texture is wrapped in the depth direction and corresponds to
52
+ * *W* in UVW mapping.
53
+ *
54
+ * @type {number}
55
+ */
56
+ this.wrapR = ClampToEdgeWrapping;
57
+
58
+ /**
59
+ * This flag can be used for type testing.
60
+ *
61
+ * @type {boolean}
62
+ * @readonly
63
+ * @default true
64
+ */
65
+ this.isStorageTexture = true;
66
+
67
+ /**
68
+ * Indicates whether this texture is a 3D texture.
69
+ *
70
+ * @type {boolean}
71
+ *
72
+ */
73
+ this.is3DTexture = true;
74
+
75
+ }
76
+
77
+ }
78
+
79
+ export default Storage3DTexture;
@@ -0,0 +1,63 @@
1
+ import { Texture } from '../../textures/Texture.js';
2
+ import { LinearFilter } from '../../constants.js';
3
+
4
+ /**
5
+ * This special type of texture is intended for compute shaders.
6
+ * It can be used to compute the data of a texture with a compute shader.
7
+ *
8
+ * Note: This type of texture can only be used with `WebGPURenderer`
9
+ * and a WebGPU backend.
10
+ *
11
+ * @augments Texture
12
+ */
13
+ class StorageArrayTexture extends Texture {
14
+
15
+ /**
16
+ * Constructs a new storage texture.
17
+ *
18
+ * @param {number} [width=1] - The storage texture's width.
19
+ * @param {number} [height=1] - The storage texture's height.
20
+ * @param {number} [depth=1] - The storage texture's depth.
21
+ */
22
+ constructor( width = 1, height = 1, depth = 1 ) {
23
+
24
+ super();
25
+
26
+ //inherited from texture
27
+ this.isArrayTexture = true;
28
+
29
+ /**
30
+ * The image object which just represents the texture's dimension.
31
+ *
32
+ * @type {{width: number, height: number, depth: number}}
33
+ */
34
+ this.image = { width, height, depth };
35
+
36
+ /**
37
+ * The default `magFilter` for storage textures is `THREE.LinearFilter`.
38
+ *
39
+ * @type {number}
40
+ */
41
+ this.magFilter = LinearFilter;
42
+
43
+ /**
44
+ * The default `minFilter` for storage textures is `THREE.LinearFilter`.
45
+ *
46
+ * @type {number}
47
+ */
48
+ this.minFilter = LinearFilter;
49
+
50
+ /**
51
+ * This flag can be used for type testing.
52
+ *
53
+ * @type {boolean}
54
+ * @readonly
55
+ * @default true
56
+ */
57
+ this.isStorageTexture = true;
58
+
59
+ }
60
+
61
+ }
62
+
63
+ export default StorageArrayTexture;
@@ -2,7 +2,7 @@ import DataMap from './DataMap.js';
2
2
 
3
3
  import { Vector3 } from '../../math/Vector3.js';
4
4
  import { DepthTexture } from '../../textures/DepthTexture.js';
5
- import { DepthStencilFormat, DepthFormat, UnsignedIntType, UnsignedInt248Type, EquirectangularReflectionMapping, EquirectangularRefractionMapping, CubeReflectionMapping, CubeRefractionMapping, UnsignedByteType } from '../../constants.js';
5
+ import { DepthStencilFormat, DepthFormat, UnsignedIntType, UnsignedInt248Type, UnsignedByteType } from '../../constants.js';
6
6
 
7
7
  const _size = /*@__PURE__*/ new Vector3();
8
8
 
@@ -77,10 +77,13 @@ class Textures extends DataMap {
77
77
  if ( depthTexture === undefined && useDepthTexture ) {
78
78
 
79
79
  depthTexture = new DepthTexture();
80
+
80
81
  depthTexture.format = renderTarget.stencilBuffer ? DepthStencilFormat : DepthFormat;
81
82
  depthTexture.type = renderTarget.stencilBuffer ? UnsignedInt248Type : UnsignedIntType; // FloatType
82
83
  depthTexture.image.width = mipWidth;
83
84
  depthTexture.image.height = mipHeight;
85
+ depthTexture.image.depth = size.depth;
86
+ depthTexture.isArrayTexture = renderTarget.multiview === true && size.depth > 1;
84
87
 
85
88
  depthTextureMips[ activeMipmapLevel ] = depthTexture;
86
89
 
@@ -95,6 +98,7 @@ class Textures extends DataMap {
95
98
  depthTexture.needsUpdate = true;
96
99
  depthTexture.image.width = mipWidth;
97
100
  depthTexture.image.height = mipHeight;
101
+ depthTexture.image.depth = depthTexture.isArrayTexture ? depthTexture.image.depth : 1;
98
102
 
99
103
  }
100
104
 
@@ -330,8 +334,6 @@ class Textures extends DataMap {
330
334
 
331
335
  this._destroyTexture( texture );
332
336
 
333
- this.info.memory.textures --;
334
-
335
337
  };
336
338
 
337
339
  texture.addEventListener( 'dispose', onDispose );
@@ -420,21 +422,7 @@ class Textures extends DataMap {
420
422
  */
421
423
  needsMipmaps( texture ) {
422
424
 
423
- return this.isEnvironmentTexture( texture ) || texture.isCompressedTexture === true || texture.generateMipmaps;
424
-
425
- }
426
-
427
- /**
428
- * Returns `true` if the given texture is an environment map.
429
- *
430
- * @param {Texture} texture - The texture.
431
- * @return {boolean} Whether the given texture is an environment map or not.
432
- */
433
- isEnvironmentTexture( texture ) {
434
-
435
- const mapping = texture.mapping;
436
-
437
- return ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) || ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );
425
+ return texture.isCompressedTexture === true || texture.generateMipmaps;
438
426
 
439
427
  }
440
428
 
@@ -446,10 +434,16 @@ class Textures extends DataMap {
446
434
  */
447
435
  _destroyTexture( texture ) {
448
436
 
449
- this.backend.destroySampler( texture );
450
- this.backend.destroyTexture( texture );
437
+ if ( this.has( texture ) === true ) {
438
+
439
+ this.backend.destroySampler( texture );
440
+ this.backend.destroyTexture( texture );
451
441
 
452
- this.delete( texture );
442
+ this.delete( texture );
443
+
444
+ this.info.memory.textures --;
445
+
446
+ }
453
447
 
454
448
  }
455
449
 
@@ -74,6 +74,7 @@ class TimestampQueryPool {
74
74
  *
75
75
  * @abstract
76
76
  * @param {Object} renderContext - The render context to allocate queries for.
77
+ * @returns {?number}
77
78
  */
78
79
  allocateQueriesForContext( /* renderContext */ ) {}
79
80
 
@@ -284,7 +284,7 @@ class Matrix2Uniform extends Uniform {
284
284
  */
285
285
  this.isMatrix2Uniform = true;
286
286
 
287
- this.boundary = 16;
287
+ this.boundary = 8;
288
288
  this.itemSize = 4;
289
289
 
290
290
  }
@@ -129,38 +129,34 @@ class UniformsGroup extends UniformBuffer {
129
129
  */
130
130
  get byteLength() {
131
131
 
132
+ const bytesPerElement = this.bytesPerElement;
133
+
132
134
  let offset = 0; // global buffer offset in bytes
133
135
 
134
136
  for ( let i = 0, l = this.uniforms.length; i < l; i ++ ) {
135
137
 
136
138
  const uniform = this.uniforms[ i ];
137
139
 
138
- const { boundary, itemSize } = uniform;
139
-
140
- // offset within a single chunk in bytes
141
-
142
- const chunkOffset = offset % GPU_CHUNK_BYTES;
143
- const remainingSizeInChunk = GPU_CHUNK_BYTES - chunkOffset;
144
-
145
- // conformance tests
146
-
147
- if ( chunkOffset !== 0 && ( remainingSizeInChunk - boundary ) < 0 ) {
148
-
149
- // check for chunk overflow
140
+ const boundary = uniform.boundary;
141
+ const itemSize = uniform.itemSize * bytesPerElement; // size of the uniform in bytes
150
142
 
151
- offset += ( GPU_CHUNK_BYTES - chunkOffset );
143
+ const chunkOffset = offset % GPU_CHUNK_BYTES; // offset in the current chunk
144
+ const chunkPadding = chunkOffset % boundary; // required padding to match boundary
145
+ const chunkStart = chunkOffset + chunkPadding; // start position in the current chunk for the data
152
146
 
153
- } else if ( chunkOffset % boundary !== 0 ) {
147
+ offset += chunkPadding;
154
148
 
155
- // check for correct alignment
149
+ // Check for chunk overflow
150
+ if ( chunkStart !== 0 && ( GPU_CHUNK_BYTES - chunkStart ) < itemSize ) {
156
151
 
157
- offset += ( chunkOffset % boundary );
152
+ // Add padding to the end of the chunk
153
+ offset += ( GPU_CHUNK_BYTES - chunkStart );
158
154
 
159
155
  }
160
156
 
161
- uniform.offset = ( offset / this.bytesPerElement );
157
+ uniform.offset = offset / bytesPerElement;
162
158
 
163
- offset += ( itemSize * this.bytesPerElement );
159
+ offset += itemSize;
164
160
 
165
161
  }
166
162