Quizás una de las tareas complejas que puede repercutir en el rendimiento de nuestro videojuego sería la representación de las luces sobre cada una de las superficies, en esta ocasión abordaremos el tema de las luces.
A decir verdad no soy un experto en el tema de lograr una iluminación perfecta, en mi caso prefiero luces en tiempo real aunque estas sean de iluminación por vértice, pero entiendo que a veces se puede llegar a una solución intermedia, en mi caso particular no logró un resultado convincente, porque quiero una combinación de luces fijas con luces dinámicas y aun no logro entender bien los light probes.
El asunto es que por cada luz que ilumine un objeto, este realiza el calculo una, otra y otra vez por pase de la gráfica, cada pase significa un draw call. Unity nos permite limitar la cantidad de luces que se calcula por pixel, pasado ese límite las siguientes luces se calculan por vértice. Un diseñador de niveles sabe esto, por eso es que juega bastante con reemplazar luces, las simplifica aumenta la intensidad de una buscando simplificar la escena buscando un equilibrio para que la escena quede bien iluminada sacrificando muy poco rendimiento.
Afortunadamente existe una alternativa y es pre renderizar esas luces en un papel tapiz que luego se le impregna a la maya y da la sensación de ser iluminada, esta técnica se llama mapeo de luces que viene acompañada de una sonda de luz, que completa la ilusión de iluminación en tiempo real.
Mapas de luces o LightMaps
Calcular luces en un entorno 3D resulta costoso porque cada frame hay que entintar con píxeles de luz la textura sobre el objeto. Hay dos enfoques, uno de ellos son los mapas de luz que vienen siendo el precocer estos píxeles que luego irán sobre las texturas simulando luz y crear un archivo de imagen que se guarda en el disco duro, también hay que cuidar que el tamaño de estas luces no supere 4096x4096, y tener en cuenta que este horneado solo sirve si dichas luces son estáticas. este método no sirve para luces dinámicas como por ejemplo vendría a ser un ciclo día noche.
Light Probes
Los light probes vendrían siendo una red creada para el transporte de luz, fueron creadas para mantener la ilusión de luz dinámica sobre nuestro personaje, ya que el escenario fue precalculado sin el. Esta red red de luz solo afectaría a nuestro personaje y enemigos, calculando el resto de efectos faltantes como la luz sobre nuestro personaje y la sombra proyectada por el. Para hacerlo efectivo hay que distribuir esta red sobre los caminos posibles que nuestro personaje pudiera transitar, esto vendría siendo algo así como para renderizar como se hacía en biohazard, solo que la camara seria móvil y no estaría prefijada.
Ahora estos enfoques anteriores están bien si conocemos bien nuestro escenario, y si este está limitado a un espacio. Es completamente inútil en un juego sandbox, ya que seria cargar mucho la memoria con un montón de texturas luz improductivas, en este caso si seria mejor una iluminación procedural como iluminación por vértices a lo lejos y cerca iluminacion por vértice.
Iluminación por vértices en vez de iluminación por píxel.
Unity automatiza el modo en que se representa la luz dependiendo de la distancia sobretodo para luces cónicas o luces puntuales. también elije que luces serán calculadas en un mismo objeto dándole prioridad a las que tiene mayor intensidad.
pero puedes tener en consideración mediante scripts o manualmente que luces son importantes y qué luces son solo para dar ambiente o para enfatizar algo mediante diseño de niveles. las luces por vértice son más fáciles de calcular que las luces por pixel.
Existen otras técnicas que habrá que analizar según el contexto, a veces puede servir un hornado de luces en combinación con luces procedurales que solo iluminan los objetos dinámicos o el prerenderizado de alguna escena como en resident evil y solo apoyado por colliders, o hacer falsas iluminaciones con un mapa esférico o prescindir totalmente de este usando una estética cartoon.
Como se puede apreciar puede haber distintos enfoques, no solo se limita a las opciones, se puede inventar métodos alternativos, a veces incluso programando falsas luces usando shaders. etc.
Lo importante es poder equilibrar el uso de espacio en disco, memoria y calculos, evitar recargarse solo a un lado de la balanza, a la vez que hay que conservar lo mejor posible la estética.
espero que estas reflexiones hayan sido de ayuda para el desarrollo de su proyecto, hasta otra...
Comentarios