Liesel Weppen hat geschrieben: ↑21.02.2020 13:24
Die GPU berechnet auch bei VR nicht zwei Bilder, sondern sie berechnet nachwievor ein einziges Bild, das aber geteilt pro Auge dargestellt wird. Umgekehrt kann man das auch so sagen: Jedes Auge sieh nur eine Hälfte des Bildes.
Es wäre sogar fatal zwei separate Bilder zu berechnen, weil dann zwangsläufig ein zeitlicher Unterschied zwischen beiden Bildern wäre.
Die GU berechnet nicht nur ein Bild, da dies physikalisch gar nicht möglich wäre.
Jedes Auge betrachtet die Umwelt aus leicht verschobenen Perspektiven,
dadurch entsteht die Raum- bzw. Tiefenwahrnehmung.
Um Stereoskopisches 3D für VR zu rendern,
werden also im Reißverschlussverfahren zwei unterschiedliche Kameraperspektiven berechnet.
Eine für das linke, eine für das rechte Auge.
Das wurde schon oft erklärt und von Entwicklern anschaulich beschrieben.
Wenn nicht zwei unterschiedliche Kameraperspektiven berechnet werden würden,
sondern nur zweimal dasselbe Bild, welches dann etwas nach links bzw. rechts erweitert werden würde,
so entstünde eine fehlerhafte bzw. nicht vorhandene Raumperspektive.
Es ist daher zwingend nötig jede Kameraperspektive (linkes Auge, rechtes Auge) gesondert zu rendern,
da hier die Perspektive jedes Auges eine andere räumliche Perspektive jedes im Raum vorhandenen Objektes bedingt.
Lediglich am Fokuspunkt (also dem Punkt, den wir mit beiden Augen fokussieren) gleichen sich der Bildinhalt beider Augen.
Je mehr dieser Fokuspunkt in der Ferne liegt,
desto mehr gleichen sich die Bildinhalte (für den Fokuspunkt).
Nahe gelegene Objekte unterscheiden sich jedoch so stark voneinander,
dass hier eine gesonderte Berechnung der Perspektive unabdingbar wird.
Das kannst Du sogar selbst testen, indem Du einfach Deinen Finger vor Deine Nasenspitze hälst.
Betrachtest Du den Finger nun nur mit dem rechten Auge, dann mit dem linken,
wird Dir auffallen, dass Du mit beiden Augen jeweils unterschiedliche Bereiche Deines Fingers betrachtest.
Erst wenn beide Augen gemeinsam den Finger betrachten,
wird daraus ein räumlich wahrgenommenes Objekt, bei dem das Gehirn aus beiden unterschiedlichen Bildern ein zusammenhangendes, räumliches Objekt generiert.
Und genauso funktioniert Stereoskopisches 3D (im Kino, in VR-Brillen, etc...).
Es werden zwei perspektivisch unterschiedliche Bilder von einem Objekt benötigt,
die dann entsprechend auf das linke bzw. rechte Auge verteilt werden.
Daraus entsteht dann der räumliche Bildeindruck.
Und daher muss die GPU die entsprechenden Objekte/Bilder gesondert rendern.
Also je ein Bild für das rechte und das linke Auge.
Um 40 räumliche Bilder in der Sekunde zu produzieren muss die GPU insgesamt 80 Bilder berechnen:
40 für das linke und 40 für das rechte Auge.
Nur so können die Perspektivischen Unterschiede von Objekten im virtuellen Raum generiert werden.
Es gibt Versuche,
die räumlich näher gelegenen Objekte unabhängig von anderen - weiter in der Ferne liegenden - Objekten zu rendern.
Also nur jene Objekte zu rendern, die auch tatsächlich sichtbare perspektivische Unterschiede besitzen.
Das würde einen enormen Performancevorteil bringen.
Leider funktioniert das in der Praxis bislang noch nicht und man arbeitet auch an anderen Lösungen,
um die Performance für VR-Anwendungen zu verbessern.
Eine Lösung ist das "Foveated"-Rendering,
bei dem die Bildanteile die dem peripheren Sichtfeld des Menschen entsprechen mit geringerer Auslösung gerendert werden - in Kombination mit EyeTracking wäre dies eine entsprechend interessante Lösung zur Performance-Problematik. Aber auch hier werden je ein Bild für das rechte und ein Bild für linke Auge berechnet.
Die auf die GPU entfallende Last besteht im übrigen - wie Du angemerkt hast - nicht nur darin,
2 perspektivisch unterschiedliche Bilder pro Raumbild zu rendern,
sondern auch darin, diese in einer Art zu rendern, dass das Gehirn nicht irritiert wird -
also quasi die Verbindung der perspektivisch verschobenen Einzelbilder nicht verloren geht, sonst wäre die Räumliche Wahrnehmung nämlich gestört.
Auch hierfür gibt es verschiedene Ansätze, die aber größtenteils noch im Experimentalstatus sind.
Und noch nicht als Standard in der VR-Entwicklung eingesetzt werden.
Stand jetzt ist also:
Es werden pro Raumbild immer zwei Bilder gerendert - eines aus der Perspektive des linken und eines aus der Perspektive des rechte Auges. Diese müssen zeitlich miteinander synchron angezeigt werden und im VR-Headset dem jeweils entsprechenden Auge zugeführt werden.
Im Kino werden 3D-Filme genau auf diesselbe Weise dargestellt.
3D-Filme in 24fps, zeigen eigentlich 48 Bilder pro Sekunde an - nämlich 24 für linkes und zusätzlich 24 für das rechte Auge. Die Brille filtert nun die den Augen entsprechenden Bilder heraus. Also erreichen die L24 Bilder das linke Auge und die R24 Bilder das rechte Auge. Der Projektor muss jedoch trotzdem insgesamt 48 Bilder pro Sekunde auf die Leinwand projizieren.
Dabei ist es beim Film so, dass diese Bilder im Voraus proudziert werden.
Bei Spielen jedoch muss dies on-the-fly geschehen,
was im Falle von VR eine mindestens doppelt so hohe Last für die GPU bedeutet als bei herkömmlichen Spielen in gleicher Auflösung nötig wäre.