E57, explicado: el "PDF de las nubes de puntos"
Imagine fotografiar una habitación — pero, en lugar de una imagen plana, capturaras la posición exacta de un millón de diminutos puntos que cubren cada pared, silla y taza de café. Haz girar un láser lo bastante rápido y mide a qué distancia está todo, y eso es lo que obtienes: una nube de puntos, una "fotografía" 3D hecha de puntos medidos. Este es un recorrido amable y sin tecnicismos por lo que realmente hay dentro de un archivo E57 — y un truco ingenioso que nuestro propio software hace con él.
¿Por qué hace falta un formato especial?
Una foto normal no es más que una cuadrícula de píxeles de colores — sencillo. Un escaneo 3D es más complejo. Para cada uno de sus millones de puntos quieres guardar dónde está en el espacio (tres números: X, Y, Z), qué color tiene, con qué intensidad rebotó el láser (su intensidad — piensa en una "foto láser" en blanco y negro) y, a menudo, las fotos panorámicas que el escáner tomó al mismo tiempo.
Ahora imagina que una persona escanea con un Faro, un colega usa un Leica y el cliente abre el resultado en software de Autodesk. Tres máquinas, tres programas — y todos necesitan leer el mismo archivo, años después, sin rogarle a un proveedor un decodificador secreto. Ese es el problema que resuelve E57. Es un estándar abierto y neutral respecto al proveedor (publicado como ASTM E2807 y basado en la biblioteca de código abierto libE57). La gente lo llama el "PDF de las nubes de puntos": un archivo portátil que todos saben leer.
La gran idea: un mapa de texto con músculo binario
En esencia, un archivo E57 es un híbrido de dos cosas muy distintas unidas entre sí: un pequeño fragmento de XML — texto simple y legible para humanos que actúa como índice — y grandes bloques de datos binarios que contienen los millones de números en bruto, almacenados de forma compacta para ganar velocidad.
¿Por qué poner el mapa al final? Porque mientras un escáner está escribiendo el archivo todavía no sabe cuánto ocupará todo, así que transmite primero los datos en bruto y escribe un resumen ordenado cuando termina. La ventaja es enorme: para extraer un escaneo de un archivo de 20 gigabytes, el software lee el pequeño encabezado, salta al mapa XML, encuentra la línea que dice "el escaneo #3 está en el byte 4.812.000.000" y va directo allí.
Red de seguridad discreta: todo el archivo se divide en "páginas" de 1024 bytes, y cada página reserva sus últimos 4 bytes para una suma de verificación — una huella que permite al software detectar si el archivo se corrompió.
Todo cuelga de una sola raíz
Abra ese mapa XML y encontrará un árbol — exactamente como las carpetas de su ordenador. Hay un único root, y dos ramas hacen la mayor parte del trabajo: data3D, una lista numerada de escaneos, e images2D, una lista numerada de fotos (normalmente los panoramas de 360° que tomó el escáner).
Dos formas de escribir un punto
Un escáner láser no piensa realmente en X, Y, Z. Se queda en un punto y gira, y para cada punto conoce tres cosas: alcance (cuánto recorrió el haz), azimut (cuánto gira alrededor, de izquierda a derecha) y elevación (cuánto sube o baja). Esas son coordenadas esféricas — la lengua materna del escáner. La mayoría del software, sin embargo, prefiere las coordenadas cartesianas X, Y, Z. E57 guarda ambas sin problema, y convertir una en otra es un poco de trigonometría rápida.
Tres tipos de foto incrustada
Las fotos de images2D no son enlaces a archivos en alguna carpeta — el JPEG o PNG real está guardado dentro del E57. Y hay más de un tipo de foto incrustada. E57 envuelve cada una en una "representación" que le dice al software cuánto puede confiar en la imagen desde el punto de vista geométrico. La diferencia se reduce a una sola pregunta: ¿qué tan completamente está descrita la cámara?
sphericalRepresentation— un panorama completo de 360° × 180°, la familiar imagen estirada equirectangular 2:1. Como la proyección es conocida, cada píxel corresponde a una dirección exacta, así que encaja perfectamente con la nube. Este es el camino principal en nuestro flujo: lo leemos, ajustamos el lienzo a un 2:1 limpio y lo pasamos al visor de panoramas.pinholeRepresentation— una foto con una lente normal, descrita por el clásico modelo de cámara estenopeica (distancia focal, tamaño del sensor, centro óptico). Eso basta para que el software conozca también la dirección de cada píxel, aunque con un campo de visión más estrecho. En la práctica, así es sobre todo como funciona Leica: escribe un cubemap ya preparado — las seis caras planas del cubo mirando hacia fuera — directamente en el E57, y nuestra ruta de caras del cubo las une exactamente en un panorama completo. Es uno de los casos más fáciles de convertir de nuevo en una imagen 360° limpia.visualReferenceRepresentation— una foto sin ningún modelo de cámara, explícitamente "solo para el ojo humano". No se puede medir con ella ni proyectarla sobre la nube; es solo una imagen de referencia. Nuestro importador las conserva como comentarios adjuntos en lugar de colocarlas en 3D.
Aquí está el truco. sphericalRepresentation es la opción más popular, pero es sorprendentemente fácil equivocarse de forma sutil, y por eso el mismo escaneo puede verse distinto de un programa a otro.
- Las zonas ciegas se recortan. Todo escáner tiene un punto que no puede ver — clásicamente justo hacia abajo, donde está su propio trípode. Algunos exportadores simplemente recortan el panorama ahí, dejando un hueco o una altura fuera de estándar.
- Píxeles rectangulares. Un panorama limpio tiene píxeles cuadrados (
pixelWidth=pixelHeight); algunos archivos no los tienen, así que la imagen parece estirada hasta que se reescala. - La dirección incorrecta es “forward”. La rotación almacenada con un panorama indica qué dirección queda en el centro de la imagen, y no hay un acuerdo universal sobre lo que siquiera significa “forward” — algunos exportadores la orientan al norte, otros al este. Un pequeño error aquí gira toda la vista.
- Las herramientas de edición pueden perder datos. Volver a guardar un E57 a través de CloudCompare, por ejemplo, puede eliminar la posición de captura de las imágenes
pinholeRepresentation— las fotos sobreviven, pero ya no saben dónde se tomaron.
En resumen: en la práctica, distinto software suele mostrar el mismo E57 de forma diferente. Nuestro importador intenta suavizar las peculiaridades habituales — cuadrar los píxeles rectangulares, corregir la orientación del panorama y estandarizar el lienzo 2:1 — para que un tour se vea bien sin importar qué herramienta escribió el archivo.
Cuando el panorama está integrado en la propia nube
Aquí tienes una de las ideas más elegantes — y menos apreciadas — de todo el formato. Además de los panoramas almacenados como imágenes separadas, un panorama también puede esconderse dentro de la propia nube de puntos. Un escáner láser no dispara al azar: recorre una cuadrícula ordenada de ángulos, fila por fila, columna por columna, como un televisor antiguo pintando una pantalla. E57 puede conservar ese orden: cada punto recibe un rowIndex y un columnIndex que indican de qué celda de la cuadrícula procede. Un escaneo almacenado así se llama estructurado.
La ventaja: si los puntos están sobre una cuadrícula, la nube ya es una imagen. Léela fila por fila y cada punto cae en un píxel: el panorama vuelve sin ninguna reproyección ingeniosa. El archivo incluso registra el tamaño de la cuadrícula en sus indexBounds (columnMaximum, rowMaximum), de modo que el software conoce la resolución de antemano: nuestro sintetizador toma el ancho de salida directamente de columnMaximum + 1.
Pero una cuadrícula tiene que ser un rectángulo perfecto, y el mundo real no lo es. ¿Qué pasa con las direcciones en las que el haz salió hacia el cielo abierto y no volvió nada? La respuesta es pragmática: rellenar esas celdas con puntos ficticios — muy a menudo con un alcance de exactamente 0, es decir, "haz enviado, nada impactado". Mantienen el rectángulo completo, pero no son geometría real, así que un lector atento debe apartarlos. El nuestro marca cada punto de alcance cero, lo coloca a una distancia ficticia muy lejana para que la matemática de la cuadrícula siga funcionando y nunca trata esos puntos fantasma del cielo como superficies reales cuando construye el mapa de profundidad o exporta la nube.
Convertir un escaneo de nuevo en una foto en la que puedas entrar
No todos los escaneos llegan en una cuadrícula ya preparada: algunos son solo un conjunto suelto y no estructurado de puntos. La buena noticia: el panorama todavía se puede recuperar, y aquí es donde el formato se cruza con nuestro propio trabajo. Porque un escaneo es en realidad "una esfera completa de puntos medidos como ángulos alrededor de un único punto", así que puedes desplegarlo en un panorama plano.
Anota el ángulo de cada punto, deja que izquierda-derecha recorra el ancho de la imagen y arriba-abajo su altura, y cada punto cae en un píxel: el familiar panorama equirectangular 2:1 estirado. El mapa de profundidad es el ingrediente mágico: con una distancia detrás de cada píxel, un panorama que parece plano se vuelve medible y recorrible: haz clic en dos puntos de una pared y el software conoce la distancia real, porque nunca olvidó los datos 3D que hay debajo.
Entonces, ¿por qué importa E57?
Porque es el punto de encuentro neutral. Un topógrafo escanea un puente con una marca de hardware, un ingeniero lo abre en otro software y un arquitecto lo archiva para los próximos veinte años: E57 es el único archivo en el que los tres pueden confiar, sin que ningún proveedor tenga las llaves. Mantiene juntos el color, la intensidad, la geometría, los panoramas y las importantísimas posiciones del sensor en un solo lugar, como un estándar abierto que cualquiera puede implementar.
Un último dato curioso: la hora de captura dentro de un E57 se cuenta en tiempo GPS, es decir, segundos desde el 6 de enero de 1980, el momento en que se encendieron los relojes de los satélites GPS, y no desde la época informática habitual de 1970. Si te equivocas, un escaneo tomado hoy parecerá haber ocurrido en 2013.
¿Quieres profundizar más?
- libE57.org — la biblioteca de código abierto de referencia y la base del formato.
- ASTM E2807 — el estándar oficial.
- libE57Format · Image2D — definiciones exactas de las representaciones esférica, de cámara estenopeica y de referencia visual.
- Paul Bourke’s E57 notes — un desglose técnico conciso del encabezado y la estructura.