Warum ist es wichtig, Renderziele mit derselben Bitgröße zu haben?

10

Ich denke gerade darüber nach, welche Art von GBuffer ich für die verzögerte Schattierung benötige. Daher habe ich versucht, mich auch online über die gängigsten und deren Format zu dokumentieren.

Die meisten GBuffer, die ich gesehen habe, verwendeten für jedes Rendering-Ziel dieselbe Bitgröße, was auch häufig zu nicht verwendeten Kanälen führte. Als erste Vermutung für meinen GBuffer benötige ich jedoch auf dem Papier zwei 24-Bit-Ziele und zwei 32-Ziele oder drei 24- und ein 32-Bit-Ziel.

Ich verstehe, dass jeder Aufsatz mit der gleichen "Größe" besser ausgerichtet werden kann, aber praktisch ist es besser, Kanäle zu verschwenden (oder für die zukünftige Verwendung zu reservieren) und alle RTs der gleichen Größe zu haben, oder ich sollte genau das verwenden, was benötigt wird? Im ersten Fall, warum ist es so vorteilhaft, werden die 24-Bit-Modelle trotzdem auf 32 aufgefüllt?

cifz
quelle

Antworten:

9

Ich verstehe, dass jeder Aufsatz mit der gleichen "Größe" besser ausgerichtet werden kann, aber praktisch ist es besser, Kanäle zu verschwenden (oder für die zukünftige Verwendung zu reservieren) und alle RTs der gleichen Größe zu haben, oder ich sollte genau das verwenden, was benötigt wird?

Ein einheitliches 32-Bit-Rendering-Ziel ist besser, auch wenn dadurch Speicherplatz "verschwendet" wird . Dies ist viel schneller als ein nicht auf 32 Bit ausgerichteter Speicher. Außerdem müssen Sie nicht mehrere Puffertypen unterstützen. Das Kopieren und Kombinieren von Puffern ist einfacher, da Sie nicht zwischen mehreren Puffertypen konvertieren müssen.

32-Bit ist die native Version für GPUs und CPUs. Daher reduzieren Sie die Anzahl der zum Lesen des Speichers erforderlichen Zyklen. GPUs versuchen natürlich, 32 Bit zu lesen. Wenn Sie versuchen, nicht ausgerichtete Speicheradressen zu lesen, z. B. 24 Bit ausgerichtet, lesen GPUs 32 Bit und verschieben dann unerwünschte Bytes.

Hier finden Sie einen ausführlichen Artikel darüber, warum die Speicherausrichtung wichtig ist (obwohl es sich um CPUs und nicht um GPUs handelt, gilt das High-Level-Konzept weiterhin.)

Werden die 24-Bit-Modelle trotzdem auf 32 aufgefüllt?

Einige GPUs werden es auffüllen, aber es kann nicht garantiert werden, so dass es im Bereich der Treiber- / GPU-Implementierung liegt. Sie müssen also die Ergebnisse profilieren und überprüfen.

PS: 32bit oder 64bit je nach Architektur.

concept3d
quelle
5
und wenn sie alle die gleiche Bitgröße haben, können Sie sie überblenden, ohne konvertieren zu müssen
Ratschenfreak