@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
@@ -115,12 +115,20 @@ class Mesh extends Object3D {
115
115
 
116
116
  this.morphTargetInfluences = source.morphTargetInfluences.slice();
117
117
 
118
+ } else {
119
+
120
+ this.morphTargetInfluences = undefined;
121
+
118
122
  }
119
123
 
120
124
  if ( source.morphTargetDictionary !== undefined ) {
121
125
 
122
126
  this.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );
123
127
 
128
+ } else {
129
+
130
+ this.morphTargetDictionary = undefined;
131
+
124
132
  }
125
133
 
126
134
  this.material = Array.isArray( source.material ) ? source.material.slice() : source.material;
@@ -82,6 +82,26 @@ class Points extends Object3D {
82
82
 
83
83
  super.copy( source, recursive );
84
84
 
85
+ if ( source.morphTargetInfluences !== undefined ) {
86
+
87
+ this.morphTargetInfluences = source.morphTargetInfluences.slice();
88
+
89
+ } else {
90
+
91
+ this.morphTargetInfluences = undefined;
92
+
93
+ }
94
+
95
+ if ( source.morphTargetDictionary !== undefined ) {
96
+
97
+ this.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );
98
+
99
+ } else {
100
+
101
+ this.morphTargetDictionary = undefined;
102
+
103
+ }
104
+
85
105
  this.material = Array.isArray( source.material ) ? source.material.slice() : source.material;
86
106
  this.geometry = source.geometry;
87
107
 
@@ -70,6 +70,15 @@ class Skeleton {
70
70
  */
71
71
  this.boneMatrices = null;
72
72
 
73
+ /**
74
+ * An array buffer holding the bone data of the previous frame.
75
+ * Required for computing velocity.
76
+ *
77
+ * @type {?Float32Array}
78
+ * @default null
79
+ */
80
+ this.previousBoneMatrices = null;
81
+
73
82
  /**
74
83
  * A texture holding the bone data for use
75
84
  * in the vertex shader.
@@ -79,6 +88,15 @@ class Skeleton {
79
88
  */
80
89
  this.boneTexture = null;
81
90
 
91
+ /**
92
+ * A texture holding the bone data of the previous frame.
93
+ * Required for computing velocity.
94
+ *
95
+ * @type {?DataTexture}
96
+ * @default null
97
+ */
98
+ this.previousBoneTexture = null;
99
+
82
100
  this.init();
83
101
 
84
102
  }
@@ -305,6 +323,14 @@ class Skeleton {
305
323
 
306
324
  }
307
325
 
326
+ if ( this.previousBoneTexture !== null ) {
327
+
328
+ this.previousBoneTexture.dispose();
329
+
330
+ this.previousBoneTexture = null;
331
+
332
+ }
333
+
308
334
  }
309
335
 
310
336
  /**
@@ -168,8 +168,8 @@ class SkinnedMesh extends Mesh {
168
168
 
169
169
  this.skeleton = source.skeleton;
170
170
 
171
- if ( source.boundingBox !== null ) this.boundingBox = source.boundingBox.clone();
172
- if ( source.boundingSphere !== null ) this.boundingSphere = source.boundingSphere.clone();
171
+ this.boundingBox = source.boundingBox !== null ? source.boundingBox.clone() : null;
172
+ this.boundingSphere = source.boundingSphere !== null ? source.boundingSphere.clone() : null;
173
173
 
174
174
  return this;
175
175
 
@@ -331,7 +331,7 @@ class SkinnedMesh extends Mesh {
331
331
 
332
332
  } else {
333
333
 
334
- _baseVector.set( ...target, 1 );
334
+ _baseVector.set( target.x, target.y, target.z, 1 );
335
335
  target.set( 0, 0, 0 );
336
336
 
337
337
  }
@@ -225,6 +225,16 @@ class Sprite extends Object3D {
225
225
 
226
226
  }
227
227
 
228
+ toJSON( meta ) {
229
+
230
+ const data = super.toJSON( meta );
231
+
232
+ data.object.center = this.center.toArray();
233
+
234
+ return data;
235
+
236
+ }
237
+
228
238
  }
229
239
 
230
240
  function transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {
@@ -20,6 +20,7 @@ import {
20
20
  } from '../constants.js';
21
21
  import { Color } from '../math/Color.js';
22
22
  import { Frustum } from '../math/Frustum.js';
23
+ import { FrustumArray } from '../math/FrustumArray.js';
23
24
  import { Matrix4 } from '../math/Matrix4.js';
24
25
  import { Vector3 } from '../math/Vector3.js';
25
26
  import { Vector4 } from '../math/Vector4.js';
@@ -130,7 +131,7 @@ class WebGLRenderer {
130
131
 
131
132
  const uintClearColor = new Uint32Array( 4 );
132
133
  const intClearColor = new Int32Array( 4 );
133
- const objectPosition = new Vector3();
134
+ const lightProbeGridUniforms = { textures: [], min: [], max: [], resolution: [] };
134
135
 
135
136
  let currentRenderList = null;
136
137
  let currentRenderState = null;
@@ -341,6 +342,7 @@ class WebGLRenderer {
341
342
  // frustum
342
343
 
343
344
  const _frustum = new Frustum();
345
+ const _frustumArray = new FrustumArray();
344
346
 
345
347
  // clipping
346
348
 
@@ -817,7 +819,7 @@ class WebGLRenderer {
817
819
 
818
820
  }
819
821
 
820
- state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).round() );
822
+ state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( getTargetPixelRatio() ).round() );
821
823
 
822
824
  };
823
825
 
@@ -854,7 +856,7 @@ class WebGLRenderer {
854
856
 
855
857
  }
856
858
 
857
- state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).round() );
859
+ state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( getTargetPixelRatio() ).round() );
858
860
 
859
861
  };
860
862
 
@@ -1092,9 +1094,11 @@ class WebGLRenderer {
1092
1094
  background.dispose();
1093
1095
  renderLists.dispose();
1094
1096
  renderStates.dispose();
1097
+ textures.dispose();
1095
1098
  properties.dispose();
1096
1099
  environments.dispose();
1097
1100
  objects.dispose();
1101
+ geometries.dispose();
1098
1102
  bindingStates.dispose();
1099
1103
  uniformsGroups.dispose();
1100
1104
  programCache.dispose();
@@ -1684,7 +1688,16 @@ class WebGLRenderer {
1684
1688
  renderStateStack.push( currentRenderState );
1685
1689
 
1686
1690
  _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
1687
- _frustum.setFromProjectionMatrix( _projScreenMatrix, WebGLCoordinateSystem, camera.reversedDepth );
1691
+
1692
+ if ( camera.isArrayCamera ) {
1693
+
1694
+ _frustumArray.setFromArrayCamera( camera );
1695
+
1696
+ } else {
1697
+
1698
+ _frustum.setFromProjectionMatrix( _projScreenMatrix, WebGLCoordinateSystem, camera.reversedDepth );
1699
+
1700
+ }
1688
1701
 
1689
1702
  _localClippingEnabled = this.localClippingEnabled;
1690
1703
  _clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );
@@ -1694,6 +1707,8 @@ class WebGLRenderer {
1694
1707
 
1695
1708
  renderListStack.push( currentRenderList );
1696
1709
 
1710
+ this.info.render.frame ++; // increment before projectObject(), see #35099
1711
+
1697
1712
  if ( xr.enabled === true && xr.isPresenting === true ) {
1698
1713
 
1699
1714
  const depthSensingMesh = _this.xr.getDepthSensingMesh();
@@ -1726,8 +1741,6 @@ class WebGLRenderer {
1726
1741
 
1727
1742
  //
1728
1743
 
1729
- this.info.render.frame ++;
1730
-
1731
1744
  if ( this.info.autoReset === true ) this.info.reset();
1732
1745
 
1733
1746
  if ( _clippingEnabled === true ) clipping.beginShadows();
@@ -1873,10 +1886,6 @@ class WebGLRenderer {
1873
1886
 
1874
1887
  if ( object.autoUpdate === true ) object.update( camera );
1875
1888
 
1876
- } else if ( object.isLightProbeGrid ) {
1877
-
1878
- currentRenderState.pushLightProbeGrid( object );
1879
-
1880
1889
  } else if ( object.isLight ) {
1881
1890
 
1882
1891
  currentRenderState.pushLight( object );
@@ -1889,7 +1898,9 @@ class WebGLRenderer {
1889
1898
 
1890
1899
  } else if ( object.isSprite ) {
1891
1900
 
1892
- if ( ! object.frustumCulled || object.intersectsFrustum( _frustum ) ) {
1901
+ const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
1902
+
1903
+ if ( ! object.frustumCulled || object.intersectsFrustum( frustum ) ) {
1893
1904
 
1894
1905
  if ( sortObjects ) {
1895
1906
 
@@ -1911,7 +1922,9 @@ class WebGLRenderer {
1911
1922
 
1912
1923
  } else if ( object.isMesh || object.isLine || object.isPoints ) {
1913
1924
 
1914
- if ( ! object.frustumCulled || object.intersectsFrustum( _frustum ) ) {
1925
+ const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
1926
+
1927
+ if ( ! object.frustumCulled || object.intersectsFrustum( frustum ) ) {
1915
1928
 
1916
1929
  const geometry = objects.update( object );
1917
1930
  const material = object.material;
@@ -2184,6 +2197,16 @@ class WebGLRenderer {
2184
2197
 
2185
2198
  }
2186
2199
 
2200
+ function countLightProbeGrids( grids ) {
2201
+
2202
+ let count = 0;
2203
+
2204
+ for ( const grid of grids ) if ( grid.texture !== null ) count ++;
2205
+
2206
+ return count;
2207
+
2208
+ }
2209
+
2187
2210
  function getProgram( material, scene, object ) {
2188
2211
 
2189
2212
  if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...
@@ -2217,6 +2240,7 @@ class WebGLRenderer {
2217
2240
 
2218
2241
  programs = new Map();
2219
2242
  materialProperties.programs = programs;
2243
+ materialProperties.programVariants = new Map();
2220
2244
 
2221
2245
  }
2222
2246
 
@@ -2298,7 +2322,7 @@ class WebGLRenderer {
2298
2322
 
2299
2323
  }
2300
2324
 
2301
- materialProperties.lightProbeGrid = currentRenderState.state.lightProbeGridArray.length > 0;
2325
+ materialProperties.numLightProbeGrids = countLightProbeGrids( currentRenderState.state.lightProbeGridArray );
2302
2326
 
2303
2327
  materialProperties.currentProgram = program;
2304
2328
  materialProperties.uniformsList = null;
@@ -2307,6 +2331,33 @@ class WebGLRenderer {
2307
2331
 
2308
2332
  }
2309
2333
 
2334
+ function getProgramVariant( material, scene, object, colorSpace, toneMapping ) {
2335
+
2336
+ const materialProperties = properties.get( material );
2337
+
2338
+ const programVariantKey = materialProperties.currentProgram.id + ',' + colorSpace + ',' + toneMapping;
2339
+
2340
+ let program = materialProperties.programVariants.get( programVariantKey );
2341
+
2342
+ if ( program === undefined ) {
2343
+
2344
+ program = getProgram( material, scene, object );
2345
+
2346
+ materialProperties.programVariants.set( programVariantKey, program );
2347
+
2348
+ } else {
2349
+
2350
+ materialProperties.currentProgram = program;
2351
+ materialProperties.uniformsList = null;
2352
+ materialProperties.outputColorSpace = colorSpace;
2353
+ materialProperties.toneMapping = toneMapping;
2354
+
2355
+ }
2356
+
2357
+ return program;
2358
+
2359
+ }
2360
+
2310
2361
  function getUniformList( materialProperties ) {
2311
2362
 
2312
2363
  if ( materialProperties.uniformsList === null ) {
@@ -2343,30 +2394,6 @@ class WebGLRenderer {
2343
2394
 
2344
2395
  }
2345
2396
 
2346
- function findLightProbeGrid( volumes, object ) {
2347
-
2348
- if ( volumes.length === 0 ) return null;
2349
-
2350
- if ( volumes.length === 1 ) {
2351
-
2352
- return volumes[ 0 ].texture !== null ? volumes[ 0 ] : null;
2353
-
2354
- }
2355
-
2356
- objectPosition.setFromMatrixPosition( object.matrixWorld );
2357
-
2358
- for ( let i = 0, l = volumes.length; i < l; i ++ ) {
2359
-
2360
- const v = volumes[ i ];
2361
-
2362
- if ( v.texture !== null && v.boundingBox.containsPoint( objectPosition ) ) return v;
2363
-
2364
- }
2365
-
2366
- return null;
2367
-
2368
- }
2369
-
2370
2397
  function setProgram( camera, scene, geometry, material, object ) {
2371
2398
 
2372
2399
  if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...
@@ -2422,6 +2449,7 @@ class WebGLRenderer {
2422
2449
  //
2423
2450
 
2424
2451
  let needsProgramChange = false;
2452
+ let needsProgramVariant = false;
2425
2453
 
2426
2454
  if ( material.version === materialProperties.__version ) {
2427
2455
 
@@ -2429,10 +2457,6 @@ class WebGLRenderer {
2429
2457
 
2430
2458
  needsProgramChange = true;
2431
2459
 
2432
- } else if ( materialProperties.outputColorSpace !== colorSpace ) {
2433
-
2434
- needsProgramChange = true;
2435
-
2436
2460
  } else if ( object.isBatchedMesh && materialProperties.batching === false ) {
2437
2461
 
2438
2462
  needsProgramChange = true;
@@ -2515,17 +2539,17 @@ class WebGLRenderer {
2515
2539
 
2516
2540
  needsProgramChange = true;
2517
2541
 
2518
- } else if ( materialProperties.toneMapping !== toneMapping ) {
2542
+ } else if ( materialProperties.morphTargetsCount !== morphTargetsCount ) {
2519
2543
 
2520
2544
  needsProgramChange = true;
2521
2545
 
2522
- } else if ( materialProperties.morphTargetsCount !== morphTargetsCount ) {
2546
+ } else if ( materialProperties.numLightProbeGrids !== countLightProbeGrids( currentRenderState.state.lightProbeGridArray ) ) {
2523
2547
 
2524
2548
  needsProgramChange = true;
2525
2549
 
2526
- } else if ( !! materialProperties.lightProbeGrid !== ( currentRenderState.state.lightProbeGridArray.length > 0 ) ) {
2550
+ } else if ( materialProperties.outputColorSpace !== colorSpace || materialProperties.toneMapping !== toneMapping ) {
2527
2551
 
2528
- needsProgramChange = true;
2552
+ needsProgramVariant = true;
2529
2553
 
2530
2554
  }
2531
2555
 
@@ -2540,9 +2564,9 @@ class WebGLRenderer {
2540
2564
 
2541
2565
  let program = materialProperties.currentProgram;
2542
2566
 
2543
- if ( needsProgramChange === true ) {
2567
+ if ( needsProgramChange === true || needsProgramVariant === true ) {
2544
2568
 
2545
- program = getProgram( material, scene, object );
2569
+ program = ( needsProgramVariant === true ) ? getProgramVariant( material, scene, object, colorSpace, toneMapping ) : getProgram( material, scene, object );
2546
2570
 
2547
2571
  // notify the node builder that the program has changed so uniforms and update nodes can
2548
2572
  // be cached and triggered.
@@ -2577,19 +2601,6 @@ class WebGLRenderer {
2577
2601
 
2578
2602
  }
2579
2603
 
2580
- if ( materialProperties.needsLights ) {
2581
-
2582
- const objectVolume = findLightProbeGrid( currentRenderState.state.lightProbeGridArray, object );
2583
-
2584
- if ( materialProperties.lightProbeGrid !== objectVolume ) {
2585
-
2586
- materialProperties.lightProbeGrid = objectVolume;
2587
- refreshMaterial = true;
2588
-
2589
- }
2590
-
2591
- }
2592
-
2593
2604
  if ( refreshProgram || _currentCamera !== camera ) {
2594
2605
 
2595
2606
  // common camera uniforms
@@ -2777,14 +2788,29 @@ class WebGLRenderer {
2777
2788
 
2778
2789
  // light probe volume
2779
2790
 
2780
- if ( materialProperties.needsLights && materialProperties.lightProbeGrid ) {
2791
+ if ( materialProperties.needsLights && materialProperties.numLightProbeGrids > 0 ) {
2792
+
2793
+ const grids = lightProbeGridUniforms;
2794
+ let count = 0;
2795
+
2796
+ for ( const grid of currentRenderState.state.lightProbeGridArray ) {
2781
2797
 
2782
- const volume = materialProperties.lightProbeGrid;
2798
+ if ( grid.texture === null ) continue;
2783
2799
 
2784
- m_uniforms.probesSH.value = volume.texture;
2785
- m_uniforms.probesMin.value.copy( volume.boundingBox.min );
2786
- m_uniforms.probesMax.value.copy( volume.boundingBox.max );
2787
- m_uniforms.probesResolution.value.copy( volume.resolution );
2800
+ grids.textures[ count ] = grid.texture;
2801
+ grids.min[ count ] = grid.boundingBox.min;
2802
+ grids.max[ count ] = grid.boundingBox.max;
2803
+ grids.resolution[ count ] = grid.resolution;
2804
+ count ++;
2805
+
2806
+ }
2807
+
2808
+ for ( const key in grids ) grids[ key ].length = count;
2809
+
2810
+ m_uniforms.probesSH.value = grids.textures;
2811
+ m_uniforms.probesMin.value = grids.min;
2812
+ m_uniforms.probesMax.value = grids.max;
2813
+ m_uniforms.probesResolution.value = grids.resolution;
2788
2814
 
2789
2815
  }
2790
2816
 
@@ -3144,6 +3170,9 @@ class WebGLRenderer {
3144
3170
 
3145
3171
  framebuffer = framebuffer[ activeCubeFaceIndex ];
3146
3172
 
3173
+ // Custom mip chains store one framebuffer per level; read level 0.
3174
+ if ( Array.isArray( framebuffer ) ) framebuffer = framebuffer[ 0 ];
3175
+
3147
3176
  }
3148
3177
 
3149
3178
  if ( framebuffer ) {
@@ -3226,6 +3255,9 @@ class WebGLRenderer {
3226
3255
 
3227
3256
  framebuffer = framebuffer[ activeCubeFaceIndex ];
3228
3257
 
3258
+ // Custom mip chains store one framebuffer per level; read level 0.
3259
+ if ( Array.isArray( framebuffer ) ) framebuffer = framebuffer[ 0 ];
3260
+
3229
3261
  }
3230
3262
 
3231
3263
  if ( framebuffer ) {
@@ -3450,7 +3482,7 @@ class WebGLRenderer {
3450
3482
 
3451
3483
  }
3452
3484
 
3453
- _gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, _gl.DEPTH_BUFFER_BIT, _gl.NEAREST );
3485
+ _gl.blitFramebuffer( minX, minY, minX + width, minY + height, dstX, dstY, dstX + width, dstY + height, _gl.DEPTH_BUFFER_BIT, _gl.NEAREST );
3454
3486
 
3455
3487
  }
3456
3488
 
@@ -3493,7 +3525,7 @@ class WebGLRenderer {
3493
3525
  // copy the data using the fastest function that can achieve the copy
3494
3526
  if ( srcLevel !== 0 ) {
3495
3527
 
3496
- _gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, _gl.COLOR_BUFFER_BIT, _gl.NEAREST );
3528
+ _gl.blitFramebuffer( minX, minY, minX + width, minY + height, dstX, dstY, dstX + width, dstY + height, _gl.COLOR_BUFFER_BIT, _gl.NEAREST );
3497
3529
 
3498
3530
  } else if ( isDst3D ) {
3499
3531
 
@@ -3559,7 +3591,7 @@ class WebGLRenderer {
3559
3591
  state.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );
3560
3592
 
3561
3593
  // Generate mipmaps only when copying level 0
3562
- if ( dstLevel === 0 && dstTexture.generateMipmaps ) {
3594
+ if ( dstLevel === 0 && dstTexture.generateMipmaps === true && dstTexture.mipmapsAutoUpdate === true ) {
3563
3595
 
3564
3596
  _gl.generateMipmap( glTarget );
3565
3597
 
@@ -3698,6 +3730,7 @@ class WebGLRenderer {
3698
3730
  * @property {boolean} [depth=true] Whether the drawing buffer has a depth buffer of at least 16 bits.
3699
3731
  * @property {boolean} [logarithmicDepthBuffer=false] Whether to use a logarithmic depth buffer. It may be necessary to use this if dealing with huge differences in scale in a single scene.
3700
3732
  * Note that this setting uses `gl_FragDepth` if available which disables the Early Fragment Test optimization and can cause a decrease in performance.
3733
+ * It is ignored when a reversed depth buffer is in use.
3701
3734
  * @property {boolean} [reversedDepthBuffer=false] Whether to use a reverse depth buffer. Requires the `EXT_clip_control` extension.
3702
3735
  * This is a more faster and accurate version than logarithmic depth buffer.
3703
3736
  * @property {number} [outputBufferType=UnsignedByteType] Defines the type of the output buffer. Use `HalfFloatType` for HDR rendering with tone mapping and post-processing support.
@@ -3709,7 +3742,8 @@ class WebGLRenderer {
3709
3742
  * @typedef {Object} WebGLRenderer~Capabilities
3710
3743
  * @property {Function} getMaxAnisotropy - Returns the maximum available anisotropy.
3711
3744
  * @property {Function} getMaxPrecision - Returns the maximum available precision for vertex and fragment shaders.
3712
- * @property {boolean} logarithmicDepthBuffer - `true` if `logarithmicDepthBuffer` was set to `true` in the constructor.
3745
+ * @property {boolean} logarithmicDepthBuffer - `true` if `logarithmicDepthBuffer` was set to `true` in the constructor
3746
+ * and no reversed depth buffer is in use.
3713
3747
  * @property {number} maxAttributes - The number of shader attributes that can be used by the vertex shader.
3714
3748
  * @property {number} maxCubemapSize - Maximum height * width of cube map textures that a shader can use.
3715
3749
  * @property {number} maxFragmentUniforms - The number of uniforms that can be used by a fragment shader.
@@ -64,10 +64,12 @@ class Animation {
64
64
  }
65
65
 
66
66
  /**
67
- * Starts the internal animation loop.
67
+ * Starts the internal animation loop, if it is not running yet.
68
68
  */
69
69
  start() {
70
70
 
71
+ if ( this._requestId !== null ) return;
72
+
71
73
  const update = ( time, xrFrame ) => {
72
74
 
73
75
  this._requestId = this._context.requestAnimationFrame( update );
@@ -162,6 +164,8 @@ class Animation {
162
164
 
163
165
  this.stop();
164
166
 
167
+ this._animationLoop = null;
168
+
165
169
  }
166
170
 
167
171
  }