Dans le lancer de rayons / tracé, l'un des moyens les plus simples d'anti-aliaser l'image est de suréchantillonner les valeurs des pixels et de faire la moyenne des résultats. C'EST À DIRE. au lieu de prendre chaque échantillon au centre du pixel, vous décalez les échantillons d'une certaine quantité.
En recherchant sur Internet, j'ai trouvé deux méthodes quelque peu différentes pour ce faire:
- Générez des échantillons comme vous le souhaitez et pesez le résultat avec un filtre
- Un exemple est PBRT
- Générez les échantillons avec une distribution égale à la forme d'un filtre
- Deux exemples sont smallpt et Benedikt Bitterli 's Tungsten Renderer
Générer et peser
Le processus de base est le suivant:
- Créez des échantillons comme vous le souhaitez (au hasard, stratifiés, séquences à faible écart, etc.)
- Décalage du rayon de la caméra à l'aide de deux échantillons (x et y)
- Rendre la scène avec le rayon
- Calculez un poids en utilisant une fonction de filtre et la distance de l'échantillon par rapport au centre du pixel. Par exemple, Box Filter, Tent Filter, Gaussian Filter, etc.)
- Appliquer le poids à la couleur du rendu
Générer sous la forme d'un filtre
Le principe de base est d'utiliser l' échantillonnage par transformation inverse pour créer des échantillons qui sont distribués en fonction de la forme d'un filtre. Par exemple, un histogramme d'un échantillon distribué sous la forme d'un gaussien serait:
Cela peut être fait exactement, ou en regroupant la fonction dans un pdf / cdf discret. smallpt utilise le cdf inverse exact d'un filtre de tente. Des exemples de méthodes de binning peuvent être trouvés ici
Des questions
Quels sont les avantages et les inconvénients de chaque méthode? Et pourquoi voudriez-vous utiliser l'un sur l'autre? Je peux penser à quelques choses:
Générer et peser semble être le plus robuste, permettant toute combinaison de n'importe quelle méthode d'échantillonnage avec n'importe quel filtre. Cependant, cela vous oblige à suivre les poids dans ImageBuffer puis à effectuer une résolution finale.
Générer sous la forme d'un filtre ne peut prendre en charge que des formes de filtre positives (c.-à-d. Pas de Mitchell, Catmull Rom ou Lanczos), car vous ne pouvez pas avoir un pdf négatif. Mais, comme mentionné ci-dessus, il est plus facile à mettre en œuvre, car vous n'avez pas besoin de suivre les poids.
Cependant, à la fin, je suppose que vous pouvez considérer la méthode 2 comme une simplification de la méthode 1, car elle utilise essentiellement un poids de filtre de boîte implicite.