BEARBEITEN: Also habe ich den visuellen Effekt des Portals ohne Leistungseinbußen erhalten, und ich habe die Physik so eingerichtet, dass Objekte mit starren Körpern nahtlos durch Portale und Objekte mit Charakter-Controllern nahtlos durch Portale bewegt werden. Das einzige, was ich jetzt herausfinden möchte, ist das Mischen von zwei Kameraansichten, um den richtigen Übergangseffekt für die erste Person zu erzielen. Irgendwelche Ideen, wie ich diese beiden mischen würde? Ich denke an etwas, das nur einen Tiefen-Shader oder das normalisierte Ansichtsfenster verwendet. Mein Hauptproblem besteht darin, dies in Echtzeit und mit Winkeln zu berechnen.
Ich habe also daran gearbeitet, einen Portaleffekt in Unity3D zu erstellen. Offensichtlich habe ich Valves Portal als großen Einfluss auf die Programmierung genommen. Momentan verwende ich einfach die Rendertextur einer Kamera, um den grafischen Effekt zu vermitteln, und dann etwas Code, um den Rest zu erledigen. Das Problem ist, dass es bei 2048 x 2048 genauso hochwertig aussieht wie das von Portal, aber einen starken FPS-Verlust verursacht. Um dies zu lösen, müsste ich entweder die Texturqualität verringern oder die Häufigkeit, mit der ich die Textur aktualisiere.
Valve hat einen hochwertigen Portaleffekt erzielt, ohne einen hohen Bildratenverlust zu verursachen. Wie kann ich das gleiche tun? Hat jemand gute Ideen, um eine hochauflösende Textur zu rendern, ohne Bildverlust zu verursachen?
Ich denke darüber nach, meinen eigenen Code für das Rendern in Texturen zu erstellen, anstatt das in Unity integrierte System zu verwenden. Das ist machbar, aber definitiv ein Ärger. Gedanken, Ideen oder Vorschläge werden daher sehr geschätzt.
Antworten:
Nach stundenlanger Recherche und Programmierung habe ich herausgefunden, wie ich den visuellen Effekt dafür richtig erzielen kann. Wenn Sie nur ein Portalsystem kaufen möchten , das für Grafiken und fast alles andere, was Sie benötigen, geeignet ist , lesen Sie das Portalizer Unity-Paket.
Ich programmiere in C # und dieses Paket ist in JS, aber die Logik dahinter ist unglaublich nützlich und gut durchdacht. Im Allgemeinen folgte ich seinem logischen Denken mit einigen Verbesserungen für mein Spiel und einem Ego-Controller.
Im Wesentlichen verwenden Sie eine modifizierte Version dieses Wassershaders / Skripts. Haben Sie zwei Spiegel in der Szene und lassen Sie eine Kamera das, was sie in jeder Reflexion sieht, auf den anderen Spiegel übertragen. Sie müssen eine modifizierte Transformationsmatrix erstellen, um die Beziehungen zwischen den beiden Portalen zu berücksichtigen. Lesen Sie diesen Artikel über das Abschneiden in der Nähe des Flugzeugs, um den Leistungseinbruch zu verringern . Auf diese Weise können Sie nur das rendern, was über das Portal angezeigt werden muss.
Ich kann ein detaillierteres Tutorial mit Bildern und Quellen erstellen, sobald ich herausgefunden habe, wie die Kameras für einen FPS-Teleport richtig gemischt werden. Im Moment bin ich zu erschöpft und beschäftigt, um ein vollständiges Tutorial zu schreiben. Dies sollte ausreichen, da Sie den größten Teil des benötigten Codes erhalten.
quelle