@ifc-lite/renderer 3.1.0 → 4.2.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 (429) hide show
  1. package/README.md +22 -0
  2. package/dist/aabb-edges.d.ts +10 -0
  3. package/dist/aabb-edges.d.ts.map +1 -1
  4. package/dist/aabb-edges.js +13 -0
  5. package/dist/aabb-edges.js.map +1 -1
  6. package/dist/ao-params.d.ts +85 -0
  7. package/dist/ao-params.d.ts.map +1 -0
  8. package/dist/ao-params.js +109 -0
  9. package/dist/ao-params.js.map +1 -0
  10. package/dist/ao-pass.d.ts +47 -0
  11. package/dist/ao-pass.d.ts.map +1 -0
  12. package/dist/ao-pass.js +157 -0
  13. package/dist/ao-pass.js.map +1 -0
  14. package/dist/appearance-preview.d.ts +2 -0
  15. package/dist/appearance-preview.d.ts.map +1 -1
  16. package/dist/appearance-preview.js +4 -0
  17. package/dist/appearance-preview.js.map +1 -1
  18. package/dist/camera-animation-immediate.d.ts +5 -0
  19. package/dist/camera-animation-immediate.d.ts.map +1 -0
  20. package/dist/camera-animation-immediate.js +16 -0
  21. package/dist/camera-animation-immediate.js.map +1 -0
  22. package/dist/camera-animation.d.ts +3 -9
  23. package/dist/camera-animation.d.ts.map +1 -1
  24. package/dist/camera-animation.js +14 -9
  25. package/dist/camera-animation.js.map +1 -1
  26. package/dist/camera-matrices.d.ts +3 -0
  27. package/dist/camera-matrices.d.ts.map +1 -1
  28. package/dist/camera-matrices.js +12 -1
  29. package/dist/camera-matrices.js.map +1 -1
  30. package/dist/camera-orientation.d.ts +62 -0
  31. package/dist/camera-orientation.d.ts.map +1 -0
  32. package/dist/camera-orientation.js +155 -0
  33. package/dist/camera-orientation.js.map +1 -0
  34. package/dist/camera-projection.d.ts +3 -1
  35. package/dist/camera-projection.d.ts.map +1 -1
  36. package/dist/camera-projection.js +26 -20
  37. package/dist/camera-projection.js.map +1 -1
  38. package/dist/camera-surface-zoom.d.ts +32 -0
  39. package/dist/camera-surface-zoom.d.ts.map +1 -0
  40. package/dist/camera-surface-zoom.js +37 -0
  41. package/dist/camera-surface-zoom.js.map +1 -0
  42. package/dist/camera.d.ts +32 -61
  43. package/dist/camera.d.ts.map +1 -1
  44. package/dist/camera.js +71 -167
  45. package/dist/camera.js.map +1 -1
  46. package/dist/clash-solid-pipeline.d.ts +9 -3
  47. package/dist/clash-solid-pipeline.d.ts.map +1 -1
  48. package/dist/clash-solid-pipeline.js +31 -8
  49. package/dist/clash-solid-pipeline.js.map +1 -1
  50. package/dist/constants.d.ts +1 -1
  51. package/dist/constants.d.ts.map +1 -1
  52. package/dist/constants.js +4 -3
  53. package/dist/constants.js.map +1 -1
  54. package/dist/depth-reconstruct.d.ts +43 -0
  55. package/dist/depth-reconstruct.d.ts.map +1 -0
  56. package/dist/depth-reconstruct.js +35 -0
  57. package/dist/depth-reconstruct.js.map +1 -0
  58. package/dist/device-recovery.d.ts +60 -0
  59. package/dist/device-recovery.d.ts.map +1 -0
  60. package/dist/device-recovery.js +153 -0
  61. package/dist/device-recovery.js.map +1 -0
  62. package/dist/device.d.ts +2 -0
  63. package/dist/device.d.ts.map +1 -1
  64. package/dist/device.js +13 -1
  65. package/dist/device.js.map +1 -1
  66. package/dist/environment.d.ts +26 -15
  67. package/dist/environment.d.ts.map +1 -1
  68. package/dist/environment.js +24 -13
  69. package/dist/environment.js.map +1 -1
  70. package/dist/federation-registry.d.ts +16 -0
  71. package/dist/federation-registry.d.ts.map +1 -1
  72. package/dist/federation-registry.js +80 -9
  73. package/dist/federation-registry.js.map +1 -1
  74. package/dist/gpu-static-upload.d.ts +39 -0
  75. package/dist/gpu-static-upload.d.ts.map +1 -0
  76. package/dist/gpu-static-upload.js +70 -0
  77. package/dist/gpu-static-upload.js.map +1 -0
  78. package/dist/gpu-upload-guard.d.ts +95 -0
  79. package/dist/gpu-upload-guard.d.ts.map +1 -0
  80. package/dist/gpu-upload-guard.js +88 -0
  81. package/dist/gpu-upload-guard.js.map +1 -0
  82. package/dist/index.d.ts +71 -41
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +340 -375
  85. package/dist/index.js.map +1 -1
  86. package/dist/instanced-override-color.d.ts +8 -0
  87. package/dist/instanced-override-color.d.ts.map +1 -1
  88. package/dist/instanced-override-color.js +10 -0
  89. package/dist/instanced-override-color.js.map +1 -1
  90. package/dist/instanced-render.d.ts +22 -2
  91. package/dist/instanced-render.d.ts.map +1 -1
  92. package/dist/instanced-render.js +47 -10
  93. package/dist/instanced-render.js.map +1 -1
  94. package/dist/instanced-rte.d.ts +17 -0
  95. package/dist/instanced-rte.d.ts.map +1 -0
  96. package/dist/instanced-rte.js +32 -0
  97. package/dist/instanced-rte.js.map +1 -0
  98. package/dist/merged-mesh-extract.d.ts.map +1 -1
  99. package/dist/merged-mesh-extract.js +5 -0
  100. package/dist/merged-mesh-extract.js.map +1 -1
  101. package/dist/mesh-rte-uniforms.d.ts +46 -0
  102. package/dist/mesh-rte-uniforms.d.ts.map +1 -0
  103. package/dist/mesh-rte-uniforms.js +59 -0
  104. package/dist/mesh-rte-uniforms.js.map +1 -0
  105. package/dist/model-bounds-tracker.d.ts +7 -0
  106. package/dist/model-bounds-tracker.d.ts.map +1 -1
  107. package/dist/model-bounds-tracker.js +16 -5
  108. package/dist/model-bounds-tracker.js.map +1 -1
  109. package/dist/model-translation.d.ts +40 -2
  110. package/dist/model-translation.d.ts.map +1 -1
  111. package/dist/model-translation.js +152 -17
  112. package/dist/model-translation.js.map +1 -1
  113. package/dist/pick-rte-snapshot.d.ts +7 -0
  114. package/dist/pick-rte-snapshot.d.ts.map +1 -0
  115. package/dist/pick-rte-snapshot.js +15 -0
  116. package/dist/pick-rte-snapshot.js.map +1 -0
  117. package/dist/pick-types.d.ts +17 -0
  118. package/dist/pick-types.d.ts.map +1 -0
  119. package/dist/pick-types.js +5 -0
  120. package/dist/pick-types.js.map +1 -0
  121. package/dist/pick-uniforms.d.ts +6 -0
  122. package/dist/pick-uniforms.d.ts.map +1 -1
  123. package/dist/pick-uniforms.js +22 -18
  124. package/dist/pick-uniforms.js.map +1 -1
  125. package/dist/pick-world-position.d.ts +18 -0
  126. package/dist/pick-world-position.d.ts.map +1 -0
  127. package/dist/pick-world-position.js +21 -0
  128. package/dist/pick-world-position.js.map +1 -0
  129. package/dist/picker-readbacks.d.ts +6 -0
  130. package/dist/picker-readbacks.d.ts.map +1 -0
  131. package/dist/picker-readbacks.js +20 -0
  132. package/dist/picker-readbacks.js.map +1 -0
  133. package/dist/picker-rte-uniforms.d.ts +6 -0
  134. package/dist/picker-rte-uniforms.d.ts.map +1 -0
  135. package/dist/picker-rte-uniforms.js +41 -0
  136. package/dist/picker-rte-uniforms.js.map +1 -0
  137. package/dist/picker.d.ts +6 -7
  138. package/dist/picker.d.ts.map +1 -1
  139. package/dist/picker.js +88 -115
  140. package/dist/picker.js.map +1 -1
  141. package/dist/picking-manager.d.ts +10 -1
  142. package/dist/picking-manager.d.ts.map +1 -1
  143. package/dist/picking-manager.js +57 -21
  144. package/dist/picking-manager.js.map +1 -1
  145. package/dist/pipeline.d.ts +1 -7
  146. package/dist/pipeline.d.ts.map +1 -1
  147. package/dist/pipeline.js +17 -20
  148. package/dist/pipeline.js.map +1 -1
  149. package/dist/point-picker.d.ts +5 -1
  150. package/dist/point-picker.d.ts.map +1 -1
  151. package/dist/point-picker.js +49 -9
  152. package/dist/point-picker.js.map +1 -1
  153. package/dist/pointcloud/point-cloud-handle-ids.d.ts +22 -0
  154. package/dist/pointcloud/point-cloud-handle-ids.d.ts.map +1 -0
  155. package/dist/pointcloud/point-cloud-handle-ids.js +31 -0
  156. package/dist/pointcloud/point-cloud-handle-ids.js.map +1 -0
  157. package/dist/pointcloud/point-cloud-node.d.ts +14 -6
  158. package/dist/pointcloud/point-cloud-node.d.ts.map +1 -1
  159. package/dist/pointcloud/point-cloud-node.js.map +1 -1
  160. package/dist/pointcloud/point-cloud-pick-sources.d.ts +47 -0
  161. package/dist/pointcloud/point-cloud-pick-sources.d.ts.map +1 -0
  162. package/dist/pointcloud/point-cloud-pick-sources.js +32 -0
  163. package/dist/pointcloud/point-cloud-pick-sources.js.map +1 -0
  164. package/dist/pointcloud/point-cloud-placement.d.ts.map +1 -1
  165. package/dist/pointcloud/point-cloud-placement.js +20 -5
  166. package/dist/pointcloud/point-cloud-placement.js.map +1 -1
  167. package/dist/pointcloud/point-cloud-ray-transform.d.ts +78 -4
  168. package/dist/pointcloud/point-cloud-ray-transform.d.ts.map +1 -1
  169. package/dist/pointcloud/point-cloud-ray-transform.js +31 -84
  170. package/dist/pointcloud/point-cloud-ray-transform.js.map +1 -1
  171. package/dist/pointcloud/point-cloud-renderer.d.ts +21 -19
  172. package/dist/pointcloud/point-cloud-renderer.d.ts.map +1 -1
  173. package/dist/pointcloud/point-cloud-renderer.js +46 -52
  174. package/dist/pointcloud/point-cloud-renderer.js.map +1 -1
  175. package/dist/pointcloud/point-cloud-stream-lifecycle.d.ts +44 -0
  176. package/dist/pointcloud/point-cloud-stream-lifecycle.d.ts.map +1 -0
  177. package/dist/pointcloud/point-cloud-stream-lifecycle.js +44 -0
  178. package/dist/pointcloud/point-cloud-stream-lifecycle.js.map +1 -0
  179. package/dist/pointcloud/point-cloud-uniforms.d.ts +5 -0
  180. package/dist/pointcloud/point-cloud-uniforms.d.ts.map +1 -1
  181. package/dist/pointcloud/point-cloud-uniforms.js +55 -44
  182. package/dist/pointcloud/point-cloud-uniforms.js.map +1 -1
  183. package/dist/pointcloud/point-cloud-visibility.d.ts +10 -0
  184. package/dist/pointcloud/point-cloud-visibility.d.ts.map +1 -0
  185. package/dist/pointcloud/point-cloud-visibility.js +18 -0
  186. package/dist/pointcloud/point-cloud-visibility.js.map +1 -0
  187. package/dist/pointcloud/point-pipeline.d.ts +4 -9
  188. package/dist/pointcloud/point-pipeline.d.ts.map +1 -1
  189. package/dist/pointcloud/point-pipeline.js +4 -9
  190. package/dist/pointcloud/point-pipeline.js.map +1 -1
  191. package/dist/pointcloud/point-shader.wgsl.d.ts +1 -21
  192. package/dist/pointcloud/point-shader.wgsl.d.ts.map +1 -1
  193. package/dist/pointcloud/point-shader.wgsl.js +25 -5
  194. package/dist/pointcloud/point-shader.wgsl.js.map +1 -1
  195. package/dist/post-pass-chain.d.ts +38 -0
  196. package/dist/post-pass-chain.d.ts.map +1 -0
  197. package/dist/post-pass-chain.js +99 -0
  198. package/dist/post-pass-chain.js.map +1 -0
  199. package/dist/post-processor.d.ts +12 -26
  200. package/dist/post-processor.d.ts.map +1 -1
  201. package/dist/post-processor.js +14 -72
  202. package/dist/post-processor.js.map +1 -1
  203. package/dist/raycast-engine.d.ts +7 -5
  204. package/dist/raycast-engine.d.ts.map +1 -1
  205. package/dist/raycast-engine.js +17 -20
  206. package/dist/raycast-engine.js.map +1 -1
  207. package/dist/raycast-point-cloud-query.d.ts +1 -1
  208. package/dist/raycast-point-cloud-query.d.ts.map +1 -1
  209. package/dist/reference-image-pipeline.d.ts +1 -1
  210. package/dist/reference-image-pipeline.d.ts.map +1 -1
  211. package/dist/reference-image-pipeline.js +25 -7
  212. package/dist/reference-image-pipeline.js.map +1 -1
  213. package/dist/reference-images.d.ts +3 -1
  214. package/dist/reference-images.d.ts.map +1 -1
  215. package/dist/reference-images.js +15 -5
  216. package/dist/reference-images.js.map +1 -1
  217. package/dist/relative-to-eye.d.ts +146 -0
  218. package/dist/relative-to-eye.d.ts.map +1 -0
  219. package/dist/relative-to-eye.js +326 -0
  220. package/dist/relative-to-eye.js.map +1 -0
  221. package/dist/render-section-draw.d.ts +11 -0
  222. package/dist/render-section-draw.d.ts.map +1 -1
  223. package/dist/render-section-draw.js +6 -3
  224. package/dist/render-section-draw.js.map +1 -1
  225. package/dist/renderer-color-readback.d.ts +50 -0
  226. package/dist/renderer-color-readback.d.ts.map +1 -0
  227. package/dist/renderer-color-readback.js +145 -0
  228. package/dist/renderer-color-readback.js.map +1 -0
  229. package/dist/renderer-overlays.d.ts +15 -3
  230. package/dist/renderer-overlays.d.ts.map +1 -1
  231. package/dist/renderer-overlays.js +46 -20
  232. package/dist/renderer-overlays.js.map +1 -1
  233. package/dist/renderer-screenshot.d.ts +4 -0
  234. package/dist/renderer-screenshot.d.ts.map +1 -0
  235. package/dist/renderer-screenshot.js +17 -0
  236. package/dist/renderer-screenshot.js.map +1 -0
  237. package/dist/renderer-symbolic-overlays.d.ts +5 -2
  238. package/dist/renderer-symbolic-overlays.d.ts.map +1 -1
  239. package/dist/renderer-symbolic-overlays.js +36 -13
  240. package/dist/renderer-symbolic-overlays.js.map +1 -1
  241. package/dist/renderer-viewport.d.ts +45 -0
  242. package/dist/renderer-viewport.d.ts.map +1 -1
  243. package/dist/renderer-viewport.js +44 -0
  244. package/dist/renderer-viewport.js.map +1 -1
  245. package/dist/rte-clip-space.d.ts +12 -0
  246. package/dist/rte-clip-space.d.ts.map +1 -0
  247. package/dist/rte-clip-space.js +22 -0
  248. package/dist/rte-clip-space.js.map +1 -0
  249. package/dist/rte-frustum.d.ts +24 -0
  250. package/dist/rte-frustum.d.ts.map +1 -0
  251. package/dist/rte-frustum.js +45 -0
  252. package/dist/rte-frustum.js.map +1 -0
  253. package/dist/scene-appearance-preview.d.ts +2 -0
  254. package/dist/scene-appearance-preview.d.ts.map +1 -1
  255. package/dist/scene-appearance-preview.js +9 -0
  256. package/dist/scene-appearance-preview.js.map +1 -1
  257. package/dist/scene-authored-owner.d.ts +10 -0
  258. package/dist/scene-authored-owner.d.ts.map +1 -1
  259. package/dist/scene-authored-owner.js +44 -5
  260. package/dist/scene-authored-owner.js.map +1 -1
  261. package/dist/scene-batch-rebuild.d.ts +18 -0
  262. package/dist/scene-batch-rebuild.d.ts.map +1 -0
  263. package/dist/scene-batch-rebuild.js +49 -0
  264. package/dist/scene-batch-rebuild.js.map +1 -0
  265. package/dist/scene-batch-upload.d.ts +4 -1
  266. package/dist/scene-batch-upload.d.ts.map +1 -1
  267. package/dist/scene-batch-upload.js +31 -38
  268. package/dist/scene-batch-upload.js.map +1 -1
  269. package/dist/scene-bucket-routing.d.ts +21 -0
  270. package/dist/scene-bucket-routing.d.ts.map +1 -0
  271. package/dist/scene-bucket-routing.js +44 -0
  272. package/dist/scene-bucket-routing.js.map +1 -0
  273. package/dist/scene-contents.d.ts +8 -0
  274. package/dist/scene-contents.d.ts.map +1 -1
  275. package/dist/scene-derived-mesh-provenance.d.ts +13 -0
  276. package/dist/scene-derived-mesh-provenance.d.ts.map +1 -0
  277. package/dist/scene-derived-mesh-provenance.js +30 -0
  278. package/dist/scene-derived-mesh-provenance.js.map +1 -0
  279. package/dist/scene-device-recovery.d.ts +103 -0
  280. package/dist/scene-device-recovery.d.ts.map +1 -0
  281. package/dist/scene-device-recovery.js +295 -0
  282. package/dist/scene-device-recovery.js.map +1 -0
  283. package/dist/scene-finalize-regroup.d.ts +54 -0
  284. package/dist/scene-finalize-regroup.d.ts.map +1 -0
  285. package/dist/scene-finalize-regroup.js +136 -0
  286. package/dist/scene-finalize-regroup.js.map +1 -0
  287. package/dist/scene-geometry.d.ts +1 -0
  288. package/dist/scene-geometry.d.ts.map +1 -1
  289. package/dist/scene-geometry.js +3 -23
  290. package/dist/scene-geometry.js.map +1 -1
  291. package/dist/scene-instance-bounds.d.ts +12 -0
  292. package/dist/scene-instance-bounds.d.ts.map +1 -0
  293. package/dist/scene-instance-bounds.js +48 -0
  294. package/dist/scene-instance-bounds.js.map +1 -0
  295. package/dist/scene-instance-materialization.d.ts +4 -1
  296. package/dist/scene-instance-materialization.d.ts.map +1 -1
  297. package/dist/scene-instance-materialization.js +21 -6
  298. package/dist/scene-instance-materialization.js.map +1 -1
  299. package/dist/scene-instance-translation.d.ts +17 -0
  300. package/dist/scene-instance-translation.d.ts.map +1 -0
  301. package/dist/scene-instance-translation.js +50 -0
  302. package/dist/scene-instance-translation.js.map +1 -0
  303. package/dist/scene-instance-types.d.ts +6 -0
  304. package/dist/scene-instance-types.d.ts.map +1 -1
  305. package/dist/scene-model-translation.d.ts +13 -1
  306. package/dist/scene-model-translation.d.ts.map +1 -1
  307. package/dist/scene-model-translation.js +23 -1
  308. package/dist/scene-model-translation.js.map +1 -1
  309. package/dist/scene-precision.d.ts +16 -0
  310. package/dist/scene-precision.d.ts.map +1 -0
  311. package/dist/scene-precision.js +73 -0
  312. package/dist/scene-precision.js.map +1 -0
  313. package/dist/scene-rect-select.d.ts +11 -1
  314. package/dist/scene-rect-select.d.ts.map +1 -1
  315. package/dist/scene-rect-select.js +7 -4
  316. package/dist/scene-rect-select.js.map +1 -1
  317. package/dist/scene.d.ts +42 -39
  318. package/dist/scene.d.ts.map +1 -1
  319. package/dist/scene.js +258 -375
  320. package/dist/scene.js.map +1 -1
  321. package/dist/section-2d-lift.d.ts +10 -2
  322. package/dist/section-2d-lift.d.ts.map +1 -1
  323. package/dist/section-2d-lift.js +14 -6
  324. package/dist/section-2d-lift.js.map +1 -1
  325. package/dist/section-2d-line-buffer.d.ts +12 -4
  326. package/dist/section-2d-line-buffer.d.ts.map +1 -1
  327. package/dist/section-2d-line-buffer.js +59 -33
  328. package/dist/section-2d-line-buffer.js.map +1 -1
  329. package/dist/section-2d-overlay.d.ts +18 -72
  330. package/dist/section-2d-overlay.d.ts.map +1 -1
  331. package/dist/section-2d-overlay.js +72 -103
  332. package/dist/section-2d-overlay.js.map +1 -1
  333. package/dist/section-2d-types.d.ts +38 -0
  334. package/dist/section-2d-types.d.ts.map +1 -0
  335. package/dist/section-2d-types.js +6 -0
  336. package/dist/section-2d-types.js.map +1 -0
  337. package/dist/section-cap-pipelines.d.ts +6 -0
  338. package/dist/section-cap-pipelines.d.ts.map +1 -0
  339. package/dist/section-cap-pipelines.js +87 -0
  340. package/dist/section-cap-pipelines.js.map +1 -0
  341. package/dist/section-plane-geometry.d.ts +24 -0
  342. package/dist/section-plane-geometry.d.ts.map +1 -0
  343. package/dist/section-plane-geometry.js +93 -0
  344. package/dist/section-plane-geometry.js.map +1 -0
  345. package/dist/section-plane.d.ts +23 -24
  346. package/dist/section-plane.d.ts.map +1 -1
  347. package/dist/section-plane.js +58 -174
  348. package/dist/section-plane.js.map +1 -1
  349. package/dist/shaders/ao.wgsl.d.ts +2 -0
  350. package/dist/shaders/ao.wgsl.d.ts.map +1 -0
  351. package/dist/shaders/ao.wgsl.js +234 -0
  352. package/dist/shaders/ao.wgsl.js.map +1 -0
  353. package/dist/shaders/color-transfer.wgsl.d.ts +26 -0
  354. package/dist/shaders/color-transfer.wgsl.d.ts.map +1 -0
  355. package/dist/shaders/color-transfer.wgsl.js +53 -0
  356. package/dist/shaders/color-transfer.wgsl.js.map +1 -0
  357. package/dist/shaders/depth-reconstruct.wgsl.d.ts +16 -0
  358. package/dist/shaders/depth-reconstruct.wgsl.d.ts.map +1 -0
  359. package/dist/shaders/depth-reconstruct.wgsl.js +69 -0
  360. package/dist/shaders/depth-reconstruct.wgsl.js.map +1 -0
  361. package/dist/shaders/main-rte-shadow.wgsl.d.ts +4 -0
  362. package/dist/shaders/main-rte-shadow.wgsl.d.ts.map +1 -0
  363. package/dist/shaders/main-rte-shadow.wgsl.js +54 -0
  364. package/dist/shaders/main-rte-shadow.wgsl.js.map +1 -0
  365. package/dist/shaders/main.wgsl.d.ts +1 -6
  366. package/dist/shaders/main.wgsl.d.ts.map +1 -1
  367. package/dist/shaders/main.wgsl.js +110 -159
  368. package/dist/shaders/main.wgsl.js.map +1 -1
  369. package/dist/shaders/relative-to-eye.wgsl.d.ts +12 -0
  370. package/dist/shaders/relative-to-eye.wgsl.d.ts.map +1 -0
  371. package/dist/shaders/relative-to-eye.wgsl.js +40 -0
  372. package/dist/shaders/relative-to-eye.wgsl.js.map +1 -0
  373. package/dist/shaders/section-2d-overlay.wgsl.d.ts +28 -12
  374. package/dist/shaders/section-2d-overlay.wgsl.d.ts.map +1 -1
  375. package/dist/shaders/section-2d-overlay.wgsl.js +40 -13
  376. package/dist/shaders/section-2d-overlay.wgsl.js.map +1 -1
  377. package/dist/shaders/shadow.wgsl.d.ts +1 -1
  378. package/dist/shaders/shadow.wgsl.d.ts.map +1 -1
  379. package/dist/shaders/shadow.wgsl.js +25 -7
  380. package/dist/shaders/shadow.wgsl.js.map +1 -1
  381. package/dist/shaders/sky.wgsl.d.ts +1 -11
  382. package/dist/shaders/sky.wgsl.d.ts.map +1 -1
  383. package/dist/shaders/sky.wgsl.js +17 -19
  384. package/dist/shaders/sky.wgsl.js.map +1 -1
  385. package/dist/shaders/symbolic-overlay.wgsl.d.ts +2 -9
  386. package/dist/shaders/symbolic-overlay.wgsl.d.ts.map +1 -1
  387. package/dist/shaders/symbolic-overlay.wgsl.js +88 -17
  388. package/dist/shaders/symbolic-overlay.wgsl.js.map +1 -1
  389. package/dist/shaders/textured.wgsl.d.ts.map +1 -1
  390. package/dist/shaders/textured.wgsl.js +11 -9
  391. package/dist/shaders/textured.wgsl.js.map +1 -1
  392. package/dist/shadow-light-matrix.d.ts +7 -0
  393. package/dist/shadow-light-matrix.d.ts.map +1 -1
  394. package/dist/shadow-light-matrix.js +11 -0
  395. package/dist/shadow-light-matrix.js.map +1 -1
  396. package/dist/shadow-occluder-batches.d.ts +10 -0
  397. package/dist/shadow-occluder-batches.d.ts.map +1 -0
  398. package/dist/shadow-occluder-batches.js +39 -0
  399. package/dist/shadow-occluder-batches.js.map +1 -0
  400. package/dist/shadow-occluders.d.ts.map +1 -1
  401. package/dist/shadow-occluders.js +4 -0
  402. package/dist/shadow-occluders.js.map +1 -1
  403. package/dist/shadow-pass.d.ts +5 -51
  404. package/dist/shadow-pass.d.ts.map +1 -1
  405. package/dist/shadow-pass.js +49 -45
  406. package/dist/shadow-pass.js.map +1 -1
  407. package/dist/shadow-types.d.ts +39 -0
  408. package/dist/shadow-types.d.ts.map +1 -0
  409. package/dist/shadow-types.js +15 -0
  410. package/dist/shadow-types.js.map +1 -0
  411. package/dist/symbolic-overlay-geometry.d.ts +7 -0
  412. package/dist/symbolic-overlay-geometry.d.ts.map +1 -0
  413. package/dist/symbolic-overlay-geometry.js +43 -0
  414. package/dist/symbolic-overlay-geometry.js.map +1 -0
  415. package/dist/symbolic-overlay-pipelines.d.ts +24 -36
  416. package/dist/symbolic-overlay-pipelines.d.ts.map +1 -1
  417. package/dist/symbolic-overlay-pipelines.js +175 -182
  418. package/dist/symbolic-overlay-pipelines.js.map +1 -1
  419. package/dist/symbolic-text-atlas.d.ts +21 -0
  420. package/dist/symbolic-text-atlas.d.ts.map +1 -1
  421. package/dist/symbolic-text-atlas.js +29 -1
  422. package/dist/symbolic-text-atlas.js.map +1 -1
  423. package/dist/types.d.ts +20 -26
  424. package/dist/types.d.ts.map +1 -1
  425. package/dist/visual-enhancement.d.ts +23 -1
  426. package/dist/visual-enhancement.d.ts.map +1 -1
  427. package/dist/visual-enhancement.js +38 -12
  428. package/dist/visual-enhancement.js.map +1 -1
  429. package/package.json +3 -3
@@ -0,0 +1,234 @@
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 (#5384), SAO-style, in four fullscreen
6
+ * passes that share this module:
7
+ *
8
+ * 1. `fs_ao` (AO resolution): reconstruct the view-space position and
9
+ * normal from depth, then take `samples` taps on a per-pixel rotated
10
+ * spiral whose radius is `radius` world units projected to pixels. A tap
11
+ * occludes by how far it rises above the tangent plane (cosine, minus a
12
+ * bias), fading to zero at `radius` so distant geometry does not count.
13
+ * Writes (occlusion, linear depth).
14
+ * 2. `fs_blur_h`, 3. `fs_blur_v`: separable 9-tap bilateral blur that stops
15
+ * at depth discontinuities.
16
+ * 4. `fs_composite` (full resolution): depth-aware upsample, then output
17
+ * the darkening as alpha for a multiply blend. Background pixels (clear
18
+ * depth) output 0, so the sky and the clear colour are never darkened.
19
+ *
20
+ * `ao-params.ts` owns the uniform layout (`AO_UNIFORM_LAYOUT`) and the
21
+ * kernel; `depth-reconstruct.wgsl.ts` owns the reconstruction.
22
+ */
23
+ import { AO_GAIN, AO_MAX_DARKEN } from '../ao-params.js';
24
+ import { depthReconstructWgsl, depthTextureWgsl } from './depth-reconstruct.wgsl.js';
25
+ export function aoShaderSource(multisampled) {
26
+ return `
27
+ struct AoParams {
28
+ depthParams: vec4<f32>, // m10, m11, m14, m15
29
+ xyParams: vec4<f32>, // m0, m5, m12, m13
30
+ viewport: vec4<f32>, // full-res width, height, 1/width, 1/height
31
+ ao: vec4<f32>, // radius (world), px per world unit at w=1, max radius px, intensity
32
+ misc: vec4<f32>, // resolution divisor, samples, cosine bias, depth tolerance
33
+ kernel: array<vec4<f32>, 8>, // 16 unit-disk offsets, two per vec4
34
+ }
35
+
36
+ ${depthTextureWgsl(0, multisampled)}
37
+ @group(0) @binding(1) var<uniform> params: AoParams;
38
+ @group(0) @binding(2) var aoIn: texture_2d<f32>;
39
+
40
+ ${depthReconstructWgsl}
41
+
42
+ const TAU: f32 = 6.28318530718;
43
+ const AO_GAIN: f32 = ${AO_GAIN.toFixed(3)};
44
+ const AO_MAX_DARKEN: f32 = ${AO_MAX_DARKEN.toFixed(3)};
45
+
46
+ struct VsOut {
47
+ @builtin(position) pos: vec4<f32>,
48
+ }
49
+
50
+ @vertex
51
+ fn vs_fullscreen(@builtin(vertex_index) v: u32) -> VsOut {
52
+ var p = array<vec2<f32>, 3>(
53
+ vec2<f32>(-1.0, -3.0),
54
+ vec2<f32>(-1.0, 1.0),
55
+ vec2<f32>( 3.0, 1.0)
56
+ );
57
+ var o: VsOut;
58
+ o.pos = vec4<f32>(p[v], 0.0, 1.0);
59
+ return o;
60
+ }
61
+
62
+ fn viewPosAt(ip: vec2<i32>, d: f32) -> vec3<f32> {
63
+ return viewPositionFromDepth(ndcFromPixel(ip, params.viewport.zw), d, params.depthParams, params.xyParams);
64
+ }
65
+
66
+ // A neighbour for the normal. Background pushes it far away, so
67
+ // normalFromNeighbours takes the other side.
68
+ fn neighbourPos(ip: vec2<i32>, center: vec3<f32>) -> vec3<f32> {
69
+ let d = loadDepth(ip);
70
+ if (d <= BACKGROUND_DEPTH) {
71
+ return center - vec3<f32>(0.0, 0.0, 1e6);
72
+ }
73
+ return viewPosAt(ip, d);
74
+ }
75
+
76
+ fn kernelTap(i: u32) -> vec2<f32> {
77
+ let v = params.kernel[i / 2u];
78
+ return select(v.xy, v.zw, (i & 1u) == 1u);
79
+ }
80
+
81
+ // Interleaved gradient noise (Jimenez 2014): a per-pixel rotation the
82
+ // 9-tap blur removes without a visible pattern.
83
+ fn interleavedGradientNoise(p: vec2<f32>) -> f32 {
84
+ return fract(52.9829189 * fract(dot(p, vec2<f32>(0.06711056, 0.00583715))));
85
+ }
86
+
87
+ @fragment
88
+ fn fs_ao(@builtin(position) fragPos: vec4<f32>) -> @location(0) vec4<f32> {
89
+ let divisor = i32(params.misc.x);
90
+ let p = vec2<i32>(fragPos.xy) * divisor;
91
+ let dims = vec2<i32>(params.viewport.xy);
92
+ let d = loadDepth(p);
93
+ if (d <= BACKGROUND_DEPTH) {
94
+ return vec4<f32>(0.0, 0.0, 0.0, 0.0);
95
+ }
96
+ let P = viewPosAt(p, d);
97
+ let N = normalFromNeighbours(
98
+ P,
99
+ neighbourPos(p + vec2<i32>(1, 0), P),
100
+ neighbourPos(p - vec2<i32>(1, 0), P),
101
+ neighbourPos(p + vec2<i32>(0, 1), P),
102
+ neighbourPos(p - vec2<i32>(0, 1), P),
103
+ );
104
+ let depthKey = -P.z;
105
+
106
+ let radius = params.ao.x;
107
+ let w = clipWFromViewZ(P.z, params.depthParams);
108
+ let radiusPx = min(radius * params.ao.y / w, params.ao.z);
109
+ if (radiusPx < 1.0) {
110
+ // Smaller than a pixel: nothing to resolve at this distance.
111
+ return vec4<f32>(0.0, depthKey, 0.0, 0.0);
112
+ }
113
+
114
+ let angle = interleavedGradientNoise(fragPos.xy) * TAU;
115
+ let rot = vec2<f32>(cos(angle), sin(angle));
116
+ let invR2 = 1.0 / (radius * radius);
117
+ let bias = params.misc.z;
118
+ let samples = u32(params.misc.y);
119
+ var occlusion = 0.0;
120
+ for (var i = 0u; i < samples; i = i + 1u) {
121
+ let k = kernelTap(i);
122
+ let offset = vec2<f32>(k.x * rot.x - k.y * rot.y, k.x * rot.y + k.y * rot.x) * radiusPx;
123
+ let q = p + vec2<i32>(round(offset));
124
+ if (any(q < vec2<i32>(0)) || any(q >= dims)) {
125
+ continue;
126
+ }
127
+ let dq = loadDepth(q);
128
+ if (dq <= BACKGROUND_DEPTH) {
129
+ continue;
130
+ }
131
+ let v = viewPosAt(q, dq) - P;
132
+ let vv = dot(v, v);
133
+ // Range check: taps beyond the world radius do not occlude.
134
+ let falloff = max(1.0 - vv * invR2, 0.0);
135
+ let cosine = dot(v, N) * inverseSqrt(vv + 1e-8);
136
+ occlusion = occlusion + falloff * max(cosine - bias, 0.0);
137
+ }
138
+ occlusion = occlusion / (f32(samples) * (1.0 - bias));
139
+ return vec4<f32>(occlusion, depthKey, 0.0, 0.0);
140
+ }
141
+
142
+ // Relative depth closeness in [0, 1]: 1 on the same surface, 0 across
143
+ // a step larger than the tolerance.
144
+ fn depthWeight(key: f32, centerKey: f32) -> f32 {
145
+ return max(0.0, 1.0 - abs(key - centerKey) / (centerKey * params.misc.w));
146
+ }
147
+
148
+ fn bilateralBlur(t: vec2<i32>, dir: vec2<i32>) -> vec4<f32> {
149
+ let center = textureLoad(aoIn, t, 0);
150
+ if (center.y <= 0.0) {
151
+ return center;
152
+ }
153
+ let dims = vec2<i32>(textureDimensions(aoIn));
154
+ // Gaussian, sigma ~2 texels. A var: it is indexed at runtime.
155
+ var gauss = array<f32, 5>(0.2270, 0.1945, 0.1216, 0.0540, 0.0162);
156
+ var sum = center.x * gauss[0];
157
+ var wsum = gauss[0];
158
+ for (var i = 1; i <= 4; i = i + 1) {
159
+ for (var s = -1; s <= 1; s = s + 2) {
160
+ let q = t + dir * (i * s);
161
+ if (any(q < vec2<i32>(0)) || any(q >= dims)) {
162
+ continue;
163
+ }
164
+ let tap = textureLoad(aoIn, q, 0);
165
+ if (tap.y <= 0.0) {
166
+ continue;
167
+ }
168
+ let wgt = gauss[i] * depthWeight(tap.y, center.y);
169
+ sum = sum + tap.x * wgt;
170
+ wsum = wsum + wgt;
171
+ }
172
+ }
173
+ return vec4<f32>(sum / wsum, center.y, 0.0, 0.0);
174
+ }
175
+
176
+ @fragment
177
+ fn fs_blur_h(@builtin(position) fragPos: vec4<f32>) -> @location(0) vec4<f32> {
178
+ return bilateralBlur(vec2<i32>(fragPos.xy), vec2<i32>(1, 0));
179
+ }
180
+
181
+ @fragment
182
+ fn fs_blur_v(@builtin(position) fragPos: vec4<f32>) -> @location(0) vec4<f32> {
183
+ return bilateralBlur(vec2<i32>(fragPos.xy), vec2<i32>(0, 1));
184
+ }
185
+
186
+ // Joint bilateral upsample: the (up to) four AO texels around this
187
+ // pixel, weighted bilinearly and by depth closeness. When none is on
188
+ // this pixel's surface, the closest in depth wins.
189
+ fn upsampledOcclusion(p: vec2<i32>, key: f32) -> f32 {
190
+ let divisor = params.misc.x;
191
+ if (divisor <= 1.0) {
192
+ return textureLoad(aoIn, p, 0).x;
193
+ }
194
+ let dims = vec2<i32>(textureDimensions(aoIn));
195
+ // AO texel t was computed at full-res pixel t * divisor.
196
+ let f = vec2<f32>(p) / divisor;
197
+ let base = vec2<i32>(floor(f));
198
+ let fr = f - floor(f);
199
+ var sum = 0.0;
200
+ var wsum = 0.0;
201
+ var nearest = 0.0;
202
+ var nearestDiff = 1e30;
203
+ for (var j = 0; j < 4; j = j + 1) {
204
+ let o = vec2<i32>(j & 1, j >> 1u);
205
+ let q = clamp(base + o, vec2<i32>(0), dims - 1);
206
+ let tap = textureLoad(aoIn, q, 0);
207
+ let bw = select(1.0 - fr.x, fr.x, o.x == 1) * select(1.0 - fr.y, fr.y, o.y == 1);
208
+ let wgt = bw * depthWeight(tap.y, key);
209
+ sum = sum + tap.x * wgt;
210
+ wsum = wsum + wgt;
211
+ let diff = abs(tap.y - key);
212
+ if (diff < nearestDiff) {
213
+ nearestDiff = diff;
214
+ nearest = tap.x;
215
+ }
216
+ }
217
+ return select(nearest, sum / wsum, wsum > 1e-3);
218
+ }
219
+
220
+ @fragment
221
+ fn fs_composite(@builtin(position) fragPos: vec4<f32>) -> @location(0) vec4<f32> {
222
+ let p = vec2<i32>(fragPos.xy);
223
+ let d = loadDepth(p);
224
+ if (d <= BACKGROUND_DEPTH) {
225
+ return vec4<f32>(0.0, 0.0, 0.0, 0.0);
226
+ }
227
+ let key = -viewZFromDepth(d, params.depthParams);
228
+ let occlusion = upsampledOcclusion(p, key);
229
+ let darken = clamp(occlusion * AO_GAIN * params.ao.w, 0.0, AO_MAX_DARKEN);
230
+ return vec4<f32>(0.0, 0.0, 0.0, darken);
231
+ }
232
+ `;
233
+ }
234
+ //# sourceMappingURL=ao.wgsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ao.wgsl.js","sourceRoot":"","sources":["../../src/shaders/ao.wgsl.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAErF,MAAM,UAAU,cAAc,CAAC,YAAqB;IAClD,OAAO;;;;;;;;;;UAUC,gBAAgB,CAAC,CAAC,EAAE,YAAY,CAAC;;;;UAIjC,oBAAoB;;;+BAGC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;qCACZ,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4L5D,CAAC;AACF,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Colour transfer shared by every shader that lights or tone-maps: the
3
+ * geometry fragment stage (`main.wgsl.ts`, and the textured variant derived
4
+ * from it) and the procedural sky (`sky.wgsl.ts`). One home, so the model and
5
+ * the sky cannot drift onto different "film stocks".
6
+ *
7
+ * The contract:
8
+ *
9
+ * - Authored colours (IfcColourRgb, IFC5 / glTF base colours, overlay tints,
10
+ * texture texels) are display-referred sRGB. `srgbToLinear` decodes them
11
+ * before they are multiplied by light, because light adds and multiplies
12
+ * linearly and sRGB values do not.
13
+ * - `neutralCompress` rolls off highlights only. Anything whose brightest
14
+ * channel is below 0.76 (about 227/255 once encoded) passes through
15
+ * untouched, so a colour up to that brightness, lit at unit neutral
16
+ * irradiance, renders as authored; brighter colours roll off with their
17
+ * hue preserved (pure white lands at 0.88, about 241/255, leaving
18
+ * headroom for sunlit highlights). It is the Khronos PBR Neutral operator
19
+ * without its toe: the toe subtracts up to 0.04 to cancel a specular F0
20
+ * offset, and this renderer has no specular term, so keeping it would only
21
+ * crush dark materials.
22
+ * - `linearToSrgb` is the exact piecewise encode. The canvas is configured
23
+ * with a non-sRGB format, so the shader must encode.
24
+ */
25
+ export declare const colorTransferWgsl = "\n fn srgbToLinear(c: vec3<f32>) -> vec3<f32> {\n let lo = c / 12.92;\n let hi = pow((max(c, vec3<f32>(0.0)) + 0.055) / 1.055, vec3<f32>(2.4));\n return select(hi, lo, c <= vec3<f32>(0.04045));\n }\n\n fn linearToSrgb(c: vec3<f32>) -> vec3<f32> {\n let lo = c * 12.92;\n let hi = 1.055 * pow(max(c, vec3<f32>(0.0)), vec3<f32>(1.0 / 2.4)) - 0.055;\n return select(hi, lo, c <= vec3<f32>(0.0031308));\n }\n\n fn neutralCompress(cIn: vec3<f32>) -> vec3<f32> {\n let startCompression = 0.76;\n let desaturation = 0.15;\n let c = max(cIn, vec3<f32>(0.0));\n let peak = max(c.r, max(c.g, c.b));\n if (peak < startCompression) { return c; }\n let d = 1.0 - startCompression;\n let newPeak = 1.0 - d * d / (peak + d - startCompression);\n let g = 1.0 - 1.0 / (desaturation * (peak - newPeak) + 1.0);\n return mix(c * (newPeak / peak), vec3<f32>(newPeak), g);\n }\n";
26
+ //# sourceMappingURL=color-transfer.wgsl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-transfer.wgsl.d.ts","sourceRoot":"","sources":["../../src/shaders/color-transfer.wgsl.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,iBAAiB,8gCAwB7B,CAAC"}
@@ -0,0 +1,53 @@
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
+ * Colour transfer shared by every shader that lights or tone-maps: the
6
+ * geometry fragment stage (`main.wgsl.ts`, and the textured variant derived
7
+ * from it) and the procedural sky (`sky.wgsl.ts`). One home, so the model and
8
+ * the sky cannot drift onto different "film stocks".
9
+ *
10
+ * The contract:
11
+ *
12
+ * - Authored colours (IfcColourRgb, IFC5 / glTF base colours, overlay tints,
13
+ * texture texels) are display-referred sRGB. `srgbToLinear` decodes them
14
+ * before they are multiplied by light, because light adds and multiplies
15
+ * linearly and sRGB values do not.
16
+ * - `neutralCompress` rolls off highlights only. Anything whose brightest
17
+ * channel is below 0.76 (about 227/255 once encoded) passes through
18
+ * untouched, so a colour up to that brightness, lit at unit neutral
19
+ * irradiance, renders as authored; brighter colours roll off with their
20
+ * hue preserved (pure white lands at 0.88, about 241/255, leaving
21
+ * headroom for sunlit highlights). It is the Khronos PBR Neutral operator
22
+ * without its toe: the toe subtracts up to 0.04 to cancel a specular F0
23
+ * offset, and this renderer has no specular term, so keeping it would only
24
+ * crush dark materials.
25
+ * - `linearToSrgb` is the exact piecewise encode. The canvas is configured
26
+ * with a non-sRGB format, so the shader must encode.
27
+ */
28
+ export const colorTransferWgsl = `
29
+ fn srgbToLinear(c: vec3<f32>) -> vec3<f32> {
30
+ let lo = c / 12.92;
31
+ let hi = pow((max(c, vec3<f32>(0.0)) + 0.055) / 1.055, vec3<f32>(2.4));
32
+ return select(hi, lo, c <= vec3<f32>(0.04045));
33
+ }
34
+
35
+ fn linearToSrgb(c: vec3<f32>) -> vec3<f32> {
36
+ let lo = c * 12.92;
37
+ let hi = 1.055 * pow(max(c, vec3<f32>(0.0)), vec3<f32>(1.0 / 2.4)) - 0.055;
38
+ return select(hi, lo, c <= vec3<f32>(0.0031308));
39
+ }
40
+
41
+ fn neutralCompress(cIn: vec3<f32>) -> vec3<f32> {
42
+ let startCompression = 0.76;
43
+ let desaturation = 0.15;
44
+ let c = max(cIn, vec3<f32>(0.0));
45
+ let peak = max(c.r, max(c.g, c.b));
46
+ if (peak < startCompression) { return c; }
47
+ let d = 1.0 - startCompression;
48
+ let newPeak = 1.0 - d * d / (peak + d - startCompression);
49
+ let g = 1.0 - 1.0 / (desaturation * (peak - newPeak) + 1.0);
50
+ return mix(c * (newPeak / peak), vec3<f32>(newPeak), g);
51
+ }
52
+ `;
53
+ //# sourceMappingURL=color-transfer.wgsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-transfer.wgsl.js","sourceRoot":"","sources":["../../src/shaders/color-transfer.wgsl.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBhC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * WGSL twin of `depth-reconstruct.ts`: view-space position and normal from
3
+ * the scene's reverse-Z depth buffer, shared by the screen-space passes so
4
+ * each one reconstructs geometry the same way.
5
+ *
6
+ * `dp` is `[m10, m11, m14, m15]` and `xy` is `[m0, m5, m12, m13]` of the
7
+ * camera projection (see `depthReconstructParams`).
8
+ */
9
+ /**
10
+ * Declares `depthTex` at `@group(0) @binding(binding)` and `loadDepth(ip)`,
11
+ * which clamps the coordinate to the texture and reads sample 0 when the
12
+ * attachment is multisampled.
13
+ */
14
+ export declare function depthTextureWgsl(binding: number, multisampled: boolean): string;
15
+ export declare const depthReconstructWgsl = "\n // Reverse-Z clears to 0, so anything at or below this is background.\n const BACKGROUND_DEPTH: f32 = 1e-7;\n\n fn viewZFromDepth(d: f32, dp: vec4<f32>) -> f32 {\n return (dp.z - d * dp.w) / (d * dp.y - dp.x);\n }\n\n fn clipWFromViewZ(z: f32, dp: vec4<f32>) -> f32 {\n return dp.y * z + dp.w;\n }\n\n // Pixel centre to NDC (y up), for a buffer whose texel size is invDims.\n fn ndcFromPixel(ip: vec2<i32>, invDims: vec2<f32>) -> vec2<f32> {\n let uv = (vec2<f32>(ip) + 0.5) * invDims;\n return vec2<f32>(uv.x * 2.0 - 1.0, 1.0 - uv.y * 2.0);\n }\n\n fn viewPositionFromDepth(ndc: vec2<f32>, d: f32, dp: vec4<f32>, xy: vec4<f32>) -> vec3<f32> {\n let z = viewZFromDepth(d, dp);\n let w = clipWFromViewZ(z, dp);\n return vec3<f32>((ndc.x * w - xy.z) / xy.x, (ndc.y * w - xy.w) / xy.y, z);\n }\n\n // Normal facing the camera, from a position and its four pixel\n // neighbours. On each axis it takes the neighbour with the smaller\n // depth step, so a pixel on a silhouette or a crease uses the side\n // on its own surface instead of averaging across the edge.\n fn normalFromNeighbours(\n p: vec3<f32>, right: vec3<f32>, left: vec3<f32>, down: vec3<f32>, up: vec3<f32>,\n ) -> vec3<f32> {\n let dxR = right - p;\n let dxL = p - left;\n let dx = select(dxR, dxL, abs(dxL.z) < abs(dxR.z));\n let dyD = down - p;\n let dyU = p - up;\n let dy = select(dyD, dyU, abs(dyU.z) < abs(dyD.z));\n // Pixel +x is view +x and pixel +y is view -y, so dy x dx faces +z.\n return normalize(cross(dy, dx));\n }\n";
16
+ //# sourceMappingURL=depth-reconstruct.wgsl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"depth-reconstruct.wgsl.d.ts","sourceRoot":"","sources":["../../src/shaders/depth-reconstruct.wgsl.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAU/E;AAED,eAAO,MAAM,oBAAoB,+uDAwChC,CAAC"}
@@ -0,0 +1,69 @@
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
+ * WGSL twin of `depth-reconstruct.ts`: view-space position and normal from
6
+ * the scene's reverse-Z depth buffer, shared by the screen-space passes so
7
+ * each one reconstructs geometry the same way.
8
+ *
9
+ * `dp` is `[m10, m11, m14, m15]` and `xy` is `[m0, m5, m12, m13]` of the
10
+ * camera projection (see `depthReconstructParams`).
11
+ */
12
+ /**
13
+ * Declares `depthTex` at `@group(0) @binding(binding)` and `loadDepth(ip)`,
14
+ * which clamps the coordinate to the texture and reads sample 0 when the
15
+ * attachment is multisampled.
16
+ */
17
+ export function depthTextureWgsl(binding, multisampled) {
18
+ const type = multisampled ? 'texture_depth_multisampled_2d' : 'texture_depth_2d';
19
+ return `
20
+ @group(0) @binding(${binding}) var depthTex: ${type};
21
+
22
+ fn loadDepth(ip: vec2<i32>) -> f32 {
23
+ let dims = vec2<i32>(textureDimensions(depthTex));
24
+ return textureLoad(depthTex, clamp(ip, vec2<i32>(0), dims - 1), 0);
25
+ }
26
+ `;
27
+ }
28
+ export const depthReconstructWgsl = `
29
+ // Reverse-Z clears to 0, so anything at or below this is background.
30
+ const BACKGROUND_DEPTH: f32 = 1e-7;
31
+
32
+ fn viewZFromDepth(d: f32, dp: vec4<f32>) -> f32 {
33
+ return (dp.z - d * dp.w) / (d * dp.y - dp.x);
34
+ }
35
+
36
+ fn clipWFromViewZ(z: f32, dp: vec4<f32>) -> f32 {
37
+ return dp.y * z + dp.w;
38
+ }
39
+
40
+ // Pixel centre to NDC (y up), for a buffer whose texel size is invDims.
41
+ fn ndcFromPixel(ip: vec2<i32>, invDims: vec2<f32>) -> vec2<f32> {
42
+ let uv = (vec2<f32>(ip) + 0.5) * invDims;
43
+ return vec2<f32>(uv.x * 2.0 - 1.0, 1.0 - uv.y * 2.0);
44
+ }
45
+
46
+ fn viewPositionFromDepth(ndc: vec2<f32>, d: f32, dp: vec4<f32>, xy: vec4<f32>) -> vec3<f32> {
47
+ let z = viewZFromDepth(d, dp);
48
+ let w = clipWFromViewZ(z, dp);
49
+ return vec3<f32>((ndc.x * w - xy.z) / xy.x, (ndc.y * w - xy.w) / xy.y, z);
50
+ }
51
+
52
+ // Normal facing the camera, from a position and its four pixel
53
+ // neighbours. On each axis it takes the neighbour with the smaller
54
+ // depth step, so a pixel on a silhouette or a crease uses the side
55
+ // on its own surface instead of averaging across the edge.
56
+ fn normalFromNeighbours(
57
+ p: vec3<f32>, right: vec3<f32>, left: vec3<f32>, down: vec3<f32>, up: vec3<f32>,
58
+ ) -> vec3<f32> {
59
+ let dxR = right - p;
60
+ let dxL = p - left;
61
+ let dx = select(dxR, dxL, abs(dxL.z) < abs(dxR.z));
62
+ let dyD = down - p;
63
+ let dyU = p - up;
64
+ let dy = select(dyD, dyU, abs(dyU.z) < abs(dyD.z));
65
+ // Pixel +x is view +x and pixel +y is view -y, so dy x dx faces +z.
66
+ return normalize(cross(dy, dx));
67
+ }
68
+ `;
69
+ //# sourceMappingURL=depth-reconstruct.wgsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"depth-reconstruct.wgsl.js","sourceRoot":"","sources":["../../src/shaders/depth-reconstruct.wgsl.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;GAOG;AAEH;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,YAAqB;IACrE,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACjF,OAAO;6BACoB,OAAO,mBAAmB,IAAI;;;;;;CAM1D,CAAC;AACF,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCnC,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** RTE vertex reconstruction and shadow sampling composed into the main WGSL. */
2
+ export declare const mainRteWgsl = "\n fn rtePosition(local: vec3<f32>) -> vec4<f32> {\n let linear = (uniforms.model * vec4<f32>(local, 0.0)).xyz;\n return rteWorldPosition(linear, RteDrawableUniform(\n uniforms.drawableDeltaHigh,\n uniforms.drawableDeltaLow,\n ));\n }\n fn rteInstancePosition(local: vec3<f32>, anchorHigh: vec3<f32>, anchorLow: vec3<f32>) -> vec4<f32> {\n return rteWorldPosition(local, RteDrawableUniform(\n vec4<f32>(anchorHigh, 0.0),\n vec4<f32>(anchorLow, 0.0),\n ));\n }";
3
+ export declare const mainShadowWgsl = "\n @binding(1) @group(1) var shadowMap: texture_depth_2d;\n @binding(2) @group(1) var shadowCmp: sampler_comparison;\n struct Shadow { lightViewProj: mat4x4<f32>, params: vec4<f32>, params2: vec4<f32>, }\n @binding(3) @group(1) var<uniform> shadowU: Shadow;\n const SHADOW_POISSON = array<vec2<f32>, 12>(\n vec2<f32>(-0.326, -0.406), vec2<f32>(-0.840, -0.074), vec2<f32>(-0.696, 0.457),\n vec2<f32>(-0.203, 0.621), vec2<f32>( 0.962, -0.195), vec2<f32>( 0.473, -0.480),\n vec2<f32>( 0.519, 0.767), vec2<f32>( 0.185, -0.893), vec2<f32>( 0.507, 0.064),\n vec2<f32>( 0.896, 0.412), vec2<f32>(-0.322, -0.933), vec2<f32>(-0.792, -0.598),\n );\n fn sunShadowFactor(eyePos: vec3<f32>, N: vec3<f32>, fragCoord: vec2<f32>) -> f32 {\n if (shadowU.params.y < 0.5) { return 1.0; }\n let L = normalize(env.sunDirection);\n let Ns = N * select(-1.0, 1.0, dot(N, L) >= 0.0);\n let biased = eyePos + Ns * shadowU.params.z;\n let clip = shadowU.lightViewProj * vec4<f32>(biased, 1.0);\n let ndc = clip.xyz / clip.w;\n let uv = vec2<f32>(ndc.x * 0.5 + 0.5, ndc.y * -0.5 + 0.5);\n let inBounds = uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0 && ndc.z > 0.0;\n if (!inBounds) { return 1.0; }\n let NdotL = max(dot(Ns, L), 0.0);\n let slope = clamp(sqrt(max(1.0 - NdotL * NdotL, 0.0)) / max(NdotL, 0.1), 1.0, 12.0);\n let refDepth = ndc.z + shadowU.params2.x * slope * (1.0 + shadowU.params.w);\n let radius = shadowU.params.x * shadowU.params.w;\n let ign = fract(52.9829189 * fract(dot(fragCoord, vec2<f32>(0.06711056, 0.00583715))));\n let ang = ign * 6.2831853;\n let cr = cos(ang); let sr = sin(ang); var sum = 0.0;\n for (var i = 0; i < 12; i = i + 1) {\n let p = SHADOW_POISSON[i];\n let off = vec2<f32>(p.x * cr - p.y * sr, p.x * sr + p.y * cr) * radius;\n sum = sum + textureSampleCompareLevel(shadowMap, shadowCmp, uv + off, refDepth);\n }\n return mix(1.0, sum / 12.0, smoothstep(0.0, 0.3, NdotL));\n }";
4
+ //# sourceMappingURL=main-rte-shadow.wgsl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-rte-shadow.wgsl.d.ts","sourceRoot":"","sources":["../../src/shaders/main-rte-shadow.wgsl.ts"],"names":[],"mappings":"AAIA,iFAAiF;AAEjF,eAAO,MAAM,WAAW,qkBAad,CAAC;AAEX,eAAO,MAAM,cAAc,gqEAkCjB,CAAC"}
@@ -0,0 +1,54 @@
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
+ /** RTE vertex reconstruction and shadow sampling composed into the main WGSL. */
5
+ export const mainRteWgsl = `
6
+ fn rtePosition(local: vec3<f32>) -> vec4<f32> {
7
+ let linear = (uniforms.model * vec4<f32>(local, 0.0)).xyz;
8
+ return rteWorldPosition(linear, RteDrawableUniform(
9
+ uniforms.drawableDeltaHigh,
10
+ uniforms.drawableDeltaLow,
11
+ ));
12
+ }
13
+ fn rteInstancePosition(local: vec3<f32>, anchorHigh: vec3<f32>, anchorLow: vec3<f32>) -> vec4<f32> {
14
+ return rteWorldPosition(local, RteDrawableUniform(
15
+ vec4<f32>(anchorHigh, 0.0),
16
+ vec4<f32>(anchorLow, 0.0),
17
+ ));
18
+ }`;
19
+ export const mainShadowWgsl = `
20
+ @binding(1) @group(1) var shadowMap: texture_depth_2d;
21
+ @binding(2) @group(1) var shadowCmp: sampler_comparison;
22
+ struct Shadow { lightViewProj: mat4x4<f32>, params: vec4<f32>, params2: vec4<f32>, }
23
+ @binding(3) @group(1) var<uniform> shadowU: Shadow;
24
+ const SHADOW_POISSON = array<vec2<f32>, 12>(
25
+ vec2<f32>(-0.326, -0.406), vec2<f32>(-0.840, -0.074), vec2<f32>(-0.696, 0.457),
26
+ vec2<f32>(-0.203, 0.621), vec2<f32>( 0.962, -0.195), vec2<f32>( 0.473, -0.480),
27
+ vec2<f32>( 0.519, 0.767), vec2<f32>( 0.185, -0.893), vec2<f32>( 0.507, 0.064),
28
+ vec2<f32>( 0.896, 0.412), vec2<f32>(-0.322, -0.933), vec2<f32>(-0.792, -0.598),
29
+ );
30
+ fn sunShadowFactor(eyePos: vec3<f32>, N: vec3<f32>, fragCoord: vec2<f32>) -> f32 {
31
+ if (shadowU.params.y < 0.5) { return 1.0; }
32
+ let L = normalize(env.sunDirection);
33
+ let Ns = N * select(-1.0, 1.0, dot(N, L) >= 0.0);
34
+ let biased = eyePos + Ns * shadowU.params.z;
35
+ let clip = shadowU.lightViewProj * vec4<f32>(biased, 1.0);
36
+ let ndc = clip.xyz / clip.w;
37
+ let uv = vec2<f32>(ndc.x * 0.5 + 0.5, ndc.y * -0.5 + 0.5);
38
+ let inBounds = uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0 && ndc.z > 0.0;
39
+ if (!inBounds) { return 1.0; }
40
+ let NdotL = max(dot(Ns, L), 0.0);
41
+ let slope = clamp(sqrt(max(1.0 - NdotL * NdotL, 0.0)) / max(NdotL, 0.1), 1.0, 12.0);
42
+ let refDepth = ndc.z + shadowU.params2.x * slope * (1.0 + shadowU.params.w);
43
+ let radius = shadowU.params.x * shadowU.params.w;
44
+ let ign = fract(52.9829189 * fract(dot(fragCoord, vec2<f32>(0.06711056, 0.00583715))));
45
+ let ang = ign * 6.2831853;
46
+ let cr = cos(ang); let sr = sin(ang); var sum = 0.0;
47
+ for (var i = 0; i < 12; i = i + 1) {
48
+ let p = SHADOW_POISSON[i];
49
+ let off = vec2<f32>(p.x * cr - p.y * sr, p.x * sr + p.y * cr) * radius;
50
+ sum = sum + textureSampleCompareLevel(shadowMap, shadowCmp, uv + off, refDepth);
51
+ }
52
+ return mix(1.0, sum / 12.0, smoothstep(0.0, 0.3, NdotL));
53
+ }`;
54
+ //# sourceMappingURL=main-rte-shadow.wgsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-rte-shadow.wgsl.js","sourceRoot":"","sources":["../../src/shaders/main-rte-shadow.wgsl.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,iFAAiF;AAEjF,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;UAajB,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAkCpB,CAAC"}