2010-06-10 7 views
4

J'ai des textures que je crée et je voudrais les anti-alias. J'ai accès à la couleur de chaque pixel, étant donné cela, comment pourrais-je antialias la texture entière?Algorithme d'antialiasing?

Merci

Répondre

4

La méthode de base pour l'anti-aliasing est: pour un pixel P, échantillonnez les pixels qui l'entourent. La nouvelle couleur de P est la moyenne de sa couleur d'origine avec celles des échantillons.

Vous pouvez échantillonner plus ou moins de pixels, modifier la taille de la zone autour du pixel à échantillonner ou choisir au hasard les pixels à échantillonner. Comme d'autres l'ont dit, cependant: l'anti-aliasing n'est pas vraiment quelque chose qui est fait pour une image qui est déjà un bitmap de pixels. C'est une technique implémentée dans le moteur de rendu 2D/3D.

+0

Pouvez-vous élaborer sur la façon dont vous calculez la "moyenne" des couleurs? – Pacerier

5

"Anti-aliasing" peut se référer à un large éventail de techniques différentes. Aucun de ceux-ci serait typiquement quelque chose que vous feriez à l'avance à une texture.

Peut-être que vous voulez dire mip-mapping? http://en.wikipedia.org/wiki/Mipmap

+0

Non, je ne cherche pas cela, je cherche à rendre les bords dentelés lisses – jmasterx

+0

Si les artefacts sont déjà dans votre texture, essayez de les réduire à une taille plus petite. Ou chargez-les dans Photoshop et essayez d'utiliser les outils de flou pour améliorer le look. Il n'y a pas d'algorithme magique pour supprimer les erreurs d'alias après qu'elles aient été rendues. – Alan

+0

les bords dentelés sont le résultat d'une "pixellisation". Un antialiasing correct est fait au "milieu" plutôt qu'après. Si vous le faites après le pixel dentelé déjà généré, vous obtiendrez probablement un flou plutôt qu'un anti-crénelage correct. – ShinTakezou

0

Il n'est pas très significatif de poser des questions sur l'antialiasing en termes de ce vague. Tout dépend de la nature des textures et de la façon dont elles seront utilisées. Généralement, si vous n'avez aucun contrôle sur l'environnement d'affichage et que vos textures peuvent être mises à l'échelle, pivotées ou composées avec d'autres éléments sur lesquels vous n'avez aucun contrôle, vous devez utiliser la transparence pour indiquer où se trouve votre image se termine et où il ne remplit que partiellement un pixel.

Il est également généralement bon d'éviter les arêtes vives et les fonctions qui sont petites par rapport à la mise à l'échelle qui pourrait être effectuée.

5

Je suis désolé mais l'anti-aliasing vrai ne consiste pas à obtenir la couleur moyenne des voisins comme commenté ci-dessus. Cela adoucira sans doute les bords, mais ce n'est pas anti-aliasing mais flou. Un vrai anti-aliasing ne peut pas être fait correctement sur un bitmap, car il doit être calculé au moment du dessin pour dire quels pixels et/ou bords doivent être "adoucis" et lesquels ne le doivent pas. Par exemple: imaginez que vous dessinez une ligne horizontale qui doit avoir exactement 1 pixel d'épaisseur (disons "haut") et doit être placée exactement sur une coordonnée de ligne d'écran entière. Évidemment, vous voudrez qu'il ne soit pas adouci, et l'algorithme anti-alias approprié le fera, dessinant votre ligne comme une rangée parfaite de pixels pleins entourés par des pixels parfaits de couleur de fond, sans mélange de tons du tout. Mais si vous prenez cette même ligne une fois qu'elle a été dessinée (c'est-à-dire bitmap) et appliquez la méthode moyenne, vous aurez des flous au-dessus et en dessous de la ligne, résultant en une ligne horizontale de 3 pixels. Bien sûr, tout pourrait être réalisé grâce au bon codage mais à partir d'une approche très différente et beaucoup plus complexe.

+0

L'aliasing est une violation du théorème d'échantillonnage de Shannon. En ce sens, le flou est une solution valable - il supprime les composants à haute fréquence. Comme c'est de tourner tous les pixels de l'image à la même valeur. – Vorac