Rendu sous-pixel pour un Ray Tracer

16

Dans le rendu des polices, il est courant d'utiliser le rendu sous-pixels . L'idée de base ici est de diviser le pixel en ses composants RVB, puis de calculer une valeur pour chacun séparément. Étant donné que chaque composant est plus petit que le pixel entier, un anticrénelage de meilleure qualité est possible.

Il existe évidemment une manière analogue de faire de même pour un traceur de rayons. Vous effectuez un filtrage de reconstruction sur chaque sous-canal séparément.

J'ai été surpris que, cependant, je ne puisse pas vraiment trouver de référence à des traceurs de rayons faisant cela. Surtout si vous faites déjà un rendu spectral, cela semble être une chose évidente à faire. Il y a cet article d'un journal dont je n'ai jamais entendu parler et qui semble être lié. Mais dans l'ensemble, le rendu en sous-pixels ne semble tout simplement pas être une chose courante à faire. Ma question: pourquoi pas ?

imallett
la source
Vos images rendues en sous-pixels seront-elles toujours correctes si elles sont affichées sur des écrans en orientation portrait?
jamesdlin
en tant qu'ingénieur, je n'accepterais jamais de mettre en œuvre une telle ... idée cassée. SAUF si je suis sûr que l'affichage est totalement fixe. comme une appli pour iPhone 5S. L'utilisation de cette technique génère des images cassées à partir d'écrans utilisant des motifs inversés ou des arrangements différents.
v.oddou

Réponses:

14

C'est parfaitement possible

Bien que la différence ne soit pas particulièrement perceptible, je m'attendrais à un échantillonnage prenant en compte la géométrie exacte des pixels pour donner une image légèrement plus précise. Il vous suffit de décaler vos centres de pixels par composante de couleur en fonction de l'emplacement (moyen) du ou des sous-pixels de cette couleur. Notez que toutes les dispositions de pixels n'ont pas de correspondance un à un entre les pixels et les sous-pixels.

Par exemple, penTile RGBG a deux fois plus de sous-pixels verts que rouge et bleu, comme le montre cette image de Wikipedia:

Gros plan image de la géométrie des pixels RGBG

Je ne connais aucune raison technique qui empêcherait que cela soit utilisé pour produire des images couleur arbitraires. En fait, une scène colorée aura des artefacts de couleur moins visibles que le texte noir sur blanc, ce qui rend les différences de couleur plus difficiles à camoufler.

Les polices sont rendues à la demande

La différence pertinente entre le rendu d'une scène à lancer de rayons et le rendu des polices est que les polices ont tendance à être rendues à la demande et peuvent prendre en compte l'écran utilisé. Contrairement à cela, une scène à lancer de rayons est souvent pré-rendue puis affichée sur de nombreux types d'écran différents (avec une géométrie de pixels différente). Par exemple, l'affichage de votre image lancer de rayons sur une page Web empêchera de l'adapter à un type de moniteur spécifique.

Si vous étiez en train de concevoir un programme de lancer de rayons en temps réel et que vous aviez accès à la vérification de la géométrie en pixels du moniteur, vous pouvez alors lancer le lancer de rayons jusqu'à la disposition de sous-pixels spécifique. Cependant, raytracing hors ligne qui produit une image ne peut toujours être adapté à un seul type de géométrie de pixels, ce qui fera alors l'aspect d'image pire sur une autre géométrie de pixel. Vous pouvez contourner ce problème en rendant un ensemble d'images différentes et en choisissant celle qui convient lorsqu'elle sera ensuite affichée sur un type particulier de moniteur.

Il est peu probable qu'il y ait un avantage à long terme

Il n'y a donc aucune raison pour laquelle vous ne pouvez pas développer un rendu sous-pixel pour un raytracer, mais cela signifie prendre en compte un aspect du moniteur qui n'est pas toujours connu. Une autre chose à garder à l'esprit est que vous développerez ce logiciel pour un marché en contraction. Le rendu sous-pixel est utile pour les écrans qui ont une résolution relativement faible. Comme de plus en plus d'écrans (même les écrans mobiles) approchent d'une résolution si élevée que l'œil humain ne peut pas détecter la différence faite par le rendu sous-pixel, votre travail est susceptible d'être plus d'intérêt théorique que d'utilisation pratique.

trichoplax
la source
3
Jouer l'avocat du diable, si possible pour faire un rendu sous-pixel couleur (je suis sceptique!), Il semble que cela pourrait être utile dans les situations VR, où ils ont du mal à avoir une résolution suffisante. Peut-être aussi sur des téléphones ou des tables (non rétiniens?)?
Alan Wolfe du
1
@AlanWolfe oui mais c'est aussi 3 fois plus cher à rendre
joojaa
oui c'est sûr, c'est vrai. Il y a des situations où ce n'est pas un problème cependant. Par exemple, je connais quelques algorithmes où vous n'avez pas besoin de tirer des rayons pour chaque pixel à chaque image. Il semble que cela puisse également jouer dans les graphiques tramés btw. Encore une fois, je ne suis pas convaincu que le rendu des sous-pixels en couleur soit une chose réelle, mais vous savez, SI! : P
Alan Wolfe
@AlanWolfe Je ne comprends pas vos doutes. Toutes les images sont déjà rendues avec des sous-pixels, mais les couleurs sont décalées d'un tiers à la moitié d'un pixel. Je ne vois pas comment corriger ce désalignement ne produirait pas une image de meilleure qualité. Avez-vous des préoccupations spécifiques (qui pourraient poser une bonne question ...)?
trichoplax du
3
@joojaa Il n'y a aucune raison que le rendu soit 3 fois plus cher. Vous n'auriez pas besoin de tirer 3 fois le nombre de rayons; il suffit d'appliquer 3 poids différents lors de l'accumulation des rayons dans le framebuffer. En effet, vous utilisez un noyau d'anticrénelage différent pour chaque canal de couleur.
Nathan Reed du
9

Bien sûr, vous pouvez utiliser le rendu sous-pixel pour des images arbitraires. Cependant, le rendu sous-pixel est vraiment une technique de traitement d'image 2D générique - il n'a rien à voir avec le lancer de rayons spécifiquement. Vous pouvez tout aussi bien l'utiliser avec n'importe quelle autre méthode de rendu 3D, ou même avec un simple dessin 2D, une photographie ou même une vidéo.

Ainsi, je dirais que le "rendu de sous-pixels pour le lancer de rayons" est en réalité une combinaison de deux domaines de problèmes distincts qui sont mieux traités séparément. La seule connexion pertinente est que, si vous effectuez un lancer de rayons sur la scène en temps réel et que vous savez que l'image résultante va être dessinée à l'écran en utilisant un rendu en sous-pixels, vous pouvez utiliser ces informations pour optimiser la densité de pixels (et l'aspect ) de l'image intermédiaire (par exemple en utilisant une densité de pixels horizontale 3x pour un écran LCD RVB typique).


Une source potentielle de confusion peut être que, sur le système informatique actuel, le rendu en sous-pixels est couramment utilisé uniquement pour le texte et est généralement intégré au code de rendu des polices. Les principales raisons de cela sont sans doute historiques, mais c'est aussi là que les gains les plus importants (en termes d'amélioration visuelle et de lisibilité) sont généralement.

De plus, en raison de la façon dont le texte a tendance à être constitué de formes vectorielles simples et répétitives, l'intégration du rendu sous-pixel dans le rendu de police offre des possibilités d'optimisation supplémentaires par rapport au simple rendu du texte dans un tampon haute résolution, puis au post-traitement.

Cela dit, je m'attends à ce que, à mesure que la technologie évolue, nous passions à un système où le rendu des sous-pixels est simplement effectué de manière transparente par le GPU, ou éventuellement par l'écran lui-même.

(Cela nécessitera très probablement des applications qui souhaitent utiliser pleinement cette fonctionnalité pour gérer des pixels physiques plus petits et pas nécessairement de la même forme que les "pixels logiques". Mais là encore, nous allons déjà dans ce sens avec des écrans haute résolution.)

Ilmari Karonen
la source
Tervetuloa! Oui, votre argument est valable, je dirais que le système ou le matériel doit le faire, car seul le système ne pourra à l'avenir être conscient de l'orientation de l'écran et de l'organisation des couleurs à l'écran. De préférence, l'écran lui-même le ferait.
joojaa