Donc comme promis, un etit topo sur les méthodes utilisés par Apollo (2 ou 3 nouvelles screenshot sont disponible à la même
adresse http://trapamoosch.free.fr/apollo/screenshot ! (je suis assez fier du rendu de al ville, même si ça ne tourne qu´à
3fps sur mon Duron800 et ma Geforce2MX (sans octree pour le moment, avec antialiasing 4x et la dose de polygone : )
Le principe du cel shading est simpliste : on renderise avec un modèle lumineux minimaliste et il faut tracer la silhouette
des objets.
Je ne suis pas encore au code du modèle lumineux, mais la silhouette, c´est fini. Le principe est excessivement con :
- on prend tous les polygones backfacés (qui nous montrent leur dos)
- à chaque vertex, on ajoute k fois sa normal (k étant l´épaisseur de la silhouette). Ceci a pour effet d´agrandir les
polygones en fait
- on renderise tous ces polygones en noir (ou en une autre couleur si ça vous chante, voir en transparent, pkoi pas, faudrait
que j´essaye tien)
- ensuite, on renderise normalement les polygones non bakfacés et voila, on a notre objet avec une jolie silhouette.
Bien sur, faire ça "à la main" pourrait être très contraignant, j´ai choisi d´utiliser les Vertex Shader pour faire le boulot
à la volée, et ça marche très bien. Bien sur, le fait de devoir renderiser tous les polygones au final consomme pas mal de
temps CPU (même si les polygones de la silhouette sont renderisés sans texture et sans fioriture, ils prennent pas mal de
temps quand même). Ceci n´est pas trop trop un problème, les scènes de cartoon shading ne sont de toutes façons pas
spécialement prévues pour avoir la dose de polygone, et le fait d´avoir un éclairage par la suite minimaliste "rattrape" un
peu l´ensemble au niveau perf. En plus, Apollo n´est pas un moteur de jeux vidéos, il peut donc se permettre, dans une
certaine mesure, quelques largesses étant donnés qu´il n´y aura pas d´IA ni de moteur physique à faire tourner en même temps
(quoiqu´il y aura un moteur physique minimaliste, pour les paticules).
Voila pour les petites infos, je réfléchis encore au moyen d´implementer efficacement les lights (et oui, les Vertex Shader
sont statiques, et je ne peux pas avoir un nombre de light variable par objets, d´où le dilemme : quelques lights je dois
prendre par objet ? Les 2 plus proches ? Les 2 plus proches + une valeur ambiente définie par l´utilisateur... ayayaye, c´est
le bordel : p)
Dans un futur plus lointain, on implémentera les textures et, peut-être (j´aimerais bien), des ptits effets sympatoches,
comme des ombres portées dynamiques (qui rendent très sympa dans un moteur cartoon).
Cherchez sur le net pour les screenshots du jeu "Cel-damage", voila un pu le résultat que j´aimerais atteindre en terme de
rendu (y arrivera ? y arrivera pas ? Mystere : p)
Ce que je veux montrer aussi avec ce moteur, c´est deux choses :
1) Pas besoin de sortir de polytechnique pour faire un ptit moteur sympa. je n´ai aucun cursus en informatique, et je n´ai
jamais acheté (ni lu) un seul bouquin de C/C++... Seulement des tuts, des sources, et de la doc (surtout des sources en fait)
2) Pas besoin d´effets dans tous les sens pour avoir un style ! Apollo ne gèrera pas de bump-mapping, pas de perpixel
lighting (vous savez, le truc qui fait baver tout le monde dans Doom 3, sacré Carmack, il est fort lui, vraiment.), pas de
light dynamiques dans tous les sens... Mais je veux un moteur convivial, simple à utiliser pour les graphistes et qui donne
de bon résultat. C´est vrai quoi, si vous voulez un moteur vraiment photoréaliste, ben sortez dans la rue et promnez vous, ça
marche bien aussi (en plus vous avez les sons 3d et les oderus en prime, pour pas un rond, c´est bien non ? )
Voila voila, si vous avez d´autres questions, des remarques, je suis à l´écoute (entre deux séances de codes, bien sur)