Computergrafik

Render to Texture

Cinematic Rendering | | Renderbuffer Objekte

Für viele Algorithmen und Verfahren muss man die bereits gezeichnete Szene verändern. Dazu rendert man nicht direkt in den Framebuffer, sondern in eine Textur.

Diese Textur kann man anschließend wieder verwenden, damit diese auf ein Objekt (z.B. Spiegel) gelegt wird.

Post-Processing-Verfahren funktionieren genauso - erst wird die Szene in eine Textur gezeichnet, danach bei der Darstellung auf den Bildschirm verfremdet. Dazu zeichnet mam ein großes Quad das den ganzen Bildschirm bedeckt, damit der Shader das Bild aus der Textur verändert darstellen kann.

Genereller Aufbau

Initialisierung:

  • Man erstellt eine Textur
  • Man erstellt eine Framebuffer-Konfiguration (mit FBO), bei der die Textur die Farbe der gerenderten Fragmente speichert

In der Rendering-Loop:

  • Man aktiviert die selbst erstellte Framebuffer-Konfiguration (mit FBO)
  • Pass 1: Man zeichnet die Szene, die in der Textur landen soll (mit Standard-Shader)
  • Man aktiviert die Standard-Framebuffer-Konfiguration (ohne FBO)
  • Pass 2: Man zeichnet die Szene, die am Bildschirm erscheinen soll, nutzt dabei die Textur auf einem bildschirmfüllenden Quad (mit Postprocessing.Shader).

Dadurch, dass 2 komplett unterschiedliche Sachen (z.B. einmal mit, einmal ohne Textur) gezeichnet werden sollen, braucht man eigentlich unterschiedliche Shader. Das Wechseln eines Shaders ist relativ teuer, deshalb nutzt man oft Shader, die abhängig von einem Parameter konfigurierbar sind, sogenannte Uber-Shader.

Cinematic Rendering | | Renderbuffer Objekte

Options: