Pensez à faire un dessin à l'encre, sans ombrage et toutes les lignes ayant le même poids - comme vous le voyez dans une bande dessinée comme Dilbert. Cela représente un monde tridimensionnel actif, mais les objets n'ont pas de textures, mais vous ne voyez pas non plus de triangles en mosaïque.
Pour un exemple, pensez à dessiner la surface de la lune. Les lignes que vous pourriez tracer seraient le long du bord supérieur des collines, jusqu'à l'endroit où elles atteignent le niveau général de la surface. Derrière ceux-là, vous feriez de même pour les plus grandes collines, au loin, et derrière cela ce qui était visible de l'horizon. Pour les cratères, vous pouvez dessiner un cercle proche pour le bord extérieur et partiellement masqué, un cercle pour le bord inférieur. Les rochers auraient une ligne autour du bord et le long des principaux bords visibles. Les astronautes auraient une ligne le long de leur bord extérieur et le long des principales caractéristiques de leur combinaison spatiale.
Je suis un programmeur expérimenté mais nouveau dans la programmation 3D. Je ne peux pas penser à un jeu qui ressemble à ça - a-t-il été fait? Et comment le ferait-on? Deux problèmes me viennent à l'esprit - trouver les bords significatifs et les dessiner. Aurait-il besoin d'un "moteur" codé à partir de matrices, basé sur des lignes, plutôt que d'un moteur 3D classique?
Réponses:
Fondamentalement, ce dont vous parlez est la recherche de bord, et il existe un certain nombre de jeux qui le font, de différentes manières.
Le premier était probablement Jet Set Radio (sorti en occident sous le nom de "Jet Grind Radio"). Sorti seulement un mois ou deux après, c'était le jeu pour lequel j'avais développé une technique de rendu similaire: Looney Tunes: Space Race . (Sur Space Race, nous avons fait de notre mieux pour maintenir une épaisseur de ligne uniforme, tandis que Jet Set Radio a fait des largeurs de ligne inégales une grande partie de son style visuel).
Ces deux jeux ont fonctionné de la même manière; pour chaque objet à dessiner, dessinez-le deux fois. Tout d'abord, rendez-le avec le backfacing inversé, avec une poussée de sommet appliquée (c'est-à-dire, déplacez chaque sommet d'une certaine distance le long de son vecteur normal), et dans la couleur que vous voulez que les `` lignes '' semblent être. Puis dessinez à nouveau, sans pousser le sommet et avec un dos normal. Cette paire d'opérations vous donne une silhouette colorée entourant un objet, et c'est tout ce que ces deux premiers jeux ont utilisé. Dans Space Race, j'ai maintenu l'illusion d'une largeur de ligne constante en poussant les sommets à une distance variable, en fonction de la distance entre l'objet et la caméra. Dans Jet Set Radio, ils ne l'ont pas fait (ce qui a conduit à des lignes plus grandes ou plus petites, à mesure que les objets se rapprochaient ou s'éloignaient de la caméra)
NVidia et ATI ont plusieurs démos d'autres façons d'obtenir cet effet, tournant principalement autour de pixel shaders à la recherche de normales perpendiculaires au vecteur caméra à pixel pour chaque pixel, mais elles nécessitent toutes des maillages à très haute résolution et produisent des incohérences largeurs de lignes en pratique. Je ne sais pas si des jeux utilisent réellement ce type d'approche; Je ne pense pas en avoir vu qui ressemblent aux échantillons de ces sociétés.
Je vous montrerai également Dragon's Lair 3D , qui est le seul jeu que je connaisse qui semble vraiment le faire correctement; prendre le produit scalaire de la caméra vers le polygone et la normale du polygone pour chaque polygone dans un modèle pour voir si chaque polygone est tourné vers ou loin de la caméra, puis vérifier toutes les paires de polygones connectés; si une paire de polygones partage un bord et qu'un polygone fait face à la caméra et qu'un polygone ne le fait pas, alors il trace une ligne mince de largeur constante le long de ce bord dans l'espace d'écran. (Je ne pouvais pas faire ce travail assez rapidement sur le Dreamcast for Space Race, ou je l'aurais utilisé. Aujourd'hui, sur les ordinateurs modernes, c'est totalement ainsi que j'essaierais de faire cet effet, même s'il est ''
Dragon's Lair 3D est également le seul jeu à ma connaissance qui dessine réellement des lignes entre des zones de couleur différente ou à des discontinuités normales au sommet, même s'il n'y a pas de bord de silhouette pour qu'il y trouve. Je soupçonne qu'ils avaient un outil personnalisé qui permettait à leurs artistes de nommer des arêtes de polygone pour toujours recevoir une ligne.
Okami , qui a été mentionné par d'autres personnes, semble utiliser une approche de poussée de vertex à double rendu, similaire à Jet Set Radio et Space Race, mais utilise également des textures qui ont été construites en utilisant un style artistique brossé. (Les collines au loin, par exemple, sont dessinées comme des coups de pinceau dans une texture qui est dessinée comme un quadrilatère standard). Okami est charmant, mais je ne pense pas que cela touche vraiment la technologie dont vous parlez; certainement, il utilise l'ancienne approche pour son effet.
Maintenant, dans votre cas, vous demandez de le faire sans remplissage de couleur, en dessinant simplement le monde avec des lignes uniquement. C'est facile à faire; dessinez simplement tous les polygones sans éclairage et dans une seule couleur constante qui correspond à la couleur d'arrière-plan. Chacune de ces approches devrait fonctionner en utilisant cette approche sans changer votre moteur de jeu. Il est important de dessiner ces polygones "de la même couleur que l'arrière-plan", car ils empêcheront les bords de l'arrière-plan de passer à travers les objets de premier plan, ce qui pourrait devenir très rapidement déroutant.
la source
Vous parlez de rendu non photoréaliste (alias NPR). Dans un jeu 3D en temps réel qui se fait à l'aide de shaders fragment / pixel.
Faites défiler ici pour voir quelques exemples: http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html
la source