@drawcall/lod 0.1.2 → 0.3.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 (358) hide show
  1. package/README.md +13 -70
  2. package/dist/at.d.ts +2 -0
  3. package/dist/at.js +8 -0
  4. package/dist/at.js.map +1 -0
  5. package/dist/bake.d.ts +22 -0
  6. package/dist/bake.js +88 -0
  7. package/dist/bake.js.map +1 -0
  8. package/dist/baked/codec.d.ts +5 -5
  9. package/dist/baked/codec.js +58 -158
  10. package/dist/baked/codec.js.map +1 -1
  11. package/dist/baked/coverage.d.ts +6 -3
  12. package/dist/baked/coverage.js +6 -3
  13. package/dist/baked/coverage.js.map +1 -1
  14. package/dist/baked/fields.d.ts +9 -0
  15. package/dist/baked/fields.js +22 -0
  16. package/dist/baked/fields.js.map +1 -0
  17. package/dist/baked/index.d.ts +16 -6
  18. package/dist/baked/index.js +23 -21
  19. package/dist/baked/index.js.map +1 -1
  20. package/dist/baked/interior/faces.d.ts +4 -3
  21. package/dist/baked/interior/faces.js +13 -10
  22. package/dist/baked/interior/faces.js.map +1 -1
  23. package/dist/baked/interior/material.d.ts +7 -10
  24. package/dist/baked/interior/material.js +29 -36
  25. package/dist/baked/interior/material.js.map +1 -1
  26. package/dist/baked/interior/rooms.js +1 -1
  27. package/dist/baked/interior/rooms.js.map +1 -1
  28. package/dist/baked/low.d.ts +2 -2
  29. package/dist/baked/low.js +9 -8
  30. package/dist/baked/low.js.map +1 -1
  31. package/dist/baked/raster.js +6 -6
  32. package/dist/baked/raster.js.map +1 -1
  33. package/dist/baked/textures.d.ts +17 -0
  34. package/dist/baked/textures.js +95 -0
  35. package/dist/baked/textures.js.map +1 -0
  36. package/dist/baked/transfer.js +19 -18
  37. package/dist/baked/transfer.js.map +1 -1
  38. package/dist/baked/unwrap.js +4 -3
  39. package/dist/baked/unwrap.js.map +1 -1
  40. package/dist/baked/xatlas.js.map +1 -1
  41. package/dist/codec/container.d.ts +8 -0
  42. package/dist/codec/container.js +63 -0
  43. package/dist/codec/container.js.map +1 -0
  44. package/dist/codec/mesh.d.ts +8 -0
  45. package/dist/codec/mesh.js +220 -0
  46. package/dist/codec/mesh.js.map +1 -0
  47. package/dist/dispose.d.ts +11 -4
  48. package/dist/dispose.js +39 -12
  49. package/dist/dispose.js.map +1 -1
  50. package/dist/gpu.d.ts +39 -0
  51. package/dist/gpu.js +41 -0
  52. package/dist/gpu.js.map +1 -0
  53. package/dist/impostor/bake/atlas.d.ts +4 -4
  54. package/dist/impostor/bake/atlas.js +12 -12
  55. package/dist/impostor/bake/atlas.js.map +1 -1
  56. package/dist/impostor/bake/fit.d.ts +8 -0
  57. package/dist/impostor/bake/fit.js +28 -0
  58. package/dist/impostor/bake/fit.js.map +1 -0
  59. package/dist/impostor/bake/index.d.ts +23 -14
  60. package/dist/impostor/bake/index.js +42 -134
  61. package/dist/impostor/bake/index.js.map +1 -1
  62. package/dist/impostor/bake/materials.d.ts +3 -3
  63. package/dist/impostor/bake/materials.js +60 -12
  64. package/dist/impostor/bake/materials.js.map +1 -1
  65. package/dist/impostor/bake/sheet.d.ts +8 -0
  66. package/dist/impostor/bake/sheet.js +90 -0
  67. package/dist/impostor/bake/sheet.js.map +1 -0
  68. package/dist/impostor/bake/source.d.ts +2 -2
  69. package/dist/impostor/bake/source.js +8 -19
  70. package/dist/impostor/bake/source.js.map +1 -1
  71. package/dist/impostor/codec.d.ts +5 -11
  72. package/dist/impostor/codec.js +37 -121
  73. package/dist/impostor/codec.js.map +1 -1
  74. package/dist/impostor/impostor.d.ts +31 -7
  75. package/dist/impostor/impostor.js +21 -6
  76. package/dist/impostor/impostor.js.map +1 -1
  77. package/dist/impostor/ktx2/encode.d.ts +26 -0
  78. package/dist/impostor/ktx2/encode.js +117 -0
  79. package/dist/impostor/ktx2/encode.js.map +1 -0
  80. package/dist/impostor/ktx2/transcode.d.ts +3 -0
  81. package/dist/impostor/ktx2/transcode.js +99 -0
  82. package/dist/impostor/ktx2/transcode.js.map +1 -0
  83. package/dist/impostor/ktx2/uastc.d.ts +7 -0
  84. package/dist/impostor/ktx2/uastc.js +64 -0
  85. package/dist/impostor/ktx2/uastc.js.map +1 -0
  86. package/dist/impostor/ktx2/wasm/encoder.d.ts +4 -0
  87. package/dist/impostor/ktx2/wasm/encoder.js +10 -0
  88. package/dist/impostor/ktx2/wasm/encoder.js.map +1 -0
  89. package/dist/impostor/ktx2/wasm/transcoder.d.ts +3 -0
  90. package/dist/impostor/ktx2/wasm/transcoder.js +9 -0
  91. package/dist/impostor/ktx2/wasm/transcoder.js.map +1 -0
  92. package/dist/impostor/ktx2/worker.d.ts +1 -0
  93. package/dist/impostor/ktx2/worker.js +12 -0
  94. package/dist/impostor/ktx2/worker.js.map +1 -0
  95. package/dist/impostor/mesh/card.d.ts +3 -3
  96. package/dist/impostor/mesh/card.js +11 -8
  97. package/dist/impostor/mesh/card.js.map +1 -1
  98. package/dist/impostor/mesh/index.d.ts +10 -7
  99. package/dist/impostor/mesh/index.js +15 -18
  100. package/dist/impostor/mesh/index.js.map +1 -1
  101. package/dist/impostor/mesh/material.d.ts +24 -13
  102. package/dist/impostor/mesh/material.js +67 -51
  103. package/dist/impostor/mesh/material.js.map +1 -1
  104. package/dist/impostor/mesh/surface.d.ts +20 -16
  105. package/dist/impostor/mesh/surface.js +81 -58
  106. package/dist/impostor/mesh/surface.js.map +1 -1
  107. package/dist/impostor/mesh/textures.d.ts +3 -3
  108. package/dist/impostor/mesh/textures.js +24 -34
  109. package/dist/impostor/mesh/textures.js.map +1 -1
  110. package/dist/impostor/octahedral.d.ts +1 -8
  111. package/dist/impostor/octahedral.js +3 -18
  112. package/dist/impostor/octahedral.js.map +1 -1
  113. package/dist/index.d.ts +16 -10
  114. package/dist/index.js +14 -8
  115. package/dist/index.js.map +1 -1
  116. package/dist/instanced/camera.d.ts +46 -0
  117. package/dist/instanced/camera.js +70 -0
  118. package/dist/instanced/camera.js.map +1 -0
  119. package/dist/instanced/chunk.d.ts +97 -0
  120. package/dist/instanced/chunk.js +156 -0
  121. package/dist/instanced/chunk.js.map +1 -0
  122. package/dist/instanced/chunks.d.ts +60 -0
  123. package/dist/instanced/chunks.js +208 -0
  124. package/dist/instanced/chunks.js.map +1 -0
  125. package/dist/instanced/cull.d.ts +28 -0
  126. package/dist/instanced/cull.js +22 -0
  127. package/dist/instanced/cull.js.map +1 -0
  128. package/dist/instanced/index.d.ts +96 -92
  129. package/dist/instanced/index.js +229 -512
  130. package/dist/instanced/index.js.map +1 -1
  131. package/dist/instanced/key.d.ts +19 -0
  132. package/dist/instanced/key.js +45 -0
  133. package/dist/instanced/key.js.map +1 -0
  134. package/dist/instanced/levels.d.ts +60 -0
  135. package/dist/instanced/levels.js +130 -0
  136. package/dist/instanced/levels.js.map +1 -0
  137. package/dist/instanced/lists.d.ts +70 -0
  138. package/dist/instanced/lists.js +133 -0
  139. package/dist/instanced/lists.js.map +1 -0
  140. package/dist/instanced/measure.d.ts +28 -0
  141. package/dist/instanced/measure.js +203 -0
  142. package/dist/instanced/measure.js.map +1 -0
  143. package/dist/instanced/meshes.d.ts +46 -14
  144. package/dist/instanced/meshes.js +137 -22
  145. package/dist/instanced/meshes.js.map +1 -1
  146. package/dist/instanced/mirror.d.ts +20 -0
  147. package/dist/instanced/mirror.js +37 -0
  148. package/dist/instanced/mirror.js.map +1 -0
  149. package/dist/instanced/pages/buffers.d.ts +37 -0
  150. package/dist/instanced/pages/buffers.js +15 -0
  151. package/dist/instanced/pages/buffers.js.map +1 -0
  152. package/dist/instanced/pages/chunk.d.ts +51 -0
  153. package/dist/instanced/pages/chunk.js +81 -0
  154. package/dist/instanced/pages/chunk.js.map +1 -0
  155. package/dist/instanced/pages/index.d.ts +74 -0
  156. package/dist/instanced/pages/index.js +269 -0
  157. package/dist/instanced/pages/index.js.map +1 -0
  158. package/dist/instanced/pages/passes.d.ts +21 -0
  159. package/dist/instanced/pages/passes.js +52 -0
  160. package/dist/instanced/pages/passes.js.map +1 -0
  161. package/dist/instanced/pages/slots.d.ts +11 -0
  162. package/dist/instanced/pages/slots.js +90 -0
  163. package/dist/instanced/pages/slots.js.map +1 -0
  164. package/dist/instanced/pages/workgroup.d.ts +14 -0
  165. package/dist/instanced/pages/workgroup.js +38 -0
  166. package/dist/instanced/pages/workgroup.js.map +1 -0
  167. package/dist/instanced/raycast.d.ts +15 -0
  168. package/dist/instanced/raycast.js +46 -0
  169. package/dist/instanced/raycast.js.map +1 -0
  170. package/dist/instanced/rows.d.ts +108 -0
  171. package/dist/instanced/rows.js +209 -0
  172. package/dist/instanced/rows.js.map +1 -0
  173. package/dist/instanced/shape.d.ts +25 -0
  174. package/dist/instanced/shape.js +51 -0
  175. package/dist/instanced/shape.js.map +1 -0
  176. package/dist/instanced/sort.d.ts +63 -0
  177. package/dist/instanced/sort.js +162 -0
  178. package/dist/instanced/sort.js.map +1 -0
  179. package/dist/instanced/update.d.ts +30 -0
  180. package/dist/instanced/update.js +207 -0
  181. package/dist/instanced/update.js.map +1 -0
  182. package/dist/levels/bounds.d.ts +21 -0
  183. package/dist/levels/bounds.js +42 -0
  184. package/dist/levels/bounds.js.map +1 -0
  185. package/dist/levels/cameras.d.ts +48 -0
  186. package/dist/levels/cameras.js +122 -0
  187. package/dist/levels/cameras.js.map +1 -0
  188. package/dist/levels/compile/contexts.d.ts +30 -0
  189. package/dist/levels/compile/contexts.js +18 -0
  190. package/dist/levels/compile/contexts.js.map +1 -0
  191. package/dist/levels/compile/index.d.ts +39 -0
  192. package/dist/levels/compile/index.js +185 -0
  193. package/dist/levels/compile/index.js.map +1 -0
  194. package/dist/levels/compile/pipelines.d.ts +26 -0
  195. package/dist/levels/compile/pipelines.js +177 -0
  196. package/dist/levels/compile/pipelines.js.map +1 -0
  197. package/dist/levels/compiles.d.ts +29 -0
  198. package/dist/levels/compiles.js +50 -0
  199. package/dist/levels/compiles.js.map +1 -0
  200. package/dist/levels/draw.d.ts +102 -0
  201. package/dist/levels/draw.js +401 -0
  202. package/dist/levels/draw.js.map +1 -0
  203. package/dist/levels/fade.d.ts +69 -0
  204. package/dist/levels/fade.js +150 -0
  205. package/dist/levels/fade.js.map +1 -0
  206. package/dist/levels/index.d.ts +99 -0
  207. package/dist/levels/index.js +155 -0
  208. package/dist/levels/index.js.map +1 -0
  209. package/dist/levels/item.d.ts +38 -0
  210. package/dist/levels/item.js +97 -0
  211. package/dist/levels/item.js.map +1 -0
  212. package/dist/levels/load.d.ts +31 -0
  213. package/dist/levels/load.js +142 -0
  214. package/dist/levels/load.js.map +1 -0
  215. package/dist/levels/manager.d.ts +159 -0
  216. package/dist/levels/manager.js +339 -0
  217. package/dist/levels/manager.js.map +1 -0
  218. package/dist/{material.js → levels/material.js} +13 -7
  219. package/dist/levels/material.js.map +1 -0
  220. package/dist/levels/renderer.d.ts +29 -0
  221. package/dist/levels/renderer.js +41 -0
  222. package/dist/levels/renderer.js.map +1 -0
  223. package/dist/levels/requests.d.ts +49 -0
  224. package/dist/levels/requests.js +95 -0
  225. package/dist/levels/requests.js.map +1 -0
  226. package/dist/levels/screen.d.ts +14 -0
  227. package/dist/levels/screen.js +21 -0
  228. package/dist/levels/screen.js.map +1 -0
  229. package/dist/levels/wait.d.ts +27 -0
  230. package/dist/levels/wait.js +61 -0
  231. package/dist/levels/wait.js.map +1 -0
  232. package/dist/loader/build.d.ts +10 -0
  233. package/dist/loader/build.js +28 -0
  234. package/dist/loader/build.js.map +1 -0
  235. package/dist/loader/cache.d.ts +12 -15
  236. package/dist/loader/cache.js +64 -33
  237. package/dist/loader/cache.js.map +1 -1
  238. package/dist/loader/context.d.ts +46 -0
  239. package/dist/loader/context.js +91 -0
  240. package/dist/loader/context.js.map +1 -0
  241. package/dist/loader/dependencies.d.ts +32 -0
  242. package/dist/loader/dependencies.js +113 -0
  243. package/dist/loader/dependencies.js.map +1 -0
  244. package/dist/loader/index.d.ts +62 -0
  245. package/dist/loader/index.js +284 -0
  246. package/dist/loader/index.js.map +1 -0
  247. package/dist/loader/level.d.ts +41 -0
  248. package/dist/loader/level.js +140 -0
  249. package/dist/loader/level.js.map +1 -0
  250. package/dist/loader/request.d.ts +87 -0
  251. package/dist/loader/request.js +59 -0
  252. package/dist/loader/request.js.map +1 -0
  253. package/dist/loader/url.d.ts +16 -0
  254. package/dist/loader/url.js +35 -0
  255. package/dist/loader/url.js.map +1 -0
  256. package/dist/lod.d.ts +79 -49
  257. package/dist/lod.js +209 -153
  258. package/dist/lod.js.map +1 -1
  259. package/dist/meshopt.d.ts +6 -0
  260. package/dist/meshopt.js +19 -0
  261. package/dist/meshopt.js.map +1 -0
  262. package/dist/simplify/cards.d.ts +14 -0
  263. package/dist/simplify/cards.js +128 -0
  264. package/dist/simplify/cards.js.map +1 -0
  265. package/dist/{simplify.d.ts → simplify/index.d.ts} +7 -4
  266. package/dist/{simplify.js → simplify/index.js} +42 -22
  267. package/dist/simplify/index.js.map +1 -0
  268. package/dist/{bounds.d.ts → source/detail.d.ts} +4 -13
  269. package/dist/{bounds.js → source/detail.js} +62 -32
  270. package/dist/source/detail.js.map +1 -0
  271. package/dist/source/{error.d.ts → deviation.d.ts} +3 -3
  272. package/dist/source/{error.js → deviation.js} +12 -12
  273. package/dist/source/deviation.js.map +1 -0
  274. package/dist/source/{shading.d.ts → evaluator.d.ts} +10 -10
  275. package/dist/source/{shading.js → evaluator.js} +5 -5
  276. package/dist/source/evaluator.js.map +1 -0
  277. package/dist/source/{trace.d.ts → raycaster.d.ts} +6 -6
  278. package/dist/source/{trace.js → raycaster.js} +8 -8
  279. package/dist/source/raycaster.js.map +1 -0
  280. package/dist/source/{texels.d.ts → sampler.d.ts} +1 -1
  281. package/dist/source/{texels.js → sampler.js} +3 -3
  282. package/dist/source/sampler.js.map +1 -0
  283. package/dist/source/source.d.ts +2 -2
  284. package/dist/source/source.js +2 -2
  285. package/dist/source/source.js.map +1 -1
  286. package/dist/source/surface.js +1 -1
  287. package/dist/source/surface.js.map +1 -1
  288. package/dist/task.d.ts +6 -0
  289. package/dist/{pause.js → task.js} +5 -5
  290. package/dist/task.js.map +1 -0
  291. package/dist/three.d.ts +20 -19
  292. package/dist/three.js +29 -35
  293. package/dist/three.js.map +1 -1
  294. package/dist/tsl.d.ts +10 -14
  295. package/dist/tsl.js +12 -47
  296. package/dist/tsl.js.map +1 -1
  297. package/dist/typegpu.d.ts +37 -0
  298. package/dist/typegpu.js +37 -0
  299. package/dist/typegpu.js.map +1 -0
  300. package/dist/wind/bounds.js +2 -2
  301. package/dist/wind/bounds.js.map +1 -1
  302. package/dist/wind/hooks.d.ts +7 -4
  303. package/dist/wind/hooks.js +5 -2
  304. package/dist/wind/hooks.js.map +1 -1
  305. package/dist/wind/index.d.ts +4 -4
  306. package/dist/wind/index.js +43 -40
  307. package/dist/wind/index.js.map +1 -1
  308. package/dist/wind/sway.d.ts +4 -1
  309. package/dist/wind/sway.js +4 -1
  310. package/dist/wind/sway.js.map +1 -1
  311. package/package.json +24 -8
  312. package/skills/lod/SKILL.md +147 -108
  313. package/dist/bounds.js.map +0 -1
  314. package/dist/fade.d.ts +0 -44
  315. package/dist/fade.js +0 -78
  316. package/dist/fade.js.map +0 -1
  317. package/dist/impostor/cache.d.ts +0 -15
  318. package/dist/impostor/cache.js +0 -44
  319. package/dist/impostor/cache.js.map +0 -1
  320. package/dist/instanced/args.d.ts +0 -20
  321. package/dist/instanced/args.js +0 -77
  322. package/dist/instanced/args.js.map +0 -1
  323. package/dist/instanced/bounds.d.ts +0 -50
  324. package/dist/instanced/bounds.js +0 -271
  325. package/dist/instanced/bounds.js.map +0 -1
  326. package/dist/instanced/dirty.d.ts +0 -12
  327. package/dist/instanced/dirty.js +0 -61
  328. package/dist/instanced/dirty.js.map +0 -1
  329. package/dist/instanced/select.d.ts +0 -84
  330. package/dist/instanced/select.js +0 -264
  331. package/dist/instanced/select.js.map +0 -1
  332. package/dist/lazy.d.ts +0 -64
  333. package/dist/lazy.js +0 -187
  334. package/dist/lazy.js.map +0 -1
  335. package/dist/levels.d.ts +0 -72
  336. package/dist/levels.js +0 -146
  337. package/dist/levels.js.map +0 -1
  338. package/dist/loader/dispose.d.ts +0 -3
  339. package/dist/loader/dispose.js +0 -25
  340. package/dist/loader/dispose.js.map +0 -1
  341. package/dist/loader.d.ts +0 -99
  342. package/dist/loader.js +0 -234
  343. package/dist/loader.js.map +0 -1
  344. package/dist/material.js.map +0 -1
  345. package/dist/pause.d.ts +0 -6
  346. package/dist/pause.js.map +0 -1
  347. package/dist/renderer.d.ts +0 -21
  348. package/dist/renderer.js +0 -83
  349. package/dist/renderer.js.map +0 -1
  350. package/dist/simplify.js.map +0 -1
  351. package/dist/source/error.js.map +0 -1
  352. package/dist/source/shading.js.map +0 -1
  353. package/dist/source/texels.js.map +0 -1
  354. package/dist/source/trace.js.map +0 -1
  355. package/dist/view.d.ts +0 -30
  356. package/dist/view.js +0 -75
  357. package/dist/view.js.map +0 -1
  358. /package/dist/{material.d.ts → levels/material.d.ts} +0 -0
package/dist/lod.js CHANGED
@@ -1,211 +1,267 @@
1
1
  import { Object3D, Sphere } from "three/webgpu";
2
- import { measureLevels } from "./bounds.js";
3
- import { disposeTree } from "./dispose.js";
4
- import { setDraw } from "./fade.js";
5
- import { levelMaterial } from "./material.js";
6
- import { available, fallbacks, inView } from "./lazy.js";
7
- import { FADE, Level, cloneLevels, copyThresholds, estimate, fadeProgress, levelAt, tintLevels, validate } from "./levels.js";
8
- import { inShadowPass, isLazyImpostor, isImpostorMesh, isLOD, isMesh, rejectSkinned } from "./three.js";
9
- import { TYPICAL_HEIGHT, View, viewportHeight, watchViewport } from "./view.js";
10
- import { WIND_BOUNDS } from "./wind/hooks.js";
2
+ import { at } from "./at.js";
3
+ import { measureLevels, prepareBounds } from "./levels/bounds.js";
4
+ import { disposeCopies } from "./dispose.js";
5
+ import { EncodedLevels, emptyLevels, levelsFrom, tintOf } from "./levels/index.js";
6
+ import { FADE, drawnLevel, levelsToDraw } from "./levels/draw.js";
7
+ import { setFadeSource } from "./levels/fade.js";
8
+ import { levelsToLoad } from "./levels/load.js";
9
+ import { LodLevelLoadManager } from "./levels/manager.js";
10
+ import { levelMaterial } from "./levels/material.js";
11
+ import { screenHeight, screenOf } from "./levels/screen.js";
12
+ import { inShadowMap } from "./levels/renderer.js";
13
+ import { isImpostorMesh, isLOD, isLine, isMesh, isPoints, rejectSkinned, sameClass } from "./three.js";
14
+ import { WIND } from "./wind/hooks.js";
11
15
  import { copyWind, refreshWind } from "./wind/index.js";
12
- const view = new View();
13
16
  /**
14
- * Levels of detail of one object, switched by its height on screen. Level 0 is the
15
- * source; each further level is used while the object is at most its `maxPixels` tall
16
- * (see `LodLevel.maxPixels` for the defaults). Near a switch both neighbours draw and
17
- * split the pixels with a dither, so nothing pops; elsewhere exactly one level is visible
18
- * and the others are hidden. Shadows follow the camera's choice and fade with it; nothing
19
- * of the object is drawn into a directional light's shadow map whose texels are wider
20
- * than the whole object: it could cover a texel only by chance.
17
+ * One object's levels, switched by on-screen height with dithered fades. three's renderer calls `update` with each
18
+ * camera before it draws, shadow maps' included; each camera measures at the height it draws at, measured in each
19
+ * render (outside one, the canvas's). Orthographic cameras switch without fading. Shadows follow what the camera draws
20
+ * and omit casters smaller than a shadow texel; levels cast into three's shadow maps, not into a light whose shadow
21
+ * map a custom shadow node replaces. Nothing draws until the coarsest level that draws something has loaded, which
22
+ * loads first; a deferred level loads when a camera first needs it, once that one has loaded, and meanwhile the
23
+ * nearest loaded coarser level draws in its place.
21
24
  *
22
- * three's renderer calls `update(camera)` while it lists the scene (as for its own LOD),
23
- * before shadow maps render; the calls its shadow passes make are ignored. The height
24
- * uses the viewport the camera last drew one of the levels' meshes in, in CSS pixels
25
- * (1080 before that), so several views each get their own. An orthographic camera has
26
- * no distance to dither by: levels switch by on-screen size there too, but at once.
25
+ * Arriving levels' texture uploads are paced to about one uncompressed 2048² RGBA texture's bytes per frame. Levels
26
+ * are cloned into the Lod. A nested Lod switches and fades its own levels. Lines, points and sprites draw without
27
+ * fading. Raycasts hit the source only. A Lod draws with its LodGpu's renderer only.
27
28
  *
28
- * Levels are children of the Lod in its space, any Object3D: meshes, an ImpostorMesh, a
29
- * group, another Lod. Each mesh draws with a faded copy of its material, which every Lod
30
- * drawing that material shares. Lines, points and sprites are drawn but neither fade nor
31
- * tell the Lod the viewport height. A nested Lod hands over to its neighbours at once.
32
- * Raycasts hit the source only.
33
- *
34
- * Levels are read when the Lod is built: meshes added to a level later, or moved within
35
- * it, are neither faded nor measured right. Build a new Lod instead.
29
+ * Build a new Lod after adding or moving meshes within a level: geometry is measured and hooked at construction or
30
+ * arrival. Skinned meshes and ShaderMaterials are refused; use static meshes with node materials or supported built-in
31
+ * materials.
36
32
  */
37
33
  export class Lod extends Object3D {
34
+ gpu;
38
35
  /** Multiplies every measured height: below 1, cheaper levels take over sooner. */
39
36
  static quality = 1;
40
37
  /** Tint every level by its index, to see which level draws where. */
41
38
  static debug = false;
42
- /**
43
- * Share of a level's range its fade spans: from `maxPixels × (1 - fade)` up to its
44
- * `maxPixels`, the finer level draws too.
45
- */
39
+ /** Share of a level's range its fade spans: from `maxPixels × (1 - fade)` up to its `maxPixels`, the finer level draws too. */
46
40
  static fade = FADE;
47
41
  isLOD = true;
48
42
  /** Let the renderer call `update` with its camera every frame. */
49
43
  autoUpdate = true;
50
- /** Draw only this level, without fades. */
44
+ /** Draw only this level, without fades, once the coarsest level that draws something has loaded. */
51
45
  forceLevel = null;
52
- levels;
53
- entries = [];
54
- /** Per level, how its meshes draw. */
55
- draws = [];
56
- /** Bounding sphere of the source (see the constructor) in the Lod's own space. */
46
+ /** The levels, each `object` this Lod's own copy once there is one. Set `maxPixels` to move a switch. */
47
+ levels = [];
48
+ /** The levels as they were given, which a copy is made from. */
49
+ inputs = [];
50
+ /** Per level, where its meshes' fade comes from. */
51
+ fades = [];
52
+ /** Per level, whether its object is a Lod, which fades its own levels. */
53
+ nested = [];
54
+ /**
55
+ * Per loaded level, what in it may cast (see `shadowCasters`): found when it is built or joins, read every shadow
56
+ * map.
57
+ */
58
+ casters = [];
59
+ /** The levels as levelsToDraw reads them. */
60
+ encoded;
61
+ /** Bounding sphere of the source (see `measureLevels`) in the Lod's own space. */
57
62
  sphere = new Sphere();
58
63
  casterRadius = 0;
64
+ loads;
59
65
  disposed = false;
60
- installed = new Set();
61
- fallback = [];
62
66
  /**
63
- * `levels[0]` is the source. Empty only as the target of `copy`. A source that draws
64
- * nothing (an empty Object3D, for detail another system draws) is measured by the
65
- * first level that draws something.
67
+ * `levels[0]` is the source. Empty only as the target of `copy`. A source that draws nothing (an empty Object3D, for
68
+ * detail another system draws) is measured by the first level that draws something. `gpu` is what it shares with
69
+ * every Lod drawing with its renderer.
66
70
  */
67
- constructor(levels = []) {
71
+ constructor(levels, gpu, options = {}) {
68
72
  super();
69
- this.levels = this.entries;
70
- if (levels.length > 0)
71
- this.build(levels);
72
- }
73
- build(objects) {
74
- const [source] = objects;
75
- if (!source)
76
- throw new Error("Lod: needs at least the source level");
77
- if (isLazyImpostor(source))
78
- throw new Error("Lod: the source level must be eager");
79
- for (const object of objects)
80
- if (isLazyImpostor(object)) {
81
- object.materialize();
82
- }
83
- for (const object of objects)
73
+ this.gpu = gpu;
74
+ const { loads, encoded } = this.build(levels);
75
+ this.loads = loads;
76
+ this.encoded = encoded;
77
+ this.loads.item.given = options.manager;
78
+ }
79
+ build(inputs) {
80
+ this.inputs = inputs;
81
+ if (inputs.length > 0) {
82
+ const { own, placed } = measureLevels(inputs, "Lod");
83
+ this.sphere = placed;
84
+ this.casterRadius = placed.radius;
85
+ this.levels.push(...levelsFrom(inputs, 2 * own.radius, "Lod"));
86
+ }
87
+ const encoded = new EncodedLevels(this.levels, emptyLevels(inputs), "Lod");
88
+ this.levels.forEach(({ object }, i) => {
89
+ const fade = { kind: "object", fade: 0, diameter: 0, tint: tintOf(i, false) };
90
+ this.fades.push(fade);
91
+ this.nested.push(object ? isLOD(object) : false);
92
+ this.casters.push(object ? shadowCasters(object) : null);
93
+ if (!object)
94
+ return;
84
95
  rejectSkinned(object, "Lod");
85
- const { own, placed } = measureLevels(objects, "Lod");
86
- this.sphere = placed;
87
- this.casterRadius = placed.radius;
88
- this.add(...objects);
89
- objects.forEach((object, i) => {
90
- const level = new Level(object, i, isLOD(object), this.entries);
91
- const draw = { kind: "object", fade: 0, diameter: 0, tint: level.tint };
92
- this.entries.push(level);
93
- this.draws.push(draw);
94
- this.hook(object, draw, level.nested, object);
95
- if (available(object))
96
- this.installed.add(object);
96
+ this.add(object);
97
+ this.hook(object, fade, isLOD(object), object);
97
98
  });
98
- estimate(this.entries, 2 * own.radius);
99
- this.fallback = fallbacks(objects);
100
- validate(this.entries);
101
- for (const object of objects)
102
- if (isLazyImpostor(object))
103
- object.retain();
104
- }
105
- /** Fade the meshes under `node` by `draw` and learn the viewport height from them; an inner Lod fades its own. */
106
- hook(node, draw, nested, level) {
99
+ const loads = new LodLevelLoadManager(this, this.gpu, `Lod ${this.uuid}`, inputs, encoded.get(null, true), (level, loaded) => this.prepare(level, loaded), (level) => {
100
+ const object = this.levels[level]?.object;
101
+ return object ? [object] : [];
102
+ }, null);
103
+ return { loads, encoded };
104
+ }
105
+ /** Fade the meshes under `node` by `fade`; an inner Lod fades its own. */
106
+ hook(node, fade, nested, level) {
107
107
  const inner = nested || (node !== level && isLOD(node));
108
- if (isMesh(node)) {
109
- if (!inner) {
110
- setDraw(node, draw);
111
- // An ImpostorMesh reads its draw itself.
112
- if (!isImpostorMesh(node))
113
- node.material = Array.isArray(node.material) ? node.material.map((m) => levelMaterial(m)) : levelMaterial(node.material);
114
- }
115
- watchViewport(node);
108
+ if (isMesh(node) && !inner) {
109
+ setFadeSource(node, fade);
110
+ // An ImpostorMesh reads its draw itself.
111
+ if (!isImpostorMesh(node))
112
+ node.material = Array.isArray(node.material) ? node.material.map((m) => levelMaterial(m)) : levelMaterial(node.material);
116
113
  }
117
114
  for (const child of node.children)
118
- this.hook(child, draw, inner, level);
115
+ this.hook(child, fade, inner, level);
119
116
  }
120
- [WIND_BOUNDS](padding) {
121
- this.casterRadius += padding;
117
+ /** A copy of `loaded`, level `index`'s object, parented hidden for world matrices and wind until it joins. */
118
+ prepare(index, loaded) {
119
+ const object = loaded.clone();
120
+ const nested = isLOD(object);
121
+ const level = at(this.levels, index);
122
+ object.visible = false;
123
+ rejectSkinned(object, "Lod");
124
+ if (level.box)
125
+ prepareBounds(object, level.box);
126
+ this.hook(object, at(this.fades, index), nested, object);
127
+ this.add(object);
128
+ object.updateWorldMatrix(true, true);
129
+ refreshWind(this, object);
130
+ return {
131
+ object,
132
+ join: () => {
133
+ level.object = object;
134
+ this.nested[index] = nested;
135
+ this.casters[index] = shadowCasters(object);
136
+ },
137
+ discard: () => {
138
+ this.remove(object);
139
+ disposeCopies(object);
140
+ },
141
+ };
142
+ }
143
+ get pending() {
144
+ return this.loads.pending;
145
+ }
146
+ get error() {
147
+ return this.loads.error;
122
148
  }
123
- /** Pick and fade levels for `camera`; three's renderer calls this itself while `autoUpdate`. */
149
+ /** Where the item of levels a camera misses goes (see `LodOptions.manager`). */
150
+ get manager() {
151
+ return this.loads.item.manager;
152
+ }
153
+ set manager(manager) {
154
+ this.loads.item.given = manager;
155
+ }
156
+ /** Switch and fade the levels for `camera`, and load those it needs. What fails is reported (see `error`): three is rendering. */
124
157
  update(camera) {
125
- const { entries, draws } = this;
126
- if (this.disposed || entries.length === 0 || inShadowPass(this))
158
+ // A shadow map draws nothing of a Lod whose levels cast nothing; one not loaded yet may.
159
+ const shadow = inShadowMap(this);
160
+ if (shadow && !this.casters.some((casters) => !casters || casters.some((node) => node.castShadow)))
127
161
  return;
128
- let changed = false;
129
- if (this.installed.size < entries.length)
130
- entries.forEach((entry, i) => {
131
- if (!isLazyImpostor(entry.object) || this.installed.has(entry.object))
132
- return;
133
- entry.object.materialize();
134
- if (!available(entry.object))
135
- return;
136
- const draw = draws[i];
137
- if (!draw)
138
- throw new Error("Lod: missing lazy draw");
139
- this.hook(entry.object, draw, false, entry.object);
140
- this.installed.add(entry.object);
141
- changed = true;
142
- });
143
- if (changed) {
144
- this.fallback = fallbacks(entries.map((entry) => entry.object));
145
- refreshWind(this);
146
- this.updateWorldMatrix(true, true);
147
- this.dispatchEvent({ type: "levelschange" });
148
- }
149
- validate(entries);
150
- view.begin(camera, viewportHeight(camera) ?? TYPICAL_HEIGHT, this.forceLevel);
151
- tintLevels(entries, Lod.debug);
152
- const height = view.pixels(this.matrixWorld, this.sphere) * Lod.quality;
153
- const desired = levelAt(entries, height, this.forceLevel);
154
- if (isLazyImpostor(desired.object) && desired.object.status === "idle" && inView(camera, this.matrixWorld, this.sphere))
155
- desired.object.request();
156
- const fallback = this.fallback;
157
- const level = entries[fallback[desired.index] ?? 0];
158
- let t = view.fades ? fadeProgress(entries, desired, height) : 0;
159
- const neighbour = t > 0 ? entries[desired.index - 1]?.object : undefined;
160
- if (neighbour && isLazyImpostor(neighbour) && neighbour.status === "idle" && inView(camera, this.matrixWorld, this.sphere))
161
- neighbour.request();
162
- const finer = t > 0 ? entries[fallback[desired.index - 1] ?? 0] : undefined;
163
- if (level === finer)
164
- t = 0;
162
+ this.loads.guard(() => this.show(camera, shadow));
163
+ }
164
+ /** Show the levels for `camera`, a shadow map's when `shadow`. */
165
+ show(camera, shadow) {
166
+ if (this.disposed || this.levels.length === 0)
167
+ return;
168
+ // A shadow map draws the levels its scene's camera chose.
169
+ if (shadow)
170
+ return void this.loads.request(camera, 0, true);
171
+ const { height, levels } = this.measure(camera, false);
172
+ const loaded = this.loads.request(camera, levelsToLoad([[height, height]], this.encoded.heights(levels)), false);
173
+ let { level, finer, fade } = levelsToDraw(height, levels, loaded, this.loads.before, this.loads.progress);
174
+ // A nested Lod fades its own levels: the switch to or from one is immediate.
175
+ if (this.nested[level] || this.nested[finer])
176
+ fade = 0;
165
177
  const diameter = 2 * this.casterRadius * this.matrixWorld.getMaxScaleOnAxis();
166
- entries.forEach((each, i) => {
167
- const draw = draws[i];
168
- if (!draw)
169
- throw new Error("Lod: a level has no draw");
170
- draw.fade = each === level ? t : each === finer ? -t : 0;
171
- draw.diameter = diameter;
172
- each.object.visible = each === level || (t > 0 && each === finer);
178
+ this.levels.forEach(({ object }, i) => {
179
+ const source = at(this.fades, i);
180
+ source.fade = i === level ? fade : i === finer ? -fade : 0;
181
+ source.diameter = diameter;
182
+ source.tint = tintOf(i, Lod.debug);
183
+ if (object)
184
+ object.visible = i === level || (fade > 0 && i === finer);
173
185
  });
174
186
  }
187
+ /** The source's height on `camera`'s screen, and the levels as levelsToDraw reads them there. */
188
+ measure(camera, shadow) {
189
+ const screen = screenOf(camera, this.loads.heightOf(camera, shadow));
190
+ const height = screenHeight(this.sphere, this.matrixWorld, screen) * Lod.quality;
191
+ return { height, levels: this.encoded.get(this.forceLevel, !screen.ortho) };
192
+ }
193
+ /**
194
+ * The index of the level that draws most of the Lod's pixels for `camera` from where it is, with the levels loaded
195
+ * now and no arrival under way (see `drawnLevel`); null while no level it could draw is loaded.
196
+ */
197
+ getLevel(camera) {
198
+ if (this.levels.length === 0)
199
+ return null;
200
+ const { height, levels } = this.measure(camera, inShadowMap(this));
201
+ return drawnLevel(levelsToDraw(height, levels, this.loads.loaded, this.loads.loaded, 1));
202
+ }
203
+ [WIND](padding) {
204
+ if (this.loads.started)
205
+ throw new Error("Lod: apply wind before the first render");
206
+ this.casterRadius += padding;
207
+ }
175
208
  raycast(raycaster, intersects) {
176
- const source = this.entries[0];
209
+ const source = this.levels[0]?.object;
177
210
  if (source)
178
- raycaster.intersectObject(source.object, true, intersects);
211
+ raycaster.intersectObject(source, true, intersects);
179
212
  // Stop the raycaster from descending into the other levels.
180
213
  return false;
181
214
  }
182
215
  /**
183
- * Copies `source`'s levels into this empty Lod (it throws otherwise). The copies share
184
- * geometry, materials and textures with `source`, as three's clone does; the Lod
185
- * settings and each level's `maxPixels` come along.
216
+ * Copies `source`'s levels into this empty Lod (it throws otherwise). The copies share geometry, materials and
217
+ * textures with `source`, as three's clone does; the settings, LoadingManager, wind and each level's `maxPixels`
218
+ * come along.
186
219
  */
187
220
  copy(source) {
188
- if (this.entries.length > 0)
221
+ if (this.levels.length > 0)
189
222
  throw new Error("Lod.copy: copy into an empty Lod");
190
223
  super.copy(source, false);
191
- if (source.entries.length > 0)
192
- this.build(cloneLevels(source.entries));
193
- copyThresholds(source.entries, this.entries);
224
+ const { loads, encoded } = this.build(source.inputs.map((input, i) => ({ ...input, maxPixels: at(source.levels, i).maxPixels })));
225
+ this.loads = loads;
226
+ this.encoded = encoded;
227
+ this.loads.item.given = source.loads.item.given;
194
228
  this.forceLevel = source.forceLevel;
195
229
  this.autoUpdate = source.autoUpdate;
196
230
  copyWind(source, this);
197
231
  return this;
198
232
  }
233
+ clone() {
234
+ const clone = new Lod([], this.gpu).copy(this);
235
+ if (!sameClass(this, clone))
236
+ throw new Error("Lod.clone: a subclass must override clone");
237
+ return clone;
238
+ }
199
239
  /**
200
- * Frees every level, the source included: geometries, materials and their textures.
201
- * Clones share them, so dispose a Lod only once no clone draws any more.
240
+ * Release what the Lod made of its levels, once nothing it prepares or compiles still uses them. Objects you give or
241
+ * load are yours to dispose; LodLoader's are freed when the last Lod holding them is disposed (see `LodLevel.hold`).
202
242
  */
203
243
  dispose() {
204
244
  if (this.disposed)
205
245
  return;
206
246
  this.disposed = true;
207
- for (const { object } of this.entries)
208
- isLazyImpostor(object) ? object.release() : disposeTree(object);
247
+ super.dispose();
248
+ this.loads.dispose(() => {
249
+ for (const { object } of this.levels)
250
+ if (object)
251
+ disposeCopies(object);
252
+ });
209
253
  }
210
254
  }
255
+ /**
256
+ * What three's shadow pass may draw under `root`, itself included: its meshes, lines and points, cast if `castShadow`
257
+ * is set.
258
+ */
259
+ function shadowCasters(root) {
260
+ const found = [];
261
+ root.traverse((node) => {
262
+ if (isMesh(node) || isLine(node) || isPoints(node))
263
+ found.push(node);
264
+ });
265
+ return found;
266
+ }
211
267
  //# sourceMappingURL=lod.js.map
package/dist/lod.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lod.js","sourceRoot":"","sources":["../src/lod.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lod.js","sourceRoot":"","sources":["../src/lod.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { MeshoptDecoder } from "three/addons/libs/meshopt_decoder.module.js";
2
+ /**
3
+ * three's meshopt decoder, which decodes in two workers from the first use on: sources' glTF buffers and mesh caches.
4
+ * Where there are no workers, as in Node, it decodes on the calling thread. Process-wide, as three's own decoder is.
5
+ */
6
+ export declare function meshoptDecoder(): typeof MeshoptDecoder;
@@ -0,0 +1,19 @@
1
+ import { MeshoptDecoder } from "three/addons/libs/meshopt_decoder.module.js";
2
+ /**
3
+ * Whether the decoder's workers were started. useWorkers starts no second set, but each call rebuilds the workers'
4
+ * source (the whole decoder WASM as text) into a new Blob; decodes ask for the decoder often (codec/mesh.ts), so it
5
+ * is started once.
6
+ */
7
+ let workers = false;
8
+ /**
9
+ * three's meshopt decoder, which decodes in two workers from the first use on: sources' glTF buffers and mesh caches.
10
+ * Where there are no workers, as in Node, it decodes on the calling thread. Process-wide, as three's own decoder is.
11
+ */
12
+ export function meshoptDecoder() {
13
+ if (!workers && MeshoptDecoder.supported && typeof Worker !== "undefined") {
14
+ MeshoptDecoder.useWorkers(2);
15
+ workers = true;
16
+ }
17
+ return MeshoptDecoder;
18
+ }
19
+ //# sourceMappingURL=meshopt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meshopt.js","sourceRoot":"","sources":["../src/meshopt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAE7E;;;;GAIG;AACH,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,OAAO,IAAI,cAAc,CAAC,SAAS,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAC1E,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type Mesh } from "three/webgpu";
2
+ /** Per material of `mesh`, whether it alpha-tests a texture, so draws cards. */
3
+ export declare function cardMaterials(mesh: Mesh): boolean[];
4
+ /**
5
+ * About `ratio` of the cards (connected parts, touching where vertices share a position)
6
+ * of the triangles `indices`, spread evenly over them by meshopt's point simplifier on the
7
+ * cards' centres. Each picked card is enlarged about its centre, in `positions`, so the picked
8
+ * cards cover as much area as all did; a card larger than most grows only as far as a
9
+ * card of the median size does, or a long spray would reach far out of the crown, and no
10
+ * card grows past the bounds of all, which a level must stay inside.
11
+ * Edge collapse would instead shrink and warp each card, and so cut most of an
12
+ * alpha-tested texture (needles, leaves) away.
13
+ */
14
+ export declare function decimateCards(indices: Uint32Array, positions: Float32Array, ratio: number): Uint32Array;