Wie rendere ich Portale in OpenGL?

7

Ich mache RPG in OpenGl und ich muss einige Portale machen. Wie soll ich es rendern, wenn ich durch das Portal auf der anderen Seite sehen möchte?

Vlastimil Blažek
quelle
Ist dein Spiel 2D oder 3D? Was genau meinst du mit einem "Portal"?
Anko
Es ist 3D. Mit Portal meine ich so etwas wie diesen Link
Vlastimil Blažek

Antworten:

6

Sie haben zwei Szenen aus zwei Kameraperspektiven gerendert: eine im lokalen Raum und eine im Portalraum. Sie müssen einen Teil des letzteren dem ersteren überlagern. Um dies zu erreichen, benötigen Sie Kenntnisse über G-Puffer ( verzögerte Schattierung ). Ich schlage daher vor, dass Sie dort mit Ihrer Forschung beginnen.

Erster Shader-Durchgang: Erstellen Sie einen G-Puffer für Ihre lokale Szene. In Ihrem speziellen Fall verfügen Sie über einen Farbpuffer, mit dem die Silhouette des Portals aus lokaler Perspektive ausgeblendet werden kann. Es enthält eine Farbe (z. B. Weiß), die angibt, wo sich Ihre Portaloberfläche befindet, und alles andere im lokalen Bereich wird schwarz dargestellt. Diese Maske wird verwendet, damit Sie wissen, welche Pixel Ihrer gerenderten lokalen Szene als Fenster in den "Portalraum" betrachtet werden sollen.

Zweiter Shader-Durchgang: Rendern Sie Ihre Portalraumszene mit derselben Kameraausrichtung, jedoch mit einer Verschiebung der Kameraposition um denselben Vektor, der den Versatz der Kamera vom Portal im lokalen Raum beschreibt.

Dritter / letzter Shader-Durchgang: Verwenden Sie die Maske, um den Abschnitt der Portalszene auszuschneiden, den Sie in der lokalen Szene über die Portaloberfläche und im Fragment-Shader überlagern müssen.

HAFTUNGSAUSSCHLUSS Dies alles ist leichter gesagt als getan - der Einstieg in Multi-Pass-Rendering und G-Puffer ist eine beträchtliche Menge an Arbeit, wenn Sie dies noch nie zuvor getan haben - erwarten Sie mehrere lange Tage bis mehrere Wochen, abhängig von Ihrem Kenntnisstand und der verfügbaren Zeit und allgemeines Glück bei der Umsetzung. Beachten Sie auch, dass eine verzögerte Schattierung hohe Kosten verursacht und für bestimmte Mobiltelefone möglicherweise ungeeignet ist.

Ingenieur
quelle
In dieser Antwort erfahren Sie auch, warum sich die Implementierung möglicherweise nicht lohnt! Möglicherweise ist es besser, eine undurchsichtige, wirbelnde Portaloberfläche zu verwenden.
Ingenieur
2
Sie benötigen keine verzögerten Schattierungen und G-Puffer. Portalbasiertes Rendering gibt es schon, bevor Grafikkarten überhaupt Shader hatten. Sie können dies tun, indem Sie Portaloberflächen in Ihrer CPU-seitigen Culling-Phase verfolgen oder es mit Schablonenpuffern oder sogar mit Umgebungskarten oder auf verschiedene andere Arten tun. :)
Sean Middleditch
Hallo @ SeanMiddleditch, du hast natürlich Recht; Schablonenpuffer sind in der Tat eine Möglichkeit, die ich erwähnen wollte, aber ich dachte daran, mich an den modernsten Ansatz zu halten. Ein Grund dafür ist die performante rekursive Portallierung. Ein weiterer Grund ist, dass es in moderne Pipelines eingesteckt wird, dh wenn im OP bereits G-Puffer vorhanden sind, und wenn dies noch nicht der Fall ist, werden sie dies wahrscheinlich zu einem späteren Zeitpunkt tun. Ich wusste nichts über das CPU-seitige Keulen, danke für das Hinzufügen.
Ingenieur