Subpixel-Rendering für einen Ray Tracer

16

Beim Rendern von Schriftarten wird häufig ein Subpixel-Rendering verwendet . Die Grundidee hier ist, das Pixel in seine RGB-Komponenten zu zerlegen und dann für jedes einen Wert separat zu berechnen. Da jede Komponente kleiner als das gesamte Pixel ist, ist Antialiasing mit höherer Qualität möglich.

Es gibt einen offensichtlich analogen Weg, dies auch für einen Raytracer zu tun. Sie können die Rekonstruktionsfilterung für jeden Unterkanal separat durchführen.

Ich war überrascht, dass ich nicht wirklich Hinweise auf Ray Tracer finden konnte, die dies taten. Besonders wenn Sie bereits Spektral-Rendering durchführen, scheint dies eine naheliegende Aufgabe zu sein. Es gibt diesen Artikel aus einer Zeitschrift, von der ich noch nie gehört habe. Insgesamt scheint Subpixel-Rendering jedoch keine alltägliche Aufgabe zu sein. Meine Frage: warum nicht ?

imallett
quelle
Werden Ihre mit Subpixeln gerenderten Bilder auf Bildschirmen im Hochformat noch einwandfrei angezeigt?
Jamesdlin
als ingenieur würde ich niemals zustimmen, eine so ... kaputte idee umzusetzen. AUSSER wenn ich mir sicher bin, dass die Anzeige völlig fest ist. wie ein Appli für das iPhone 5S. Mit dieser Technik werden gebrochene Bilder von Bildschirmen unter Verwendung umgekehrter Muster oder unterschiedlicher Anordnungen erzeugt.
v.oddou

Antworten:

14

Das ist durchaus möglich

Obwohl der Unterschied möglicherweise nicht besonders bemerkbar ist, würde ich erwarten, dass das Abtasten unter Berücksichtigung der genauen Pixelgeometrie ein etwas genaueres Bild ergibt. Sie müssen nur Ihre Pixelmitten pro Farbkomponente entsprechend der (durchschnittlichen) Position der Subpixel dieser Farbe versetzen. Beachten Sie, dass nicht alle Pixel-Layouts eine Eins-zu-Eins-Entsprechung zwischen Pixeln und Unterpixeln aufweisen.

Zum Beispiel hat penTile RGBG doppelt so viele grüne Subpixel wie rot und blau, wie dieses Bild von Wikipedia zeigt:

Schließen Sie herauf Bild der RGBG-Pixelgeometrie

Mir ist kein technischer Grund bekannt, der verhindern würde, dass damit willkürliche Vollfarbbilder erstellt werden. Tatsächlich weist eine farbenfrohe Szene weniger auffällige Farbartefakte als Schwarz auf weißem Text auf, wodurch die Farbunterschiede am schwersten zu tarnen sind.

Schriften werden auf Wunsch gerendert

Der relevante Unterschied zwischen dem Rendern einer Raytrace-Szene und dem Rendern von Schriftarten besteht darin, dass Schriftarten in der Regel bei Bedarf gerendert werden und den verwendeten Bildschirm berücksichtigen können. Im Gegensatz dazu wird eine Raytrace-Szene häufig vorgerendert und dann auf vielen verschiedenen Bildschirmtypen (mit unterschiedlicher Pixelgeometrie) angezeigt. Wenn Sie beispielsweise Ihr Raytrace-Bild auf einer Webseite anzeigen, kann es nicht auf einen bestimmten Monitortyp zugeschnitten werden.

Wenn Sie ein Echtzeit-Raytracing-Programm entworfen haben und Zugriff auf die Pixelgeometrie des Monitors haben, können Sie eine Raytrace zum spezifischen Subpixel-Layout durchführen. Die Offline-Raytracing-Funktion, mit der ein Standbild erstellt wird, kann jedoch nur auf einen einzigen Typ von Pixelgeometrie zugeschnitten werden, wodurch das Bild auf allen anderen Pixelgeometrien schlechter aussieht . Sie können dies umgehen, indem Sie eine Reihe verschiedener Bilder rendern und das entsprechende auswählen, wenn es später auf einem bestimmten Monitortyp angezeigt wird.

Ein langfristiger Nutzen ist unwahrscheinlich

Es gibt also keinen Grund, warum Sie kein Subpixel-Rendering für einen Raytracer entwickeln könnten, aber es bedeutet, einen nicht immer bekannten Aspekt des Monitors zu berücksichtigen. Beachten Sie auch, dass Sie diese Software für einen schrumpfenden Markt entwickeln werden. Subpixel-Rendering ist nützlich für Bildschirme mit relativ niedriger Auflösung. Da sich immer mehr Bildschirme (sogar mobile Bildschirme) einer derart hohen Auflösung nähern, dass das menschliche Auge den Unterschied durch Subpixel-Rendering nicht erkennen kann, ist Ihre Arbeit wahrscheinlich eher von theoretischem Interesse als von praktischem Nutzen.

Trichoplax
quelle
3
Wenn man Devil's Advocate spielt und wenn möglich Farb-Subpixel-Rendering (ich bin ein Skeptiker!), Scheint es, als könnte es in VR-Situationen nützlich sein, in denen es ihnen schwerfällt, eine ausreichende Auflösung zu erreichen. Vielleicht auch an Telefonen oder Tischen?
Alan Wolfe
1
@ AlanWolfe ja, aber es ist auch 3-mal so teuer zu rendern
Joojaa
Ja sicher, das ist wahr. In einigen Situationen ist dies jedoch kein Problem. Ich kenne zum Beispiel einige Algorithmen, bei denen Sie nicht für jedes Pixel und jeden Frame Strahlen abschießen müssen. Es scheint, als könnte dies auch in gerasterten Grafiken wiedergegeben werden. Auch hier bin ich nicht davon überzeugt, dass Farb-Subpixel-Rendering eine echte Sache ist, aber weißt du, WENN! : P
Alan Wolfe
@ AlanWolfe Ich verstehe deine Zweifel nicht. Alle Bilder werden bereits mit Subpixeln gerendert, aber die Farben sind um ein Drittel bis ein halbes Pixel falsch ausgerichtet. Ich kann nicht sehen, wie die Korrektur dieser Fehlausrichtung zu einem Bild mit höherer Qualität führen würde. Haben Sie spezielle Bedenken (was eine gute Frage sein könnte ...)?
Trichoplax
3
@joojaa Es gibt keinen Grund, warum das Rendern dreimal so teuer wäre. Sie müssten nicht die dreifache Anzahl von Strahlen abschießen. Sie würden nur 3 verschiedene Gewichte anwenden, wenn Sie die Strahlen im Framebuffer ansammeln. Tatsächlich verwenden Sie für jeden Farbkanal einen anderen Antialiasing-Kernel.
Nathan Reed
9

Natürlich können Sie Subpixel-Rendering für beliebige Bilder verwenden. Das Rendern von Subpixeln ist jedoch eine generische 2D-Bildverarbeitungstechnik - es hat nichts spezielles mit Raytracing zu tun. Sie können es genauso gut mit jeder anderen 3D-Rendering-Methode oder sogar mit einer einfachen 2D-Zeichnung, einem Foto oder sogar einem Video verwenden.

Daher würde ich sagen, dass "Subpixel-Rendering für Raytracing" zwei unterschiedliche Problembereiche zusammenführt, die am besten separat behandelt werden. Die einzige relevante Verbindung besteht darin, dass Sie, wenn Sie die Szene in Echtzeit strahlverfolgen und wissen, dass das resultierende Bild mithilfe von Subpixel-Rendering auf dem Bildschirm gezeichnet wird, diese Informationen verwenden können, um die Pixeldichte (und den Aspekt) zu optimieren Verhältnis) des Zwischenbildes (z. B. unter Verwendung der 3-fachen horizontalen Pixeldichte für einen typischen RGB-LCD-Bildschirm).


Ein möglicher Grund für Verwirrung kann sein, dass auf aktuellen Computersystemen Subpixel-Rendering üblicherweise nur für Text verwendet wird und typischerweise in den Schriftart-Rendering-Code integriert ist. Die Hauptgründe dafür sind wohl historisch, aber es ist auch, wo die größten Gewinne (in Bezug auf visuelle Verbesserung und Lesbarkeit) typischerweise sind.

Aufgrund der Art und Weise, wie Text aus einfachen und sich wiederholenden Vektorformen besteht, bietet die Integration des Subpixel-Renderings in den Font-Renderer einige zusätzliche Optimierungsmöglichkeiten, da der Text nur in einem hochauflösenden Puffer gerendert und anschließend nachbearbeitet wird.

Ich gehe jedoch davon aus, dass wir im Laufe der Zeit, wenn die Technologie ausgereift ist, zu einem System übergehen, bei dem das Rendern von Subpixeln einfach transparent von der GPU oder möglicherweise vom Bildschirm selbst ausgeführt wird.

(Dies erfordert höchstwahrscheinlich Anwendungen, die diese Funktion in vollem Umfang nutzen möchten, um mit physischen Pixeln umzugehen, die kleiner sind und nicht unbedingt die gleiche Form wie die "logischen Pixel" haben. Aber wir bewegen uns bereits darin Richtung mit hochauflösenden Bildschirmen.)

Ilmari Karonen
quelle
Tervetuloa! Ja, Ihr Punkt ist gültig, ich würde sagen, dass das System oder die Hardware dies tun muss, da nur das System in Zukunft realistisch die Ausrichtung des Bildschirms und die Organisation der Farben auf dem Bildschirm nicht berücksichtigen kann. Vorzugsweise würde dies der Bildschirm selbst tun.
Joojaa