@plastic-software/three 0.179.0 → 0.181.1

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 (430) hide show
  1. package/build/three.cjs +1108 -591
  2. package/build/three.core.js +616 -345
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +488 -250
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +37 -6
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +6576 -2152
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +6575 -2151
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  13. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  14. package/examples/jsm/Addons.js +1 -1
  15. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  16. package/examples/jsm/controls/ArcballControls.js +8 -8
  17. package/examples/jsm/controls/DragControls.js +7 -57
  18. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  19. package/examples/jsm/controls/FlyControls.js +1 -1
  20. package/examples/jsm/controls/OrbitControls.js +2 -2
  21. package/examples/jsm/controls/PointerLockControls.js +2 -10
  22. package/examples/jsm/controls/TrackballControls.js +1 -1
  23. package/examples/jsm/controls/TransformControls.js +1 -1
  24. package/examples/jsm/effects/AsciiEffect.js +8 -8
  25. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  26. package/examples/jsm/exporters/EXRExporter.js +1 -1
  27. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  28. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  29. package/examples/jsm/exporters/PLYExporter.js +1 -1
  30. package/examples/jsm/exporters/USDZExporter.js +9 -2
  31. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  32. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  33. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  34. package/examples/jsm/geometries/TextGeometry.js +3 -2
  35. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  36. package/examples/jsm/helpers/ViewHelper.js +43 -5
  37. package/examples/jsm/inspector/Inspector.js +427 -0
  38. package/examples/jsm/inspector/RendererInspector.js +415 -0
  39. package/examples/jsm/inspector/tabs/Console.js +204 -0
  40. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  41. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  42. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  43. package/examples/jsm/inspector/ui/Graph.js +95 -0
  44. package/examples/jsm/inspector/ui/Item.js +170 -0
  45. package/examples/jsm/inspector/ui/List.js +75 -0
  46. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  47. package/examples/jsm/inspector/ui/Style.js +654 -0
  48. package/examples/jsm/inspector/ui/Tab.js +46 -0
  49. package/examples/jsm/inspector/ui/Values.js +423 -0
  50. package/examples/jsm/inspector/ui/utils.js +56 -0
  51. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  52. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  53. package/examples/jsm/interactive/SelectionBox.js +30 -0
  54. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  55. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  56. package/examples/jsm/lines/Line2.js +3 -3
  57. package/examples/jsm/lines/LineGeometry.js +1 -1
  58. package/examples/jsm/lines/LineSegments2.js +2 -2
  59. package/examples/jsm/lines/Wireframe.js +2 -2
  60. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  61. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  62. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  63. package/examples/jsm/loaders/3MFLoader.js +1 -1
  64. package/examples/jsm/loaders/ColladaLoader.js +3 -3
  65. package/examples/jsm/loaders/DDSLoader.js +1 -1
  66. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  67. package/examples/jsm/loaders/EXRLoader.js +5 -5
  68. package/examples/jsm/loaders/FBXLoader.js +2 -2
  69. package/examples/jsm/loaders/FontLoader.js +23 -5
  70. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  71. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  72. package/examples/jsm/loaders/HDRLoader.js +486 -0
  73. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  74. package/examples/jsm/loaders/KTXLoader.js +2 -2
  75. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  76. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  77. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  78. package/examples/jsm/loaders/LWOLoader.js +2 -2
  79. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  80. package/examples/jsm/loaders/OBJLoader.js +1 -1
  81. package/examples/jsm/loaders/PDBLoader.js +1 -1
  82. package/examples/jsm/loaders/RGBELoader.js +7 -473
  83. package/examples/jsm/loaders/SVGLoader.js +2 -2
  84. package/examples/jsm/loaders/TTFLoader.js +4 -4
  85. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  86. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  87. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  88. package/examples/jsm/math/ColorSpaces.js +19 -1
  89. package/examples/jsm/math/ConvexHull.js +3 -3
  90. package/examples/jsm/math/ImprovedNoise.js +1 -1
  91. package/examples/jsm/math/Lut.js +2 -2
  92. package/examples/jsm/math/SimplexNoise.js +1 -1
  93. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  94. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  95. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  96. package/examples/jsm/misc/TubePainter.js +383 -40
  97. package/examples/jsm/misc/Volume.js +1 -1
  98. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  99. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  100. package/examples/jsm/objects/Sky.js +1 -1
  101. package/examples/jsm/objects/SkyMesh.js +1 -1
  102. package/examples/jsm/objects/Water.js +3 -3
  103. package/examples/jsm/objects/WaterMesh.js +6 -6
  104. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  105. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  106. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  107. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  108. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  109. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  110. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  111. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  112. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  113. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  114. package/examples/jsm/shaders/BokehShader.js +1 -1
  115. package/examples/jsm/shaders/BokehShader2.js +1 -1
  116. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  117. package/examples/jsm/shaders/FocusShader.js +1 -1
  118. package/examples/jsm/shaders/GTAOShader.js +2 -2
  119. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  120. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  122. package/examples/jsm/shaders/SSRShader.js +1 -1
  123. package/examples/jsm/shaders/SepiaShader.js +1 -1
  124. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  125. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  126. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +1 -1
  127. package/examples/jsm/shaders/VignetteShader.js +1 -1
  128. package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
  129. package/examples/jsm/transpiler/TSLEncoder.js +9 -10
  130. package/examples/jsm/transpiler/WGSLEncoder.js +24 -0
  131. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  132. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  133. package/examples/jsm/tsl/display/BloomNode.js +7 -3
  134. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
  135. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  136. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  137. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  138. package/examples/jsm/tsl/display/GaussianBlurNode.js +49 -35
  139. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  140. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  141. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  142. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  143. package/examples/jsm/tsl/display/TRAANode.js +124 -7
  144. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  145. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  146. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  147. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  148. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  149. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  150. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  151. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  152. package/package.json +5 -10
  153. package/src/Three.Core.js +4 -2
  154. package/src/Three.TSL.js +36 -5
  155. package/src/Three.WebGPU.Nodes.js +2 -0
  156. package/src/Three.WebGPU.js +2 -0
  157. package/src/animation/AnimationClip.js +20 -4
  158. package/src/animation/AnimationMixer.js +3 -3
  159. package/src/animation/AnimationObjectGroup.js +2 -1
  160. package/src/animation/KeyframeTrack.js +7 -6
  161. package/src/animation/PropertyBinding.js +12 -11
  162. package/src/audio/Audio.js +10 -9
  163. package/src/audio/PositionalAudio.js +1 -1
  164. package/src/cameras/OrthographicCamera.js +1 -1
  165. package/src/cameras/PerspectiveCamera.js +1 -1
  166. package/src/cameras/StereoCamera.js +2 -2
  167. package/src/constants.js +11 -3
  168. package/src/core/BufferGeometry.js +10 -10
  169. package/src/core/EventDispatcher.js +1 -1
  170. package/src/core/InterleavedBuffer.js +1 -1
  171. package/src/core/InterleavedBufferAttribute.js +3 -2
  172. package/src/core/Object3D.js +3 -2
  173. package/src/core/Raycaster.js +2 -1
  174. package/src/core/RenderTarget.js +10 -1
  175. package/src/extras/Controls.js +5 -4
  176. package/src/extras/DataUtils.js +2 -1
  177. package/src/extras/Earcut.js +6 -0
  178. package/src/extras/ImageUtils.js +2 -2
  179. package/src/extras/PMREMGenerator.js +268 -55
  180. package/src/extras/TextureUtils.js +2 -1
  181. package/src/extras/core/Curve.js +2 -1
  182. package/src/extras/core/Interpolations.js +7 -1
  183. package/src/extras/core/ShapePath.js +4 -4
  184. package/src/extras/lib/earcut.js +8 -8
  185. package/src/geometries/BoxGeometry.js +1 -0
  186. package/src/geometries/CapsuleGeometry.js +1 -0
  187. package/src/geometries/CircleGeometry.js +1 -0
  188. package/src/geometries/ConeGeometry.js +1 -0
  189. package/src/geometries/CylinderGeometry.js +1 -0
  190. package/src/geometries/DodecahedronGeometry.js +1 -0
  191. package/src/geometries/ExtrudeGeometry.js +8 -6
  192. package/src/geometries/IcosahedronGeometry.js +1 -0
  193. package/src/geometries/LatheGeometry.js +1 -0
  194. package/src/geometries/OctahedronGeometry.js +1 -0
  195. package/src/geometries/PlaneGeometry.js +1 -0
  196. package/src/geometries/RingGeometry.js +1 -0
  197. package/src/geometries/ShapeGeometry.js +1 -0
  198. package/src/geometries/SphereGeometry.js +1 -0
  199. package/src/geometries/TetrahedronGeometry.js +1 -0
  200. package/src/geometries/TorusGeometry.js +1 -0
  201. package/src/geometries/TorusKnotGeometry.js +1 -0
  202. package/src/geometries/TubeGeometry.js +1 -0
  203. package/src/helpers/CameraHelper.js +1 -1
  204. package/src/lights/webgpu/ProjectorLight.js +1 -1
  205. package/src/loaders/AnimationLoader.js +2 -1
  206. package/src/loaders/AudioLoader.js +2 -1
  207. package/src/loaders/BufferGeometryLoader.js +2 -2
  208. package/src/loaders/Cache.js +2 -2
  209. package/src/loaders/DataTextureLoader.js +1 -1
  210. package/src/loaders/FileLoader.js +3 -2
  211. package/src/loaders/ImageBitmapLoader.js +5 -4
  212. package/src/loaders/ImageLoader.js +1 -1
  213. package/src/loaders/Loader.js +3 -3
  214. package/src/loaders/LoadingManager.js +25 -3
  215. package/src/loaders/MaterialLoader.js +3 -2
  216. package/src/loaders/ObjectLoader.js +13 -13
  217. package/src/loaders/TextureLoader.js +1 -1
  218. package/src/loaders/nodes/NodeLoader.js +3 -2
  219. package/src/materials/Material.js +16 -3
  220. package/src/materials/MeshBasicMaterial.js +1 -0
  221. package/src/materials/MeshDepthMaterial.js +1 -0
  222. package/src/materials/MeshDistanceMaterial.js +1 -1
  223. package/src/materials/MeshLambertMaterial.js +2 -1
  224. package/src/materials/MeshMatcapMaterial.js +22 -0
  225. package/src/materials/MeshNormalMaterial.js +1 -0
  226. package/src/materials/MeshPhongMaterial.js +2 -1
  227. package/src/materials/MeshPhysicalMaterial.js +2 -1
  228. package/src/materials/MeshStandardMaterial.js +8 -7
  229. package/src/materials/MeshToonMaterial.js +1 -0
  230. package/src/materials/PointsMaterial.js +1 -1
  231. package/src/materials/ShaderMaterial.js +2 -2
  232. package/src/materials/nodes/Line2NodeMaterial.js +2 -2
  233. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  234. package/src/materials/nodes/NodeMaterial.js +62 -22
  235. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  236. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  237. package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
  238. package/src/math/Color.js +6 -5
  239. package/src/math/ColorManagement.js +9 -3
  240. package/src/math/Cylindrical.js +1 -1
  241. package/src/math/Euler.js +2 -1
  242. package/src/math/MathUtils.js +13 -11
  243. package/src/math/Matrix2.js +1 -1
  244. package/src/math/Matrix3.js +2 -2
  245. package/src/math/Matrix4.js +7 -7
  246. package/src/math/Plane.js +1 -1
  247. package/src/math/Quaternion.js +68 -66
  248. package/src/math/Spherical.js +1 -1
  249. package/src/nodes/Nodes.js +4 -1
  250. package/src/nodes/TSL.js +4 -1
  251. package/src/nodes/accessors/BufferNode.js +1 -1
  252. package/src/nodes/accessors/Camera.js +133 -7
  253. package/src/nodes/accessors/ClippingNode.js +6 -5
  254. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  255. package/src/nodes/accessors/InstanceNode.js +25 -5
  256. package/src/nodes/accessors/Lights.js +10 -0
  257. package/src/nodes/accessors/Normal.js +5 -4
  258. package/src/nodes/accessors/Object3DNode.js +1 -1
  259. package/src/nodes/accessors/Position.js +18 -2
  260. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  261. package/src/nodes/accessors/ReferenceNode.js +3 -2
  262. package/src/nodes/accessors/SceneNode.js +2 -1
  263. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  264. package/src/nodes/accessors/StorageTextureNode.js +22 -0
  265. package/src/nodes/accessors/Texture3DNode.js +14 -1
  266. package/src/nodes/accessors/TextureNode.js +130 -44
  267. package/src/nodes/code/FunctionCallNode.js +24 -4
  268. package/src/nodes/code/FunctionNode.js +23 -0
  269. package/src/nodes/core/ArrayNode.js +1 -0
  270. package/src/nodes/core/AssignNode.js +4 -3
  271. package/src/nodes/core/AttributeNode.js +2 -1
  272. package/src/nodes/core/ContextNode.js +29 -10
  273. package/src/nodes/core/IndexNode.js +2 -2
  274. package/src/nodes/core/InputNode.js +2 -1
  275. package/src/nodes/core/InspectorNode.js +128 -0
  276. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
  277. package/src/nodes/core/Node.js +152 -31
  278. package/src/nodes/core/NodeBuilder.js +183 -35
  279. package/src/nodes/core/NodeFrame.js +21 -21
  280. package/src/nodes/core/NodeFunction.js +2 -1
  281. package/src/nodes/core/NodeParser.js +2 -1
  282. package/src/nodes/core/NodeUniform.js +1 -1
  283. package/src/nodes/core/NodeUtils.js +17 -91
  284. package/src/nodes/core/ParameterNode.js +31 -0
  285. package/src/nodes/core/PropertyNode.js +7 -0
  286. package/src/nodes/core/StackNode.js +43 -16
  287. package/src/nodes/core/StructNode.js +5 -5
  288. package/src/nodes/core/StructTypeNode.js +1 -0
  289. package/src/nodes/core/SubBuildNode.js +2 -2
  290. package/src/nodes/core/UniformNode.js +18 -10
  291. package/src/nodes/core/VarNode.js +70 -33
  292. package/src/nodes/core/VaryingNode.js +3 -2
  293. package/src/nodes/display/BlendModes.js +5 -4
  294. package/src/nodes/display/BumpMapNode.js +1 -1
  295. package/src/nodes/display/ColorAdjustment.js +1 -1
  296. package/src/nodes/display/FrontFacingNode.js +4 -8
  297. package/src/nodes/display/NormalMapNode.js +2 -1
  298. package/src/nodes/display/PassNode.js +52 -11
  299. package/src/nodes/display/RenderOutputNode.js +28 -2
  300. package/src/nodes/display/ScreenNode.js +44 -14
  301. package/src/nodes/display/ToneMappingNode.js +31 -4
  302. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  303. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  304. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  305. package/src/nodes/display/ViewportTextureNode.js +42 -12
  306. package/src/nodes/fog/Fog.js +3 -2
  307. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  308. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  309. package/src/nodes/functions/BasicLightingModel.js +2 -1
  310. package/src/nodes/functions/PhysicalLightingModel.js +3 -2
  311. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  312. package/src/nodes/geometry/RangeNode.js +40 -4
  313. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  314. package/src/nodes/gpgpu/ComputeNode.js +17 -5
  315. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  316. package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
  317. package/src/nodes/lighting/EnvironmentNode.js +6 -6
  318. package/src/nodes/lighting/LightsNode.js +3 -4
  319. package/src/nodes/lighting/PointShadowNode.js +6 -0
  320. package/src/nodes/lighting/ShadowFilterNode.js +2 -0
  321. package/src/nodes/lighting/ShadowNode.js +75 -8
  322. package/src/nodes/math/BitcastNode.js +156 -0
  323. package/src/nodes/math/ConditionalNode.js +24 -7
  324. package/src/nodes/math/MathNode.js +25 -19
  325. package/src/nodes/math/OperatorNode.js +7 -5
  326. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  327. package/src/nodes/shapes/Shapes.js +1 -1
  328. package/src/nodes/tsl/TSLBase.js +5 -2
  329. package/src/nodes/tsl/TSLCore.js +460 -159
  330. package/src/nodes/utils/DebugNode.js +2 -1
  331. package/src/nodes/utils/EventNode.js +36 -0
  332. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  333. package/src/nodes/utils/JoinNode.js +6 -3
  334. package/src/nodes/utils/LoopNode.js +20 -24
  335. package/src/nodes/utils/MemberNode.js +59 -7
  336. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  337. package/src/nodes/utils/RTTNode.js +13 -3
  338. package/src/nodes/utils/ReflectorNode.js +58 -7
  339. package/src/nodes/utils/SampleNode.js +12 -2
  340. package/src/nodes/utils/SplitNode.js +11 -0
  341. package/src/nodes/utils/Timer.js +0 -47
  342. package/src/objects/BatchedMesh.js +2 -2
  343. package/src/objects/LOD.js +1 -1
  344. package/src/objects/Line.js +2 -1
  345. package/src/objects/LineSegments.js +2 -1
  346. package/src/objects/Skeleton.js +3 -2
  347. package/src/objects/SkinnedMesh.js +3 -1
  348. package/src/objects/Sprite.js +4 -3
  349. package/src/renderers/WebGLRenderer.js +48 -41
  350. package/src/renderers/common/Animation.js +13 -1
  351. package/src/renderers/common/Attributes.js +1 -1
  352. package/src/renderers/common/Backend.js +108 -27
  353. package/src/renderers/common/Background.js +2 -1
  354. package/src/renderers/common/Bindings.js +58 -2
  355. package/src/renderers/common/CanvasTarget.js +341 -0
  356. package/src/renderers/common/ChainMap.js +1 -1
  357. package/src/renderers/common/DataMap.js +1 -1
  358. package/src/renderers/common/Geometries.js +26 -0
  359. package/src/renderers/common/Info.js +4 -2
  360. package/src/renderers/common/InspectorBase.js +146 -0
  361. package/src/renderers/common/Pipelines.js +1 -1
  362. package/src/renderers/common/PostProcessing.js +6 -25
  363. package/src/renderers/common/QuadMesh.js +7 -1
  364. package/src/renderers/common/RenderContext.js +2 -2
  365. package/src/renderers/common/RenderList.js +7 -3
  366. package/src/renderers/common/RenderObject.js +16 -2
  367. package/src/renderers/common/RenderObjects.js +1 -1
  368. package/src/renderers/common/Renderer.js +473 -245
  369. package/src/renderers/common/RendererUtils.js +9 -0
  370. package/src/renderers/common/SampledTexture.js +9 -1
  371. package/src/renderers/common/Sampler.js +50 -12
  372. package/src/renderers/common/StorageTexture.js +9 -1
  373. package/src/renderers/common/Textures.js +121 -45
  374. package/src/renderers/common/TimestampQueryPool.js +65 -3
  375. package/src/renderers/common/UniformsGroup.js +2 -1
  376. package/src/renderers/common/XRManager.js +42 -22
  377. package/src/renderers/common/extras/PMREMGenerator.js +160 -65
  378. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  379. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  380. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  381. package/src/renderers/common/nodes/Nodes.js +38 -16
  382. package/src/renderers/shaders/DFGLUTData.js +64 -0
  383. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  384. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  386. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  387. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  388. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  389. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  390. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  391. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -15
  392. package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
  393. package/src/renderers/shaders/UniformsLib.js +1 -0
  394. package/src/renderers/shaders/UniformsUtils.js +25 -4
  395. package/src/renderers/webgl/WebGLCapabilities.js +2 -1
  396. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  397. package/src/renderers/webgl/WebGLInfo.js +3 -1
  398. package/src/renderers/webgl/WebGLProgram.js +15 -14
  399. package/src/renderers/webgl/WebGLPrograms.js +2 -1
  400. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  401. package/src/renderers/webgl/WebGLState.js +15 -14
  402. package/src/renderers/webgl/WebGLTextures.js +19 -14
  403. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  404. package/src/renderers/webgl/WebGLUtils.js +3 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
  407. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  408. package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
  409. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -19
  410. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  411. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  412. package/src/renderers/webgpu/WebGPUBackend.js +153 -123
  413. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  414. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  415. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
  416. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  417. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
  418. package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
  419. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
  420. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  421. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
  422. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  423. package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
  424. package/src/renderers/webxr/WebXRManager.js +42 -26
  425. package/src/textures/ExternalTexture.js +15 -4
  426. package/src/textures/Source.js +3 -2
  427. package/src/textures/Texture.js +3 -2
  428. package/src/textures/VideoTexture.js +2 -3
  429. package/src/utils.js +67 -3
  430. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
@@ -1,9 +1,12 @@
1
- import { DataTexture, RenderTarget, RepeatWrapping, Vector2, Vector3, TempNode, QuadMesh, NodeMaterial, RendererUtils } from 'three/webgpu';
1
+ import { DataTexture, RenderTarget, RepeatWrapping, Vector2, Vector3, TempNode, QuadMesh, NodeMaterial, RendererUtils, RedFormat } from 'three/webgpu';
2
2
  import { reference, logarithmicDepthToViewZ, viewZToPerspectiveDepth, getNormalFromDepth, getScreenPosition, getViewPosition, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, vec2, vec3, vec4, int, dot, max, pow, abs, If, textureSize, sin, cos, PI, texture, passTexture, mat3, add, normalize, mul, cross, div, mix, sqrt, sub, acos, clamp } from 'three/tsl';
3
3
 
4
4
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
5
5
  const _size = /*@__PURE__*/ new Vector2();
6
6
 
7
+ // From Activision GTAO paper: https://www.activision.com/cdn/research/s2016_pbs_activision_occlusion.pptx
8
+ const _temporalRotations = [ 60, 300, 180, 240, 120, 0 ];
9
+
7
10
  let _rendererState;
8
11
 
9
12
  /**
@@ -48,7 +51,7 @@ class GTAONode extends TempNode {
48
51
  */
49
52
  constructor( depthNode, normalNode, camera ) {
50
53
 
51
- super( 'vec4' );
54
+ super( 'float' );
52
55
 
53
56
  /**
54
57
  * A node that represents the scene's depth.
@@ -90,7 +93,7 @@ class GTAONode extends TempNode {
90
93
  * @private
91
94
  * @type {RenderTarget}
92
95
  */
93
- this._aoRenderTarget = new RenderTarget( 1, 1, { depthBuffer: false } );
96
+ this._aoRenderTarget = new RenderTarget( 1, 1, { depthBuffer: false, format: RedFormat } );
94
97
  this._aoRenderTarget.texture.name = 'GTAONode.AO';
95
98
 
96
99
  // uniforms
@@ -150,6 +153,20 @@ class GTAONode extends TempNode {
150
153
  */
151
154
  this.samples = uniform( 16 );
152
155
 
156
+ /**
157
+ * Whether to use temporal filtering or not. Setting this property to
158
+ * `true` requires the usage of `TRAANode`. This will help to reduce noise
159
+ * although it introduces typical TAA artifacts like ghosting and temporal
160
+ * instabilities.
161
+ *
162
+ * If setting this property to `false`, a manual denoise via `DenoiseNode`
163
+ * might be required.
164
+ *
165
+ * @type {boolean}
166
+ * @default false
167
+ */
168
+ this.useTemporalFiltering = false;
169
+
153
170
  /**
154
171
  * The node represents the internal noise texture used by the AO.
155
172
  *
@@ -190,6 +207,13 @@ class GTAONode extends TempNode {
190
207
  */
191
208
  this._cameraFar = reference( 'far', 'float', camera );
192
209
 
210
+ /**
211
+ * Temporal direction that influences the rotation angle for each slice.
212
+ *
213
+ * @type {UniformNode<float>}
214
+ */
215
+ this._temporalDirection = uniform( 0 );
216
+
193
217
  /**
194
218
  * The material that is used to render the effect.
195
219
  *
@@ -247,12 +271,27 @@ class GTAONode extends TempNode {
247
271
 
248
272
  _rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
249
273
 
274
+ // update temporal uniforms
275
+
276
+ if ( this.useTemporalFiltering === true ) {
277
+
278
+ const frameId = frame.frameId;
279
+
280
+ this._temporalDirection.value = _temporalRotations[ frameId % 6 ] / 360;
281
+
282
+ } else {
283
+
284
+ this._temporalDirection.value = 0;
285
+
286
+ }
287
+
250
288
  //
251
289
 
252
290
  const size = renderer.getDrawingBufferSize( _size );
253
291
  this.setSize( size.width, size.height );
254
292
 
255
293
  _quadMesh.material = this._material;
294
+ _quadMesh.name = 'AO';
256
295
 
257
296
  // clear
258
297
 
@@ -312,6 +351,7 @@ class GTAONode extends TempNode {
312
351
  const noiseResolution = textureSize( this._noiseNode, 0 );
313
352
  let noiseUv = vec2( uvNode.x, uvNode.y.oneMinus() );
314
353
  noiseUv = noiseUv.mul( this.resolution.div( noiseResolution ) );
354
+
315
355
  const noiseTexel = sampleNoise( noiseUv );
316
356
  const randomVec = noiseTexel.xyz.mul( 2.0 ).sub( 1.0 );
317
357
  const tangent = vec3( randomVec.xy, 0.0 ).normalize();
@@ -323,9 +363,11 @@ class GTAONode extends TempNode {
323
363
 
324
364
  const ao = float( 0 ).toVar();
325
365
 
366
+ // Each iteration analyzes one vertical "slice" of the 3D space around the fragment.
367
+
326
368
  Loop( { start: int( 0 ), end: DIRECTIONS, type: 'int', condition: '<' }, ( { i } ) => {
327
369
 
328
- const angle = float( i ).div( float( DIRECTIONS ) ).mul( PI ).toVar();
370
+ const angle = float( i ).div( float( DIRECTIONS ) ).mul( PI ).add( this._temporalDirection ).toVar();
329
371
  const sampleDir = vec4( cos( angle ), sin( angle ), 0., add( 0.5, mul( 0.5, noiseTexel.w ) ) );
330
372
  sampleDir.xyz = normalize( kernelMatrix.mul( sampleDir.xyz ) );
331
373
 
@@ -337,10 +379,14 @@ class GTAONode extends TempNode {
337
379
  const tangentToNormalInSlice = cross( normalInSlice, sliceBitangent ).toVar();
338
380
  const cosHorizons = vec2( dot( viewDir, tangentToNormalInSlice ), dot( viewDir, tangentToNormalInSlice.negate() ) ).toVar();
339
381
 
382
+ // For each slice, the inner loop performs ray marching to find the horizons.
383
+
340
384
  Loop( { end: STEPS, type: 'int', name: 'j', condition: '<' }, ( { j } ) => {
341
385
 
342
386
  const sampleViewOffset = sampleDir.xyz.mul( radiusToUse ).mul( sampleDir.w ).mul( pow( div( float( j ).add( 1.0 ), float( STEPS ) ), this.distanceExponent ) );
343
387
 
388
+ // The loop marches in two opposite directions (x and y) along the slice's line to find the horizon on both sides.
389
+
344
390
  // x
345
391
 
346
392
  const sampleScreenPositionX = getScreenPosition( viewPosition.add( sampleViewOffset ), this._cameraProjectionMatrix ).toVar();
@@ -371,6 +417,8 @@ class GTAONode extends TempNode {
371
417
 
372
418
  } );
373
419
 
420
+ // After the horizons are found for a given slice, their contribution to the total occlusion is calculated.
421
+
374
422
  const sinHorizons = sqrt( sub( 1.0, cosHorizons.mul( cosHorizons ) ) ).toVar();
375
423
  const nx = dot( normalInSlice, sliceTangent );
376
424
  const ny = dot( normalInSlice, viewDir );
@@ -384,7 +432,7 @@ class GTAONode extends TempNode {
384
432
  ao.assign( clamp( ao.div( DIRECTIONS ), 0, 1 ) );
385
433
  ao.assign( pow( ao, this.scale ) );
386
434
 
387
- return vec4( vec3( ao ), 1.0 );
435
+ return ao;
388
436
 
389
437
  } );
390
438
 
@@ -25,8 +25,11 @@ class GaussianBlurNode extends TempNode {
25
25
  * @param {TextureNode} textureNode - The texture node that represents the input of the effect.
26
26
  * @param {Node<vec2|float>} directionNode - Defines the direction and radius of the blur.
27
27
  * @param {number} sigma - Controls the kernel of the blur filter. Higher values mean a wider blur radius.
28
+ * @param {Object} [options={}] - Additional options for the gaussian blur effect.
29
+ * @param {boolean} [options.premultipliedAlpha=false] - Whether to use premultiplied alpha for the blur effect.
30
+ * @param {number} [options.resolutionScale=1] - The resolution of the effect. 0.5 means half the resolution of the texture node.
28
31
  */
29
- constructor( textureNode, directionNode = null, sigma = 4 ) {
32
+ constructor( textureNode, directionNode = null, sigma = 4, options = {} ) {
30
33
 
31
34
  super( 'vec4' );
32
35
 
@@ -105,12 +108,12 @@ class GaussianBlurNode extends TempNode {
105
108
  this.updateBeforeType = NodeUpdateType.FRAME;
106
109
 
107
110
  /**
108
- * Controls the resolution of the effect.
111
+ * The resolution scale.
109
112
  *
110
- * @type {Vector2}
111
- * @default (1,1)
113
+ * @type {number}
114
+ * @default (1)
112
115
  */
113
- this.resolution = new Vector2( 1, 1 );
116
+ this.resolutionScale = options.resolutionScale || 1;
114
117
 
115
118
  /**
116
119
  * Whether the effect should use premultiplied alpha or not. Set this to `true`
@@ -119,32 +122,7 @@ class GaussianBlurNode extends TempNode {
119
122
  * @type {boolean}
120
123
  * @default false
121
124
  */
122
- this.premultipliedAlpha = false;
123
-
124
- }
125
-
126
- /**
127
- * Sets the given premultiplied alpha value.
128
- *
129
- * @param {boolean} value - Whether the effect should use premultiplied alpha or not.
130
- * @return {GaussianBlurNode} height - A reference to this node.
131
- */
132
- setPremultipliedAlpha( value ) {
133
-
134
- this.premultipliedAlpha = value;
135
-
136
- return this;
137
-
138
- }
139
-
140
- /**
141
- * Returns the premultiplied alpha value.
142
- *
143
- * @return {boolean} Whether the effect should use premultiplied alpha or not.
144
- */
145
- getPremultipliedAlpha() {
146
-
147
- return this.premultipliedAlpha;
125
+ this.premultipliedAlpha = options.premultipliedAlpha || false;
148
126
 
149
127
  }
150
128
 
@@ -156,8 +134,8 @@ class GaussianBlurNode extends TempNode {
156
134
  */
157
135
  setSize( width, height ) {
158
136
 
159
- width = Math.max( Math.round( width * this.resolution.x ), 1 );
160
- height = Math.max( Math.round( height * this.resolution.y ), 1 );
137
+ width = Math.max( Math.round( width * this.resolutionScale ), 1 );
138
+ height = Math.max( Math.round( height * this.resolutionScale ), 1 );
161
139
 
162
140
  this._invSize.value.set( 1 / width, 1 / height );
163
141
  this._horizontalRT.setSize( width, height );
@@ -198,6 +176,7 @@ class GaussianBlurNode extends TempNode {
198
176
 
199
177
  this._passDirection.value.set( 1, 0 );
200
178
 
179
+ _quadMesh.name = 'Gaussian Blur [ Horizontal Pass ]';
201
180
  _quadMesh.render( renderer );
202
181
 
203
182
  // vertical
@@ -207,6 +186,7 @@ class GaussianBlurNode extends TempNode {
207
186
 
208
187
  this._passDirection.value.set( 0, 1 );
209
188
 
189
+ _quadMesh.name = 'Gaussian Blur [ Vertical Pass ]';
210
190
  _quadMesh.render( renderer );
211
191
 
212
192
  // restore
@@ -280,6 +260,7 @@ class GaussianBlurNode extends TempNode {
280
260
  const sample2 = sampleTexture( uvNode.sub( uvOffset ) );
281
261
 
282
262
  diffuseSum.addAssign( sample1.add( sample2 ).mul( w ) );
263
+
283
264
  }
284
265
 
285
266
  return output( diffuseSum );
@@ -337,6 +318,29 @@ class GaussianBlurNode extends TempNode {
337
318
 
338
319
  }
339
320
 
321
+ /**
322
+ * The resolution scale.
323
+ *
324
+ * @deprecated
325
+ * @type {Vector2}
326
+ * @default {(1,1)}
327
+ */
328
+ get resolution() {
329
+
330
+ console.warn( 'THREE.GaussianBlurNode: The "resolution" property has been renamed to "resolutionScale" and is now of type `number`.' ); // @deprecated r180
331
+
332
+ return new Vector2( this.resolutionScale, this.resolutionScale );
333
+
334
+ }
335
+
336
+ set resolution( value ) {
337
+
338
+ console.warn( 'THREE.GaussianBlurNode: The "resolution" property has been renamed to "resolutionScale" and is now of type `number`.' ); // @deprecated r180
339
+
340
+ this.resolutionScale = value.x;
341
+
342
+ }
343
+
340
344
  }
341
345
 
342
346
  export default GaussianBlurNode;
@@ -349,18 +353,28 @@ export default GaussianBlurNode;
349
353
  * @param {Node<vec4>} node - The node that represents the input of the effect.
350
354
  * @param {Node<vec2|float>} directionNode - Defines the direction and radius of the blur.
351
355
  * @param {number} sigma - Controls the kernel of the blur filter. Higher values mean a wider blur radius.
356
+ * @param {Object} [options={}] - Additional options for the gaussian blur effect.
357
+ * @param {boolean} [options.premultipliedAlpha=false] - Whether to use premultiplied alpha for the blur effect.
358
+ * @param {number} [options.resolutionScale=1] - The resolution of the effect. 0.5 means half the resolution of the texture node.
352
359
  * @returns {GaussianBlurNode}
353
360
  */
354
- export const gaussianBlur = ( node, directionNode, sigma ) => nodeObject( new GaussianBlurNode( convertToTexture( node ), directionNode, sigma ) );
361
+ export const gaussianBlur = ( node, directionNode, sigma, options = {} ) => nodeObject( new GaussianBlurNode( convertToTexture( node ), directionNode, sigma, options ) );
355
362
 
356
363
  /**
357
364
  * TSL function for creating a gaussian blur node for post processing with enabled premultiplied alpha.
358
365
  *
359
366
  * @tsl
360
367
  * @function
368
+ * @deprecated since r180. Use `gaussianBlur()` with `premultipliedAlpha: true` option instead.
361
369
  * @param {Node<vec4>} node - The node that represents the input of the effect.
362
370
  * @param {Node<vec2|float>} directionNode - Defines the direction and radius of the blur.
363
371
  * @param {number} sigma - Controls the kernel of the blur filter. Higher values mean a wider blur radius.
364
372
  * @returns {GaussianBlurNode}
365
373
  */
366
- export const premultipliedGaussianBlur = ( node, directionNode, sigma ) => nodeObject( new GaussianBlurNode( convertToTexture( node ), directionNode, sigma ).setPremultipliedAlpha( true ) );
374
+ export function premultipliedGaussianBlur( node, directionNode, sigma ) {
375
+
376
+ console.warn( 'THREE.TSL: "premultipliedGaussianBlur()" is deprecated. Use "gaussianBlur()" with "premultipliedAlpha: true" option instead.' ); // deprecated, r180
377
+
378
+ return gaussianBlur( node, directionNode, sigma, { premultipliedAlpha: true } );
379
+
380
+ }
@@ -56,7 +56,7 @@ class OutlineNode extends TempNode {
56
56
  * @param {Scene} scene - A reference to the scene.
57
57
  * @param {Camera} camera - The camera the scene is rendered with.
58
58
  * @param {Object} params - The configuration parameters.
59
- * @param {Array<Object3D>} params.selectedObjects - An array of selected objects.
59
+ * @param {Array<Object3D>} [params.selectedObjects] - An array of selected objects.
60
60
  * @param {Node<float>} [params.edgeThickness=float(1)] - The thickness of the edges.
61
61
  * @param {Node<float>} [params.edgeGlow=float(0)] - Can be used for an animated glow/pulse effects.
62
62
  * @param {number} [params.downSampleRatio=2] - The downsample ratio.
@@ -455,6 +455,8 @@ class OutlineNode extends TempNode {
455
455
 
456
456
  this._updateSelectionCache();
457
457
 
458
+ const currentSceneName = scene.name;
459
+
458
460
  // 1. Draw non-selected objects in the depth buffer
459
461
 
460
462
  scene.overrideMaterial = this._depthMaterial;
@@ -470,6 +472,7 @@ class OutlineNode extends TempNode {
470
472
 
471
473
  } );
472
474
 
475
+ scene.name = 'Outline [ Non-Selected Objects Pass ]';
473
476
  renderer.render( scene, camera );
474
477
 
475
478
  // 2. Draw only the selected objects by comparing the depth buffer of non-selected objects
@@ -487,6 +490,7 @@ class OutlineNode extends TempNode {
487
490
 
488
491
  } );
489
492
 
493
+ scene.name = 'Outline [ Selected Objects Pass ]';
490
494
  renderer.render( scene, camera );
491
495
 
492
496
  //
@@ -495,15 +499,19 @@ class OutlineNode extends TempNode {
495
499
 
496
500
  this._selectionCache.clear();
497
501
 
502
+ scene.name = currentSceneName;
503
+
498
504
  // 3. Downsample to (at least) half resolution
499
505
 
500
506
  _quadMesh.material = this._materialCopy;
507
+ _quadMesh.name = 'Outline [ Downsample ]';
501
508
  renderer.setRenderTarget( this._renderTargetMaskDownSampleBuffer );
502
509
  _quadMesh.render( renderer );
503
510
 
504
511
  // 4. Perform edge detection (half resolution)
505
512
 
506
513
  _quadMesh.material = this._edgeDetectionMaterial;
514
+ _quadMesh.name = 'Outline [ Edge Detection ]';
507
515
  renderer.setRenderTarget( this._renderTargetEdgeBuffer1 );
508
516
  _quadMesh.render( renderer );
509
517
 
@@ -513,6 +521,7 @@ class OutlineNode extends TempNode {
513
521
  this._blurDirection.value.copy( _BLUR_DIRECTION_X );
514
522
 
515
523
  _quadMesh.material = this._separableBlurMaterial;
524
+ _quadMesh.name = 'Outline [ Blur Half Resolution ]';
516
525
  renderer.setRenderTarget( this._renderTargetBlurBuffer1 );
517
526
  _quadMesh.render( renderer );
518
527
 
@@ -528,6 +537,7 @@ class OutlineNode extends TempNode {
528
537
  this._blurDirection.value.copy( _BLUR_DIRECTION_X );
529
538
 
530
539
  _quadMesh.material = this._separableBlurMaterial2;
540
+ _quadMesh.name = 'Outline [ Blur Quarter Resolution ]';
531
541
  renderer.setRenderTarget( this._renderTargetBlurBuffer2 );
532
542
  _quadMesh.render( renderer );
533
543
 
@@ -540,6 +550,7 @@ class OutlineNode extends TempNode {
540
550
  // 7. Composite
541
551
 
542
552
  _quadMesh.material = this._compositeMaterial;
553
+ _quadMesh.name = 'Outline [ Blur Quarter Resolution ]';
543
554
  renderer.setRenderTarget( this._renderTargetComposite );
544
555
  _quadMesh.render( renderer );
545
556
 
@@ -742,7 +753,7 @@ export default OutlineNode;
742
753
  * @param {Scene} scene - A reference to the scene.
743
754
  * @param {Camera} camera - The camera the scene is rendered with.
744
755
  * @param {Object} params - The configuration parameters.
745
- * @param {Array<Object3D>} params.selectedObjects - An array of selected objects.
756
+ * @param {Array<Object3D>} [params.selectedObjects] - An array of selected objects.
746
757
  * @param {Node<float>} [params.edgeThickness=float(1)] - The thickness of the edges.
747
758
  * @param {Node<float>} [params.edgeGlow=float(0)] - Can be used for animated glow/pulse effects.
748
759
  * @param {number} [params.downSampleRatio=2] - The downsample ratio.