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 ?
quelle
Antworten:
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:
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.
quelle
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.)
quelle