Mir ist aufgefallen, dass bei sehr weichen Verläufen die 24-Bit-Farbtiefe nicht ausreicht, da Sie die Farbübergänge sehen können. Dies tritt am häufigsten bei dunklen Szenen oder Nachthimmel auf.
Warum ändert niemand die Farbtiefe auf zwei Bytes pro Kanal? Ich weiß, das wäre eine Menge Arbeit und viel Hardware müsste ersetzt werden, aber ich finde es ein bisschen nervig. Ich glaube wirklich nicht, dass die Technologie der Hardware nicht ausgereift genug ist.
Warum macht das also niemand?
Hier ist ein Bild von "The War Z", auf dem du sehen kannst, was ich meine:
Antworten:
Sie haben es mehr oder weniger selbst gesagt: "Ich weiß, das wäre eine Menge Arbeit und es müsste viel Hardware ausgetauscht werden." Während das Grafik-Hardware-Ende der Dinge eigentlich relativ einfach wäre (wenn teuer - die Verdoppelung der Größe aller Texturen und Bildpuffer ist alles andere als trivial), ist das "Ökosystem" für Bilder mit höherer Farbtiefe einfach nicht vorhanden Dies ist für jeden eine lohnende Ausgabe, da sich kein LCD-Hersteller darauf konzentriert, bis zu 16 Bit pro Pixel zu erhalten (obwohl es bei 10BPP einige Experimente gegeben hat, bei denen ein RGB-Signal bequemerweise immer noch in ein 32-Bit-Signal passt). Bit-Kanal).
Kurz gesagt, es ist einfach zu viel Arbeit für das, was die meisten Leute noch für zu wenig Gewinn halten. Es mag vielleicht "ein bisschen nervig" sein, aber diese Belästigungsstufe ist so gering, dass andere Verbesserungen der Bildqualität Priorität hatten.
quelle
Ja, Sie sind nicht die erste Person, die das bemerkt . :) Bei den heutigen hohen Kontrastverhältnissen reichen 8 Bit pro Komponente nicht aus, um einen gleichmäßigen Verlauf ohne sichtbare Streifen zu erzielen - es sei denn, Dithering wird verwendet.
Die Verwendung von mehr als 8 Bit pro Kanal auf einem Display wird von den Displayherstellern als " Deep Color " bezeichnet. Aufgrund eines Henne-Ei-Problems ist es nicht sehr verbreitet. Ein Deep Colour-Display ist ohne eine Grafikkarte, die Deep Colour ausgeben kann, und eine Game-Engine, die das Rendern in Deep Colour unterstützt, nutzlos. Ebenso macht eine Game-Engine oder eine Grafikkarte, die tiefe Farben ohne das Display unterstützt, keinen Sinn. Daher besteht für Hardwarehersteller und Spieleentwickler kein großer Anreiz, diese Technologie zu unterstützen, da es an beiden Enden keinen Markt gibt, der die Entwicklungskosten rechtfertigt.
Aufgrund der begrenzten 8-Bit-Genauigkeit gibt es auch andere Möglichkeiten, das Banding zu beheben. Wie bereits erwähnt, können Game-Engines Dithering verwenden , um die Streifenbildung auszublenden.
(Bild einer Katze mit einer 256-Farben-Palette, ohne und mit Dithering. Erstellt vom Wikipedia-Benutzer Wapcaplet , verwendet unter der CC-By-SA 3.0- Lizenz.)
Das Hinzufügen eines leichten Zitters von ± 0,5 / 255 vor dem Ausschreiben des Pixelwerts in den Framebuffer ist äußerst effektiv, um Streifen auf glatten Verläufen zu verbergen, und im Wesentlichen unbemerkt. Wenn Sie sich in einer HDR-Engine befinden, tun Sie dies während der Tonemapping-Phase.
Schließlich kann, wie andere angemerkt haben, die Texturkomprimierung eine größere Quelle bandartiger Artefakte im Bild sein als die 8-Bit-Genauigkeit. Dies ist möglicherweise das, was mit dem Himmel in diesem Bild passiert, obwohl es schwer zu sagen ist - es enthält so viel JPEG-Komprimierung, dass Artefakte aufgrund der DXT-Komprimierung ziemlich überfüllt sind.
quelle
Es ist auch erwähnenswert, dass viele LCD-Panels nicht einmal 8 Bit pro Kanal haben. Die billigeren neigen dazu, weniger Bits zu verwenden und verschiedene Tricks zu verwenden, um sie zu verbergen. Beispielsweise können sie schnell zwischen zwei benachbarten Farben wechseln, um die dazwischen liegende Farbe darzustellen. http://www.anandtech.com/show/1557/3
Unter http://msdn.microsoft.com/en-us/library/windows/desktop/jj635732%28v=vs.85%29.aspx finden Sie einige Details dazu, wie DXGI 10-Bit pro Kanal und hellere Farben als Weiß unterstützt
D3D unterstützt seit Jahren auch mehr als 8-Bit pro Kanal. Es gibt nichts, was einen Entwickler davon abhält, von 16 Bit pro Kanal auf 8 Bit herunterzuzittern, wenn er dies für eine gute Idee hält.
Das hilft natürlich nicht viel, wenn die Quelldaten (Textur usw.) nur 8-Bit sind (oder wahrscheinlicher DXT1, was effektiv 5-6-5 Bit pro Kanal ist). Ich glaube, das ist, was mit dem Himmel in diesem Screenshot los ist (eine 8-bpp-Gauß-Unschärfe macht es für mich viel glatter), aber es ist schwer, sicher zu sein.
quelle
Steven Stadnickis Antwort ist richtig - Spiele verwenden selten Texturen mit höherer Präzision, weil sie zu viel Texturspeicher und folglich zu viel Speicherbandbreite erfordern, wenn die Textur in einem Pixel-Shader abgetastet wird. Es gibt jedoch Lösungen, die keine großen Texturen erfordern. (Ich würde dies als Kommentar posten, aber es ist zu lang.)
Homeworld löst dieses Problem, indem das Himmelsbild als Scheitelpunktgradienten codiert wird . Diese Technik eignet sich hervorragend für große Bilder mit niedriger Frequenz (dh weiche Verläufe) - wie z. B. Himmel -, bei denen die Textur eine große Anzahl von Pixeln im Spiel abdeckt.
Eine andere mögliche Lösung besteht darin, die Histogrammnormalisierung auf Ihr Himmelsbild anzuwenden . Liegen die Texturdaten wie bei einem dunklen Nachthimmel in einem engen Wertebereich, tragen die meisten Bits in jedem Farbkanal keine Nutzdaten. Tun Sie stattdessen Folgendes:
Stellen Sie sicher , dass der Shader - Code ist Gamma korrekt . Wenn Sie Texturen berechnen (beleuchten und nachbearbeiten), die nicht vom sRGB-Farbraum in den linearen Raum konvertiert wurden, werden Streifenartefakte wie die beschriebenen angezeigt. Die Gammakorrektur wurde entwickelt, um diese Art von Problemen zu lindern, indem dunklen Werten, bei denen Ihre Augen empfindlicher auf Wertänderungen reagieren, mehr Bits zugewiesen werden. Sie können jedoch schnell Fehler beheben, wenn Sie die Gammakorrektur bei der Berechnung nicht berücksichtigen, z. B. Beleuchtung, Belichtung oder Nachbearbeitung von Effekten. Die Gamma-FAQ ist hilfreich.
quelle
24 Bit sind nicht genug, aber es ist weitaus häufiger, dass solche Probleme durch Bildkomprimierungsalgorithmen, Aliasing oder andere digitale Artefakte verursacht werden. Übersehen Sie auch nicht die Rolle der Anzeigetechnologie. Unabhängig von den digitalen Eingängen liefert die Anzeige möglicherweise nicht die richtigen Helligkeitsstufen.
quelle