# Ombrage de celluloïd

L'ombrage de celluloïd, ou ses anglicismes cel-shading et toon-shading, est un modèle d'éclairage non photoréaliste utilisé en synthèse d'image. Il permet de créer des images à l'aspect « cartoon ».
Graphiquement, le rendu se caractérise par des contours marqués et une palette de couleurs réduite, comme dans les dessins animés traditionnels, d'où la référence aux celluloïds. On emploie également souvent le terme « cartoon » pour désigner cette technique. Les mimiques des personnages sont généralement exagérées pour accompagner le style dessin-animé, mais cela n'est pas une obligation.
Dans le cas du jeu XIII, on attribue l'emploi de l'ombrage de celluloïd au rendu « bande dessinée » ou « dessin-animé ».
La révélation commerciale de cette technique revient à Sega, avec le jeu Jet Set Radio sorti en 2000. Certains attribueraient l'invention de cette technique au jeu Super Mario World 2: Yoshi's Island, de Nintendo, en raison de l'écran d'accueil qui représente une île en 3D et dont les différents éléments sont entourés d'un contour noir fort marqué, ce qui peut être remis en cause étant donné que le reste du jeu est en 2D alors que cette technique est intimement liée à l'éclairage dynamique d'objets 3D. Plus récent, Crackdown de Real Time Worlds apporte un croisement entre réalité et bande dessinée. Le but de cette technique est d'obtenir un rendu différent mais aussi parfois d'économiser la puissance de traitement des textures, qui alors sont souvent absentes.
Aujourd'hui, le cel-shading est aussi un style de dessin numérique inspiré de l'animation elle-même.

## Techniques de l'ombrage de celluloïd pour la 3D temps réel

Il existe différentes méthodes permettant d'obtenir un ombrage de celluloïd en 3D temps réel. Certaines de ces méthodes utilisent les fonctions de bases présentes sur toutes les cartes graphiques, tandis que d'autres font appel à des extensions disponibles uniquement sur les cartes récentes, comme les pixel shaders. Toutes ces méthodes ont en commun l'addition de deux effets : le tracé des contours du modèle 3D et le seuillage des ombres (c'est-à-dire le remplacement des ombres en dégradées par une succession de niveaux de gris). Ce mode de rendu, bien que diminuant le réalisme, est donc plus coûteux en ressources (aussi bien CPU que GPU) qu'un affichage basique car les objets doivent être rendus en plusieurs étapes.
Exemple d'ombrage de celluloïd en trois étapes : contours, texture de base, puis seuillage des ombres.

### Tracé des contours

Deux méthodes permettent de tracer les contours d'un objet 3D. La première consiste à n'afficher que les contours des faces arrière de l'objet sous forme de traits noirs épais. L'affichage des faces arrière est géré par la carte graphique, en inversant simplement le back-face culling (« calcul du vu et du caché », fonction d'optimisation permettant de ne dessiner que les faces avant d'un objet dans un rendu 3D normal). Lorsque cette étape est terminée, l'objet doit alors être réaffiché normalement pour que les faces arrière précédemment affichés ressortent comme des contours. Cette méthode a l'avantage d'être simple à mettre en œuvre, mais son inconvénient majeur est de donner l'illusion que les contours grossissent quand l'objet s'éloigne. En réalité, c'est l'épaisseur des lignes qui reste constante.
Le tracé des contours peut également être réalisé en utilisant deux objets 3D quasiment identiques : l'objet lui-même et son enveloppe (qui ne peut pas être créée par un simple agrandissement du premier). Les contours s'obtiennent alors en affichant les faces arrière de l'enveloppe, en noir, puis par affichage de l'objet. Comme l'enveloppe est légèrement plus grande que l'objet, elle est visible sur ses bords. Cette méthode, utilisée dans le jeu XIII, crée des contours plus précis que la précédente, sans grossissement avec l'éloignement, mais elle demande plus de mémoire pour stocker l'objet et son enveloppe.

### Seuillage des ombres

Lors de cette étape, les faces avant de l'objet sont affichées sans être soumises à l'éclairage, ce qui supprime les ombres et donne à la texture de l'objet une luminosité maximale. Cette texture doit posséder deux couches : la première contient la texture de l'objet ; la deuxième contient les niveaux de gris permettant le seuillage des ombres. Cette deuxième couche est semi-transparente, elle se superpose donc à la texture originale de l'objet. Les coordonnées de texture de la première couche sont fixes, tandis que les coordonnées de la deuxième couche sont recalculées à chaque image. Pour chaque sommet de l'objet, la coordonnée de la deuxième texture dépend de l'angle formé par le vecteur normal au sommet et le vecteur de la lumière. Si l'angle vaut 180°, alors le sommet est éclairé par un rayon venant de face, donc on placera la coordonnée de texture pour ce sommet sur un niveau de gris maximal : blanc (donc transparent). Si l'angle vaut 90° alors la lumière est 'rasante', sans effet sur l'objet, on placera donc la coordonnée de texture sur du noir. Entre ces deux extrêmes apparaissent alors les différents niveaux de gris produisant l'effet d'ombre seuillée.
Exemple de texture utilisée pour créer les ombres.
Cette méthode utilise une texture à plusieurs niveaux, ce qui suppose la présence sur la carte graphique d'une extension adaptée (comme GL_ARB_multitexture en OpenGL). Il est possible de contourner cette extension en affichant l'objet en deux étapes : d'abord l'objet avec sa texture, puis le même objet mais uniquement avec la texture des niveaux de gris (semi-transparente). L'inconvénient est que la division en deux passes augmente le temps de calcul.

### Utilisation des pixel shaders

Sur les cartes graphiques récentes et suffisamment puissantes, les pixel shaders peuvent être utilisés pour l'ombrage de celluloïd. Si leur utilisation libère le CPU de certains calculs (voir méthodes précédentes), elle est cependant gourmande en ressource GPU. En effet, le seuillage et le tracé des contours nécessite des calculs pour chaque pixel de l'image, alors que les méthodes sans shaders travaillent uniquement sur les sommets de l'objet, beaucoup moins nombreux. Le seuillage des ombres est réalisé par un fragment shader. La luminosité de chaque fragment (pixel) dépend de l'angle entre la lumière et la normale au point considéré.

## Jeux caractéristiques

* 2000 : Jet Set Radio, Fear Effect, Fur Fighters
* 2001 : Fear Effect 2: Retro Helix, Atlantide, l'empire perdu
* 2002 : Auto Modellista, Taz Wanted, Cel Damage
* 2003 : Dark Chronicle, Jet Set Radio Future, The Legend of Zelda: The Wind Waker, XIII, Zone of the Enders: The 2nd Runner, The Simpsons: Hit and Run, Dragon Ball Z: Budokai (version GameCube), Dragon Ball Z: Budokai 2, Runaway: A Road Adventure, Drake of the 99 Dragons
* 2004 : Tales of Symphonia, Viewtiful Joe, Viewtiful Joe 2, Warsow (projet Open Source), Dragon Ball Z: Budokai 3 , Jackie Chan Adventures
* 2005 : Killer7, Tony Hawk's American Sk8land, Sly 3, Dragon Ball Z: Budokai Tenkaichi, Naruto: Gekitō Ninja Taisen! 4, Metal Gear Acid 2 (version PSP)
* 2006 : Digimon Savers: Another Mission, Dragon Quest VIII, Ōkami, Sensible Soccer 2006, Dragon Ball Z: Budokai Tenkaichi 2
* 2007 : Crackdown, Les Simpson, le jeu, Naruto: Rise of a Ninja, Dragon Ball Z: Budokai Tenkaichi 3, Zack et Wiki : le Trésor de Barbaros, The Legend of Zelda: Phantom Hourglass
* 2008 : Tales of Vesperia, No More Heroes, Street Gears, Naruto: The Broken Bond, Prince of Persia
* 2009 : The Legend of Zelda: Spirit Tracks, Tales of Graces
* 2010 : Alice au pays des merveilles (version DS), Dragon Quest IX : Les Sentinelles du firmament, Tales of Graces f, Ni no Kuni
* 2011 : Tales of Xillia
* 2012 : Gravity Rush, The Walking Dead
* 2013 : Call of Juarez: Gunslinger, The Wolf Among Us
* 2017 : The Legend of Zelda: Breath of the Wild, Rime (jeu vidéo), Fortnite : Battle royale
* 2020 : Hyrule Warriors : L'Ère du Fléau.
* 2023 : Hi-Fi Rush, The Legend of Zelda: Tears of the Kingdom.
* 2024 : Fallen Aces

## Films

* 2002 : Spirit, l'étalon des plaines
* 2004 : Appleseed
* 2006 : A Scanner Darkly
* 2017 : Lou et l'Île aux sirènes
* 2020 : Altered Carbon: Resleeved

## Séries télévisées

* 1991-1992 : Super Baloo
* 1997 : Les Canards de l'exploit
* 1999-2000 : Télétoon Advance
* 2001-2002 : Pecola
* 2001 : Molly, Star-Racer
* 2002-2003 : Les Vacances de Piwi
* 2002-en production : One Piece
* 2002-en production : Pokémon, la série
* 2003-2006 : Boo!
* 2003-2004 : Midnight Horror School
* 2006 : Ōban, Star-Racers
* 2006-2013 : Manny et ses outils
* 2006-2007 : Z-Squad
* 2009-en production : Pretty Cure
* 2009-2010 : Bunny Maloney
* 2010-2011 : J'apprends la langue des signes avec Bali