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)…