Nur einen Teil des Bildschirms detailliert rendern

11

Wenn Grafiken für einen großen Betrachtungswinkel gerendert werden (z. B. ein sehr großer Fernseher oder ein VR-Headset), kann der Betrachter nicht auf das gesamte Bild fokussieren, sondern nur auf einen Teil davon. (Tatsächlich ist dies auch bei Bildschirmen mit normaler Größe der Fall.)

In Kombination mit einer Möglichkeit, die Augen des Betrachters zu verfolgen (was in VR wahrscheinlich am besten funktioniert), könnten Sie dies theoretisch ausnutzen und die Grafiken mit zunehmend weniger Details und Auflösung vom Fokus des Betrachters entfernen, um die Leistung zu steigern, ohne die wahrgenommene Qualität zu verlieren.

Gibt es Techniken dafür oder sind sie heute in der Entwicklung?

Bart van Heukelom
quelle
Es ist eine interessante Idee, aber ich denke, sie ist nicht realisierbar, da die meisten Displays nicht mit einem Eye-Tracker ausgestattet sind. Ich denke auch, dass sich das Umschalten der Geometrie mit der Geschwindigkeit der Augenbewegung negativ auf die Leistung auswirken könnte. Natürlich können Sie Ihr Level / Ihre Szenen so gestalten, dass der Spieler bestimmte Punkte von Interesse betrachtet und dort detailreiche Netze bereitstellt, während Sie Assets von geringerer Qualität für die Umgebung verwenden ...
bummzack
1
Schauen Sie sich dieses Siggraph 2014-Papier an: graphics.cs.cmu.edu/projects/multirate . Ich hatte keine Zeit, es zu lesen, aber es beschreibt eine Möglichkeit, ein Bild mit weniger als "1x Fragment Shader pro Pixel" auszuführen und trotzdem ein vernünftiges Bild zu erhalten. Möglicherweise kann der Algorithmus oder die Ideen, die sie skizzieren, verwendet werden, um die Abtastrate an den Bildschirmrändern zu verringern und die Leistung zu verbessern.
TravisG
Ein weiteres Papier, das interessant sein könnte: software.intel.com/en-us/articles/coarse-pixel-shading
TravisG
Dies ist jetzt eine Sache, die als Foveated Rendering bezeichnet wird. roadtovr.com/…
Bart van Heukelom

Antworten:

7

Es gibt Beispiele für solche Effekte, über die Sie in vielen Spielen sprechen. Erstens gibt es die Schärfentiefe , die das Objekt in einiger Entfernung unscharf erscheinen lässt, als würde die Kamera auf Dinge fokussieren, die nur in der Nähe sind, wie in diesem Beispiel. Weitere Beispiele hierzu finden Sie im DirectX SDK-Paket. Dort finden Sie auch Beispielcode. Für OpenGL erhalten Sie sie im Internet, wenn Sie suchen.

Geben Sie hier die Bildbeschreibung ein

Das zweite, was Sie vielleicht sehen möchten, ist das sogenannte Geometry MipMaping oder Progressive Meshes, das, wie der Name schon sagt, dem Textur-Mip-Mapping ähnelt, jedoch für die Geometrie. Die Anzahl der Polygone in einem Netz wird verringert, wenn sich das Objekt weiter von der Kamera entfernt. Dies hilft bei der Leistungssteigerung. In D3D gibt es eine Funktion, die beim automatischen Generieren von progressiven Netzen hilft. Hier ist es:

HRESULT WINAPI D3DXGeneratePMesh(
                                  LPD3DXMESH pMesh,
                                  const DWORD *pAdjacency,
                                 const D3DXATTRIBUTEWEIGHTS *pVertexAttributeWeights,             
                                  const FLOAT *pVertexWeights,
                                  DWORD MinValue,
                                  DWORD Options,
                                  LPD3DXPMESH *ppPMesh
                                 );

Hier ist ein Beispiel dafür:

Geben Sie hier die Bildbeschreibung ein

BEARBEITEN: Betrachten Sie das folgende Bild: Geben Sie hier die Bildbeschreibung ein

Dies ist der Keulungsstumpf der Kamera. Die Linie, die direkt durch die Mitte verläuft, ist der LookAt-Vektor. Angenommen, der Player möchte immer in der Mitte des Bildschirms fokussieren, definieren Sie den Winkel x. Jedes Objekt, das in einem Winkel positioniert wird, der größer als das festgelegte x ist, wird mit niedriger Auflösung gerendert, und diejenigen, die sich innerhalb des Winkels befinden, werden detailliert gerendert. Auf diese Weise werden die Objekte in der Mitte des Bildschirms detaillierter als die an den Seiten. Wenn der Spieler nicht in die Mitte schaut, passen Sie diese Mittellinie einfach an die Richtung an, in die der Spieler schaut. (oder drehen Sie die gesamte Kamera in diese Richtung).

Der Lichtfunke
quelle
Obwohl ich bezweifle, dass Sie durch die Implementierung von dof Leistung erzielen können.
Badweasel
@badweasel Nun, das stimmt. DOF bietet keine Leistungsverbesserungen, ist jedoch ein erwähnenswerter Effekt. Es ermöglicht Ihnen, die niedrig detaillierte, klobige Geometrie auszublenden, die manchmal in einiger Entfernung herausspringt.
Der Lichtfunke
Ich habe Ihre Antwort positiv bewertet. Das ist eine gute Antwort. Ich wollte nur darauf hinweisen, da es Teil seiner Frage war.
Badweasel
Diese Techniken verwenden den z-Abstand von der Kamera, aber ich meine den x / y-Abstand von dem Punkt auf dem Bildschirm, den der Benutzer betrachtet. Ich nehme an, sie könnten als solche angepasst werden.
Bart van Heukelom
1
@BartvanHeukelom Wenn sich der Spieler nicht auf die Mitte konzentriert, lässt du die Kamera drehen, um das zu machen, was er in der Mitte fokussiert. Klingt lustig.
Der
2

Ja, Foveated Rendering verwendet Eye Tracking, um nur das zu rendern, was der Benutzer sehr detailliert betrachtet. Alles andere kann detaillierter gerendert werden.

Geben Sie hier die Bildbeschreibung ein

Während es bei Betrachtung eines solchen Screenshots ziemlich offensichtlich ist, ist es für den Benutzer in VR Berichten zufolge unsichtbar.

Die vorhandenen Mainstream-Headsets enthalten (noch) kein Eye-Tracking, es gibt jedoch einige After-Market-Lösungen, um Eye-Tracking hinzuzufügen. Ferner ist eine kleine Menge zusätzlicher Verarbeitung für den Renderprozess erforderlich. Die Vorteile sind jedoch erheblich. Wenn Foveated Rendering implementiert ist, muss nur ein kleiner Prozentsatz des FOV detailliert gerendert werden. Dies kann zu dramatisch höheren Bildraten führen. Genaue Zahlen hängen von der Implementierung ab.

Darüber hinaus ist dies nicht einmal auf VR-Headsets beschränkt. Es kann auch auf Desktop-Monitoren verwendet werden (mit zusätzlichem Eye-Tracking und einem eingeschränkteren Effekt).

MichaelHouse
quelle
1

Ausgehend von der Antwort von Byte56 wird in der Branche so etwas entwickelt. Fixed Foveated Rendering ist eine Technik, die Valve in seiner Roboterreparatur-Demo ( https://youtu.be/DdL3WC_oBO4?t=769 ) und in einigen kommerziellen Spielen (Resident Evil VII für PSVR) einsetzt. Fixed Foveated Rendering verwendet kein Eye-Tracking, dies bedeutet jedoch, dass es gut mit aktuellen Versionen von VR-Headsets funktioniert, die derzeit keine Eye-Tracking-Funktionen haben. Im Moment soll der Vive ein Eye-Tracking-Upgrade-Kit erhalten, sodass einige AAA-VR-Titel dies nutzen können.

Sie werden nicht viele Codebeispiele finden, die sich auf solche Dinge beziehen, aber Nvidia hat einige Hardware-Erweiterungen, die anständig dokumentiert sind. Die Mehrfachauflösung ist ziemlich gut erklärt, aber eine Funktion, die an die Hardware gebunden ist.

Honigbündel
quelle