lunes, 16 de enero de 2017

Mapa III. Módulos de edificios.

Hasta ahora hemos estado pensando la manera de crear la cuadrícula de la ciudad poniendo carreteras y decidiendo qué partes podrían ser de zonas verdes, servicios, etc.

Lo que queremos hacer a continuación son las piezas del puzzle que hicimos (y os podéis descargar en el artículo) en 3D. Esto va a traer trabajo porqué a parte de hacer los modelos de las piezas en 3D, hay que texturizarlos uno por uno. Las pruebas y error que tendremos que hacer para que todo cuadre nos traerán bastante trabajo, así que vamos a cambiar un poco de tema para seguir avanzando.

Al hacer el esquema de la ciudad, estamos creando a la vez la disposición de las aceras. Cuando hagamos las carreteras en 3D, daremos volumen a las aceras. Encima de ellas es donde iremos poniendo los distintos edificios o zonas verdes.

Dentro de los edificios, distinguimos entre:
  • Construcciones genéricas como bloques de oficinas y de pisos.
  • Y las más específicas como pabellones, iglesias, campos callejeros de baloncesto, gasolineras, aparcamientos, etc.
Empezaremos con el primer tipo y para ello haremos variaciones de cada uno. El plan es rellenar la ciudad con estos edificios, cuando estén las carreteras hechas en 3D, y dejar las zonas que hemos especificado de servicios para las construcciones especiales.

Aún así, no lo tenemos claro, y creemos que al final tendremos que añadir más cantidad de este tipo especial de construcciones, pero quizás lo hagamos entre las aceras de los edificios. Creemos que pueden verse demasiado rellenas de bloques, y probablemente demos aire si entre edificios de oficinas o de pisos ponemos un aparcamiento o un campo de baloncesto.

Son cosas que, a falta de experiencia, iremos viendo mientras vayamos montando la ciudad.

Para montar un edificio en 3D haremos distintos modelos de "cajas". Algunas más altas y otras más anchas. Una vez hecho el modelo haremos la UV y le daremos color.

Una vez hechos distintos tipos de edificios haremos una lista de objetos a modelar que será lo que compongan esos edificios. Todos estos objetos tendrán su UV hecha para colorearlos. Dependiendo del objeto parecerá más un edificio de oficinas o de apartamentos.
  • Para las oficinas: ventanas sencillas, puertas dobles, respiraderos, aires acondicionados grandes o letreros para publicidad.
  • Para los apartamentos: ventanas más ornamentadas, balcones, maceteros, parabólicas, tuberías, acceso a las azoteas o tendederos.
Una vez hechos muchos objetos así, podemos empezar a montar edificios y hacer las primeras pruebas. Este sería el resultado de una posible manzana de edificios de nuestra ciudad:
Prueba de módulo de edificios



Aunque es difícil de ver, si os fijáis, observaréis que también hemos puesto otro tipo de objetos, como sombrillas, bancos, basuras, etc. Estos ítems son otra lista de modelos que estamos haciendo para añadir a la ciudad. Si vemos que puede ser interesante, ya haremos otro artículo para hablar sobre ellos, aunque solo sea mostrarlos.

De momento nos va a costar avanzar en el 3D en este tipo de módulos (de carreteras y edificios) porqué ahora es momento de hacer muchas pruebas con unity para ver como importamos todos estos objetos.

Esperamos que os haya gustado :).

jueves, 12 de enero de 2017

TIP#2. Solución al problema de los ejes entre Blender y Unity.

Seguimos con nuestra nueva sección de tips con un problema bastante molesto que nos hemos encontrado al trabajar con el software que usamos.

Para los más despistados, blender es un programa de código libre que sirve para modelar objetos 3D y animarlos (eso a grandes rasgos, porqué hace mucho más :D).

Una de las ventajas realmente buenas que tiene unity es que puedes importar archivos creados en blender de manera fácil, simplemente arrastrando el archivo .blend dentro de la carpeta del proyecto de unity.

Pero uno de los primeros problemas que uno se encuentra cuando hace esto, es que los ejes de coordenadas XYZ que vienen por defecto de blender no coinciden con los ejes de unity. Para concretar, el eje vertical en blender es el Z mientras que en unity es el Y; y el eje Y en blender es el -Z en unity. Un lío vamos. Esto conlleva que una vez importado el objeto dentro de unity, los ejes locales del objeto no coinciden con los ejes globales de la escena.

En la siguiente imagen se muestra el problema. Es un objeto que se ha importado tal cual a unity. Este objeto tiene varios subobjetos (el bloque de casas, la acera, etc.). Si seleccionamos todo el objeto en si (el objeto padre) los ejes coinciden con los de unity, pero si en cambio seleccionamos uno de los subobjetos, vemos que no, tal y como se muestra en la imagen.
Imagen de los ejes del objeto sin aplicar ninguna corrección.

Aunque pueda parecer un problema insignificante para un objeto de este tipo, realmente puede traer muchos dolores de cabeza para otro tipo de objetos. Pongamos que en lugar de unas casas queremos importar un coche, el cual luego moveremos por programación a partir de un script. Si los ejes no coinciden con los de unity, intentar mover el coche aplicando los vectores de físicas será un auténtico calvario.

Unity por defecto no tiene una solución a este problema, así que cada uno se tiene que buscar la vida para encontrar la manera de solventarlo. En nuestro caso, después de buscar bastante y probar varias cosas, dimos con un script para unity que corrige este error automáticamente.

El autor del código tiene como apodo Edy y ésta es la página en cuestión dónde comenta este problema.

Además enlaza a la página dónde se puede descargar el script y dónde también hay las instrucciones de uso, aunque es bastante sencillo de utilizar.

En nuestro caso, para facilitaros un poco el trabajo, os comentaremos por pasos como debéis aplicar el script y cómo tenéis que configurar unity para que funcione automáticamente. Así que vamos a ello.
  1. Ir a este enlace y hacer clic al botón verde de arriba a la derecha para descargar en formato ZIP el archivo.
  2. Dentro del archivo descargado veremos que hay una carpeta llamada Editor. Debemos copiar esta carpeta a la raíz de nuestro proyecto de unity.
  3. Finalmente, debemos editar el nombre de la carpeta de nuestro proyecto donde importaremos los archivos .blend y añadir al nombre la palabra [importer]. De este modo, todos los objetos que arrastremos dentro de esta carpeta serán tratados y corregidos automáticamente por el script.
Para que veáis como queda la carpeta del proyecto después de estas modificaciones os mostramos una captura de pantalla del resultado.
Árbol de carpetas de nuestro proyecto en Unity.
Aunque esto ya va a gustos de cada uno, normalmente dentro de la carpeta Assets se crea una nueva carpeta Prefabs dónde se incluye todos los prefabs del proyecto, los cuáles son los objetos 3D importados de blender. En este caso hemos renombrado esta carpeta a Prefabs [importer] para que cada vez que arrastramos un archivo .blend dentro de esta carpeta, aplique la corrección de ejes automáticamente.

Ahora sí, una vez importado nuestro objeto de ejemplo, si comprobamos los ejes del mismo subobjeto de la primera captura vemos que estos coinciden con los de unity, tal y como se muestra en la siguiente imagen.
Imagen de los ejes del objeto luego de aplicar la corrección del script.
Eso es todo! Solo cabe darle las gracias a Edy por su gran trabajo haciendo este código y sobretodo, por compartirlo con la comunidad de unity. Cosas como estas se valoran mucho.

Esperamos que os haya sido útil :).

lunes, 9 de enero de 2017

Mapa II. Croquis del mapa.

En el anterior artículo escribimos sobre nuestro puzzle casero que hicimos para intentar abarcar todas las posibilidades que podían haber para montar las carreteras. Por cierto, no dejéis de pasar a leerlo si no lo habéis hecho, ya que os podréis descargar nuestras piezas :).

Una vez teníamos las piezas, pensamos en como podía ser el mapa. Qué cosas podían haber y las distintas zonas que nos gustaría que apareciesen. Zonas verdes, zonas más industriales, edificios especiales (como escuelas, gasolineras, zonas de aparcamiento, etc), zonas abandonadas, zonas desérticas y otras más boscosas. En fin, un poco de todo.

Pero antes de ponernos a montar piezas, teníamos que montar un croquis rápido para definir esas zonas de forma más genérica. A raíz de eso, obtuvimos el siguiente esquema:
Croquis del mapa entero por zonas.


Después de especificar todas esas zonas que nos gustaría que apareciesen en el mapa entero, nos queríamos poner a hacer el mapa más específico de las carreteras, pero seguíamos teniendo un problema de creatividad. ¿Cómo nos ponemos a hacer un mapa de cero? Una vez más, usamos las referencias para tener algo donde basarnos. Nos miramos algunos mapas de ciudades, y recurrimos al típico, Manhattan. Queríamos tener un sitio icónico en la ciudad, y pensamos en un Central Park. A partir de un mapa cualquiera de la ciudad, lo ponemos de base, y nos ponemos a crear carreteras encima. No es exactamente igual, pero sí es muy parecido, ya que hemos intentado poner elementos que nos gustaban, como Central Park, los muelles o el río pasando por medio de todo nuestro mapa.

A partir de esa idea que teníamos de mapa, y ya sabiendo como van las cosas por experiencia, hay que dividir el trabajo en módulos e ir avanzando conforme vaya progresando. Quién mucho abarca, poco aprieta. Primero haremos la parte de la ciudad. Aún no sabemos si toda, porqué de momento solo hemos hecho algunas pruebas, y no sabemos si será demasiado grande o no. Habrá que hacer pruebas de todo tipo con el mapa que tenemos, para ver si carga bien, si el rendimiento es correcto o si se hace muy largo ir de una punta a otra y que pueda resultar pesada la jugabilidad.

Este es nuestro resultado final:
Croquis del mapa de la parte de la ciudad principal.




Por si tenéis curiosidad, el mapa lo hemos montado con blender. No sabíamos como hacerlo para que fuera fácil y lo más rápido posible, y después de hacer alguna prueba, nos decidimos por éste método. Creamos tantos planos nuevos como piezas del puzzle teníamos. Hicimos las UVs a los planos en un solo clic y usamos las imágenes de las piezas como texturas. A partir de ahí, copiar y pegar polígonos y con la herramienta magnética de snap para cuadrar los vértices entre piezas, fuimos montando. No le dimos un acabado final, ya que tendríamos que haber unido bien los polígonos y realizar una textura bien hecha para toda la pieza resultante, pero nos bastó para el esquema que andábamos buscando.

Entre otras cosas porqué sabíamos que ese mapa no iba a ser el definitivo. Las piezas del puzzle solo son para montar el esquema, ya que no las usaremos luego para las carreteras definitivas.