Saltar al contenido principal

Arte 3D - I - Unity - Post processing

Descripción General

Temas a tratar:

  • Excluir objetos del post processing - Camera Stack - desventajas
  • Local volumen

Proceso de Desarrollo

Excluir objetos del post processing - Camera Stack - desventajasA

La manera en que funciona este proceso de excluir objetos, es creando una nueva cámara la cuál hará una función de "overlay" sobe la cámara principal usando culling mask - layers, es decir los objetos que tengan asignados el layer para esta cámara quedarán por encima de todo lo demás, incluyendo UI, objetos interactuables.

  • La UI con canvas curvas no se pueden excluir ya que el SDK META XR, crea otra cámara de manera automática que no aparece en la jerarquía, la cuál sólo obedece a la cámara principal que tiene el post processing aunque a la UI le asignemos el layer para excluirla, entonces los efectos le seguirán reflejando en ella.

  • Los objetos que se excluyan QUEDARÁN ENFRENTE DE TODO, por ejemplo en las dos priméras imágenes el layer lo tiene asignado la geometría del domo y se puede ver que queda por encima de todo el entorno incluyendo UI.

  • En este caso el layer lo tiene el Prefab que incluye la mesa y los props, podemos ver que los mandos, las manos y la UI quedán por detrás, una manera de solucionar esto, sería asignarles el layer también a la UI, mandos y a todo prop interactuable que atraviesa la zona de la mesa, lo que hace este proceso no muy lineal y óptimo.

CASO LOBBY  - Proceso

En este ejemplo de lobby tenemos aplicado un global volume que afecta toda la escena,el efecto de post processing es un Bloom, que influye tanto en los objetos emissivos como en los colores muy claros, como son los blanco de mesa y los props de esta, estos últimos son los que se buscaba excluir del post processing.

Para excluir objetos en espécifo los pasos son lo siguientes:

1_ Crear una nueva cámara dentro de tu cámara "CenterEyeAnchor", cuida que los valores de transform y parámetros en projection sean igual a tu cámara madre "CenterEyeAnchor"

2_ La nueva cámara debe tener estas configuraciones:

  • Render Type: Overlay
  • Casilla desactivada en Post Processing

3_En tu cámara principal CenterEyeAnchor agregar tu cámara No Post Camera en Stack

4_  Crear una nueva layer para los objetos que quieres excluir > Asignársela, en este caso fue para el prefab "EPI_Module"

5_ En tu No Post Camera, elegir el layer creado en culling mask

Al realizar este proceso sucederá lo que se mencionó al inicio, el prefab EPI_Module quedará por encima de todo.

¿Cómo excluir objetos de manera correcta entonces?

Hasta ahora no se ha encontrado una manera efectiva, por lo que el Global Volume seguirá afectando a toda la escena sin excluir objetos, entonces sólo queda ajustar de una manera equilibrada los parámetros de los efectos para que toda la escena se vea de la mejor manera.

LOCAL VOLUME

Local vs Global

Global Volume aplica el efecto de post processing a todo un nivel/escena, Local Volume se aplica a espacios limitados, definidor por una caja, esfera o un mesh dentro de la escena

Algunos ejemplos de uso:

  • Efectos que se localizan sólo en el jugador.
  • Efectos que se localizan dentro de ciertas áreas, habitaciones dentro de un escena - Visulamente funciona mejor en espacios cerrados.

USO E IMPLEMENTACIÓN En este ejemplo tenemos un global volume por default, el cuál tiene un bloom como efecto.

  • Para agregar un locaol volume, es el mismo proceso que el global, con la diferencia que elegiremos alguna de estas tres, Box, Sphere o Convex, esto porque  el área de volume se define a través de un collider, el box y sphere son por default los que nos da unity, podemo editar el tamaño del box como editamos a un reflection probe en "Edit collider" , el Covex Mesh nos permite elegir cualquier mesh quye tengamos en nuestro proyecto.

  • En la sección de "Volume" podemos ver que en "Mode" se encuentra como "Local", tu "Weight" debe estar en 1 para que se vea el efecto reflejado, en "Profile" creas uno nuevo si es necesario.

  • En nuestra imagen podemos ver que ya tiene unos efectos como son el bloom, color adjustments y color curves, pero no lo vemos reflejado en área colocada, como es en la zona de los EPP, ¿por qué?

  • Esto se debe a que este Local Volume se visualiza SÓLO ESTANDO DENTRO DE NUESTRO COLLIDER, y estando dentro puedes ver el efecto reflejado en TODA LA ESCENA, como podemos ver en el siguiente gif.

CONVEX MESH VOLUME

  • Podemos añadir cualquie mesh como colllider, en este caso hice el modelo para esa área y la agregué en "Mesh"

  • El modelo no tiene tapa superior ni inferior, funciona correctamente.

OTROS PARÁMETROS

  • Blend Distance, la distancia en que el área de local volume comienza a mezclarse con el exterior, un valor de 0 significa que inmediatamente al entrar al collider se verá reflejado los efectos de post processing.

RENDIMIENTO EN ESTA ESCENA:

  • Los batches no cambiaron al agregar un local volume, ya se contaba con un Global Volume prevamiente.

CASOS DE USO  - EJEMPLOS

ARQUITECTURA - HABITACIONES

Visualización desde el exterior del collider:

Visualización desde el interior del collider:

Se mencionaba al inicio de este apartado que Local Volume funiona mejor en espacios cerrados, entre paredes, ya que no podemos olvidar que dentro de este collider veremos reflejado los efectos en toda la escena como podemos verlo en la siguiente imagen, donde dentro del collider/habitación, vemos el exterior también oscuro lo cuál causaría un poco de discrepancia en la narrativa ya que sabemos que por fuera está más iluminado, de igual forma esto no es una regla, dependerá de lo que se busque llegar en el proyecto.

ANIMAR LA "ACTIVACIÓN" DE UN GLOBAL O LOCAL VOLUME

Puedes animar el parámetro de "Weight" de 0 a 1 para una aparición paulatina del post processing, esto en la timeline o creando un clip de animación con controlador.

[Video no disponible: PROYECTO_BASE - V002 - Teleport_Base - Windows, Mac, Linux - Unity 2022.mp4 — removido durante la migración. Las áreas correspondientes ya fueron notificadas.]

En el video se hizo una prueba creando un local volume que está emparentado a la cámara principal "CenterEyeAnchor" que tiene los efectos de post processing nuevos y el cuál se le animó el parámetro dfer weight, esto funciona como una nueva "capa" de volume y se evita tocar el global.

Fuentes

https://medium.com/@ricardoemiranda/creating-local-postprocessing-volumes-in-unity-621eead556a9

https://discussions.unity.com/t/stop-post-processing-effects-on-ui/181585

Comentarios

Recodar revisar el rendimiento de la aplicación si se tiene más de un volume y varios efectos post processing ← Esto más que nada para experiencias solo con quest.

Ventajas

Desventajas

Elaboró

Cassandra Rodríguez