⏱️ Lectura: 18 min
Una montaña real de 4.634 metros no entra en Minecraft por defecto: el juego corta cada columna de bloques a los 256 que trae de fábrica. Un estudio suizo resolvió ese límite para meter el país entero, 41.285 km², dentro del juego a escala 1:1, un bloque por cada metro de terreno, usando nada más que datos geoespaciales abiertos publicados por la agencia federal de cartografía.
📑 En este artículo
- TL;DR
- ¿Qué son los datos geoespaciales abiertos?
- Por qué importan los geodatos públicos en un proyecto jugable
- Cómo funciona el pipeline: de GeoTIFF a bloque
- Ejemplos prácticos: de elevación a bloques
- Cómo empezar: replicar el pipeline con herramientas abiertas
- Casos de uso reales
- Errores comunes y buenas prácticas
- Comparativa de herramientas para llevar geodatos a un mundo voxel
- Profundizando: qué cambia por dentro cuando el mundo es cúbico
- Preguntas frecuentes
- ¿Qué datos geoespaciales abiertos usa el proyecto de Suiza en Minecraft?
- ¿Cualquier país puede replicar este pipeline con sus propios geodatos públicos?
- ¿Por qué Minecraft necesita un mod y no alcanza con generar un mapa normal?
- ¿Qué hardware hace falta para cargar un país entero con datos geográficos abiertos?
- ¿Qué pasa en los bordes del área cuando falta el DEM oficial?
- ¿Es legal vender un producto construido sobre datos geográficos abiertos?
- Referencias
El resultado se llama Blocks, y detrás tiene un pipeline replicable: tomar un modelo de elevación público, convertirlo en un mapa de alturas, y generarlo como un mundo voxel con un mod que elimina el techo de 256 bloques. Este artículo desarma ese pipeline paso a paso con herramientas open source.
TL;DR
- Cubic Chunks quita el límite de 256 bloques de Minecraft para que una montaña de 4.634 m quepa entera
- GDAL y rasterio convierten un GeoTIFF de elevación en un heightmap de 16 bits listo para WorldPainter
- La escala 1:1 (un bloque, un metro) evita cualquier conversión de unidades entre el geodato y el bloque
- Las coordenadas LV95 de swisstopo se trasladan a bloques con una resta de origen, sin reproyectar nada
- El mismo pipeline sirve con cualquier catálogo de geodatos públicos que publique un DEM en formato abierto
¿Qué son los datos geoespaciales abiertos?
Los datos geoespaciales abiertos son conjuntos de información georreferenciada (elevación, imágenes aéreas, límites administrativos, hidrografía) que un gobierno u organismo público libera con licencia de reutilización libre, sin pago ni registro, normalmente en formatos estándar como GeoTIFF, Shapefile o GeoPackage.
En Suiza ese rol lo cumple swisstopo, la oficina federal de topografía, a través de su portal data.geo.admin.ch. Ahí conviven el modelo de elevación swissALTI3D, la ortofoto SWISSIMAGE, los límites swissBOUNDARIES3D y los nombres de lugar swissNAMES3D, todos descargables sin pedir permiso especial.
Lo mismo existe en otros países con otros nombres: el IGN en Francia, el INEGI en México, los institutos geográficos nacionales de buena parte de América Latina, o el programa 3DEP del USGS en Estados Unidos. El pipeline de este artículo no depende de qué agencia publique el dato, depende de que el formato sea abierto.
La licencia importa tanto como el formato. swisstopo publica su catálogo bajo condiciones de uso abierto equivalentes a una atribución libre: no hace falta pedir autorización para usarlo en un proyecto comercial como este, solo citar la fuente. Esa combinación de formato estándar más licencia sin restricciones es la que vuelve el pipeline reproducible fuera de Suiza.
Por qué importan los geodatos públicos en un proyecto jugable
Reconstruir un país en Minecraft no enseña nada nuevo sobre cartografía, pero sí demuestra algo que casi nadie prueba en la práctica: que un dato publicado por una agencia estatal para catastro o planeamiento sirve, sin pedir permiso ni pagar licencia, para un producto completamente distinto al que motivó su publicación.
Para una agencia de cartografía, publicar el dato con licencia abierta no es un gesto simbólico: significa que terceros (empresas, universidades, aficionados) construyen productos que la agencia nunca habría presupuestado, desde apps de rutas de montaña hasta, en este caso, un mundo de Minecraft que se vende por suscripción.
Dinamarca hizo algo similar hace más de una década, cuando su agencia de geodatos reconstruyó el país completo en Minecraft a partir de su propio catálogo abierto. Una década después, la disponibilidad de modelos de elevación de alta resolución y de mods que superan las limitaciones originales del juego hace que el mismo ejercicio sea mucho más fiel al terreno real.
Por eso este proyecto importa como caso de estudio: muestra cómo datos geoespaciales abiertos terminan, sin fricción legal ni técnica insalvable, convertidos en un mundo que cualquiera puede recorrer caminando.
Cómo funciona el pipeline: de GeoTIFF a bloque
El pipeline completo tiene cuatro pasos fijos: descargar el geodato, procesarlo a un formato que el motor de juego entienda, generar el mundo, y decidir en qué momento ese mundo se construye de verdad. Ninguno de los cuatro depende de que el país sea Suiza: cambia el origen del dato, no la lógica.
El insumo: un modelo digital de elevación
El corazón del pipeline es un raster de elevación: una cuadrícula donde cada celda guarda la altura del terreno en metros sobre el nivel del mar. swissALTI3D cubre todo el territorio con resolución de hasta 0,5 metros en zonas pobladas y 2 metros en zonas alpinas, publicado como GeoTIFF descargable por región desde swisstopo.
Ese archivo no tiene textura ni color, solo números. La textura llega aparte, de SWISSIMAGE, el mosaico de fotografía aérea que swisstopo actualiza cada tres años y que el pipeline usa para pintar cada bloque con el color real del terreno que representa.
La escala 1:1 y por qué simplifica todo
Minecraft ya resuelve una parte del problema sin que el autor tenga que inventar nada: su unidad mínima, el bloque, mide un metro cúbico. Eso significa que un DEM en metros se traduce directo a bloques sin ningún factor de escala: la celda que dice 2.300 en el raster se convierte en una columna de terreno de 2.300 bloques de altura, sin redondeos raros ni tablas de conversión.
import rasterio
import numpy as np
with rasterio.open("swissalti3d_sector.tif") as src:
elevacion = src.read(1) # metros sobre el nivel del mar, un valor por celda
altura_bloques = np.round(elevacion).astype(np.int32)
print(altura_bloques.max())
Con un sector que incluya la Dufourspitze, este script imprime 4634: el valor de altura máxima del raster ya es, directamente, el número de bloques que esa columna necesita en el mundo.
De coordenadas suizas a coordenadas de Minecraft
swisstopo publica sus datos en el sistema de referencia LV95 (EPSG:2056), donde cada punto tiene un este y un norte medidos en metros desde un origen fijo. Como Minecraft también usa coordenadas enteras en metros (X y Z), la conversión es una resta, no una reproyección.
def lv95_a_minecraft(este, norte, origen_este=2485000, origen_norte=1075000):
bloque_x = int(este - origen_este)
bloque_z = int(origen_norte - norte) # Z crece al sur, LV95-norte crece al norte
return bloque_x, bloque_z
print(lv95_a_minecraft(2600000, 1200000))
La función devuelve (115000, -125000): esas dos restas son todo lo que hace falta para pasar de un punto geográfico suizo a una coordenada de bloque, sin matrices de proyección ni librerías geoespaciales pesadas.
El límite de altura, y cómo Cubic Chunks lo rompe
Minecraft vainilla divide el mundo en columnas de 16×16 bloques que, hasta la versión 1.17, terminaban en 256 de altura. Una montaña de 4.634 metros no entra ahí, se corta a menos de un sexto de su altura real. Cubic Chunks resuelve esto cambiando la unidad de generación: en vez de una columna continua, el mundo se arma con cubos independientes de 16x16x16 que se apilan sin techo.
flowchart LR
A["Portal de datos abiertos (swisstopo)"] --> B["Modelo de elevación swissALTI3D (GeoTIFF)"]
A --> C["Ortofoto SWISSIMAGE"]
A --> D["Hidrografía y glaciares (vectorial)"]
B --> E["Procesamiento GDAL y rasterio"]
C --> E
D --> E
E --> F["Heightmap y textura por bloque"]
F --> G["Generador de mundo Cubic Chunks"]
G --> H["Mundo voxel explorable en Minecraft"]
flowchart TD
A["Columna vanilla de Minecraft"] --> B["Tope fijo: 256 bloques (0 a 255)"]
C["Columna de Cubic Chunks"] --> D["Cubos de 16x16x16 apilados sin techo"]
B --> E["La Dufourspitze (4634 m) no entra entera"]
D --> F["La Dufourspitze mapeada a 4634 bloques completos"]
Ejemplos prácticos: de elevación a bloques
El mismo principio sirve para la textura. SWISSIMAGE da un píxel de 10 centímetros de resolución; el pipeline lo re-muestrea a un píxel por bloque (un metro) y busca, para cada color RGB, el bloque de Minecraft cuyo color promedio más se le parezca.
paleta = {
(85, 107, 47): "minecraft:grass_block",
(139, 137, 137): "minecraft:stone",
(240, 240, 245): "minecraft:snow_block",
(70, 130, 180): "minecraft:water",
}
def distancia(c1, c2):
return sum((a - b) ** 2 for a, b in zip(c1, c2))
def bloque_mas_cercano(rgb):
mejor = min(paleta, key=lambda c: distancia(c, rgb))
return paleta[mejor]
print(bloque_mas_cercano((72, 128, 183)))
Para un píxel azulado como (72, 128, 183), el resultado es minecraft:water: la paleta solo necesita unos pocos colores de referencia para cubrir terreno, roca, nieve y agua con una precisión aceptable a la distancia que se juega Minecraft.
Los bordes entre bosque, roca y nieve rara vez son un corte limpio en la realidad, y tampoco deberían serlo en el mundo generado. Una práctica habitual es mezclar la altitud (más nieve cuanto más arriba) con el color real de la ortofoto en vez de depender de un solo criterio: así un glaciar en retroceso, donde la foto aérea ya muestra roca desnuda bajo lo que el mapa viejo marcaba como hielo, se dibuja con el color actual y no con el dato desactualizado.
Los lagos, ríos y glaciares no vienen del modelo de elevación sino de capas vectoriales aparte: polígonos que delimitan dónde hay agua o hielo. El pipeline los usa para decidir, bloque por columna, si esa posición se rellena con minecraft:water, con minecraft:ice o con el terreno sólido que indique la elevación.
Cómo empezar: replicar el pipeline con herramientas abiertas
Esto no reproduce el mundo completo de Suiza, ese paquete de 24 GB es un producto cerrado, pero sí el mismo pipeline técnico aplicado a cualquier recorte con datos abiertos. Dependencias antes de empezar: Java 8 para Minecraft Forge 1.12.2, Python 3 con rasterio y numpy, GDAL, y el instalador de Forge.
- Instalar GDAL en Windows con
winget install OSGeo.GDAL. En macOS:brew install gdal. En Linux (Debian/Ubuntu):sudo apt install gdal-bin. - Descargar un recorte de modelo de elevación en GeoTIFF desde el visor abierto de tu país; para Suiza, el visor de swisstopo permite recortar swissALTI3D por región.
- Convertir el GeoTIFF a un heightmap de 16 bits:
gdal_translate -ot UInt16 -scale 0 4634 0 65535 -of PNG dem_recorte.tif heightmap.pngSalida esperada:
Input file size is 2000, 2000seguido de0...10...20...30...40...50...60...70...80...90...100 - done., y dos archivos nuevos,heightmap.pngyheightmap.png.aux.xml, en la misma carpeta. - Importar
heightmap.pngen WorldPainter (File > Import > Height map), fijando la escala de un bloque por metro. - Instalar Minecraft Forge 1.12.2 y copiar el
.jarde Cubic Chunks en la carpetamods; sin este paso el mundo exportado por WorldPainter queda recortado en 256 bloques igual que uno vainilla. - Abrir el mundo con el perfil de Forge activo y confirmar que la generación cúbica está habilitada (ver la sección Profundizando).
Casos de uso reales
Más allá de este proyecto puntual, el mismo patrón (DEM abierto más heightmap más motor de mundo sin límite de altura) aparece en simuladores de evacuación, en visualizaciones educativas de retroceso glaciar y en gemelos digitales de ciudades que usan Minecraft: Education Edition como interfaz accesible para estudiantes sin formación en SIG.
Un modelo hidrológico de inundación y un mundo jugable de Minecraft parten, literalmente, del mismo archivo: una grilla de elevación que dice por dónde escurre el agua. La diferencia está en qué hace cada sistema con esa grilla, no en el dato de origen, lo que explica por qué la infraestructura de geodatos abiertos de una agencia de cartografía termina reutilizada en dominios que nadie anticipó al diseñar el catálogo.
Errores comunes y buenas prácticas
La lista de fallos típicos se repite en casi cualquier intento de llevar geodatos reales a un motor de videojuego, no solo en este proyecto:
- Mezclar datums sin darse cuenta: un DEM en LV95 y una capa vectorial en WGS84 producen lagos desplazados varios metros del terreno real; reproyectá todo a un único sistema antes de cruzar capas.
- Heightmap de 8 bits: un PNG de 8 bits solo guarda 256 valores de altura, insuficiente para un rango de 0 a 4.634 metros; usá siempre 16 bits.
- Subestimar la RAM: generar terreno bajo demanda, como hace este proyecto, exige memoria disponible en el momento exacto en que el jugador entra a una región nueva, no solo al cargar el mundo.
- Ignorar el borde del recorte: fuera del área cubierta por el DEM nacional, cualquier visor cae a un modelo global de menor resolución, y el terreno se nota visiblemente más plano en esa franja.
⚠️ Ojo: el propio proyecto suizo documenta que su paquete completo necesita 16 GB de memoria RAM porque el mundo se construye mientras se camina, no de una vez; un recorte pequeño (como el área UNESCO de 2.400 km²) es la forma correcta de probar el pipeline antes de escalarlo a un país entero.
Comparativa de herramientas para llevar geodatos a un mundo voxel
| Herramienta | Qué hace | Límite de altura | Para quién |
|---|---|---|---|
| WorldPainter + heightmap PNG | Importa un mapa de alturas a un mundo Minecraft vainilla | 256 bloques (320 desde 1.18) | Un recorte rápido sin tocar código |
| Cubic Chunks (Forge 1.12.2) | Reemplaza columnas fijas por cubos apilables sin techo | Sin límite práctico | Relieve real: montañas, fosas, cañones |
| Minecraft: Education Edition + add-on | Carga terreno preprocesado como mundo educativo | Depende de la versión base | Aulas y divulgación, sin instalar mods |
| Pipeline cerrado (manifold3d.ch) | Producto terminado: país completo listo para jugar | Sin límite, usa Cubic Chunks internamente | Explorar sin construir el pipeline |
Profundizando: qué cambia por dentro cuando el mundo es cúbico
Un mundo vainilla de Minecraft guarda el terreno en formato Anvil: una región de 32×32 columnas, cada una con 16 secciones verticales de 16x16x16 bloques, hasta completar los 256 (o 384 en versiones recientes) de altura fija. Cubic Chunks sustituye esa estructura por un formato propio donde cada cubo de 16x16x16 es una unidad independiente que puede existir en cualquier coordenada Y, positiva o negativa, sin que el resto de la columna tenga que existir.
Eso tiene una consecuencia directa en cómo se genera el mundo: en vez de calcular una columna completa la primera vez que alguien se acerca, el motor solo genera los cubos cercanos al jugador en las tres dimensiones, no solo en X y Z. Es la misma razón por la que el proyecto suizo advierte que el mundo se construye mientras se juega: cada vez que alguien camina hacia un valle que nadie visitó antes, el motor tiene que leer el heightmap de esa zona y generar los cubos en tiempo real.
sequenceDiagram
participant J as Jugador
participant M as Minecraft
participant W as Paquete de mundo preprocesado
J->>M: se mueve hacia una region nueva
M->>W: pide los bloques de esa columna
W-->>M: responde con alturas y texturas del heightmap
M-->>J: renderiza el terreno recien generado
Note over M,W: la generacion ocurre bajo demanda, no de una sola vez
💡 Tip: antes de cruzar un modelo de elevación con una capa vectorial (límites, hidrografía), confirmá que ambos declaran el mismo EPSG en sus metadatos;
gdalinfo archivo.tiflo imprime en la primera pantalla de salida.
Confirmar que la generación cúbica está activa es sencillo: con Cubic Chunks instalado, bajar en modo creativo por debajo de Y=0 (o subir muy por encima de Y=256) sin toparse con un límite invisible confirma que el mundo dejó de usar columnas fijas. En un mundo vainilla, ese mismo intento se corta de golpe en el techo o el piso de bloques de borde del mundo.
La frontera entre el área cubierta por el DEM oficial y el resto del planeta es, en la práctica, el punto más frágil del pipeline: ahí donde swisstopo deja de tener autoridad, el terreno sale de otra fuente, normalmente un modelo global de menor detalle como Copernicus GLO-30, que da un punto cada 30 metros en vez de cada medio metro. El salto de resolución se nota: el terreno se aplana de golpe apenas se cruza el límite administrativo.
📖 Resumen en Telegram: Ver resumen
Tu próximo paso: bajá un recorte de 2×2 km de tu propio modelo de elevación nacional en GeoTIFF y corré el comando gdal_translate -ot UInt16 -scale de este artículo para ver tu primer heightmap de 16 bits en menos de cinco minutos.
Preguntas frecuentes
¿Qué datos geoespaciales abiertos usa el proyecto de Suiza en Minecraft?
Usa el modelo de elevación swissALTI3D, la ortofoto SWISSIMAGE, los límites administrativos swissBOUNDARIES3D y los nombres de lugar swissNAMES3D, los cuatro publicados por swisstopo en su portal data.geo.admin.ch.
¿Cualquier país puede replicar este pipeline con sus propios geodatos públicos?
Sí, siempre que exista un modelo de elevación en formato abierto como GeoTIFF: el procesamiento con GDAL, la importación a WorldPainter y la generación con Cubic Chunks no dependen de qué agencia publicó el dato.
¿Por qué Minecraft necesita un mod y no alcanza con generar un mapa normal?
Porque el formato de mundo vainilla fija la altura de cada columna en 256 bloques (320 en versiones recientes); una cordillera real supera ese límite varias veces, y solo un mod como Cubic Chunks cambia la estructura interna del mundo para permitirlo.
¿Qué hardware hace falta para cargar un país entero con datos geográficos abiertos?
El proyecto suizo documenta haber probado su paquete completo en un PC con 32 GB de RAM y en una MacBook Pro con 64 GB, y recomienda un mínimo de 16 GB porque el terreno se genera mientras se explora, no de una sola vez al cargar el mundo.
¿Qué pasa en los bordes del área cuando falta el DEM oficial?
El terreno pasa a salir de un modelo global de menor resolución, como Copernicus GLO-30, con un punto cada 30 metros, así que el relieve se ve notablemente más plano apenas se cruza el límite del área cubierta por el catálogo nacional.
¿Es legal vender un producto construido sobre datos geográficos abiertos?
Sí, mientras se respete la licencia de atribución de la fuente: swisstopo permite uso comercial de su catálogo abierto, y el propio proyecto Blocks cobra por el acceso descargable aunque el dato de base sea gratuito, algo habitual en productos construidos sobre geodatos públicos.
Referencias
- blocks.manifold3d.ch: página del proyecto que reconstruyó Suiza completa en Minecraft a escala 1:1.
- swisstopo: oficina federal suiza de topografía, fuente de los modelos de elevación y ortofotos usados en el pipeline.
- data.geo.admin.ch: portal oficial de descarga de geodatos abiertos del gobierno suizo.
- WorldPainter: editor de mundos de Minecraft open source con importación directa de mapas de altura.
- GDAL: biblioteca open source para leer, convertir y reproyectar datos raster y vectoriales geoespaciales.
📱 ¿Te gusta este contenido? Únete a nuestro canal de Telegram @programacion donde publicamos a diario lo más relevante de tecnología, IA y desarrollo. Resúmenes rápidos, contenido fresco todos los días.
Imagen destacada: Foto de Yifu Wu en Unsplash
¿Te sirvió? ¿Te dio otro error? Contalo abajo: las preguntas se responden y le sirven al siguiente que llegue.
Dejar un comentario
0 Comentarios