Transmisión de terreno fuera de memoria: cómo se abre un MDE de gigabytes en un portátil

Un MDE de 5 cm de una obra de 2 km × 2 km contiene 1600 millones de cotas: 6,4 GB en coma flotante de 32 bits, más de lo que tienen la mayoría de las tarjetas gráficas. La transmisión fuera de memoria (out-of-core) es la respuesta de ingeniería: mantener toda la superficie en disco en una forma que se pueda leer por partes y tener en memoria solo lo que la pantalla puede mostrar. Este artículo explica cómo lo hace STREAM, con las cifras de cada paso.

Paso 1: una copia teselada y multirresolución

El GeoTIFF o BigTIFF de origen se lee una vez y se convierte en una copia nativa: un esquema fijo de teselas de 512 × 512 con niveles de vista general, cotas en Float32 y ortofotos en RGBA8, guardadas como BigTIFF teselado comprimido con ZSTD. Una tabla de teselas registra cuáles están construidas, y la copia solo cuenta como completa cuando lo están todas.

Para un MDE de 40 000 × 40 000 eso son 79 × 79 = 6241 teselas a resolución completa, de exactamente 1 MiB cada una en Float32. Reducir a la mitad hasta una sola tesela añade siete niveles de vista general: 8380 teselas en total. Cada tesela tiene una identidad fija de nivel, x e y, y eso es lo que hace direccionable todo lo que sigue.

Pirámide de teselas de un MDE de 40 000 × 40 000 en teselas de 512 × 512
MagnitudValorDe dónde sale
Teselas a resolución completa79 × 79 = 624140 000 ÷ 512 = 78,1, redondeado hacia arriba
Tamaño de una tesela Float321 MiB512 × 512 × 4 bytes
Niveles con vistas generales8reduciendo a la mitad de 79 a 1 tesela
Teselas en toda la pirámide8380suma de todos los niveles
Pantalla de 1920 × 1080≈ 7,9 teselas de píxeles2,07 millones ÷ 262 144

Paso 2: pedir solo lo que ve la cámara

En cada fotograma, el estado de la cámara produce un conjunto de petición: un conjunto grueso fijado que cubre toda la vista y un conjunto de detalle donde usted mira. Las teselas fuera de él no se decodifican, no se suben a la GPU y no se conservan.

Esa es la línea que acota la memoria. Una vista de 1920 × 1080 contiene aproximadamente tantos píxeles como ocho teselas completas; con margen y mezcla de niveles, el conjunto de trabajo se queda en decenas de teselas —decenas de megabytes—, tanto si el archivo pesa 200 MB como 20 GB.

Paso 3: decodificar fuera del hilo de render, lo más nuevo primero

La decodificación se ejecuta en hilos de trabajo como tareas con cinco niveles de prioridad, desde la predicción en segundo plano hasta la crítica, con un límite de tareas en curso. Cada petición lleva una generación; cuando la cámara avanza, las generaciones antiguas se cancelan en vez de terminar, de modo que un desplazamiento rápido no deja una cola de teselas que nadie verá.

El orden de subida sigue el foco de la cámara y la visibilidad. Si una tesela fina no está lista, la tesela gruesa de encima ocupa su lugar: la superficie siempre está cerrada y el detalle se afina a medida que llegan las teselas.

Paso 4: desalojar sin abrir huecos

Cuando el atlas de la GPU está lleno, el desalojo prefiere teselas del mismo nivel o más gruesas que la entrante, pondera la distancia al foco de la cámara y protege las páginas que dan el respaldo grueso. Hacer sitio para el detalle nunca quita la base de debajo.

Cota y ortofoto se gestionan como conjuntos de páginas dispersas separados, cada uno con su propia residencia, así que una ortofoto pesada no puede dejar al terreno sin teselas de altura.

Qué cambia la transmisión para el ingeniero

El coste pasa a la primera apertura, donde la conversión se ejecuta una vez con una tarjeta de progreso cancelable; después, el mismo levantamiento se reabre en segundos. Varios MDE de una misma obra se unen en un único mosaico virtual —gana el píxel válido superior y el NoData cae al de debajo— y los análisis leen ese mismo mosaico que dibuja el render.

Nada de esto necesita un servidor: conversión, transmisión y render se ejecutan en el equipo local con Vulkan en la GPU, y eso es lo que permite revisar un levantamiento de gigabytes en un portátil de obra sin subirlo a ninguna parte.

Preguntas frecuentes

¿Qué significa fuera de memoria para datos de terreno?

El conjunto de datos permanece en disco en forma teselada y multirresolución, y solo se cargan en memoria las partes necesarias para la vista actual. La memoria la acota la pantalla, no el tamaño del archivo.

¿Cuántas teselas tiene un MDE de 40 000 × 40 000?

En teselas de 512 × 512, 79 × 79 = 6241 a resolución completa, de 1 MiB cada una en Float32, y 8380 contando los siete niveles de vista general.

¿Por qué tarda más la primera apertura?

Porque el origen se convierte una vez en la copia nativa teselada con niveles de vista general. Después, el render lee las teselas directamente de la copia y reabrir lleva segundos.

Vea la transmisión de terreno en STREAM

Windows nativo · totalmente sin conexión · beta gratuita

Streaming de terreno