@aura3d/rendering 2.0.4 → 3.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 (288) hide show
  1. package/dist/AtmosphereWetness.d.ts +61 -0
  2. package/dist/AtmosphereWetness.d.ts.map +1 -0
  3. package/dist/AtmosphereWetness.js +99 -0
  4. package/dist/AtmosphereWetness.js.map +1 -0
  5. package/dist/ClusteredForwardLighting.d.ts +25 -1
  6. package/dist/ClusteredForwardLighting.d.ts.map +1 -1
  7. package/dist/ClusteredForwardLighting.js +80 -3
  8. package/dist/ClusteredForwardLighting.js.map +1 -1
  9. package/dist/DayNightSky.d.ts +63 -0
  10. package/dist/DayNightSky.d.ts.map +1 -0
  11. package/dist/DayNightSky.js +156 -0
  12. package/dist/DayNightSky.js.map +1 -0
  13. package/dist/EnvironmentPresetPack.d.ts +30 -0
  14. package/dist/EnvironmentPresetPack.d.ts.map +1 -0
  15. package/dist/EnvironmentPresetPack.js +49 -0
  16. package/dist/EnvironmentPresetPack.js.map +1 -0
  17. package/dist/ForwardPass.d.ts +65 -0
  18. package/dist/ForwardPass.d.ts.map +1 -1
  19. package/dist/ForwardPass.js +196 -2
  20. package/dist/ForwardPass.js.map +1 -1
  21. package/dist/InstancedPBRMaterial.d.ts +1 -0
  22. package/dist/InstancedPBRMaterial.d.ts.map +1 -1
  23. package/dist/InstancedPBRMaterial.js +3 -0
  24. package/dist/InstancedPBRMaterial.js.map +1 -1
  25. package/dist/InstancingDiagnostics.d.ts +69 -0
  26. package/dist/InstancingDiagnostics.d.ts.map +1 -0
  27. package/dist/InstancingDiagnostics.js +98 -0
  28. package/dist/InstancingDiagnostics.js.map +1 -0
  29. package/dist/LightingRig.d.ts +19 -1
  30. package/dist/LightingRig.d.ts.map +1 -1
  31. package/dist/LightingRig.js +61 -1
  32. package/dist/LightingRig.js.map +1 -1
  33. package/dist/MeshConsolidation.d.ts +12 -0
  34. package/dist/MeshConsolidation.d.ts.map +1 -1
  35. package/dist/MeshConsolidation.js +28 -0
  36. package/dist/MeshConsolidation.js.map +1 -1
  37. package/dist/MorphTargetPlan.d.ts +29 -2
  38. package/dist/MorphTargetPlan.d.ts.map +1 -1
  39. package/dist/MorphTargetPlan.js +23 -4
  40. package/dist/MorphTargetPlan.js.map +1 -1
  41. package/dist/NormalMappedPBRMaterial.d.ts.map +1 -1
  42. package/dist/NormalMappedPBRMaterial.js +22 -2
  43. package/dist/NormalMappedPBRMaterial.js.map +1 -1
  44. package/dist/OceanSurface.d.ts +75 -0
  45. package/dist/OceanSurface.d.ts.map +1 -1
  46. package/dist/OceanSurface.js +211 -0
  47. package/dist/OceanSurface.js.map +1 -1
  48. package/dist/PBRMaterial.d.ts +1 -0
  49. package/dist/PBRMaterial.d.ts.map +1 -1
  50. package/dist/PBRMaterial.js +23 -2
  51. package/dist/PBRMaterial.js.map +1 -1
  52. package/dist/PbrReference.d.ts +48 -0
  53. package/dist/PbrReference.d.ts.map +1 -1
  54. package/dist/PbrReference.js +126 -0
  55. package/dist/PbrReference.js.map +1 -1
  56. package/dist/PlanarReflection.d.ts +221 -0
  57. package/dist/PlanarReflection.d.ts.map +1 -0
  58. package/dist/PlanarReflection.js +541 -0
  59. package/dist/PlanarReflection.js.map +1 -0
  60. package/dist/PostProcessPass.d.ts +13 -0
  61. package/dist/PostProcessPass.d.ts.map +1 -1
  62. package/dist/PostProcessPass.js +15 -4
  63. package/dist/PostProcessPass.js.map +1 -1
  64. package/dist/ReflectionSurfaces.d.ts +14 -0
  65. package/dist/ReflectionSurfaces.d.ts.map +1 -1
  66. package/dist/ReflectionSurfaces.js +93 -0
  67. package/dist/ReflectionSurfaces.js.map +1 -1
  68. package/dist/RenderDevice.d.ts +87 -0
  69. package/dist/RenderDevice.d.ts.map +1 -1
  70. package/dist/RenderDevice.js +85 -0
  71. package/dist/RenderDevice.js.map +1 -1
  72. package/dist/Renderer.js +3 -1
  73. package/dist/Renderer.js.map +1 -1
  74. package/dist/RendererPostprocessPlan.d.ts +48 -0
  75. package/dist/RendererPostprocessPlan.d.ts.map +1 -1
  76. package/dist/RendererPostprocessPlan.js +101 -11
  77. package/dist/RendererPostprocessPlan.js.map +1 -1
  78. package/dist/RendererVisualPipelineReport.d.ts.map +1 -1
  79. package/dist/RendererVisualPipelineReport.js +3 -1
  80. package/dist/RendererVisualPipelineReport.js.map +1 -1
  81. package/dist/Sampler.d.ts +29 -0
  82. package/dist/Sampler.d.ts.map +1 -1
  83. package/dist/Sampler.js +47 -0
  84. package/dist/Sampler.js.map +1 -1
  85. package/dist/SdfText.d.ts +250 -0
  86. package/dist/SdfText.d.ts.map +1 -0
  87. package/dist/SdfText.js +551 -0
  88. package/dist/SdfText.js.map +1 -0
  89. package/dist/ShaderChunks.d.ts.map +1 -1
  90. package/dist/ShaderChunks.js +30 -12
  91. package/dist/ShaderChunks.js.map +1 -1
  92. package/dist/ShaderLibrary.d.ts.map +1 -1
  93. package/dist/ShaderLibrary.js +478 -34
  94. package/dist/ShaderLibrary.js.map +1 -1
  95. package/dist/ShaderLibraryCore.d.ts.map +1 -1
  96. package/dist/ShaderLibraryCore.js +70 -12
  97. package/dist/ShaderLibraryCore.js.map +1 -1
  98. package/dist/ShadowMap.d.ts +24 -0
  99. package/dist/ShadowMap.d.ts.map +1 -1
  100. package/dist/ShadowMap.js +43 -0
  101. package/dist/ShadowMap.js.map +1 -1
  102. package/dist/SkinnedLitMaterial.d.ts.map +1 -1
  103. package/dist/SkinnedLitMaterial.js +2 -0
  104. package/dist/SkinnedLitMaterial.js.map +1 -1
  105. package/dist/SkinningBounds.d.ts +10 -0
  106. package/dist/SkinningBounds.d.ts.map +1 -1
  107. package/dist/SkinningBounds.js +27 -0
  108. package/dist/SkinningBounds.js.map +1 -1
  109. package/dist/SpriteFlipbook.d.ts +60 -0
  110. package/dist/SpriteFlipbook.d.ts.map +1 -0
  111. package/dist/SpriteFlipbook.js +128 -0
  112. package/dist/SpriteFlipbook.js.map +1 -0
  113. package/dist/TerrainTiles.d.ts +120 -0
  114. package/dist/TerrainTiles.d.ts.map +1 -0
  115. package/dist/TerrainTiles.js +221 -0
  116. package/dist/TerrainTiles.js.map +1 -0
  117. package/dist/TexturedPBRMaterial.d.ts +1 -0
  118. package/dist/TexturedPBRMaterial.d.ts.map +1 -1
  119. package/dist/TexturedPBRMaterial.js +23 -2
  120. package/dist/TexturedPBRMaterial.js.map +1 -1
  121. package/dist/TexturedUnlitMaterial.d.ts.map +1 -1
  122. package/dist/TexturedUnlitMaterial.js +20 -2
  123. package/dist/TexturedUnlitMaterial.js.map +1 -1
  124. package/dist/UnlitMaterial.d.ts.map +1 -1
  125. package/dist/UnlitMaterial.js +20 -2
  126. package/dist/UnlitMaterial.js.map +1 -1
  127. package/dist/VertexFormat.d.ts +6 -0
  128. package/dist/VertexFormat.d.ts.map +1 -1
  129. package/dist/VertexFormat.js +12 -0
  130. package/dist/VertexFormat.js.map +1 -1
  131. package/dist/VolumetricFog.d.ts +55 -0
  132. package/dist/VolumetricFog.d.ts.map +1 -0
  133. package/dist/VolumetricFog.js +91 -0
  134. package/dist/VolumetricFog.js.map +1 -0
  135. package/dist/WaterSurface.d.ts +77 -0
  136. package/dist/WaterSurface.d.ts.map +1 -0
  137. package/dist/WaterSurface.js +133 -0
  138. package/dist/WaterSurface.js.map +1 -0
  139. package/dist/WebGL2Device.d.ts +58 -0
  140. package/dist/WebGL2Device.d.ts.map +1 -1
  141. package/dist/WebGL2Device.js +536 -17
  142. package/dist/WebGL2Device.js.map +1 -1
  143. package/dist/WebGPUDevice.d.ts +50 -0
  144. package/dist/WebGPUDevice.d.ts.map +1 -1
  145. package/dist/WebGPUDevice.js +504 -10
  146. package/dist/WebGPUDevice.js.map +1 -1
  147. package/dist/WebGPUSkinningLimits.d.ts +40 -0
  148. package/dist/WebGPUSkinningLimits.d.ts.map +1 -1
  149. package/dist/WebGPUSkinningLimits.js +32 -0
  150. package/dist/WebGPUSkinningLimits.js.map +1 -1
  151. package/dist/effects/CollisionModule.d.ts +9 -0
  152. package/dist/effects/CollisionModule.d.ts.map +1 -1
  153. package/dist/effects/CollisionModule.js +10 -0
  154. package/dist/effects/CollisionModule.js.map +1 -1
  155. package/dist/effects/ColorModule.d.ts +7 -0
  156. package/dist/effects/ColorModule.d.ts.map +1 -1
  157. package/dist/effects/ColorModule.js +23 -0
  158. package/dist/effects/ColorModule.js.map +1 -1
  159. package/dist/effects/ForceModule.d.ts +35 -0
  160. package/dist/effects/ForceModule.d.ts.map +1 -1
  161. package/dist/effects/ForceModule.js +49 -0
  162. package/dist/effects/ForceModule.js.map +1 -1
  163. package/dist/effects/GPUParticleBackend.d.ts +186 -0
  164. package/dist/effects/GPUParticleBackend.d.ts.map +1 -1
  165. package/dist/effects/GPUParticleBackend.js +692 -1
  166. package/dist/effects/GPUParticleBackend.js.map +1 -1
  167. package/dist/effects/HeightfieldModule.d.ts +58 -0
  168. package/dist/effects/HeightfieldModule.d.ts.map +1 -0
  169. package/dist/effects/HeightfieldModule.js +129 -0
  170. package/dist/effects/HeightfieldModule.js.map +1 -0
  171. package/dist/effects/LightingModule.d.ts +34 -0
  172. package/dist/effects/LightingModule.d.ts.map +1 -0
  173. package/dist/effects/LightingModule.js +54 -0
  174. package/dist/effects/LightingModule.js.map +1 -0
  175. package/dist/effects/ParticleDiagnostics.d.ts +8 -0
  176. package/dist/effects/ParticleDiagnostics.d.ts.map +1 -1
  177. package/dist/effects/ParticleDiagnostics.js +3 -0
  178. package/dist/effects/ParticleDiagnostics.js.map +1 -1
  179. package/dist/effects/ParticleModule.d.ts +8 -0
  180. package/dist/effects/ParticleModule.d.ts.map +1 -1
  181. package/dist/effects/ParticleModule.js.map +1 -1
  182. package/dist/effects/ParticleRenderer.d.ts +20 -0
  183. package/dist/effects/ParticleRenderer.d.ts.map +1 -1
  184. package/dist/effects/ParticleRenderer.js +57 -7
  185. package/dist/effects/ParticleRenderer.js.map +1 -1
  186. package/dist/effects/ParticleSystem.d.ts +45 -1
  187. package/dist/effects/ParticleSystem.d.ts.map +1 -1
  188. package/dist/effects/ParticleSystem.js +373 -4
  189. package/dist/effects/ParticleSystem.js.map +1 -1
  190. package/dist/effects/SizeModule.d.ts +4 -0
  191. package/dist/effects/SizeModule.d.ts.map +1 -1
  192. package/dist/effects/SizeModule.js +16 -0
  193. package/dist/effects/SizeModule.js.map +1 -1
  194. package/dist/effects/SubEmitterModule.d.ts +61 -0
  195. package/dist/effects/SubEmitterModule.d.ts.map +1 -0
  196. package/dist/effects/SubEmitterModule.js +119 -0
  197. package/dist/effects/SubEmitterModule.js.map +1 -0
  198. package/dist/effects/TrailModule.d.ts +38 -0
  199. package/dist/effects/TrailModule.d.ts.map +1 -1
  200. package/dist/effects/TrailModule.js +95 -2
  201. package/dist/effects/TrailModule.js.map +1 -1
  202. package/dist/effects/TurbulenceModule.d.ts +43 -0
  203. package/dist/effects/TurbulenceModule.d.ts.map +1 -0
  204. package/dist/effects/TurbulenceModule.js +130 -0
  205. package/dist/effects/TurbulenceModule.js.map +1 -0
  206. package/dist/effects/index.d.ts +4 -0
  207. package/dist/effects/index.d.ts.map +1 -1
  208. package/dist/effects/index.js +4 -0
  209. package/dist/effects/index.js.map +1 -1
  210. package/dist/index.d.ts +57 -19
  211. package/dist/index.d.ts.map +1 -1
  212. package/dist/index.js +31 -10
  213. package/dist/index.js.map +1 -1
  214. package/dist/materials/MaterialExtensions.js +3 -3
  215. package/dist/materials/MaterialExtensions.js.map +1 -1
  216. package/dist/postprocess/NativeBloomPyramid.d.ts +28 -0
  217. package/dist/postprocess/NativeBloomPyramid.d.ts.map +1 -0
  218. package/dist/postprocess/NativeBloomPyramid.js +54 -0
  219. package/dist/postprocess/NativeBloomPyramid.js.map +1 -0
  220. package/dist/postprocess/NativeLdrEffectLuts.d.ts +10 -1
  221. package/dist/postprocess/NativeLdrEffectLuts.d.ts.map +1 -1
  222. package/dist/postprocess/NativeLdrEffectLuts.js +19 -2
  223. package/dist/postprocess/NativeLdrEffectLuts.js.map +1 -1
  224. package/dist/postprocess/index.d.ts +2 -0
  225. package/dist/postprocess/index.d.ts.map +1 -1
  226. package/dist/postprocess/index.js +1 -0
  227. package/dist/postprocess/index.js.map +1 -1
  228. package/dist/production-runtime/PBRHDRPipeline.d.ts +22 -0
  229. package/dist/production-runtime/PBRHDRPipeline.d.ts.map +1 -1
  230. package/dist/production-runtime/PBRHDRPipeline.js +125 -0
  231. package/dist/production-runtime/PBRHDRPipeline.js.map +1 -1
  232. package/dist/production-runtime/ProductionWebGPURenderer.d.ts +52 -0
  233. package/dist/production-runtime/ProductionWebGPURenderer.d.ts.map +1 -1
  234. package/dist/production-runtime/ProductionWebGPURenderer.js +101 -0
  235. package/dist/production-runtime/ProductionWebGPURenderer.js.map +1 -1
  236. package/dist/production-runtime/index.d.ts +5 -4
  237. package/dist/production-runtime/index.d.ts.map +1 -1
  238. package/dist/production-runtime/index.js +3 -2
  239. package/dist/production-runtime/index.js.map +1 -1
  240. package/dist/production-runtime/passes/DepthPrepass.d.ts +26 -1
  241. package/dist/production-runtime/passes/DepthPrepass.d.ts.map +1 -1
  242. package/dist/production-runtime/passes/DepthPrepass.js +49 -2
  243. package/dist/production-runtime/passes/DepthPrepass.js.map +1 -1
  244. package/dist/production-runtime/passes/FramegraphTopology.d.ts +13 -0
  245. package/dist/production-runtime/passes/FramegraphTopology.d.ts.map +1 -0
  246. package/dist/production-runtime/passes/FramegraphTopology.js +59 -0
  247. package/dist/production-runtime/passes/FramegraphTopology.js.map +1 -0
  248. package/dist/production-runtime/passes/OpaquePass.d.ts +24 -1
  249. package/dist/production-runtime/passes/OpaquePass.d.ts.map +1 -1
  250. package/dist/production-runtime/passes/OpaquePass.js +41 -2
  251. package/dist/production-runtime/passes/OpaquePass.js.map +1 -1
  252. package/dist/production-runtime/passes/ShadowPass.d.ts +24 -1
  253. package/dist/production-runtime/passes/ShadowPass.d.ts.map +1 -1
  254. package/dist/production-runtime/passes/ShadowPass.js +43 -2
  255. package/dist/production-runtime/passes/ShadowPass.js.map +1 -1
  256. package/dist/production-runtime/passes/SkyboxPass.d.ts +21 -1
  257. package/dist/production-runtime/passes/SkyboxPass.d.ts.map +1 -1
  258. package/dist/production-runtime/passes/SkyboxPass.js +39 -2
  259. package/dist/production-runtime/passes/SkyboxPass.js.map +1 -1
  260. package/dist/production-runtime/passes/ToneMappingPass.d.ts +29 -1
  261. package/dist/production-runtime/passes/ToneMappingPass.d.ts.map +1 -1
  262. package/dist/production-runtime/passes/ToneMappingPass.js +53 -2
  263. package/dist/production-runtime/passes/ToneMappingPass.js.map +1 -1
  264. package/dist/production-runtime/passes/TransparentPass.d.ts +24 -1
  265. package/dist/production-runtime/passes/TransparentPass.d.ts.map +1 -1
  266. package/dist/production-runtime/passes/TransparentPass.js +42 -2
  267. package/dist/production-runtime/passes/TransparentPass.js.map +1 -1
  268. package/dist/shadows/CascadeHysteresis.d.ts +67 -0
  269. package/dist/shadows/CascadeHysteresis.d.ts.map +1 -0
  270. package/dist/shadows/CascadeHysteresis.js +104 -0
  271. package/dist/shadows/CascadeHysteresis.js.map +1 -0
  272. package/dist/shadows/ContactShadows.d.ts +52 -0
  273. package/dist/shadows/ContactShadows.d.ts.map +1 -1
  274. package/dist/shadows/ContactShadows.js +122 -0
  275. package/dist/shadows/ContactShadows.js.map +1 -1
  276. package/dist/shadows/SpotShadowMaps.d.ts +77 -0
  277. package/dist/shadows/SpotShadowMaps.d.ts.map +1 -0
  278. package/dist/shadows/SpotShadowMaps.js +106 -0
  279. package/dist/shadows/SpotShadowMaps.js.map +1 -0
  280. package/dist/webgpu/WebGPUPostProcess.d.ts +2 -0
  281. package/dist/webgpu/WebGPUPostProcess.d.ts.map +1 -1
  282. package/dist/webgpu/WebGPUPostProcess.js +1 -0
  283. package/dist/webgpu/WebGPUPostProcess.js.map +1 -1
  284. package/dist/webgpu/WebGPUPostShaders.d.ts +78 -0
  285. package/dist/webgpu/WebGPUPostShaders.d.ts.map +1 -0
  286. package/dist/webgpu/WebGPUPostShaders.js +262 -0
  287. package/dist/webgpu/WebGPUPostShaders.js.map +1 -0
  288. package/package.json +3 -3
@@ -0,0 +1,551 @@
1
+ /**
2
+ * SDF world text for the rendering package (muse3jsparity-PRD G1).
3
+ *
4
+ * ## What this is
5
+ *
6
+ * CPU-side signed-distance-field text: a font atlas baked from the same
7
+ * uppercase-alphanumeric 5x7 bitmap catalog as root `text3D`, plus layout into
8
+ * textured quads, analytic coverage sampling, LOD fade, and occlusion policy
9
+ * helpers. The GPU half (atlas upload + quad submission) belongs to the
10
+ * production-runtime bridge; this module produces the data it consumes and the
11
+ * diagnostics that prove the swap happened (`textPixelBacked`).
12
+ *
13
+ * ## What this is not
14
+ *
15
+ * - Not a font stack: no font-file loading, no Unicode shaping, no kerning, no
16
+ * CJK, no paragraph layout. Supported glyphs are exactly `A-Z 0-9 space - .`
17
+ * (see `SDF_SUPPORTED_GLYPHS`). Anything else is recorded on the layout as
18
+ * `unsupportedCharacters` and skipped — never silently substituted.
19
+ * - Not troika-three-text parity and not TextGeometry parity. The claim label
20
+ * is `production-runtime` SDF text, proven by `textPixelBacked` diagnostics.
21
+ * - Not DOM text. DOM labels (`labels.*` / `ui.*`) stay the accessible
22
+ * surface; SDF text is the lit/occluded in-world surface. Diagnostics keep
23
+ * the two counts separate (`summarizeTextSurfaces`).
24
+ *
25
+ * Pure: no DOM, no WebGL, no `three`. Fully unit-testable.
26
+ */
27
+ /** Exact glyph scope. Uppercase alphanumeric catalog shared with root `text3D`. */
28
+ export const SDF_SUPPORTED_GLYPHS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- .";
29
+ /**
30
+ * Font-scope honesty note (G1 checklist: "no arbitrary-shaping claim").
31
+ * Shaping beyond this catalog — lowercase mapping aside — is out of scope.
32
+ */
33
+ export const SDF_FONT_SCOPE_NOTE = "SDF text covers the uppercase alphanumeric catalog A-Z 0-9 space hyphen period; " +
34
+ "lowercase input is uppercased, all other characters are reported as unsupported and skipped. " +
35
+ "No font-file loading, Unicode shaping, kerning, or CJK.";
36
+ const GLYPH_COLUMNS = 5;
37
+ const GLYPH_ROWS = 7;
38
+ /** Opacity multiplier for an occluded SDF label under the `"dim"` policy. Mirrors the DOM label layer. */
39
+ export const SDF_OCCLUDED_OPACITY = 0.35;
40
+ /**
41
+ * Build the SDF font atlas from the built-in bitmap catalog.
42
+ *
43
+ * Distance is computed per atlas pixel by brute-force nearest-edge search over
44
+ * the upscaled 5x7 cell. The atlas is small (39 glyphs), so this stays fast
45
+ * (~39 cells x a few thousand pixels x 35 bitmap cells) and dependency-free.
46
+ */
47
+ export function createSdfFontAtlas(options = {}) {
48
+ const cellResolution = options.cellResolution ?? 8;
49
+ const padding = options.padding ?? 8;
50
+ if (!Number.isInteger(cellResolution) || cellResolution <= 0) {
51
+ throw new Error("Aura3D SDF atlas cellResolution must be a positive integer.");
52
+ }
53
+ if (!Number.isInteger(padding) || padding < 0) {
54
+ throw new Error("Aura3D SDF atlas padding must be a non-negative integer.");
55
+ }
56
+ const cellWidth = GLYPH_COLUMNS * cellResolution;
57
+ const cellHeight = GLYPH_ROWS * cellResolution;
58
+ const tileWidth = cellWidth + padding * 2;
59
+ const tileHeight = cellHeight + padding * 2;
60
+ const supported = [...SDF_SUPPORTED_GLYPHS];
61
+ const columns = Math.ceil(Math.sqrt(supported.length));
62
+ const rows = Math.ceil(supported.length / columns);
63
+ const width = columns * tileWidth;
64
+ const height = rows * tileHeight;
65
+ const distances = new Float32Array(width * height);
66
+ const glyphs = {};
67
+ supported.forEach((glyph, index) => {
68
+ const tileX = (index % columns) * tileWidth;
69
+ const tileY = Math.floor(index / columns) * tileHeight;
70
+ bakeGlyphDistance(distances, width, height, glyph, tileX + padding, tileY + padding, cellResolution);
71
+ glyphs[glyph] = {
72
+ glyph,
73
+ uv: [
74
+ (tileX + padding) / width,
75
+ (tileY + padding) / height,
76
+ (tileX + padding + cellWidth) / width,
77
+ (tileY + padding + cellHeight) / height
78
+ ],
79
+ advanceEm: GLYPH_COLUMNS / GLYPH_ROWS
80
+ };
81
+ });
82
+ return {
83
+ kind: "aura-sdf-font-atlas",
84
+ distances,
85
+ width,
86
+ height,
87
+ glyphs,
88
+ glyphCount: supported.length,
89
+ cellResolution,
90
+ padding,
91
+ spreadPixels: Math.hypot(cellWidth, cellHeight) / 2
92
+ };
93
+ }
94
+ /** Lay out a string into atlas-backed quads. Uppercase alphanumeric scope enforced. */
95
+ export function layoutSdfText(text, atlas, options = {}) {
96
+ if (!text.length)
97
+ throw new Error("Aura3D SDF text requires at least one character.");
98
+ const size = options.size ?? 1;
99
+ if (!Number.isFinite(size) || size <= 0)
100
+ throw new Error("Aura3D SDF text size must be positive.");
101
+ const spacing = options.letterSpacing ?? size * 0.14;
102
+ if (!Number.isFinite(spacing) || spacing < 0)
103
+ throw new Error("Aura3D SDF text letterSpacing must be non-negative.");
104
+ const style = normalizeStyle(options.style ?? {});
105
+ const cellWorld = size / GLYPH_ROWS;
106
+ const unsupported = new Set();
107
+ const quads = [];
108
+ let cursor = 0;
109
+ let glyphCount = 0;
110
+ for (const raw of text.toUpperCase()) {
111
+ if (raw === " ") {
112
+ cursor += size * 0.5 + spacing;
113
+ continue;
114
+ }
115
+ const metrics = atlas.glyphs[raw];
116
+ if (!metrics) {
117
+ unsupported.add(raw);
118
+ cursor += size * 0.5 + spacing;
119
+ continue;
120
+ }
121
+ glyphCount += 1;
122
+ const w = cellWorld * GLYPH_COLUMNS;
123
+ quads.push({
124
+ corners: [cursor, 0, cursor + w, 0, cursor + w, size, cursor, size],
125
+ uv: metrics.uv,
126
+ glyph: raw
127
+ });
128
+ cursor += w + spacing;
129
+ }
130
+ if (glyphCount === 0)
131
+ throw new Error("Aura3D SDF text contains no supported glyphs.");
132
+ return {
133
+ kind: "aura-sdf-text-layout",
134
+ text,
135
+ quads,
136
+ glyphCount,
137
+ unsupportedCharacters: [...unsupported],
138
+ widthWorld: cursor - spacing,
139
+ heightWorld: size,
140
+ method: "sdf-atlas-quad",
141
+ style
142
+ };
143
+ }
144
+ /**
145
+ * Analytic SDF coverage: 1 fully inside, 0 fully outside, smooth edge.
146
+ * `distance` is signed distance in em (positive inside), `smoothingEm` the edge width.
147
+ */
148
+ export function sampleSdfCoverage(distanceEm, smoothingEm) {
149
+ if (!Number.isFinite(distanceEm) || !Number.isFinite(smoothingEm) || smoothingEm <= 0) {
150
+ throw new Error("Aura3D SDF coverage requires a finite distance and positive smoothing.");
151
+ }
152
+ const t = distanceEm / smoothingEm;
153
+ if (t <= -1)
154
+ return 0;
155
+ if (t >= 1)
156
+ return 1;
157
+ return 0.5 + 0.25 * (3 * t - t * t * t);
158
+ }
159
+ /** LOD fade: 1 at or before `fadeNear`, 0 at or past `fadeFar`, smooth between. */
160
+ export function sdfTextLodFade(distance, fadeNear, fadeFar) {
161
+ if (!Number.isFinite(distance) || distance < 0)
162
+ throw new Error("Aura3D SDF LOD distance must be finite and non-negative.");
163
+ if (!Number.isFinite(fadeNear) || !Number.isFinite(fadeFar) || fadeNear < 0 || fadeFar <= fadeNear) {
164
+ throw new Error("Aura3D SDF LOD fade range requires 0 <= fadeNear < fadeFar.");
165
+ }
166
+ if (distance <= fadeNear)
167
+ return 1;
168
+ if (distance >= fadeFar)
169
+ return 0;
170
+ const t = (distance - fadeNear) / (fadeFar - fadeNear);
171
+ return 1 - t * t * (3 - 2 * t);
172
+ }
173
+ /** Occlusion handling for SDF text, mirroring the DOM label layer's dim/hide semantics. */
174
+ export function applySdfTextOcclusion(occluded, policy = "dim") {
175
+ if (!occluded)
176
+ return { visible: true, opacity: 1 };
177
+ if (policy === "hide")
178
+ return { visible: false, opacity: 0 };
179
+ if (policy === "show")
180
+ return { visible: true, opacity: 1 };
181
+ return { visible: true, opacity: SDF_OCCLUDED_OPACITY };
182
+ }
183
+ /** `textPixelBacked` diagnostics: fail-closed, never inferred from layout alone. */
184
+ export function describeSdfTextPixelBacking(input) {
185
+ const quadCount = input.quadCount ?? 0;
186
+ if (!input.atlasUploaded) {
187
+ return { textPixelBacked: false, reason: "sdf atlas not uploaded; no SDF pixels submitted", quadCount };
188
+ }
189
+ if (!input.quadsSubmitted || quadCount === 0) {
190
+ return { textPixelBacked: false, reason: "no SDF quads submitted this frame", quadCount };
191
+ }
192
+ return { textPixelBacked: true, reason: `${quadCount} SDF quads sampled from the uploaded atlas`, quadCount };
193
+ }
194
+ /**
195
+ * DOM-vs-3D inventory rule: the three text surfaces are reported as three
196
+ * numbers. Merging them is what let DOM counts masquerade as 3D proof.
197
+ */
198
+ export function summarizeTextSurfaces(input) {
199
+ for (const [key, value] of Object.entries(input)) {
200
+ if (!Number.isInteger(value) || value < 0)
201
+ throw new Error(`Aura3D text surface count "${key}" must be a non-negative integer.`);
202
+ }
203
+ return {
204
+ ...input,
205
+ note: "DOM labels are accessible UI; SDF quads are lit/occluded world text; extruded mesh text is the fixed catalog. Counts are not interchangeable."
206
+ };
207
+ }
208
+ function normalizeStyle(style) {
209
+ const outlineWidthEm = style.outlineWidthEm ?? 0;
210
+ const glowRadiusEm = style.glowRadiusEm ?? 0;
211
+ const smoothingEm = style.smoothingEm ?? 0.02;
212
+ const shadowOpacity = style.shadowOpacity ?? 0.45;
213
+ if (!Number.isFinite(outlineWidthEm) || outlineWidthEm < 0)
214
+ throw new Error("Aura3D SDF outlineWidthEm must be non-negative.");
215
+ if (!Number.isFinite(glowRadiusEm) || glowRadiusEm < 0)
216
+ throw new Error("Aura3D SDF glowRadiusEm must be non-negative.");
217
+ if (!Number.isFinite(smoothingEm) || smoothingEm <= 0)
218
+ throw new Error("Aura3D SDF smoothingEm must be positive.");
219
+ if (!Number.isFinite(shadowOpacity) || shadowOpacity < 0 || shadowOpacity > 1) {
220
+ throw new Error("Aura3D SDF shadowOpacity must be within 0..1.");
221
+ }
222
+ const shadowOffsetEm = style.shadowOffsetEm;
223
+ if (shadowOffsetEm && (shadowOffsetEm.length !== 2 || shadowOffsetEm.some((v) => !Number.isFinite(v)))) {
224
+ throw new Error("Aura3D SDF shadowOffsetEm must be a finite [x, y] pair.");
225
+ }
226
+ return {
227
+ outlineWidthEm,
228
+ glowRadiusEm,
229
+ shadowOffsetEm,
230
+ shadowOpacity,
231
+ smoothingEm,
232
+ ...(style.lodFadeNear !== undefined ? { lodFadeNear: style.lodFadeNear } : {}),
233
+ ...(style.lodFadeFar !== undefined ? { lodFadeFar: style.lodFadeFar } : {})
234
+ };
235
+ }
236
+ const BITMAP_GLYPHS = {
237
+ A: ["01110", "10001", "10001", "11111", "10001", "10001", "10001"],
238
+ B: ["11110", "10001", "10001", "11110", "10001", "10001", "11110"],
239
+ C: ["01111", "10000", "10000", "10000", "10000", "10000", "01111"],
240
+ D: ["11110", "10001", "10001", "10001", "10001", "10001", "11110"],
241
+ E: ["11111", "10000", "10000", "11110", "10000", "10000", "11111"],
242
+ F: ["11111", "10000", "10000", "11110", "10000", "10000", "10000"],
243
+ G: ["01111", "10000", "10000", "10111", "10001", "10001", "01111"],
244
+ H: ["10001", "10001", "10001", "11111", "10001", "10001", "10001"],
245
+ I: ["11111", "00100", "00100", "00100", "00100", "00100", "11111"],
246
+ J: ["00111", "00010", "00010", "00010", "10010", "10010", "01100"],
247
+ K: ["10001", "10010", "10100", "11000", "10100", "10010", "10001"],
248
+ L: ["10000", "10000", "10000", "10000", "10000", "10000", "11111"],
249
+ M: ["10001", "11011", "10101", "10101", "10001", "10001", "10001"],
250
+ N: ["10001", "11001", "10101", "10011", "10001", "10001", "10001"],
251
+ O: ["01110", "10001", "10001", "10001", "10001", "10001", "01110"],
252
+ P: ["11110", "10001", "10001", "11110", "10000", "10000", "10000"],
253
+ Q: ["01110", "10001", "10001", "10001", "10101", "10010", "01101"],
254
+ R: ["11110", "10001", "10001", "11110", "10100", "10010", "10001"],
255
+ S: ["01111", "10000", "10000", "01110", "00001", "00001", "11110"],
256
+ T: ["11111", "00100", "00100", "00100", "00100", "00100", "00100"],
257
+ U: ["10001", "10001", "10001", "10001", "10001", "10001", "01110"],
258
+ V: ["10001", "10001", "10001", "10001", "10001", "01010", "00100"],
259
+ W: ["10001", "10001", "10001", "10101", "10101", "11011", "10001"],
260
+ X: ["10001", "10001", "01010", "00100", "01010", "10001", "10001"],
261
+ Y: ["10001", "10001", "01010", "00100", "00100", "00100", "00100"],
262
+ Z: ["11111", "00001", "00010", "00100", "01000", "10000", "11111"],
263
+ "0": ["01110", "10001", "10011", "10101", "11001", "10001", "01110"],
264
+ "1": ["00100", "01100", "00100", "00100", "00100", "00100", "01110"],
265
+ "2": ["01110", "10001", "00001", "00010", "00100", "01000", "11111"],
266
+ "3": ["11110", "00001", "00001", "01110", "00001", "00001", "11110"],
267
+ "4": ["00010", "00110", "01010", "10010", "11111", "00010", "00010"],
268
+ "5": ["11111", "10000", "10000", "11110", "00001", "00001", "11110"],
269
+ "6": ["01110", "10000", "10000", "11110", "10001", "10001", "01110"],
270
+ "7": ["11111", "00001", "00010", "00100", "01000", "01000", "01000"],
271
+ "8": ["01110", "10001", "10001", "01110", "10001", "10001", "01110"],
272
+ "9": ["01110", "10001", "10001", "01111", "00001", "00001", "01110"],
273
+ "-": ["00000", "00000", "00000", "11111", "00000", "00000", "00000"],
274
+ ".": ["00000", "00000", "00000", "00000", "00000", "01100", "01100"],
275
+ " ": ["00000", "00000", "00000", "00000", "00000", "00000", "00000"]
276
+ };
277
+ /**
278
+ * Native SDF sampler (muse3jsparity-PRD G1).
279
+ *
280
+ * Bakes a laid-out text string into an RGBA8 image by sampling the baked
281
+ * atlas distance field per texel through `sampleSdfCoverage` — the same
282
+ * deterministic-bake pattern as the CPU postprocess kernels: the bake runs
283
+ * once, the bytes upload to the GPU as a native texture, quads sample them.
284
+ * This is NOT a per-pixel shader SDF loop; the claim label stays
285
+ * `production-runtime` baked-SDF text, proven by `textPixelBacked`.
286
+ *
287
+ * Layout space: x in [0, widthWorld], y in [0, heightWorld] with y-up.
288
+ * Image space: row 0 is the glyph top (y = heightWorld).
289
+ */
290
+ export function rasterizeSdfTextLabelImage(layout, atlas, options = {}) {
291
+ const scale = options.texelsPerWorldUnit ?? 64;
292
+ if (!Number.isFinite(scale) || scale <= 0) {
293
+ throw new Error("Aura3D SDF raster texelsPerWorldUnit must be positive.");
294
+ }
295
+ const fill = normalizeRasterColor(options.fill, "fill", [1, 1, 1, 1]);
296
+ const outline = options.outline ? normalizeRasterColor(options.outline, "outline") : undefined;
297
+ const glow = options.glow ? normalizeRasterColor(options.glow, "glow") : undefined;
298
+ const shadow = options.shadow ? normalizeRasterColor(options.shadow, "shadow") : undefined;
299
+ const width = Math.max(1, Math.ceil(layout.widthWorld * scale));
300
+ const height = Math.max(1, Math.ceil(layout.heightWorld * scale));
301
+ const style = layout.style;
302
+ const outlineWidthEm = outline ? style.outlineWidthEm : 0;
303
+ const glowRadiusEm = glow ? style.glowRadiusEm : 0;
304
+ const shadowOffset = shadow ? style.shadowOffsetEm : undefined;
305
+ const data = new Uint8Array(width * height * 4);
306
+ let coveredTexels = 0;
307
+ for (let y = 0; y < height; y += 1) {
308
+ for (let x = 0; x < width; x += 1) {
309
+ // Texel center in layout space (y-up). Em conversion happens inside
310
+ // the sampler (atlas cell height = 1em), independent of world size.
311
+ const lx = (x + 0.5) / scale;
312
+ const ly = layout.heightWorld - (y + 0.5) / scale;
313
+ const [r, g, b, a] = shadeSdfTexel(lx, ly, layout, atlas, style, { fill, outline, glow, shadow, outlineWidthEm, glowRadiusEm, shadowOffset });
314
+ const offset = (y * width + x) * 4;
315
+ data[offset] = Math.round(r * 255);
316
+ data[offset + 1] = Math.round(g * 255);
317
+ data[offset + 2] = Math.round(b * 255);
318
+ data[offset + 3] = Math.round(a * 255);
319
+ if (a * 255 > 8)
320
+ coveredTexels += 1;
321
+ }
322
+ }
323
+ if (coveredTexels === 0) {
324
+ throw new Error("Aura3D SDF raster produced no covered texels; the layout drew nothing.");
325
+ }
326
+ return { kind: "aura-sdf-text-image", width, height, data, coveredTexels };
327
+ }
328
+ function shadeSdfTexel(lx, ly, layout, atlas, style, colors) {
329
+ // Back-to-front composite over transparent: shadow, glow, outline, fill.
330
+ let out = [0, 0, 0, 0];
331
+ if (colors.shadow && colors.shadowOffset) {
332
+ const silhouette = sampleLayoutCoverage(lx + colors.shadowOffset[0], ly + colors.shadowOffset[1], layout, atlas, style);
333
+ out = overPremultiplied(out, colors.shadow, silhouette * colors.shadow[3] * (style.shadowOpacity ?? 0.45));
334
+ }
335
+ if (colors.glow && colors.glowRadiusEm > 0) {
336
+ const inside = sampleLayoutSignedEm(lx, ly, layout, atlas);
337
+ if (inside !== undefined && inside < 0.02) {
338
+ const reach = Math.max(0, 1 + (inside - 0.02) / colors.glowRadiusEm);
339
+ const glowAlpha = Math.min(1, reach) * colors.glow[3];
340
+ if (glowAlpha > 0)
341
+ out = overPremultiplied(out, colors.glow, glowAlpha * 0.75);
342
+ }
343
+ }
344
+ const signedEm = sampleLayoutSignedEm(lx, ly, layout, atlas);
345
+ if (signedEm !== undefined) {
346
+ if (colors.outline && colors.outlineWidthEm > 0) {
347
+ const band = sampleSdfCoverage(signedEm + colors.outlineWidthEm, style.smoothingEm)
348
+ - sampleSdfCoverage(signedEm, style.smoothingEm);
349
+ if (band > 0)
350
+ out = overPremultiplied(out, colors.outline, band * colors.outline[3]);
351
+ }
352
+ const fillAlpha = sampleSdfCoverage(signedEm, style.smoothingEm) * colors.fill[3];
353
+ if (fillAlpha > 0)
354
+ out = overPremultiplied(out, colors.fill, fillAlpha);
355
+ }
356
+ return out;
357
+ }
358
+ function overPremultiplied(dst, src, srcAlpha) {
359
+ const a = Math.min(1, Math.max(0, srcAlpha));
360
+ const inv = 1 - a;
361
+ return [src[0] * a + dst[0] * inv, src[1] * a + dst[1] * inv, src[2] * a + dst[2] * inv, a + dst[3] * inv];
362
+ }
363
+ /** Signed distance in em at a layout-space point, or undefined outside every quad. */
364
+ function sampleLayoutSignedEm(lx, ly, layout, atlas) {
365
+ for (const quad of layout.quads) {
366
+ const x0 = quad.corners[0];
367
+ const x1 = quad.corners[2];
368
+ const y0 = 0;
369
+ const y1 = layout.heightWorld;
370
+ if (lx < x0 || lx > x1 || ly < y0 || ly > y1)
371
+ continue;
372
+ // Atlas glyph cells are cellHeightPx tall for a 1em glyph: px -> em.
373
+ const cellHeightPx = GLYPH_ROWS * atlas.cellResolution;
374
+ const u01 = (lx - x0) / Math.max(1e-9, x1 - x0);
375
+ const v01 = (ly - y0) / Math.max(1e-9, y1 - y0);
376
+ const u = quad.uv[0] + u01 * (quad.uv[2] - quad.uv[0]);
377
+ const v = quad.uv[1] + v01 * (quad.uv[3] - quad.uv[1]);
378
+ const d01 = sampleAtlasBilinear(atlas, u, v);
379
+ const signedPx = (d01 - 0.5) * 2 * atlas.spreadPixels;
380
+ return signedPx / Math.max(1, cellHeightPx);
381
+ }
382
+ return undefined;
383
+ }
384
+ function sampleLayoutCoverage(lx, ly, layout, atlas, style) {
385
+ const signedEm = sampleLayoutSignedEm(lx, ly, layout, atlas);
386
+ if (signedEm === undefined)
387
+ return 0;
388
+ return sampleSdfCoverage(signedEm, style.smoothingEm);
389
+ }
390
+ function sampleAtlasBilinear(atlas, u, v) {
391
+ const x = Math.min(atlas.width - 1, Math.max(0, u * atlas.width - 0.5));
392
+ const y = Math.min(atlas.height - 1, Math.max(0, v * atlas.height - 0.5));
393
+ const x0 = Math.floor(x);
394
+ const y0 = Math.floor(y);
395
+ const x1 = Math.min(atlas.width - 1, x0 + 1);
396
+ const y1 = Math.min(atlas.height - 1, y0 + 1);
397
+ const fx = x - x0;
398
+ const fy = y - y0;
399
+ const row = (yy) => {
400
+ const a = atlas.distances[yy * atlas.width + x0] ?? 0;
401
+ const b = atlas.distances[yy * atlas.width + x1] ?? 0;
402
+ return a + (b - a) * fx;
403
+ };
404
+ return row(y0) + (row(y1) - row(y0)) * fy;
405
+ }
406
+ function normalizeRasterColor(value, name, fallback) {
407
+ const color = value ?? fallback;
408
+ if (!color || color.length !== 4 || color.some((channel) => !Number.isFinite(channel) || channel < 0 || channel > 1)) {
409
+ throw new Error(`Aura3D SDF raster ${name} color must be an RGBA tuple with channels in 0..1.`);
410
+ }
411
+ return [color[0], color[1], color[2], color[3]];
412
+ }
413
+ /**
414
+ * Quad-strip mesh for a rasterized label image (muse3jsparity-PRD G1 quad
415
+ * submission). One quad per layout glyph sharing the label image: uv rects
416
+ * are the quad's sub-rect of the image, so the bridge uploads a single
417
+ * texture per text node.
418
+ */
419
+ export function createSdfTextQuadMesh(layout, image) {
420
+ if (layout.quads.length === 0)
421
+ throw new Error("Aura3D SDF quad mesh requires at least one laid-out quad.");
422
+ if (image.width <= 0 || image.height <= 0)
423
+ throw new Error("Aura3D SDF quad mesh requires a non-empty label image.");
424
+ const quads = layout.quads;
425
+ const positions = new Float32Array(quads.length * 4 * 3);
426
+ const normals = new Float32Array(quads.length * 4 * 3);
427
+ const uvs = new Float32Array(quads.length * 4 * 2);
428
+ const tangents = new Float32Array(quads.length * 4 * 4);
429
+ const indices = [];
430
+ quads.forEach((quad, qi) => {
431
+ const x0 = quad.corners[0];
432
+ const x1 = quad.corners[2];
433
+ const y0 = 0;
434
+ const y1 = layout.heightWorld;
435
+ const corners = [[x0, y0], [x1, y0], [x1, y1], [x0, y1]];
436
+ corners.forEach(([cx, cy], corner) => {
437
+ const vi = qi * 4 + corner;
438
+ positions[vi * 3] = cx;
439
+ positions[vi * 3 + 1] = cy;
440
+ positions[vi * 3 + 2] = 0;
441
+ normals[vi * 3] = 0;
442
+ normals[vi * 3 + 1] = 0;
443
+ normals[vi * 3 + 2] = 1;
444
+ tangents[vi * 4] = 1;
445
+ tangents[vi * 4 + 1] = 0;
446
+ tangents[vi * 4 + 2] = 0;
447
+ tangents[vi * 4 + 3] = 1;
448
+ // u spans the label image width; v = 1 at glyph top (image row 0).
449
+ uvs[vi * 2] = cx / Math.max(1e-9, layout.widthWorld);
450
+ uvs[vi * 2 + 1] = 1 - (layout.heightWorld - cy) / Math.max(1e-9, layout.heightWorld);
451
+ });
452
+ const base = qi * 4;
453
+ indices.push(base, base + 1, base + 2, base, base + 2, base + 3);
454
+ });
455
+ return {
456
+ kind: "aura-sdf-text-quad-mesh",
457
+ positions,
458
+ normals,
459
+ uvs,
460
+ tangents,
461
+ indices,
462
+ vertexCount: quads.length * 4,
463
+ quadCount: quads.length,
464
+ min: [0, 0, 0],
465
+ max: [layout.widthWorld, layout.heightWorld, 0]
466
+ };
467
+ }
468
+ /**
469
+ * Per-frame SDF text opacity (muse3jsparity-PRD G1 occlusion + LOD-fade
470
+ * proof). Pure: the bridge evaluates it every frame from the live camera
471
+ * distance and the scene occlusion test, then writes it to the quad
472
+ * material — occlusion dims/hides, distance fades, neither is baked.
473
+ */
474
+ export function resolveSdfTextFrameOpacity(input) {
475
+ if (!Number.isFinite(input.distance) || input.distance < 0) {
476
+ throw new Error("Aura3D SDF frame distance must be finite and non-negative.");
477
+ }
478
+ // LOD fade needs both bounds: a half-specified range would silently do
479
+ // nothing (or throw on Infinity inside sdfTextLodFade), so fail closed.
480
+ const nearDefined = input.lodFadeNear !== undefined;
481
+ const farDefined = input.lodFadeFar !== undefined;
482
+ if (nearDefined !== farDefined) {
483
+ throw new Error("Aura3D SDF frame LOD fade requires both lodFadeNear and lodFadeFar, or neither.");
484
+ }
485
+ const lodFade = nearDefined && farDefined
486
+ ? sdfTextLodFade(input.distance, input.lodFadeNear, input.lodFadeFar)
487
+ : 1;
488
+ const occlusion = applySdfTextOcclusion(input.occluded, input.occlusionPolicy ?? "dim");
489
+ return {
490
+ visible: occlusion.visible,
491
+ opacity: Math.min(1, Math.max(0, lodFade * occlusion.opacity)),
492
+ lodFade,
493
+ occlusionOpacity: occlusion.opacity
494
+ };
495
+ }
496
+ function bakeGlyphDistance(field, width, height, glyph, originX, originY, resolution) {
497
+ const rows = BITMAP_GLYPHS[glyph] ?? BITMAP_GLYPHS[" "];
498
+ const cellWidth = GLYPH_COLUMNS * resolution;
499
+ const cellHeight = GLYPH_ROWS * resolution;
500
+ const inside = (px, py) => {
501
+ const column = Math.floor(px / resolution);
502
+ const row = Math.floor(py / resolution);
503
+ if (column < 0 || column >= GLYPH_COLUMNS || row < 0 || row >= GLYPH_ROWS)
504
+ return false;
505
+ return rows[row]?.[column] === "1";
506
+ };
507
+ /*
508
+ * Nearest-edge search over edge pixels only, not the whole cell. The
509
+ * nearest pixel of the opposite class always has a same-class 4-neighbor
510
+ * (anything strictly closer to the center is same-class), so it is in the
511
+ * edge set and results are identical to a full-cell search at a fraction
512
+ * of the cost. The atlas is still baked once and cached by the caller —
513
+ * never per frame.
514
+ */
515
+ const edgeInside = [];
516
+ const edgeOutside = [];
517
+ for (let py = 0; py < cellHeight; py += 1) {
518
+ for (let px = 0; px < cellWidth; px += 1) {
519
+ const center = inside(px + 0.5, py + 0.5);
520
+ const bordersOpposite = inside(px + 0.5, py - 0.5) !== center
521
+ || inside(px + 0.5, py + 1.5) !== center
522
+ || inside(px - 0.5, py + 0.5) !== center
523
+ || inside(px + 1.5, py + 0.5) !== center;
524
+ if (!bordersOpposite)
525
+ continue;
526
+ (center ? edgeInside : edgeOutside).push([px + 0.5, py + 0.5]);
527
+ }
528
+ }
529
+ // A blank glyph (space) has no edges: every pixel is far-outside.
530
+ const spread = Math.hypot(cellWidth, cellHeight);
531
+ for (let py = 0; py < cellHeight; py += 1) {
532
+ for (let px = 0; px < cellWidth; px += 1) {
533
+ const cx = px + 0.5;
534
+ const cy = py + 0.5;
535
+ const centerInside = inside(cx, cy);
536
+ const edges = centerInside ? edgeOutside : edgeInside;
537
+ let nearest = spread;
538
+ for (const [ex, ey] of edges) {
539
+ const distance = Math.hypot(cx - ex, cy - ey);
540
+ if (distance < nearest)
541
+ nearest = distance;
542
+ }
543
+ const signed = centerInside ? nearest : -nearest;
544
+ const ax = originX + px;
545
+ const ay = originY + py;
546
+ if (ax >= 0 && ax < width && ay >= 0 && ay < height)
547
+ field[ay * width + ax] = 0.5 + signed / (2 * spread);
548
+ }
549
+ }
550
+ }
551
+ //# sourceMappingURL=SdfText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SdfText.js","sourceRoot":"","sources":["../../../../packages/rendering/src/SdfText.ts"],"names":[],"mappings":"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AE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IAClE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;CACrE,CAAC;AA2BF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAAqB,EACrB,KAAmB,EACnB,UAAgC,EAAE;IAElC,MAAM,KAAK,GAAG,OAAO,CAAC,kBAAkB,IAAI,EAAE,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/F,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;IAChD,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,oEAAoE;YACpE,oEAAoE;YACpE,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;YAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;YAClD,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAChC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,CAC1G,CAAC;YACF,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;gBAAE,aAAa,IAAI,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AAC7E,CAAC;AAYD,SAAS,aAAa,CACpB,EAAU,EACV,EAAU,EACV,MAAqB,EACrB,KAAmB,EACnB,KAA2B,EAC3B,MAAsB;IAEtB,yEAAyE;IACzE,IAAI,GAAG,GAAqC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,oBAAoB,CAAC,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACxH,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC;IAC7G,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3D,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;YACrE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtD,IAAI,SAAS,GAAG,CAAC;gBAAE,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,GAAG,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,WAAW,CAAC;kBAC/E,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;YACnD,IAAI,IAAI,GAAG,CAAC;gBAAE,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,SAAS,GAAG,CAAC;YAAE,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,iBAAiB,CACxB,GAA8C,EAC9C,GAAgB,EAChB,QAAgB;IAEhB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAC7G,CAAC;AAED,sFAAsF;AACtF,SAAS,oBAAoB,CAC3B,EAAU,EACV,EAAU,EACV,MAAqB,EACrB,KAAmB;IAEnB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,CAAC,CAAC;QACb,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;QAC9B,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;YAAE,SAAS;QACvD,qEAAqE;QACrE,MAAM,YAAY,GAAG,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC;QACvD,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;QACtD,OAAO,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAC3B,EAAU,EACV,EAAU,EACV,MAAqB,EACrB,KAAmB,EACnB,KAA2B;IAE3B,MAAM,QAAQ,GAAG,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7D,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACrC,OAAO,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAmB,EAAE,CAAS,EAAE,CAAS;IACpE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;IAC1E,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;IAClB,MAAM,GAAG,GAAG,CAAC,EAAU,EAAU,EAAE;QACjC,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAC1B,CAAC,CAAC;IACF,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA8B,EAAE,IAAY,EAAE,QAAsB;IAChG,MAAM,KAAK,GAAG,KAAK,IAAI,QAAQ,CAAC;IAChC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;QACrH,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,qDAAqD,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;AACtD,CAAC;AAmBD;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAqB,EAAE,KAAyB;IACpF,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC5G,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IACrH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAC,EAAE,EAAE,EAAE;QACxB,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,CAAC,CAAC;QACb,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;QAC9B,MAAM,OAAO,GAA6C,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACnG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE;YACnC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;YAC3B,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YACvB,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAC3B,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1B,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACpB,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACxB,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACrB,QAAQ,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACzB,QAAQ,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACzB,QAAQ,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACzB,mEAAmE;YACnE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YACrD,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IACH,OAAO;QACL,IAAI,EAAE,yBAAyB;QAC/B,SAAS;QACT,OAAO;QACP,GAAG;QACH,QAAQ;QACR,OAAO;QACP,WAAW,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;QAC7B,SAAS,EAAE,KAAK,CAAC,MAAM;QACvB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACd,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;KAChD,CAAC;AACJ,CAAC;AAmBD;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAA+B;IACxE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,uEAAuE;IACvE,wEAAwE;IACxE,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC;IACpD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC;IAClD,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;IACrG,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,IAAI,UAAU;QACvC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAY,EAAE,KAAK,CAAC,UAAW,CAAC;QACvE,CAAC,CAAC,CAAC,CAAC;IACN,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,CAAC;IACxF,OAAO;QACL,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAC9D,OAAO;QACP,gBAAgB,EAAE,SAAS,CAAC,OAAO;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAmB,EACnB,KAAa,EACb,MAAc,EACd,KAAa,EACb,OAAe,EACf,OAAe,EACf,UAAkB;IAElB,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,GAAG,CAAE,CAAC;IACzD,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,CAAC;IAC7C,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;IAC3C,MAAM,MAAM,GAAG,CAAC,EAAU,EAAE,EAAU,EAAW,EAAE;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;QACxC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,aAAa,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,UAAU;YAAE,OAAO,KAAK,CAAC;QACxF,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC;IACrC,CAAC,CAAC;IACF;;;;;;;OAOG;IACH,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,MAAM,WAAW,GAAuB,EAAE,CAAC;IAC3C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAC1C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC;YAC1C,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,MAAM;mBACxD,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,MAAM;mBACrC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,MAAM;mBACrC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,MAAM,CAAC;YAC3C,IAAI,CAAC,eAAe;gBAAE,SAAS;YAC/B,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IACD,kEAAkE;IAClE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACjD,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAC1C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;YACpB,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;YACpB,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;YACtD,IAAI,OAAO,GAAG,MAAM,CAAC;YACrB,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC9C,IAAI,QAAQ,GAAG,OAAO;oBAAE,OAAO,GAAG,QAAQ,CAAC;YAC7C,CAAC;YACD,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACjD,MAAM,EAAE,GAAG,OAAO,GAAG,EAAE,CAAC;YACxB,MAAM,EAAE,GAAG,OAAO,GAAG,EAAE,CAAC;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM;gBAAE,KAAK,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ShaderChunks.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/ShaderChunks.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAE9C,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EA+hB/C,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,SAAS,WAAW,EAAkB,GAAG,IAAI,CAgBzF"}
1
+ {"version":3,"file":"ShaderChunks.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/ShaderChunks.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAE9C,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAijB/C,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,SAAS,WAAW,EAAkB,GAAG,IAAI,CAgBzF"}