Los Image Effects (Efectos de imagen) son una manera de post-procesar una imagen renderizada en Unity.
Cualquier script que tiene una función OnRenderImage puede actuar como un efecto de post-procesamiento – simplemente agréguelo en un objeto camera . La función script va a llevar toda la lógica entera del efecto de imagen.
Esta función script recibe dos argumentos: la imagen fuente como un RenderTexture y el destino dónde debería renderizar como una render texture también. Típicamente un efecto de post-procesamiento utiliza Shaders que leen la imagen fuente, hacen algunos cálculos, y renderizan el resultado al destino proporcionado (e.g utilizando Graphics.Blit). Se espera que el efecto de la imagen va a remplazar completamente todos los pixeles en la textura destino.
Cuando múltiples efectos de post-procesamiento son agregados a la cámara, estos son ejecutados en el orden en que son mostrados en el inspector, el efecto en la parte superior siendo renderizado primero. El resultado de un efecto es pasado como una imagen fuente al siguiente; e internamente Unity crea uno o más render textures temporales para mantener estos resultados intermedios.
Cosas para tener en cuenta:
Por defecto, un efecto de imagen es ejecutado después de que la escena entera sea renderizada. En algunos casos, sin embargo, es deseable en renderizar un efecto después de que los objetos opacos estén terminados (pero antes de que el skybox o transparencias sean renderizadas). A menudo efectos basados en profundidad como Depth of Field utilizan esto.
Agregar un ImageEffectOpaque
atributo en la función OnRenderImage
permite lograr esto.
Si un efecto de imagen está muestrando diferentes texturas relacionadas a la pantalla una sola vez, usted tendría que estar consciente acerca de las diferencias de plataforma en cómo las coordenadas de textura para estas son utilizadas.
Un escenario común es que la textura “fuente” del efecto y la depth texture (textura de profundidad) de la cámara van a necesitar diferentes coordenadas verticales, dependiendo en los ajustes de anti-aliasing. Ver la página de diferencias en renderizar en plataformas para detalles.
El paquete de Efectos contiene algunas clases bases y de ayuda para basar sus propios efectos de imagen. Todo el código ahí está en el namespace
UnityStandardAssets.ImageEffects`.