Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Tutorial de Bake de Ambient Occlusion

Iniciado por lightbug, Agosto 27, 2017, 05:12:49 AM

Tema anterior - Siguiente tema
Agosto 27, 2017, 05:12:49 AM Ultima modificación: Agosto 27, 2017, 05:44:57 AM por lightbug
Hola hola, hago este tutorial porque hace poco descubri/me acostumbre a usar el bake de ambient occlusion de Blender, que me resulto muy util y seguro a mas de uno le resultará util tambien.
 
- Porque hacer un Bake?
 
Para quitarle trabajo a los efectos de post processing y ademas para lograr mejor fidelidad en el resultado final ya que ante un bake (proceso offline) no hay con que darle, la calidad no se logra de forma igual en runtime, ademas si el AO es screenSpace se veran en los bordes la falta del efecto, que si tenes el ojo entrenado resultará muy molesto. Hay que tener en cuenta que AO es uno de los procesos demandantes asi que siempre que se pueda perrear mejor. Si se esta creando assets relativamente pequeños, personajes o incluso arquitectura, una vez se tenga el modelo texturizado final se podra hacer un bake de AO para tener esa informacion directamente en la maya (especificamente en una textura)
 
- Contras?
 
Tiempo de desarrollo, lleva su tiempito si no estas acostumbrado. , la gran desventaja es que ahora el bake creara una sola textura para todo el modelo, es decir que si el modelo es un cubo de 10x10m2 el lado, con una textura repetida de 32x32 el m2 ,para tener el mismo nivel de detalle aceptable en el AO, (32x32), la textura quedaria de 320x320 por lado, es decir una posibilidad seria 960x640, es algo y muy importante a tener en cuenta. Por eso remarco lo de assets pequeños o personajes, en arquitectura puede funcionar si se usan assets modulares que se repiten mucho.
 
TUTORIAL
 
Como primer paso en blender tome un cubo tipico y le di al subdivide para lograr modificarlo un poco y hacerlo irregular, tambien le di un poco de sculpting, todo en flat shading.
 

 

 
- Luego se le asigna unos UVs a todas las caras, como soy bien peresozo use el smart UV Project
 

 
En la parte de edicion de texturas de Blender cree una imagen nueva y listo (creé una de 2000x2000 totalmente a Ojo) , ya se estaría listo para realizar el Bake
 
En las opciones de Render solo hay que bajar hasta Bake, seleccionar AmbientOCclusion y darle a Bake, existen opciones para controlar el radio y demas, use todo en default:
 

 
Una vez terminado el proceso (unos 5 segundos) ya se tiene la imagen, pero esto todavia NO ESTA GUARDADA, hay que guardarla, lo bueno es que una vez guarda podremos modificarla a gusto y agregarle filtros:
 

 
Para ver en el modelo el efecto es necesario tener el shading en "Texture":
 

 
Una vez terminado asi queda (ver el "ruido" que queda):
 

 
Se ve que al ojo humano es mas agradable notar esas sombras en las esquinas, incluso no muchas veces no nos importa si esto no responde exactamente a la luz real, siempre esos bordes "manchados" de sombras quedan bien, luego si se quiere aclarar mas se podra usar un programa externo. Hablando de programa externo aca un filtro de blur gaussiano para suavizar los cuadrados de la textura. Use GIMP para esto y esto fue lo que logré:
 

 
(OJO con el blur mezclado con la transparecia)
 
-------------------------------------------------------------------------------------------------------------------------------------------
 
Comparacion final con AO filtrada (texture) vs sin AO (solid) (recordar que use Flat shading por eso quedaron algunos bordes fuertes)
 

 
Lo que resta es usar es misma imagen en Unity y listo ya se puede utilizar, si se quisiera hacer mas bakes en una misma textura tambien es valido se pueden hacer bakes de luminosidad, texturas, AO, Specular, FUll Render, etc.
 
-------------------------------------------------------------------------------------------------------------------------------------------
 
Situacion: Imaginense 1000 objetos pequeños en los que se tienen que hacer el calculo del AO porque queda lindo el efecto, pero es tan demandante que no se puede dar el lujo quizas, con esto la parte del proceso queda superada, y si se usa una misma textura Epic WIn.
 
----------------------------------------
 
DEMO: Muchisimos objetos con un Bake de AO + un skybox realmente molesto girando
 
//www.unityspain.com/applications/core/interface/file/attachment.php?id=10748" rel="">TUTO AO.7z
 

 
 
 
 

Oooh qué guapo! muchas gracias por el aporte!!


muy buen recurso, entiendo que es una especie de lightMapping, y al ser "preCom***do" (incluido en la textura) ahorra tiempo de procesamiento, eso si, veo el "fallo" que tiene, como dices, que al hacerlo en objetos con meteriales muy "tileados" se pierde "quality" en las texturas y la unica solucion parece ser hacer megatexturas muy grandes tipo 2048*2048 o asi... lo cual puede ser un poco... problema. Pero todo dependera de la complejidad de los modelos/materiales, asi que para ciertos proyectos este puede ser un "truco" muy bueno.
 
tendre que mirar como se hace en el 3dMax.... 

Cita de: Igor date=1504271774eso si, veo el "fallo" que tiene, como dices, que al hacerlo en objetos con meteriales muy "tileados" se pierde "quality" en las texturas y la unica solucion parece ser hacer megatexturas muy grandes tipo 2048*2048 o asi... lo cual puede ser un poco... problema. Pero todo dependera de la complejidad de los modelos/materiales, asi que para ciertos proyectos este puede ser un "truco" muy bueno.
   


Claro, se pierde si estas dispuesto a usar una textura parecida en tamaño a la tileada para medianos/grandes objetos. Podes no perder nada de calidad incluso hacer un buen Bake con las dimensiones adecuadas (yo le di todo en default con una textura que no era la que debia). La idea es tener modelos pequeños en los que generalmente sabes que un sombreado por ahi y por alla quedan bien, sin importar la situacion de la luz. Por ej:
 

 
En los modelos pequeños o incluso personajes siempre queda bien algo de AO bakeada o impuesta por una textura. Entonces a la hora de llevarlos al motor te sale gratis en performance y si la textura del albedo es comparable en superficie con el modelo te sale "relativamente" gratis tambien. Mas aun si el objeto se repite mucho.

Cita de: lightbug date=1504303436En los modelos pequeños o incluso personajes siempre queda bien algo de AO bakeada...
   


en personajes con animacion que tal queda el AO "bakeado"?
 
me refiero a que igual el "bakeo" crea sombras en lugares que luego se "doblan" al estar animados


Cita de: Igor date=1504358231en personajes con animacion que tal queda el AO "bakeado"?
   
   
      me refiero a que igual el "bakeo" crea sombras en lugares que luego se "doblan" al estar animados
   


Si me parece que queda excelente el efecto siempre y cuando sepas bien como y para que usarlo. Recuerdo que de los ejemplos de Unreal Engine 4 cuando recien salio la demo de Infiltrator todos los guardias tenian un AO map, era como un sombreado que agregaba mas detalle , pero no funcionaba si o si de ambient occlusion, no se si se entiende?.
 
Para personajes es mas confuso ya que se mueven constantemente entonces la idea no es ponerlo en una pose unica y rara, hacer el bake y luego pretender usarlo en general para otras poses. La idea es hacer el bake en una pose general , por ej la mas conocida Tipo "T", en esta pose haces el bake, entonces los lugares donde podrias tener este sombreado serian, manos, axilas, entre arrugas de la ropa (general para todo el cuerpo), cara, entre pierna, etc (quizas de pierna a pierna haya algo, es configurable con la distancia). Si hicieras el bake con el personaje en otra pose la contribucion del AO seguramente cambie. AL final si hay lugares que no te convencen abris el editor de imagenes y modificas a gusto. La idea es solo agregar un map mas de detalle dependiente de algo de la geometria (por eso lo hace un poco unico), que el albedo o normal no alcanzan a dar. Es decir que en un personaje el bake de AO seria mas un truco forzado que otra cosa.
 
Por sombras supongo que te referis al sombreado del AO y no a sombras directas no? acordate que el bake de AO es el resultado de calcular normal vs normal:
 
nivel de sombreado = distancia entre normales + angulo entre normales (iguales normales = 0 , a 90° un valor , a normales invertidad malor maximo)
 
 
 
Cita de: Braltor date=1504362164muy bueno, gracias @lightbug
   


Cita de: lightbug date=1504377708Si me parece que queda excelente el efecto siempre y cuando sepas bien como y para que usarlo.
   


ese es el truco de este... truco.
 
si, me supuse que poniendo al personaje en posicion de "T" y con las piernas un poco abiertas...
 
pero si se puede editar la intensidad y hacer por "regiones" esta muy bien:)
 
si, con sombras me referia a las que genera el AO,
 
la formula no la he entendido muy bien, distancia entre normales? eso es distancia entre vertices? o te refieres a restar los vectores normalA - normalB?
 
Se que influye el angulo formado entre dos "normales" contiguas, contra mas cerrado mas sombra, por ejemplo en una habitacion las esquinas forman 90° y por eso irian sombreadas, si fuera mas angulo seria mas sombra y con menos angulo menos sobra...
 
...y en esquinas exteriores, como las de una caja(cube), no habria sombreado AO,
 
solo sombra en lugares "concavos"

No se rompan la cabeza con el tema, es complejo pero todos los programas 3D y algunos programas de texturizado incluyen sistemas de baking que generan el AO, una vez tienes el AO multiplicas la capa sobre la textura del modelo y eso es todo (se puede mani***r la intensidad de la capa a voluntad), si tu modelo se deforma no tienes que preocuparte por el AO por que lo que se deforma es la textura completa y obviamente el AO se deforma con la textura.
 
 
 
Si se quiere ir hardcore se puede pintar el AO a mano (cosa que nunca hago) simplemente el AO refuerza detalles en el modelo, hay mas tecnicas para este efecto, se puede usar un cavity map con blending de soft light sobre la textura y produce un realce de los detalles al igual que generar un especular desde el normal map y usarlo tambien en blend de soft light sobre la textura, ETC.
 
 
 
Al final del dia todo depende de lo que se quiere lograr pero el AO va en los modelos el 99% de las veces.
 
 

Cita de: Igor date=1504542538la formula no la he entendido muy bien, distancia entre normales? eso es distancia entre vertices? o te refieres a restar los vectores normalA - normalB?
   


lo de la distancia es por el parametro radio, ahora que veo lo que puse da para confusion, pero suponete que tenes pared vs suelo, en donde se juntan que la normal de la pared "pasaria a ser" la del suelo, si te paras en un pixel de la union esa tendrias lo que dije de distancia = 0, si te alejas de ahi hacia arriba (por la pared) o hacia los costados (por el suelo) el valor de sombreado va bajando.
 
Cita de: Igor date=1504542538Se que influye el angulo formado entre dos "normales" contiguas, contra mas cerrado mas sombra, por ejemplo en una habitacion las esquinas forman 90° y por eso irian sombreadas, si fuera mas angulo seria mas sombra y con menos angulo menos sobra...
   


si tal cual el radio este tambien controla cuanto dura el efecto entre el enfrentamiento de las normales.
 
Cita de: Igor date=1504542538...y en esquinas exteriores, como las de una caja(cube), no habria sombreado AO,
   
   
      solo sombra en lugares "concavos"
   


Si, acordate que el AO es una simulacion al efecto real de la luz, la idea del AO surge de principalemente del efecto de radiosidad, una luz que rebota con varias superficies, entonces los lugares bien expuesto tienen su luz normal (afectados por la luz ambiente), los lugares menos expuesto carecen de esta luz, o introducen el famoso sombreado del AO. Podrias probar en Blender (o en cualquier programa de 3D) hacer un render de global illumination con varios rebotes y ver como en los lugares concavos y superficies enfrentadas se ve el efecto tal cual. Por ej mira este ej, hecho con el cycles render de blender, mira las uniones y debajo de la "gran caja", en realidad es todo luz rebotada, nada mas
 

Cita de: juguefre date=1504560934una vez tienes el AO multiplicas la capa sobre la textura del modelo y eso es todo (se puede mani***r la intensidad de la capa a voluntad)
   


Exacto, esa es la idea, me parece que si queres usar otros UV's para la AO y otro para la textura, (por ejemplo un tileada) tenes que usar distintos UV set's no?
 
Cita de: juguefre date=1504560934Al final del dia todo depende de lo que se quiere lograr pero el AO va en los modelos el 99% de las veces.
   


Si se ve mucho en los juegos por eso la idea de subir lo del bake

Cita de: lightbug date=1504561829me parece que si queres usar otros UV's para la AO y otro para la textura, (por ejemplo un tileada) tenes que usar distintos UV set's no?
   
   
       
   


A riesgo de sonar bobo la respuesta es "si pero no" jajajaja
 
Puedes usar un segundo canal UV y todo es igual pero el propósito final es diferente.
 
En assets, personajes, armas, items, etc todo va en la misma textura (textura+AO) por ende no se requiere otro canal UV.
 
En escenarios se requiere un canal UV extra pues todo NO todo va en una sola textura....??? eso no tiene mucho sentido verdad? si el terreno es un modelo y tienes sobre el un semáforo, un hidrante y una señal de pare y todo son modelos separados cada uno con su propia textura y CADA UNA de las texturas incluye un AO por que usar otro AO? la respuesta es simple, La luz (duh), la textura usa un AO calculado con una luz ambiente generica que produce sombras neutrales en las cavidades del modelo, el segundo AO se calcula con la iluminación que el artista coloque en el escenario y esta crea sombras direccionales (siguen el patron de sombreado de la luz)
 
Se puede 100% tener un segundo canal UV en cada uno de los modelos por separado terreno,semáforo, hidrante y señal de pare pero es innecesario, puedes fácilmente combinar todos estos objetos y re-acomodar las UVs en 1 solo canal para todos y hacer el AO, en este punto ya cambia ne nombre y se le denomina "light bake" aaaaaah cierto que ya comienza a tener sentido? mientras cada objeto individualmente incluye el AO en la textura este nuevo AO (light bake) va por separado como una textura y el mapa es multiplicado en el engine sobre la textura de cada objeto (la que ya incluye un AO) el resultado es que todo en la escena es iluminado de forma coherente las sombras pasan de un objeto a otro perfectamente y no es necesario tener en el escenario (en el juego) las luces que el artista uso originalmente incrementando aso el rendimiento enormemente.
 
La textura tileada es el caso perfecto para el segundo canal UV pues una sombra no se tilea.
 
Hay un monton de cosas mas a tener en cuenta pero esta respuesta ya esta como larga, aqui les dejo un ejemplo de lo que coloque en el texto, es un proyecto que hice a final del año pasado y que no fue a ningun lugar
 
https://www.kickstarter.com/projects/620660310/in-the-line-of-fire
 

 

 
La sombras no son la gran cosa pero no tengo otras imagenes de la seccion de los com***dores donde habian MONTONES de sombras y todo esto tenia que correr con un procesador de 200 mhz y ram de 20 MB y GPU de 100 mhz asi que es un TRUCO brutal en cuanto a performance.

Cita de: juguefre date=1504566483En assets, personajes, armas, items, etc todo va en la misma textura (textura+AO)
   


Si claro, de eso me olvide, en esos tipos de assets los que yo digo de hacer el bake de AO van en una sola textura todo, osea que es logico usar solo unos UV's. La razon de usar dos distintos es la de poder al vuelo cambiar de color (albedo) dejando el AO intacto, asi que yo veo tres configuraciones basicas para estos tipos de bake (por modelo):
 
- usar el mismo set de UVs, (albedo + AO), una sola textura, (desventaja: si se quiere cambiar alguna de ellas hay que bakear todo de nuevo)
 
- usar el mismo set de UVs, (albedo + AO), texturas separadas , shader multiplicador.
 
- usar dos sets de uv's (uno para albedo + uno para AO), shader multiplicador.. Este caso solo te da mas libertad (pudiendo elegir manualmente el mismo set para ambas) y en algunos casos puede ser util. Como siempre mayor libertad implica mayor cantidad de recursos usados.
 
Cita de: juguefre date=1504566483En escenarios se requiere un canal UV extra pues todo NO todo va en una sola textura....??? eso no tiene mucho sentido verdad? si el terreno es un modelo y tienes sobre el un semáforo, un hidrante y una señal de pare y todo son modelos separados cada uno con su propia textura y CADA UNA de las texturas incluye un AO por que usar otro AO? la respuesta es simple, La luz (duh), la textura usa un AO calculado con una luz ambiente generica que produce sombras neutrales en las cavidades del modelo, el segundo AO se calcula con la iluminación que el artista coloque en el escenario y esta crea sombras direccionales (siguen el patron de sombreado de la luz)
   
   
      Se puede 100% tener un segundo canal UV en cada uno de los modelos por separado terreno,semáforo, hidrante y señal de pare pero es innecesario, puedes fácilmente combinar todos estos objetos y re-acomodar las UVs en 1 solo canal para todos y hacer el AO, en este punto ya cambia ne nombre y se le denomina "light bake" aaaaaah cierto que ya comienza a tener sentido? mientras cada objeto individualmente incluye el AO en la textura este nuevo AO (light bake) va por separado como una textura y el mapa es multiplicado en el engine sobre la textura de cada objeto (la que ya incluye un AO) el resultado es que todo en la escena es iluminado de forma coherente las sombras pasan de un objeto a otro perfectamente y no es necesario tener en el escenario (en el juego) las luces que el artista uso originalmente incrementando aso el rendimiento enormemente.
   


Si buen punto, lo del AO bakeado en escenarios completos no tiene mucho sentido (o por lo menos hacer esto que digo) y siempre da lugar a incoherencias entre modelos individuales.
 
Del ejemplo que das del semáforo + hidrante ... eso es un light bake de toda la vida. Osea es la posta y podes encima usarlo para afectar a los viejos mapas, es muy util y el motor lo hace todo. Incluso queda bien sin tener el AO originalmente (varias texturas menos), luego ir afectando con luces dinamicas si se quisiera, (creo que ahora se llama mixed lighting ¿?). Pero esto seria "entregarse al enemigo" .
 
La idea de este Topic no es que esto funcione para todo caso, la idea es fakear esto si se tuviera cientos de objetos pequeños (sobretodo que se repiten), a modo de dar un poco mas de detalle (dentro de un mismo modelo), sabiendo que no va a quedar excelente entre modelos, (pero si de forma aceptable) y en evitar generar ese light bake o usar metodos en tiempo real.
 
Por supuesto si se tiene total certeza de que el escenario final va a ser asi, se tiene las luces, se tiene todo seteado nada le gana a un buen lgihtbake final, eso si, a preparar el termo de coffee porque tarda muchisimo .
 
Cita de: juguefre date=1504566483La sombras no son la gran cosa pero no tengo otras imagenes de la seccion de los com***dores donde habian MONTONES de sombras y todo esto tenia que correr con un procesador de 200 mhz y ram de 20 MB y GPU de 100 mhz asi que es un TRUCO brutal en cuanto a performance.
   


Esas imagenes me recuerdan a un HL2, las sombras esas me agradan, o por lo menos es lo que esperaria de un escenario como ese, sombras mas difusas casi imperceptibles, yo para el sol/luna uso soft shadows con baja resolucion para intentar llegar a ese tipo de sombras, estaria genial que hubieran introducido sombras mucho mas filtradas para lograr eso.
 
La mira es un print("0")
 
 

Etiquetas: