Quel est le processus de pixellisation vectorielle d'Illustrator?

19

J'essaie actuellement de comprendre certaines choses sur la pixellisation des graphiques vectoriels et les différentes façons dont elle est implémentée dans différents types d'applications.

J'ai testé et comparé quelques programmes et j'ai remarqué qu'il existe une différence majeure dans le comportement de l' anti-aliasing dans le processus de tramage. Je m'intéresse particulièrement au comportement de rendu dans Illustrator . Vous verrez pourquoi en lisant plus loin.

Image de base

Pour mes tests, j'ai utilisé une composition très simple de triangles organisés en hexagone irrégulier avec différentes couleurs.

Logiciels graphiques vectoriels

Voici trois rendus du même graphique vectoriel dans Illustrator, Affinity et Inkscape. (L'image produite dans Affinity et Inkscape est exactement la même.)

Images rendues dans les outils d'édition graphique populaires

Comme vous pouvez le voir, il y a une ligne blanche indésirable sur chacun des bords de l'image rendue avec Affinity et Inkscape. L'anticrénelage ne remplit pas cette zone d'une couleur unie, ce qui entraîne un petit écart entre les formes adjacentes.

Bien qu'il n'y ait pas d'espace dans le rendu Illustrator, les bords des formes sont aussi lisses que le rendu Affinity.

Voici une image montrant la même zone de chaque image mise à l'échelle.

Rendu haut de gamme montrant l'anticrénelage

Il y a une différence très subtile entre les deux images. Le rendu Affinity est un tout petit peu plus fluide, mais il est presque impossible de voir la différence en regardant les images dans leur taille d'origine.

Navigateurs

Rendu SVG

L'affichage des mêmes graphiques exportés au format SVG dans un navigateur ressemble beaucoup à l'image raster produite par Affinity et Inkscape.

Fichier SVG rendu dans le navigateur

Il existe de très petites différences dans l'anti-aliasing des bords (qui ne valent pas vraiment la peine d'être présentées ici), mais la pixellisation SVG dans les navigateurs courants se comporte à peu près de la même manière.

Rendu décomposé

En testant le rendu d'Illustrator un peu plus loin, j'ai essayé de fractionner des parties de mes graphiques et de les exporter individuellement, puis de les recomposer avec un logiciel d'édition raster.

Schéma de recomposition d'image

En théorie, cela donnerait la même image que de l'avoir en une seule pièce, mais le résultat est légèrement différent en utilisant cette méthode.

Résultat de l'image recomposée

Comme indiqué, lorsque les deux parties sont composées, il y a un petit espace entre elles. Bien qu'il soit plus subtil, il est très similaire au graphique rendu dans Affinity.

Rendu de polygone

Blender (logiciel 3D)

SVG dans la fenêtre Blender

Blender vous permet d'importer des fichiers SVG et de les manipuler comme des objets courbes. Voici le graphique importé affiché dans la fenêtre 3D. (Par défaut, le matériau sera affecté par les lumières de la scène. La vérification de la propriété Shadeless dans le panneau des propriétés du matériau permettra de rendre les formes avec leurs couleurs d'origine.)

Voici un rendu fait du SVG dans Blender.

Rendu réel dans Blender

Il n'a pas d'espace entre les triangles. D'autres logiciels 3D sont très susceptibles de fonctionner de la même manière. Donc, Blender se comporte exactement comme Illustrator , n'est-ce pas? C'est peut-être l'inverse?

Les vraies questions

  • Quelle bibliothèque de dessins vectoriels Illustrator utilise-t-il en arrière-plan?
  • Serait-il possible qu'Illustrator utilise une sorte de moteur de rendu 3D? Est-ce open source? (probablement pas?)
  • L'une des bibliothèques de dessins vectoriels bien connues telles que Cairo et Skia peut-elle obtenir le même comportement de rendu? (Pas d'espace entre les formes)
  • Existe-t-il une bibliothèque de dessins vectoriels moins connue qui a le même comportement?
Geeyoam
la source
4
D'autres moteurs de rendu courants ont également ce problème de confusion. Voir w3.impa.br/~diego/projects/GanEtAl14/sample.html?contour .
lhf du

Réponses:

12

Autant que je sache, Illustrator a 2 ou 3 rastériseurs différents. L'aperçu à l'écran est également sujet aux mêmes artefacts d'espace que votre émission, bien qu'il soit réglé pour minimiser l'effet. Votre message semble impliquer que vous êtes intéressé par la sortie " optimisée pour l'art ".

Optimisation artistique par rapport à l'aperçu d'écran de l'illustrateur

Image 1 : Les différents modes de rendu de l'illustrateur. Art optimisé à gauche et laissé entendre à droite. Notez que l'indication montre un léger arrière-plan. Je n'ai pas la nouvelle version CC donc je ne peux pas montrer la troisième.

Comment fonctionne l'optimisation de l'art alors

Le mode de rendu optimisé pour l'art est simplement une image sans crénelage rendue à une résolution plus élevée, qui a ensuite été soumise à un filtrage de boîte . C'est ce qu'on appelle le super échantillonnage qui est coûteux. Un filtre de boîte est simplement la valeur moyenne des échantillons dans la boîte (pixel). Il s'agit en effet d'une technologie similaire à celle utilisée par le filtre multi-pixels utilisé dans votre rendu Blender. Vous pouvez faire la même chose manuellement et obtenir les mêmes résultats.

En fait, le rendu que vous obtenez sous forme d'illustrateur n'est pas vraiment bon. Son rendu dans l'espace non linéaire et non corrigé et vous pouvez obtenir de meilleurs résultats en remplaçant les filtres d'ordre supérieur et en calculant dans l'espace colorimétrique linéaire. Toutes les méthodes multi-échantillons présentent le même rendu correct (avec suffisamment d'échantillons, même mathématiquement correct).

entrez la description de l'image ici

Image 2 : Filtrage multi pixels, à gauche illustrateur natif 'Art Optimized'. À droite, même image à 16x16 pixels avec filtre Lanczos à lobes multiples dans un espace linéaire . Assurez-vous que votre zoom est de 1: 1.

Le problème

En fait, vous avez accepté le vrai problème de la génération actuelle de moteurs de rendu à l'écran. Ils essaient d'éviter le multi-échantillonnage en faveur du calcul de la couverture. Mais cela ne peut tout simplement pas fonctionner parfaitement! Tout simplement parce que le mélange alpha est:

c0=c1α+c2(1-α)

Lorsqu'il est enchaîné n'atteint jamais 0 lorsqu'il est enchaîné sur des surfaces semi-transparentes, le fond est donc visible. De plus, il ne sait pas comment la couverture est distribuée et il le fera mal. Il n'y a tout simplement aucun moyen de contourner cela dans un cas qui ne se chevauche pas comme celui-ci. mais si vous autorisez le chevauchement des formes, le calcul de la couverture peut être résolu (voir ici ).

Autres questions Vous pouvez obtenir le même résultat dans n'importe quel autre moteur en multipliant simplement simplement une image non anticrénelée. Vous ne pouvez pas obtenir l'effet sur les rendus d'écran sans faire l'astuce de chevauchement car ils optimisent la vitesse. L'illustrateur utilise-t-il la 3D? Le nouveau CC peut dépendre de votre interprétation de ce qu'est la 3D. Ce problème n'a rien à voir avec la 3D uniquement sur les méthodes de reconstruction du signal, donc ce n'est pas vraiment applicable à la question.

joojaa
la source
1
BTW, pour un aperçu plus détaillé des raisons pour lesquelles le mélange alpha ne «fait pas la bonne chose» dans des cas comme celui-ci, consultez cet article: Interpreting Alpha by Andrew Glassner.
Nathan Reed
@NathanReed aura l'air thnx, mais ici, c'est simplement que même si l'alpha fonctionnait correctement, la couverture ne saurait pas quelles parties couvrent les pixels et lesquelles ne le sont pas. Ainsi, deux couches avec 50% d'alpha pourraient signifier une opacité totale ou une seule couche visible car les objets remplissent une région identique que nous ne connaissons pas.
joojaa
2
@joojaa Oui, c'est essentiellement le point soulevé par le document: alpha peut représenter soit l'opacité, la couverture, soit une combinaison des deux. :)
Nathan Reed