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

This script function receives two arguments: source image as a RenderTexture and destination it should render into, as a render texture as well. Typically a postprocessing effect uses Shaders that read the source image, do some calculations on it, and render the result into the provided destination (e.g using Graphics.Blit). It is expected that the image effect will fully replace all pixels of the destination texture.

When multiple postprocessing effects are added on the camera, they are executed in the order they are shown in the inspector, topmost effect being rendered first. Result of one effect is passed as “source image” to the next one; and internally Unity creates one or more temporary render textures to keep these intermediate results in.

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.
  • If you wish to use stencil or depth buffer values from the original scene render, you should explicitly bind the depth buffer from the original scene render as your depth target. This can be done using Graphics.SetRenderTarget. You should pass the very first source image effects depth buffer as the depth buffer to bind.

Después de efectos de imagen opacos

By default, an image effect is executed after whole scene is rendered. In some cases however, it is desirable to render an effect after all opaque objects are done (but before skybox or transparencies are rendered). Often depth-based effects like Depth of Field use this.

Adding an ImageEffectOpaque attribute on the OnRenderImage function allows to achieve that.

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