@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
@@ -57,13 +57,13 @@ const _compareToWebGPU = {
57
57
 
58
58
  const _flipMap = [ 0, 1, 3, 2, 4, 5 ];
59
59
 
60
- function writeTextureLayer( device, textureGPU, mipLevel, layerIndex, mipmap, bytesPerImage, bytesPerRow, rowsPerImage, textureWidth, textureHeight ) {
60
+ function writeTextureLayer( device, textureGPU, mipLevel, layerIndex, mipmap, dataOffset, bytesPerRow, rowsPerImage, textureWidth, textureHeight ) {
61
61
 
62
62
  _texelCopyTextureInfo.texture = textureGPU;
63
63
  _texelCopyTextureInfo.mipLevel = mipLevel;
64
64
  _texelCopyTextureInfo.origin.z = layerIndex;
65
65
 
66
- _texelCopyBufferLayout.offset = layerIndex * bytesPerImage;
66
+ _texelCopyBufferLayout.offset = dataOffset;
67
67
  _texelCopyBufferLayout.bytesPerRow = bytesPerRow;
68
68
  _texelCopyBufferLayout.rowsPerImage = rowsPerImage;
69
69
 
@@ -527,7 +527,7 @@ class WebGPUTextureUtils {
527
527
  const colorTexture = canvasTarget.colorTexture;
528
528
  const colorTextureData = backend.get( colorTexture );
529
529
 
530
- if ( colorTexture.width === width && colorTexture.height === height && colorTexture.samples === samples ) {
530
+ if ( colorTextureData.texture !== undefined && colorTexture.width === width && colorTexture.height === height && colorTexture.samples === samples ) {
531
531
 
532
532
  return colorTextureData.texture;
533
533
 
@@ -552,8 +552,8 @@ class WebGPUTextureUtils {
552
552
 
553
553
  //
554
554
 
555
- colorTexture.source.width = width;
556
- colorTexture.source.height = height;
555
+ colorTexture.image.width = width;
556
+ colorTexture.image.height = height;
557
557
  colorTexture.samples = samples;
558
558
 
559
559
  colorTextureData.texture = colorBuffer;
@@ -695,7 +695,15 @@ class WebGPUTextureUtils {
695
695
 
696
696
  } else if ( texture.isCompressedTexture || texture.isCompressedArrayTexture ) {
697
697
 
698
- if ( texture.isCompressedArrayTexture && texture.layerUpdates.size > 0 ) {
698
+ if ( texture.isCompressedCubeTexture ) {
699
+
700
+ for ( let i = 0; i < 6; i ++ ) {
701
+
702
+ this._copyCompressedBufferToTexture( texture.image[ i ].mipmaps, textureData.texture, textureDescriptorGPU, null, i );
703
+
704
+ }
705
+
706
+ } else if ( texture.isCompressedArrayTexture && texture.layerUpdates.size > 0 ) {
699
707
 
700
708
  this._copyCompressedBufferToTexture( texture.mipmaps, textureData.texture, textureDescriptorGPU, texture.layerUpdates );
701
709
 
@@ -809,10 +817,10 @@ class WebGPUTextureUtils {
809
817
  const format = textureData.textureDescriptorGPU.format;
810
818
  const bytesPerTexel = this._getBytesPerTexel( format );
811
819
 
812
- let bytesPerRow = width * bytesPerTexel;
813
- bytesPerRow = Math.ceil( bytesPerRow / 256 ) * 256; // Align to 256 bytes
820
+ const unpaddedBytesPerRow = width * bytesPerTexel;
821
+ const bytesPerRow = Math.ceil( unpaddedBytesPerRow / 256 ) * 256; // copyTextureToBuffer() requires a multiple of 256
814
822
 
815
- _bufferDescriptor.size = ( ( height - 1 ) * bytesPerRow ) + ( width * bytesPerTexel ); // see https://github.com/mrdoob/three.js/issues/31658#issuecomment-3229442010
823
+ _bufferDescriptor.size = height * bytesPerRow; // multiple of 256, so it also meets the 4-byte size alignment required by mapAsync()
816
824
  _bufferDescriptor.usage = GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ;
817
825
 
818
826
  const readBuffer = device.createBuffer( _bufferDescriptor );
@@ -848,11 +856,22 @@ class WebGPUTextureUtils {
848
856
 
849
857
  await readBuffer.mapAsync( GPUMapMode.READ );
850
858
 
851
- const buffer = readBuffer.getMappedRange().slice();
859
+ // remove the row padding so the result is tightly packed
860
+
861
+ const paddedData = new Uint8Array( readBuffer.getMappedRange() );
862
+ const data = new Uint8Array( unpaddedBytesPerRow * height );
863
+
864
+ for ( let row = 0; row < height; row ++ ) {
865
+
866
+ const offset = row * bytesPerRow;
867
+
868
+ data.set( paddedData.subarray( offset, offset + unpaddedBytesPerRow ), row * unpaddedBytesPerRow );
869
+
870
+ }
852
871
 
853
872
  readBuffer.destroy();
854
873
 
855
- return new typedArrayType( buffer );
874
+ return new typedArrayType( data.buffer );
856
875
 
857
876
  }
858
877
 
@@ -1130,8 +1149,9 @@ class WebGPUTextureUtils {
1130
1149
  * @param {GPUTexture} textureGPU - The GPU texture.
1131
1150
  * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
1132
1151
  * @param {?Set<number>} [layerUpdates=null] - The layer indices to update.
1152
+ * @param {number} [faceIndex=-1] - The cube face the mipmaps belong to. Only relevant for compressed cube maps.
1133
1153
  */
1134
- _copyCompressedBufferToTexture( mipmaps, textureGPU, textureDescriptorGPU, layerUpdates = null ) {
1154
+ _copyCompressedBufferToTexture( mipmaps, textureGPU, textureDescriptorGPU, layerUpdates = null, faceIndex = - 1 ) {
1135
1155
 
1136
1156
  // @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()
1137
1157
 
@@ -1155,11 +1175,15 @@ class WebGPUTextureUtils {
1155
1175
  const textureWidth = Math.ceil( width / blockData.width ) * blockData.width;
1156
1176
  const textureHeight = rowsPerImage * blockData.height;
1157
1177
 
1158
- if ( activeLayerUpdates !== null ) {
1178
+ if ( faceIndex !== - 1 ) {
1179
+
1180
+ writeTextureLayer( device, textureGPU, i, faceIndex, mipmap, 0, bytesPerRow, rowsPerImage, textureWidth, textureHeight );
1181
+
1182
+ } else if ( activeLayerUpdates !== null ) {
1159
1183
 
1160
1184
  for ( const layerIndex of activeLayerUpdates ) {
1161
1185
 
1162
- writeTextureLayer( device, textureGPU, i, layerIndex, mipmap, bytesPerImage, bytesPerRow, rowsPerImage, textureWidth, textureHeight );
1186
+ writeTextureLayer( device, textureGPU, i, layerIndex, mipmap, layerIndex * bytesPerImage, bytesPerRow, rowsPerImage, textureWidth, textureHeight );
1163
1187
 
1164
1188
  }
1165
1189
 
@@ -1167,7 +1191,7 @@ class WebGPUTextureUtils {
1167
1191
 
1168
1192
  for ( let layerIndex = 0; layerIndex < depth; layerIndex ++ ) {
1169
1193
 
1170
- writeTextureLayer( device, textureGPU, i, layerIndex, mipmap, bytesPerImage, bytesPerRow, rowsPerImage, textureWidth, textureHeight );
1194
+ writeTextureLayer( device, textureGPU, i, layerIndex, mipmap, layerIndex * bytesPerImage, bytesPerRow, rowsPerImage, textureWidth, textureHeight );
1171
1195
 
1172
1196
  }
1173
1197
 
@@ -1178,11 +1202,11 @@ class WebGPUTextureUtils {
1178
1202
  }
1179
1203
 
1180
1204
  /**
1181
- * This method is only relevant for compressed texture formats. It returns a block
1182
- * data descriptor for the given GPU compressed texture format.
1205
+ * This method is only relevant for compressed textures. It returns a block
1206
+ * data descriptor for the given GPU texture format.
1183
1207
  *
1184
1208
  * @private
1185
- * @param {string} format - The GPU compressed texture format.
1209
+ * @param {string} format - The GPU texture format.
1186
1210
  * @return {Object} The block data descriptor.
1187
1211
  */
1188
1212
  _getBlockData( format ) {
@@ -1218,6 +1242,8 @@ class WebGPUTextureUtils {
1218
1242
  if ( format === GPUTextureFormat.ASTC12x10Unorm || format === GPUTextureFormat.ASTC12x10UnormSRGB ) return { byteLength: 16, width: 12, height: 10 };
1219
1243
  if ( format === GPUTextureFormat.ASTC12x12Unorm || format === GPUTextureFormat.ASTC12x12UnormSRGB ) return { byteLength: 16, width: 12, height: 12 };
1220
1244
 
1245
+ return { byteLength: this._getBytesPerTexel( format ), width: 1, height: 1 }; // uncompressed data
1246
+
1221
1247
  }
1222
1248
 
1223
1249
  /**
@@ -1603,7 +1629,17 @@ export function getFormat( texture, device ) {
1603
1629
  break;
1604
1630
 
1605
1631
  case RGBAFormat:
1606
- formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.RGBA8UnormSRGB : GPUTextureFormat.RGBA8Unorm;
1632
+
1633
+ if ( type === HalfFloatType ) {
1634
+
1635
+ formatGPU = GPUTextureFormat.RGBA16Float;
1636
+
1637
+ } else {
1638
+
1639
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.RGBA8UnormSRGB : GPUTextureFormat.RGBA8Unorm;
1640
+
1641
+ }
1642
+
1607
1643
  break;
1608
1644
 
1609
1645
  default:
@@ -1,5 +1,5 @@
1
1
  import { HalfFloatType, UnsignedByteType } from '../../../constants.js';
2
- import { GPUPrimitiveTopology, GPUTextureFormat } from './WebGPUConstants.js';
2
+ import { GPUIndexFormat, GPUPrimitiveTopology, GPUTextureFormat } from './WebGPUConstants.js';
3
3
 
4
4
  const _commandList = [ null ];
5
5
 
@@ -177,7 +177,7 @@ class WebGPUUtils {
177
177
 
178
178
  if ( renderContext.textures !== null ) {
179
179
 
180
- format = this.getTextureFormatGPU( renderContext.textures[ 0 ] );
180
+ format = renderContext.textures.length > 0 ? this.getTextureFormatGPU( renderContext.textures[ 0 ] ) : null;
181
181
 
182
182
  } else {
183
183
 
@@ -219,7 +219,7 @@ class WebGPUUtils {
219
219
 
220
220
  if ( renderContext.textures !== null ) {
221
221
 
222
- return renderContext.textures[ 0 ].colorSpace;
222
+ return renderContext.textures[ 0 ]?.colorSpace;
223
223
 
224
224
  }
225
225
 
@@ -243,6 +243,23 @@ class WebGPUUtils {
243
243
 
244
244
  }
245
245
 
246
+ /**
247
+ * Returns the GPU strip index format for the given object and geometry.
248
+ *
249
+ * @param {Object3D} object - The 3D object.
250
+ * @param {BufferGeometry} geometry - The geometry.
251
+ * @return {string|undefined} The GPU strip index format. `undefined` if the object is not rendered as an indexed strip.
252
+ */
253
+ getStripIndexFormat( object, geometry ) {
254
+
255
+ if ( geometry.index !== null && object.isLine === true && object.isLineSegments !== true ) {
256
+
257
+ return ( geometry.index.array instanceof Uint16Array ) ? GPUIndexFormat.Uint16 : GPUIndexFormat.Uint32;
258
+
259
+ }
260
+
261
+ }
262
+
246
263
  /**
247
264
  * Returns a modified sample count from the given sample count value.
248
265
  *
@@ -248,7 +248,7 @@ class WebXRController {
248
248
  if ( jointPose !== null ) {
249
249
 
250
250
  joint.matrix.fromArray( jointPose.transform.matrix );
251
- joint.matrix.decompose( joint.position, joint.rotation, joint.scale );
251
+ joint.matrix.decompose( joint.position, joint.quaternion, joint.scale );
252
252
  joint.matrixWorldNeedsUpdate = true;
253
253
  joint.jointRadius = jointPose.radius;
254
254
 
@@ -297,7 +297,7 @@ class WebXRController {
297
297
  if ( gripPose !== null ) {
298
298
 
299
299
  grip.matrix.fromArray( gripPose.transform.matrix );
300
- grip.matrix.decompose( grip.position, grip.rotation, grip.scale );
300
+ grip.matrix.decompose( grip.position, grip.quaternion, grip.scale );
301
301
  grip.matrixWorldNeedsUpdate = true;
302
302
 
303
303
  if ( gripPose.linearVelocity ) {
@@ -353,7 +353,7 @@ class WebXRController {
353
353
  if ( inputPose !== null ) {
354
354
 
355
355
  targetRay.matrix.fromArray( inputPose.transform.matrix );
356
- targetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );
356
+ targetRay.matrix.decompose( targetRay.position, targetRay.quaternion, targetRay.scale );
357
357
  targetRay.matrixWorldNeedsUpdate = true;
358
358
 
359
359
  if ( inputPose.linearVelocity ) {
@@ -2,7 +2,6 @@ import { ArrayCamera } from '../../cameras/ArrayCamera.js';
2
2
  import { EventDispatcher } from '../../core/EventDispatcher.js';
3
3
  import { PerspectiveCamera } from '../../cameras/PerspectiveCamera.js';
4
4
  import { Vector2 } from '../../math/Vector2.js';
5
- import { Vector3 } from '../../math/Vector3.js';
6
5
  import { Vector4 } from '../../math/Vector4.js';
7
6
  import { RAD2DEG } from '../../math/MathUtils.js';
8
7
  import { WebGLAnimation } from '../webgl/WebGLAnimation.js';
@@ -632,82 +631,6 @@ class WebXRManager extends EventDispatcher {
632
631
 
633
632
  //
634
633
 
635
- const cameraLPos = new Vector3();
636
- const cameraRPos = new Vector3();
637
-
638
- /**
639
- * Assumes 2 cameras that are parallel and share an X-axis, and that
640
- * the cameras' projection and world matrices have already been set.
641
- * And that near and far planes are identical for both cameras.
642
- * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765
643
- *
644
- * @param {ArrayCamera} camera - The camera to update.
645
- * @param {PerspectiveCamera} cameraL - The left camera.
646
- * @param {PerspectiveCamera} cameraR - The right camera.
647
- */
648
- function setProjectionFromUnion( camera, cameraL, cameraR ) {
649
-
650
- cameraLPos.setFromMatrixPosition( cameraL.matrixWorld );
651
- cameraRPos.setFromMatrixPosition( cameraR.matrixWorld );
652
-
653
- const ipd = cameraLPos.distanceTo( cameraRPos );
654
-
655
- const projL = cameraL.projectionMatrix.elements;
656
- const projR = cameraR.projectionMatrix.elements;
657
-
658
- // VR systems will have identical far and near planes, and
659
- // most likely identical top and bottom frustum extents.
660
- // Use the left camera for these values.
661
- const near = projL[ 14 ] / ( projL[ 10 ] - 1 );
662
- const far = projL[ 14 ] / ( projL[ 10 ] + 1 );
663
- const topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];
664
- const bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];
665
-
666
- const leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];
667
- const rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];
668
- const left = near * leftFov;
669
- const right = near * rightFov;
670
-
671
- // Calculate the new camera's position offset from the
672
- // left camera. xOffset should be roughly half `ipd`.
673
- const zOffset = ipd / ( - leftFov + rightFov );
674
- const xOffset = zOffset * - leftFov;
675
-
676
- // TODO: Better way to apply this offset?
677
- cameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );
678
- camera.translateX( xOffset );
679
- camera.translateZ( zOffset );
680
- camera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );
681
- camera.matrixWorldInverse.copy( camera.matrixWorld ).invert();
682
-
683
- // Check if the projection uses an infinite far plane.
684
- if ( projL[ 10 ] === - 1.0 ) {
685
-
686
- // Use the projection matrix from the left eye.
687
- // The camera offset is sufficient to include the view volumes
688
- // of both eyes (assuming symmetric projections).
689
- camera.projectionMatrix.copy( cameraL.projectionMatrix );
690
- camera.projectionMatrixInverse.copy( cameraL.projectionMatrixInverse );
691
-
692
- } else {
693
-
694
- // Find the union of the frustum values of the cameras and scale
695
- // the values so that the near plane's position does not change in world space,
696
- // although must now be relative to the new union camera.
697
- const near2 = near + zOffset;
698
- const far2 = far + zOffset;
699
- const left2 = left - xOffset;
700
- const right2 = right + ( ipd - xOffset );
701
- const top2 = topFov * far / far2 * near2;
702
- const bottom2 = bottomFov * far / far2 * near2;
703
-
704
- camera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );
705
- camera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();
706
-
707
- }
708
-
709
- }
710
-
711
634
  function updateCamera( camera, parent ) {
712
635
 
713
636
  if ( parent === null ) {
@@ -780,19 +703,8 @@ class WebXRManager extends EventDispatcher {
780
703
 
781
704
  }
782
705
 
783
- // update projection matrix for proper view frustum culling
784
-
785
- if ( cameras.length === 2 ) {
786
-
787
- setProjectionFromUnion( cameraXR, cameraL, cameraR );
788
-
789
- } else {
790
-
791
- // assume single camera setup (AR)
792
-
793
- cameraXR.projectionMatrix.copy( cameraL.projectionMatrix );
794
-
795
- }
706
+ cameraXR.projectionMatrix.copy( cameraL.projectionMatrix );
707
+ cameraXR.projectionMatrixInverse.copy( cameraL.projectionMatrixInverse );
796
708
 
797
709
  // update user camera and its children
798
710
 
@@ -843,6 +755,9 @@ class WebXRManager extends EventDispatcher {
843
755
  * the XR camera. If you need the fov on app level, you have to compute in
844
756
  * manually from the XR camera's projection matrices.
845
757
  *
758
+ * The camera's transformation and projection matrix are derived from the first
759
+ * sub camera (e.g. the left eye in a stereo setup).
760
+ *
846
761
  * @return {ArrayCamera} The XR camera.
847
762
  */
848
763
  this.getCamera = function () {
@@ -124,9 +124,9 @@ class Scene extends Object3D {
124
124
 
125
125
  super.copy( source, recursive );
126
126
 
127
- if ( source.background !== null ) this.background = source.background.clone();
128
- if ( source.environment !== null ) this.environment = source.environment.clone();
129
- if ( source.fog !== null ) this.fog = source.fog.clone();
127
+ this.background = source.background !== null ? source.background.clone() : null;
128
+ this.environment = source.environment !== null ? source.environment.clone() : null;
129
+ this.fog = source.fog !== null ? source.fog.clone() : null;
130
130
 
131
131
  this.backgroundBlurriness = source.backgroundBlurriness;
132
132
  this.backgroundIntensity = source.backgroundIntensity;
@@ -135,7 +135,7 @@ class Scene extends Object3D {
135
135
  this.environmentIntensity = source.environmentIntensity;
136
136
  this.environmentRotation.copy( source.environmentRotation );
137
137
 
138
- if ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();
138
+ this.overrideMaterial = source.overrideMaterial !== null ? source.overrideMaterial.clone() : null;
139
139
 
140
140
  this.matrixAutoUpdate = source.matrixAutoUpdate;
141
141
 
@@ -12,7 +12,7 @@ class CompressedTexture extends Texture {
12
12
  /**
13
13
  * Constructs a new compressed texture.
14
14
  *
15
- * @param {Array<Object>} mipmaps - This array holds for all mipmaps (including the bases mip)
15
+ * @param {Array<Object>} [mipmaps=[]] - This array holds for all mipmaps (including the bases mip)
16
16
  * the data and dimensions.
17
17
  * @param {number} width - The width of the texture.
18
18
  * @param {number} height - The height of the texture.
@@ -26,7 +26,7 @@ class CompressedTexture extends Texture {
26
26
  * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
27
27
  * @param {string} [colorSpace=NoColorSpace] - The color space.
28
28
  */
29
- constructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, colorSpace ) {
29
+ constructor( mipmaps = [], width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, colorSpace ) {
30
30
 
31
31
  super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );
32
32
 
@@ -19,8 +19,8 @@ class DepthTexture extends Texture {
19
19
  * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.
20
20
  * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
21
21
  * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
22
- * @param {number} [magFilter=LinearFilter] - The mag filter value.
23
- * @param {number} [minFilter=LinearFilter] - The min filter value.
22
+ * @param {number} [magFilter=NearestFilter] - The mag filter value.
23
+ * @param {number} [minFilter=NearestFilter] - The min filter value.
24
24
  * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
25
25
  * @param {number} [format=DepthFormat] - The texture format.
26
26
  * @param {number} [depth=1] - The depth of the texture.
@@ -1,4 +1,5 @@
1
1
  import { Texture } from './Texture.js';
2
+ import { TextureSource } from './TextureSource.js';
2
3
  import { NearestFilter } from '../constants.js';
3
4
 
4
5
  /**
@@ -80,6 +81,16 @@ class FramebufferTexture extends Texture {
80
81
 
81
82
  }
82
83
 
84
+ copy( source ) {
85
+
86
+ super.copy( source );
87
+
88
+ this.source = new TextureSource( Object.assign( {}, source.image ) );
89
+
90
+ return this;
91
+
92
+ }
93
+
83
94
  }
84
95
 
85
96
  export { FramebufferTexture };
@@ -103,7 +103,7 @@ class Texture extends EventDispatcher {
103
103
  * How the texture is applied to the object. The value `UVMapping`
104
104
  * is the default, where texture or uv coordinates are used to apply the map.
105
105
  *
106
- * @type {(UVMapping|CubeReflectionMapping|CubeRefractionMapping|EquirectangularReflectionMapping|EquirectangularRefractionMapping|CubeUVReflectionMapping)}
106
+ * @type {(UVMapping|CubeReflectionMapping|CubeRefractionMapping|EquirectangularReflectionMapping|EquirectangularRefractionMapping)}
107
107
  * @default UVMapping
108
108
  */
109
109
  this.mapping = mapping;
@@ -256,6 +256,17 @@ class Texture extends EventDispatcher {
256
256
  */
257
257
  this.generateMipmaps = true;
258
258
 
259
+ /**
260
+ * Whether the renderer regenerates the mipmaps automatically whenever the
261
+ * texture is uploaded, rendered to or copied into. Set this to `false` to
262
+ * pause the regeneration and write the mip levels yourself. Requires
263
+ * {@link Texture#generateMipmaps}.
264
+ *
265
+ * @type {boolean}
266
+ * @default true
267
+ */
268
+ this.mipmapsAutoUpdate = true;
269
+
259
270
  /**
260
271
  * If set to `true`, the alpha channel, if present, is multiplied into the
261
272
  * color channels when the texture is uploaded to the GPU.
@@ -368,6 +379,16 @@ class Texture extends EventDispatcher {
368
379
  */
369
380
  this.pmremVersion = 0;
370
381
 
382
+ /**
383
+ * Indicates whether this texture is a prefiltered cube environment map generated
384
+ * by {@link PMREMGenerator}.
385
+ *
386
+ * @type {boolean}
387
+ * @readonly
388
+ * @default false
389
+ */
390
+ this.isPMREMTexture = false;
391
+
371
392
  /**
372
393
  * Whether the texture should use one of the 16 bit integer formats which are normalized
373
394
  * to [0, 1] or [-1, 1] (depending on signed/unsigned) when sampled.
@@ -503,6 +524,7 @@ class Texture extends EventDispatcher {
503
524
  this.matrix.copy( source.matrix );
504
525
 
505
526
  this.generateMipmaps = source.generateMipmaps;
527
+ this.mipmapsAutoUpdate = source.mipmapsAutoUpdate;
506
528
  this.premultiplyAlpha = source.premultiplyAlpha;
507
529
  this.flipY = source.flipY;
508
530
  this.unpackAlignment = source.unpackAlignment;
@@ -510,6 +532,7 @@ class Texture extends EventDispatcher {
510
532
 
511
533
  this.renderTarget = source.renderTarget;
512
534
  this.isRenderTargetTexture = source.isRenderTargetTexture;
535
+ this.isPMREMTexture = source.isPMREMTexture;
513
536
  this.isArrayTexture = source.isArrayTexture;
514
537
 
515
538
  this.userData = JSON.parse( JSON.stringify( source.userData ) );
@@ -621,6 +644,7 @@ class Texture extends EventDispatcher {
621
644
  flipY: this.flipY,
622
645
 
623
646
  generateMipmaps: this.generateMipmaps,
647
+ mipmapsAutoUpdate: this.mipmapsAutoUpdate,
624
648
  premultiplyAlpha: this.premultiplyAlpha,
625
649
  unpackAlignment: this.unpackAlignment
626
650
 
@@ -642,6 +666,10 @@ class Texture extends EventDispatcher {
642
666
  * Frees the GPU-related resources allocated by this instance. Call this
643
667
  * method whenever this instance is no longer used in your app.
644
668
  *
669
+ * Textures that belong to a render target are managed by the render target.
670
+ * Calling this method on such a texture only dispatches the dispose event but
671
+ * does not free any GPU resources. Use {@link RenderTarget#dispose} instead.
672
+ *
645
673
  * @fires Texture#dispose
646
674
  */
647
675
  dispose() {
@@ -94,7 +94,7 @@ class TextureSource {
94
94
 
95
95
  } else if ( data !== null ) {
96
96
 
97
- target.set( data.width, data.height, data.depth || 0 );
97
+ target.set( data.width || 0, data.height || 0, data.depth || 0 );
98
98
 
99
99
  } else {
100
100
 
package/src/upe.js CHANGED
@@ -7,7 +7,7 @@ import { REVISION } from './constants.js';
7
7
  *
8
8
  * @type {number}
9
9
  */
10
- export const UPE_REVISION = 10;
10
+ export const UPE_REVISION = 11;
11
11
 
12
12
  /**
13
13
  * The build's name: `r<three.js revision>p<our revision>`, such as `r186p10`.
package/src/utils.js CHANGED
@@ -479,14 +479,14 @@ function toReversedProjectionMatrix( projectionMatrix ) {
479
479
  * @type {Object}
480
480
  */
481
481
  const ReversedDepthFuncs = {
482
- [ NeverDepth ]: AlwaysDepth,
482
+ [ NeverDepth ]: NeverDepth,
483
483
  [ LessDepth ]: GreaterDepth,
484
- [ EqualDepth ]: NotEqualDepth,
484
+ [ EqualDepth ]: EqualDepth,
485
485
  [ LessEqualDepth ]: GreaterEqualDepth,
486
486
 
487
- [ AlwaysDepth ]: NeverDepth,
487
+ [ AlwaysDepth ]: AlwaysDepth,
488
488
  [ GreaterDepth ]: LessDepth,
489
- [ NotEqualDepth ]: EqualDepth,
489
+ [ NotEqualDepth ]: NotEqualDepth,
490
490
  [ GreaterEqualDepth ]: LessEqualDepth,
491
491
  };
492
492