@plastic-software/three 0.180.0 → 0.181.2

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 (357) hide show
  1. package/build/three.cjs +944 -487
  2. package/build/three.core.js +506 -327
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +436 -164
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +8 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +3753 -1177
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +3752 -1176
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  13. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  14. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  15. package/examples/jsm/controls/ArcballControls.js +1 -1
  16. package/examples/jsm/controls/DragControls.js +1 -1
  17. package/examples/jsm/controls/FirstPersonControls.js +1 -1
  18. package/examples/jsm/controls/FlyControls.js +1 -1
  19. package/examples/jsm/controls/OrbitControls.js +2 -2
  20. package/examples/jsm/controls/PointerLockControls.js +2 -2
  21. package/examples/jsm/controls/TrackballControls.js +1 -1
  22. package/examples/jsm/controls/TransformControls.js +1 -1
  23. package/examples/jsm/effects/AsciiEffect.js +8 -8
  24. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  25. package/examples/jsm/exporters/EXRExporter.js +1 -1
  26. package/examples/jsm/exporters/GLTFExporter.js +3 -3
  27. package/examples/jsm/exporters/USDZExporter.js +9 -2
  28. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  29. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  30. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  31. package/examples/jsm/geometries/TextGeometry.js +3 -2
  32. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  33. package/examples/jsm/helpers/ViewHelper.js +43 -5
  34. package/examples/jsm/inspector/Inspector.js +427 -0
  35. package/examples/jsm/inspector/RendererInspector.js +415 -0
  36. package/examples/jsm/inspector/tabs/Console.js +204 -0
  37. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  38. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  39. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  40. package/examples/jsm/inspector/ui/Graph.js +95 -0
  41. package/examples/jsm/inspector/ui/Item.js +170 -0
  42. package/examples/jsm/inspector/ui/List.js +75 -0
  43. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  44. package/examples/jsm/inspector/ui/Style.js +654 -0
  45. package/examples/jsm/inspector/ui/Tab.js +46 -0
  46. package/examples/jsm/inspector/ui/Values.js +423 -0
  47. package/examples/jsm/inspector/ui/utils.js +56 -0
  48. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  49. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  50. package/examples/jsm/interactive/SelectionBox.js +30 -0
  51. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  52. package/examples/jsm/loaders/3MFLoader.js +1 -1
  53. package/examples/jsm/loaders/ColladaLoader.js +2 -2
  54. package/examples/jsm/loaders/DDSLoader.js +1 -1
  55. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  56. package/examples/jsm/loaders/FBXLoader.js +2 -2
  57. package/examples/jsm/loaders/FontLoader.js +23 -5
  58. package/examples/jsm/loaders/GLTFLoader.js +5 -3
  59. package/examples/jsm/loaders/KTX2Loader.js +28 -21
  60. package/examples/jsm/loaders/KTXLoader.js +2 -2
  61. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  62. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  63. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  64. package/examples/jsm/loaders/LWOLoader.js +2 -2
  65. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  66. package/examples/jsm/loaders/OBJLoader.js +1 -1
  67. package/examples/jsm/loaders/PDBLoader.js +1 -1
  68. package/examples/jsm/loaders/SVGLoader.js +2 -2
  69. package/examples/jsm/loaders/UltraHDRLoader.js +1 -1
  70. package/examples/jsm/math/ConvexHull.js +1 -1
  71. package/examples/jsm/math/ImprovedNoise.js +1 -1
  72. package/examples/jsm/math/SimplexNoise.js +1 -1
  73. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  74. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  75. package/examples/jsm/misc/TubePainter.js +383 -40
  76. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  77. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  78. package/examples/jsm/objects/Sky.js +1 -1
  79. package/examples/jsm/objects/SkyMesh.js +1 -1
  80. package/examples/jsm/objects/Water.js +3 -3
  81. package/examples/jsm/objects/WaterMesh.js +6 -6
  82. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  83. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  84. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  85. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  86. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  87. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  88. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  89. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  90. package/examples/jsm/shaders/BokehShader.js +1 -1
  91. package/examples/jsm/shaders/BokehShader2.js +1 -1
  92. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  93. package/examples/jsm/shaders/FocusShader.js +1 -1
  94. package/examples/jsm/shaders/GTAOShader.js +2 -2
  95. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  96. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  97. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  98. package/examples/jsm/shaders/SSRShader.js +1 -1
  99. package/examples/jsm/shaders/SepiaShader.js +1 -1
  100. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  101. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  102. package/examples/jsm/shaders/VignetteShader.js +1 -1
  103. package/examples/jsm/transpiler/TSLEncoder.js +7 -0
  104. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  105. package/examples/jsm/tsl/display/AnamorphicNode.js +2 -1
  106. package/examples/jsm/tsl/display/BloomNode.js +4 -0
  107. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  108. package/examples/jsm/tsl/display/DepthOfFieldNode.js +7 -0
  109. package/examples/jsm/tsl/display/GTAONode.js +45 -5
  110. package/examples/jsm/tsl/display/GaussianBlurNode.js +5 -3
  111. package/examples/jsm/tsl/display/OutlineNode.js +11 -0
  112. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  113. package/examples/jsm/tsl/display/SSRNode.js +2 -0
  114. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  115. package/examples/jsm/tsl/display/TRAANode.js +123 -6
  116. package/examples/jsm/tsl/display/boxBlur.js +1 -0
  117. package/examples/jsm/tsl/display/hashBlur.js +1 -0
  118. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  119. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  120. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  121. package/package.json +5 -10
  122. package/src/Three.Core.js +3 -2
  123. package/src/Three.TSL.js +7 -1
  124. package/src/Three.WebGPU.Nodes.js +2 -0
  125. package/src/Three.WebGPU.js +2 -0
  126. package/src/animation/AnimationClip.js +3 -2
  127. package/src/animation/AnimationMixer.js +3 -3
  128. package/src/animation/AnimationObjectGroup.js +2 -1
  129. package/src/animation/KeyframeTrack.js +7 -6
  130. package/src/animation/PropertyBinding.js +12 -11
  131. package/src/audio/Audio.js +10 -9
  132. package/src/audio/PositionalAudio.js +1 -1
  133. package/src/cameras/OrthographicCamera.js +1 -1
  134. package/src/cameras/PerspectiveCamera.js +1 -1
  135. package/src/cameras/StereoCamera.js +2 -2
  136. package/src/constants.js +1 -1
  137. package/src/core/BufferGeometry.js +8 -8
  138. package/src/core/EventDispatcher.js +1 -1
  139. package/src/core/InterleavedBuffer.js +1 -1
  140. package/src/core/InterleavedBufferAttribute.js +3 -2
  141. package/src/core/Object3D.js +3 -2
  142. package/src/core/Raycaster.js +2 -1
  143. package/src/core/RenderTarget.js +10 -1
  144. package/src/extras/Controls.js +5 -4
  145. package/src/extras/DataUtils.js +2 -1
  146. package/src/extras/Earcut.js +6 -0
  147. package/src/extras/ImageUtils.js +2 -2
  148. package/src/extras/PMREMGenerator.js +268 -55
  149. package/src/extras/core/Curve.js +2 -1
  150. package/src/extras/core/Interpolations.js +7 -1
  151. package/src/extras/core/ShapePath.js +4 -4
  152. package/src/extras/lib/earcut.js +7 -7
  153. package/src/geometries/BoxGeometry.js +1 -0
  154. package/src/geometries/CapsuleGeometry.js +1 -0
  155. package/src/geometries/CircleGeometry.js +1 -0
  156. package/src/geometries/ConeGeometry.js +1 -0
  157. package/src/geometries/CylinderGeometry.js +1 -0
  158. package/src/geometries/DodecahedronGeometry.js +1 -0
  159. package/src/geometries/ExtrudeGeometry.js +8 -6
  160. package/src/geometries/IcosahedronGeometry.js +1 -0
  161. package/src/geometries/LatheGeometry.js +1 -0
  162. package/src/geometries/OctahedronGeometry.js +1 -0
  163. package/src/geometries/PlaneGeometry.js +1 -0
  164. package/src/geometries/RingGeometry.js +1 -0
  165. package/src/geometries/ShapeGeometry.js +1 -0
  166. package/src/geometries/SphereGeometry.js +1 -0
  167. package/src/geometries/TetrahedronGeometry.js +1 -0
  168. package/src/geometries/TorusGeometry.js +1 -0
  169. package/src/geometries/TorusKnotGeometry.js +1 -0
  170. package/src/geometries/TubeGeometry.js +1 -0
  171. package/src/helpers/CameraHelper.js +1 -1
  172. package/src/loaders/AnimationLoader.js +2 -1
  173. package/src/loaders/AudioLoader.js +2 -1
  174. package/src/loaders/BufferGeometryLoader.js +2 -2
  175. package/src/loaders/Cache.js +2 -2
  176. package/src/loaders/DataTextureLoader.js +1 -1
  177. package/src/loaders/FileLoader.js +3 -2
  178. package/src/loaders/ImageBitmapLoader.js +5 -4
  179. package/src/loaders/ImageLoader.js +1 -1
  180. package/src/loaders/Loader.js +3 -3
  181. package/src/loaders/LoadingManager.js +25 -3
  182. package/src/loaders/MaterialLoader.js +3 -2
  183. package/src/loaders/ObjectLoader.js +13 -13
  184. package/src/loaders/TextureLoader.js +1 -1
  185. package/src/loaders/nodes/NodeLoader.js +3 -2
  186. package/src/materials/Material.js +4 -3
  187. package/src/materials/MeshBasicMaterial.js +1 -0
  188. package/src/materials/MeshDepthMaterial.js +1 -0
  189. package/src/materials/MeshLambertMaterial.js +2 -1
  190. package/src/materials/MeshMatcapMaterial.js +22 -0
  191. package/src/materials/MeshNormalMaterial.js +1 -0
  192. package/src/materials/MeshPhongMaterial.js +2 -1
  193. package/src/materials/MeshPhysicalMaterial.js +2 -1
  194. package/src/materials/MeshStandardMaterial.js +8 -7
  195. package/src/materials/MeshToonMaterial.js +1 -0
  196. package/src/materials/PointsMaterial.js +1 -1
  197. package/src/materials/ShaderMaterial.js +2 -2
  198. package/src/materials/nodes/Line2NodeMaterial.js +2 -2
  199. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  200. package/src/materials/nodes/NodeMaterial.js +62 -22
  201. package/src/materials/nodes/manager/NodeMaterialObserver.js +2 -1
  202. package/src/math/Color.js +6 -5
  203. package/src/math/ColorManagement.js +2 -2
  204. package/src/math/Cylindrical.js +1 -1
  205. package/src/math/Euler.js +2 -1
  206. package/src/math/MathUtils.js +13 -11
  207. package/src/math/Matrix2.js +1 -1
  208. package/src/math/Matrix3.js +2 -2
  209. package/src/math/Matrix4.js +7 -7
  210. package/src/math/Plane.js +1 -1
  211. package/src/math/Quaternion.js +68 -66
  212. package/src/math/Spherical.js +1 -1
  213. package/src/nodes/Nodes.js +1 -1
  214. package/src/nodes/TSL.js +1 -1
  215. package/src/nodes/accessors/CubeTextureNode.js +3 -2
  216. package/src/nodes/accessors/InstanceNode.js +22 -4
  217. package/src/nodes/accessors/Lights.js +10 -0
  218. package/src/nodes/accessors/Normal.js +5 -4
  219. package/src/nodes/accessors/Position.js +18 -2
  220. package/src/nodes/accessors/ReferenceNode.js +2 -1
  221. package/src/nodes/accessors/SceneNode.js +2 -1
  222. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  223. package/src/nodes/accessors/StorageTextureNode.js +22 -0
  224. package/src/nodes/accessors/Texture3DNode.js +1 -1
  225. package/src/nodes/accessors/TextureNode.js +61 -27
  226. package/src/nodes/code/FunctionCallNode.js +5 -4
  227. package/src/nodes/core/ArrayNode.js +1 -0
  228. package/src/nodes/core/AttributeNode.js +2 -1
  229. package/src/nodes/core/ContextNode.js +5 -10
  230. package/src/nodes/core/IndexNode.js +2 -2
  231. package/src/nodes/core/InputNode.js +2 -1
  232. package/src/nodes/core/InspectorNode.js +128 -0
  233. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
  234. package/src/nodes/core/Node.js +137 -12
  235. package/src/nodes/core/NodeBuilder.js +135 -21
  236. package/src/nodes/core/NodeFrame.js +20 -20
  237. package/src/nodes/core/NodeFunction.js +2 -1
  238. package/src/nodes/core/NodeParser.js +2 -1
  239. package/src/nodes/core/NodeUtils.js +17 -90
  240. package/src/nodes/core/ParameterNode.js +31 -0
  241. package/src/nodes/core/PropertyNode.js +7 -0
  242. package/src/nodes/core/StackNode.js +16 -14
  243. package/src/nodes/core/UniformNode.js +2 -1
  244. package/src/nodes/core/VarNode.js +70 -12
  245. package/src/nodes/core/VaryingNode.js +3 -2
  246. package/src/nodes/display/BlendModes.js +5 -4
  247. package/src/nodes/display/BumpMapNode.js +1 -1
  248. package/src/nodes/display/ColorAdjustment.js +1 -1
  249. package/src/nodes/display/NormalMapNode.js +2 -1
  250. package/src/nodes/display/PassNode.js +51 -10
  251. package/src/nodes/display/RenderOutputNode.js +28 -2
  252. package/src/nodes/display/ScreenNode.js +2 -1
  253. package/src/nodes/display/ToneMappingNode.js +31 -4
  254. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  255. package/src/nodes/fog/Fog.js +3 -2
  256. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  257. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  258. package/src/nodes/functions/BasicLightingModel.js +2 -1
  259. package/src/nodes/functions/PhysicalLightingModel.js +3 -2
  260. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  261. package/src/nodes/geometry/RangeNode.js +40 -4
  262. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  263. package/src/nodes/gpgpu/ComputeNode.js +17 -5
  264. package/src/nodes/gpgpu/SubgroupFunctionNode.js +25 -0
  265. package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
  266. package/src/nodes/lighting/EnvironmentNode.js +6 -6
  267. package/src/nodes/lighting/LightsNode.js +2 -3
  268. package/src/nodes/lighting/PointShadowNode.js +6 -0
  269. package/src/nodes/lighting/ShadowFilterNode.js +2 -0
  270. package/src/nodes/lighting/ShadowNode.js +75 -8
  271. package/src/nodes/math/ConditionalNode.js +6 -5
  272. package/src/nodes/math/MathNode.js +22 -4
  273. package/src/nodes/math/OperatorNode.js +3 -2
  274. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  275. package/src/nodes/shapes/Shapes.js +1 -1
  276. package/src/nodes/tsl/TSLBase.js +5 -2
  277. package/src/nodes/tsl/TSLCore.js +36 -15
  278. package/src/nodes/utils/DebugNode.js +2 -1
  279. package/src/nodes/utils/EventNode.js +36 -0
  280. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  281. package/src/nodes/utils/JoinNode.js +3 -2
  282. package/src/nodes/utils/LoopNode.js +20 -24
  283. package/src/nodes/utils/MemberNode.js +2 -1
  284. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  285. package/src/nodes/utils/RTTNode.js +12 -2
  286. package/src/nodes/utils/ReflectorNode.js +10 -3
  287. package/src/objects/Line.js +2 -1
  288. package/src/objects/LineSegments.js +2 -1
  289. package/src/objects/Skeleton.js +3 -2
  290. package/src/objects/SkinnedMesh.js +3 -1
  291. package/src/objects/Sprite.js +2 -1
  292. package/src/renderers/WebGLRenderer.js +49 -33
  293. package/src/renderers/common/Animation.js +13 -1
  294. package/src/renderers/common/Backend.js +93 -30
  295. package/src/renderers/common/Background.js +2 -1
  296. package/src/renderers/common/Bindings.js +56 -2
  297. package/src/renderers/common/CanvasTarget.js +341 -0
  298. package/src/renderers/common/Geometries.js +26 -0
  299. package/src/renderers/common/Info.js +4 -2
  300. package/src/renderers/common/InspectorBase.js +146 -0
  301. package/src/renderers/common/PostProcessing.js +6 -25
  302. package/src/renderers/common/QuadMesh.js +7 -1
  303. package/src/renderers/common/RenderList.js +7 -3
  304. package/src/renderers/common/RenderObject.js +3 -1
  305. package/src/renderers/common/RenderObjects.js +1 -1
  306. package/src/renderers/common/Renderer.js +436 -228
  307. package/src/renderers/common/RendererUtils.js +9 -0
  308. package/src/renderers/common/SampledTexture.js +8 -0
  309. package/src/renderers/common/Sampler.js +37 -11
  310. package/src/renderers/common/StorageTexture.js +9 -1
  311. package/src/renderers/common/Textures.js +89 -35
  312. package/src/renderers/common/TimestampQueryPool.js +63 -1
  313. package/src/renderers/common/UniformsGroup.js +2 -1
  314. package/src/renderers/common/XRManager.js +7 -3
  315. package/src/renderers/common/extras/PMREMGenerator.js +160 -65
  316. package/src/renderers/common/nodes/NodeLibrary.js +4 -2
  317. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  318. package/src/renderers/common/nodes/Nodes.js +38 -16
  319. package/src/renderers/shaders/DFGLUTData.js +64 -0
  320. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  321. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  322. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  323. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  324. package/src/renderers/shaders/UniformsLib.js +1 -0
  325. package/src/renderers/shaders/UniformsUtils.js +25 -4
  326. package/src/renderers/webgl/WebGLCapabilities.js +2 -1
  327. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  328. package/src/renderers/webgl/WebGLInfo.js +3 -1
  329. package/src/renderers/webgl/WebGLProgram.js +11 -10
  330. package/src/renderers/webgl/WebGLPrograms.js +2 -1
  331. package/src/renderers/webgl/WebGLShadowMap.js +2 -1
  332. package/src/renderers/webgl/WebGLState.js +15 -14
  333. package/src/renderers/webgl/WebGLTextures.js +18 -14
  334. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  335. package/src/renderers/webgl-fallback/WebGLBackend.js +22 -41
  336. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +74 -11
  337. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  338. package/src/renderers/webgl-fallback/utils/WebGLState.js +6 -5
  339. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +117 -16
  340. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +42 -12
  341. package/src/renderers/webgpu/WebGPUBackend.js +134 -108
  342. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  343. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  344. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +21 -19
  345. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  346. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
  347. package/src/renderers/webgpu/utils/WebGPUConstants.js +5 -0
  348. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +44 -16
  349. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  350. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +146 -74
  351. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +29 -6
  352. package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
  353. package/src/renderers/webxr/WebXRManager.js +3 -2
  354. package/src/textures/Source.js +2 -1
  355. package/src/textures/Texture.js +3 -2
  356. package/src/textures/VideoTexture.js +2 -0
  357. package/src/utils.js +67 -3
@@ -1,6 +1,7 @@
1
1
  import Node from '../core/Node.js';
2
2
  import { expression } from '../code/ExpressionNode.js';
3
- import { nodeObject, nodeArray, Fn } from '../tsl/TSLBase.js';
3
+ import { nodeArray, Fn } from '../tsl/TSLBase.js';
4
+ import { error } from '../../utils.js';
4
5
 
5
6
  /**
6
7
  * This module offers a variety of ways to implement loops in TSL. In it's basic form it's:
@@ -53,7 +54,7 @@ class LoopNode extends Node {
53
54
  */
54
55
  constructor( params = [] ) {
55
56
 
56
- super();
57
+ super( 'void' );
57
58
 
58
59
  this.params = params;
59
60
 
@@ -99,16 +100,20 @@ class LoopNode extends Node {
99
100
 
100
101
  }
101
102
 
102
- const stack = builder.addStack(); // TODO: cache() it
103
+ const stack = builder.addStack();
103
104
 
104
- properties.returnsNode = this.params[ this.params.length - 1 ]( inputs, builder );
105
+ const fnCall = this.params[ this.params.length - 1 ]( inputs );
106
+
107
+ properties.returnsNode = fnCall.context( { nodeLoop: fnCall } );
105
108
  properties.stackNode = stack;
106
109
 
107
110
  const baseParam = this.params[ 0 ];
108
111
 
109
112
  if ( baseParam.isNode !== true && typeof baseParam.update === 'function' ) {
110
113
 
111
- properties.updateNode = Fn( this.params[ 0 ].update )( inputs );
114
+ const fnUpdateCall = Fn( this.params[ 0 ].update )( inputs );
115
+
116
+ properties.updateNode = fnUpdateCall.context( { nodeLoop: fnUpdateCall } );
112
117
 
113
118
  }
114
119
 
@@ -118,26 +123,19 @@ class LoopNode extends Node {
118
123
 
119
124
  }
120
125
 
121
- /**
122
- * This method is overwritten since the node type is inferred based on the loop configuration.
123
- *
124
- * @param {NodeBuilder} builder - The current node builder.
125
- * @return {string} The node type.
126
- */
127
- getNodeType( builder ) {
128
-
129
- const { returnsNode } = this.getProperties( builder );
130
-
131
- return returnsNode ? returnsNode.getNodeType( builder ) : 'void';
132
-
133
- }
134
-
135
126
  setup( builder ) {
136
127
 
137
128
  // setup properties
138
129
 
139
130
  this.getProperties( builder );
140
131
 
132
+ if ( builder.fnCall ) {
133
+
134
+ const shaderNodeData = builder.getDataFromNode( builder.fnCall.shaderNode );
135
+ shaderNodeData.hasLoop = true;
136
+
137
+ }
138
+
141
139
  }
142
140
 
143
141
  generate( builder ) {
@@ -267,7 +265,7 @@ class LoopNode extends Node {
267
265
 
268
266
  } else {
269
267
 
270
- console.error( 'THREE.TSL: \'Loop( { update: ... } )\' is not a function, string or number.' );
268
+ error( 'TSL: \'Loop( { update: ... } )\' is not a function, string or number.' );
271
269
 
272
270
  updateSnippet = 'break /* invalid update */';
273
271
 
@@ -304,7 +302,7 @@ class LoopNode extends Node {
304
302
 
305
303
  const stackSnippet = stackNode.build( builder, 'void' );
306
304
 
307
- const returnsSnippet = properties.returnsNode ? properties.returnsNode.build( builder ) : '';
305
+ properties.returnsNode.build( builder, 'void' );
308
306
 
309
307
  builder.removeFlowTab().addFlowCode( '\n' + builder.tab + stackSnippet );
310
308
 
@@ -316,8 +314,6 @@ class LoopNode extends Node {
316
314
 
317
315
  builder.addFlowTab();
318
316
 
319
- return returnsSnippet;
320
-
321
317
  }
322
318
 
323
319
  }
@@ -332,7 +328,7 @@ export default LoopNode;
332
328
  * @param {...any} params - A list of parameters.
333
329
  * @returns {LoopNode}
334
330
  */
335
- export const Loop = ( ...params ) => nodeObject( new LoopNode( nodeArray( params, 'int' ) ) ).toStack();
331
+ export const Loop = ( ...params ) => new LoopNode( nodeArray( params, 'int' ) ).toStack();
336
332
 
337
333
  /**
338
334
  * TSL function for creating a `Continue()` expression.
@@ -1,4 +1,5 @@
1
1
  import Node from '../core/Node.js';
2
+ import { warn } from '../../utils.js';
2
3
 
3
4
  /**
4
5
  * Base class for representing member access on an object-like
@@ -100,7 +101,7 @@ class MemberNode extends Node {
100
101
 
101
102
  if ( this.hasMember( builder ) === false ) {
102
103
 
103
- console.warn( `THREE.TSL: Member "${ this.property }" does not exist in struct.` );
104
+ warn( `TSL: Member "${ this.property }" does not exist in struct.` );
104
105
 
105
106
  const type = this.getNodeType( builder );
106
107
 
@@ -1,4 +1,4 @@
1
- import { abs, cross, float, Fn, normalize, ivec2, sub, vec2, vec3, vec4 } from '../tsl/TSLBase.js';
1
+ import { abs, cross, float, Fn, normalize, ivec2, sub, vec2, vec3, vec4, fract, dot } from '../tsl/TSLBase.js';
2
2
  import { textureSize } from '../accessors/TextureSizeNode.js';
3
3
  import { textureLoad } from '../accessors/TextureNode.js';
4
4
  import { WebGPUCoordinateSystem } from '../../constants.js';
@@ -93,3 +93,30 @@ export const getNormalFromDepth = /*@__PURE__*/ Fn( ( [ uv, depthTexture, projec
93
93
  return normalize( cross( dpdx, dpdy ) );
94
94
 
95
95
  } );
96
+
97
+ /**
98
+ * Interleaved Gradient Noise (IGN) from Jimenez 2014.
99
+ *
100
+ * IGN has "low discrepancy" resulting in evenly distributed samples. It's superior compared to
101
+ * default white noise, blue noise or Bayer.
102
+ *
103
+ * References:
104
+ * - {@link https://www.iryoku.com/next-generation-post-processing-in-call-of-duty-advanced-warfare/}
105
+ * - {@link https://blog.demofox.org/2022/01/01/interleaved-gradient-noise-a-different-kind-of-low-discrepancy-sequence/}
106
+ *
107
+ * @tsl
108
+ * @function
109
+ * @param {Node<vec2>} position - The input position, usually screen coordinates.
110
+ * @return {Node<float>} The noise value.
111
+ */
112
+ export const interleavedGradientNoise = Fn( ( [ position ] ) => {
113
+
114
+ return fract( float( 52.9829189 ).mul( fract( dot( position, vec2( 0.06711056, 0.00583715 ) ) ) ) );
115
+
116
+ } ).setLayout( {
117
+ name: 'interleavedGradientNoise',
118
+ type: 'float',
119
+ inputs: [
120
+ { name: 'position', type: 'vec2' }
121
+ ]
122
+ } );
@@ -202,8 +202,8 @@ class RTTNode extends TextureNode {
202
202
  const pixelRatio = renderer.getPixelRatio();
203
203
  const size = renderer.getSize( _size );
204
204
 
205
- const effectiveWidth = size.width * pixelRatio;
206
- const effectiveHeight = size.height * pixelRatio;
205
+ const effectiveWidth = Math.floor( size.width * pixelRatio );
206
+ const effectiveHeight = Math.floor( size.height * pixelRatio );
207
207
 
208
208
  if ( effectiveWidth !== this.renderTarget.width || effectiveHeight !== this.renderTarget.height ) {
209
209
 
@@ -217,7 +217,17 @@ class RTTNode extends TextureNode {
217
217
 
218
218
  //
219
219
 
220
+ let name = 'RTT';
221
+
222
+ if ( this.node.name ) {
223
+
224
+ name = this.node.name + ' [ ' + name + ' ]';
225
+
226
+ }
227
+
228
+
220
229
  this._quadMesh.material.fragmentNode = this._rttNode;
230
+ this._quadMesh.name = name;
221
231
 
222
232
  //
223
233
 
@@ -164,6 +164,7 @@ class ReflectorNode extends TextureNode {
164
164
  newNode.depthNode = this.depthNode;
165
165
  newNode.compareNode = this.compareNode;
166
166
  newNode.gradNode = this.gradNode;
167
+ newNode.offsetNode = this.offsetNode;
167
168
  newNode._reflectorBaseNode = this._reflectorBaseNode;
168
169
 
169
170
  return newNode;
@@ -250,7 +251,7 @@ class ReflectorBaseNode extends Node {
250
251
 
251
252
  if ( parameters.resolution !== undefined ) {
252
253
 
253
- warnOnce( 'THREE.ReflectorNode: The "resolution" parameter has been renamed to "resolutionScale".' ); // @deprecated r180
254
+ warnOnce( 'ReflectorNode: The "resolution" parameter has been renamed to "resolutionScale".' ); // @deprecated r180
254
255
 
255
256
  this.resolutionScale = parameters.resolution;
256
257
 
@@ -551,6 +552,10 @@ class ReflectorBaseNode extends Node {
551
552
  renderer.setRenderTarget( renderTarget );
552
553
  renderer.autoClear = true;
553
554
 
555
+ const previousName = scene.name;
556
+
557
+ scene.name = ( scene.name || 'Scene' ) + ' [ Reflector ]'; // TODO: Add bounce index
558
+
554
559
  if ( needsClear ) {
555
560
 
556
561
  renderer.clear();
@@ -565,6 +570,8 @@ class ReflectorBaseNode extends Node {
565
570
 
566
571
  }
567
572
 
573
+ scene.name = previousName;
574
+
568
575
  renderer.setMRT( currentMRT );
569
576
  renderer.setRenderTarget( currentRenderTarget );
570
577
  renderer.autoClear = currentAutoClear;
@@ -586,7 +593,7 @@ class ReflectorBaseNode extends Node {
586
593
  */
587
594
  get resolution() {
588
595
 
589
- warnOnce( 'THREE.ReflectorNode: The "resolution" property has been renamed to "resolutionScale".' ); // @deprecated r180
596
+ warnOnce( 'ReflectorNode: The "resolution" property has been renamed to "resolutionScale".' ); // @deprecated r180
590
597
 
591
598
  return this.resolutionScale;
592
599
 
@@ -594,7 +601,7 @@ class ReflectorBaseNode extends Node {
594
601
 
595
602
  set resolution( value ) {
596
603
 
597
- warnOnce( 'THREE.ReflectorNode: The "resolution" property has been renamed to "resolutionScale".' ); // @deprecated r180
604
+ warnOnce( 'ReflectorNode: The "resolution" property has been renamed to "resolutionScale".' ); // @deprecated r180
598
605
 
599
606
  this.resolutionScale = value;
600
607
 
@@ -6,6 +6,7 @@ import { Vector3 } from '../math/Vector3.js';
6
6
  import { LineBasicMaterial } from '../materials/LineBasicMaterial.js';
7
7
  import { BufferGeometry } from '../core/BufferGeometry.js';
8
8
  import { Float32BufferAttribute } from '../core/BufferAttribute.js';
9
+ import { warn } from '../utils.js';
9
10
 
10
11
  const _vStart = /*@__PURE__*/ new Vector3();
11
12
  const _vEnd = /*@__PURE__*/ new Vector3();
@@ -142,7 +143,7 @@ class Line extends Object3D {
142
143
 
143
144
  } else {
144
145
 
145
- console.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );
146
+ warn( 'Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );
146
147
 
147
148
  }
148
149
 
@@ -1,6 +1,7 @@
1
1
  import { Line } from './Line.js';
2
2
  import { Vector3 } from '../math/Vector3.js';
3
3
  import { Float32BufferAttribute } from '../core/BufferAttribute.js';
4
+ import { warn } from '../utils.js';
4
5
 
5
6
  const _start = /*@__PURE__*/ new Vector3();
6
7
  const _end = /*@__PURE__*/ new Vector3();
@@ -60,7 +61,7 @@ class LineSegments extends Line {
60
61
 
61
62
  } else {
62
63
 
63
- console.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );
64
+ warn( 'LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );
64
65
 
65
66
  }
66
67
 
@@ -6,6 +6,7 @@ import { Bone } from './Bone.js';
6
6
  import { Matrix4 } from '../math/Matrix4.js';
7
7
  import { DataTexture } from '../textures/DataTexture.js';
8
8
  import { generateUUID } from '../math/MathUtils.js';
9
+ import { warn } from '../utils.js';
9
10
 
10
11
  const _offsetMatrix = /*@__PURE__*/ new Matrix4();
11
12
  const _identityMatrix = /*@__PURE__*/ new Matrix4();
@@ -106,7 +107,7 @@ class Skeleton {
106
107
 
107
108
  if ( bones.length !== boneInverses.length ) {
108
109
 
109
- console.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );
110
+ warn( 'Skeleton: Number of inverse bone matrices does not match amount of bones.' );
110
111
 
111
112
  this.boneInverses = [];
112
113
 
@@ -324,7 +325,7 @@ class Skeleton {
324
325
 
325
326
  if ( bone === undefined ) {
326
327
 
327
- console.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );
328
+ warn( 'Skeleton: No bone found with UUID:', uuid );
328
329
  bone = new Bone();
329
330
 
330
331
  }
@@ -6,6 +6,7 @@ import { Vector3 } from '../math/Vector3.js';
6
6
  import { Vector4 } from '../math/Vector4.js';
7
7
  import { Ray } from '../math/Ray.js';
8
8
  import { AttachedBindMode, DetachedBindMode } from '../constants.js';
9
+ import { warn } from '../utils.js';
9
10
 
10
11
  const _basePosition = /*@__PURE__*/ new Vector3();
11
12
 
@@ -32,6 +33,7 @@ const _ray = /*@__PURE__*/ new Ray();
32
33
  * or {@link FBXLoader } import respective models.
33
34
  *
34
35
  * @augments Mesh
36
+ * @demo scenes/bones-browser.html
35
37
  */
36
38
  class SkinnedMesh extends Mesh {
37
39
 
@@ -299,7 +301,7 @@ class SkinnedMesh extends Mesh {
299
301
 
300
302
  } else {
301
303
 
302
- console.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );
304
+ warn( 'SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );
303
305
 
304
306
  }
305
307
 
@@ -7,6 +7,7 @@ import { BufferGeometry } from '../core/BufferGeometry.js';
7
7
  import { InterleavedBuffer } from '../core/InterleavedBuffer.js';
8
8
  import { InterleavedBufferAttribute } from '../core/InterleavedBufferAttribute.js';
9
9
  import { SpriteMaterial } from '../materials/SpriteMaterial.js';
10
+ import { error } from '../utils.js';
10
11
 
11
12
  let _geometry;
12
13
 
@@ -129,7 +130,7 @@ class Sprite extends Object3D {
129
130
 
130
131
  if ( raycaster.camera === null ) {
131
132
 
132
- console.error( 'THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.' );
133
+ error( 'Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.' );
133
134
 
134
135
  }
135
136
 
@@ -52,8 +52,9 @@ import { WebGLUtils } from './webgl/WebGLUtils.js';
52
52
  import { WebXRManager } from './webxr/WebXRManager.js';
53
53
  import { WebGLMaterials } from './webgl/WebGLMaterials.js';
54
54
  import { WebGLUniformsGroups } from './webgl/WebGLUniformsGroups.js';
55
- import { createCanvasElement, probeAsync, warnOnce } from '../utils.js';
55
+ import { createCanvasElement, probeAsync, warnOnce, error, warn, log } from '../utils.js';
56
56
  import { ColorManagement } from '../math/ColorManagement.js';
57
+ import { getDFGLUT } from './shaders/DFGLUTData.js';
57
58
 
58
59
  /**
59
60
  * This renderer uses WebGL 2 to display scenes.
@@ -110,6 +111,21 @@ class WebGLRenderer {
110
111
 
111
112
  }
112
113
 
114
+ const INTEGER_FORMATS = new Set( [
115
+ RGBAIntegerFormat,
116
+ RGIntegerFormat,
117
+ RedIntegerFormat
118
+ ] );
119
+
120
+ const UNSIGNED_TYPES = new Set( [
121
+ UnsignedByteType,
122
+ UnsignedIntType,
123
+ UnsignedShortType,
124
+ UnsignedInt248Type,
125
+ UnsignedShort4444Type,
126
+ UnsignedShort5551Type
127
+ ] );
128
+
113
129
  const uintClearColor = new Uint32Array( 4 );
114
130
  const intClearColor = new Int32Array( 4 );
115
131
 
@@ -131,7 +147,7 @@ class WebGLRenderer {
131
147
  * document.body.appendChild( renderer.domElement );
132
148
  * ```
133
149
  *
134
- * @type {DOMElement}
150
+ * @type {HTMLCanvasElement|OffscreenCanvas}
135
151
  */
136
152
  this.domElement = canvas;
137
153
 
@@ -384,7 +400,7 @@ class WebGLRenderer {
384
400
 
385
401
  } catch ( error ) {
386
402
 
387
- console.error( 'THREE.WebGLRenderer: ' + error.message );
403
+ error( 'WebGLRenderer: ' + error.message );
388
404
  throw error;
389
405
 
390
406
  }
@@ -621,7 +637,7 @@ class WebGLRenderer {
621
637
 
622
638
  if ( xr.isPresenting ) {
623
639
 
624
- console.warn( 'THREE.WebGLRenderer: Can\'t change size while VR device is presenting.' );
640
+ warn( 'WebGLRenderer: Can\'t change size while VR device is presenting.' );
625
641
  return;
626
642
 
627
643
  }
@@ -883,9 +899,7 @@ class WebGLRenderer {
883
899
  if ( _currentRenderTarget !== null ) {
884
900
 
885
901
  const targetFormat = _currentRenderTarget.texture.format;
886
- isIntegerFormat = targetFormat === RGBAIntegerFormat ||
887
- targetFormat === RGIntegerFormat ||
888
- targetFormat === RedIntegerFormat;
902
+ isIntegerFormat = INTEGER_FORMATS.has( targetFormat );
889
903
 
890
904
  }
891
905
 
@@ -894,12 +908,7 @@ class WebGLRenderer {
894
908
  if ( isIntegerFormat ) {
895
909
 
896
910
  const targetType = _currentRenderTarget.texture.type;
897
- const isUnsignedType = targetType === UnsignedByteType ||
898
- targetType === UnsignedIntType ||
899
- targetType === UnsignedShortType ||
900
- targetType === UnsignedInt248Type ||
901
- targetType === UnsignedShort4444Type ||
902
- targetType === UnsignedShort5551Type;
911
+ const isUnsignedType = UNSIGNED_TYPES.has( targetType );
903
912
 
904
913
  const clearColor = background.getClearColor();
905
914
  const a = background.getClearAlpha();
@@ -1013,7 +1022,7 @@ class WebGLRenderer {
1013
1022
 
1014
1023
  event.preventDefault();
1015
1024
 
1016
- console.log( 'THREE.WebGLRenderer: Context Lost.' );
1025
+ log( 'WebGLRenderer: Context Lost.' );
1017
1026
 
1018
1027
  _isContextLost = true;
1019
1028
 
@@ -1021,7 +1030,7 @@ class WebGLRenderer {
1021
1030
 
1022
1031
  function onContextRestore( /* event */ ) {
1023
1032
 
1024
- console.log( 'THREE.WebGLRenderer: Context Restored.' );
1033
+ log( 'WebGLRenderer: Context Restored.' );
1025
1034
 
1026
1035
  _isContextLost = false;
1027
1036
 
@@ -1043,7 +1052,7 @@ class WebGLRenderer {
1043
1052
 
1044
1053
  function onContextCreationError( event ) {
1045
1054
 
1046
- console.error( 'THREE.WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage );
1055
+ error( 'WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage );
1047
1056
 
1048
1057
  }
1049
1058
 
@@ -1096,7 +1105,7 @@ class WebGLRenderer {
1096
1105
 
1097
1106
  if ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)
1098
1107
 
1099
- const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );
1108
+ const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 ) || ( object.isBatchedMesh && object._frontFaceCW );
1100
1109
 
1101
1110
  const program = setProgram( camera, scene, geometry, material, object );
1102
1111
 
@@ -1216,7 +1225,7 @@ class WebGLRenderer {
1216
1225
  if ( object._multiDrawInstances !== null ) {
1217
1226
 
1218
1227
  // @deprecated, r174
1219
- warnOnce( 'THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
1228
+ warnOnce( 'WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
1220
1229
  renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
1221
1230
 
1222
1231
  } else {
@@ -1492,6 +1501,13 @@ class WebGLRenderer {
1492
1501
 
1493
1502
  if ( typeof self !== 'undefined' ) animation.setContext( self );
1494
1503
 
1504
+ /**
1505
+ * Applications are advised to always define the animation loop
1506
+ * with this method and not manually with `requestAnimationFrame()`
1507
+ * for best compatibility.
1508
+ *
1509
+ * @param {?onAnimationCallback} callback - The application's animation loop.
1510
+ */
1495
1511
  this.setAnimationLoop = function ( callback ) {
1496
1512
 
1497
1513
  onAnimationFrameCallback = callback;
@@ -1524,7 +1540,7 @@ class WebGLRenderer {
1524
1540
 
1525
1541
  if ( camera !== undefined && camera.isCamera !== true ) {
1526
1542
 
1527
- console.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );
1543
+ error( 'WebGLRenderer.render: camera is not an instance of THREE.Camera.' );
1528
1544
  return;
1529
1545
 
1530
1546
  }
@@ -1822,9 +1838,7 @@ class WebGLRenderer {
1822
1838
 
1823
1839
  function renderScene( currentRenderList, scene, camera, viewport ) {
1824
1840
 
1825
- const opaqueObjects = currentRenderList.opaque;
1826
- const transmissiveObjects = currentRenderList.transmissive;
1827
- const transparentObjects = currentRenderList.transparent;
1841
+ const { opaque: opaqueObjects, transmissive: transmissiveObjects, transparent: transparentObjects } = currentRenderList;
1828
1842
 
1829
1843
  currentRenderState.setupLightsView( camera );
1830
1844
 
@@ -1929,10 +1943,7 @@ class WebGLRenderer {
1929
1943
 
1930
1944
  const renderItem = transmissiveObjects[ i ];
1931
1945
 
1932
- const object = renderItem.object;
1933
- const geometry = renderItem.geometry;
1934
- const material = renderItem.material;
1935
- const group = renderItem.group;
1946
+ const { object, geometry, material, group } = renderItem;
1936
1947
 
1937
1948
  if ( material.side === DoubleSide && object.layers.test( camera.layers ) ) {
1938
1949
 
@@ -1979,9 +1990,7 @@ class WebGLRenderer {
1979
1990
 
1980
1991
  const renderItem = renderList[ i ];
1981
1992
 
1982
- const object = renderItem.object;
1983
- const geometry = renderItem.geometry;
1984
- const group = renderItem.group;
1993
+ const { object, geometry, group } = renderItem;
1985
1994
  let material = renderItem.material;
1986
1995
 
1987
1996
  if ( material.allowOverride === true && overrideMaterial !== null ) {
@@ -2520,6 +2529,13 @@ class WebGLRenderer {
2520
2529
 
2521
2530
  }
2522
2531
 
2532
+ // Set DFG LUT for physically-based materials
2533
+ if ( m_uniforms.dfgLUT !== undefined ) {
2534
+
2535
+ m_uniforms.dfgLUT.value = getDFGLUT();
2536
+
2537
+ }
2538
+
2523
2539
  if ( refreshMaterial ) {
2524
2540
 
2525
2541
  p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );
@@ -2866,7 +2882,7 @@ class WebGLRenderer {
2866
2882
 
2867
2883
  if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
2868
2884
 
2869
- console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );
2885
+ error( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );
2870
2886
  return;
2871
2887
 
2872
2888
  }
@@ -2891,14 +2907,14 @@ class WebGLRenderer {
2891
2907
 
2892
2908
  if ( ! capabilities.textureFormatReadable( textureFormat ) ) {
2893
2909
 
2894
- console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );
2910
+ error( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );
2895
2911
  return;
2896
2912
 
2897
2913
  }
2898
2914
 
2899
2915
  if ( ! capabilities.textureTypeReadable( textureType ) ) {
2900
2916
 
2901
- console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );
2917
+ error( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );
2902
2918
  return;
2903
2919
 
2904
2920
  }
@@ -3430,7 +3446,7 @@ class WebGLRenderer {
3430
3446
  * WebGLRenderer options.
3431
3447
  *
3432
3448
  * @typedef {Object} WebGLRenderer~Options
3433
- * @property {DOMElement} [canvas=null] - A canvas element where the renderer draws its output. If not passed in here, a new canvas element will be created by the renderer.
3449
+ * @property {HTMLCanvasElement|OffscreenCanvas} [canvas=null] - A canvas element where the renderer draws its output. If not passed in here, a new canvas element will be created by the renderer.
3434
3450
  * @property {WebGL2RenderingContext} [context=null] - Can be used to attach an existing rendering context to this renderer.
3435
3451
  * @property {('highp'|'mediump'|'lowp')} [precision='highp'] - The default shader precision. Uses `highp` if supported by the device.
3436
3452
  * @property {boolean} [alpha=false] - Controls the default clear alpha value. When set to`true`, the value is `0`. Otherwise it's `1`.
@@ -9,10 +9,18 @@ class Animation {
9
9
  /**
10
10
  * Constructs a new animation loop management component.
11
11
  *
12
+ * @param {Renderer} renderer - A reference to the main renderer.
12
13
  * @param {Nodes} nodes - Renderer component for managing nodes related logic.
13
14
  * @param {Info} info - Renderer component for managing metrics and monitoring data.
14
15
  */
15
- constructor( nodes, info ) {
16
+ constructor( renderer, nodes, info ) {
17
+
18
+ /**
19
+ * A reference to the main renderer.
20
+ *
21
+ * @type {Renderer}
22
+ */
23
+ this.renderer = renderer;
16
24
 
17
25
  /**
18
26
  * Renderer component for managing nodes related logic.
@@ -70,8 +78,12 @@ class Animation {
70
78
 
71
79
  this.info.frame = this.nodes.nodeFrame.frameId;
72
80
 
81
+ this.renderer._inspector.begin();
82
+
73
83
  if ( this._animationLoop !== null ) this._animationLoop( time, xrFrame );
74
84
 
85
+ this.renderer._inspector.finish();
86
+
75
87
  };
76
88
 
77
89
  update();