¿Qué es un mapa de oclusión y cómo se utiliza en gráficos 3D?

daking - 12/03/2006 12:24
Saludos a todos. Veréis, mi pregunta, como bien indica el título es referente a esta cosallá llamada Occlusion map, que no se ni que es ni nada, y bueno me gustaría saberlo. Creo que es algo de las sombras o va por ai, aunque no sé dónde se aplica ni nada. Gracias. Saludos, daking.
Ballo - 12/03/2006 12:31
Intenta usar el buscador por favor. Pon Ambient Occlusion.
Caronte - 12/03/2006 12:31
Echa un vistazo a este hilo:
https://www.foro3d.com/showthread.php?t=34064
Edito:
Se me adelantó Ballo.
daking - 12/03/2006 13:48
Vale que se explica, per se hace con palabras muy técnicas. Yo lo que me gustaría saber es como aplicarlo. Es decir, ¿cómo se aplica a max. Si no es mucha molestia. Gracias.
Caronte - 12/03/2006 16:43
Yo no soy de 3ds Max, pero no sé para qué quieres aplicar algo que, ni sabes lo que es, ni para qué sirve.
ikerCLoN - 12/03/2006 17:13
[url]http://www-Viz, tamu.edu/students/bmoyer/617/ambocc/[/url]. [url]http://www.Cristopher-Thomas.net/pages/fre_tutorials/tut_ambient_occlusion_shader/ct_tut_mentalray_ambientocclusion_shader.htm[/url]. [url]http://en.wikipedia.org/wiki/ambient_occlusion[/url].
daking - 12/03/2006 18:02
Aver, con esto del Occlusion map, de ve que te hace unas sombras bastante buenas. Y bueno estoy trabajando en la composición de objetos en 3d i video real, y vi esto en una especie de VT, aunque no lo explicavan apenas. Solo decía que se tenía que aplicar un Occlusion map de esos. Y bueno es por eso. Saludos.
Cesar Saez - 12/03/2006 18:08
[url]https://www.foro3d.com/showpost.php?p=187790&postcount=57[/url].
daking - 12/03/2006 20:12
Ole. Muchissimass gracias por esta información César, es justamente lo que necesitaba. De verdad, se te agradece. Saludos, daking.
HalfVector - 13/03/2006 00:33
Hola. Tan sólo quería comentar una cosa sobre el Ambient Occlusion. En todos los sitios donde hablan de cómo aplicar el Ambient Occlusion pass sobre la escena normalmente iluminada, siempre se dice que el Ambient Occlusion es una capa que siempre se multiplica. Y lo cierto es que, si nos ceñimos a la ecuación de la iluminación, es incorrecto.

La ecuación de la iluminación muy simplificada vendría a ser la siguiente:

Color_final = global_ambient + (por_cada_luz_diffuse + por_cada_luz_specular) (ecuación 1).

Nota: (por_cada_luz_diffuse + por_cada_luz_specular) vendría a ser el render que nosotros sacaríamos con iluminación directa, nada de GI. Es decir, la siguiente imagen:
Diffuse pass (no hay Specular).



Es decir, que el ambient se suma a la contribución de todas las luces. Por lo tanto, el Ambient Occlusion entraría en esa ecuación de la siguiente forma:
Color_final = global_ambient * ambient_occlusion + (por_cada_luz_diffuse + por_cada_luz_specular) (ecuación 2).
Ambient Occlusion pass.



O sea que el Ambient Occlusion es un multiplicador que regula la intensidad de la luz ambiente (global) y no de la iluminación directa. Esto quiere decir que la contribución de la luz ambiente no será homogénea, sino que habrán zonas muy ocluídas donde la luz ambiente será mínima y zonas muy poco ocluídas donde la luz ambiente será máxima. Aquí tenéis la imagen (he aplicado un mayor contraste al AO para que se note más):
resultado de aplicar la ecuación 2.



disposición de las capas para aplicar la ecuación 2.



otra imagen para que se aprecie mejor la oclusión bajo la esfera.



Esto contrasta con lo que obtenemos aplicando el método de multiplicar el Ambient Occlusion a la escena con iluminación directa:
Color_final = ambient_occlusion * (por_cada_luz_diffuse + por_cada_luz_specular) (ecuación 3).
resultado de aplicar la ecuación 3.



Si interpretamos esa ecuación, nos damos cuenta de que lo que hace es obstaculizar la iluminación en zonas muy ocluídas. Eso quiere decir que si tenemos una esfera sobre un suelo, el Ambient Occlusion será de un tono grisáceo tirando a negro en esa zona de contacto. Ahora imaginad que tenemos una luz que está iluminando esa zona. Con la ecuación 3, por muy intensa que sea dicha luz, la zona ocluída seguirá siendo de color grisácea/negra, lo cual es del todo incorrecto. Lo correcto sería utilizar la ecuación 2.

Ahora bien, yo me imagino que el hecho de multiplicar el Ambient Occlusion será para simular suciedad de forma sencilla. Es lógico, puesto que es en zonas muy intrincadas donde se suele acumular más suciedad.

En fin, sólo es una apreciación para que no deis por hecho que el Ambient Occlusion siempre se aplica así. Todo depende de lo que se busque, pero en términos de iluminación, el ambient occlusión se aplicaría tal como indica la ecuación 2. Saludos.

-- IMÁGENES ADJUNTAS --

🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #27969



🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #27970



🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #27972



🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #27973



🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #27974



🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #27975

Ballo - 13/03/2006 02:05
Impresionante Halfvector. Me has dejado sorprendido gracias por compartir esta valiosa información. Gracias.
SHAZAM - 13/03/2006 02:12
Halfvector.
Cesar Saez - 13/03/2006 02:16
Que interesante Halfvector, nunca había analizado así el tema. En el fondo lo que estás haciendo es definir la opacidad del AO pass mediante el color del global ambient pass, es decir siempre se ha usado el AO pass según la ecuación 2 pero definiendo el global ambient pass mediante la opacidad de la capa. En el ejemplo que nos muestras cuando contrastas el resultado de la ecuación 2 con el de la ecuación 3 tienes un global ambiance pass distinto al negro (de hecho, es un gris con 13% de brightness según el selector de colores de Photoshop) por lo que no correspondería a un 100% de opacidad en el AO pass para obtener el mismo resultado multiplicando la capa sino que debería ser un 87% (el complemento), si pruebas con tu escena de ejemplo veras que el resultado es exactamente el mismo ya que el resultado si se multiplica por un global ambient pass personificado en la opacidad de la capa. Saludos.
HalfVector - 13/03/2006 02:51
Creo que no he entendido eso. ¿Quieres decir que multiplicando el Ambient Occlusion (con un cierto grado de transparencia) por el Diffuse pass, puedes conseguir el mismo resultado que multiplicando una luz ambiente constante (o también podría ser perfectamente una luz ambiente extraída de un HDRI) por el Ambient Occlusion y sumando el resultado de esa multiplicación al Diffuse passí. Saludos.

Edito: ¿o tal vez quieres decir que no hace falta el ambient pass ya que modificando la opacidad del Ambient Occlusion pass se consigue el mismo resultado?
Cesar Saez - 13/03/2006 03:07
Lo segundo, lo segundo.
HalfVector - 13/03/2006 03:21

Lo segundo, lo segundo.

Ah bueno, eso sí. Lo que pasa es que claro, estaba hablando desde el punto de vista del programador. En ese caso se hace así, multiplicando la luz ambiente por el Ambient Occlusion. Saludos.
Cesar Saez - 13/03/2006 03:47
Te entendí perfectamente, de hecho, nunca había visto un análisis de esa naturaleza y me pareció muy interesante, sólo apuntaba que no es que hallan 2 fórmulas, es la misma ecuación 2 todo el tiempo, la diferencia es que hay que considerar que en la ecuación 3 la opacidad de la capa como un factor que puede ser distinto a 1 (donde 1 sería equivalente a un ambient pass negro).

En el fondo es algo que uno siempre ha hecho de forma casi instintiva, pero que si lo analizamos vemos que llegamos al mismo fondo. Saludos.
SHAZAM - 13/03/2006 04:25
Vaya, este si es un hilo interesante, deberían haber más así. (Lo digo por las últimas mamarrachadas de todo menos infografía, donde se llenaron decenas de páginas).
carlosall - 13/03/2006 16:43
Hola. Donde me puedo descargar el dirtmap o el Occlusion map para 3ds Max 6? Me he paseado por el hilo de Mental Ray y no lo he encontrado, pues creo que max 6 no lo trae incorporado. Gracias.
Cesar Saez - 13/03/2006 17:05
Hola Carlos, te adjunto el shader. Saludos.

-- IMÁGENES ADJUNTAS --

🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #28001

carlosall - 13/03/2006 17:36
Gracias César. Saludos.
Kinght - 13/03/2006 17:37
Muy interesantes esas explicaciones, gracias.
daking - 15/03/2006 11:41
Vaya. Falto un poco aquí i dais más información que yo que sé. Muy buenas explicaciones sí señor. Gracias. Saludos, daking.
Drakky - 15/03/2006 12:06
Acabo de leer la explicación de Halfvector y es muy buena, sí. Luego las aclaraciones de César, geniales. Entonces queda claro que algo que se hace de forma intuitiva, es decir cambiar la opacidad a la capa multiplicar del AO, es algo que tiene su explicación física. Cuando aplicas el pase de AO sobre la capa renderizada con opacidad 100% quedan imágenes muy sucias. No sabíamos porqué. Lo arreglaba bajando la opacidad de la capa de AO.

Gracias a todos por arrojar luz.
HalfVector - 15/03/2006 17:46
De todas formas, el hecho de reducir la opacidad en la capa de AO cuando utilizamos la ecuación 3, es decir, cuando multiplicamos AO por el Diffuse pass, no nos va a dar los mismos resultados que utilizando la ecuación 2. Por la simple razón de que no es lo mismo sumar dos valores que multiplicarlos.

Imaginad el caso de la esfera sobre el suelo. La zona del suelo sobre la que yace la esfera será prácticamente negra. En esa zona, el Diffuse pass pongamos que es blanco debido a que la luz directa quema esa zona. Si aplicamos la ecuación 3, sería:
Color_final = (0,0,0) * (1,1,1) = (0,0,0).

Es decir, obtenemos el color negro, lo cual es incorrecto en términos de iluminación. Ahora jugamos con la opacidad y le metemos un 87% de opacidad, lo cual nos daría (seguimos con la ecuación 3):
Color_final = (0.87,0.87,0.87) * (1,1,1) = (0.87,0.87,0.87).

Ahora apliquemos los dos casos anteriores a la ecuación 3 (pongamos que el ambiente global es negro):
Color_final = (0,0,0) * (0,0,0) + (1,1,1) = (1,1,1).

Lo cual es totalmente correcto en términos de iluminación. Ahora veamos el segundo caso. En este caso ponemos un ambient global del 13%:
Color_final = (0.13,0.13,0.13) * (0,0,0) + (1,1,1) = (1,1,1).

Lo cual sigue siendo totalmente correcto.

Como se puede ver, la única forma de que una zona totalmente iluminada no se vea afectada por una zona oscura en AO, es utilizando la ecuación 2 (porque suma y no multiplica). Se podrá jugar con la opacidad del AO para conseguir resultados similares con la ecuación 3 pero lo cierto es que no se conseguirán los mismos resultados. Podrás conseguir que las zonas iluminadas no se vean afectadas (aparentemente, porque no matematicamente) con el AO, pero como variando la opacidad del AO, estas modificando la intensidad de todo el AO, ciertas zonas que con la ecuación 2 se verían afectadas por el AO, variando la opacidad y aplicando la ecuación 3, no se verían igualmente afectadas.

Pero vamos, que como ya dije, depende de para que quieras aplicar el Ambient Occlusion se utilizara la ecuación 2 o la ecuación 3. Para simular suciedad está claro que hay que aplicar la ecuación 3. Saludos.
Cesar Saez - 15/03/2006 19:16
Llevas toda la razón Halfvector, más claro imposible. Gracias por la aclaración.