super-three 0.177.0 → 0.181.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (501) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +1994 -749
  3. package/build/three.core.js +1358 -506
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +631 -247
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +113 -33
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +9571 -3424
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +9397 -3426
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  14. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  15. package/examples/jsm/Addons.js +2 -3
  16. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  17. package/examples/jsm/capabilities/WebGL.js +0 -27
  18. package/examples/jsm/capabilities/WebGPU.js +1 -1
  19. package/examples/jsm/controls/ArcballControls.js +9 -9
  20. package/examples/jsm/controls/DragControls.js +7 -57
  21. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  22. package/examples/jsm/controls/FlyControls.js +1 -1
  23. package/examples/jsm/controls/OrbitControls.js +2 -2
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +1 -1
  26. package/examples/jsm/controls/TransformControls.js +62 -15
  27. package/examples/jsm/csm/CSMShadowNode.js +4 -4
  28. package/examples/jsm/effects/AsciiEffect.js +8 -8
  29. package/examples/jsm/environments/RoomEnvironment.js +8 -3
  30. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  31. package/examples/jsm/exporters/EXRExporter.js +1 -1
  32. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  33. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  34. package/examples/jsm/exporters/PLYExporter.js +1 -1
  35. package/examples/jsm/exporters/USDZExporter.js +683 -299
  36. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  37. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  38. package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
  39. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  40. package/examples/jsm/geometries/TextGeometry.js +3 -2
  41. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  42. package/examples/jsm/helpers/ViewHelper.js +43 -5
  43. package/examples/jsm/inspector/Inspector.js +427 -0
  44. package/examples/jsm/inspector/RendererInspector.js +415 -0
  45. package/examples/jsm/inspector/tabs/Console.js +204 -0
  46. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  47. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  48. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  49. package/examples/jsm/inspector/ui/Graph.js +95 -0
  50. package/examples/jsm/inspector/ui/Item.js +170 -0
  51. package/examples/jsm/inspector/ui/List.js +75 -0
  52. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  53. package/examples/jsm/inspector/ui/Style.js +654 -0
  54. package/examples/jsm/inspector/ui/Tab.js +46 -0
  55. package/examples/jsm/inspector/ui/Values.js +423 -0
  56. package/examples/jsm/inspector/ui/utils.js +56 -0
  57. package/examples/jsm/interactive/HTMLMesh.js +11 -13
  58. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  59. package/examples/jsm/interactive/SelectionBox.js +30 -0
  60. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  61. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  62. package/examples/jsm/lights/LightProbeGenerator.js +14 -3
  63. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  64. package/examples/jsm/lines/Line2.js +3 -3
  65. package/examples/jsm/lines/LineGeometry.js +1 -1
  66. package/examples/jsm/lines/LineSegments2.js +2 -2
  67. package/examples/jsm/lines/Wireframe.js +2 -2
  68. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  69. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  70. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  71. package/examples/jsm/loaders/3MFLoader.js +1 -1
  72. package/examples/jsm/loaders/ColladaLoader.js +4 -4
  73. package/examples/jsm/loaders/DDSLoader.js +1 -1
  74. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  75. package/examples/jsm/loaders/EXRLoader.js +210 -22
  76. package/examples/jsm/loaders/FBXLoader.js +4 -4
  77. package/examples/jsm/loaders/FontLoader.js +23 -5
  78. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  79. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  80. package/examples/jsm/loaders/HDRLoader.js +486 -0
  81. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  82. package/examples/jsm/loaders/KTXLoader.js +2 -2
  83. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  84. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  85. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  86. package/examples/jsm/loaders/LWOLoader.js +2 -2
  87. package/examples/jsm/loaders/MaterialXLoader.js +233 -34
  88. package/examples/jsm/loaders/OBJLoader.js +1 -1
  89. package/examples/jsm/loaders/PDBLoader.js +1 -1
  90. package/examples/jsm/loaders/RGBELoader.js +7 -473
  91. package/examples/jsm/loaders/SVGLoader.js +2 -2
  92. package/examples/jsm/loaders/TTFLoader.js +13 -1
  93. package/examples/jsm/loaders/USDLoader.js +219 -0
  94. package/examples/jsm/loaders/USDZLoader.js +4 -892
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  96. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  97. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  98. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  99. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  100. package/examples/jsm/math/ColorSpaces.js +19 -1
  101. package/examples/jsm/math/ConvexHull.js +3 -3
  102. package/examples/jsm/math/ImprovedNoise.js +1 -1
  103. package/examples/jsm/math/Lut.js +2 -2
  104. package/examples/jsm/math/SimplexNoise.js +1 -1
  105. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  106. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  107. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  108. package/examples/jsm/misc/TubePainter.js +383 -40
  109. package/examples/jsm/misc/Volume.js +1 -1
  110. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  111. package/examples/jsm/objects/LensflareMesh.js +3 -3
  112. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  113. package/examples/jsm/objects/Sky.js +1 -1
  114. package/examples/jsm/objects/SkyMesh.js +3 -3
  115. package/examples/jsm/objects/Water.js +3 -3
  116. package/examples/jsm/objects/WaterMesh.js +6 -6
  117. package/examples/jsm/physics/RapierPhysics.js +95 -16
  118. package/examples/jsm/postprocessing/GTAOPass.js +10 -9
  119. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  120. package/examples/jsm/postprocessing/OutlinePass.js +17 -17
  121. package/examples/jsm/postprocessing/SSAOPass.js +10 -9
  122. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  123. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  124. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  125. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  126. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  127. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  128. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  129. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  130. package/examples/jsm/shaders/BokehShader.js +1 -1
  131. package/examples/jsm/shaders/BokehShader2.js +1 -1
  132. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  133. package/examples/jsm/shaders/FocusShader.js +1 -1
  134. package/examples/jsm/shaders/GTAOShader.js +2 -2
  135. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  136. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  137. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  138. package/examples/jsm/shaders/SSRShader.js +1 -1
  139. package/examples/jsm/shaders/SepiaShader.js +1 -1
  140. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  141. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  142. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
  143. package/examples/jsm/shaders/VignetteShader.js +1 -1
  144. package/examples/jsm/transpiler/AST.js +381 -30
  145. package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
  146. package/examples/jsm/transpiler/Linker.js +327 -0
  147. package/examples/jsm/transpiler/TSLEncoder.js +196 -92
  148. package/examples/jsm/transpiler/Transpiler.js +17 -1
  149. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  150. package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  151. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  152. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  153. package/examples/jsm/tsl/display/BloomNode.js +11 -6
  154. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  155. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  156. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  157. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  158. package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
  159. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  160. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  161. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  162. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  163. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  164. package/examples/jsm/tsl/display/TRAANode.js +578 -0
  165. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  166. package/examples/jsm/tsl/display/hashBlur.js +18 -20
  167. package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
  168. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  169. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  170. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  171. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  172. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  173. package/package.json +5 -10
  174. package/src/Three.Core.js +5 -2
  175. package/src/Three.TSL.js +112 -32
  176. package/src/Three.WebGPU.Nodes.js +2 -0
  177. package/src/Three.WebGPU.js +4 -0
  178. package/src/animation/AnimationClip.js +20 -4
  179. package/src/animation/AnimationMixer.js +3 -3
  180. package/src/animation/AnimationObjectGroup.js +2 -1
  181. package/src/animation/KeyframeTrack.js +8 -7
  182. package/src/animation/PropertyBinding.js +12 -11
  183. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  184. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  185. package/src/audio/Audio.js +10 -9
  186. package/src/audio/PositionalAudio.js +1 -1
  187. package/src/cameras/Camera.js +14 -0
  188. package/src/cameras/OrthographicCamera.js +2 -2
  189. package/src/cameras/PerspectiveCamera.js +2 -2
  190. package/src/cameras/StereoCamera.js +2 -2
  191. package/src/constants.js +13 -5
  192. package/src/core/BufferAttribute.js +3 -3
  193. package/src/core/BufferGeometry.js +10 -10
  194. package/src/core/Clock.js +2 -8
  195. package/src/core/EventDispatcher.js +1 -1
  196. package/src/core/GLBufferAttribute.js +13 -1
  197. package/src/core/InterleavedBuffer.js +1 -1
  198. package/src/core/InterleavedBufferAttribute.js +3 -2
  199. package/src/core/Object3D.js +4 -3
  200. package/src/core/Raycaster.js +2 -1
  201. package/src/core/RenderTarget.js +10 -1
  202. package/{examples/jsm/misc → src/core}/Timer.js +4 -42
  203. package/src/extras/Controls.js +5 -4
  204. package/src/extras/DataUtils.js +2 -1
  205. package/src/extras/Earcut.js +6 -0
  206. package/src/extras/ImageUtils.js +2 -2
  207. package/src/extras/PMREMGenerator.js +279 -55
  208. package/src/extras/TextureUtils.js +2 -1
  209. package/src/extras/core/Curve.js +2 -1
  210. package/src/extras/core/Interpolations.js +7 -1
  211. package/src/extras/core/Path.js +22 -22
  212. package/src/extras/core/ShapePath.js +4 -4
  213. package/src/extras/lib/earcut.js +8 -8
  214. package/src/geometries/BoxGeometry.js +1 -0
  215. package/src/geometries/CapsuleGeometry.js +1 -0
  216. package/src/geometries/CircleGeometry.js +1 -0
  217. package/src/geometries/ConeGeometry.js +1 -0
  218. package/src/geometries/CylinderGeometry.js +1 -0
  219. package/src/geometries/DodecahedronGeometry.js +1 -0
  220. package/src/geometries/ExtrudeGeometry.js +8 -6
  221. package/src/geometries/IcosahedronGeometry.js +1 -0
  222. package/src/geometries/LatheGeometry.js +1 -0
  223. package/src/geometries/OctahedronGeometry.js +1 -0
  224. package/src/geometries/PlaneGeometry.js +1 -0
  225. package/src/geometries/RingGeometry.js +1 -0
  226. package/src/geometries/ShapeGeometry.js +1 -0
  227. package/src/geometries/SphereGeometry.js +1 -0
  228. package/src/geometries/TetrahedronGeometry.js +1 -0
  229. package/src/geometries/TorusGeometry.js +1 -0
  230. package/src/geometries/TorusKnotGeometry.js +1 -0
  231. package/src/geometries/TubeGeometry.js +1 -0
  232. package/src/helpers/CameraHelper.js +42 -12
  233. package/src/helpers/SkeletonHelper.js +35 -6
  234. package/src/lights/LightShadow.js +21 -8
  235. package/src/lights/PointLightShadow.js +1 -1
  236. package/src/lights/webgpu/ProjectorLight.js +1 -1
  237. package/src/loaders/AnimationLoader.js +2 -1
  238. package/src/loaders/AudioLoader.js +2 -1
  239. package/src/loaders/BufferGeometryLoader.js +2 -2
  240. package/src/loaders/Cache.js +2 -2
  241. package/src/loaders/DataTextureLoader.js +1 -1
  242. package/src/loaders/FileLoader.js +29 -5
  243. package/src/loaders/ImageBitmapLoader.js +32 -8
  244. package/src/loaders/ImageLoader.js +56 -9
  245. package/src/loaders/Loader.js +17 -3
  246. package/src/loaders/LoadingManager.js +45 -0
  247. package/src/loaders/MaterialLoader.js +3 -2
  248. package/src/loaders/ObjectLoader.js +13 -13
  249. package/src/loaders/TextureLoader.js +1 -1
  250. package/src/loaders/nodes/NodeLoader.js +3 -2
  251. package/src/materials/Material.js +16 -3
  252. package/src/materials/MeshBasicMaterial.js +2 -1
  253. package/src/materials/MeshDepthMaterial.js +1 -0
  254. package/src/materials/MeshDistanceMaterial.js +1 -1
  255. package/src/materials/MeshLambertMaterial.js +2 -1
  256. package/src/materials/MeshMatcapMaterial.js +22 -0
  257. package/src/materials/MeshNormalMaterial.js +1 -0
  258. package/src/materials/MeshPhongMaterial.js +2 -1
  259. package/src/materials/MeshPhysicalMaterial.js +2 -1
  260. package/src/materials/MeshStandardMaterial.js +8 -7
  261. package/src/materials/MeshToonMaterial.js +1 -0
  262. package/src/materials/PointsMaterial.js +1 -1
  263. package/src/materials/ShaderMaterial.js +2 -2
  264. package/src/materials/nodes/Line2NodeMaterial.js +2 -10
  265. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  266. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  267. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  268. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  269. package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
  270. package/src/materials/nodes/NodeMaterial.js +90 -27
  271. package/src/materials/nodes/PointsNodeMaterial.js +86 -28
  272. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  273. package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
  274. package/src/math/Color.js +6 -5
  275. package/src/math/ColorManagement.js +9 -3
  276. package/src/math/Cylindrical.js +1 -1
  277. package/src/math/Euler.js +2 -1
  278. package/src/math/Frustum.js +25 -9
  279. package/src/math/FrustumArray.js +10 -5
  280. package/src/math/Line3.js +129 -2
  281. package/src/math/MathUtils.js +13 -11
  282. package/src/math/Matrix2.js +1 -1
  283. package/src/math/Matrix3.js +2 -2
  284. package/src/math/Matrix4.js +55 -34
  285. package/src/math/Plane.js +1 -1
  286. package/src/math/Quaternion.js +69 -67
  287. package/src/math/Spherical.js +3 -3
  288. package/src/nodes/Nodes.js +6 -4
  289. package/src/nodes/TSL.js +9 -4
  290. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  291. package/src/nodes/accessors/Bitangent.js +31 -25
  292. package/src/nodes/accessors/BufferNode.js +1 -1
  293. package/src/nodes/accessors/Camera.js +142 -16
  294. package/src/nodes/accessors/ClippingNode.js +6 -5
  295. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  296. package/src/nodes/accessors/InstanceNode.js +25 -5
  297. package/src/nodes/accessors/Lights.js +10 -0
  298. package/src/nodes/accessors/Normal.js +97 -30
  299. package/src/nodes/accessors/Object3DNode.js +2 -2
  300. package/src/nodes/accessors/Position.js +25 -9
  301. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  302. package/src/nodes/accessors/ReferenceNode.js +20 -4
  303. package/src/nodes/accessors/ReflectVector.js +3 -3
  304. package/src/nodes/accessors/SceneNode.js +3 -2
  305. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  306. package/src/nodes/accessors/StorageTextureNode.js +23 -1
  307. package/src/nodes/accessors/Tangent.js +25 -17
  308. package/src/nodes/accessors/TangentUtils.js +46 -0
  309. package/src/nodes/accessors/Texture3DNode.js +14 -1
  310. package/src/nodes/accessors/TextureBicubic.js +21 -3
  311. package/src/nodes/accessors/TextureNode.js +142 -44
  312. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  313. package/src/nodes/code/FunctionCallNode.js +24 -4
  314. package/src/nodes/code/FunctionNode.js +23 -0
  315. package/src/nodes/core/ArrayNode.js +13 -0
  316. package/src/nodes/core/AssignNode.js +6 -2
  317. package/src/nodes/core/AttributeNode.js +2 -1
  318. package/src/nodes/core/ContextNode.js +48 -10
  319. package/src/nodes/core/IndexNode.js +2 -2
  320. package/src/nodes/core/InputNode.js +2 -1
  321. package/src/nodes/core/InspectorNode.js +128 -0
  322. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
  323. package/src/nodes/core/Node.js +167 -34
  324. package/src/nodes/core/NodeBuilder.js +404 -120
  325. package/src/nodes/core/NodeFrame.js +21 -21
  326. package/src/nodes/core/NodeFunction.js +2 -1
  327. package/src/nodes/core/NodeParser.js +2 -1
  328. package/src/nodes/core/NodeUniform.js +1 -1
  329. package/src/nodes/core/NodeUtils.js +17 -88
  330. package/src/nodes/core/ParameterNode.js +31 -0
  331. package/src/nodes/core/PropertyNode.js +7 -0
  332. package/src/nodes/core/StackNode.js +77 -30
  333. package/src/nodes/core/StructNode.js +5 -5
  334. package/src/nodes/core/StructTypeNode.js +1 -0
  335. package/src/nodes/core/SubBuildNode.js +89 -0
  336. package/src/nodes/core/UniformNode.js +80 -14
  337. package/src/nodes/core/VarNode.js +142 -16
  338. package/src/nodes/core/VaryingNode.js +9 -6
  339. package/src/nodes/display/BlendModes.js +7 -6
  340. package/src/nodes/display/BumpMapNode.js +1 -1
  341. package/src/nodes/display/ColorAdjustment.js +1 -1
  342. package/src/nodes/display/FrontFacingNode.js +35 -7
  343. package/src/nodes/display/NormalMapNode.js +20 -50
  344. package/src/nodes/display/PassNode.js +206 -17
  345. package/src/nodes/display/RenderOutputNode.js +28 -2
  346. package/src/nodes/display/ScreenNode.js +44 -40
  347. package/src/nodes/display/ToneMappingNode.js +31 -4
  348. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  349. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  350. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  351. package/src/nodes/display/ViewportTextureNode.js +94 -4
  352. package/src/nodes/fog/Fog.js +3 -2
  353. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  354. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  355. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  356. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  357. package/src/nodes/functions/BasicLightingModel.js +2 -1
  358. package/src/nodes/functions/PhongLightingModel.js +3 -3
  359. package/src/nodes/functions/PhysicalLightingModel.js +19 -18
  360. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  361. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  362. package/src/nodes/geometry/RangeNode.js +40 -4
  363. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  364. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  365. package/src/nodes/gpgpu/ComputeNode.js +81 -25
  366. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  367. package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
  368. package/src/nodes/lighting/EnvironmentNode.js +11 -11
  369. package/src/nodes/lighting/LightsNode.js +7 -8
  370. package/src/nodes/lighting/PointShadowNode.js +6 -0
  371. package/src/nodes/lighting/ProjectorLightNode.js +19 -6
  372. package/src/nodes/lighting/ShadowFilterNode.js +3 -1
  373. package/src/nodes/lighting/ShadowNode.js +77 -10
  374. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  375. package/src/nodes/materialx/lib/mx_noise.js +165 -1
  376. package/src/nodes/math/BitcastNode.js +156 -0
  377. package/src/nodes/math/ConditionalNode.js +25 -27
  378. package/src/nodes/math/MathNode.js +106 -65
  379. package/src/nodes/math/OperatorNode.js +28 -43
  380. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  381. package/src/nodes/shapes/Shapes.js +1 -1
  382. package/src/nodes/tsl/TSLBase.js +6 -2
  383. package/src/nodes/tsl/TSLCore.js +546 -186
  384. package/src/nodes/utils/DebugNode.js +3 -2
  385. package/src/nodes/utils/EquirectUV.js +27 -0
  386. package/src/nodes/utils/EventNode.js +119 -0
  387. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  388. package/src/nodes/utils/JoinNode.js +6 -3
  389. package/src/nodes/utils/LoopNode.js +20 -41
  390. package/src/nodes/utils/MatcapUV.js +22 -0
  391. package/src/nodes/utils/MemberNode.js +59 -7
  392. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  393. package/src/nodes/utils/RTTNode.js +33 -6
  394. package/src/nodes/utils/ReflectorNode.js +68 -10
  395. package/src/nodes/utils/SampleNode.js +91 -0
  396. package/src/nodes/utils/SplitNode.js +11 -0
  397. package/src/nodes/utils/Timer.js +0 -47
  398. package/src/nodes/utils/TriplanarTextures.js +65 -0
  399. package/src/objects/BatchedMesh.js +6 -4
  400. package/src/objects/LOD.js +1 -1
  401. package/src/objects/Line.js +2 -1
  402. package/src/objects/LineSegments.js +2 -1
  403. package/src/objects/Skeleton.js +3 -2
  404. package/src/objects/SkinnedMesh.js +3 -1
  405. package/src/objects/Sprite.js +4 -3
  406. package/src/renderers/WebGLRenderer.js +77 -66
  407. package/src/renderers/common/Animation.js +13 -1
  408. package/src/renderers/common/Attributes.js +1 -1
  409. package/src/renderers/common/Backend.js +108 -27
  410. package/src/renderers/common/Background.js +4 -3
  411. package/src/renderers/common/Bindings.js +76 -19
  412. package/src/renderers/common/CanvasTarget.js +341 -0
  413. package/src/renderers/common/ChainMap.js +1 -1
  414. package/src/renderers/common/Color4.js +2 -2
  415. package/src/renderers/common/CubeRenderTarget.js +1 -1
  416. package/src/renderers/common/DataMap.js +1 -1
  417. package/src/renderers/common/Geometries.js +26 -0
  418. package/src/renderers/common/Info.js +4 -2
  419. package/src/renderers/common/InspectorBase.js +146 -0
  420. package/src/renderers/common/Pipelines.js +1 -1
  421. package/src/renderers/common/PostProcessing.js +61 -25
  422. package/src/renderers/common/QuadMesh.js +7 -1
  423. package/src/renderers/common/RenderContext.js +2 -2
  424. package/src/renderers/common/RenderList.js +7 -3
  425. package/src/renderers/common/RenderObject.js +84 -5
  426. package/src/renderers/common/RenderObjects.js +1 -1
  427. package/src/renderers/common/Renderer.js +486 -255
  428. package/src/renderers/common/RendererUtils.js +9 -0
  429. package/src/renderers/common/SampledTexture.js +8 -68
  430. package/src/renderers/common/Sampler.js +117 -0
  431. package/src/renderers/common/Storage3DTexture.js +100 -0
  432. package/src/renderers/common/StorageArrayTexture.js +84 -0
  433. package/src/renderers/common/StorageTexture.js +27 -0
  434. package/src/renderers/common/Textures.js +138 -46
  435. package/src/renderers/common/TimestampQueryPool.js +65 -3
  436. package/src/renderers/common/UniformsGroup.js +2 -1
  437. package/src/renderers/common/XRManager.js +63 -24
  438. package/src/renderers/common/XRRenderTarget.js +21 -4
  439. package/src/renderers/common/extras/PMREMGenerator.js +161 -66
  440. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  441. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  442. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  443. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  444. package/src/renderers/common/nodes/Nodes.js +38 -16
  445. package/src/renderers/shaders/DFGLUTData.js +64 -0
  446. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  447. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  449. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  450. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  451. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  454. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
  455. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  456. package/src/renderers/shaders/UniformsLib.js +1 -0
  457. package/src/renderers/shaders/UniformsUtils.js +25 -4
  458. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  459. package/src/renderers/webgl/WebGLCapabilities.js +4 -3
  460. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  461. package/src/renderers/webgl/WebGLInfo.js +3 -1
  462. package/src/renderers/webgl/WebGLProgram.js +25 -18
  463. package/src/renderers/webgl/WebGLPrograms.js +9 -6
  464. package/src/renderers/webgl/WebGLShadowMap.js +13 -2
  465. package/src/renderers/webgl/WebGLState.js +17 -16
  466. package/src/renderers/webgl/WebGLTextures.js +38 -21
  467. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  468. package/src/renderers/webgl/WebGLUtils.js +3 -2
  469. package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
  470. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
  471. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  472. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  473. package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
  474. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
  475. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  476. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  477. package/src/renderers/webgpu/WebGPUBackend.js +205 -128
  478. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  479. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  480. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
  481. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
  482. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
  483. package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
  484. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
  485. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  486. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
  487. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  488. package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
  489. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  490. package/src/renderers/webxr/WebXRManager.js +89 -13
  491. package/src/textures/ExternalTexture.js +56 -0
  492. package/src/textures/FramebufferTexture.js +2 -2
  493. package/src/textures/Source.js +14 -3
  494. package/src/textures/Texture.js +3 -2
  495. package/src/textures/VideoTexture.js +29 -2
  496. package/src/utils.js +67 -3
  497. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  498. package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
  499. package/src/nodes/utils/EquirectUVNode.js +0 -65
  500. package/src/nodes/utils/MatcapUVNode.js +0 -49
  501. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -53,8 +53,9 @@ import { WebGLUtils } from './webgl/WebGLUtils.js';
53
53
  import { WebXRManager } from './webxr/WebXRManager.js';
54
54
  import { WebGLMaterials } from './webgl/WebGLMaterials.js';
55
55
  import { WebGLUniformsGroups } from './webgl/WebGLUniformsGroups.js';
56
- import { createCanvasElement, probeAsync, toNormalizedProjectionMatrix, toReversedProjectionMatrix, warnOnce } from '../utils.js';
56
+ import { createCanvasElement, probeAsync, warnOnce, error, warn, log } from '../utils.js';
57
57
  import { ColorManagement } from '../math/ColorManagement.js';
58
+ import { getDFGLUT } from './shaders/DFGLUTData.js';
58
59
 
59
60
  /**
60
61
  * This renderer uses WebGL 2 to display scenes.
@@ -81,7 +82,7 @@ class WebGLRenderer {
81
82
  preserveDrawingBuffer = false,
82
83
  powerPreference = 'default',
83
84
  failIfMajorPerformanceCaveat = false,
84
- reverseDepthBuffer = false,
85
+ reversedDepthBuffer = false,
85
86
  multiviewStereo = false,
86
87
  } = parameters;
87
88
 
@@ -112,6 +113,21 @@ class WebGLRenderer {
112
113
 
113
114
  }
114
115
 
116
+ const INTEGER_FORMATS = new Set( [
117
+ RGBAIntegerFormat,
118
+ RGIntegerFormat,
119
+ RedIntegerFormat
120
+ ] );
121
+
122
+ const UNSIGNED_TYPES = new Set( [
123
+ UnsignedByteType,
124
+ UnsignedIntType,
125
+ UnsignedShortType,
126
+ UnsignedInt248Type,
127
+ UnsignedShort4444Type,
128
+ UnsignedShort5551Type
129
+ ] );
130
+
115
131
  const uintClearColor = new Uint32Array( 4 );
116
132
  const intClearColor = new Int32Array( 4 );
117
133
 
@@ -133,7 +149,7 @@ class WebGLRenderer {
133
149
  * document.body.appendChild( renderer.domElement );
134
150
  * ```
135
151
  *
136
- * @type {DOMElement}
152
+ * @type {HTMLCanvasElement|OffscreenCanvas}
137
153
  */
138
154
  this.domElement = canvas;
139
155
 
@@ -315,7 +331,6 @@ class WebGLRenderer {
315
331
 
316
332
  // camera matrices cache
317
333
 
318
- const _currentProjectionMatrix = new Matrix4();
319
334
  const _projScreenMatrix = new Matrix4();
320
335
 
321
336
  const _vector3 = new Vector3();
@@ -387,7 +402,7 @@ class WebGLRenderer {
387
402
 
388
403
  } catch ( error ) {
389
404
 
390
- console.error( 'THREE.WebGLRenderer: ' + error.message );
405
+ error( 'WebGLRenderer: ' + error.message );
391
406
  throw error;
392
407
 
393
408
  }
@@ -412,7 +427,7 @@ class WebGLRenderer {
412
427
 
413
428
  state = new WebGLState( _gl, extensions );
414
429
 
415
- if ( capabilities.reverseDepthBuffer && reverseDepthBuffer ) {
430
+ if ( capabilities.reversedDepthBuffer && reversedDepthBuffer ) {
416
431
 
417
432
  state.buffers.depth.setReversed( true );
418
433
 
@@ -524,7 +539,7 @@ class WebGLRenderer {
524
539
 
525
540
  // xr
526
541
 
527
- const xr = new WebXRManager( _this, _gl );
542
+ const xr = new WebXRManager( _this, _gl, extensions, multiviewStereo );
528
543
 
529
544
  /**
530
545
  * A reference to the XR manager.
@@ -626,7 +641,7 @@ class WebGLRenderer {
626
641
 
627
642
  if ( xr.isPresenting ) {
628
643
 
629
- console.warn( 'THREE.WebGLRenderer: Can\'t change size while VR device is presenting.' );
644
+ warn( 'WebGLRenderer: Can\'t change size while VR device is presenting.' );
630
645
  return;
631
646
 
632
647
  }
@@ -888,9 +903,7 @@ class WebGLRenderer {
888
903
  if ( _currentRenderTarget !== null ) {
889
904
 
890
905
  const targetFormat = _currentRenderTarget.texture.format;
891
- isIntegerFormat = targetFormat === RGBAIntegerFormat ||
892
- targetFormat === RGIntegerFormat ||
893
- targetFormat === RedIntegerFormat;
906
+ isIntegerFormat = INTEGER_FORMATS.has( targetFormat );
894
907
 
895
908
  }
896
909
 
@@ -899,12 +912,7 @@ class WebGLRenderer {
899
912
  if ( isIntegerFormat ) {
900
913
 
901
914
  const targetType = _currentRenderTarget.texture.type;
902
- const isUnsignedType = targetType === UnsignedByteType ||
903
- targetType === UnsignedIntType ||
904
- targetType === UnsignedShortType ||
905
- targetType === UnsignedInt248Type ||
906
- targetType === UnsignedShort4444Type ||
907
- targetType === UnsignedShort5551Type;
915
+ const isUnsignedType = UNSIGNED_TYPES.has( targetType );
908
916
 
909
917
  const clearColor = background.getClearColor();
910
918
  const a = background.getClearAlpha();
@@ -1018,7 +1026,7 @@ class WebGLRenderer {
1018
1026
 
1019
1027
  event.preventDefault();
1020
1028
 
1021
- console.log( 'THREE.WebGLRenderer: Context Lost.' );
1029
+ log( 'WebGLRenderer: Context Lost.' );
1022
1030
 
1023
1031
  _isContextLost = true;
1024
1032
 
@@ -1026,7 +1034,7 @@ class WebGLRenderer {
1026
1034
 
1027
1035
  function onContextRestore( /* event */ ) {
1028
1036
 
1029
- console.log( 'THREE.WebGLRenderer: Context Restored.' );
1037
+ log( 'WebGLRenderer: Context Restored.' );
1030
1038
 
1031
1039
  _isContextLost = false;
1032
1040
 
@@ -1048,7 +1056,7 @@ class WebGLRenderer {
1048
1056
 
1049
1057
  function onContextCreationError( event ) {
1050
1058
 
1051
- console.error( 'THREE.WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage );
1059
+ error( 'WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage );
1052
1060
 
1053
1061
  }
1054
1062
 
@@ -1221,7 +1229,7 @@ class WebGLRenderer {
1221
1229
  if ( object._multiDrawInstances !== null ) {
1222
1230
 
1223
1231
  // @deprecated, r174
1224
- warnOnce( 'THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
1232
+ warnOnce( 'WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
1225
1233
  renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
1226
1234
 
1227
1235
  } else {
@@ -1497,6 +1505,13 @@ class WebGLRenderer {
1497
1505
 
1498
1506
  if ( typeof self !== 'undefined' ) animation.setContext( self );
1499
1507
 
1508
+ /**
1509
+ * Applications are advised to always define the animation loop
1510
+ * with this method and not manually with `requestAnimationFrame()`
1511
+ * for best compatibility.
1512
+ *
1513
+ * @param {?onAnimationCallback} callback - The application's animation loop.
1514
+ */
1500
1515
  this.setAnimationLoop = function ( callback ) {
1501
1516
 
1502
1517
  onAnimationFrameCallback = callback;
@@ -1529,7 +1544,7 @@ class WebGLRenderer {
1529
1544
 
1530
1545
  if ( camera !== undefined && camera.isCamera !== true ) {
1531
1546
 
1532
- console.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );
1547
+ error( 'WebGLRenderer.render: camera is not an instance of THREE.Camera.' );
1533
1548
  return;
1534
1549
 
1535
1550
  }
@@ -1561,7 +1576,7 @@ class WebGLRenderer {
1561
1576
  renderStateStack.push( currentRenderState );
1562
1577
 
1563
1578
  _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
1564
- _frustum.setFromProjectionMatrix( _projScreenMatrix );
1579
+ _frustum.setFromProjectionMatrix( _projScreenMatrix, WebGLCoordinateSystem, camera.reversedDepth );
1565
1580
 
1566
1581
  _localClippingEnabled = this.localClippingEnabled;
1567
1582
  _clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );
@@ -1687,6 +1702,8 @@ class WebGLRenderer {
1687
1702
 
1688
1703
  if ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );
1689
1704
 
1705
+ textures.runDeferredUploads();
1706
+
1690
1707
  // _gl.finish();
1691
1708
 
1692
1709
  bindingStates.resetDefaultState();
@@ -1837,9 +1854,7 @@ class WebGLRenderer {
1837
1854
 
1838
1855
  function renderScene( currentRenderList, scene, camera, viewport ) {
1839
1856
 
1840
- const opaqueObjects = currentRenderList.opaque;
1841
- const transmissiveObjects = currentRenderList.transmissive;
1842
- const transparentObjects = currentRenderList.transparent;
1857
+ const { opaque: opaqueObjects, transmissive: transmissiveObjects, transparent: transparentObjects } = currentRenderList;
1843
1858
 
1844
1859
  currentRenderState.setupLightsView( camera );
1845
1860
 
@@ -1904,6 +1919,9 @@ class WebGLRenderer {
1904
1919
  //
1905
1920
 
1906
1921
  const currentRenderTarget = _this.getRenderTarget();
1922
+ const currentActiveCubeFace = _this.getActiveCubeFace();
1923
+ const currentActiveMipmapLevel = _this.getActiveMipmapLevel();
1924
+
1907
1925
  _this.setRenderTarget( transmissionRenderTarget );
1908
1926
 
1909
1927
  _this.getClearColor( _currentClearColor );
@@ -1941,10 +1959,7 @@ class WebGLRenderer {
1941
1959
 
1942
1960
  const renderItem = transmissiveObjects[ i ];
1943
1961
 
1944
- const object = renderItem.object;
1945
- const geometry = renderItem.geometry;
1946
- const material = renderItem.material;
1947
- const group = renderItem.group;
1962
+ const { object, geometry, material, group } = renderItem;
1948
1963
 
1949
1964
  if ( material.side === DoubleSide && object.layers.test( camera.layers ) ) {
1950
1965
 
@@ -1973,7 +1988,7 @@ class WebGLRenderer {
1973
1988
 
1974
1989
  }
1975
1990
 
1976
- _this.setRenderTarget( currentRenderTarget );
1991
+ _this.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel );
1977
1992
 
1978
1993
  _this.setClearColor( _currentClearColor, _currentClearAlpha );
1979
1994
 
@@ -1991,9 +2006,7 @@ class WebGLRenderer {
1991
2006
 
1992
2007
  const renderItem = renderList[ i ];
1993
2008
 
1994
- const object = renderItem.object;
1995
- const geometry = renderItem.geometry;
1996
- const group = renderItem.group;
2009
+ const { object, geometry, group } = renderItem;
1997
2010
  let material = renderItem.material;
1998
2011
 
1999
2012
  if ( material.allowOverride === true && overrideMaterial !== null ) {
@@ -2405,23 +2418,17 @@ class WebGLRenderer {
2405
2418
 
2406
2419
  } else {
2407
2420
 
2408
- const reverseDepthBuffer = state.buffers.depth.getReversed();
2421
+ const reversedDepthBuffer = state.buffers.depth.getReversed();
2409
2422
 
2410
- if ( reverseDepthBuffer ) {
2423
+ if ( reversedDepthBuffer && camera.reversedDepth !== true ) {
2411
2424
 
2412
- _currentProjectionMatrix.copy( camera.projectionMatrix );
2413
-
2414
- toNormalizedProjectionMatrix( _currentProjectionMatrix );
2415
- toReversedProjectionMatrix( _currentProjectionMatrix );
2416
-
2417
- p_uniforms.setValue( _gl, 'projectionMatrix', _currentProjectionMatrix );
2418
-
2419
- } else {
2420
-
2421
- p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );
2425
+ camera._reversedDepth = true;
2426
+ camera.updateProjectionMatrix();
2422
2427
 
2423
2428
  }
2424
2429
 
2430
+ p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );
2431
+
2425
2432
  p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );
2426
2433
 
2427
2434
  }
@@ -2538,6 +2545,13 @@ class WebGLRenderer {
2538
2545
 
2539
2546
  }
2540
2547
 
2548
+ // Set DFG LUT for physically-based materials
2549
+ if ( m_uniforms.dfgLUT !== undefined ) {
2550
+
2551
+ m_uniforms.dfgLUT.value = getDFGLUT();
2552
+
2553
+ }
2554
+
2541
2555
  if ( refreshMaterial ) {
2542
2556
 
2543
2557
  p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );
@@ -2711,7 +2725,7 @@ class WebGLRenderer {
2711
2725
  const renderTargetProperties = properties.get( renderTarget );
2712
2726
 
2713
2727
  renderTargetProperties.__autoAllocateDepthBuffer = renderTarget.resolveDepthBuffer === false;
2714
- if ( ! renderTargetProperties.__autoAllocateDepthBuffer === false && ( ! _currentRenderTarget || ! _currentRenderTarget.isWebGLMultiviewRenderTarget ) ) {
2728
+ if ( ! renderTargetProperties.__autoAllocateDepthBuffer ) {
2715
2729
 
2716
2730
  // The multisample_render_to_texture extension doesn't work properly if there
2717
2731
  // are midframe flushes and an external depth buffer. Disable use of the extension.
@@ -2887,9 +2901,15 @@ class WebGLRenderer {
2887
2901
 
2888
2902
  } else if ( isRenderTarget3D ) {
2889
2903
 
2890
- const textureProperties = properties.get( renderTarget.texture );
2891
2904
  const layer = activeCubeFace;
2892
- _gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel, layer );
2905
+
2906
+ for ( let i = 0; i < renderTarget.textures.length; i ++ ) {
2907
+
2908
+ const textureProperties = properties.get( renderTarget.textures[ i ] );
2909
+
2910
+ _gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, textureProperties.__webglTexture, activeMipmapLevel, layer );
2911
+
2912
+ }
2893
2913
 
2894
2914
  } else if ( renderTarget !== null && activeMipmapLevel !== 0 ) {
2895
2915
 
@@ -2920,7 +2940,7 @@ class WebGLRenderer {
2920
2940
 
2921
2941
  if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
2922
2942
 
2923
- console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );
2943
+ error( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );
2924
2944
  return;
2925
2945
 
2926
2946
  }
@@ -2945,14 +2965,14 @@ class WebGLRenderer {
2945
2965
 
2946
2966
  if ( ! capabilities.textureFormatReadable( textureFormat ) ) {
2947
2967
 
2948
- console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );
2968
+ error( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );
2949
2969
  return;
2950
2970
 
2951
2971
  }
2952
2972
 
2953
2973
  if ( ! capabilities.textureTypeReadable( textureType ) ) {
2954
2974
 
2955
- console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );
2975
+ error( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );
2956
2976
  return;
2957
2977
 
2958
2978
  }
@@ -2961,7 +2981,7 @@ class WebGLRenderer {
2961
2981
 
2962
2982
  if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {
2963
2983
 
2964
- // when using MRT, select the corect color buffer for the subsequent read command
2984
+ // when using MRT, select the correct color buffer for the subsequent read command
2965
2985
 
2966
2986
  if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
2967
2987
 
@@ -3041,7 +3061,7 @@ class WebGLRenderer {
3041
3061
  _gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );
3042
3062
  _gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );
3043
3063
 
3044
- // when using MRT, select the corect color buffer for the subsequent read command
3064
+ // when using MRT, select the correct color buffer for the subsequent read command
3045
3065
 
3046
3066
  if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
3047
3067
 
@@ -3368,15 +3388,6 @@ class WebGLRenderer {
3368
3388
 
3369
3389
  };
3370
3390
 
3371
- this.copyTextureToTexture3D = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {
3372
-
3373
- // @deprecated, r170
3374
- warnOnce( 'WebGLRenderer: copyTextureToTexture3D function has been deprecated. Use "copyTextureToTexture" instead.' );
3375
-
3376
- return this.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, level );
3377
-
3378
- };
3379
-
3380
3391
  /**
3381
3392
  * Initializes the given WebGLRenderTarget memory. Useful for initializing a render target so data
3382
3393
  * can be copied into it using {@link WebGLRenderer#copyTextureToTexture} before it has been
@@ -3493,7 +3504,7 @@ class WebGLRenderer {
3493
3504
  * WebGLRenderer options.
3494
3505
  *
3495
3506
  * @typedef {Object} WebGLRenderer~Options
3496
- * @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.
3507
+ * @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.
3497
3508
  * @property {WebGL2RenderingContext} [context=null] - Can be used to attach an existing rendering context to this renderer.
3498
3509
  * @property {('highp'|'mediump'|'lowp')} [precision='highp'] - The default shader precision. Uses `highp` if supported by the device.
3499
3510
  * @property {boolean} [alpha=false] - Controls the default clear alpha value. When set to`true`, the value is `0`. Otherwise it's `1`.
@@ -3506,7 +3517,7 @@ class WebGLRenderer {
3506
3517
  * @property {boolean} [depth=true] Whether the drawing buffer has a depth buffer of at least 16 bits.
3507
3518
  * @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.
3508
3519
  * Note that this setting uses `gl_FragDepth` if available which disables the Early Fragment Test optimization and can cause a decrease in performance.
3509
- * @property {boolean} [reverseDepthBuffer=false] Whether to use a reverse depth buffer. Requires the `EXT_clip_control` extension.
3520
+ * @property {boolean} [reversedDepthBuffer=false] Whether to use a reverse depth buffer. Requires the `EXT_clip_control` extension.
3510
3521
  * This is a more faster and accurate version than logarithmic depth buffer.
3511
3522
  **/
3512
3523
 
@@ -3527,7 +3538,7 @@ class WebGLRenderer {
3527
3538
  * @property {number} maxVertexTextures - The number of textures that can be used in a vertex shader.
3528
3539
  * @property {number} maxVertexUniforms - The maximum number of uniforms that can be used in a vertex shader.
3529
3540
  * @property {string} precision - The shader precision currently being used by the renderer.
3530
- * @property {boolean} reverseDepthBuffer - `true` if `reverseDepthBuffer` was set to `true` in the constructor
3541
+ * @property {boolean} reversedDepthBuffer - `true` if `reversedDepthBuffer` was set to `true` in the constructor
3531
3542
  * and the rendering context supports `EXT_clip_control`.
3532
3543
  * @property {boolean} vertexTextures - `true` if vertex textures can be used.
3533
3544
  **/
@@ -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();
@@ -33,7 +33,7 @@ class Attributes extends DataMap {
33
33
  * Deletes the data for the given attribute.
34
34
  *
35
35
  * @param {BufferAttribute} attribute - The attribute.
36
- * @return {Object|null} The deleted attribute data.
36
+ * @return {?Object} The deleted attribute data.
37
37
  */
38
38
  delete( attribute ) {
39
39
 
@@ -4,7 +4,7 @@ let _color4 = null;
4
4
  import Color4 from './Color4.js';
5
5
  import { Vector2 } from '../../math/Vector2.js';
6
6
  import { createCanvasElement, warnOnce } from '../../utils.js';
7
- import { REVISION } from '../../constants.js';
7
+ import { REVISION, TimestampQuery } from '../../constants.js';
8
8
 
9
9
  /**
10
10
  * Most of the rendering related logic is implemented in the
@@ -38,7 +38,7 @@ class Backend {
38
38
  * This weak map holds backend-specific data of objects
39
39
  * like textures, attributes or render targets.
40
40
  *
41
- * @type {WeakMap}
41
+ * @type {WeakMap<Object, Object>}
42
42
  */
43
43
  this.data = new WeakMap();
44
44
 
@@ -64,8 +64,8 @@ class Backend {
64
64
  * @type {{render: ?TimestampQueryPool, compute: ?TimestampQueryPool}}
65
65
  */
66
66
  this.timestampQueryPool = {
67
- 'render': null,
68
- 'compute': null
67
+ [ TimestampQuery.RENDER ]: null,
68
+ [ TimestampQuery.COMPUTE ]: null
69
69
  };
70
70
 
71
71
  /**
@@ -273,20 +273,13 @@ class Backend {
273
273
  // textures
274
274
 
275
275
  /**
276
- * Creates a GPU sampler for the given texture.
276
+ * Updates a GPU sampler for the given texture.
277
277
  *
278
278
  * @abstract
279
- * @param {Texture} texture - The texture to create the sampler for.
279
+ * @param {Texture} texture - The texture to update the sampler for.
280
+ * @return {string} The current sampler key.
280
281
  */
281
- createSampler( /*texture*/ ) { }
282
-
283
- /**
284
- * Destroys the GPU sampler for the given texture.
285
- *
286
- * @abstract
287
- * @param {Texture} texture - The texture to destroy the sampler for.
288
- */
289
- destroySampler( /*texture*/ ) {}
282
+ updateSampler( /*texture*/ ) { }
290
283
 
291
284
  /**
292
285
  * Creates a default texture for the given texture that can be used
@@ -328,8 +321,9 @@ class Backend {
328
321
  *
329
322
  * @abstract
330
323
  * @param {Texture} texture - The texture.
324
+ * @param {boolean} [isDefaultTexture=false] - Whether the texture uses a default GPU texture or not.
331
325
  */
332
- destroyTexture( /*texture*/ ) { }
326
+ destroyTexture( /*texture, isDefaultTexture*/ ) { }
333
327
 
334
328
  /**
335
329
  * Returns texture data as a typed array.
@@ -439,6 +433,103 @@ class Backend {
439
433
 
440
434
  // utils
441
435
 
436
+ /**
437
+ * Updates a unique identifier for the given render context that can be used
438
+ * to allocate resources like occlusion queries or timestamp queries.
439
+ *
440
+ * @param {RenderContext|ComputeNode} abstractRenderContext - The render context.
441
+ */
442
+ updateTimeStampUID( abstractRenderContext ) {
443
+
444
+ const contextData = this.get( abstractRenderContext );
445
+ const frame = this.renderer.info.frame;
446
+
447
+ let prefix;
448
+
449
+ if ( abstractRenderContext.isComputeNode === true ) {
450
+
451
+ prefix = 'c:' + this.renderer.info.compute.frameCalls;
452
+
453
+ } else {
454
+
455
+ prefix = 'r:' + this.renderer.info.render.frameCalls;
456
+
457
+ }
458
+
459
+ contextData.timestampUID = prefix + ':' + abstractRenderContext.id + ':f' + frame;
460
+
461
+ }
462
+
463
+ /**
464
+ * Returns a unique identifier for the given render context that can be used
465
+ * to allocate resources like occlusion queries or timestamp queries.
466
+ *
467
+ * @param {RenderContext|ComputeNode} abstractRenderContext - The render context.
468
+ * @return {string} The unique identifier.
469
+ */
470
+ getTimestampUID( abstractRenderContext ) {
471
+
472
+ return this.get( abstractRenderContext ).timestampUID;
473
+
474
+ }
475
+
476
+ /**
477
+ * Returns all timestamp frames for the given type.
478
+ *
479
+ * @param {string} type - The type of the time stamp.
480
+ * @return {Array<number>} The timestamp frames.
481
+ */
482
+ getTimestampFrames( type ) {
483
+
484
+ const queryPool = this.timestampQueryPool[ type ];
485
+
486
+ return queryPool ? queryPool.getTimestampFrames() : [];
487
+
488
+ }
489
+
490
+ /**
491
+ * Returns the query pool for the given uid.
492
+ *
493
+ * @param {string} uid - The unique identifier.
494
+ * @return {TimestampQueryPool} The query pool.
495
+ */
496
+ _getQueryPool( uid ) {
497
+
498
+ const type = uid.startsWith( 'c:' ) ? TimestampQuery.COMPUTE : TimestampQuery.RENDER;
499
+ const queryPool = this.timestampQueryPool[ type ];
500
+
501
+ return queryPool;
502
+
503
+ }
504
+
505
+ /**
506
+ * Returns the timestamp for the given uid.
507
+ *
508
+ * @param {string} uid - The unique identifier.
509
+ * @return {number} The timestamp.
510
+ */
511
+ getTimestamp( uid ) {
512
+
513
+ const queryPool = this._getQueryPool( uid );
514
+
515
+ return queryPool.getTimestamp( uid );
516
+
517
+ }
518
+
519
+ /**
520
+ * Returns `true` if a timestamp for the given uid is available.
521
+ *
522
+ * @param {string} uid - The unique identifier.
523
+ * @return {boolean} Whether the timestamp is available or not.
524
+ */
525
+ hasTimestamp( uid ) {
526
+
527
+ const queryPool = this._getQueryPool( uid );
528
+
529
+ return queryPool.hasTimestamp( uid );
530
+
531
+ }
532
+
442
533
  /**
443
534
  * Returns `true` if the given 3D object is fully occluded by other
444
535
  * 3D objects in the scene. Backends must implement this method by using
@@ -469,9 +560,9 @@ class Backend {
469
560
  }
470
561
 
471
562
  const queryPool = this.timestampQueryPool[ type ];
563
+
472
564
  if ( ! queryPool ) {
473
565
 
474
- warnOnce( `WebGPURenderer: No timestamp query pool for type '${type}' found.` );
475
566
  return;
476
567
 
477
568
  }
@@ -484,16 +575,6 @@ class Backend {
484
575
 
485
576
  }
486
577
 
487
- /**
488
- * Can be used to synchronize CPU operations with GPU tasks. So when this method is called,
489
- * the CPU waits for the GPU to complete its operation (e.g. a compute task).
490
- *
491
- * @async
492
- * @abstract
493
- * @return {Promise} A Promise that resolves when synchronization has been finished.
494
- */
495
- async waitForGPU() {}
496
-
497
578
  /**
498
579
  * This method performs a readback operation by moving buffer data from
499
580
  * a storage buffer attribute from the GPU to the CPU.
@@ -1,11 +1,12 @@
1
1
  import DataMap from './DataMap.js';
2
2
  import Color4 from './Color4.js';
3
- import { vec4, context, normalWorld, backgroundBlurriness, backgroundIntensity, backgroundRotation, modelViewProjection } from '../../nodes/TSL.js';
3
+ import { vec4, context, normalWorldGeometry, backgroundBlurriness, backgroundIntensity, backgroundRotation, modelViewProjection } from '../../nodes/TSL.js';
4
4
  import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
5
5
 
6
6
  import { Mesh } from '../../objects/Mesh.js';
7
7
  import { SphereGeometry } from '../../geometries/SphereGeometry.js';
8
8
  import { BackSide } from '../../constants.js';
9
+ import { error } from '../../utils.js';
9
10
 
10
11
  const _clearColor = /*@__PURE__*/ new Color4();
11
12
 
@@ -89,7 +90,7 @@ class Background extends DataMap {
89
90
 
90
91
  const backgroundMeshNode = context( vec4( backgroundNode ).mul( backgroundIntensity ), {
91
92
  // @TODO: Add Texture2D support using node context
92
- getUV: () => backgroundRotation.mul( normalWorld ),
93
+ getUV: () => backgroundRotation.mul( normalWorldGeometry ),
93
94
  getTextureLevel: () => backgroundBlurriness
94
95
  } );
95
96
 
@@ -148,7 +149,7 @@ class Background extends DataMap {
148
149
 
149
150
  } else {
150
151
 
151
- console.error( 'THREE.Renderer: Unsupported background configuration.', background );
152
+ error( 'Renderer: Unsupported background configuration.', background );
152
153
 
153
154
  }
154
155