@unikia/upe-renderer 0.186.110 → 0.187.11

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 (506) hide show
  1. package/README.md +5 -7
  2. package/UPSTREAM.md +4 -4
  3. package/build/three.core.js +853 -277
  4. package/build/three.module.js +1098 -1280
  5. package/build/three.tsl.js +41938 -686
  6. package/build/three.webgpu.js +10604 -49055
  7. package/build/three.webgpu.nodes.js +9249 -5788
  8. package/examples/jsm/Addons.js +2 -0
  9. package/examples/jsm/animation/CCDIKSolver.js +17 -5
  10. package/examples/jsm/controls/FirstPersonControls.js +1 -1
  11. package/examples/jsm/controls/OrbitControls.js +27 -14
  12. package/examples/jsm/csm/CSMShader.js +74 -3
  13. package/examples/jsm/curves/CurveExtras.js +4 -4
  14. package/examples/jsm/curves/NURBSCurve.js +14 -0
  15. package/examples/jsm/exporters/EXRExporter.js +673 -16
  16. package/examples/jsm/exporters/GLTFExporter.js +4 -4
  17. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  18. package/examples/jsm/exporters/OBJExporter.js +48 -5
  19. package/examples/jsm/exporters/PLYExporter.js +22 -11
  20. package/examples/jsm/generators/CityGenerator.js +3 -2
  21. package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
  22. package/examples/jsm/gpgpu/BitonicSort.js +30 -23
  23. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
  24. package/examples/jsm/inspector/Extension.js +1 -1
  25. package/examples/jsm/inspector/Inspector.js +6 -46
  26. package/examples/jsm/inspector/RendererInspector.js +43 -8
  27. package/examples/jsm/inspector/Storage.js +49 -0
  28. package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
  29. package/examples/jsm/inspector/tabs/Parameters.js +5 -1
  30. package/examples/jsm/inspector/tabs/Performance.js +22 -7
  31. package/examples/jsm/inspector/tabs/Settings.js +1 -1
  32. package/examples/jsm/inspector/tabs/Timeline.js +83 -7
  33. package/examples/jsm/inspector/tabs/Viewer.js +25 -10
  34. package/examples/jsm/inspector/ui/Profiler.js +1 -1
  35. package/examples/jsm/inspector/ui/Style.js +21 -53
  36. package/examples/jsm/inspector/ui/Values.js +28 -3
  37. package/examples/jsm/libs/fflate.module.js +83 -56
  38. package/examples/jsm/libs/mikktspace.README.md +27 -0
  39. package/examples/jsm/libs/mikktspace.module.js +721 -109
  40. package/examples/jsm/lighting/ClusteredLighting.js +100 -2
  41. package/examples/jsm/lighting/LightMapper.js +295 -0
  42. package/examples/jsm/lighting/LightProbeGrid.js +242 -139
  43. package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
  44. package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
  45. package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
  46. package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
  47. package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
  48. package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
  49. package/examples/jsm/lights/SunLight.js +9 -4
  50. package/examples/jsm/lights/SunLightNode.js +3 -3
  51. package/examples/jsm/lines/LineMaterial.js +26 -10
  52. package/examples/jsm/loaders/3DMLoader.js +10 -1
  53. package/examples/jsm/loaders/3MFLoader.js +5 -1
  54. package/examples/jsm/loaders/AMFLoader.js +2 -0
  55. package/examples/jsm/loaders/BVHLoader.js +2 -0
  56. package/examples/jsm/loaders/ColladaLoader.js +8 -0
  57. package/examples/jsm/loaders/DDSLoader.js +1 -1
  58. package/examples/jsm/loaders/DRACOLoader.js +5 -1
  59. package/examples/jsm/loaders/EXRLoader.js +120 -104
  60. package/examples/jsm/loaders/FBXLoader.js +4 -0
  61. package/examples/jsm/loaders/FontLoader.js +2 -0
  62. package/examples/jsm/loaders/GCodeLoader.js +5 -9
  63. package/examples/jsm/loaders/GLTFLoader.js +112 -31
  64. package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
  65. package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
  66. package/examples/jsm/loaders/IESLoader.js +46 -12
  67. package/examples/jsm/loaders/JXLLoader.js +159 -0
  68. package/examples/jsm/loaders/KMZLoader.js +6 -0
  69. package/examples/jsm/loaders/KSPLATLoader.js +2 -0
  70. package/examples/jsm/loaders/KTX2Loader.js +49 -4
  71. package/examples/jsm/loaders/KTXLoader.js +5 -3
  72. package/examples/jsm/loaders/LDrawLoader.js +15 -22
  73. package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
  74. package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
  75. package/examples/jsm/loaders/LUTImageLoader.js +2 -0
  76. package/examples/jsm/loaders/LWOLoader.js +6 -0
  77. package/examples/jsm/loaders/MD2Loader.js +2 -0
  78. package/examples/jsm/loaders/MDDLoader.js +4 -0
  79. package/examples/jsm/loaders/MTLLoader.js +8 -0
  80. package/examples/jsm/loaders/MaterialXLoader.js +57 -5
  81. package/examples/jsm/loaders/NRRDLoader.js +4 -2
  82. package/examples/jsm/loaders/OBJLoader.js +10 -4
  83. package/examples/jsm/loaders/PCDLoader.js +6 -2
  84. package/examples/jsm/loaders/PDBLoader.js +5 -3
  85. package/examples/jsm/loaders/PLYLoader.js +39 -15
  86. package/examples/jsm/loaders/PVRLoader.js +2 -2
  87. package/examples/jsm/loaders/SPLATLoader.js +2 -0
  88. package/examples/jsm/loaders/SPZLoader.js +2 -0
  89. package/examples/jsm/loaders/STLLoader.js +3 -1
  90. package/examples/jsm/loaders/SVGLoader.js +27 -49
  91. package/examples/jsm/loaders/TDSLoader.js +4 -0
  92. package/examples/jsm/loaders/TGALoader.js +6 -5
  93. package/examples/jsm/loaders/TTFLoader.js +2 -0
  94. package/examples/jsm/loaders/USDLoader.js +14 -0
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
  96. package/examples/jsm/loaders/VOXLoader.js +3 -0
  97. package/examples/jsm/loaders/VRMLLoader.js +4 -0
  98. package/examples/jsm/loaders/VTKLoader.js +2 -0
  99. package/examples/jsm/loaders/XYZLoader.js +2 -0
  100. package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
  101. package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
  102. package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
  103. package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
  104. package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
  105. package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
  106. package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
  107. package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
  108. package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
  109. package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
  110. package/examples/jsm/loaders/usd/USDAParser.js +56 -47
  111. package/examples/jsm/loaders/usd/USDComposer.js +25 -30
  112. package/examples/jsm/math/ColorConverter.js +7 -3
  113. package/examples/jsm/math/Lut.js +2 -2
  114. package/examples/jsm/math/OBB.js +3 -3
  115. package/examples/jsm/math/Octree.js +20 -17
  116. package/examples/jsm/objects/GaussianSplat.js +5 -4
  117. package/examples/jsm/objects/Reflector.js +5 -0
  118. package/examples/jsm/objects/SkyMesh.js +14 -7
  119. package/examples/jsm/objects/Water2Mesh.js +2 -2
  120. package/examples/jsm/physics/RapierPhysics.js +2 -2
  121. package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
  122. package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
  123. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  124. package/examples/jsm/postprocessing/GTAOPass.js +26 -18
  125. package/examples/jsm/renderers/SVGRenderer.js +3 -2
  126. package/examples/jsm/shaders/GTAOShader.js +7 -4
  127. package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
  128. package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
  129. package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
  130. package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
  131. package/examples/jsm/tsl/display/BloomNode.js +3 -3
  132. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
  133. package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
  134. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  135. package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
  136. package/examples/jsm/tsl/display/FSR1Node.js +3 -3
  137. package/examples/jsm/tsl/display/FXAANode.js +3 -10
  138. package/examples/jsm/tsl/display/FilmNode.js +3 -3
  139. package/examples/jsm/tsl/display/GTAONode.js +33 -25
  140. package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
  141. package/examples/jsm/tsl/display/GodraysNode.js +5 -19
  142. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
  143. package/examples/jsm/tsl/display/LensflareNode.js +3 -3
  144. package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
  145. package/examples/jsm/tsl/display/OITPassNode.js +0 -11
  146. package/examples/jsm/tsl/display/OutlineNode.js +107 -5
  147. package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
  148. package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
  149. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
  150. package/examples/jsm/tsl/display/SMAANode.js +3 -3
  151. package/examples/jsm/tsl/display/SSAONode.js +6 -20
  152. package/examples/jsm/tsl/display/SSGINode.js +36 -29
  153. package/examples/jsm/tsl/display/SSRNode.js +135 -63
  154. package/examples/jsm/tsl/display/SSSNode.js +6 -20
  155. package/examples/jsm/tsl/display/SharpenNode.js +3 -3
  156. package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
  157. package/examples/jsm/tsl/display/TAAUNode.js +10 -42
  158. package/examples/jsm/tsl/display/TRAANode.js +11 -43
  159. package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
  160. package/examples/jsm/tsl/display/TransitionNode.js +3 -3
  161. package/examples/jsm/tsl/display/lensDirt.js +30 -0
  162. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
  163. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
  164. package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
  165. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
  166. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
  167. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
  168. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
  169. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
  170. package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
  171. package/examples/jsm/tsl/utils/Raymarching.js +1 -1
  172. package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
  173. package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
  174. package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
  175. package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
  176. package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
  177. package/examples/jsm/utils/SceneOptimizer.js +2 -1
  178. package/examples/jsm/utils/SceneUtils.js +1 -1
  179. package/examples/jsm/utils/unwrapUVs.js +865 -0
  180. package/examples/jsm/webxr/XREstimatedLight.js +11 -4
  181. package/package.json +3 -3
  182. package/src/Three.TSL.js +2 -683
  183. package/src/Three.WebGPU.Nodes.js +2 -1
  184. package/src/Three.WebGPU.js +2 -1
  185. package/src/animation/AnimationAction.js +1 -1
  186. package/src/animation/AnimationUtils.js +1 -3
  187. package/src/animation/KeyframeTrack.js +19 -0
  188. package/src/cameras/ArrayCamera.js +12 -0
  189. package/src/cameras/CubeCamera.js +3 -3
  190. package/src/constants.js +1 -9
  191. package/src/core/BufferAttribute.js +57 -21
  192. package/src/core/BufferGeometry.js +5 -13
  193. package/src/core/Clock.js +1 -1
  194. package/src/core/InterleavedBuffer.js +28 -18
  195. package/src/core/InterleavedBufferAttribute.js +54 -20
  196. package/src/core/Object3D.js +19 -9
  197. package/src/core/Raycaster.js +2 -0
  198. package/src/core/RenderTarget.js +11 -5
  199. package/src/core/UniformsGroup.js +7 -3
  200. package/src/extras/PMREMGenerator.js +392 -685
  201. package/src/extras/core/Curve.js +4 -0
  202. package/src/extras/core/CurvePath.js +13 -0
  203. package/src/extras/core/ShapePath.js +1 -1
  204. package/src/geometries/EdgesGeometry.js +12 -10
  205. package/src/geometries/LatheGeometry.js +2 -0
  206. package/src/helpers/PolarGridHelper.js +1 -1
  207. package/src/lights/Light.js +11 -0
  208. package/src/lights/LightProbe.js +2 -0
  209. package/src/lights/LightShadow.js +2 -0
  210. package/src/loaders/AnimationLoader.js +2 -0
  211. package/src/loaders/AudioLoader.js +2 -0
  212. package/src/loaders/BufferGeometryLoader.js +2 -0
  213. package/src/loaders/CompressedTextureLoader.js +2 -0
  214. package/src/loaders/CubeTextureLoader.js +2 -0
  215. package/src/loaders/DataTextureLoader.js +2 -0
  216. package/src/loaders/FileLoader.js +2 -0
  217. package/src/loaders/ImageBitmapLoader.js +3 -1
  218. package/src/loaders/ImageLoader.js +1 -0
  219. package/src/loaders/Loader.js +47 -0
  220. package/src/loaders/MaterialLoader.js +2 -0
  221. package/src/loaders/ObjectLoader.js +27 -8
  222. package/src/loaders/TextureLoader.js +5 -3
  223. package/src/loaders/nodes/NodeLoader.js +2 -0
  224. package/src/materials/Material.js +21 -2
  225. package/src/materials/MeshDepthMaterial.js +1 -1
  226. package/src/materials/MeshDistanceMaterial.js +1 -1
  227. package/src/materials/MeshLambertMaterial.js +1 -1
  228. package/src/materials/MeshMatcapMaterial.js +1 -1
  229. package/src/materials/MeshNormalMaterial.js +1 -1
  230. package/src/materials/MeshPhongMaterial.js +1 -1
  231. package/src/materials/MeshPhysicalMaterial.js +90 -11
  232. package/src/materials/MeshStandardMaterial.js +1 -1
  233. package/src/materials/MeshToonMaterial.js +1 -1
  234. package/src/materials/nodes/Line2NodeMaterial.js +32 -10
  235. package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
  236. package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
  237. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
  238. package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
  239. package/src/materials/nodes/NodeMaterial.js +36 -16
  240. package/src/materials/nodes/NodeMaterialInstance.js +193 -0
  241. package/src/materials/nodes/NodeMaterials.js +1 -0
  242. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  243. package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
  244. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
  245. package/src/math/Box3.js +2 -2
  246. package/src/math/Color.js +8 -8
  247. package/src/math/ColorManagement.js +2 -21
  248. package/src/math/FrustumArray.js +12 -0
  249. package/src/math/Interpolant.js +1 -1
  250. package/src/math/Line3.js +2 -4
  251. package/src/math/MathUtils.js +33 -46
  252. package/src/math/Matrix2.js +1 -1
  253. package/src/math/Matrix3.js +1 -1
  254. package/src/math/Matrix4.js +1 -1
  255. package/src/math/Triangle.js +2 -1
  256. package/src/math/Vector2.js +1 -1
  257. package/src/math/Vector3.js +1 -1
  258. package/src/math/Vector4.js +1 -1
  259. package/src/nodes/Nodes.js +1 -0
  260. package/src/nodes/TSL.js +2 -0
  261. package/src/nodes/accessors/Arrays.js +1 -1
  262. package/src/nodes/accessors/Batch.js +29 -23
  263. package/src/nodes/accessors/BufferAttributeNode.js +21 -1
  264. package/src/nodes/accessors/BuiltinNode.js +6 -0
  265. package/src/nodes/accessors/Camera.js +100 -93
  266. package/src/nodes/accessors/ClippingNode.js +17 -6
  267. package/src/nodes/accessors/CubeTextureNode.js +12 -24
  268. package/src/nodes/accessors/Instance.js +198 -160
  269. package/src/nodes/accessors/Lights.js +19 -6
  270. package/src/nodes/accessors/MaterialNode.js +33 -4
  271. package/src/nodes/accessors/Morph.js +81 -22
  272. package/src/nodes/accessors/Normal.js +0 -42
  273. package/src/nodes/accessors/Object3DNode.js +6 -0
  274. package/src/nodes/accessors/PointUVNode.js +6 -0
  275. package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
  276. package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
  277. package/src/nodes/accessors/ReferenceNode.js +6 -0
  278. package/src/nodes/accessors/Skinning.js +57 -52
  279. package/src/nodes/accessors/StorageBufferNode.js +3 -12
  280. package/src/nodes/accessors/TextureBicubic.js +30 -27
  281. package/src/nodes/accessors/TextureNode.js +164 -78
  282. package/src/nodes/accessors/TextureSizeNode.js +6 -0
  283. package/src/nodes/accessors/UniformArrayNode.js +8 -15
  284. package/src/nodes/accessors/VelocityNode.js +13 -8
  285. package/src/nodes/code/CodeNode.js +6 -0
  286. package/src/nodes/code/ExpressionNode.js +6 -0
  287. package/src/nodes/code/FunctionCallNode.js +3 -3
  288. package/src/nodes/code/FunctionNode.js +15 -13
  289. package/src/nodes/core/ArrayNode.js +3 -3
  290. package/src/nodes/core/AssignNode.js +10 -9
  291. package/src/nodes/core/AttributeNode.js +39 -0
  292. package/src/nodes/core/BypassNode.js +6 -0
  293. package/src/nodes/core/ConstNode.js +31 -1
  294. package/src/nodes/core/ContextNode.js +11 -6
  295. package/src/nodes/core/IndexNode.js +6 -0
  296. package/src/nodes/core/InputNode.js +6 -0
  297. package/src/nodes/core/InspectorNode.js +17 -31
  298. package/src/nodes/core/IsolateNode.js +8 -0
  299. package/src/nodes/core/Node.js +367 -67
  300. package/src/nodes/core/NodeBuilder.js +664 -222
  301. package/src/nodes/core/NodeUtils.js +25 -0
  302. package/src/nodes/core/NodeVar.js +10 -1
  303. package/src/nodes/core/OutputStructNode.js +6 -0
  304. package/src/nodes/core/OverrideContextNode.js +38 -37
  305. package/src/nodes/core/PropertyNode.js +14 -0
  306. package/src/nodes/core/StackNode.js +33 -21
  307. package/src/nodes/core/StructNode.js +6 -0
  308. package/src/nodes/core/StructTypeNode.js +6 -0
  309. package/src/nodes/core/SubBuildNode.js +8 -0
  310. package/src/nodes/core/TempNode.js +10 -35
  311. package/src/nodes/core/UniformGroupNode.js +6 -0
  312. package/src/nodes/core/VarNode.js +43 -135
  313. package/src/nodes/core/VaryingNode.js +33 -2
  314. package/src/nodes/display/BlendModes.js +5 -40
  315. package/src/nodes/display/BumpMapNode.js +17 -7
  316. package/src/nodes/display/ColorAdjustment.js +22 -10
  317. package/src/nodes/display/ColorSpaceFunctions.js +2 -14
  318. package/src/nodes/display/ColorSpaceNode.js +3 -3
  319. package/src/nodes/display/FrontFacingNode.js +6 -0
  320. package/src/nodes/display/NormalMapNode.js +3 -3
  321. package/src/nodes/display/PassNode.js +75 -16
  322. package/src/nodes/display/RenderOutputNode.js +22 -5
  323. package/src/nodes/display/ScreenNode.js +6 -0
  324. package/src/nodes/display/ToneMappingFunctions.js +9 -51
  325. package/src/nodes/display/ToneMappingNode.js +3 -3
  326. package/src/nodes/display/ToonOutlinePassNode.js +66 -2
  327. package/src/nodes/display/ViewportDepthNode.js +34 -4
  328. package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
  329. package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
  330. package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
  331. package/src/nodes/functions/BSDF/D_GGX.js +1 -8
  332. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
  333. package/src/nodes/functions/BSDF/LTC.js +20 -47
  334. package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
  335. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
  336. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
  337. package/src/nodes/functions/PhysicalLightingModel.js +84 -51
  338. package/src/nodes/functions/VolumetricLightingModel.js +1 -1
  339. package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
  340. package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
  341. package/src/nodes/functions/material/getRoughness.js +3 -1
  342. package/src/nodes/geometry/RangeNode.js +52 -69
  343. package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
  344. package/src/nodes/gpgpu/BarrierNode.js +6 -0
  345. package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
  346. package/src/nodes/gpgpu/ComputeNode.js +6 -0
  347. package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
  348. package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
  349. package/src/nodes/lighting/AnalyticLightNode.js +7 -14
  350. package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
  351. package/src/nodes/lighting/EnvironmentNode.js +58 -8
  352. package/src/nodes/lighting/IESSpotLightNode.js +19 -4
  353. package/src/nodes/lighting/LightProbeNode.js +2 -1
  354. package/src/nodes/lighting/LightUtils.js +2 -2
  355. package/src/nodes/lighting/LightingNode.js +6 -0
  356. package/src/nodes/lighting/LightsNode.js +26 -32
  357. package/src/nodes/lighting/PointShadowNode.js +92 -48
  358. package/src/nodes/lighting/ProjectorLightNode.js +1 -1
  359. package/src/nodes/lighting/RectAreaLightNode.js +13 -14
  360. package/src/nodes/lighting/ShadowBaseNode.js +9 -17
  361. package/src/nodes/lighting/ShadowFilterNode.js +26 -3
  362. package/src/nodes/lighting/ShadowNode.js +13 -11
  363. package/src/nodes/materialx/MaterialXColor.js +2 -14
  364. package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
  365. package/src/nodes/materialx/MaterialXNodes.js +8 -11
  366. package/src/nodes/materialx/MaterialXNoise.js +195 -454
  367. package/src/nodes/math/BitcastNode.js +5 -5
  368. package/src/nodes/math/BitcountNode.js +18 -46
  369. package/src/nodes/math/ConditionalNode.js +92 -22
  370. package/src/nodes/math/Hash.js +1 -1
  371. package/src/nodes/math/MathNode.js +86 -64
  372. package/src/nodes/math/MathUtils.js +2 -2
  373. package/src/nodes/math/OperatorNode.js +42 -59
  374. package/src/nodes/math/PackFloatNode.js +9 -9
  375. package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
  376. package/src/nodes/math/TriNoise3D.js +3 -23
  377. package/src/nodes/math/UnpackFloatNode.js +9 -9
  378. package/src/nodes/pmrem/PMREMNode.js +38 -75
  379. package/src/nodes/pmrem/PMREMUtils.js +108 -272
  380. package/src/nodes/procedural/Checker.js +1 -1
  381. package/src/nodes/tsl/TSLCore.js +199 -74
  382. package/src/nodes/utils/ArrayElementNode.js +19 -1
  383. package/src/nodes/utils/CubeMapNode.js +3 -3
  384. package/src/nodes/utils/DebugNode.js +2 -2
  385. package/src/nodes/utils/EventNode.js +6 -0
  386. package/src/nodes/utils/FlipNode.js +3 -3
  387. package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
  388. package/src/nodes/utils/JoinNode.js +3 -3
  389. package/src/nodes/utils/LoopNode.js +14 -9
  390. package/src/nodes/utils/MemberNode.js +18 -0
  391. package/src/nodes/utils/PostProcessingUtils.js +20 -25
  392. package/src/nodes/utils/RTTNode.js +2 -0
  393. package/src/nodes/utils/ReflectorNode.js +24 -0
  394. package/src/nodes/utils/RotateNode.js +3 -3
  395. package/src/nodes/utils/SampleNode.js +6 -0
  396. package/src/nodes/utils/SetNode.js +3 -3
  397. package/src/nodes/utils/SplitNode.js +6 -0
  398. package/src/nodes/utils/UVUtils.js +2 -2
  399. package/src/objects/BatchedMesh.js +146 -15
  400. package/src/objects/InstancedMesh.js +12 -4
  401. package/src/objects/Line.js +20 -0
  402. package/src/objects/Mesh.js +8 -0
  403. package/src/objects/Points.js +20 -0
  404. package/src/objects/Skeleton.js +26 -0
  405. package/src/objects/SkinnedMesh.js +3 -3
  406. package/src/objects/Sprite.js +10 -0
  407. package/src/renderers/WebGLRenderer.js +104 -70
  408. package/src/renderers/common/Animation.js +5 -1
  409. package/src/renderers/common/Attributes.js +67 -57
  410. package/src/renderers/common/Backend.js +78 -3
  411. package/src/renderers/common/BindGroup.js +11 -0
  412. package/src/renderers/common/Binding.js +0 -11
  413. package/src/renderers/common/Bindings.js +116 -10
  414. package/src/renderers/common/Buffer.js +1 -1
  415. package/src/renderers/common/ClippingContext.js +12 -1
  416. package/src/renderers/common/ComputePipeline.js +17 -1
  417. package/src/renderers/common/DirectRenderPipeline.js +7 -3
  418. package/src/renderers/common/Geometries.js +170 -132
  419. package/src/renderers/common/Info.js +1 -1
  420. package/src/renderers/common/InspectorBase.js +5 -5
  421. package/src/renderers/common/Lighting.js +59 -0
  422. package/src/renderers/common/Pipelines.js +26 -12
  423. package/src/renderers/common/ProgrammableStage.js +1 -17
  424. package/src/renderers/common/RenderContext.js +21 -0
  425. package/src/renderers/common/RenderContexts.js +13 -4
  426. package/src/renderers/common/RenderObject.js +111 -35
  427. package/src/renderers/common/RenderObjects.js +37 -19
  428. package/src/renderers/common/Renderer.js +537 -295
  429. package/src/renderers/common/RendererUtils.js +15 -0
  430. package/src/renderers/common/StandardDrawingPipeline.js +343 -0
  431. package/src/renderers/common/Storage3DTexture.js +11 -0
  432. package/src/renderers/common/StorageArrayTexture.js +10 -0
  433. package/src/renderers/common/StorageTexture.js +0 -9
  434. package/src/renderers/common/Textures.js +144 -37
  435. package/src/renderers/common/UniformsGroup.js +19 -0
  436. package/src/renderers/common/XRManager.js +10 -91
  437. package/src/renderers/common/extras/PMREMGenerator.js +298 -576
  438. package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
  439. package/src/renderers/common/nodes/NodeLibrary.js +11 -35
  440. package/src/renderers/common/nodes/NodeManager.js +80 -31
  441. package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
  442. package/src/renderers/common/nodes/NodeSampler.js +14 -0
  443. package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
  444. package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
  445. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
  446. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
  447. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
  448. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
  449. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  450. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
  451. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
  452. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
  453. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
  454. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
  455. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
  456. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
  457. package/src/renderers/shaders/ShaderChunk.js +0 -2
  458. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
  459. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  461. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
  462. package/src/renderers/shaders/ShaderLib.js +3 -0
  463. package/src/renderers/shaders/UniformsLib.js +4 -5
  464. package/src/renderers/webgl/WebGLBackground.js +3 -3
  465. package/src/renderers/webgl/WebGLBindingStates.js +4 -2
  466. package/src/renderers/webgl/WebGLCapabilities.js +7 -1
  467. package/src/renderers/webgl/WebGLEnvironments.js +2 -2
  468. package/src/renderers/webgl/WebGLGeometries.js +42 -14
  469. package/src/renderers/webgl/WebGLMaterials.js +15 -2
  470. package/src/renderers/webgl/WebGLOutput.js +37 -1
  471. package/src/renderers/webgl/WebGLProgram.js +13 -54
  472. package/src/renderers/webgl/WebGLPrograms.js +22 -8
  473. package/src/renderers/webgl/WebGLRenderStates.js +11 -8
  474. package/src/renderers/webgl/WebGLShadowMap.js +6 -4
  475. package/src/renderers/webgl/WebGLState.js +10 -6
  476. package/src/renderers/webgl/WebGLTextures.js +129 -77
  477. package/src/renderers/webgl/WebGLUniforms.js +44 -6
  478. package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
  479. package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
  480. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
  481. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
  482. package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
  483. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
  484. package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
  485. package/src/renderers/webgpu/WebGPUBackend.js +140 -82
  486. package/src/renderers/webgpu/WebGPURenderer.js +1 -1
  487. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
  488. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
  489. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
  490. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
  491. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
  492. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
  493. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
  494. package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
  495. package/src/renderers/webxr/WebXRController.js +3 -3
  496. package/src/renderers/webxr/WebXRManager.js +5 -90
  497. package/src/scenes/Scene.js +4 -4
  498. package/src/textures/CompressedTexture.js +2 -2
  499. package/src/textures/DepthTexture.js +2 -2
  500. package/src/textures/FramebufferTexture.js +11 -0
  501. package/src/textures/Texture.js +29 -1
  502. package/src/textures/TextureSource.js +1 -1
  503. package/src/upe.js +1 -1
  504. package/src/utils.js +4 -4
  505. package/examples/jsm/libs/surfaceNet.js +0 -201
  506. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
@@ -2,12 +2,26 @@ 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, UnsignedByteType, SRGBTransfer } from '../../constants.js';
5
+ import { DepthStencilFormat, DepthFormat, UnsignedIntType, UnsignedInt248Type, UnsignedByteType, FloatType, SRGBTransfer } from '../../constants.js';
6
6
  import { ColorManagement } from '../../math/ColorManagement.js';
7
7
  import { warn } from '../../utils.js';
8
8
 
9
9
  const _size = /*@__PURE__*/ new Vector3();
10
10
 
11
+ /**
12
+ * Returns the mipmaps of the given texture. Compressed cube textures
13
+ * define them per face.
14
+ *
15
+ * @private
16
+ * @param {Texture} texture - The texture.
17
+ * @return {Array<Object>} The mipmaps.
18
+ */
19
+ function getMipmaps( texture ) {
20
+
21
+ return texture.isCompressedCubeTexture === true ? texture.image[ 0 ].mipmaps : texture.mipmaps;
22
+
23
+ }
24
+
11
25
  /**
12
26
  * This module manages the textures of the renderer.
13
27
  *
@@ -55,6 +69,56 @@ class Textures extends DataMap {
55
69
  */
56
70
  this._htmlTextures = new Set();
57
71
 
72
+ /**
73
+ * Stores weak references to the textures and render targets
74
+ * with attached `dispose` event listeners.
75
+ *
76
+ * @private
77
+ * @type {Set<WeakRef<(Texture|RenderTarget)>>}
78
+ */
79
+ this._tracked = new Set();
80
+
81
+ /**
82
+ * Removes weak references from `_tracked` when their texture or
83
+ * render target has been garbage collected without an explicit
84
+ * `dispose()`.
85
+ *
86
+ * @private
87
+ * @type {FinalizationRegistry}
88
+ */
89
+ this._registry = new FinalizationRegistry( ( ref ) => this._tracked.delete( ref ) );
90
+
91
+ }
92
+
93
+ /**
94
+ * Frees internal resources.
95
+ */
96
+ dispose() {
97
+
98
+ for ( const ref of this._tracked ) {
99
+
100
+ const object = ref.deref();
101
+
102
+ if ( object === undefined || this.has( object ) === false ) continue;
103
+
104
+ if ( object.isRenderTarget === true ) {
105
+
106
+ this._destroyRenderTarget( object );
107
+
108
+ } else {
109
+
110
+ this._destroyTexture( object );
111
+
112
+ }
113
+
114
+ }
115
+
116
+ this._tracked.clear();
117
+
118
+ this._htmlTextures.clear();
119
+
120
+ super.dispose();
121
+
58
122
  }
59
123
 
60
124
  /**
@@ -73,7 +137,8 @@ class Textures extends DataMap {
73
137
 
74
138
  const textures = renderTarget.textures;
75
139
 
76
- const size = this.getSize( textures[ 0 ] );
140
+ // Depth-only render targets take their size from the depth texture.
141
+ const size = this.getSize( textures.length > 0 ? textures[ 0 ] : renderTarget.depthTexture );
77
142
 
78
143
  const mipWidth = size.width >> activeMipmapLevel;
79
144
  const mipHeight = size.height >> activeMipmapLevel;
@@ -91,7 +156,7 @@ class Textures extends DataMap {
91
156
  depthTexture = new DepthTexture();
92
157
 
93
158
  depthTexture.format = renderTarget.stencilBuffer ? DepthStencilFormat : DepthFormat;
94
- depthTexture.type = renderTarget.stencilBuffer ? UnsignedInt248Type : UnsignedIntType; // FloatType
159
+ depthTexture.type = this.renderer.reversedDepthBuffer === true ? FloatType : ( renderTarget.stencilBuffer ? UnsignedInt248Type : UnsignedIntType );
95
160
  depthTexture.image.width = mipWidth;
96
161
  depthTexture.image.height = mipHeight;
97
162
  depthTexture.image.depth = size.depth;
@@ -144,8 +209,31 @@ class Textures extends DataMap {
144
209
 
145
210
  }
146
211
 
147
- //
212
+ // dispose handler
213
+
214
+ if ( renderTargetData.initialized !== true ) {
215
+
216
+ renderTargetData.initialized = true;
217
+
218
+ this.info.memory.renderTargets ++;
219
+
220
+ // dispose
221
+
222
+ renderTargetData.onDispose = () => {
223
+
224
+ this._destroyRenderTarget( renderTarget );
225
+
226
+ };
148
227
 
228
+ renderTarget.addEventListener( 'dispose', renderTargetData.onDispose );
229
+
230
+ // see #34368 why tracking separate remove listeners is required right now
231
+ renderTargetData.ref = new WeakRef( renderTarget );
232
+
233
+ this._tracked.add( renderTargetData.ref );
234
+ this._registry.register( renderTarget, renderTargetData.ref, renderTargetData.ref );
235
+
236
+ }
149
237
 
150
238
  const options = { sampleCount };
151
239
 
@@ -171,26 +259,6 @@ class Textures extends DataMap {
171
259
 
172
260
  }
173
261
 
174
- // dispose handler
175
-
176
- if ( renderTargetData.initialized !== true ) {
177
-
178
- renderTargetData.initialized = true;
179
-
180
- this.info.memory.renderTargets ++;
181
-
182
- // dispose
183
-
184
- renderTargetData.onDispose = () => {
185
-
186
- this._destroyRenderTarget( renderTarget );
187
-
188
- };
189
-
190
- renderTarget.addEventListener( 'dispose', renderTargetData.onDispose );
191
-
192
- }
193
-
194
262
  }
195
263
 
196
264
  /**
@@ -200,11 +268,24 @@ class Textures extends DataMap {
200
268
  *
201
269
  * @param {Texture} texture - The texture to update.
202
270
  * @param {Object} [options={}] - The options.
271
+ * @return {number} The current texture generation.
203
272
  */
204
273
  updateTexture( texture, options = {} ) {
205
274
 
206
275
  const textureData = this.get( texture );
207
- if ( textureData.initialized === true && textureData.version === texture.version ) return;
276
+ if ( textureData.initialized === true && textureData.version === texture.version ) return textureData.generation;
277
+
278
+ // render target textures are created with their render target
279
+
280
+ const renderTarget = ( texture.isRenderTargetTexture || texture.isDepthTexture ) ? texture.renderTarget : null;
281
+
282
+ if ( renderTarget !== null && this.get( renderTarget ).initialized !== true ) {
283
+
284
+ this.updateRenderTarget( renderTarget );
285
+
286
+ return textureData.generation;
287
+
288
+ }
208
289
 
209
290
  const isRenderTarget = texture.isRenderTargetTexture || texture.isDepthTexture || texture.isFramebufferTexture;
210
291
  const backend = this.backend;
@@ -296,10 +377,10 @@ class Textures extends DataMap {
296
377
  options.levels = options.needsMipmaps ? this.getMipLevels( texture, width, height ) : 1;
297
378
 
298
379
  // TODO: Uniformly handle mipmap definitions
299
- // Normal textures and compressed cube textures define base level + mips with their mipmap array
380
+ // Normal textures, compressed cube textures and render targets define base level + mips with their mipmap array
300
381
  // Uncompressed cube textures use their mipmap array only for mips (no base level)
301
382
 
302
- if ( texture.isCubeTexture && texture.mipmaps.length > 0 ) options.levels ++;
383
+ if ( texture.isCubeTexture && texture.mipmaps.length > 0 && ! isRenderTarget ) options.levels ++;
303
384
 
304
385
  //
305
386
 
@@ -352,11 +433,15 @@ class Textures extends DataMap {
352
433
 
353
434
  }
354
435
 
355
- if ( texture.source.dataReady === true ) backend.updateTexture( texture, options );
436
+ if ( texture.source.dataReady === true ) {
437
+
438
+ backend.updateTexture( texture, options );
439
+
440
+ texture.clearUpdateRanges();
356
441
 
357
- const skipAutoGeneration = texture.isStorageTexture === true && texture.mipmapsAutoUpdate === false;
442
+ }
358
443
 
359
- if ( options.needsMipmaps && texture.mipmaps.length === 0 && ! skipAutoGeneration ) {
444
+ if ( options.needsMipmaps && getMipmaps( texture ).length === 0 && texture.mipmapsAutoUpdate === true ) {
360
445
 
361
446
  backend.generateMipmaps( texture );
362
447
 
@@ -401,13 +486,23 @@ class Textures extends DataMap {
401
486
 
402
487
  // dispose
403
488
 
404
- textureData.onDispose = () => {
489
+ if ( texture.isRenderTargetTexture !== true ) {
405
490
 
406
- this._destroyTexture( texture );
491
+ textureData.onDispose = () => {
407
492
 
408
- };
493
+ this._destroyTexture( texture );
494
+
495
+ };
496
+
497
+ texture.addEventListener( 'dispose', textureData.onDispose );
498
+
499
+ }
409
500
 
410
- texture.addEventListener( 'dispose', textureData.onDispose );
501
+ // see #34368 why tracking separate remove listeners is required right now
502
+ textureData.ref = new WeakRef( texture );
503
+
504
+ this._tracked.add( textureData.ref );
505
+ this._registry.register( texture, textureData.ref, textureData.ref );
411
506
 
412
507
  }
413
508
 
@@ -415,6 +510,8 @@ class Textures extends DataMap {
415
510
 
416
511
  textureData.version = texture.version;
417
512
 
513
+ return textureData.generation;
514
+
418
515
  }
419
516
 
420
517
  /**
@@ -451,6 +548,8 @@ class Textures extends DataMap {
451
548
 
452
549
  let image = texture.images ? texture.images[ 0 ] : texture.image;
453
550
 
551
+ if ( texture.isCompressedCubeTexture === true ) image = image[ 0 ];
552
+
454
553
  if ( image ) {
455
554
 
456
555
  if ( image.image !== undefined ) image = image.image;
@@ -503,9 +602,11 @@ class Textures extends DataMap {
503
602
 
504
603
  let mipLevelCount;
505
604
 
506
- if ( texture.mipmaps.length > 0 ) {
605
+ const mipmaps = getMipmaps( texture );
507
606
 
508
- mipLevelCount = texture.mipmaps.length;
607
+ if ( mipmaps.length > 0 ) {
608
+
609
+ mipLevelCount = mipmaps.length;
509
610
 
510
611
  } else {
511
612
 
@@ -537,7 +638,7 @@ class Textures extends DataMap {
537
638
  */
538
639
  needsMipmaps( texture ) {
539
640
 
540
- return texture.generateMipmaps === true || texture.mipmaps.length > 0;
641
+ return texture.generateMipmaps === true || getMipmaps( texture ).length > 0;
541
642
 
542
643
  }
543
644
 
@@ -560,6 +661,9 @@ class Textures extends DataMap {
560
661
 
561
662
  renderTarget.removeEventListener( 'dispose', renderTargetData.onDispose );
562
663
 
664
+ this._tracked.delete( renderTargetData.ref );
665
+ this._registry.unregister( renderTargetData.ref );
666
+
563
667
  //
564
668
 
565
669
  for ( let i = 0; i < textures.length; i ++ ) {
@@ -599,6 +703,9 @@ class Textures extends DataMap {
599
703
 
600
704
  texture.removeEventListener( 'dispose', textureData.onDispose );
601
705
 
706
+ this._tracked.delete( textureData.ref );
707
+ this._registry.unregister( textureData.ref );
708
+
602
709
  // if a texture is not ready for use, it falls back to a default texture so it's possible
603
710
  // to use it for rendering. If a texture in this state is disposed, it's important to
604
711
  // not destroy/delete the underlying GPU texture object since it is cached and shared with
@@ -260,6 +260,25 @@ class UniformsGroup extends UniformBuffer {
260
260
 
261
261
  }
262
262
 
263
+ /**
264
+ * Returns a clone of this uniforms group. The clone has its own buffer and update state.
265
+ *
266
+ * @return {UniformsGroup} The cloned uniforms group.
267
+ */
268
+ clone() {
269
+
270
+ const clone = super.clone();
271
+
272
+ clone._buffer = null;
273
+ clone._values = null;
274
+ clone._updateRanges = [];
275
+ clone._updateRangeCache = new Map();
276
+ clone._addedIndices = new Set();
277
+
278
+ return clone;
279
+
280
+ }
281
+
263
282
  /**
264
283
  * Updates a given uniform by calling an update method matching
265
284
  * the uniforms type.
@@ -19,9 +19,6 @@ import { renderOutput } from '../../nodes/display/RenderOutputNode.js';
19
19
  import { RenderTarget } from '../../core/RenderTarget.js';
20
20
  import { context } from '../../nodes/core/ContextNode.js';
21
21
 
22
- const _cameraLPos = /*@__PURE__*/ new Vector3();
23
- const _cameraRPos = /*@__PURE__*/ new Vector3();
24
-
25
22
  const _contextNodeLib = /*@__PURE__*/ new WeakMap();
26
23
 
27
24
  /**
@@ -584,6 +581,9 @@ class XRManager extends EventDispatcher {
584
581
  /**
585
582
  * Returns the XR camera.
586
583
  *
584
+ * The camera's transformation and projection matrix are derived from the first
585
+ * sub camera (e.g. the left eye in a stereo setup).
586
+ *
587
587
  * @return {ArrayCamera} The XR camera.
588
588
  */
589
589
  getCamera() {
@@ -1128,9 +1128,12 @@ class XRManager extends EventDispatcher {
1128
1128
 
1129
1129
  contextNode = context( {
1130
1130
 
1131
- getOutput: ( outputNode ) => {
1131
+ getOutput: ( outputNode, builder ) => {
1132
1132
 
1133
- return renderOutput( outputNode, renderer.toneMapping, renderer.outputColorSpace );
1133
+ const renderOutputNode = renderOutput( outputNode, renderer.toneMapping, renderer.outputColorSpace );
1134
+ renderOutputNode.premultipliedAlpha = builder.material.premultipliedAlpha;
1135
+
1136
+ return renderOutputNode;
1134
1137
 
1135
1138
  },
1136
1139
 
@@ -1424,19 +1427,8 @@ class XRManager extends EventDispatcher {
1424
1427
 
1425
1428
  }
1426
1429
 
1427
- // update projection matrix for proper view frustum culling
1428
-
1429
- if ( cameras.length === 2 ) {
1430
-
1431
- setProjectionFromUnion( cameraXR, cameraL, cameraR );
1432
-
1433
- } else {
1434
-
1435
- // assume single camera setup (AR)
1436
-
1437
- cameraXR.projectionMatrix.copy( cameraL.projectionMatrix );
1438
-
1439
- }
1430
+ cameraXR.projectionMatrix.copy( cameraL.projectionMatrix );
1431
+ cameraXR.projectionMatrixInverse.copy( cameraL.projectionMatrixInverse );
1440
1432
 
1441
1433
  // update user camera and its children
1442
1434
 
@@ -1475,79 +1467,6 @@ class XRManager extends EventDispatcher {
1475
1467
 
1476
1468
  }
1477
1469
 
1478
- /**
1479
- * Assumes 2 cameras that are parallel and share an X-axis, and that
1480
- * the cameras' projection and world matrices have already been set.
1481
- * And that near and far planes are identical for both cameras.
1482
- * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765
1483
- *
1484
- * @param {ArrayCamera} camera - The camera to update.
1485
- * @param {PerspectiveCamera} cameraL - The left camera.
1486
- * @param {PerspectiveCamera} cameraR - The right camera.
1487
- */
1488
- function setProjectionFromUnion( camera, cameraL, cameraR ) {
1489
-
1490
- _cameraLPos.setFromMatrixPosition( cameraL.matrixWorld );
1491
- _cameraRPos.setFromMatrixPosition( cameraR.matrixWorld );
1492
-
1493
- const ipd = _cameraLPos.distanceTo( _cameraRPos );
1494
-
1495
- const projL = cameraL.projectionMatrix.elements;
1496
- const projR = cameraR.projectionMatrix.elements;
1497
-
1498
- // VR systems will have identical far and near planes, and
1499
- // most likely identical top and bottom frustum extents.
1500
- // Use the left camera for these values.
1501
- const near = projL[ 14 ] / ( projL[ 10 ] - 1 );
1502
- const far = projL[ 14 ] / ( projL[ 10 ] + 1 );
1503
- const topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];
1504
- const bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];
1505
-
1506
- const leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];
1507
- const rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];
1508
- const left = near * leftFov;
1509
- const right = near * rightFov;
1510
-
1511
- // Calculate the new camera's position offset from the
1512
- // left camera. xOffset should be roughly half `ipd`.
1513
- const zOffset = ipd / ( - leftFov + rightFov );
1514
- const xOffset = zOffset * - leftFov;
1515
-
1516
- // TODO: Better way to apply this offset?
1517
- cameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );
1518
- camera.translateX( xOffset );
1519
- camera.translateZ( zOffset );
1520
- camera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );
1521
- camera.matrixWorldInverse.copy( camera.matrixWorld ).invert();
1522
-
1523
- // Check if the projection uses an infinite far plane.
1524
- if ( projL[ 10 ] === - 1.0 ) {
1525
-
1526
- // Use the projection matrix from the left eye.
1527
- // The camera offset is sufficient to include the view volumes
1528
- // of both eyes (assuming symmetric projections).
1529
- camera.projectionMatrix.copy( cameraL.projectionMatrix );
1530
- camera.projectionMatrixInverse.copy( cameraL.projectionMatrixInverse );
1531
-
1532
- } else {
1533
-
1534
- // Find the union of the frustum values of the cameras and scale
1535
- // the values so that the near plane's position does not change in world space,
1536
- // although must now be relative to the new union camera.
1537
- const near2 = near + zOffset;
1538
- const far2 = far + zOffset;
1539
- const left2 = left - xOffset;
1540
- const right2 = right + ( ipd - xOffset );
1541
- const top2 = topFov * far / far2 * near2;
1542
- const bottom2 = bottomFov * far / far2 * near2;
1543
-
1544
- camera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );
1545
- camera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();
1546
-
1547
- }
1548
-
1549
- }
1550
-
1551
1470
  /**
1552
1471
  * Updates the world matrices for the given camera based on the parent 3D object.
1553
1472
  *