Codieren Sie zwei R11G11B10F-Puffer mit Y'CbCr?

8

Wir versuchen, die Beleuchtung in der Füllrate zu optimieren. Integrierte Grafikchips haben einen sehr langsamen Speicherzugriff.

Es gibt zwei Lichtpuffer: einen für Diffuse und einen für Specular. Beide verwenden das Format R11G11B10F. Gibt es eine Möglichkeit, zwei Puffer in einen zu packen? Verwenden Sie beispielsweise das Farbmodell Y'CbCr:Geben Sie hier die Bildbeschreibung ein

skif_engineer
quelle
Dies ist für eine verzögerte Beleuchtungspipeline, richtig? Verwenden Sie eine gekachelte Implementierung, um die Bandbreite zu reduzieren? Haben Sie stattdessen auch eine gekachelte verzögerte Schattierung oder eine gekachelte Vorwärtsschattierung in Betracht gezogen?
JarkkoL

Antworten:

5

Vielleicht möchten Sie sich The Compact YCoCg Framebuffer ansehen . Es verwendet einen 2-Kanal-Puffer, um die Luminanz für jedes Pixel und die beiden Chroma-Komponenten in jeweils der Hälfte der Pixel zu speichern und ein Schachbrett zu bilden. Außerdem wird ein kantenbewusster Upsampling-Filter am Ende des Frames verwendet, um die fehlenden Chroma-Komponenten zu rekonstruieren und wieder in RGB zu konvertieren.

Sie können dies auf einen einzelnen 3-Kanal-Puffer erweitern, um die diffuse Luminanz, die spiegelnde Luminanz und die Schachbrett-Chroma zu speichern (vorausgesetzt, basierend auf dem Diagramm in Ihrer Frage reicht es aus, nur ein Paar Chroma-Werte zu speichern).

Sie können stattdessen auch das Format R10G10B10A2 verwenden, es sei denn, Sie benötigen wirklich den Bereich des Gleitkommaformats. Es ist die gleiche Menge an Bandbreite, bietet Ihnen jedoch viel mehr Präzision (R11G11B10F bietet nur 5 bis 6 Bits Mantisse pro Komponente). Außerdem können Sie die 2 Alpha-Bits verwenden, um einige Flags zu speichern, z. B. Ihr diffuses / spiegelndes Flag.

Nathan Reed
quelle
2

Wenn Sie damit einverstanden sind, dass Spiegel nur weiß sind, können Sie diffus und spiegelnd in RGBA einfügen.

Es sieht so aus, als ob Unity das für das verzögerte Rendern tut.

Jemand, der dieses Problem entdeckt: http://forum.unity3d.com/threads/specular-color-based-on-light-color.134412/

Die Dokumente, die dies erwähnen: https://docs.unity3d.com/Manual/RenderTech-DeferredLighting.html

Alan Wolfe
quelle
danke, immer noch sollten sowohl Diffuse als auch Specular gefärbt sein
skif_engineer