Outils pour utilisateurs

Outils du site


issue113:inkscape

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
issue113:inkscape [2016/10/08 11:54]
auntiee
issue113:inkscape [2016/10/08 14:43] (Version actuelle)
andre_domenech
Ligne 1: Ligne 1:
 **A major feature of SVG filters is that they'​re dynamic. The calculations to produce the output aren't simply done once and then stored in the image – as is often the case with filters in bitmap editors. Rather, they'​re performed time and time again as you zoom, pan, rotate objects or otherwise modify your drawing. This gives you the flexibility to make changes to your filter parameters at any time, but all this recalculation takes its toll on Inkscape'​s rendering speed. So now that you're (hopefully) starting to create more and more complex filters, I'm going to begin this instalment by looking at a few ways to mitigate this slowdown.** **A major feature of SVG filters is that they'​re dynamic. The calculations to produce the output aren't simply done once and then stored in the image – as is often the case with filters in bitmap editors. Rather, they'​re performed time and time again as you zoom, pan, rotate objects or otherwise modify your drawing. This gives you the flexibility to make changes to your filter parameters at any time, but all this recalculation takes its toll on Inkscape'​s rendering speed. So now that you're (hopefully) starting to create more and more complex filters, I'm going to begin this instalment by looking at a few ways to mitigate this slowdown.**
  
-Une caractéristique principale des filtres SVG est leur dynamique. Les calculs pour produire la sortie ne sont pas calculés une fois puis stockés dans l'​image ​comme c'est souvent le cas avec les filtres des éditeurs bitmap. À la place, ils sont calculés chaque fois que vous zoomez, découpez, tournez vos objets ou modifiez votre dessin. Ceci vous donne la flexibilité de modifier vos paramètres de filtrage à tout moment, mais ces calculs affectent la vitesse de rendu d'​Inkscape. Aussi, maintenant que vous commencez (je l'​espère) à créer de plus en plus de filtres complexes, je vais commencer cet article en analysant quelques moyens de réduire ce ralentissement.+Une caractéristique principale des filtres SVG est leur dynamique. Les calculs pour produire la sortie ne sont pas calculés une fois puis stockés dans l'​imagecomme c'est souvent le cas avec les filtres des éditeurs bitmap. À la place, ils sont calculés chaque fois que vous zoomez, découpez, tournez vos objets ou modifiez votre dessin. Ceci vous donne la flexibilité de modifier vos paramètres de filtrage à tout moment, mais ces calculs affectent la vitesse de rendu d'​Inkscape. Aussi, maintenant que vous commencez (je l'​espère) à créer de plus en plus de filtres complexes, je vais commencer cet article en analysant quelques moyens de réduire ce ralentissement.
  
 **When faced with a program that's slowing down due to too many calculations,​ there are two approaches that can be used to minimise the problem: reduce the number of calculations,​ or find some way to speed them up. Remembering that filters are applied on a per-pixel basis, just at the point of rendering the object, one way to reduce the number of calculations is to zoom out. An object viewed at a low zoom, which takes up 10x10 pixels on screen, occupies an area of 100 pixels. Even for the simplest of theoretical filters that means 100 calculations – but in practice it will be many more as, at the very least, there will likely need to be separate calculations for the red, green, blue and alpha channels. Zoom in so that the object fills 20x20 pixels – what we would colloquially consider to be “twice as big” – and the area grows by four times, to 400 pixels and therefore 400 calculations per channel. Zoom right in so that your small object almost fills your HD monitor and there'​s a lot of calculations to perform!** **When faced with a program that's slowing down due to too many calculations,​ there are two approaches that can be used to minimise the problem: reduce the number of calculations,​ or find some way to speed them up. Remembering that filters are applied on a per-pixel basis, just at the point of rendering the object, one way to reduce the number of calculations is to zoom out. An object viewed at a low zoom, which takes up 10x10 pixels on screen, occupies an area of 100 pixels. Even for the simplest of theoretical filters that means 100 calculations – but in practice it will be many more as, at the very least, there will likely need to be separate calculations for the red, green, blue and alpha channels. Zoom in so that the object fills 20x20 pixels – what we would colloquially consider to be “twice as big” – and the area grows by four times, to 400 pixels and therefore 400 calculations per channel. Zoom right in so that your small object almost fills your HD monitor and there'​s a lot of calculations to perform!**
  
-Quand vous êtes confronté à un programme qui ralentit à cause de trop nombreux calculs, il y a deux approches qui peuvent être utilisées pour minimiser le problème : réduire le nombre des calculs ou trouver une façon de les accélérer. Vous souvenant que, à la base, les filtres sont appliqués par pixel, juste au moment du rendu de l'​objet,​ effectuer un zoom arrière est une manière de réduire les calculs. Un objet vu en vision serrée, qui fait 10 pixels par 10 sur l'​écran,​ occupe une surface de 100 pixels. Même pour le plus simple des filtres théoriques,​ ça veut dire 100 calculs ​mais en principe, ça veut dire beaucoup plus, car, au strict minimum, les calculs pour les canaux rouge, vert, bleu et alpha devront probablement être distincts. Augmentez le champ pour que l'​objet remplisse 20 pixels par 20 - ce qui serait couramment considéré comme « deux fois plus gros » - et la surface est quatre fois plus grande, soit 400 pixels et, par conséquent,​ 400 calculs par canal. Augmentez le champ de vision jusqu'​à ce que votre petit objet remplisse presque toute la surface de votre moniteur HD et il y a beaucoup de calculs à faire !+Quand vous êtes confronté à un programme qui ralentit à cause de trop nombreux calculs, il y a deux approches qui peuvent être utilisées pour minimiser le problème : réduire le nombre des calculs ou trouver une façon de les accélérer. Vous souvenant que, à la base, les filtres sont appliqués par pixel, juste au moment du rendu de l'​objet,​ effectuer un zoom arrière est une manière de réduire les calculs. Un objet vu en vision serrée, qui fait 10 pixels par 10 sur l'​écran,​ occupe une surface de 100 pixels. Même pour le plus simple des filtres théoriques,​ ça veut dire 100 calculsmais en principe, ça veut dire beaucoup plus, car, au strict minimum, les calculs pour les canaux rouge, vert, bleu et alpha devront probablement être distincts. Augmentez le champ pour que l'​objet remplisse 20 pixels par 20 - ce qui serait couramment considéré comme « deux fois plus gros » - et la surface est quatre fois plus grande, soit 400 pixels et, par conséquent,​ 400 calculs par canal. Augmentez le champ de vision jusqu'​à ce que votre petit objet remplisse presque toute la surface de votre moniteur HD et il y a beaucoup de calculs à faire !
  
 **As well as avoiding large zooms, you can reduce the number of pixels to recalculate by simply resizing your Inkscape window. Does it really need to be full-sized to stretch to the whole width of your widescreen monitor? Try reducing the canvas size to something with a squarer aspect-ratio in the middle of your screen, with dialogs dragged out to floating windows at the sides. **As well as avoiding large zooms, you can reduce the number of pixels to recalculate by simply resizing your Inkscape window. Does it really need to be full-sized to stretch to the whole width of your widescreen monitor? Try reducing the canvas size to something with a squarer aspect-ratio in the middle of your screen, with dialogs dragged out to floating windows at the sides.
Ligne 13: Ligne 13:
 Tout comme éviter des vues larges, vous pouvez réduire le nombre de pixels à recalculer en redimensionnant simplement votre fenêtre Inkscape. Doit-elle vraiment être dimensionnée à la taille de votre moniteur à écran large ? Essayez de réduire la taille du canevas dans une forme plus carrée au centre de votre écran, en laissant flotter les fenêtres de dialogue sur les côtés. Tout comme éviter des vues larges, vous pouvez réduire le nombre de pixels à recalculer en redimensionnant simplement votre fenêtre Inkscape. Doit-elle vraiment être dimensionnée à la taille de votre moniteur à écran large ? Essayez de réduire la taille du canevas dans une forme plus carrée au centre de votre écran, en laissant flotter les fenêtres de dialogue sur les côtés.
  
-Parfois, vous n'avez pas vraiment besoin de voir la version filtrée d'un objet, si vous voulez juste agrandir le champ pour ajuster sa forme. Dans de tels cas, il y a l'​option Afficher > Mode d'​affichage > Sans filtre. Il y a aussi une option pour ne voir que le Contour ​des objets, ce qui peut être utile pour trouver des objets que vous auriez perdus dans la multitude des façons de rendre les objets invisibles, mais qui n'​offre réellement rien de plus pour ce qui est de la lenteur des filtres. Je le mentionne tout simplement parce qu'il y a aussi une option Alterner qui tourne sur les trois modes si vous ne faites qu'une chose aujourd'​hui,​ apprenez son raccourci clavier (CTRL-5 par défaut, où « 5 » est la touche du pavé numérique). Ce que ceci a de génial est que vous n'avez pas besoin de changer de mode avant de zoomer ​si vous agrandissez l'​image et que l'​affichage est trop lent, appuyez juste sur CTRL-5 pour changer de mode, abandonnant ainsi le recalcul en cours.+Parfois, vous n'avez pas vraiment besoin de voir la version filtrée d'un objet, si vous voulez juste agrandir le champ pour ajuster sa forme. Dans de tels cas, il y a l'​option Afficher > Mode d'​affichage > Sans filtre. Il y a aussi une option pour ne voir que le contour ​des objets, ce qui peut être utile pour trouver des objets que vous auriez perdus dans la multitude des façons de rendre les objets invisibles, mais qui n'​offre réellement rien de plus pour ce qui est de la lenteur des filtres. Je le mentionne tout simplement parce qu'il y a aussi une option Alterner qui tourne sur les trois modes si vous ne faites qu'une chose aujourd'​hui,​ apprenez son raccourci clavier (CTRL-5 par défaut, où « 5 » est la touche du pavé numérique). Ce que ceci a de génial est que vous n'avez pas besoin de changer de mode avant de zoomer ​si vous agrandissez l'​image et que l'​affichage est trop lent, appuyez juste sur CTRL-5 pour changer de mode, abandonnant ainsi le recalcul en cours.
  
 **How about when you've finished tweaking a filtered object, at least for the time being? If you don't need to refer to it when working on other parts of the drawing, it's worth putting it into its own layer or sub-layer. Turn the layer visibility off, and there'​s nothing for Inkscape to re-calculate. If you do still want to see it, you can make a bitmap copy of the filtered object before you move the original to another layer. Select your object and use Edit > Make a Bitmap Copy (or press ALT-B): Inkscape will render a bitmap of your object, complete with filters applied, meaning that (once the original is hidden) it doesn'​t need to re-calculate the filters as you work on your document. When you've finished your drawing you can delete the bitmap version and re-display the hidden layer with your original content. The resolution of the bitmap copy is set in the Inkscape preferences – lower values will be created faster, but won't be as accurate when you zoom in closely. Usually this is fine, though, as the bitmap is generally there as a position or color reference, rather than needing to be a high-resolution representation of your object. **How about when you've finished tweaking a filtered object, at least for the time being? If you don't need to refer to it when working on other parts of the drawing, it's worth putting it into its own layer or sub-layer. Turn the layer visibility off, and there'​s nothing for Inkscape to re-calculate. If you do still want to see it, you can make a bitmap copy of the filtered object before you move the original to another layer. Select your object and use Edit > Make a Bitmap Copy (or press ALT-B): Inkscape will render a bitmap of your object, complete with filters applied, meaning that (once the original is hidden) it doesn'​t need to re-calculate the filters as you work on your document. When you've finished your drawing you can delete the bitmap version and re-display the hidden layer with your original content. The resolution of the bitmap copy is set in the Inkscape preferences – lower values will be created faster, but won't be as accurate when you zoom in closely. Usually this is fine, though, as the bitmap is generally there as a position or color reference, rather than needing to be a high-resolution representation of your object.
Ligne 19: Ligne 19:
 These methods reduce the amount of calculations that need to be performed, but there are also ways to speed up filter performance even when you need to have the original filtered objects visible. Within the Inkscape Preferences (File > Inkscape Preferences… on 0.48, Edit > Preferences on 0.91) there is a panel for adjusting the rendering of filters, labelled as “Filters” on 0.48 and “Rendering” on 0.91.** These methods reduce the amount of calculations that need to be performed, but there are also ways to speed up filter performance even when you need to have the original filtered objects visible. Within the Inkscape Preferences (File > Inkscape Preferences… on 0.48, Edit > Preferences on 0.91) there is a panel for adjusting the rendering of filters, labelled as “Filters” on 0.48 and “Rendering” on 0.91.**
  
-Que se passe-t-il quand vous avez fini d'​ajuster un objet filtré, au moins, à ce moment précis ? Si vous n'en avez pas besoin pour travailler sur les autres parties de votre dessin, c'est mieux de le placer sur son propre calque ou sous-calque. Masquez ce calque, et Inkscape n'a plus rien à recalculer. Si vous voulez néanmoins toujours le voir, vous pouvez faire une copie bitmap de l'​objet filtré avant de déplacer l'​original sur un autre calque. Sélectionnez votre objet et utilisez Édition > Faire une copie bitmap (ou appuyez sur ALT-B) : Inkscape rendra un bitmap de votre objet, avec l'​application des filtres, signifiant (une fois l'​original masqué) qu'un recalcul des filtres n'est plus nécessaire pendant que vous travaillez sur votre document. La résolution de la copie bitmap est réglée dans les préférences d'​Inkscape ​la création sera plus rapide avec des valeurs basses, mais la précision sera moins bonne en agrandissant. Toutefois, cela n'a habituellement pas d'​importance parce que le bitmap est présent généralement comme référence de position ou de couleur, plutôt que comme une représentation en haute-résolution de votre objet.+Que se passe-t-il quand vous avez fini d'​ajuster un objet filtré, au moins, à ce moment précis ? Si vous n'en avez pas besoin pour travailler sur les autres parties de votre dessin, c'est mieux de le placer sur son propre calque ou sous-calque. Masquez ce calque, et Inkscape n'a plus rien à recalculer. Si vous voulez néanmoins toujours le voir, vous pouvez faire une copie bitmap de l'​objet filtré avant de déplacer l'​original sur un autre calque. Sélectionnez votre objet et utilisez Édition > Faire une copie bitmap (ou appuyez sur ALT-B) : Inkscape rendra un bitmap de votre objet, avec l'​application des filtres, signifiant (une fois l'​original masqué) qu'un recalcul des filtres n'est plus nécessaire pendant que vous travaillez sur votre document. La résolution de la copie bitmap est réglée dans les préférences d'​Inkscapela création sera plus rapide avec des valeurs basses, mais la précision sera moins bonne en agrandissant. Toutefois, cela n'a habituellement pas d'​importance parce que le bitmap est présent généralement comme référence de position ou de couleur, plutôt que comme une représentation en haute résolution de votre objet.
  
-Ces méthodes réduisent la quantité des calculs qui doivent être réalisés, mais il y a aussi des façons d'​accélérer la performance du filtre, même quand vous avez besoin de garder visibles les objets filtrés originaux. Dans les préférences d'​Inkscape (Fichier > Préférences d'​Inkscape… dans la 0.48, Édition > Préférences dans la 0.91), il y a un panneau pour ajuster le rendu des filtres, appelé « Filtres » dans la 0.48 et « Rendu » dans la 0.91.+Ces méthodes réduisent la quantité des calculs qui doivent être réalisés, mais il y a aussi des façons d'​accélérer la performance du filtre, même quand vous avez besoin de garder visibles les objets filtrés originaux. Dans les préférences d'​Inkscape (Fichier > Préférences d'​Inkscape dans la 0.48, Édition > Préférences dans la 0.91), il y a un panneau pour ajuster le rendu des filtres, appelé « Filtres » dans la 0.48 et « Rendu » dans la 0.91.
  
 **Within this panel you can set the number of threads that Inkscape uses for rendering Gaussian Blur filters (0.48), or filters in general (0.91). If you have a multi-core or hyper-threading processor in your machine, increasing this value to suit can speed up rendering. The usual recommendation is to set it to the number of cores minus 1. That, in theory, allows a single core to be used for the main Inkscape process, whilst using your remaining cores to render the filters. In practice there'​s a whole operating system between Inkscape and your cores, so although it's a useful guideline there'​s no guarantee that your OS will distribute the threads so neatly. **Within this panel you can set the number of threads that Inkscape uses for rendering Gaussian Blur filters (0.48), or filters in general (0.91). If you have a multi-core or hyper-threading processor in your machine, increasing this value to suit can speed up rendering. The usual recommendation is to set it to the number of cores minus 1. That, in theory, allows a single core to be used for the main Inkscape process, whilst using your remaining cores to render the filters. In practice there'​s a whole operating system between Inkscape and your cores, so although it's a useful guideline there'​s no guarantee that your OS will distribute the threads so neatly.
Ligne 27: Ligne 27:
 On 0.91 you can also set aside some memory in which to cache the results of your filter calculations. This should have an effect on things like panning – where an already calculated filter result is moved in and out of view – but it will likely have less effect if you zoom in and out, as the filters will need to be recalculated for each zoom level anyway. Nevertheless,​ if you have plenty of spare RAM it might be worth assigning a bit more to this option to help speed things up where possible.** On 0.91 you can also set aside some memory in which to cache the results of your filter calculations. This should have an effect on things like panning – where an already calculated filter result is moved in and out of view – but it will likely have less effect if you zoom in and out, as the filters will need to be recalculated for each zoom level anyway. Nevertheless,​ if you have plenty of spare RAM it might be worth assigning a bit more to this option to help speed things up where possible.**
  
-Dans ce panneau, vous pouvez régler le nombre de « threads » (tâches en parallèle) qu'​Inkscape utilise pour le rendu de filtres de Flou gaussien (0.48) ou des filtres en général (0.91). Si votre ordinateur a un processeur multi-cœurs ou « hyper-threading » (technologie multi-tâches),​ l'​augmentation de la valeur peut accélérer le rendu des filtres. On recommande habituellement de le régler au nombre de cœurs moins 1, ce qui, en théorie, permet l'​utilisation d'un seul cœur pour le processus principal, tout en se servant des cœurs ​restant ​pour le rendu des filtres. En pratique, il y a tout le système d'​exploitation entre vous et vos cœurs ; aussi, bien que ce soit une indication utile, il n'y a pas de garantie que votre OS distribue les « threads » aussi nettement.+Dans ce panneau, vous pouvez régler le nombre de « threads » (tâches en parallèle) qu'​Inkscape utilise pour le rendu de filtres de flou gaussien (0.48) ou des filtres en général (0.91). Si votre ordinateur a un processeur multi-cœurs ou « hyper-threading » (technologie multi-tâches),​ l'​augmentation de la valeur peut accélérer le rendu des filtres. On recommande habituellement de le régler au nombre de cœurs moins 1, ce qui, en théorie, permet l'​utilisation d'un seul cœur pour le processus principal, tout en se servant des cœurs ​restants ​pour le rendu des filtres. En pratique, il y a tout le système d'​exploitation entre vous et vos cœurs ; aussi, bien que ce soit une indication utile, il n'y a pas de garantie que votre OS distribue les « threads » aussi nettement.
  
-En plus, dans la 0.91, vous pouvez aussi réserver un peu de mémoire dans laquelle mettre en cache les résultats de vos calculs de filtres. Ceci aurait un effet sur des actions comme le déplacement dans la fenêtre - où un résultat de filtrage déjà calculé est déplacé pour être vu ou caché - mais il aura probablement moins d'​effet si vous agrandissez ou réduisez l'​échelle,​ car les filtres devront être recalculés de tout façon à chaque niveau. Néanmoins, si vous avez plein de RAM libre, ça peut valoir le coup d'en assigner un peu plus à cette option pour accélérer les choses là où c'est possible.+En plus, dans la 0.91, vous pouvez aussi réserver un peu de mémoire dans laquelle mettre en cache les résultats de vos calculs de filtres. Ceci aurait un effet sur des actions comme le déplacement dans la fenêtre - où un résultat de filtrage déjà calculé est déplacé pour être vu ou caché - mais il aura probablement moins d'​effet si vous agrandissez ou réduisez l'​échelle,​ car les filtres devront être recalculés de toute façon à chaque niveau. Néanmoins, si vous avez plein de RAM libre, ça peut valoir le coup d'en assigner un peu plus à cette option pour accélérer les choses là où c'est possible.
  
 **Finally there are a couple of sets of radio buttons governing the trade-off between display quality and speed. Filters can be approximated by rendering at a lower resolution, giving a faster redraw but with less accuracy. The buttons here let you adjust that balance for filters in general, but also for Gaussian Blur in particular (since that tends to be the most commonly used filter primitive). Note that these radio buttons only affect the display of your image on screen – exporting to a PNG file always uses the highest possible quality. **Finally there are a couple of sets of radio buttons governing the trade-off between display quality and speed. Filters can be approximated by rendering at a lower resolution, giving a faster redraw but with less accuracy. The buttons here let you adjust that balance for filters in general, but also for Gaussian Blur in particular (since that tends to be the most commonly used filter primitive). Note that these radio buttons only affect the display of your image on screen – exporting to a PNG file always uses the highest possible quality.
Ligne 35: Ligne 35:
 Moving on from performance,​ and back to filters themselves, a small correction of the previous article: it seems that the Image primitive in 0.91 does let you use an SVG element from your drawing as its input, after all. The problem is that the element is included relative to the top left of the page – so if you try to include something that's located away from that corner, there'​s a good chance you'll only see empty space pulled into your filter (that'​s what led me to think it wasn't working at all). There are two possible solutions to this: draw your included SVG element at the top left of the page (you can put it onto a hidden layer if you don't want it to be visible there in the final image), or increase the size of the filter region until your included element is visible, then use an Offset primitive to move it to the right place. Neither of these are great options, in my opinion, but, of the two, I tend to prefer placing the included element (or a clone of it) at the top left corner, on a hidden layer, as the latter results in a larger filter area to calculate – and hence slows down rendering.** Moving on from performance,​ and back to filters themselves, a small correction of the previous article: it seems that the Image primitive in 0.91 does let you use an SVG element from your drawing as its input, after all. The problem is that the element is included relative to the top left of the page – so if you try to include something that's located away from that corner, there'​s a good chance you'll only see empty space pulled into your filter (that'​s what led me to think it wasn't working at all). There are two possible solutions to this: draw your included SVG element at the top left of the page (you can put it onto a hidden layer if you don't want it to be visible there in the final image), or increase the size of the filter region until your included element is visible, then use an Offset primitive to move it to the right place. Neither of these are great options, in my opinion, but, of the two, I tend to prefer placing the included element (or a clone of it) at the top left corner, on a hidden layer, as the latter results in a larger filter area to calculate – and hence slows down rendering.**
  
-Enfin, deux réglages par boutons radio gouvernent la balance entre qualité et rapidité d'​affichage. Les filtres peuvent être approximés par un rendu à faible résolution,​ offrant un rafraîchissement plus rapide de l'​écran avec une moindre précision. Ces boutons vous permettent d'​ajuster cet équilibre pour les filtres en général, mais aussi pour le Flou gaussien en particulier (car il est assez souvent la plus communément utilisée des primitives de filtrage). Notez que ces boutons radio n'​affectent que l'​affichage de votre image à l'​écran ​l'​exportation en fichier PNG utilise toujours la plus haute qualité possible.+Enfin, deux réglages par boutons radio gouvernent la balance entre qualité et rapidité d'​affichage. Les filtres peuvent être approximés par un rendu à faible résolution,​ offrant un rafraîchissement plus rapide de l'​écran avec une moindre précision. Ces boutons vous permettent d'​ajuster cet équilibre pour les filtres en général, mais aussi pour le flou gaussien en particulier (car il est assez souvent la plus communément utilisée des primitives de filtrage). Notez que ces boutons radio n'​affectent que l'​affichage de votre image à l'​écranl'​exportation en fichier PNG utilise toujours la plus haute qualité possible.
  
-Abandonnant la performance,​ revenons ​au filtres eux-mêmes. D'​abord,​ une petite correction au précédent article : il semble finalement que la primitive Image dans la 0.91 vous permet malgré tout d'​utiliser un élément SVG de votre image comme entrée. Le problème est que l'​élément est inclus par rapport au coin en haut et à gauche de la page ; aussi, si vous essayez d'​inclure quelque chose qui est situé loin de cet angle, il y a de bonnes chances que vous voyez une zone blanche insérée dans votre filtre (ce qui m'​avait fait penser qu'il ne fonctionnait pas du tout). Il y a deux solutions possibles à cela : dessinez votre élément SVG inclus en haut à gauche de la page (vous pouvez le placer sur un calque masqué si vous ne voulez pas le rendre visible à cet endroit dans l'​image finale), ou augmenter ​la taille de la région de votre filtre jusqu'​à ce que l'​élément inclus soit visible, puis utilisez la primitive Décalage pour le déplacer au bon endroit. Aucune des deux n'est bien fameuse, à mon avis, mais, entre les deux, j'ai tendance à préférer le placement de l'​élément inclus (ou un de ses clones) dans le coin en haut et à gauche, sur un calque masqué, car l'​autre solution entraîne des calculs sur une plus grande région de filtrage ​et ainsi ralentit le rendu.+Abandonnant la performance,​ revenons ​aux filtres eux-mêmes. D'​abord,​ une petite correction au précédent article : il semble finalement que la primitive Image dans la 0.91 vous permet malgré tout d'​utiliser un élément SVG de votre image comme entrée. Le problème est que l'​élément est inclus par rapport au coin en haut et à gauche de la page ; aussi, si vous essayez d'​inclure quelque chose qui est situé loin de cet angle, il y a de bonnes chances que vous voyiez ​une zone blanche insérée dans votre filtre (ce qui m'​avait fait penser qu'il ne fonctionnait pas du tout). Il y a deux solutions possibles à cela : dessinez votre élément SVG inclus en haut à gauche de la page (vous pouvez le placer sur un calque masqué si vous ne voulez pas le rendre visible à cet endroit dans l'​image finale), ou augmentez ​la taille de la région de votre filtre jusqu'​à ce que l'​élément inclus soit visible, puis utilisez la primitive Décalage pour le déplacer au bon endroit. Aucune des deux n'est bien fameuse, à mon avis, mais, entre les deux, j'ai tendance à préférer le placement de l'​élément inclus (ou un de ses clones) dans le coin en haut et à gauche, sur un calque masqué, car l'​autre solution entraîne des calculs sur une plus grande région de filtrageet ainsi ralentit le rendu.
  
 **Another problem with this feature in 0.91 occurs if you try to use the same object both as a target of the filter chain, and as an input to the Image primitive. This is fairly easy to do by mistake, as the clumsiness of Inkscape'​s filter UI makes it likely that you'll lose track of what is selected and why, but the result is an instant crash of Inkscape, with no warning and no backup file saved. If you plan to use SVG objects as inputs to the Image primitive in 0.91 it's probably best to save your file just before you add the link. **Another problem with this feature in 0.91 occurs if you try to use the same object both as a target of the filter chain, and as an input to the Image primitive. This is fairly easy to do by mistake, as the clumsiness of Inkscape'​s filter UI makes it likely that you'll lose track of what is selected and why, but the result is an instant crash of Inkscape, with no warning and no backup file saved. If you plan to use SVG objects as inputs to the Image primitive in 0.91 it's probably best to save your file just before you add the link.
Ligne 51: Ligne 51:
 As you can see, the first input to the displacement map is our Source Graphic, whilst the second comes from an Image primitive. In practice the Image is just a 50% gray rectangle pulled in as an SVG element (and positioned at the top left of the page so that it works in 0.91). There are also two stars in the image: the filter is applied to the red one, whereas the green one is simply there as a reference so that you can see the effect more clearly. The effect parameters are set to a Scale of 10, with the Red and Green channels being used as the source of the X and Y displacements respectively – those settings will become clear shortly.** As you can see, the first input to the displacement map is our Source Graphic, whilst the second comes from an Image primitive. In practice the Image is just a 50% gray rectangle pulled in as an SVG element (and positioned at the top left of the page so that it works in 0.91). There are also two stars in the image: the filter is applied to the red one, whereas the green one is simply there as a reference so that you can see the effect more clearly. The effect parameters are set to a Scale of 10, with the Red and Green channels being used as the source of the X and Y displacements respectively – those settings will become clear shortly.**
  
-Pour commencer à comprendre cette primitive, débutons ​ avec la plus classique des chaînes :+Pour commencer à comprendre cette primitive, débutons avec la plus classique des chaînes :
  
-Comme vous le voyez, la première entrée de Carte de déplacement est notre Source ​image, alors que la seconde vient de la primitive Image. En pratique, l'​image n'est qu'un rectangle gris à 50% incorporé comme élément SVG (et positionné dans le coin gauche en haut de la page, de façon à ce qu'il fonctionne dans la 0.91). Il y a aussi deux étoiles dans l'​image : le filtre est appliqué à la rouge, alors que la verte est là tout simplement comme référence pour que vous voyiez l'​effet plus clairement. Les paramètres de l'​effet sont une Longueur/Courbure ​de 10, avec les canaux rouge et vert utilisés comme sources respectives des déplacements X et Y - ceci deviendra plus clair sous peu.+Comme vous le voyez, la première entrée de carte de déplacement est notre source ​image, alors que la seconde vient de la primitive Image. En pratique, l'​image n'est qu'un rectangle gris à 50 % incorporé comme élément SVG (et positionné dans le coin gauche en haut de la page, de façon à ce qu'il fonctionne dans la 0.91). Il y a aussi deux étoiles dans l'​image : le filtre est appliqué à la rouge, alors que la verte est là tout simplement comme référence pour que vous voyiez l'​effet plus clairement. Les paramètres de l'​effet sont une longueur/courbure ​de 10, avec les canaux rouge et vert utilisés comme sources respectives des déplacements X et Y - ceci deviendra plus clair sous peu.
  
 **The result of the filter is... absolutely nothing! To understand why, let's consider a single pixel in our output image. That pixel comes from somewhere in the source image, with the exact nature of “somewhere” being defined by the displacement map (the second input image). Each pixel in the displacement map is made up of a combination of four values (Red, Green, Blue and Alpha), and the settings in the filter dialog let you choose which of those values should be used for the X offset, and which for the Y offset. From there, Inkscape goes through the following steps to find out what color the output pixel should be: **The result of the filter is... absolutely nothing! To understand why, let's consider a single pixel in our output image. That pixel comes from somewhere in the source image, with the exact nature of “somewhere” being defined by the displacement map (the second input image). Each pixel in the displacement map is made up of a combination of four values (Red, Green, Blue and Alpha), and the settings in the filter dialog let you choose which of those values should be used for the X offset, and which for the Y offset. From there, Inkscape goes through the following steps to find out what color the output pixel should be:
Ligne 65: Ligne 65:
 7) The output pixel should be set to the color of the pixel from the input image that is located at the new coordinates,​ or an interpolated color based on the surrounding pixels if the coordinates don't point to a single pixel.** 7) The output pixel should be set to the color of the pixel from the input image that is located at the new coordinates,​ or an interpolated color based on the surrounding pixels if the coordinates don't point to a single pixel.**
  
-Le résultat du filtre est… absolument rien ! Pour comprendre pourquoi, considérons un seul pixel de notre image de sortie. Ce pixel vient de quelque part dans notre Source ​image, et la nature précise du « quelque part » est définie par la carte de déplacement (la seconde image d'​entrée). Chaque pixel dans la carte de déplacement est composé d'une combinaison de quatre valeurs (rouge, bleu, vert et alpha) et les réglages dans le dialogue du filtre vous laissent choisir laquelle de ces valeurs devrait être utilisée pour le décalage X, et laquelle pour le décalage Y. À partir de là, Inkscape exécute les étapes suivantes pour déterminer quelle sera la couleur du pixel de sortie :+Le résultat du filtre est... absolument rien ! Pour comprendre pourquoi, considérons un seul pixel de notre image de sortie. Ce pixel vient de quelque part dans notre source ​image, et la nature précise du « quelque part » est définie par la carte de déplacement (la seconde image d'​entrée). Chaque pixel dans la carte de déplacement est composé d'une combinaison de quatre valeurs (rouge, bleu, vert et alpha) et les réglages dans le dialogue du filtre vous laissent choisir laquelle de ces valeurs devrait être utilisée pour le décalage X, et laquelle pour le décalage Y. À partir de là, Inkscape exécute les étapes suivantes pour déterminer quelle sera la couleur du pixel de sortie :
  
 1) Chercher la couleur du pixel équivalent dans la carte de déplacement. 1) Chercher la couleur du pixel équivalent dans la carte de déplacement.
Ligne 71: Ligne 71:
 3) Diviser les décalages par 255 pour les normaliser dans une plage de 0 à 1. 3) Diviser les décalages par 255 pour les normaliser dans une plage de 0 à 1.
 4) Soustraire 0,5 des décalages pour les déplacer dans la plage -0,5 à 0,5. 4) Soustraire 0,5 des décalages pour les déplacer dans la plage -0,5 à 0,5.
-5) Multiplier les décalages par la valeur de Longueur/Courbure ​définie dans le filtre.+5) Multiplier les décalages par la valeur de longueur/courbure ​définie dans le filtre.
 6) Ajouter les valeurs des décalages aux coordonnées X et Y du pixel pour obtenir une nouvelle paire de coordonnées. 6) Ajouter les valeurs des décalages aux coordonnées X et Y du pixel pour obtenir une nouvelle paire de coordonnées.
 7) Le pixel de sortie sera réglé à la couleur du pixel de l'​image d'​entrée qui est situé aux nouvelles coordonnées,​ ou à une couleur interpolée à partir de celles des pixels voisins si les coordonnées n'​indiquent pas un seul pixel. 7) Le pixel de sortie sera réglé à la couleur du pixel de l'​image d'​entrée qui est situé aux nouvelles coordonnées,​ ou à une couleur interpolée à partir de celles des pixels voisins si les coordonnées n'​indiquent pas un seul pixel.
Ligne 81: Ligne 81:
 Changing the rectangle to white (255, 255, 255) has the opposite effect – the image appears to move up and to the left. Because we've specified Red and Green for the X and Y displacement,​ filling it with pure red (255, 0, 0) produces different displacement values for the two coordinates,​ effectively moving the image down and to the left; pure green (0, 255, 0) moves it up and to the right. In all cases, the value of the Blue component (or, indeed, the Alpha component) doesn'​t make any difference. Pure cyan (0, 255, 255) has exactly the same effect as pure green, since we've configured the filter to consider just the Red and Green components.** Changing the rectangle to white (255, 255, 255) has the opposite effect – the image appears to move up and to the left. Because we've specified Red and Green for the X and Y displacement,​ filling it with pure red (255, 0, 0) produces different displacement values for the two coordinates,​ effectively moving the image down and to the left; pure green (0, 255, 0) moves it up and to the right. In all cases, the value of the Blue component (or, indeed, the Alpha component) doesn'​t make any difference. Pure cyan (0, 255, 255) has exactly the same effect as pure green, since we've configured the filter to consider just the Red and Green components.**
  
-Gardez en tête que notre carte n'est que du gris à 50%, avec les valeurs RGB à 127, 127, 127. Si vous suivez les étapes ci-dessus, vous trouverez un décalage de -0,02 pixels pour X comme pour Y assez proches de zéro pour signifier en fait que le pixel de sortie prend la même position que le pixel d'​entrée. Appliquez cela à tous les pixels du filtre et il est clair que notre sortie ressemblera exactement à notre entrée.+Gardez en tête que notre carte n'est que du gris à 50 %, avec les valeurs RGB à 127, 127, 127. Si vous suivez les étapes ci-dessus, vous trouverez un décalage de -0,02 pixels pour X comme pour Yassez proches de zéro pour signifier en fait que le pixel de sortie prend la même position que le pixel d'​entrée. Appliquez cela à tous les pixels du filtre et il est clair que notre sortie ressemblera exactement à notre entrée.
  
 Le changement du rectangle en noir (0, 0, 0) modifie quelque peu le calcul. Maintenant, le décalage devient -5, -5 ; aussi, notre pixel de sortie prend la couleur du pixel situé un peu au-dessus et un peu à gauche de l'​image d'​origine. Ainsi, toute l'​image paraît avoir bougé vers le bas et à droite. Le changement du rectangle en noir (0, 0, 0) modifie quelque peu le calcul. Maintenant, le décalage devient -5, -5 ; aussi, notre pixel de sortie prend la couleur du pixel situé un peu au-dessus et un peu à gauche de l'​image d'​origine. Ainsi, toute l'​image paraît avoir bougé vers le bas et à droite.
  
-La modification du rectangle en blanc (255, 255, 255) a l'​effet inverse ​l'​image semble bouger vers le haut et à gauche. Parce que nous avons spécifié le rouge et le vert pour les déplacements X et Y, un remplissage tout en rouge (255, 0, 0) produit des valeurs de déplacement différentes pour les deux coordonnées,​ déplaçant l'​image en bas à gauche ; un pur vert (0, 255, 0) la déplace en haut à droite. Dans tous les cas, la valeur de la composante bleue (ou, bien sûr, de la composante alpha) ne fait aucune différence. Un cyan pur (0, 255, 255) à le même effet que le vert pur, car nous avons configuré le filtre pour ne réagir qu'aux composantes rouge et verte.+La modification du rectangle en blanc (255, 255, 255) a l'​effet inverse ​l'​image semble bouger vers le haut et à gauche. Parce que nous avons spécifié le rouge et le vert pour les déplacements X et Y, un remplissage tout en rouge (255, 0, 0) produit des valeurs de déplacement différentes pour les deux coordonnées,​ déplaçant l'​image en bas à gauche ; un pur vert (0, 255, 0) la déplace en haut à droite. Dans tous les cas, la valeur de la composante bleue (ou, bien sûr, de la composante alpha) ne fait aucune différence. Un cyan pur (0, 255, 255) à le même effet que le vert pur, car nous avons configuré le filtre pour ne réagir qu'aux composantes rouge et verte.
  
 **Used with a flat color like this, Displacement Map is just a very poor replacement for the Offset primitive. Where it comes into its own is when your displacement map contains various colors in order to use different offsets for each pixel. We know that a black fill pulls its pixels from up/left, and a white fill from down/right – what happens when we use an image with both black and white in it? Let's give it a try with a group, containing a black spiral on a white background – and we'll apply it to something a bit more complex than a red star. **Used with a flat color like this, Displacement Map is just a very poor replacement for the Offset primitive. Where it comes into its own is when your displacement map contains various colors in order to use different offsets for each pixel. We know that a black fill pulls its pixels from up/left, and a white fill from down/right – what happens when we use an image with both black and white in it? Let's give it a try with a group, containing a black spiral on a white background – and we'll apply it to something a bit more complex than a red star.
Ligne 92: Ligne 92:
 It's a bit of a cheat, because using just red and green only “stretches” your image in two directions. Overlaying a circle with perpendicular gradient that runs from white to transparent to black gives a more accurate result, but does start to hint at the biggest problem with the Displacement Map primitive: creating a suitable map image for the effect you want to achieve isn't always easy or obvious. But there is one way of creating a map that's quite simple, and extremely useful: the Turbulence primitive.** It's a bit of a cheat, because using just red and green only “stretches” your image in two directions. Overlaying a circle with perpendicular gradient that runs from white to transparent to black gives a more accurate result, but does start to hint at the biggest problem with the Displacement Map primitive: creating a suitable map image for the effect you want to achieve isn't always easy or obvious. But there is one way of creating a map that's quite simple, and extremely useful: the Turbulence primitive.**
  
-L'​utilisation d'une couleur unie pour la carte de déplacement n'est qu'un pâle remplacement de la primitive Décalage. Là où elle prend tout son sens, c'est quand la carte de déplacement contient des couleurs variées de façon à utiliser des décalages différents pour chaque pixel. Nous savons qu'un remplissage noir tire le pixel vers le haut à gauche, et qu'un blanc l'​entraîne en bas à droite ​qu'​arrive-t-il quand on utilise une image contenant du noir et du blanc ? Faisons un essai avec un groupe contenant une spirale noire sur un fond blanc et nous l'​appliquerons à quelque chose de plus complexe qu'une étoile rouge.+L'​utilisation d'une couleur unie pour la carte de déplacement n'est qu'un pâle remplacement de la primitive Décalage. Là où elle prend tout son sens, c'est quand la carte de déplacement contient des couleurs variées de façon à utiliser des décalages différents pour chaque pixel. Nous savons qu'un remplissage noir tire le pixel vers le haut à gauche, et qu'un blanc l'​entraîne en bas à droite ​qu'​arrive-t-il quand on utilise une image contenant du noir et du blanc ? Faisons un essai avec un groupe contenant une spirale noire sur un fond blanc et nous l'​appliquerons à quelque chose de plus complexe qu'une étoile rouge.
  
-En ajoutant un peu de Flou gaussien entre la primitive Image et la Carte de déplacement,​ nous pouvons adoucir les bords pour donner un joli effet d'​ondulations ​son intensité étant réglée par le paramètre ​Longueur/Courbure. Et pourquoi pas une variation du rouge au vert pour donner un effet du genre « fish eye » (grand angle, ​litt., ​œil de poisson) ?+En ajoutant un peu de flou gaussien entre la primitive Image et la carte de déplacement,​ nous pouvons adoucir les bords pour donner un joli effet d'​ondulationsson intensité étant réglée par le paramètre ​longueur/courbure. Et pourquoi pas une variation du rouge au vert pour donner un effet du genre « fish eye » (grand angle, ​littéralement ​œil de poisson) ?
  
 C'est tricher un peu, car l'​utilisation des seuls rouge et vert n'​étire l'​image que dans deux directions. La superposition d'un cercle passant du blanc au transparent puis au noir sur un axe perpendiculaire donne un effet plus précis, mais commence à signaler le plus gros problème de la primitive Carte de déplacement : créer une image carte convenable pour l'​effet que vous voulez n'est pas toujours simple ou évident. Mais il y a une façon assez simple et extrêmement utile de créer une carte : la primitive Turbulence. C'est tricher un peu, car l'​utilisation des seuls rouge et vert n'​étire l'​image que dans deux directions. La superposition d'un cercle passant du blanc au transparent puis au noir sur un axe perpendiculaire donne un effet plus précis, mais commence à signaler le plus gros problème de la primitive Carte de déplacement : créer une image carte convenable pour l'​effet que vous voulez n'est pas toujours simple ou évident. Mais il y a une façon assez simple et extrêmement utile de créer une carte : la primitive Turbulence.
Ligne 102: Ligne 102:
 But make sure you take the time to look at the edges. And what edges they are! From slight undulations,​ through spattered ink, to fuzzy vignettes. Imagine how these filters might look on shapes with even more edges, such as squares, stars and text. Better still, don't imagine; roll your sleeves up, dive into Inkscape'​s editor, and create your own filters.** But make sure you take the time to look at the edges. And what edges they are! From slight undulations,​ through spattered ink, to fuzzy vignettes. Imagine how these filters might look on shapes with even more edges, such as squares, stars and text. Better still, don't imagine; roll your sleeves up, dive into Inkscape'​s editor, and create your own filters.**
  
-Si vous avez besoin de vous rafraîchir la mémoire à propos de cette primitive, regardez la partie 51 de cette série. En bref, c'est une façon rapide de créer des zones remplies de couleurs pseudo-aléatoires qui, quand elles sont utilisées dans une carte de déplacement,​ tireront l'​image d'une façon ou d'une autre suivant le réglage des paramètres. Utilisez un réglage de bruit fractal à basse fréquence pour ajouter des distorsions grotesques à votre image. Augmentez un peu les valeurs pour produire le genre de distorsions de flou que vous pouvez voir à une fenêtre de salle de bain. Encore plus loin et et vous obtiendrez un chef d'​œuvre du pointillisme aux pixels détachés. Déliez les fréquences horizontale et verticale et vous avez un drapeau flottant au vent ou des ondulations horizontales.+Si vous avez besoin de vous rafraîchir la mémoire à propos de cette primitive, regardez la partie 51 de cette série. En bref, c'est une façon rapide de créer des zones remplies de couleurs pseudo-aléatoires qui, quand elles sont utilisées dans une carte de déplacement,​ tireront l'​image d'une façon ou d'une autre suivant le réglage des paramètres. Utilisez un réglage de bruit fractal à basse fréquence pour ajouter des distorsions grotesques à votre image. Augmentez un peu les valeurs pour produire le genre de distorsions de flou que vous pouvez voir à une fenêtre de salle de bain. Encore plus loin et vous obtiendrez un chef-d'​œuvre du pointillisme aux pixels détachés. Déliez les fréquences horizontale et verticale et vous avez un drapeau flottant au vent ou des ondulations horizontales.
  
 Mais prenez bien le temps de regarder les bords. Et quels bords ! Des ondulations légères, en passant par des éclaboussures d'​encre,​ jusqu'​à un vignettage flou. Imaginez à quoi de tels filtres peuvent ressembler sur des formes avec encore plus de côtés, comme les carrés, les étoiles ou du texte. Encore mieux, n'​imaginez pas ; remontez vos manches, plongez dans l'​éditeur d'​Inkscape et créez vos propres filtres. Mais prenez bien le temps de regarder les bords. Et quels bords ! Des ondulations légères, en passant par des éclaboussures d'​encre,​ jusqu'​à un vignettage flou. Imaginez à quoi de tels filtres peuvent ressembler sur des formes avec encore plus de côtés, comme les carrés, les étoiles ou du texte. Encore mieux, n'​imaginez pas ; remontez vos manches, plongez dans l'​éditeur d'​Inkscape et créez vos propres filtres.
Ligne 111: Ligne 111:
  
 Crédits images Crédits images
-La Gioconda” (aka Mona Lisa) par Léonard de Vinci+La Gioconda (aka Mona Lisa) par Léonard de Vinci.
 http://​en.wikipedia.org/​wiki/​File:​Mona_Lisa,​_by_Leonardo_da_Vinci,​_from_C2RMF_retouched.jpg http://​en.wikipedia.org/​wiki/​File:​Mona_Lisa,​_by_Leonardo_da_Vinci,​_from_C2RMF_retouched.jpg
issue113/inkscape.txt · Dernière modification: 2016/10/08 14:43 par andre_domenech