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:
shader
color
optimisation
skif_engineer
quelle
quelle
Antworten:
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.
quelle
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
quelle