lunes, 7 de septiembre de 2015

Coordenadas uv para lightmaps

Un problema bastante tonto, pero que me hizo perder casi dos días de trabajo. Cuando comencé a poner en Unity los escenarios que había modelado en 3Ds Max encontré que tenía unos artefactos extraños en las sombras.


Tal y como se ve en la imagen había zonas mal iluminadas, cuadrados negros extraños. Bueno, Unity 5 trae iluminación indirecta, el motor de iluminación offline (beast) va trabajando creando lightmaps con cada cambio, así que debía ser alguna mala configuración. Así que empiezas a mirar todas las opciones, repartidas entre la ventana de iluminación, las luces, el modelo... Lo único que veo claro es que con luces en tiempo real se ve bien y con luces pre-calculadas es donde surge el problema. Eso descarta que el problema sea en el modelo, que haya hecho algo mal en los mapas uv al crearlo.

Cada prueba es super lenta, cambias un parámetro y recalcula toda la iluminación de la escena, dependiendo de la escena y los parámetros, entre 2 minutos y 2 horas. Normalmente unos 10-20 minutos. Así que era probar una cosita y esperar un montón para ver el resultado, iba escribiendo la memoria entre medias, pero la sensación de no avanzar y estar atascado es tremenda.

Probaba a activar y desactivar cosas, cambiar la resolución de los mapas de iluminación, aunque no estaba convencido, en teoría una mala resolución me podría hacer que fuera muy lento o que las sombras fueran cuadrados enormes, pero no que salieran pequeños cuadrados al azar por todo el modelo. Pero como uno es novato y no ve la razón, pues prueba de todo por si hubiera algún problema oculto que todavía no conoce. Internet no ayudaba, es difícil buscar este error y los problemas que había en la red eran similares pero por causa diferente.

Finalmente di con ello. En las opciones de importación del modelo (en la ventana de proyecto), hay un checkbox que dice “generate lightmaps uv”, y en Unity 5 está por defecto desmarcado. Los modelos que yo hago tienen mapeado uv para textura pero no para mapas de luz. De hecho nunca me había preocupado en ello, pensaba que era el mismo mapeado o lo hacía solo el motor, en Unity 4 nunca tuve este problema. Una vez que se marca ese check (y se aplican los cambios), el motor recalcula la iluminación y se ve bien, y da igual los parámetros que elijas se ve bien siempre. Puede ser mejor o peor según lo que te puedas permitir, pero nada que ver con esa imagen tan fea inicial. Problema sencillo, se soluciona con un click, si sabes donde... Si no lo sabes, pues 2 días buscando y a aprenderlo para que no vuelva a pasar. 


1 comentario :

  1. Muchas gracias!
    Realizando un proyecto de final de curso de programación he decidido meterme en la faena de hacer un juego para android y a varios días de presentar el proyecto no podía exportar este porque siempre se quedaba cargando y sabía que había un problema relacionado con la iluminación pero no veía cual y donde estaba el problema.
    Gracias otra vez y buen trabajo!

    ResponderEliminar