@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.
- package/dist/AtmosphereWetness.d.ts +61 -0
- package/dist/AtmosphereWetness.d.ts.map +1 -0
- package/dist/AtmosphereWetness.js +99 -0
- package/dist/AtmosphereWetness.js.map +1 -0
- package/dist/ClusteredForwardLighting.d.ts +25 -1
- package/dist/ClusteredForwardLighting.d.ts.map +1 -1
- package/dist/ClusteredForwardLighting.js +80 -3
- package/dist/ClusteredForwardLighting.js.map +1 -1
- package/dist/DayNightSky.d.ts +63 -0
- package/dist/DayNightSky.d.ts.map +1 -0
- package/dist/DayNightSky.js +156 -0
- package/dist/DayNightSky.js.map +1 -0
- package/dist/EnvironmentPresetPack.d.ts +30 -0
- package/dist/EnvironmentPresetPack.d.ts.map +1 -0
- package/dist/EnvironmentPresetPack.js +49 -0
- package/dist/EnvironmentPresetPack.js.map +1 -0
- package/dist/ForwardPass.d.ts +65 -0
- package/dist/ForwardPass.d.ts.map +1 -1
- package/dist/ForwardPass.js +196 -2
- package/dist/ForwardPass.js.map +1 -1
- package/dist/InstancedPBRMaterial.d.ts +1 -0
- package/dist/InstancedPBRMaterial.d.ts.map +1 -1
- package/dist/InstancedPBRMaterial.js +3 -0
- package/dist/InstancedPBRMaterial.js.map +1 -1
- package/dist/InstancingDiagnostics.d.ts +69 -0
- package/dist/InstancingDiagnostics.d.ts.map +1 -0
- package/dist/InstancingDiagnostics.js +98 -0
- package/dist/InstancingDiagnostics.js.map +1 -0
- package/dist/LightingRig.d.ts +19 -1
- package/dist/LightingRig.d.ts.map +1 -1
- package/dist/LightingRig.js +61 -1
- package/dist/LightingRig.js.map +1 -1
- package/dist/MeshConsolidation.d.ts +12 -0
- package/dist/MeshConsolidation.d.ts.map +1 -1
- package/dist/MeshConsolidation.js +28 -0
- package/dist/MeshConsolidation.js.map +1 -1
- package/dist/MorphTargetPlan.d.ts +29 -2
- package/dist/MorphTargetPlan.d.ts.map +1 -1
- package/dist/MorphTargetPlan.js +23 -4
- package/dist/MorphTargetPlan.js.map +1 -1
- package/dist/NormalMappedPBRMaterial.d.ts.map +1 -1
- package/dist/NormalMappedPBRMaterial.js +22 -2
- package/dist/NormalMappedPBRMaterial.js.map +1 -1
- package/dist/OceanSurface.d.ts +75 -0
- package/dist/OceanSurface.d.ts.map +1 -1
- package/dist/OceanSurface.js +211 -0
- package/dist/OceanSurface.js.map +1 -1
- package/dist/PBRMaterial.d.ts +1 -0
- package/dist/PBRMaterial.d.ts.map +1 -1
- package/dist/PBRMaterial.js +23 -2
- package/dist/PBRMaterial.js.map +1 -1
- package/dist/PbrReference.d.ts +48 -0
- package/dist/PbrReference.d.ts.map +1 -1
- package/dist/PbrReference.js +126 -0
- package/dist/PbrReference.js.map +1 -1
- package/dist/PlanarReflection.d.ts +221 -0
- package/dist/PlanarReflection.d.ts.map +1 -0
- package/dist/PlanarReflection.js +541 -0
- package/dist/PlanarReflection.js.map +1 -0
- package/dist/PostProcessPass.d.ts +13 -0
- package/dist/PostProcessPass.d.ts.map +1 -1
- package/dist/PostProcessPass.js +15 -4
- package/dist/PostProcessPass.js.map +1 -1
- package/dist/ReflectionSurfaces.d.ts +14 -0
- package/dist/ReflectionSurfaces.d.ts.map +1 -1
- package/dist/ReflectionSurfaces.js +93 -0
- package/dist/ReflectionSurfaces.js.map +1 -1
- package/dist/RenderDevice.d.ts +87 -0
- package/dist/RenderDevice.d.ts.map +1 -1
- package/dist/RenderDevice.js +85 -0
- package/dist/RenderDevice.js.map +1 -1
- package/dist/Renderer.js +3 -1
- package/dist/Renderer.js.map +1 -1
- package/dist/RendererPostprocessPlan.d.ts +48 -0
- package/dist/RendererPostprocessPlan.d.ts.map +1 -1
- package/dist/RendererPostprocessPlan.js +101 -11
- package/dist/RendererPostprocessPlan.js.map +1 -1
- package/dist/RendererVisualPipelineReport.d.ts.map +1 -1
- package/dist/RendererVisualPipelineReport.js +3 -1
- package/dist/RendererVisualPipelineReport.js.map +1 -1
- package/dist/Sampler.d.ts +29 -0
- package/dist/Sampler.d.ts.map +1 -1
- package/dist/Sampler.js +47 -0
- package/dist/Sampler.js.map +1 -1
- package/dist/SdfText.d.ts +250 -0
- package/dist/SdfText.d.ts.map +1 -0
- package/dist/SdfText.js +551 -0
- package/dist/SdfText.js.map +1 -0
- package/dist/ShaderChunks.d.ts.map +1 -1
- package/dist/ShaderChunks.js +30 -12
- package/dist/ShaderChunks.js.map +1 -1
- package/dist/ShaderLibrary.d.ts.map +1 -1
- package/dist/ShaderLibrary.js +478 -34
- package/dist/ShaderLibrary.js.map +1 -1
- package/dist/ShaderLibraryCore.d.ts.map +1 -1
- package/dist/ShaderLibraryCore.js +70 -12
- package/dist/ShaderLibraryCore.js.map +1 -1
- package/dist/ShadowMap.d.ts +24 -0
- package/dist/ShadowMap.d.ts.map +1 -1
- package/dist/ShadowMap.js +43 -0
- package/dist/ShadowMap.js.map +1 -1
- package/dist/SkinnedLitMaterial.d.ts.map +1 -1
- package/dist/SkinnedLitMaterial.js +2 -0
- package/dist/SkinnedLitMaterial.js.map +1 -1
- package/dist/SkinningBounds.d.ts +10 -0
- package/dist/SkinningBounds.d.ts.map +1 -1
- package/dist/SkinningBounds.js +27 -0
- package/dist/SkinningBounds.js.map +1 -1
- package/dist/SpriteFlipbook.d.ts +60 -0
- package/dist/SpriteFlipbook.d.ts.map +1 -0
- package/dist/SpriteFlipbook.js +128 -0
- package/dist/SpriteFlipbook.js.map +1 -0
- package/dist/TerrainTiles.d.ts +120 -0
- package/dist/TerrainTiles.d.ts.map +1 -0
- package/dist/TerrainTiles.js +221 -0
- package/dist/TerrainTiles.js.map +1 -0
- package/dist/TexturedPBRMaterial.d.ts +1 -0
- package/dist/TexturedPBRMaterial.d.ts.map +1 -1
- package/dist/TexturedPBRMaterial.js +23 -2
- package/dist/TexturedPBRMaterial.js.map +1 -1
- package/dist/TexturedUnlitMaterial.d.ts.map +1 -1
- package/dist/TexturedUnlitMaterial.js +20 -2
- package/dist/TexturedUnlitMaterial.js.map +1 -1
- package/dist/UnlitMaterial.d.ts.map +1 -1
- package/dist/UnlitMaterial.js +20 -2
- package/dist/UnlitMaterial.js.map +1 -1
- package/dist/VertexFormat.d.ts +6 -0
- package/dist/VertexFormat.d.ts.map +1 -1
- package/dist/VertexFormat.js +12 -0
- package/dist/VertexFormat.js.map +1 -1
- package/dist/VolumetricFog.d.ts +55 -0
- package/dist/VolumetricFog.d.ts.map +1 -0
- package/dist/VolumetricFog.js +91 -0
- package/dist/VolumetricFog.js.map +1 -0
- package/dist/WaterSurface.d.ts +77 -0
- package/dist/WaterSurface.d.ts.map +1 -0
- package/dist/WaterSurface.js +133 -0
- package/dist/WaterSurface.js.map +1 -0
- package/dist/WebGL2Device.d.ts +58 -0
- package/dist/WebGL2Device.d.ts.map +1 -1
- package/dist/WebGL2Device.js +536 -17
- package/dist/WebGL2Device.js.map +1 -1
- package/dist/WebGPUDevice.d.ts +50 -0
- package/dist/WebGPUDevice.d.ts.map +1 -1
- package/dist/WebGPUDevice.js +504 -10
- package/dist/WebGPUDevice.js.map +1 -1
- package/dist/WebGPUSkinningLimits.d.ts +40 -0
- package/dist/WebGPUSkinningLimits.d.ts.map +1 -1
- package/dist/WebGPUSkinningLimits.js +32 -0
- package/dist/WebGPUSkinningLimits.js.map +1 -1
- package/dist/effects/CollisionModule.d.ts +9 -0
- package/dist/effects/CollisionModule.d.ts.map +1 -1
- package/dist/effects/CollisionModule.js +10 -0
- package/dist/effects/CollisionModule.js.map +1 -1
- package/dist/effects/ColorModule.d.ts +7 -0
- package/dist/effects/ColorModule.d.ts.map +1 -1
- package/dist/effects/ColorModule.js +23 -0
- package/dist/effects/ColorModule.js.map +1 -1
- package/dist/effects/ForceModule.d.ts +35 -0
- package/dist/effects/ForceModule.d.ts.map +1 -1
- package/dist/effects/ForceModule.js +49 -0
- package/dist/effects/ForceModule.js.map +1 -1
- package/dist/effects/GPUParticleBackend.d.ts +186 -0
- package/dist/effects/GPUParticleBackend.d.ts.map +1 -1
- package/dist/effects/GPUParticleBackend.js +692 -1
- package/dist/effects/GPUParticleBackend.js.map +1 -1
- package/dist/effects/HeightfieldModule.d.ts +58 -0
- package/dist/effects/HeightfieldModule.d.ts.map +1 -0
- package/dist/effects/HeightfieldModule.js +129 -0
- package/dist/effects/HeightfieldModule.js.map +1 -0
- package/dist/effects/LightingModule.d.ts +34 -0
- package/dist/effects/LightingModule.d.ts.map +1 -0
- package/dist/effects/LightingModule.js +54 -0
- package/dist/effects/LightingModule.js.map +1 -0
- package/dist/effects/ParticleDiagnostics.d.ts +8 -0
- package/dist/effects/ParticleDiagnostics.d.ts.map +1 -1
- package/dist/effects/ParticleDiagnostics.js +3 -0
- package/dist/effects/ParticleDiagnostics.js.map +1 -1
- package/dist/effects/ParticleModule.d.ts +8 -0
- package/dist/effects/ParticleModule.d.ts.map +1 -1
- package/dist/effects/ParticleModule.js.map +1 -1
- package/dist/effects/ParticleRenderer.d.ts +20 -0
- package/dist/effects/ParticleRenderer.d.ts.map +1 -1
- package/dist/effects/ParticleRenderer.js +57 -7
- package/dist/effects/ParticleRenderer.js.map +1 -1
- package/dist/effects/ParticleSystem.d.ts +45 -1
- package/dist/effects/ParticleSystem.d.ts.map +1 -1
- package/dist/effects/ParticleSystem.js +373 -4
- package/dist/effects/ParticleSystem.js.map +1 -1
- package/dist/effects/SizeModule.d.ts +4 -0
- package/dist/effects/SizeModule.d.ts.map +1 -1
- package/dist/effects/SizeModule.js +16 -0
- package/dist/effects/SizeModule.js.map +1 -1
- package/dist/effects/SubEmitterModule.d.ts +61 -0
- package/dist/effects/SubEmitterModule.d.ts.map +1 -0
- package/dist/effects/SubEmitterModule.js +119 -0
- package/dist/effects/SubEmitterModule.js.map +1 -0
- package/dist/effects/TrailModule.d.ts +38 -0
- package/dist/effects/TrailModule.d.ts.map +1 -1
- package/dist/effects/TrailModule.js +95 -2
- package/dist/effects/TrailModule.js.map +1 -1
- package/dist/effects/TurbulenceModule.d.ts +43 -0
- package/dist/effects/TurbulenceModule.d.ts.map +1 -0
- package/dist/effects/TurbulenceModule.js +130 -0
- package/dist/effects/TurbulenceModule.js.map +1 -0
- package/dist/effects/index.d.ts +4 -0
- package/dist/effects/index.d.ts.map +1 -1
- package/dist/effects/index.js +4 -0
- package/dist/effects/index.js.map +1 -1
- package/dist/index.d.ts +57 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -10
- package/dist/index.js.map +1 -1
- package/dist/materials/MaterialExtensions.js +3 -3
- package/dist/materials/MaterialExtensions.js.map +1 -1
- package/dist/postprocess/NativeBloomPyramid.d.ts +28 -0
- package/dist/postprocess/NativeBloomPyramid.d.ts.map +1 -0
- package/dist/postprocess/NativeBloomPyramid.js +54 -0
- package/dist/postprocess/NativeBloomPyramid.js.map +1 -0
- package/dist/postprocess/NativeLdrEffectLuts.d.ts +10 -1
- package/dist/postprocess/NativeLdrEffectLuts.d.ts.map +1 -1
- package/dist/postprocess/NativeLdrEffectLuts.js +19 -2
- package/dist/postprocess/NativeLdrEffectLuts.js.map +1 -1
- package/dist/postprocess/index.d.ts +2 -0
- package/dist/postprocess/index.d.ts.map +1 -1
- package/dist/postprocess/index.js +1 -0
- package/dist/postprocess/index.js.map +1 -1
- package/dist/production-runtime/PBRHDRPipeline.d.ts +22 -0
- package/dist/production-runtime/PBRHDRPipeline.d.ts.map +1 -1
- package/dist/production-runtime/PBRHDRPipeline.js +125 -0
- package/dist/production-runtime/PBRHDRPipeline.js.map +1 -1
- package/dist/production-runtime/ProductionWebGPURenderer.d.ts +52 -0
- package/dist/production-runtime/ProductionWebGPURenderer.d.ts.map +1 -1
- package/dist/production-runtime/ProductionWebGPURenderer.js +101 -0
- package/dist/production-runtime/ProductionWebGPURenderer.js.map +1 -1
- package/dist/production-runtime/index.d.ts +5 -4
- package/dist/production-runtime/index.d.ts.map +1 -1
- package/dist/production-runtime/index.js +3 -2
- package/dist/production-runtime/index.js.map +1 -1
- package/dist/production-runtime/passes/DepthPrepass.d.ts +26 -1
- package/dist/production-runtime/passes/DepthPrepass.d.ts.map +1 -1
- package/dist/production-runtime/passes/DepthPrepass.js +49 -2
- package/dist/production-runtime/passes/DepthPrepass.js.map +1 -1
- package/dist/production-runtime/passes/FramegraphTopology.d.ts +13 -0
- package/dist/production-runtime/passes/FramegraphTopology.d.ts.map +1 -0
- package/dist/production-runtime/passes/FramegraphTopology.js +59 -0
- package/dist/production-runtime/passes/FramegraphTopology.js.map +1 -0
- package/dist/production-runtime/passes/OpaquePass.d.ts +24 -1
- package/dist/production-runtime/passes/OpaquePass.d.ts.map +1 -1
- package/dist/production-runtime/passes/OpaquePass.js +41 -2
- package/dist/production-runtime/passes/OpaquePass.js.map +1 -1
- package/dist/production-runtime/passes/ShadowPass.d.ts +24 -1
- package/dist/production-runtime/passes/ShadowPass.d.ts.map +1 -1
- package/dist/production-runtime/passes/ShadowPass.js +43 -2
- package/dist/production-runtime/passes/ShadowPass.js.map +1 -1
- package/dist/production-runtime/passes/SkyboxPass.d.ts +21 -1
- package/dist/production-runtime/passes/SkyboxPass.d.ts.map +1 -1
- package/dist/production-runtime/passes/SkyboxPass.js +39 -2
- package/dist/production-runtime/passes/SkyboxPass.js.map +1 -1
- package/dist/production-runtime/passes/ToneMappingPass.d.ts +29 -1
- package/dist/production-runtime/passes/ToneMappingPass.d.ts.map +1 -1
- package/dist/production-runtime/passes/ToneMappingPass.js +53 -2
- package/dist/production-runtime/passes/ToneMappingPass.js.map +1 -1
- package/dist/production-runtime/passes/TransparentPass.d.ts +24 -1
- package/dist/production-runtime/passes/TransparentPass.d.ts.map +1 -1
- package/dist/production-runtime/passes/TransparentPass.js +42 -2
- package/dist/production-runtime/passes/TransparentPass.js.map +1 -1
- package/dist/shadows/CascadeHysteresis.d.ts +67 -0
- package/dist/shadows/CascadeHysteresis.d.ts.map +1 -0
- package/dist/shadows/CascadeHysteresis.js +104 -0
- package/dist/shadows/CascadeHysteresis.js.map +1 -0
- package/dist/shadows/ContactShadows.d.ts +52 -0
- package/dist/shadows/ContactShadows.d.ts.map +1 -1
- package/dist/shadows/ContactShadows.js +122 -0
- package/dist/shadows/ContactShadows.js.map +1 -1
- package/dist/shadows/SpotShadowMaps.d.ts +77 -0
- package/dist/shadows/SpotShadowMaps.d.ts.map +1 -0
- package/dist/shadows/SpotShadowMaps.js +106 -0
- package/dist/shadows/SpotShadowMaps.js.map +1 -0
- package/dist/webgpu/WebGPUPostProcess.d.ts +2 -0
- package/dist/webgpu/WebGPUPostProcess.d.ts.map +1 -1
- package/dist/webgpu/WebGPUPostProcess.js +1 -0
- package/dist/webgpu/WebGPUPostProcess.js.map +1 -1
- package/dist/webgpu/WebGPUPostShaders.d.ts +78 -0
- package/dist/webgpu/WebGPUPostShaders.d.ts.map +1 -0
- package/dist/webgpu/WebGPUPostShaders.js +262 -0
- package/dist/webgpu/WebGPUPostShaders.js.map +1 -0
- package/package.json +3 -3
package/dist/SdfText.js
ADDED
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,mFAAmF;AACnF,MAAM,CAAC,MAAM,oBAAoB,GAAG,yCAAkD,CAAC;AAEvF;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAC9B,kFAAkF;IAClF,+FAA+F;IAC/F,yDAAyD,CAAC;AAE5D,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,UAAU,GAAG,CAAC,CAAC;AAsFrB,0GAA0G;AAC1G,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAIzC;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAA+B,EAAE;IAClE,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,SAAS,GAAG,aAAa,GAAG,cAAc,CAAC;IACjD,MAAM,UAAU,GAAG,UAAU,GAAG,cAAc,CAAC;IAC/C,MAAM,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,GAAG,UAAU,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;IACnD,MAAM,MAAM,GAAoC,EAAE,CAAC;IACnD,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,SAAS,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,UAAU,CAAC;QACvD,iBAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EAAE,cAAc,CAAC,CAAC;QACrG,MAAM,CAAC,KAAK,CAAC,GAAG;YACd,KAAK;YACL,EAAE,EAAE;gBACF,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,KAAK;gBACzB,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,MAAM;gBAC1B,CAAC,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC,GAAG,KAAK;gBACrC,CAAC,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC,GAAG,MAAM;aACxC;YACD,SAAS,EAAE,aAAa,GAAG,UAAU;SACtC,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,SAAS;QACT,KAAK;QACL,MAAM;QACN,MAAM;QACN,UAAU,EAAE,SAAS,CAAC,MAAM;QAC5B,cAAc;QACd,OAAO;QACP,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,KAAmB,EAAE,UAAgC,EAAE;IACjG,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACnG,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,GAAG,IAAI,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACrH,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,GAAG,UAAU,CAAC;IACpC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACrC,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YAChB,MAAM,IAAI,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrB,MAAM,IAAI,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,UAAU,IAAI,CAAC,CAAC;QAChB,MAAM,CAAC,GAAG,SAAS,GAAG,aAAa,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC;YACT,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC;YACnE,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC;IACxB,CAAC;IACD,IAAI,UAAU,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACvF,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,IAAI;QACJ,KAAK;QACL,UAAU;QACV,qBAAqB,EAAE,CAAC,GAAG,WAAW,CAAC;QACvC,UAAU,EAAE,MAAM,GAAG,OAAO;QAC5B,WAAW,EAAE,IAAI;QACjB,MAAM,EAAE,gBAAgB;QACxB,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,WAAmB;IACvE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACtF,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,CAAC,GAAG,UAAU,GAAG,WAAW,CAAC;IACnC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IACtB,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACrB,OAAO,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,QAAgB,EAAE,OAAe;IAChF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC5H,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;QACnG,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,QAAQ,IAAI,QAAQ;QAAE,OAAO,CAAC,CAAC;IACnC,IAAI,QAAQ,IAAI,OAAO;QAAE,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,qBAAqB,CACnC,QAAiB,EACjB,SAAiC,KAAK;IAEtC,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACpD,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAC7D,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAC5D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAC1D,CAAC;AAkBD,oFAAoF;AACpF,MAAM,UAAU,2BAA2B,CAAC,KAA2B;IACrE,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACzB,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,iDAAiD,EAAE,SAAS,EAAE,CAAC;IAC1G,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAmC,EAAE,SAAS,EAAE,CAAC;IAC5F,CAAC;IACD,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,4CAA4C,EAAE,SAAS,EAAE,CAAC;AAChH,CAAC;AAYD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAiE;IACrG,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,mCAAmC,CAAC,CAAC;IACnI,CAAC;IACD,OAAO;QACL,GAAG,KAAK;QACR,IAAI,EAAE,+IAA+I;KACtJ,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAmB;IACzC,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC;IAC9C,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC/H,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACzH,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACnH,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IAC5C,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvG,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO;QACL,cAAc;QACd,YAAY;QACZ,cAAc;QACd,aAAa;QACb,WAAW;QACX,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAgD;IACjE,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,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,
|
|
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"}
|