Faire un niveau de jeu type Sybéria (Partie Visuelle uniquement).

Transcription

Faire un niveau de jeu type Sybéria (Partie Visuelle uniquement).
Présentation du tutoriel
Ce tutoriel essaiera d’expliquer une manière de réaliser un niveau (Partie visuelle)
d’un jeu type Sybéria. Il se décompose en plusieurs parties : La première concerne la création
du niveau sous 3DS Max puis son export sous Virtools. Une plus large explication sur la
technique du Prerendered background sous Virtools sera le coeur de la seconde partie. Nous
conclurons sur les évolutions futures possibles
Le principe d’un jeu comme Sybéria est de faire évoluer un personnage dans un
environnement 3D précalculé. L’environnement est déjà calculé ce qui fait que les
mouvements de caméra semblent impossibles (et surtout très inutiles). Nous allons tenté de
reproduire un niveau purement visuel (Ce tutoriel ne présentera pas la gestion des actions du
personnage, l’inventaire, ni même la création proprement dite d’un personnage), ce qui
représente déjà pas mal de problèmes.
Le niveau en question
Création sous 3DS Max
Tout commence par la création de l’environnement sous 3DS. Ici, tout est permis, tant
en terme de polygones que de lourdeur de textures. Voici donc le niveau qui servira de base
d’environnement. Notre caméra se situe au premier plan, et nous n’avons modélisé que les
éléments nécessaires de manière à combler l’environnement.
Capture écran du niveau sous 3DS
Par la suite, nous devons créer des blocs de collisions. Ces blocs de collisions sont des
objets très simple (boite ou cylindre) permettant un plus grand réalisme dans le déplacement
de notre personnage. L’image suivante présente les collisions créées :
Capture écran des blocs de collisions sous 3DS
Lorsque le niveau sous 3DS est
complété, il faut produire le rendu à partir
de la caméra.
Vient ensuite sous Virtools. Pour
cela, il faut exporter les éléments
suivants :
•
•
•
•
Les collisions
La caméra
Le sol
Le personnage (si
disponible)
Capture écran de la vue de caméra sous 3DS
N’arrêtez pas 3DS Max, nous allons y revenir très vite.
L’importation du niveau
Le fichier nmo s’intègre comme tous les autres fichiers nmo, par importation de celui-ci
dans la composition. Le setup de la composition doit être le suivant :
•
•
•
•
•
L’objet sol doit avoir un attribut floor
Les collisions doivent être invisibles et placées dans un groupe.
La caméra active doit être celle qui a servie au rendu.
La caméra active doit avoir un « Set IC » pour éviter ses déplacements.
L’arrière plan de la composition doit afficher le rendu calculé sous 3DS.
Pour afficher une image en arrière plan, créez une 2D frame, puis configurez ses
paramètres ainsi (Le matériau appliqué à comme texture l’image rendue) :
Configuration de l’arrière plan
Nous avons pour le moment, notre caméra et notre fond. Notre sol est déclaré en floor,
ce qui fait que si nous importons un personnage tout fait dans notre composition (tel que
Pierre par exemple) il pourra se déplacer sur le sol. De plus, sachant que nous utilisons la
caméra qui sert au rendu affiché en arrière plan, la perspective de Pierre sera la même que
celle de l’image, ce qui fait que le l’impression de déplacement dans l’environnement 3D sera
déjà très réaliste. Revenons un peu sur la technique du prerendered background
Théorie sur l’utilisation des prerendered background
La technique du « prerendered background » consiste a plaqué une image en arrière
plan, image qui constituera notre scène. Notre personnage évoluera entre la camera et la
projection de l’image. Par convention, nous devons placer notre image de fond aussi loin que
possible, et derrière tous les autres objets. Pour ce faire, nous devrons placé un sprite 2D de la
taille de la fenêtre de jeu et de spécifier son attribut d’arrière plan. La question de l’occlusion
se pose donc. Comment faire en sorte que le personnage passe derrière un objet du décor
sachant que ce même décor est placé obligatoirement derrière lui ?
Utilisation des objets.
La première réponse que nous pouvons apporté a cette question est l’utilisation du « Z
buffer » sous Virtools, connu aussi sous 3D Studio Max en tant que matériau portant le nom
« Mat/Ombre ». Cette technique d’utilisation consiste a placé un objet à faible polygonisation
à l’endroit exact (donc en 3D) ou se situe l’objet en réalité sur notre scène. Le résultat est le
suivant, nous avons notre point de vue caméra, notre arrière plan, notre personnage qui se
situe entre ces deux objets, et notre objet à faible polygonisation, qui lui aussi se trouve entre
la caméra et l’arrière plan. Lorsque le personnage passe devant l’objet, il reste visible, et
lorsque celui-ci passe derrière il est caché. Il reste encore un problème. En effet, nous avons
placé un objet qui sert d’occlusion, mais lui est visible, ce qui cache notre arrière plan. Il faut
donc rendre cet objet non pas invisible, mais transparent, sans pour autant qu’il laisse notre
personnage visible lorsque ce dernier est derrière lui. Cela peut sembler compliqué et surtout
impossible, mais Virtools permet cela (tout comme 3DS Max). En utilisant le building Block
« Use Z Information », le matériau associé à l’ « occulteur » sera une projection de l’arrière
plan. L’objet ne sera ni transparent ni invisible, mais projettera une image identique à la zone
de l’arrière plan qu’il cache. Au final, notre personnage passera derrière un élément du décor
alors que ce décor est projeté en arrière plan.
Voici un schéma présentant la hiérarchie au niveau « Z buffer » dans notre application
(cette image présente un niveau plus avancé avec gestion des liens cliquables, des
mouvements par clics et affichage de l’inventaire):
Hiérarchie au niveau « Z buffer »
Utilisation du « Screen mapping »
Nous avons ici une technique qui semble fonctionner pour un grand nombre de cas.
Cependant, comment faire lorsque l’objet ne peut être un objet a faible polygonisation.
Imaginons le fameux cas ou le personnage passe derrière un arbre au feuillage complexe. Il
est impossible d’utiliser la technique de l’occlusion par les objets car l’objet en question
représenterait un arbre, ce qui serait vraiment trop volumineux pour être affiché en temps réel.
Pour répondre à cette question, nous devons étudier notre scène.
Le rendu
Dans cet exemple, nous voyons quatre arbres complets, et un dont on ne distingue que
le feuillage. Nous réaliser les occlusions de ces arbres, il faut procéder ainsi ; Tout d’abord,
nous devons produire le rendu des arbres seul, les uns après les autres, et surtout produire les
couche alpha de ces arbres. Pour le premier arbre complètement visible, cela donne deux
fichiers, dont l’alpha correspond à celui-ci:
La couche alpha pour notre arbre
Pour calculer une telle image, il faut retourner dans 3DS Max puis faire le rendu en
mode sélection en ayant sélectionné l’arbre en question. Il est inutile de calculer l’image avec
l’éclairage, sachant que nous n’avons besoin que de la couche alpha. Pour l’obtenir, faites un
rendu en TGA ou bien ajouter un élément de rendu « Canal alpha » dans le menu rendu de
3DS.
L’image rendue de l’arbre seul ne nous sera pas utile. En effet, nous avons déjà la
texture réelle de l’arbre dans l’image d’arrière plan. Nous devons ensuite, exporter un plan
assez grand pour pouvoir accueillir les zones blanches de notre couche alpha. Ce plan doit
être placé à l’endroit exact où se situe l’arbre. Pour plus de facilité, il suffit de créer un plan
sous 3D Studio Max au niveau de l’arbre, et de l’exporter. De retour sous Virtools, il ne reste
que très peu de choses à faire. Tout d’abord, importer le plan en question. Il faut ensuite créer
son matériau. Ce matériau est composé de deux textures. Une texture diffuse, et le fichier
alpha calculé ; La texture diffuse, nous l’avons, car il s’agit de notre texture d’arrière plan.
Sous Virtools, la configuration du matériau est donc la suivante :
Configuration du matériau pour l’arbre
La texture doit être transparente, pour prendre en compte sa couche alpha. Nous lui
appliquons finalement la texture suivante :
La texture d’occlusion finale
Le résultat est le suivant. En appliquant la texture sur l’objet, nous obtenons un plan
« invisible » aux yeux du joueur, mais pourtant bien la, qui, projette la texture de l’arbre. Il
reste cependant un dernier problème à régler. Comment faire pour projeter une image sur un
plan, sachant que si nous voulons un affichage parfait, notre plan doit être perpendiculaire à
notre point de vue de caméra, ce qui est presque impossible à faire. Pour palier à ce problème,
nous utiliserons un mapping qui sert généralement très peu, il s’agit du « Screen mapping ».
Ce type de mapping permet l’affichage d’une texture sur un objet comme si c’était la
camera qui projeter l’image. C’est un peu le système de la salle de cinéma ; Le système
projette une image sur un plan. Dans le cinéma, le plan est perpendiculaire, ici, nous devons
pouvoir afficher notre image sur des plans quelconques. Pour ce faire, nous utiliserons le
building block « Screen Mapping BB » attaché à un script du niveau (« level script »)
(Attention, ce building block doit automatiquement se répéter, il faut donc le faire boucler en
branchant sa sortie sur son entrée)
Les paramètres sont les suivants : (Il suffit de choisir l’objet pour voir sa texture
s’afficher en « Screen mapping »)
Les paramètres du Screen mapping BB
Pour terminer la configuration de notre type de mapping, il faut enlever la correction
de perspective, sinon, l’orientation de notre plan affectera l’affichage de la texture.
Les settings du Screen mapping BB
A partir de ce moment, nous avons un objet qui fait occlusion lorsque le personnage
passe derrière, et cet objet simple (un plan, mais cela marche aussi avec une boite ou une
sphère) simule la présence d’objet très complexes (Arbres pour les cas les plus complexes à
mon sens)
Pour récapituler la technique du « Screen mapping » :
•
•
•
•
•
•
Calculer la couche alpha de l’objet d’occlusion
Exporter un plan ou un autre objet très simple sous Virtools aux coordonnées
exactes de l’objet d’origine (s’aider de 3D Studio Max)
Créer une texture avec pour diffuse l’image d’arrière plan, et pour couche
alpha, le fichier alpha calculé sous 3D Studio Max.
Créer un matériau transparent et lui appliquer la texture précédemment créée.
Créer un script bouclant sur le « Screen mapping BB » en affectant le bon objet
à ce Building block
Désactiver la correction de perspective dans la configuration du « Screen
mapping BB »
Il faut répéter cette opération pour chaque élément occulteur de notre composition.
Conclusion
Le principal désavantage, pour le moment, de cette technique est sa demande en
ressource en terme de textures, mais par le SDK de Virtools, il doit y avoir moyen d’utiliser la
même données diffuse, avec un canal alpha différent. Les évolutions sont principalement les
interactions du personnage avec le décor, ou même avec d’autres personnages, la possibilité
de mettre en place une petite application type Sybéria sur le net (Avec utilisation d’une base
de données)…

Documents pareils