Menu

lunes, 13 de enero de 2014

Terreno real de Google Earth en Unity

Cuando vi el juego Dayz me interesó mucho que hubiesen utilizado un mapa de alturas real para un videojuego. Así que estuve investigando un poco y encontré un método para importar terreno de Google Earth a Unity, así que voy a explicar aquí cómo hacerlo.


1.- SketchUp


SketchUp es un programa de modelado 3D que se usa (o usaba) bastante en arquitectura. Es un programa de líneas sencillas que da resultados muy buenos. Lo primero que necesitamos es descargarlo e instalarlo. El programa viene con una utilidad para importar terreno en la escena con relieve real. Para ello, vamos al menú Archivo->Geolocalización->Añadir localización...

[Nota: esta opción a veces da problemas con el Firewall, así que si os aparece una pantalla blanca, comprobad que SketchUp tiene permisos para pasar a través de vuestro firewall.]

Nos aparece un mapa de la tierra con un buscador para que elijamos localización. Escribimos el lugar que queramos, en este caso, vamos a buscar Granada Veleta, ya que lo que me interesa es ver el mapa de alturas del pico Veleta, el más alto de la península. Luego pulsamos en Seleccionar región, ajustamos el marco como queramos y después Agarrar. La foto que hemos tomado aparecerá como un plano en la escena.




A continuación vamos al menú Archivo->Geolocalización->Mostrar Terreno. Ésto convierte la imagen en un objeto con las alturas correctas.



Ahora sólo tenemos que exportar el archivo como un objeto .obj en Archivo->Exportar->Modelo 3D
Ésto nos crea también una carpeta con las texturas.

Si queremos una zona más extensa podemos repetir el proceso de Añadir Localización, y SketchUp coloca automáticamente el nuevo terreno junto al anterior.

Hay que tener en cuenta que cuanto más cerca esté el zoom de la tierra, más resolución tendrá más tarde la textura en Unity.

2.- Convertir el obj en un terreno de Unity


El Veleta al natural y en Unity
Abrimos el objeto en Unity, que aparecerá en un principio sin la textura. Se la podemos asginar de forma normal. Lo que queremos ahora es trasladar este objeto 3D a un objeto de Terrain de Unity. Para ello vamos a utilizar un script llamado Object2Terrain que podemos encontrar en la comunidad unify: http://wiki.unity3d.com/index.php?title=Object2Terrain

Éste script es una ampliación del editor. Significa que ampliará nuestro menú de Unity con una nueva funcionalidad, y para ello debemos crear una carpeta llamada Editor y poner el script dentro. Entonces aparecerá una nueva entrada de menú llamada Terrain, con una opción (la única) llamada Object To Terrain.

Lo siguiente que hacemos es crear un terreno. Después seleccionamos el objeto que hemos importado (hay que fijarse en que es un objeto compuesto, y queremos el objeto hijo, que es donde está la malla realmente. En mi caso se llama Mesh1_Google_Earth_Terrain Model). Con el objeto seleccionado, pinchamos en el nuevo menú y se dispara el script, que lo que hace es leer las alturas del objeto y pasarlas a nuestro terreno.



Con ésto tenemos un terreno en Unity el que podemos texturizar con la propia textura de Google Earth o con las texturas que queramos.

Puedes ver otro tutorial sobre Texturizado Automático del Terreno de Unity aquí.
¿Quieres saber cómo añadir pinceles al editor de terrenos?

6 comentarios:

  1. funciono de maravilla, sin embargo el tamaño del terreno afecta? porque solo me transforma una parte.. saludos

    ResponderEliminar
  2. Si tu terreno es más grande que el objeto importado, una parte del terreno quedará sin modelar, y si es más pequeño, una parte se te quedará fuera. Asegúrate de que el terreno es del tamaño adecuado en las propiedades del terreno.

    ResponderEliminar
  3. una preguntota.. cuando
    le doy grab a la imagen, se quita el cuadro de al region y solo queda abierta la hoja de google earth, es decir que el terreno elegido no me lo pasa a sketch up, alguien sabe por que?

    ResponderEliminar
    Respuestas
    1. También me sucedía, se soluciono instalando Google Earth, al parecer sketch up tiene dependencias de este.

      Eliminar
  4. SketchUp tiene un bug en ese tema que sucede con algunas versiones de windows, aunque no he podido descubrir cuáles. Por un lado asegúrate de que el firewall no te está interfiriendo en la conexión, ya que a veces la bloquea. Yo no conseguí hacerlo funcionar en uno de los ordenadores en los que estuve trabajando y tuve que usar otro :/

    ResponderEliminar
  5. Hola Jorge, gracias por el tutorial. En estos momentos lo estoy poniendo en practica y me funciona de maravilla pero no consigo algo muy concreto y necesito tu ayuda por si sabes alguna solución.
    Si obtenemos un solo mapa del SketchUp, al importarlo a unity y realizar el proceso con el script es fácil por que es solo una maya, pero... ¿como podríamos hacer si el mapa es mas grande y por lo tanto mas mayas?.¿Como podríamos unir las mayas en una sola antes de realizar el proceso del script con el terreno?

    Muchas gracias y un saludo.

    ResponderEliminar