super-three 0.170.1 → 0.172.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 (413) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +157 -49
  3. package/build/three.core.js +104 -42
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +53 -8
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +10 -5
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +21191 -1008
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +21189 -1008
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -5
  14. package/examples/jsm/animation/CCDIKSolver.js +3 -2
  15. package/examples/jsm/controls/ArcballControls.js +28 -19
  16. package/examples/jsm/controls/OrbitControls.js +5 -4
  17. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  18. package/examples/jsm/curves/NURBSCurve.js +1 -1
  19. package/examples/jsm/curves/NURBSUtils.js +3 -0
  20. package/examples/jsm/effects/OutlineEffect.js +1 -1
  21. package/examples/jsm/exporters/GLTFExporter.js +11 -7
  22. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  23. package/examples/jsm/exporters/PLYExporter.js +2 -2
  24. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  25. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  26. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  27. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  28. package/examples/jsm/loaders/3MFLoader.js +6 -3
  29. package/examples/jsm/loaders/BVHLoader.js +1 -1
  30. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  31. package/examples/jsm/loaders/DDSLoader.js +42 -0
  32. package/examples/jsm/loaders/GCodeLoader.js +1 -1
  33. package/examples/jsm/loaders/GLTFLoader.js +22 -2
  34. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  35. package/examples/jsm/loaders/KTXLoader.js +4 -4
  36. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  37. package/examples/jsm/loaders/LottieLoader.js +1 -1
  38. package/examples/jsm/loaders/MTLLoader.js +1 -0
  39. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  40. package/examples/jsm/loaders/PLYLoader.js +7 -7
  41. package/examples/jsm/loaders/PVRLoader.js +1 -1
  42. package/examples/jsm/loaders/SVGLoader.js +2 -2
  43. package/examples/jsm/loaders/TDSLoader.js +1 -1
  44. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  45. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  46. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  47. package/examples/jsm/math/ConvexHull.js +1 -1
  48. package/examples/jsm/math/OBB.js +17 -0
  49. package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
  50. package/examples/jsm/misc/Volume.js +20 -12
  51. package/examples/jsm/misc/VolumeSlice.js +2 -2
  52. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  53. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  54. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  55. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  56. package/examples/jsm/objects/Sky.js +2 -2
  57. package/examples/jsm/objects/SkyMesh.js +3 -3
  58. package/examples/jsm/objects/Water2.js +1 -1
  59. package/examples/jsm/objects/Water2Mesh.js +2 -2
  60. package/examples/jsm/objects/WaterMesh.js +4 -4
  61. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  62. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  63. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  64. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  65. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  66. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  67. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  68. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  69. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  70. package/examples/jsm/shaders/BokehShader2.js +1 -1
  71. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  72. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  73. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  74. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  75. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  76. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  77. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  78. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  79. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  80. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  81. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  82. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  83. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  84. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  85. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  86. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  87. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  88. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  89. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  90. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  91. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  92. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  93. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  94. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  95. package/examples/jsm/tsl/display/Sepia.js +9 -0
  96. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  97. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  98. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  99. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  100. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  101. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  102. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  103. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  104. package/examples/jsm/utils/CameraUtils.js +4 -1
  105. package/examples/jsm/utils/GeometryUtils.js +22 -19
  106. package/examples/jsm/utils/SceneUtils.js +2 -2
  107. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  108. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  109. package/package.json +8 -3
  110. package/src/Three.Core.js +2 -0
  111. package/src/Three.Legacy.js +0 -21
  112. package/src/Three.TSL.js +9 -4
  113. package/src/Three.WebGPU.Nodes.js +2 -2
  114. package/src/Three.WebGPU.js +2 -2
  115. package/src/animation/PropertyBinding.js +2 -2
  116. package/src/cameras/PerspectiveCamera.js +18 -2
  117. package/src/constants.js +1 -1
  118. package/src/core/RenderTarget.js +18 -0
  119. package/src/core/RenderTarget3D.js +22 -0
  120. package/src/core/RenderTargetArray.js +22 -0
  121. package/src/extras/Earcut.js +1 -1
  122. package/src/extras/PMREMGenerator.js +20 -0
  123. package/src/extras/TextureUtils.js +6 -0
  124. package/src/helpers/CameraHelper.js +16 -13
  125. package/src/loaders/nodes/NodeLoader.js +59 -0
  126. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  127. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  128. package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
  129. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  130. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  131. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  132. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  133. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  134. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  135. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  136. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  137. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  138. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  139. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  140. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  141. package/src/materials/nodes/NodeMaterial.js +474 -21
  142. package/src/materials/nodes/PointsNodeMaterial.js +22 -13
  143. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  144. package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
  145. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  146. package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
  147. package/src/nodes/Nodes.js +1 -6
  148. package/src/nodes/TSL.js +2 -3
  149. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  150. package/src/nodes/accessors/Arrays.js +24 -5
  151. package/src/nodes/accessors/BatchNode.js +39 -3
  152. package/src/nodes/accessors/Bitangent.js +37 -0
  153. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  154. package/src/nodes/accessors/BufferNode.js +63 -0
  155. package/src/nodes/accessors/BuiltinNode.js +38 -0
  156. package/src/nodes/accessors/Camera.js +49 -0
  157. package/src/nodes/accessors/ClippingNode.js +71 -2
  158. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  159. package/src/nodes/accessors/InstanceNode.js +85 -2
  160. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  161. package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
  162. package/src/nodes/accessors/Lights.js +50 -1
  163. package/src/nodes/accessors/MaterialNode.js +302 -8
  164. package/src/nodes/accessors/MaterialProperties.js +7 -0
  165. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  166. package/src/nodes/accessors/ModelNode.js +100 -5
  167. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  168. package/src/nodes/accessors/MorphNode.js +48 -4
  169. package/src/nodes/accessors/Normal.js +59 -3
  170. package/src/nodes/accessors/Object3DNode.js +102 -1
  171. package/src/nodes/accessors/PointUVNode.js +26 -0
  172. package/src/nodes/accessors/Position.js +53 -4
  173. package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
  174. package/src/nodes/accessors/ReferenceNode.js +202 -2
  175. package/src/nodes/accessors/ReflectVector.js +24 -0
  176. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  177. package/src/nodes/accessors/SceneNode.js +54 -0
  178. package/src/nodes/accessors/SkinningNode.js +127 -1
  179. package/src/nodes/accessors/StorageBufferNode.js +168 -4
  180. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  181. package/src/nodes/accessors/Tangent.js +36 -0
  182. package/src/nodes/accessors/Texture3DNode.js +89 -5
  183. package/src/nodes/accessors/TextureBicubic.js +12 -2
  184. package/src/nodes/accessors/TextureNode.js +309 -10
  185. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  186. package/src/nodes/accessors/UV.js +10 -1
  187. package/src/nodes/accessors/UniformArrayNode.js +223 -23
  188. package/src/nodes/accessors/UserDataNode.js +46 -0
  189. package/src/nodes/accessors/VelocityNode.js +82 -0
  190. package/src/nodes/accessors/VertexColorNode.js +39 -2
  191. package/src/nodes/code/CodeNode.js +95 -1
  192. package/src/nodes/code/ExpressionNode.js +28 -0
  193. package/src/nodes/code/FunctionCallNode.js +37 -0
  194. package/src/nodes/code/FunctionNode.js +45 -0
  195. package/src/nodes/code/ScriptableNode.js +223 -1
  196. package/src/nodes/code/ScriptableValueNode.js +85 -1
  197. package/src/nodes/core/AssignNode.js +48 -2
  198. package/src/nodes/core/AttributeNode.js +43 -0
  199. package/src/nodes/core/BypassNode.js +47 -2
  200. package/src/nodes/core/CacheNode.js +53 -2
  201. package/src/nodes/core/ConstNode.js +24 -0
  202. package/src/nodes/core/ContextNode.js +65 -0
  203. package/src/nodes/core/IndexNode.js +68 -7
  204. package/src/nodes/core/InputNode.js +48 -0
  205. package/src/nodes/core/LightingModel.js +60 -0
  206. package/src/nodes/core/MRTNode.js +66 -0
  207. package/src/nodes/core/Node.js +337 -12
  208. package/src/nodes/core/NodeAttribute.js +38 -0
  209. package/src/nodes/core/NodeBuilder.js +945 -15
  210. package/src/nodes/core/NodeCache.js +41 -2
  211. package/src/nodes/core/NodeCode.js +31 -0
  212. package/src/nodes/core/NodeFrame.js +123 -2
  213. package/src/nodes/core/NodeFunction.js +46 -0
  214. package/src/nodes/core/NodeFunctionInput.js +44 -0
  215. package/src/nodes/core/NodeParser.js +11 -0
  216. package/src/nodes/core/NodeUniform.js +52 -0
  217. package/src/nodes/core/NodeUtils.js +141 -0
  218. package/src/nodes/core/NodeVar.js +30 -0
  219. package/src/nodes/core/NodeVarying.js +28 -0
  220. package/src/nodes/core/OutputStructNode.js +33 -2
  221. package/src/nodes/core/ParameterNode.js +28 -0
  222. package/src/nodes/core/PropertyNode.js +232 -0
  223. package/src/nodes/core/StackNode.js +78 -0
  224. package/src/nodes/core/StructTypeNode.js +39 -1
  225. package/src/nodes/core/TempNode.js +30 -4
  226. package/src/nodes/core/UniformGroupNode.js +82 -7
  227. package/src/nodes/core/UniformNode.js +66 -0
  228. package/src/nodes/core/VarNode.js +52 -0
  229. package/src/nodes/core/VaryingNode.js +83 -2
  230. package/src/nodes/core/constants.js +36 -0
  231. package/src/nodes/display/BumpMapNode.js +37 -0
  232. package/src/nodes/display/ColorAdjustment.js +53 -11
  233. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  234. package/src/nodes/display/ColorSpaceNode.js +82 -0
  235. package/src/nodes/display/FrontFacingNode.js +29 -0
  236. package/src/nodes/display/NormalMapNode.js +43 -0
  237. package/src/nodes/display/PassNode.js +298 -7
  238. package/src/nodes/display/PosterizeNode.js +33 -0
  239. package/src/nodes/display/RenderOutputNode.js +66 -1
  240. package/src/nodes/display/ScreenNode.js +87 -0
  241. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  242. package/src/nodes/display/ToneMappingNode.js +55 -2
  243. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  244. package/src/nodes/display/ViewportDepthNode.js +122 -8
  245. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  246. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  247. package/src/nodes/display/ViewportTextureNode.js +57 -0
  248. package/src/nodes/fog/Fog.js +93 -0
  249. package/src/nodes/functions/BasicLightingModel.js +24 -0
  250. package/src/nodes/functions/PhongLightingModel.js +34 -2
  251. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  252. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  253. package/src/nodes/functions/ToonLightingModel.js +20 -0
  254. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  255. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  256. package/src/nodes/geometry/RangeNode.js +54 -2
  257. package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
  258. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  259. package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
  260. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  261. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  262. package/src/nodes/lighting/AONode.js +18 -0
  263. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  264. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  265. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  266. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  267. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  268. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  269. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  270. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  271. package/src/nodes/lighting/IrradianceNode.js +17 -0
  272. package/src/nodes/lighting/LightProbeNode.js +20 -0
  273. package/src/nodes/lighting/LightUtils.js +12 -0
  274. package/src/nodes/lighting/LightingContextNode.js +48 -0
  275. package/src/nodes/lighting/LightingNode.js +15 -6
  276. package/src/nodes/lighting/LightsNode.js +132 -1
  277. package/src/nodes/lighting/PointLightNode.js +32 -1
  278. package/src/nodes/lighting/PointShadowNode.js +54 -1
  279. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  280. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  281. package/src/nodes/lighting/ShadowNode.js +240 -34
  282. package/src/nodes/lighting/SpotLightNode.js +43 -0
  283. package/src/nodes/math/ConditionalNode.js +70 -3
  284. package/src/nodes/math/Hash.js +9 -0
  285. package/src/nodes/math/MathNode.js +614 -11
  286. package/src/nodes/math/MathUtils.js +45 -1
  287. package/src/nodes/math/OperatorNode.js +233 -0
  288. package/src/nodes/math/TriNoise3D.js +18 -7
  289. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  290. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  291. package/src/nodes/pmrem/PMREMNode.js +133 -0
  292. package/src/nodes/pmrem/PMREMUtils.js +1 -1
  293. package/src/nodes/procedural/Checker.js +9 -0
  294. package/src/nodes/tsl/TSLBase.js +2 -2
  295. package/src/nodes/utils/ArrayElementNode.js +38 -2
  296. package/src/nodes/utils/ConvertNode.js +31 -0
  297. package/src/nodes/utils/CubeMapNode.js +78 -0
  298. package/src/nodes/utils/Discard.js +16 -0
  299. package/src/nodes/utils/EquirectUVNode.js +31 -1
  300. package/src/nodes/utils/FlipNode.js +38 -0
  301. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  302. package/src/nodes/utils/JoinNode.js +25 -0
  303. package/src/nodes/utils/LoopNode.js +74 -1
  304. package/src/nodes/utils/MatcapUVNode.js +17 -0
  305. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  306. package/src/nodes/utils/Oscillators.js +33 -0
  307. package/src/nodes/utils/Packing.js +17 -0
  308. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  309. package/src/nodes/utils/RTTNode.js +123 -2
  310. package/src/nodes/utils/ReflectorNode.js +174 -4
  311. package/src/nodes/utils/RemapNode.js +79 -0
  312. package/src/nodes/utils/RotateNode.js +41 -0
  313. package/src/nodes/utils/SetNode.js +44 -1
  314. package/src/nodes/utils/SplitNode.js +55 -3
  315. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  316. package/src/nodes/utils/SpriteUtils.js +17 -0
  317. package/src/nodes/utils/StorageArrayElementNode.js +40 -0
  318. package/src/nodes/utils/Timer.js +19 -0
  319. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  320. package/src/nodes/utils/UVUtils.js +20 -0
  321. package/src/nodes/utils/ViewportUtils.js +13 -0
  322. package/src/objects/BatchedMesh.js +1 -2
  323. package/src/objects/ClippingGroup.js +49 -0
  324. package/src/renderers/WebGLRenderer.js +23 -4
  325. package/src/renderers/common/Animation.js +63 -0
  326. package/src/renderers/common/Attributes.js +36 -0
  327. package/src/renderers/common/Backend.js +467 -52
  328. package/src/renderers/common/Background.js +34 -1
  329. package/src/renderers/common/BindGroup.js +43 -0
  330. package/src/renderers/common/Binding.js +35 -0
  331. package/src/renderers/common/Bindings.js +93 -1
  332. package/src/renderers/common/Buffer.js +49 -0
  333. package/src/renderers/common/BufferUtils.js +27 -0
  334. package/src/renderers/common/BundleGroup.js +57 -0
  335. package/src/renderers/common/ChainMap.js +38 -1
  336. package/src/renderers/common/ClippingContext.js +107 -14
  337. package/src/renderers/common/Color4.js +36 -0
  338. package/src/renderers/common/ComputePipeline.js +24 -0
  339. package/src/renderers/common/CubeRenderTarget.js +13 -0
  340. package/src/renderers/common/DataMap.js +37 -1
  341. package/src/renderers/common/Geometries.js +98 -0
  342. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  343. package/src/renderers/common/Info.js +87 -0
  344. package/src/renderers/common/Lighting.js +26 -0
  345. package/src/renderers/common/Pipeline.js +22 -0
  346. package/src/renderers/common/Pipelines.js +148 -5
  347. package/src/renderers/common/PostProcessing.js +75 -3
  348. package/src/renderers/common/ProgrammableStage.js +60 -2
  349. package/src/renderers/common/QuadMesh.js +54 -5
  350. package/src/renderers/common/RenderBundle.js +14 -8
  351. package/src/renderers/common/RenderBundles.js +33 -10
  352. package/src/renderers/common/RenderContext.js +169 -4
  353. package/src/renderers/common/RenderContexts.js +42 -2
  354. package/src/renderers/common/RenderList.js +178 -0
  355. package/src/renderers/common/RenderLists.js +31 -0
  356. package/src/renderers/common/RenderObject.js +328 -4
  357. package/src/renderers/common/RenderObjects.js +101 -7
  358. package/src/renderers/common/RenderPipeline.js +24 -0
  359. package/src/renderers/common/Renderer.js +1096 -31
  360. package/src/renderers/common/RendererUtils.js +193 -0
  361. package/src/renderers/common/SampledTexture.js +121 -0
  362. package/src/renderers/common/Sampler.js +30 -0
  363. package/src/renderers/common/StorageBuffer.js +24 -0
  364. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  365. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  366. package/src/renderers/common/StorageTexture.js +38 -0
  367. package/src/renderers/common/Textures.js +83 -0
  368. package/src/renderers/common/Uniform.js +188 -2
  369. package/src/renderers/common/UniformBuffer.js +19 -0
  370. package/src/renderers/common/UniformsGroup.js +139 -2
  371. package/src/renderers/common/extras/PMREMGenerator.js +24 -3
  372. package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
  373. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  374. package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
  375. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  376. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  377. package/src/renderers/common/nodes/NodeUniform.js +189 -0
  378. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  379. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  380. package/src/renderers/common/nodes/Nodes.js +327 -60
  381. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  382. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  383. package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
  384. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
  385. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
  386. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
  387. package/src/renderers/webgpu/WebGPUBackend.js +480 -49
  388. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
  389. package/src/renderers/webgpu/WebGPURenderer.js +35 -0
  390. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  391. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  392. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
  393. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  394. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  395. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
  396. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
  397. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
  398. package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
  399. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  400. package/src/renderers/webxr/WebXRManager.js +7 -1
  401. package/src/textures/Data3DTexture.js +2 -2
  402. package/src/textures/Texture.js +4 -0
  403. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  404. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  405. package/examples/jsm/exporters/MMDExporter.js +0 -223
  406. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  407. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  408. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  409. package/src/nodes/core/UniformGroup.js +0 -13
  410. package/src/nodes/fog/FogExp2Node.js +0 -35
  411. package/src/nodes/fog/FogNode.js +0 -50
  412. package/src/nodes/fog/FogRangeNode.js +0 -36
  413. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -1,144 +1,531 @@
1
- let vector2 = null;
2
- let vector4 = null;
3
- let color4 = null;
1
+ let _vector2 = null;
2
+ let _color4 = null;
4
3
 
5
4
  import Color4 from './Color4.js';
6
5
  import { Vector2 } from '../../math/Vector2.js';
7
- import { Vector4 } from '../../math/Vector4.js';
8
6
  import { createCanvasElement } from '../../utils.js';
9
7
  import { REVISION } from '../../constants.js';
10
8
 
9
+ /**
10
+ * Most of the rendering related logic is implemented in the
11
+ * {@link module:Renderer} module and related management components.
12
+ * Sometimes it is required though to execute commands which are
13
+ * specific to the current 3D backend (which is WebGPU or WebGL 2).
14
+ * This abstract base class defines an interface that encapsulates
15
+ * all backend-related logic. Derived classes for each backend must
16
+ * implement the interface.
17
+ *
18
+ * @abstract
19
+ * @private
20
+ */
11
21
  class Backend {
12
22
 
23
+ /**
24
+ * Constructs a new backend.
25
+ *
26
+ * @param {Object} parameters - An object holding parameters for the backend.
27
+ */
13
28
  constructor( parameters = {} ) {
14
29
 
30
+ /**
31
+ * The parameters of the backend.
32
+ *
33
+ * @type {Object}
34
+ */
15
35
  this.parameters = Object.assign( {}, parameters );
36
+
37
+ /**
38
+ * This weak map holds backend-specific data of objects
39
+ * like textures, attributes or render targets.
40
+ *
41
+ * @type {WeakMap}
42
+ */
16
43
  this.data = new WeakMap();
44
+
45
+ /**
46
+ * A reference to the renderer.
47
+ *
48
+ * @type {Renderer?}
49
+ * @default null
50
+ */
17
51
  this.renderer = null;
52
+
53
+ /**
54
+ * A reference to the canvas element the renderer is drawing to.
55
+ *
56
+ * @type {(HTMLCanvasElement|OffscreenCanvas)?}
57
+ * @default null
58
+ */
18
59
  this.domElement = null;
19
60
 
20
61
  }
21
62
 
63
+ /**
64
+ * Initializes the backend so it is ready for usage. Concrete backends
65
+ * are supposed to implement their rendering context creation and related
66
+ * operations in this method.
67
+ *
68
+ * @async
69
+ * @param {Renderer} renderer - The renderer.
70
+ * @return {Promise} A Promise that resolves when the backend has been initialized.
71
+ */
22
72
  async init( renderer ) {
23
73
 
24
74
  this.renderer = renderer;
25
75
 
26
76
  }
27
77
 
28
- // render context
78
+ /**
79
+ * The coordinate system of the backend.
80
+ *
81
+ * @abstract
82
+ * @type {Number}
83
+ * @readonly
84
+ */
85
+ get coordinateSystem() {}
29
86
 
30
- begin( /*renderContext*/ ) { }
87
+ // render context
31
88
 
32
- finish( /*renderContext*/ ) { }
89
+ /**
90
+ * This method is executed at the beginning of a render call and
91
+ * can be used by the backend to prepare the state for upcoming
92
+ * draw calls.
93
+ *
94
+ * @abstract
95
+ * @param {RenderContext} renderContext - The render context.
96
+ */
97
+ beginRender( /*renderContext*/ ) {}
98
+
99
+ /**
100
+ * This method is executed at the end of a render call and
101
+ * can be used by the backend to finalize work after draw
102
+ * calls.
103
+ *
104
+ * @abstract
105
+ * @param {RenderContext} renderContext - The render context.
106
+ */
107
+ finishRender( /*renderContext*/ ) {}
108
+
109
+ /**
110
+ * This method is executed at the beginning of a compute call and
111
+ * can be used by the backend to prepare the state for upcoming
112
+ * compute tasks.
113
+ *
114
+ * @abstract
115
+ * @param {Node|Array<Node>} computeGroup - The compute node(s).
116
+ */
117
+ beginCompute( /*computeGroup*/ ) {}
118
+
119
+ /**
120
+ * This method is executed at the end of a compute call and
121
+ * can be used by the backend to finalize work after compute
122
+ * tasks.
123
+ *
124
+ * @abstract
125
+ * @param {Node|Array<Node>} computeGroup - The compute node(s).
126
+ */
127
+ finishCompute( /*computeGroup*/ ) {}
33
128
 
34
129
  // render object
35
130
 
131
+ /**
132
+ * Executes a draw command for the given render object.
133
+ *
134
+ * @abstract
135
+ * @param {RenderObject} renderObject - The render object to draw.
136
+ * @param {Info} info - Holds a series of statistical information about the GPU memory and the rendering process.
137
+ */
36
138
  draw( /*renderObject, info*/ ) { }
37
139
 
140
+ // compute node
141
+
142
+ /**
143
+ * Executes a compute command for the given compute node.
144
+ *
145
+ * @abstract
146
+ * @param {Node|Array<Node>} computeGroup - The group of compute nodes of a compute call. Can be a single compute node.
147
+ * @param {Node} computeNode - The compute node.
148
+ * @param {Array<BindGroup>} bindings - The bindings.
149
+ * @param {ComputePipeline} computePipeline - The compute pipeline.
150
+ */
151
+ compute( /*computeGroup, computeNode, computeBindings, computePipeline*/ ) { }
152
+
38
153
  // program
39
154
 
155
+ /**
156
+ * Creates a shader program from the given programmable stage.
157
+ *
158
+ * @abstract
159
+ * @param {ProgrammableStage} program - The programmable stage.
160
+ */
40
161
  createProgram( /*program*/ ) { }
41
162
 
163
+ /**
164
+ * Destroys the shader program of the given programmable stage.
165
+ *
166
+ * @abstract
167
+ * @param {ProgrammableStage} program - The programmable stage.
168
+ */
42
169
  destroyProgram( /*program*/ ) { }
43
170
 
44
171
  // bindings
45
172
 
46
- createBindings( /*bingGroup, bindings*/ ) { }
47
-
48
- updateBindings( /*bingGroup, bindings*/ ) { }
173
+ /**
174
+ * Creates bindings from the given bind group definition.
175
+ *
176
+ * @abstract
177
+ * @param {BindGroup} bindGroup - The bind group.
178
+ * @param {Array<BindGroup>} bindings - Array of bind groups.
179
+ * @param {Number} cacheIndex - The cache index.
180
+ * @param {Number} version - The version.
181
+ */
182
+ createBindings( /*bindGroup, bindings, cacheIndex, version*/ ) { }
183
+
184
+ /**
185
+ * Updates the given bind group definition.
186
+ *
187
+ * @abstract
188
+ * @param {BindGroup} bindGroup - The bind group.
189
+ * @param {Array<BindGroup>} bindings - Array of bind groups.
190
+ * @param {Number} cacheIndex - The cache index.
191
+ * @param {Number} version - The version.
192
+ */
193
+ updateBindings( /*bindGroup, bindings, cacheIndex, version*/ ) { }
194
+
195
+ /**
196
+ * Updates a buffer binding.
197
+ *
198
+ * @abstract
199
+ * @param {Buffer} binding - The buffer binding to update.
200
+ */
201
+ updateBinding( /*binding*/ ) { }
49
202
 
50
203
  // pipeline
51
204
 
52
- createRenderPipeline( /*renderObject*/ ) { }
53
-
54
- createComputePipeline( /*computeNode, pipeline*/ ) { }
55
-
56
- destroyPipeline( /*pipeline*/ ) { }
205
+ /**
206
+ * Creates a render pipeline for the given render object.
207
+ *
208
+ * @abstract
209
+ * @param {RenderObject} renderObject - The render object.
210
+ * @param {Array<Promise>} promises - An array of compilation promises which are used in `compileAsync()`.
211
+ */
212
+ createRenderPipeline( /*renderObject, promises*/ ) { }
213
+
214
+ /**
215
+ * Creates a compute pipeline for the given compute node.
216
+ *
217
+ * @abstract
218
+ * @param {ComputePipeline} computePipeline - The compute pipeline.
219
+ * @param {Array<BindGroup>} bindings - The bindings.
220
+ */
221
+ createComputePipeline( /*computePipeline, bindings*/ ) { }
57
222
 
58
223
  // cache key
59
224
 
60
- needsRenderUpdate( /*renderObject*/ ) { } // return Boolean ( fast test )
61
-
62
- getRenderCacheKey( /*renderObject*/ ) { } // return String
225
+ /**
226
+ * Returns `true` if the render pipeline requires an update.
227
+ *
228
+ * @abstract
229
+ * @param {RenderObject} renderObject - The render object.
230
+ * @return {Boolean} Whether the render pipeline requires an update or not.
231
+ */
232
+ needsRenderUpdate( /*renderObject*/ ) { }
233
+
234
+ /**
235
+ * Returns a cache key that is used to identify render pipelines.
236
+ *
237
+ * @abstract
238
+ * @param {RenderObject} renderObject - The render object.
239
+ * @return {String} The cache key.
240
+ */
241
+ getRenderCacheKey( /*renderObject*/ ) { }
63
242
 
64
243
  // node builder
65
244
 
66
- createNodeBuilder( /*renderObject*/ ) { } // return NodeBuilder (ADD IT)
245
+ /**
246
+ * Returns a node builder for the given render object.
247
+ *
248
+ * @abstract
249
+ * @param {RenderObject} renderObject - The render object.
250
+ * @param {Renderer} renderer - The renderer.
251
+ * @return {NodeBuilder} The node builder.
252
+ */
253
+ createNodeBuilder( /*renderObject, renderer*/ ) { }
67
254
 
68
255
  // textures
69
256
 
257
+ /**
258
+ * Creates a sampler for the given texture.
259
+ *
260
+ * @abstract
261
+ * @param {Texture} texture - The texture to create the sampler for.
262
+ */
70
263
  createSampler( /*texture*/ ) { }
71
264
 
265
+ /**
266
+ * Destroys the sampler for the given texture.
267
+ *
268
+ * @abstract
269
+ * @param {Texture} texture - The texture to destroy the sampler for.
270
+ */
271
+ destroySampler( /*texture*/ ) {}
272
+
273
+ /**
274
+ * Creates a default texture for the given texture that can be used
275
+ * as a placeholder until the actual texture is ready for usage.
276
+ *
277
+ * @abstract
278
+ * @param {Texture} texture - The texture to create a default texture for.
279
+ */
72
280
  createDefaultTexture( /*texture*/ ) { }
73
281
 
74
- createTexture( /*texture*/ ) { }
75
-
76
- copyTextureToBuffer( /*texture, x, y, width, height*/ ) {}
282
+ /**
283
+ * Defines a texture on the GPU for the given texture object.
284
+ *
285
+ * @abstract
286
+ * @param {Texture} texture - The texture.
287
+ * @param {Object} [options={}] - Optional configuration parameter.
288
+ */
289
+ createTexture( /*texture, options={}*/ ) { }
290
+
291
+ /**
292
+ * Uploads the updated texture data to the GPU.
293
+ *
294
+ * @abstract
295
+ * @param {Texture} texture - The texture.
296
+ * @param {Object} [options={}] - Optional configuration parameter.
297
+ */
298
+ updateTexture( /*texture, options = {}*/ ) { }
299
+
300
+ /**
301
+ * Generates mipmaps for the given texture
302
+ *
303
+ * @abstract
304
+ * @param {Texture} texture - The texture.
305
+ */
306
+ generateMipmaps( /*texture*/ ) { }
307
+
308
+ /**
309
+ * Destroys the GPU data for the given texture object.
310
+ *
311
+ * @abstract
312
+ * @param {Texture} texture - The texture.
313
+ */
314
+ destroyTexture( /*texture*/ ) { }
315
+
316
+ /**
317
+ * Returns texture data as a typed array.
318
+ *
319
+ * @abstract
320
+ * @param {Texture} texture - The texture to copy.
321
+ * @param {Number} x - The x coordinate of the copy origin.
322
+ * @param {Number} y - The y coordinate of the copy origin.
323
+ * @param {Number} width - The width of the copy.
324
+ * @param {Number} height - The height of the copy.
325
+ * @param {Number} faceIndex - The face index.
326
+ * @return {TypedArray} The texture data as a typed array.
327
+ */
328
+ copyTextureToBuffer( /*texture, x, y, width, height, faceIndex*/ ) {}
329
+
330
+ /**
331
+ * Copies data of the given source texture to the given destination texture.
332
+ *
333
+ * @abstract
334
+ * @param {Texture} srcTexture - The source texture.
335
+ * @param {Texture} dstTexture - The destination texture.
336
+ * @param {Vector4?} [srcRegion=null] - The region of the source texture to copy.
337
+ * @param {(Vector2|Vector3)?} [dstPosition=null] - The destination position of the copy.
338
+ * @param {Number} [level=0] - The mip level to copy.
339
+ */
340
+ copyTextureToTexture( /*srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0*/ ) {}
341
+
342
+ /**
343
+ * Copies the current bound framebuffer to the given texture.
344
+ *
345
+ * @abstract
346
+ * @param {Texture} texture - The destination texture.
347
+ * @param {RenderContext} renderContext - The render context.
348
+ * @param {Vector4} rectangle - A four dimensional vector defining the origin and dimension of the copy.
349
+ */
350
+ copyFramebufferToTexture( /*texture, renderContext, rectangle*/ ) {}
77
351
 
78
352
  // attributes
79
353
 
354
+ /**
355
+ * Creates the buffer of a shader attribute.
356
+ *
357
+ * @abstract
358
+ * @param {BufferAttribute} attribute - The buffer attribute.
359
+ */
80
360
  createAttribute( /*attribute*/ ) { }
81
361
 
362
+ /**
363
+ * Creates the buffer of an indexed shader attribute.
364
+ *
365
+ * @abstract
366
+ * @param {BufferAttribute} attribute - The indexed buffer attribute.
367
+ */
82
368
  createIndexAttribute( /*attribute*/ ) { }
83
369
 
370
+ /**
371
+ * Creates the buffer of a storage attribute.
372
+ *
373
+ * @abstract
374
+ * @param {BufferAttribute} attribute - The buffer attribute.
375
+ */
376
+ createStorageAttribute( /*attribute*/ ) { }
377
+
378
+ /**
379
+ * Updates the buffer of a shader attribute.
380
+ *
381
+ * @abstract
382
+ * @param {BufferAttribute} attribute - The buffer attribute to update.
383
+ */
84
384
  updateAttribute( /*attribute*/ ) { }
85
385
 
386
+ /**
387
+ * Destroys the buffer of a shader attribute.
388
+ *
389
+ * @abstract
390
+ * @param {BufferAttribute} attribute - The buffer attribute to destroy.
391
+ */
86
392
  destroyAttribute( /*attribute*/ ) { }
87
393
 
88
394
  // canvas
89
395
 
396
+ /**
397
+ * Returns the backend's rendering context.
398
+ *
399
+ * @abstract
400
+ * @return {Object} The rendering context.
401
+ */
90
402
  getContext() { }
91
403
 
404
+ /**
405
+ * Backends can use this method if they have to run
406
+ * logic when the renderer gets resized.
407
+ *
408
+ * @abstract
409
+ */
92
410
  updateSize() { }
93
411
 
94
- // utils
95
-
96
- resolveTimestampAsync( /*renderContext, type*/ ) { }
412
+ /**
413
+ * Updates the viewport with the values from the given render context.
414
+ *
415
+ * @abstract
416
+ * @param {RenderContext} renderContext - The render context.
417
+ */
418
+ updateViewport( /*renderContext*/ ) {}
97
419
 
98
- hasFeatureAsync( /*name*/ ) { } // return Boolean
99
-
100
- hasFeature( /*name*/ ) { } // return Boolean
101
-
102
- getInstanceCount( renderObject ) {
103
-
104
- const { object, geometry } = renderObject;
105
-
106
- return geometry.isInstancedBufferGeometry ? geometry.instanceCount : ( object.count > 1 ? object.count : 1 );
107
-
108
- }
420
+ // utils
109
421
 
422
+ /**
423
+ * Returns `true` if the given 3D object is fully occluded by other
424
+ * 3D objects in the scene. Backends must implement this method by using
425
+ * a Occlusion Query API.
426
+ *
427
+ * @abstract
428
+ * @param {RenderContext} renderContext - The render context.
429
+ * @param {Object3D} object - The 3D object to test.
430
+ * @return {Boolean} Whether the 3D object is fully occluded or not.
431
+ */
432
+ isOccluded( /*renderContext, object*/ ) {}
433
+
434
+ /**
435
+ * Resolves the time stamp for the given render context and type.
436
+ *
437
+ * @async
438
+ * @abstract
439
+ * @param {RenderContext} renderContext - The render context.
440
+ * @param {String} type - The render context.
441
+ * @return {Promise} A Promise that resolves when the time stamp has been computed.
442
+ */
443
+ async resolveTimestampAsync( /*renderContext, type*/ ) { }
444
+
445
+ /**
446
+ * Can be used to synchronize CPU operations with GPU tasks. So when this method is called,
447
+ * the CPU waits for the GPU to complete its operation (e.g. a compute task).
448
+ *
449
+ * @async
450
+ * @abstract
451
+ * @return {Promise} A Promise that resolves when synchronization has been finished.
452
+ */
453
+ async waitForGPU() {}
454
+
455
+ /**
456
+ * Checks if the given feature is supported by the backend.
457
+ *
458
+ * @async
459
+ * @abstract
460
+ * @param {String} name - The feature's name.
461
+ * @return {Promise<Boolean>} A Promise that resolves with a bool that indicates whether the feature is supported or not.
462
+ */
463
+ async hasFeatureAsync( /*name*/ ) { }
464
+
465
+ /**
466
+ * Checks if the given feature is supported by the backend.
467
+ *
468
+ * @abstract
469
+ * @param {String} name - The feature's name.
470
+ * @return {Boolean} Whether the feature is supported or not.
471
+ */
472
+ hasFeature( /*name*/ ) {}
473
+
474
+ /**
475
+ * Returns the maximum anisotropy texture filtering value.
476
+ *
477
+ * @abstract
478
+ * @return {Number} The maximum anisotropy texture filtering value.
479
+ */
480
+ getMaxAnisotropy() {}
481
+
482
+ /**
483
+ * Returns the drawing buffer size.
484
+ *
485
+ * @return {Vector2} The drawing buffer size.
486
+ */
110
487
  getDrawingBufferSize() {
111
488
 
112
- vector2 = vector2 || new Vector2();
489
+ _vector2 = _vector2 || new Vector2();
113
490
 
114
- return this.renderer.getDrawingBufferSize( vector2 );
115
-
116
- }
117
-
118
- getScissor() {
119
-
120
- vector4 = vector4 || new Vector4();
121
-
122
- return this.renderer.getScissor( vector4 );
491
+ return this.renderer.getDrawingBufferSize( _vector2 );
123
492
 
124
493
  }
125
494
 
495
+ /**
496
+ * Defines the scissor test.
497
+ *
498
+ * @abstract
499
+ * @param {Boolean} boolean - Whether the scissor test should be enabled or not.
500
+ */
126
501
  setScissorTest( /*boolean*/ ) { }
127
502
 
503
+ /**
504
+ * Returns the clear color and alpha into a single
505
+ * color object.
506
+ *
507
+ * @return {Color4} The clear color.
508
+ */
128
509
  getClearColor() {
129
510
 
130
511
  const renderer = this.renderer;
131
512
 
132
- color4 = color4 || new Color4();
513
+ _color4 = _color4 || new Color4();
133
514
 
134
- renderer.getClearColor( color4 );
515
+ renderer.getClearColor( _color4 );
135
516
 
136
- color4.getRGB( color4, this.renderer.currentColorSpace );
517
+ _color4.getRGB( _color4, this.renderer.currentColorSpace );
137
518
 
138
- return color4;
519
+ return _color4;
139
520
 
140
521
  }
141
522
 
523
+ /**
524
+ * Returns the DOM element. If no DOM element exists, the backend
525
+ * creates a new one.
526
+ *
527
+ * @return {HTMLCanvasElement} The DOM element.
528
+ */
142
529
  getDomElement() {
143
530
 
144
531
  let domElement = this.domElement;
@@ -158,14 +545,25 @@ class Backend {
158
545
 
159
546
  }
160
547
 
161
- // resource properties
162
-
548
+ /**
549
+ * Sets a dictionary for the given object into the
550
+ * internal data structure.
551
+ *
552
+ * @param {Object} object - The object.
553
+ * @param {Object} value - The dictionary to set.
554
+ */
163
555
  set( object, value ) {
164
556
 
165
557
  this.data.set( object, value );
166
558
 
167
559
  }
168
560
 
561
+ /**
562
+ * Returns the dictionary for the given object.
563
+ *
564
+ * @param {Object} object - The object.
565
+ * @return {Object} The object's dictionary.
566
+ */
169
567
  get( object ) {
170
568
 
171
569
  let map = this.data.get( object );
@@ -181,18 +579,35 @@ class Backend {
181
579
 
182
580
  }
183
581
 
582
+ /**
583
+ * Checks if the given object has a dictionary
584
+ * with data defined.
585
+ *
586
+ * @param {Object} object - The object.
587
+ * @return {Boolean} Whether a dictionary for the given object as been defined or not.
588
+ */
184
589
  has( object ) {
185
590
 
186
591
  return this.data.has( object );
187
592
 
188
593
  }
189
594
 
595
+ /**
596
+ * Deletes an object from the internal data structure.
597
+ *
598
+ * @param {Object} object - The object to delete.
599
+ */
190
600
  delete( object ) {
191
601
 
192
602
  this.data.delete( object );
193
603
 
194
604
  }
195
605
 
606
+ /**
607
+ * Frees internal resources.
608
+ *
609
+ * @abstract
610
+ */
196
611
  dispose() { }
197
612
 
198
613
  }
@@ -9,17 +9,50 @@ import { BackSide, LinearSRGBColorSpace } from '../../constants.js';
9
9
 
10
10
  const _clearColor = /*@__PURE__*/ new Color4();
11
11
 
12
+ /**
13
+ * This renderer module manages the background.
14
+ *
15
+ * @private
16
+ * @augments DataMap
17
+ */
12
18
  class Background extends DataMap {
13
19
 
20
+ /**
21
+ * Constructs a new background management component.
22
+ *
23
+ * @param {Renderer} renderer - The renderer.
24
+ * @param {Nodes} nodes - Renderer component for managing nodes related logic.
25
+ */
14
26
  constructor( renderer, nodes ) {
15
27
 
16
28
  super();
17
29
 
30
+ /**
31
+ * The renderer.
32
+ *
33
+ * @type {Renderer}
34
+ */
18
35
  this.renderer = renderer;
36
+
37
+ /**
38
+ * Renderer component for managing nodes related logic.
39
+ *
40
+ * @type {Nodes}
41
+ */
19
42
  this.nodes = nodes;
20
43
 
21
44
  }
22
45
 
46
+ /**
47
+ * Updates the background for the given scene. Depending on how `Scene.background`
48
+ * or `Scene.backgroundNode` are configured, this method might configure a simple clear
49
+ * or add a mesh to the render list for rendering the background as a textured plane
50
+ * or skybox.
51
+ *
52
+ * @param {Scene} scene - The scene.
53
+ * @param {RenderList} renderList - The current render list.
54
+ * @param {RenderContext} renderContext - The current render context.
55
+ */
23
56
  update( scene, renderList, renderContext ) {
24
57
 
25
58
  const renderer = this.renderer;
@@ -60,7 +93,7 @@ class Background extends DataMap {
60
93
  getTextureLevel: () => backgroundBlurriness
61
94
  } );
62
95
 
63
- let viewProj = modelViewProjection();
96
+ let viewProj = modelViewProjection;
64
97
  viewProj = viewProj.setZ( viewProj.w );
65
98
 
66
99
  const nodeMaterial = new NodeMaterial();