Referencia de los Efectos de Imagen
Antialiasing

Escribiendo Efectos de Imagen

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.

La función OnRenderImage

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:

  • EL destino de la render texture puede ser null, lo cual significa que “render to screen” (se renderiza a la pantalla) (ie, el backbuffer). Esto típicamente sucede en el último efecto de imagen de post-procesamiento en una cámara.
  • Cuando OnRenderImage termine, se espera que el destino de la render textures sea el objetivo activo dónde renderizar. Esto es por lo general un Graphics.Blit o un renderizado manual a la textura de destino que debería ser la última operación de renderizado.
  • Usted por lo genera quisiera apagar que el depth buffer escriba y pruebe en sus shaders de efecto de imágenes – de lo contrario puede terminar escribiendo valores intencionados al buffer Z de destino cuando haga Graphics.Blit. Casi todos los efectos de imagen shader passes deberían contener estados `Cull Off ZWrite Off ZTest Always.

Después de efectos de imagen opacos

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.

Coordenadas de Textura en diferentes plataformas

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.

Utilizando código de ayuda de efectos de imagen de Standard Assets

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 namespaceUnityStandardAssets.ImageEffects`.

Temas relacionados

Referencia de los Efectos de Imagen
Antialiasing