@ifc-lite/renderer 3.2.0 → 5.0.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 (399) hide show
  1. package/dist/aabb-edges.d.ts +10 -0
  2. package/dist/aabb-edges.d.ts.map +1 -1
  3. package/dist/aabb-edges.js +13 -0
  4. package/dist/aabb-edges.js.map +1 -1
  5. package/dist/ao-params.d.ts +85 -0
  6. package/dist/ao-params.d.ts.map +1 -0
  7. package/dist/ao-params.js +109 -0
  8. package/dist/ao-params.js.map +1 -0
  9. package/dist/ao-pass.d.ts +47 -0
  10. package/dist/ao-pass.d.ts.map +1 -0
  11. package/dist/ao-pass.js +157 -0
  12. package/dist/ao-pass.js.map +1 -0
  13. package/dist/camera-matrices.d.ts +3 -0
  14. package/dist/camera-matrices.d.ts.map +1 -1
  15. package/dist/camera-matrices.js +12 -1
  16. package/dist/camera-matrices.js.map +1 -1
  17. package/dist/camera-orientation.d.ts +62 -0
  18. package/dist/camera-orientation.d.ts.map +1 -0
  19. package/dist/camera-orientation.js +155 -0
  20. package/dist/camera-orientation.js.map +1 -0
  21. package/dist/camera-projection.d.ts +3 -1
  22. package/dist/camera-projection.d.ts.map +1 -1
  23. package/dist/camera-projection.js +26 -20
  24. package/dist/camera-projection.js.map +1 -1
  25. package/dist/camera-surface-zoom.d.ts +32 -0
  26. package/dist/camera-surface-zoom.d.ts.map +1 -0
  27. package/dist/camera-surface-zoom.js +37 -0
  28. package/dist/camera-surface-zoom.js.map +1 -0
  29. package/dist/camera.d.ts +32 -61
  30. package/dist/camera.d.ts.map +1 -1
  31. package/dist/camera.js +71 -167
  32. package/dist/camera.js.map +1 -1
  33. package/dist/clash-solid-pipeline.d.ts +9 -3
  34. package/dist/clash-solid-pipeline.d.ts.map +1 -1
  35. package/dist/clash-solid-pipeline.js +31 -8
  36. package/dist/clash-solid-pipeline.js.map +1 -1
  37. package/dist/constants.d.ts +1 -1
  38. package/dist/constants.d.ts.map +1 -1
  39. package/dist/constants.js +4 -3
  40. package/dist/constants.js.map +1 -1
  41. package/dist/depth-reconstruct.d.ts +43 -0
  42. package/dist/depth-reconstruct.d.ts.map +1 -0
  43. package/dist/depth-reconstruct.js +35 -0
  44. package/dist/depth-reconstruct.js.map +1 -0
  45. package/dist/device.js +1 -1
  46. package/dist/device.js.map +1 -1
  47. package/dist/edge-params.d.ts +43 -0
  48. package/dist/edge-params.d.ts.map +1 -0
  49. package/dist/edge-params.js +63 -0
  50. package/dist/edge-params.js.map +1 -0
  51. package/dist/edge-pass.d.ts +38 -0
  52. package/dist/edge-pass.d.ts.map +1 -0
  53. package/dist/edge-pass.js +111 -0
  54. package/dist/edge-pass.js.map +1 -0
  55. package/dist/environment.d.ts +26 -15
  56. package/dist/environment.d.ts.map +1 -1
  57. package/dist/environment.js +24 -13
  58. package/dist/environment.js.map +1 -1
  59. package/dist/federation-registry.d.ts +16 -0
  60. package/dist/federation-registry.d.ts.map +1 -1
  61. package/dist/federation-registry.js +80 -9
  62. package/dist/federation-registry.js.map +1 -1
  63. package/dist/gpu-static-upload.d.ts +39 -0
  64. package/dist/gpu-static-upload.d.ts.map +1 -0
  65. package/dist/gpu-static-upload.js +70 -0
  66. package/dist/gpu-static-upload.js.map +1 -0
  67. package/dist/gpu-upload-guard.d.ts +12 -23
  68. package/dist/gpu-upload-guard.d.ts.map +1 -1
  69. package/dist/gpu-upload-guard.js +12 -26
  70. package/dist/gpu-upload-guard.js.map +1 -1
  71. package/dist/index.d.ts +58 -35
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +255 -284
  74. package/dist/index.js.map +1 -1
  75. package/dist/instanced-render.d.ts +25 -5
  76. package/dist/instanced-render.d.ts.map +1 -1
  77. package/dist/instanced-render.js +50 -13
  78. package/dist/instanced-render.js.map +1 -1
  79. package/dist/instanced-rte.d.ts +17 -0
  80. package/dist/instanced-rte.d.ts.map +1 -0
  81. package/dist/instanced-rte.js +32 -0
  82. package/dist/instanced-rte.js.map +1 -0
  83. package/dist/mesh-material.d.ts +26 -0
  84. package/dist/mesh-material.d.ts.map +1 -0
  85. package/dist/mesh-material.js +52 -0
  86. package/dist/mesh-material.js.map +1 -0
  87. package/dist/mesh-rte-uniforms.d.ts +47 -0
  88. package/dist/mesh-rte-uniforms.d.ts.map +1 -0
  89. package/dist/mesh-rte-uniforms.js +60 -0
  90. package/dist/mesh-rte-uniforms.js.map +1 -0
  91. package/dist/model-bounds-tracker.d.ts +7 -0
  92. package/dist/model-bounds-tracker.d.ts.map +1 -1
  93. package/dist/model-bounds-tracker.js +16 -5
  94. package/dist/model-bounds-tracker.js.map +1 -1
  95. package/dist/model-translation.d.ts +1 -1
  96. package/dist/model-translation.d.ts.map +1 -1
  97. package/dist/model-translation.js +50 -2
  98. package/dist/model-translation.js.map +1 -1
  99. package/dist/overlay-theme-uniforms.d.ts +54 -0
  100. package/dist/overlay-theme-uniforms.d.ts.map +1 -0
  101. package/dist/overlay-theme-uniforms.js +89 -0
  102. package/dist/overlay-theme-uniforms.js.map +1 -0
  103. package/dist/overlay-theme.d.ts +73 -0
  104. package/dist/overlay-theme.d.ts.map +1 -0
  105. package/dist/overlay-theme.js +24 -0
  106. package/dist/overlay-theme.js.map +1 -0
  107. package/dist/pick-rte-snapshot.d.ts +7 -0
  108. package/dist/pick-rte-snapshot.d.ts.map +1 -0
  109. package/dist/pick-rte-snapshot.js +15 -0
  110. package/dist/pick-rte-snapshot.js.map +1 -0
  111. package/dist/pick-types.d.ts +17 -0
  112. package/dist/pick-types.d.ts.map +1 -0
  113. package/dist/pick-types.js +5 -0
  114. package/dist/pick-types.js.map +1 -0
  115. package/dist/pick-uniforms.d.ts +6 -0
  116. package/dist/pick-uniforms.d.ts.map +1 -1
  117. package/dist/pick-uniforms.js +22 -18
  118. package/dist/pick-uniforms.js.map +1 -1
  119. package/dist/pick-world-position.d.ts +18 -0
  120. package/dist/pick-world-position.d.ts.map +1 -0
  121. package/dist/pick-world-position.js +21 -0
  122. package/dist/pick-world-position.js.map +1 -0
  123. package/dist/picker-readbacks.d.ts +6 -0
  124. package/dist/picker-readbacks.d.ts.map +1 -0
  125. package/dist/picker-readbacks.js +20 -0
  126. package/dist/picker-readbacks.js.map +1 -0
  127. package/dist/picker-rte-uniforms.d.ts +6 -0
  128. package/dist/picker-rte-uniforms.d.ts.map +1 -0
  129. package/dist/picker-rte-uniforms.js +41 -0
  130. package/dist/picker-rte-uniforms.js.map +1 -0
  131. package/dist/picker.d.ts +6 -7
  132. package/dist/picker.d.ts.map +1 -1
  133. package/dist/picker.js +88 -115
  134. package/dist/picker.js.map +1 -1
  135. package/dist/picking-manager.d.ts +8 -0
  136. package/dist/picking-manager.d.ts.map +1 -1
  137. package/dist/picking-manager.js +46 -19
  138. package/dist/picking-manager.js.map +1 -1
  139. package/dist/pipeline.d.ts +3 -7
  140. package/dist/pipeline.d.ts.map +1 -1
  141. package/dist/pipeline.js +27 -31
  142. package/dist/pipeline.js.map +1 -1
  143. package/dist/point-picker.d.ts +5 -1
  144. package/dist/point-picker.d.ts.map +1 -1
  145. package/dist/point-picker.js +49 -9
  146. package/dist/point-picker.js.map +1 -1
  147. package/dist/pointcloud/point-cloud-handle-ids.d.ts +22 -0
  148. package/dist/pointcloud/point-cloud-handle-ids.d.ts.map +1 -0
  149. package/dist/pointcloud/point-cloud-handle-ids.js +31 -0
  150. package/dist/pointcloud/point-cloud-handle-ids.js.map +1 -0
  151. package/dist/pointcloud/point-cloud-node.d.ts +14 -6
  152. package/dist/pointcloud/point-cloud-node.d.ts.map +1 -1
  153. package/dist/pointcloud/point-cloud-node.js.map +1 -1
  154. package/dist/pointcloud/point-cloud-pick-sources.d.ts +47 -0
  155. package/dist/pointcloud/point-cloud-pick-sources.d.ts.map +1 -0
  156. package/dist/pointcloud/point-cloud-pick-sources.js +32 -0
  157. package/dist/pointcloud/point-cloud-pick-sources.js.map +1 -0
  158. package/dist/pointcloud/point-cloud-placement.d.ts.map +1 -1
  159. package/dist/pointcloud/point-cloud-placement.js +20 -5
  160. package/dist/pointcloud/point-cloud-placement.js.map +1 -1
  161. package/dist/pointcloud/point-cloud-ray-transform.d.ts +78 -4
  162. package/dist/pointcloud/point-cloud-ray-transform.d.ts.map +1 -1
  163. package/dist/pointcloud/point-cloud-ray-transform.js +31 -84
  164. package/dist/pointcloud/point-cloud-ray-transform.js.map +1 -1
  165. package/dist/pointcloud/point-cloud-renderer.d.ts +21 -19
  166. package/dist/pointcloud/point-cloud-renderer.d.ts.map +1 -1
  167. package/dist/pointcloud/point-cloud-renderer.js +46 -52
  168. package/dist/pointcloud/point-cloud-renderer.js.map +1 -1
  169. package/dist/pointcloud/point-cloud-stream-lifecycle.d.ts +44 -0
  170. package/dist/pointcloud/point-cloud-stream-lifecycle.d.ts.map +1 -0
  171. package/dist/pointcloud/point-cloud-stream-lifecycle.js +44 -0
  172. package/dist/pointcloud/point-cloud-stream-lifecycle.js.map +1 -0
  173. package/dist/pointcloud/point-cloud-uniforms.d.ts +5 -0
  174. package/dist/pointcloud/point-cloud-uniforms.d.ts.map +1 -1
  175. package/dist/pointcloud/point-cloud-uniforms.js +55 -44
  176. package/dist/pointcloud/point-cloud-uniforms.js.map +1 -1
  177. package/dist/pointcloud/point-cloud-visibility.d.ts +10 -0
  178. package/dist/pointcloud/point-cloud-visibility.d.ts.map +1 -0
  179. package/dist/pointcloud/point-cloud-visibility.js +18 -0
  180. package/dist/pointcloud/point-cloud-visibility.js.map +1 -0
  181. package/dist/pointcloud/point-pipeline.d.ts +4 -9
  182. package/dist/pointcloud/point-pipeline.d.ts.map +1 -1
  183. package/dist/pointcloud/point-pipeline.js +4 -9
  184. package/dist/pointcloud/point-pipeline.js.map +1 -1
  185. package/dist/pointcloud/point-shader.wgsl.d.ts +1 -21
  186. package/dist/pointcloud/point-shader.wgsl.d.ts.map +1 -1
  187. package/dist/pointcloud/point-shader.wgsl.js +25 -5
  188. package/dist/pointcloud/point-shader.wgsl.js.map +1 -1
  189. package/dist/post-pass-chain.d.ts +38 -0
  190. package/dist/post-pass-chain.d.ts.map +1 -0
  191. package/dist/post-pass-chain.js +105 -0
  192. package/dist/post-pass-chain.js.map +1 -0
  193. package/dist/raycast-engine.d.ts +7 -5
  194. package/dist/raycast-engine.d.ts.map +1 -1
  195. package/dist/raycast-engine.js +17 -20
  196. package/dist/raycast-engine.js.map +1 -1
  197. package/dist/raycast-point-cloud-query.d.ts +1 -1
  198. package/dist/raycast-point-cloud-query.d.ts.map +1 -1
  199. package/dist/reference-image-pipeline.d.ts +1 -1
  200. package/dist/reference-image-pipeline.d.ts.map +1 -1
  201. package/dist/reference-image-pipeline.js +25 -7
  202. package/dist/reference-image-pipeline.js.map +1 -1
  203. package/dist/reference-images.d.ts +1 -1
  204. package/dist/reference-images.d.ts.map +1 -1
  205. package/dist/reference-images.js +13 -5
  206. package/dist/reference-images.js.map +1 -1
  207. package/dist/relative-to-eye.d.ts +146 -0
  208. package/dist/relative-to-eye.d.ts.map +1 -0
  209. package/dist/relative-to-eye.js +326 -0
  210. package/dist/relative-to-eye.js.map +1 -0
  211. package/dist/render-section-draw.d.ts +11 -0
  212. package/dist/render-section-draw.d.ts.map +1 -1
  213. package/dist/render-section-draw.js +6 -3
  214. package/dist/render-section-draw.js.map +1 -1
  215. package/dist/renderer-color-readback.d.ts +50 -0
  216. package/dist/renderer-color-readback.d.ts.map +1 -0
  217. package/dist/renderer-color-readback.js +145 -0
  218. package/dist/renderer-color-readback.js.map +1 -0
  219. package/dist/renderer-overlays.d.ts +20 -10
  220. package/dist/renderer-overlays.d.ts.map +1 -1
  221. package/dist/renderer-overlays.js +44 -34
  222. package/dist/renderer-overlays.js.map +1 -1
  223. package/dist/renderer-screenshot.d.ts +4 -0
  224. package/dist/renderer-screenshot.d.ts.map +1 -0
  225. package/dist/renderer-screenshot.js +17 -0
  226. package/dist/renderer-screenshot.js.map +1 -0
  227. package/dist/renderer-symbolic-overlays.d.ts +4 -2
  228. package/dist/renderer-symbolic-overlays.d.ts.map +1 -1
  229. package/dist/renderer-symbolic-overlays.js +33 -13
  230. package/dist/renderer-symbolic-overlays.js.map +1 -1
  231. package/dist/renderer-viewport.d.ts +45 -0
  232. package/dist/renderer-viewport.d.ts.map +1 -1
  233. package/dist/renderer-viewport.js +44 -0
  234. package/dist/renderer-viewport.js.map +1 -1
  235. package/dist/rte-clip-space.d.ts +12 -0
  236. package/dist/rte-clip-space.d.ts.map +1 -0
  237. package/dist/rte-clip-space.js +22 -0
  238. package/dist/rte-clip-space.js.map +1 -0
  239. package/dist/rte-frustum.d.ts +24 -0
  240. package/dist/rte-frustum.d.ts.map +1 -0
  241. package/dist/rte-frustum.js +45 -0
  242. package/dist/rte-frustum.js.map +1 -0
  243. package/dist/scene-batch-upload.d.ts.map +1 -1
  244. package/dist/scene-batch-upload.js +14 -38
  245. package/dist/scene-batch-upload.js.map +1 -1
  246. package/dist/scene-device-recovery.d.ts.map +1 -1
  247. package/dist/scene-device-recovery.js +5 -9
  248. package/dist/scene-device-recovery.js.map +1 -1
  249. package/dist/scene-finalize-regroup.d.ts +54 -0
  250. package/dist/scene-finalize-regroup.d.ts.map +1 -0
  251. package/dist/scene-finalize-regroup.js +136 -0
  252. package/dist/scene-finalize-regroup.js.map +1 -0
  253. package/dist/scene-instance-bounds.d.ts +12 -0
  254. package/dist/scene-instance-bounds.d.ts.map +1 -0
  255. package/dist/scene-instance-bounds.js +48 -0
  256. package/dist/scene-instance-bounds.js.map +1 -0
  257. package/dist/scene-instance-materialization.d.ts +4 -1
  258. package/dist/scene-instance-materialization.d.ts.map +1 -1
  259. package/dist/scene-instance-materialization.js +21 -6
  260. package/dist/scene-instance-materialization.js.map +1 -1
  261. package/dist/scene-instance-translation.d.ts +17 -0
  262. package/dist/scene-instance-translation.d.ts.map +1 -0
  263. package/dist/scene-instance-translation.js +50 -0
  264. package/dist/scene-instance-translation.js.map +1 -0
  265. package/dist/scene-instance-types.d.ts +6 -0
  266. package/dist/scene-instance-types.d.ts.map +1 -1
  267. package/dist/scene-model-translation.d.ts +2 -0
  268. package/dist/scene-model-translation.d.ts.map +1 -1
  269. package/dist/scene-model-translation.js +1 -1
  270. package/dist/scene-model-translation.js.map +1 -1
  271. package/dist/scene-rect-select.d.ts +11 -1
  272. package/dist/scene-rect-select.d.ts.map +1 -1
  273. package/dist/scene-rect-select.js +7 -4
  274. package/dist/scene-rect-select.js.map +1 -1
  275. package/dist/scene.d.ts +27 -20
  276. package/dist/scene.d.ts.map +1 -1
  277. package/dist/scene.js +109 -238
  278. package/dist/scene.js.map +1 -1
  279. package/dist/section-2d-lift.d.ts +10 -2
  280. package/dist/section-2d-lift.d.ts.map +1 -1
  281. package/dist/section-2d-lift.js +14 -6
  282. package/dist/section-2d-lift.js.map +1 -1
  283. package/dist/section-2d-line-buffer.d.ts +12 -4
  284. package/dist/section-2d-line-buffer.d.ts.map +1 -1
  285. package/dist/section-2d-line-buffer.js +59 -33
  286. package/dist/section-2d-line-buffer.js.map +1 -1
  287. package/dist/section-2d-overlay.d.ts +18 -72
  288. package/dist/section-2d-overlay.d.ts.map +1 -1
  289. package/dist/section-2d-overlay.js +72 -103
  290. package/dist/section-2d-overlay.js.map +1 -1
  291. package/dist/section-2d-types.d.ts +38 -0
  292. package/dist/section-2d-types.d.ts.map +1 -0
  293. package/dist/section-2d-types.js +6 -0
  294. package/dist/section-2d-types.js.map +1 -0
  295. package/dist/section-cap-pipelines.d.ts +6 -0
  296. package/dist/section-cap-pipelines.d.ts.map +1 -0
  297. package/dist/section-cap-pipelines.js +87 -0
  298. package/dist/section-cap-pipelines.js.map +1 -0
  299. package/dist/section-plane-geometry.d.ts +24 -0
  300. package/dist/section-plane-geometry.d.ts.map +1 -0
  301. package/dist/section-plane-geometry.js +93 -0
  302. package/dist/section-plane-geometry.js.map +1 -0
  303. package/dist/section-plane.d.ts +26 -24
  304. package/dist/section-plane.d.ts.map +1 -1
  305. package/dist/section-plane.js +57 -182
  306. package/dist/section-plane.js.map +1 -1
  307. package/dist/shaders/ao.wgsl.d.ts +2 -0
  308. package/dist/shaders/ao.wgsl.d.ts.map +1 -0
  309. package/dist/shaders/ao.wgsl.js +234 -0
  310. package/dist/shaders/ao.wgsl.js.map +1 -0
  311. package/dist/shaders/color-transfer.wgsl.d.ts +28 -0
  312. package/dist/shaders/color-transfer.wgsl.d.ts.map +1 -0
  313. package/dist/shaders/color-transfer.wgsl.js +55 -0
  314. package/dist/shaders/color-transfer.wgsl.js.map +1 -0
  315. package/dist/shaders/depth-reconstruct.wgsl.d.ts +16 -0
  316. package/dist/shaders/depth-reconstruct.wgsl.d.ts.map +1 -0
  317. package/dist/shaders/depth-reconstruct.wgsl.js +69 -0
  318. package/dist/shaders/depth-reconstruct.wgsl.js.map +1 -0
  319. package/dist/shaders/edges.wgsl.d.ts +2 -0
  320. package/dist/shaders/edges.wgsl.d.ts.map +1 -0
  321. package/dist/shaders/edges.wgsl.js +158 -0
  322. package/dist/shaders/edges.wgsl.js.map +1 -0
  323. package/dist/shaders/main-rte-shadow.wgsl.d.ts +4 -0
  324. package/dist/shaders/main-rte-shadow.wgsl.d.ts.map +1 -0
  325. package/dist/shaders/main-rte-shadow.wgsl.js +54 -0
  326. package/dist/shaders/main-rte-shadow.wgsl.js.map +1 -0
  327. package/dist/shaders/main.wgsl.d.ts +1 -6
  328. package/dist/shaders/main.wgsl.d.ts.map +1 -1
  329. package/dist/shaders/main.wgsl.js +183 -228
  330. package/dist/shaders/main.wgsl.js.map +1 -1
  331. package/dist/shaders/relative-to-eye.wgsl.d.ts +12 -0
  332. package/dist/shaders/relative-to-eye.wgsl.d.ts.map +1 -0
  333. package/dist/shaders/relative-to-eye.wgsl.js +40 -0
  334. package/dist/shaders/relative-to-eye.wgsl.js.map +1 -0
  335. package/dist/shaders/section-2d-overlay.wgsl.d.ts +28 -12
  336. package/dist/shaders/section-2d-overlay.wgsl.d.ts.map +1 -1
  337. package/dist/shaders/section-2d-overlay.wgsl.js +40 -13
  338. package/dist/shaders/section-2d-overlay.wgsl.js.map +1 -1
  339. package/dist/shaders/shadow.wgsl.d.ts +1 -1
  340. package/dist/shaders/shadow.wgsl.d.ts.map +1 -1
  341. package/dist/shaders/shadow.wgsl.js +25 -7
  342. package/dist/shaders/shadow.wgsl.js.map +1 -1
  343. package/dist/shaders/sky.wgsl.d.ts +1 -11
  344. package/dist/shaders/sky.wgsl.d.ts.map +1 -1
  345. package/dist/shaders/sky.wgsl.js +17 -19
  346. package/dist/shaders/sky.wgsl.js.map +1 -1
  347. package/dist/shaders/specular.wgsl.d.ts +34 -0
  348. package/dist/shaders/specular.wgsl.d.ts.map +1 -0
  349. package/dist/shaders/specular.wgsl.js +134 -0
  350. package/dist/shaders/specular.wgsl.js.map +1 -0
  351. package/dist/shaders/symbolic-overlay.wgsl.d.ts +2 -9
  352. package/dist/shaders/symbolic-overlay.wgsl.d.ts.map +1 -1
  353. package/dist/shaders/symbolic-overlay.wgsl.js +88 -17
  354. package/dist/shaders/symbolic-overlay.wgsl.js.map +1 -1
  355. package/dist/shaders/textured.wgsl.d.ts.map +1 -1
  356. package/dist/shaders/textured.wgsl.js +11 -9
  357. package/dist/shaders/textured.wgsl.js.map +1 -1
  358. package/dist/shadow-light-matrix.d.ts +7 -0
  359. package/dist/shadow-light-matrix.d.ts.map +1 -1
  360. package/dist/shadow-light-matrix.js +11 -0
  361. package/dist/shadow-light-matrix.js.map +1 -1
  362. package/dist/shadow-occluder-batches.d.ts +10 -0
  363. package/dist/shadow-occluder-batches.d.ts.map +1 -0
  364. package/dist/shadow-occluder-batches.js +39 -0
  365. package/dist/shadow-occluder-batches.js.map +1 -0
  366. package/dist/shadow-occluders.d.ts.map +1 -1
  367. package/dist/shadow-occluders.js +4 -0
  368. package/dist/shadow-occluders.js.map +1 -1
  369. package/dist/shadow-pass.d.ts +5 -51
  370. package/dist/shadow-pass.d.ts.map +1 -1
  371. package/dist/shadow-pass.js +49 -45
  372. package/dist/shadow-pass.js.map +1 -1
  373. package/dist/shadow-types.d.ts +39 -0
  374. package/dist/shadow-types.d.ts.map +1 -0
  375. package/dist/shadow-types.js +15 -0
  376. package/dist/shadow-types.js.map +1 -0
  377. package/dist/symbolic-overlay-geometry.d.ts +7 -0
  378. package/dist/symbolic-overlay-geometry.d.ts.map +1 -0
  379. package/dist/symbolic-overlay-geometry.js +43 -0
  380. package/dist/symbolic-overlay-geometry.js.map +1 -0
  381. package/dist/symbolic-overlay-pipelines.d.ts +24 -36
  382. package/dist/symbolic-overlay-pipelines.d.ts.map +1 -1
  383. package/dist/symbolic-overlay-pipelines.js +175 -182
  384. package/dist/symbolic-overlay-pipelines.js.map +1 -1
  385. package/dist/symbolic-text-atlas.d.ts +21 -0
  386. package/dist/symbolic-text-atlas.d.ts.map +1 -1
  387. package/dist/symbolic-text-atlas.js +29 -1
  388. package/dist/symbolic-text-atlas.js.map +1 -1
  389. package/dist/types.d.ts +20 -26
  390. package/dist/types.d.ts.map +1 -1
  391. package/dist/visual-enhancement.d.ts +30 -1
  392. package/dist/visual-enhancement.d.ts.map +1 -1
  393. package/dist/visual-enhancement.js +44 -12
  394. package/dist/visual-enhancement.js.map +1 -1
  395. package/package.json +3 -3
  396. package/dist/post-processor.d.ts +0 -60
  397. package/dist/post-processor.d.ts.map +0 -1
  398. package/dist/post-processor.js +0 -353
  399. package/dist/post-processor.js.map +0 -1
@@ -3,4 +3,14 @@
3
3
  * of a world-space AABB. Used to draw the clash-overlap wireframe box (#1277).
4
4
  */
5
5
  export declare function aabbEdgeLineList(min: readonly [number, number, number], max: readonly [number, number, number]): Float32Array;
6
+ /**
7
+ * The same twelve edges in a local f32 frame. Clash diagnostics receive
8
+ * world-f64 bounds, so materialising their corners as absolute f32 values at a
9
+ * national-grid coordinate would collapse a centimetre-wide interference box
10
+ * before the renderer can apply its RTE contract.
11
+ */
12
+ export declare function anchoredAabbEdgeLineList(min: readonly [number, number, number], max: readonly [number, number, number]): {
13
+ localVertices: Float32Array;
14
+ origin: [number, number, number];
15
+ };
6
16
  //# sourceMappingURL=aabb-edges.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"aabb-edges.d.ts","sourceRoot":"","sources":["../src/aabb-edges.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACtC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACrC,YAAY,CAqBd"}
1
+ {"version":3,"file":"aabb-edges.d.ts","sourceRoot":"","sources":["../src/aabb-edges.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACtC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACrC,YAAY,CAqBd;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACtC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACrC;IAAE,aAAa,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CASnE"}
@@ -31,4 +31,17 @@ export function aabbEdgeLineList(min, max) {
31
31
  }
32
32
  return out;
33
33
  }
34
+ /**
35
+ * The same twelve edges in a local f32 frame. Clash diagnostics receive
36
+ * world-f64 bounds, so materialising their corners as absolute f32 values at a
37
+ * national-grid coordinate would collapse a centimetre-wide interference box
38
+ * before the renderer can apply its RTE contract.
39
+ */
40
+ export function anchoredAabbEdgeLineList(min, max) {
41
+ const origin = [min[0], min[1], min[2]];
42
+ return {
43
+ localVertices: aabbEdgeLineList([0, 0, 0], [max[0] - origin[0], max[1] - origin[1], max[2] - origin[2]]),
44
+ origin,
45
+ };
46
+ }
34
47
  //# sourceMappingURL=aabb-edges.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"aabb-edges.js","sourceRoot":"","sources":["../src/aabb-edges.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAsC,EACtC,GAAsC;IAEtC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IACzB,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IACzB,YAAY;IACZ,MAAM,CAAC,GAAG;QACR,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU;QAClE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU;KACnE,CAAC;IACF,iCAAiC;IACjC,MAAM,KAAK,GAAG;QACZ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU;QAC1C,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU;QAC1C,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY;KAC7C,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;QAC3B,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"aabb-edges.js","sourceRoot":"","sources":["../src/aabb-edges.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ import type { ContactShadingQuality, Mat4 } from './types.js';
2
+ export type AoQuality = Exclude<ContactShadingQuality, 'off'>;
3
+ export interface AoQualityPreset {
4
+ /** AO target is the drawing buffer divided by this (2 = half resolution). */
5
+ resolutionDivisor: 1 | 2;
6
+ /** Depth taps per AO texel. */
7
+ samples: number;
8
+ /** Turns of the sampling spiral; coprime-ish with `samples` so taps do not line up. */
9
+ spiralTurns: number;
10
+ }
11
+ export declare const AO_QUALITY_PRESETS: Readonly<Record<AoQuality, AoQualityPreset>>;
12
+ /** Kernel slots in the uniform; every preset must fit. */
13
+ export declare const AO_MAX_SAMPLES = 16;
14
+ /**
15
+ * Accepted `contactShading.radius`, in world units (metres for IFC models,
16
+ * which the geometry pipeline normalises to metres).
17
+ */
18
+ export declare const AO_RADIUS_RANGE: {
19
+ readonly min: 0.05;
20
+ readonly max: 10;
21
+ };
22
+ /**
23
+ * Cap on the projected radius, as a fraction of the drawing-buffer height.
24
+ * Close to the camera a 1 m radius covers most of the screen; the cap keeps
25
+ * the taps local (and texture-cache friendly) at the cost of a smaller
26
+ * effective radius there.
27
+ */
28
+ export declare const AO_MAX_RADIUS_FRACTION = 0.15;
29
+ /**
30
+ * Cosine bias: a tap must rise at least this far above the tangent plane to
31
+ * occlude. Suppresses self-occlusion from depth quantisation on flat faces.
32
+ */
33
+ export declare const AO_COSINE_BIAS = 0.1;
34
+ /**
35
+ * Relative depth difference at which the bilateral blur and the upsample
36
+ * stop mixing two AO texels (a silhouette or a step, not the same surface).
37
+ */
38
+ export declare const AO_DEPTH_TOLERANCE = 0.04;
39
+ /**
40
+ * The composite darkens by `min(occlusion * AO_GAIN * intensity,
41
+ * AO_MAX_DARKEN)`. `occlusion` is the tap average in [0, 1]: 1 would need
42
+ * every tap straight above the tangent plane and at zero distance, so real
43
+ * corners read well below it and the gain lifts them into view.
44
+ */
45
+ export declare const AO_GAIN = 2;
46
+ /** Darkening never exceeds this, so a crevice keeps its colour. */
47
+ export declare const AO_MAX_DARKEN = 0.85;
48
+ /** Size of the AO target for a drawing buffer at `quality`. */
49
+ export declare function aoTargetSize(width: number, height: number, quality: AoQuality): {
50
+ width: number;
51
+ height: number;
52
+ };
53
+ /**
54
+ * Unit-disk sample offsets on a spiral (the SAO pattern): tap `i` sits at
55
+ * radius `(i + 0.5) / samples` and angle `radius * turns * 2pi`. Radii grow
56
+ * linearly, so taps crowd towards the centre where contact occlusion lives.
57
+ * Returns `AO_MAX_SAMPLES` (x, y) pairs; slots past `samples` are zero.
58
+ */
59
+ export declare function spiralKernel(samples: number, turns: number): Float32Array;
60
+ /** Float offsets of the `AoParams` struct fields in `shaders/ao.wgsl.ts`. */
61
+ export declare const AO_UNIFORM_LAYOUT: {
62
+ readonly depthParams: 0;
63
+ readonly xyParams: 4;
64
+ readonly viewport: 8;
65
+ readonly ao: 12;
66
+ readonly misc: 16;
67
+ readonly kernel: 20;
68
+ };
69
+ /** Byte size of `AoParams` (13 vec4s: five of parameters, eight of kernel). */
70
+ export declare const AO_UNIFORM_BYTES: number;
71
+ export interface AoFrameParams {
72
+ /** Camera projection the frame was drawn with (reverse-Z). */
73
+ projection: Mat4;
74
+ /** Drawing-buffer size in pixels. */
75
+ width: number;
76
+ height: number;
77
+ quality: AoQuality;
78
+ /** World-space radius, already clamped to `AO_RADIUS_RANGE`. */
79
+ radius: number;
80
+ /** Darkening strength, already clamped to [0, 1]. */
81
+ intensity: number;
82
+ }
83
+ /** Pack one frame's `AoParams` into `out` (`AO_UNIFORM_BYTES / 4` floats). */
84
+ export declare function packAoUniforms(out: Float32Array, frame: AoFrameParams): void;
85
+ //# sourceMappingURL=ao-params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ao-params.d.ts","sourceRoot":"","sources":["../src/ao-params.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC;IACzB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAG3E,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC;;;GAGG;AACH,eAAO,MAAM,eAAe;;;CAAkC,CAAC;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC;;;GAGG;AACH,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,OAAO,IAAM,CAAC;AAE3B,mEAAmE;AACnE,eAAO,MAAM,aAAa,OAAO,CAAC;AAElC,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAGjH;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAYzE;AAQD,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB;;;;;;;CAOpB,CAAC;AAEX,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,QAAsD,CAAC;AAEpF,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,UAAU,EAAE,IAAI,CAAC;IACjB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,SAAS,CAAC;IACnB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAmB5E"}
@@ -0,0 +1,109 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * CPU side of the screen-space ambient occlusion pass (#5384): quality
6
+ * presets, the sampling kernel and the uniform layout shared with
7
+ * `shaders/ao.wgsl.ts`. Pure functions, so the numbers the GPU sees are
8
+ * unit-tested.
9
+ */
10
+ import { depthReconstructParams, pixelsPerWorldUnit } from './depth-reconstruct.js';
11
+ export const AO_QUALITY_PRESETS = {
12
+ low: { resolutionDivisor: 2, samples: 12, spiralTurns: 5 },
13
+ high: { resolutionDivisor: 1, samples: 16, spiralTurns: 7 },
14
+ };
15
+ /** Kernel slots in the uniform; every preset must fit. */
16
+ export const AO_MAX_SAMPLES = 16;
17
+ /**
18
+ * Accepted `contactShading.radius`, in world units (metres for IFC models,
19
+ * which the geometry pipeline normalises to metres).
20
+ */
21
+ export const AO_RADIUS_RANGE = { min: 0.05, max: 10 };
22
+ /**
23
+ * Cap on the projected radius, as a fraction of the drawing-buffer height.
24
+ * Close to the camera a 1 m radius covers most of the screen; the cap keeps
25
+ * the taps local (and texture-cache friendly) at the cost of a smaller
26
+ * effective radius there.
27
+ */
28
+ export const AO_MAX_RADIUS_FRACTION = 0.15;
29
+ /**
30
+ * Cosine bias: a tap must rise at least this far above the tangent plane to
31
+ * occlude. Suppresses self-occlusion from depth quantisation on flat faces.
32
+ */
33
+ export const AO_COSINE_BIAS = 0.1;
34
+ /**
35
+ * Relative depth difference at which the bilateral blur and the upsample
36
+ * stop mixing two AO texels (a silhouette or a step, not the same surface).
37
+ */
38
+ export const AO_DEPTH_TOLERANCE = 0.04;
39
+ /**
40
+ * The composite darkens by `min(occlusion * AO_GAIN * intensity,
41
+ * AO_MAX_DARKEN)`. `occlusion` is the tap average in [0, 1]: 1 would need
42
+ * every tap straight above the tangent plane and at zero distance, so real
43
+ * corners read well below it and the gain lifts them into view.
44
+ */
45
+ export const AO_GAIN = 2.0;
46
+ /** Darkening never exceeds this, so a crevice keeps its colour. */
47
+ export const AO_MAX_DARKEN = 0.85;
48
+ /** Size of the AO target for a drawing buffer at `quality`. */
49
+ export function aoTargetSize(width, height, quality) {
50
+ const d = AO_QUALITY_PRESETS[quality].resolutionDivisor;
51
+ return { width: Math.max(1, Math.ceil(width / d)), height: Math.max(1, Math.ceil(height / d)) };
52
+ }
53
+ /**
54
+ * Unit-disk sample offsets on a spiral (the SAO pattern): tap `i` sits at
55
+ * radius `(i + 0.5) / samples` and angle `radius * turns * 2pi`. Radii grow
56
+ * linearly, so taps crowd towards the centre where contact occlusion lives.
57
+ * Returns `AO_MAX_SAMPLES` (x, y) pairs; slots past `samples` are zero.
58
+ */
59
+ export function spiralKernel(samples, turns) {
60
+ if (!Number.isInteger(samples) || samples < 1 || samples > AO_MAX_SAMPLES) {
61
+ throw new RangeError(`AO sample count must be an integer in [1, ${AO_MAX_SAMPLES}], got ${samples}`);
62
+ }
63
+ const out = new Float32Array(AO_MAX_SAMPLES * 2);
64
+ for (let i = 0; i < samples; i++) {
65
+ const r = (i + 0.5) / samples;
66
+ const a = r * turns * 2 * Math.PI;
67
+ out[i * 2] = r * Math.cos(a);
68
+ out[i * 2 + 1] = r * Math.sin(a);
69
+ }
70
+ return out;
71
+ }
72
+ /** Each preset's kernel, built once. */
73
+ const PRESET_KERNELS = {
74
+ low: spiralKernel(AO_QUALITY_PRESETS.low.samples, AO_QUALITY_PRESETS.low.spiralTurns),
75
+ high: spiralKernel(AO_QUALITY_PRESETS.high.samples, AO_QUALITY_PRESETS.high.spiralTurns),
76
+ };
77
+ /** Float offsets of the `AoParams` struct fields in `shaders/ao.wgsl.ts`. */
78
+ export const AO_UNIFORM_LAYOUT = {
79
+ depthParams: 0,
80
+ xyParams: 4,
81
+ viewport: 8,
82
+ ao: 12,
83
+ misc: 16,
84
+ kernel: 20,
85
+ };
86
+ /** Byte size of `AoParams` (13 vec4s: five of parameters, eight of kernel). */
87
+ export const AO_UNIFORM_BYTES = (AO_UNIFORM_LAYOUT.kernel + AO_MAX_SAMPLES * 2) * 4;
88
+ /** Pack one frame's `AoParams` into `out` (`AO_UNIFORM_BYTES / 4` floats). */
89
+ export function packAoUniforms(out, frame) {
90
+ const preset = AO_QUALITY_PRESETS[frame.quality];
91
+ const recon = depthReconstructParams(frame.projection);
92
+ const L = AO_UNIFORM_LAYOUT;
93
+ out.set(recon.depth, L.depthParams);
94
+ out.set(recon.xy, L.xyParams);
95
+ out[L.viewport] = frame.width;
96
+ out[L.viewport + 1] = frame.height;
97
+ out[L.viewport + 2] = 1 / frame.width;
98
+ out[L.viewport + 3] = 1 / frame.height;
99
+ out[L.ao] = frame.radius;
100
+ out[L.ao + 1] = pixelsPerWorldUnit(frame.projection, frame.height);
101
+ out[L.ao + 2] = AO_MAX_RADIUS_FRACTION * frame.height;
102
+ out[L.ao + 3] = frame.intensity;
103
+ out[L.misc] = preset.resolutionDivisor;
104
+ out[L.misc + 1] = preset.samples;
105
+ out[L.misc + 2] = AO_COSINE_BIAS;
106
+ out[L.misc + 3] = AO_DEPTH_TOLERANCE;
107
+ out.set(PRESET_KERNELS[frame.quality], L.kernel);
108
+ }
109
+ //# sourceMappingURL=ao-params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ao-params.js","sourceRoot":"","sources":["../src/ao-params.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Screen-space ambient occlusion pass (#5384): the GPU side of
3
+ * `shaders/ao.wgsl.ts`. It reads the scene depth attachment after the main
4
+ * pass and multiplies the resolved colour by the occlusion it finds.
5
+ *
6
+ * Passes per frame: AO (half resolution at `low`, full at `high`), a
7
+ * horizontal and a vertical bilateral blur at the same resolution, and a
8
+ * full-resolution composite onto the canvas with the darken blend the other
9
+ * overlays use (`dst * (1 - srcAlpha)`).
10
+ *
11
+ * Owns two `rg16float` targets (occlusion + linear depth, and the blur
12
+ * scratch). They follow the drawing-buffer size and the quality, are
13
+ * rebuilt when either changes, and are released by `destroy()`; the renderer
14
+ * drops the whole pass when AO is switched off and on teardown (device loss
15
+ * re-creates it on the next AO frame).
16
+ */
17
+ import { type AoFrameParams } from './ao-params.js';
18
+ export interface AoPassFrame {
19
+ encoder: GPUCommandEncoder;
20
+ /** Resolved colour to darken (the canvas texture). */
21
+ targetView: GPUTextureView;
22
+ /** Depth-only view of the scene depth attachment. */
23
+ depthView: GPUTextureView;
24
+ params: AoFrameParams;
25
+ }
26
+ export declare class AoPass {
27
+ private readonly device;
28
+ private readonly uniformBuffer;
29
+ private readonly uniformScratch;
30
+ private readonly aoLayout;
31
+ private readonly filterLayout;
32
+ private readonly aoPipeline;
33
+ private readonly blurHPipeline;
34
+ private readonly blurVPipeline;
35
+ private readonly compositePipeline;
36
+ private targets;
37
+ private bindGroups;
38
+ private destroyed;
39
+ constructor(device: GPUDevice, colorFormat: GPUTextureFormat, sampleCount: number);
40
+ encode(frame: AoPassFrame): void;
41
+ private ensureTargets;
42
+ private ensureBindGroups;
43
+ private releaseTargets;
44
+ /** Release every GPU resource. Idempotent; the pass is unusable afterwards. */
45
+ destroy(): void;
46
+ }
47
+ //# sourceMappingURL=ao-pass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ao-pass.d.ts","sourceRoot":"","sources":["../src/ao-pass.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAkD,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAKpG,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,sDAAsD;IACtD,UAAU,EAAE,cAAc,CAAC;IAC3B,qDAAqD;IACrD,SAAS,EAAE,cAAc,CAAC;IAC1B,MAAM,EAAE,aAAa,CAAC;CACvB;AAmBD,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAY;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0C;IACzE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM;IAkDjF,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAyBhC,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,cAAc;IAQtB,+EAA+E;IAC/E,OAAO,IAAI,IAAI;CAMhB"}
@@ -0,0 +1,157 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * Screen-space ambient occlusion pass (#5384): the GPU side of
6
+ * `shaders/ao.wgsl.ts`. It reads the scene depth attachment after the main
7
+ * pass and multiplies the resolved colour by the occlusion it finds.
8
+ *
9
+ * Passes per frame: AO (half resolution at `low`, full at `high`), a
10
+ * horizontal and a vertical bilateral blur at the same resolution, and a
11
+ * full-resolution composite onto the canvas with the darken blend the other
12
+ * overlays use (`dst * (1 - srcAlpha)`).
13
+ *
14
+ * Owns two `rg16float` targets (occlusion + linear depth, and the blur
15
+ * scratch). They follow the drawing-buffer size and the quality, are
16
+ * rebuilt when either changes, and are released by `destroy()`; the renderer
17
+ * drops the whole pass when AO is switched off and on teardown (device loss
18
+ * re-creates it on the next AO frame).
19
+ */
20
+ import { AO_UNIFORM_BYTES, aoTargetSize, packAoUniforms } from './ao-params.js';
21
+ import { aoShaderSource } from './shaders/ao.wgsl.js';
22
+ const AO_TARGET_FORMAT = 'rg16float';
23
+ export class AoPass {
24
+ device;
25
+ uniformBuffer;
26
+ uniformScratch = new Float32Array(AO_UNIFORM_BYTES / 4);
27
+ aoLayout;
28
+ filterLayout;
29
+ aoPipeline;
30
+ blurHPipeline;
31
+ blurVPipeline;
32
+ compositePipeline;
33
+ targets = null;
34
+ bindGroups = null;
35
+ destroyed = false;
36
+ constructor(device, colorFormat, sampleCount) {
37
+ this.device = device;
38
+ this.uniformBuffer = device.createBuffer({
39
+ label: 'ao-uniforms',
40
+ size: AO_UNIFORM_BYTES,
41
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
42
+ });
43
+ const depthEntry = {
44
+ binding: 0,
45
+ visibility: GPUShaderStage.FRAGMENT,
46
+ texture: { sampleType: 'depth', viewDimension: '2d', multisampled: sampleCount > 1 },
47
+ };
48
+ const paramsEntry = {
49
+ binding: 1,
50
+ visibility: GPUShaderStage.FRAGMENT,
51
+ buffer: { type: 'uniform' },
52
+ };
53
+ this.aoLayout = device.createBindGroupLayout({ label: 'ao-bgl', entries: [depthEntry, paramsEntry] });
54
+ this.filterLayout = device.createBindGroupLayout({
55
+ label: 'ao-filter-bgl',
56
+ entries: [
57
+ depthEntry,
58
+ paramsEntry,
59
+ { binding: 2, visibility: GPUShaderStage.FRAGMENT, texture: { sampleType: 'unfilterable-float' } },
60
+ ],
61
+ });
62
+ const module = device.createShaderModule({ label: 'ao-shader', code: aoShaderSource(sampleCount > 1) });
63
+ const make = (label, layout, entryPoint, target) => device.createRenderPipeline({
64
+ label,
65
+ layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
66
+ vertex: { module, entryPoint: 'vs_fullscreen' },
67
+ fragment: { module, entryPoint, targets: [target] },
68
+ primitive: { topology: 'triangle-list', cullMode: 'none' },
69
+ });
70
+ this.aoPipeline = make('ao-pipeline', this.aoLayout, 'fs_ao', { format: AO_TARGET_FORMAT });
71
+ this.blurHPipeline = make('ao-blur-h-pipeline', this.filterLayout, 'fs_blur_h', { format: AO_TARGET_FORMAT });
72
+ this.blurVPipeline = make('ao-blur-v-pipeline', this.filterLayout, 'fs_blur_v', { format: AO_TARGET_FORMAT });
73
+ this.compositePipeline = make('ao-composite-pipeline', this.filterLayout, 'fs_composite', {
74
+ format: colorFormat,
75
+ // Darken overlay: dst' = dst * (1 - srcAlpha); canvas alpha untouched.
76
+ blend: {
77
+ color: { srcFactor: 'zero', dstFactor: 'one-minus-src-alpha' },
78
+ alpha: { srcFactor: 'zero', dstFactor: 'one' },
79
+ },
80
+ });
81
+ }
82
+ encode(frame) {
83
+ if (this.destroyed)
84
+ return;
85
+ const { width, height } = aoTargetSize(frame.params.width, frame.params.height, frame.params.quality);
86
+ const targets = this.ensureTargets(width, height);
87
+ const groups = this.ensureBindGroups(targets, frame.depthView);
88
+ packAoUniforms(this.uniformScratch, frame.params);
89
+ this.device.queue.writeBuffer(this.uniformBuffer, 0, this.uniformScratch);
90
+ const run = (label, view, pipeline, group, load) => {
91
+ const pass = frame.encoder.beginRenderPass({
92
+ label,
93
+ colorAttachments: [{ view, loadOp: load, storeOp: 'store', clearValue: { r: 0, g: 0, b: 0, a: 0 } }],
94
+ });
95
+ pass.setPipeline(pipeline);
96
+ pass.setBindGroup(0, group);
97
+ pass.draw(3, 1, 0, 0);
98
+ pass.end();
99
+ };
100
+ run('ao', targets.aoView, this.aoPipeline, groups.ao, 'clear');
101
+ run('ao-blur-h', targets.scratchView, this.blurHPipeline, groups.blurH, 'clear');
102
+ run('ao-blur-v', targets.aoView, this.blurVPipeline, groups.blurV, 'clear');
103
+ run('ao-composite', frame.targetView, this.compositePipeline, groups.composite, 'load');
104
+ }
105
+ ensureTargets(width, height) {
106
+ const current = this.targets;
107
+ if (current && current.width === width && current.height === height)
108
+ return current;
109
+ this.releaseTargets();
110
+ const make = (label) => this.device.createTexture({
111
+ label,
112
+ size: { width, height },
113
+ format: AO_TARGET_FORMAT,
114
+ usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
115
+ });
116
+ const ao = make('ao-target');
117
+ const scratch = make('ao-scratch');
118
+ this.targets = { width, height, ao, scratch, aoView: ao.createView(), scratchView: scratch.createView() };
119
+ return this.targets;
120
+ }
121
+ ensureBindGroups(targets, depthView) {
122
+ const current = this.bindGroups;
123
+ if (current && current.depthView === depthView)
124
+ return current;
125
+ const params = { binding: 1, resource: { buffer: this.uniformBuffer } };
126
+ const depth = { binding: 0, resource: depthView };
127
+ const filter = (label, input) => this.device.createBindGroup({
128
+ label,
129
+ layout: this.filterLayout,
130
+ entries: [depth, params, { binding: 2, resource: input }],
131
+ });
132
+ this.bindGroups = {
133
+ depthView,
134
+ ao: this.device.createBindGroup({ label: 'ao-bg', layout: this.aoLayout, entries: [depth, params] }),
135
+ blurH: filter('ao-blur-h-bg', targets.aoView),
136
+ blurV: filter('ao-blur-v-bg', targets.scratchView),
137
+ composite: filter('ao-composite-bg', targets.aoView),
138
+ };
139
+ return this.bindGroups;
140
+ }
141
+ releaseTargets() {
142
+ this.targets?.ao.destroy();
143
+ this.targets?.scratch.destroy();
144
+ this.targets = null;
145
+ // Bind groups reference the old views.
146
+ this.bindGroups = null;
147
+ }
148
+ /** Release every GPU resource. Idempotent; the pass is unusable afterwards. */
149
+ destroy() {
150
+ if (this.destroyed)
151
+ return;
152
+ this.destroyed = true;
153
+ this.releaseTargets();
154
+ this.uniformBuffer.destroy();
155
+ }
156
+ }
157
+ //# sourceMappingURL=ao-pass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ao-pass.js","sourceRoot":"","sources":["../src/ao-pass.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,7 @@
1
+ import { type RelativeToEyeFrame } from './relative-to-eye.js';
1
2
  import type { CameraInternalState } from './camera-state.js';
3
+ /** Mirror lookAt's effective eye without rewriting the caller's malformed pose. */
4
+ export declare function updateCameraRelativeFrame(state: CameraInternalState, frame: RelativeToEyeFrame): void;
2
5
  export declare function updateCameraMatrices(state: CameraInternalState): void;
3
6
  /**
4
7
  * Compute tight near/far for orthographic mode by projecting the scene
@@ -1 +1 @@
1
- {"version":3,"file":"camera-matrices.d.ts","sourceRoot":"","sources":["../src/camera-matrices.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG7D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CA4DrE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,EAAE,MAAM,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAyE/B"}
1
+ {"version":3,"file":"camera-matrices.d.ts","sourceRoot":"","sources":["../src/camera-matrices.ts"],"names":[],"mappings":"AAwBA,OAAO,EAA6B,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG7D,mFAAmF;AACnF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAQrG;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CA4DrE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,EAAE,MAAM,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAyE/B"}
@@ -19,8 +19,19 @@
19
19
  * `orthographicReverseZ` and `multiply` each already return a fresh `Mat4`,
20
20
  * and the ortho branch already returned a fresh `{near, far}` per frame.
21
21
  */
22
- import { MathUtils } from './math.js';
22
+ import { MathUtils, viewBasis } from './math.js';
23
+ import { MAX_RTE_SOURCE_ABS_METRES } from './relative-to-eye.js';
23
24
  import { DEFAULT_ORTHO_SIZE, usableOrthoSize } from './camera-guards.js';
25
+ /** Mirror lookAt's effective eye without rewriting the caller's malformed pose. */
26
+ export function updateCameraRelativeFrame(state, frame) {
27
+ const eye = viewBasis(state.camera.position, state.camera.target, state.camera.up).eye;
28
+ if ([eye.x, eye.y, eye.z].some(value => !Number.isFinite(value) || Math.abs(value) > MAX_RTE_SOURCE_ABS_METRES)
29
+ || !state.projMatrix.m.every(Number.isFinite) || !state.viewMatrix.m.every(Number.isFinite)) {
30
+ frame.invalidate();
31
+ return;
32
+ }
33
+ frame.update(eye, state.projMatrix, state.viewMatrix);
34
+ }
24
35
  export function updateCameraMatrices(state) {
25
36
  const dx = state.camera.position.x - state.camera.target.x;
26
37
  const dy = state.camera.position.y - state.camera.target.y;
@@ -1 +1 @@
1
- {"version":3,"file":"camera-matrices.js","sourceRoot":"","sources":["../src/camera-matrices.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"camera-matrices.js","sourceRoot":"","sources":["../src/camera-matrices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { CameraInternalState } from './camera-state.js';
2
+ import type { CameraAnimator } from './camera-animation.js';
3
+ /** Absolute orientation and readouts share the camera's authored f64 pose. */
4
+ export declare class CameraOrientation {
5
+ private readonly state;
6
+ private readonly animator;
7
+ private readonly updateMatrices;
8
+ constructor(state: CameraInternalState, animator: CameraAnimator, updateMatrices: () => void);
9
+ /**
10
+ * Get distance from camera position to target.
11
+ *
12
+ * Deliberately **unsanitized**: it reports the pose as it actually is, so a
13
+ * malformed one (a BCF viewpoint restored from a file reaches the public
14
+ * setters unvalidated) yields NaN rather than a substituted number. This is
15
+ * a measurement, not a control input: it is what `useBCF` reads back when
16
+ * restoring a viewpoint and what the BCF overlay scales markers by. There is
17
+ * no substitute that is right for every reader — a plausible-looking `1`
18
+ * would place every restored target one unit from the eye — and returning a
19
+ * number here would contradict `getPosition()`/`getTarget()`, which are raw,
20
+ * leaving callers no way to tell that the pose is broken. Gesture code inside
21
+ * this package guards with {@link isUsableDistance} instead; each gesture
22
+ * needs a different fallback. Callers OUTSIDE the package cannot use that
23
+ * predicate (it is package-internal) and are not all guarded — see #2466 for
24
+ * the viewpoint-restore path (#2441).
25
+ */
26
+ getDistance(): number;
27
+ /**
28
+ * Get current camera rotation angles in degrees
29
+ * Returns { azimuth, elevation } where:
30
+ * - azimuth: horizontal rotation (0-360), 0 = front
31
+ * - elevation: vertical rotation (-90 to 90), 0 = horizon
32
+ */
33
+ getRotation(): {
34
+ azimuth: number;
35
+ elevation: number;
36
+ };
37
+ /**
38
+ * Place the camera at an ABSOLUTE orientation around its current target,
39
+ * in the same angle convention {@link getRotation} reports — the exact
40
+ * inverse of it, so `setRotation(a, e)` then `getRotation()` returns
41
+ * `{ azimuth: a, elevation: e }` (modulo the normalisation and pole clamp
42
+ * below).
43
+ *
44
+ * This is the only absolute-orientation entry point on the camera. Everything
45
+ * else is relative (`orbit`, and the viewer's 90° rotate steppers built on it)
46
+ * or names a direction rather than an angle (`setPresetView`), which is why a
47
+ * host command that says "go to azimuth 120°, elevation 30°" had nothing to
48
+ * call and silently did nothing (#2934).
49
+ *
50
+ * The orbit radius and the target are preserved — this rotates the camera on
51
+ * its current sphere, it does not reframe. `up` is reset to world Y, matching
52
+ * `orbit`, so the reported azimuth comes back through `getRotation`'s
53
+ * position-based branch.
54
+ *
55
+ * @param azimuth Horizontal angle in degrees; normalised into [0, 360).
56
+ * @param elevation Vertical angle in degrees, 0 = horizon. Clamped to just
57
+ * inside ±90° (the same `MIN_PHI` margin `orbit` uses) — the exact poles
58
+ * collapse `cross(forward, up)` and flip the model.
59
+ */
60
+ setRotation(azimuth: number, elevation: number): void;
61
+ }
62
+ //# sourceMappingURL=camera-orientation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera-orientation.d.ts","sourceRoot":"","sources":["../src/camera-orientation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,8EAA8E;AAC9E,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAFd,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,MAAM,IAAI;IAG7C;;;;;;;;;;;;;;;;OAgBG;IACH,WAAW,IAAI,MAAM;IASrB;;;;;OAKG;IACH,WAAW,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IA6CrD;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAmDtD"}