lundi 25 février 2013

Semaine 03 - The Traveller


Voici le Fake Game Footage de
The Traveller ! 



Rappel des contraintes : 

Monde médiéval
Poursuite (un poursuivi et un poursuivant)
3 semaines
9 étudiants du Centre NAD


Histoire

Le personnage principal est un explorateur venu du futur. À cause d'un voyage spatio-temporel qui tourne mal, il se fait téléporter au Moyen-Âge avec ses gadgets futuristes.
Le prenant tous pour un démon-sorcier-extraterrestre, les gardes de la ville se lancent à sa poursuite. En plus d'eux, un sorcier mystérieux se met au travers de son chemin et modifie le path devant lui. 
Grâce à sa guide digitale qui l'aide, le protagoniste doit s'échapper de ses ennemis et se rendre jusqu'au prochain portail inter-temporel pour retourner dans son temps. 


dimanche 24 février 2013

Semaine 03 - Livrable

Fin de semaine chargée, avec plusieurs problèmes survenus au dernier moment.
Heureusement, ils ont pu être pour la plupart réglés !
Et bien sûr, beaucoup de Kismet de fait...


Kismet total du projet : 
Le Kismet est divisé dans les 3 mondes. 
Il est partout pareil car chaque monde possède un blocking commun, 
seul le Level Art changeait.  
À gauche, les téléportes des 3 mondes.

Kismet total du projet mis en séquences :
Pour cette contrainte, nous avons pu utilisé la fonction de séquence,
qui permet une meilleure organisation du Kismet.
Chaque séquence est relié à son monde.

Kismet d'un obstacle :
Voici l'organisation du Kismet pour un obstacle.
Il permet de faire apparaître un SkeletalMeshMat qui jouera la Matinee à la place du pawn. 
Le Teleport permet à notre pawn de réapparaître à l'endroit indiqué, soit après l'obstacle.
La Matinee des gardes est reliée juste au 1er obstacle car ils ont juste un path défini dedans qui leur sert pour tout le Monde. 

Kismet d'un Event :
Le Kismet d'Event est relié aux apparitions du Wizard.
Il fonctionne de la même manière que les autres mais il possède des particules rattachées à lui qui apparaissent/disparaissent en même temps que lui.
On relie aussi à son apparition le mesh qui lui sert d'obstacle contre le joueur. Le mesh à lui aussi des particules associées à son apparition.

Vue dans UDK du pawn face à un obstacle que le Wizard à lancé :
Le pawn présent dans le screen est le SkeletalMeshMAT qui joue la Matinee de monter sur le pont (on voit le triggerVolumeTouch proche de lui). La fumée signale un obstacle qui est apparu à cause du Wizard. Ce dernier est sur le pont, avec ses particules vertes reliées à son apparition.
Sur le pont, un PathNode (une pomme) qui sert de destination au pawn après la Matinee. 
Level Art par Jérémie Valérius

Vue dans UDK d'un autre obstacle/event : 
Encore une fois, le SkeletalMeshMAT à côté du TriggerVolumeTouch,, les particules de fumée à côté de l'obstacle et le Wizard et ses particules. 
Level Art par Jérémie Valérius

Les vues dans UDK des 3 Mondes, déplacés pour éviter les problèmes de Sky-Dômes qui s'inter-pénétraient entre eux ainsi que l'éclairage qui affectaient tous les Mondes : 

_______________________________

Info ancienne


L'intégration du pawn dans la scène :
Nécessite son intégration dans les scripts mais aussi un AnimTree fonctionnel !

AnimTree du Runner

Le Pawn intégré


lundi 18 février 2013

Semaine 02 - Kismet

Cette semaine, nous avons surtout laissé les modeleurs et animateurs remplir leurs objectifs, afin d'avoir de quoi à assigner à notre Kismet.
Néanmoins, il manque encore des choses essentielles au Path du joueur, comme les obstacles, qu'il va falloir communiquer Lundi au reste de l'équipe.
Du coup, nous avons surtout créer du "Kismet-Placeholder", pour palier au manque du personnage (Monsieur UDK est donc toujours présent), des "fausses" Matinee qui seront remplacées par les Matinee avec les animations des animateurs, etc.
Mais nous avons réussi la Téléportation !


Un screen du Kismet de la téléportation, afin de comprendre 
comment nous avons construit le reste : 
La façon dont fonctionne la téléportation est qu'une fois rendu à la fin d'une première scène de Level Art, appeler Monde, nous faisons rentrer notre joueur dans un téléporte qui a une destination. Pour le lui assigner, nous avons donc créer un deuxième PlayerStart à l'endroit où nous voulions que le joueur réapparaisse. 

Ainsi, lorsque le joueur arrive sur le cercle à la fin d'un monde (cue visuel), il appuie sur E (relié au TriggerUsed) et il est temporairement caché durant sa téléportation puis Unhide lorsqu'il réapparaît à l'endroit du PlayerStart relié au Teleport. 

Visuel : 

Chaque monde à sa téléportation : 
Afin de créer une boucle infinie, à la fin du 3e Monde, 
la téléportation nous ramène au premier Monde. 

Pour permettre à la téléportation de fonctionner, il nous fallait les 3 Mondes à la suite : 

Cette décision apporte malgré tout quelques problèmes, comme du fog qui maintenant se propage dans chaque Monde. Nous espérons qu'avec des Volumes de Post-Process, les Environnement Artistes sauront régler cela. 

Nous avions déjà créés les TriggerVolumes ainsi que les TriggerUsed dans le 1er Monde, donc il a juste fallu les dupliquer dans les autres mondes et les réassigner dans le Kismet.
Le Kismet total des Mondes : 

En détail, voici le Kismet-Placeholder des obstacles : 
Le Kismet à droite s'active si le joueur appui sur E, ce qui lancera l'animation de sauter/grimper.
Un node Draw Text à été mis afin de savoir que le Trigger fonctionne en attendant l'animation, qui ira se mettre dans la Matinee. 
À gauche, le Kismet relié à l'apparition et à l'animation du Wizard (Lézard).


Screens des obstacles. 
On voit l'obstacle en blocking, le TriggerUsed et le TriggerVolume pour le Wizard.
Jump

Monter

Slider

Apparition du Wizard 

Les TriggerVolumes ont été utilisés principalement pour l'apparition/disparition du Wizard
Lorsque le joueur rentre dans le Trigger, le Wizard apparaît et son animation se lance (il envoi un sort qui créer un obstacle devant le joueur) puis lorsqu'elle a fini, le SkeletalMesh du Wizard disparaît. 
Un node Draw Text est utilisé ici pour s'assurer que le Trigger fonctionne en attendant d'avoir l'animation.

Les TriggerUsed sont utilisés pour les obstacles. Lorsque le joueur appui sur E, l'animation de saut/grimpe/slide se lance. 
Si nous faisions un jouable, l'on pourrait insérer une variable qui dirait, si le joueur appui, l'animation de saut se lance, s'il n'appuie pas, une animation de fail se lance. Mais dans le cas où nous faisons de nouveau un Fake Game, nous n'avons pas insérer cette variable et avons continuer le Kismet. 
Un node Draw Text est encore utilisé pour s'assurer du bon fonctionnement du Trigger.

__________________________

Encore une fois pour cette contrainte, la communication ne passe pas comme il le faudrait.
Même si nous donnons un blocking avec la caméra de faite et Monsieur UDK d'intégrer, les Environnement Artistes ne TEST PAS leurs maps car à chaque fois que nous cachons le blocking pour jouer dans leurs scènes, il y a un problème de collisions (inexistante ou alors faite de travers : pas de collision sur le sol du pont, mais sur les rembardes...).
Pour le blocking, il est normal qu'un Level Designer mette des collisions pour tester ses maps, mais il n'a pas à faire les collisions des modeleurs. Or, nous avons fait les principales collisions nous-même pour pouvoir avoir un jouable lundi !

Un point qui est important aussi dans une contrainte comme celle-ci, est de respecter la seule Contrainte, qui est de faire une Poursuite.
Pour cela, nous avons créer un Path, avec des obstacles, et les Environnements Artistes devraient, en plus de faire quelque de chose de beau et qui leur tiens à coeur, respecter en premier cela.
C'est-à-dire, modéliser les obstacles ! Rendu à la 2e semaine, nous n'avons toujours pas d'obstacles de fait, et ce pour chaque map !

Ensuite, nous nous rendons compte que la communication entre Animateurs et Environnements Artistes ne se fait pas forcément bien : nous avons des ponts sans rambardes et des ponts avec, mais les animateurs ne sont au courant que d'un type, et font donc qu'une animation de monter sur un pont...


dimanche 10 février 2013

Semaine 01 - Perforce

Pour cette contrainte, nous avons décidé d'utiliser Perforce.
D'abord pour éviter le plus possible de perdre du travail, ensuite pour apprendre à l'utiliser correctement.

Comme certaines personnes n'étaient pas très à l'aise avec Perforce, j'ai fait un petit tutoriel de comment l'ouvrir pour notre contrainte.
Je précise "pour notre contrainte" car, grâce à Simon Therrien, j'ai moi-même appris comment bien faire les paramètres pour relié l'arborescence du Perforce à nos dossiers.

La vidéo explicative de Perforce pour cette Contrainte 02 de l'équipe


Explications de comment rélié l'arborescence Perforce à nos dossiers : 

Il y a plusieurs façons d'ouvrir Perforce. 


L'une des façons, que j'utilisais souvent est d'ouvrir le Perforce et faire un New Workspace... 







Ensuite, faire "Exclude Tree" les dossiers que l'on ne veut pas, "Include Tree" les dossiers désirés, cocher Clobber dans le Advanced, et surtout refaire le Workspace root pour placer le dossier inclut au bon endroit. 
Il n'y a plus qu'à faire Ok, ce qui va ouvrir le Perforce, mapper le dossier dans notre ordinateur et l'on peut se mettre à travailler dessus, en Check-out puis Submit.















Pour cette Contrainte, nous allons procédé autrement. 
D'abord, ouvrir le Perforce mais ne pas créer de Workspace tout de suite...







Dans Perforce, dans l'onglet Workspace à droite (si il n'est pas présent, aller dans View -> Workspace (ctrl+5)
Dans la liste des workspace (par défaut celui de l'utilisateur de Perforce actuel), faire un clic droit : New Workspace... 









Cela va ouvrir une nouvelle fenêtre, la même que lorsqu'on map un dossier. Mais c'est ici que nous allons faire les liens entre Perforce et le C:UDK. 
C'est un travail un peu minutieux, car il ne faut pas se tromper dans le root, sinon Perforce n'ira pas mettre les dossiers aux bons endroits.
En "simple", il faut refaire le chemin :
(C:\UDK\UDK-2012-10\UDKGame\Content\EquipeA_Contrainte02_Chase\...) et le placer ainsi dans l'arborescence de Perforce, mais seulement jusqu'à un certain point... Il faut quand même garder le début du Root :
(//N°del'Ordinateur/UDKGame/Content/EquipeA_Contrainte02_Chase/...).
C'est un peu compliqué à expliquer, mais voici un visuel un peu plus clair : 
De cette manière, et ce pour toute l'équipe, il n'y a plus qu'à suivre le tutoriel vidéo : ouvrir le Perforce sans créer de Workspace, chercher un owner (dans ce cas-là, HRaguin pour trouver le Workspace EquipeA_Contrainte02_Chase_GABARIT), clic droit sur le Workspace souhaité, faire Create/Udpate from "...", remettre un bon Workspace Root, cocher Clobber dans Advanced et c'est bon ! 

Il ne reste plus qu'à faire un check-out sur le level et package souhaité, puis faire un submit après la session de travail finie ! 


Semaine 01 - Blocking

Début du blocking dans UDK.


Nous rencontrons des problèmes de tailles lors de l'import-export. Même si toutes les mesures ont été prises dans 3Ds Max avant l'import dans UDK (en fonction de la taille réelle des bâtiments dans la vie réelle etc), lorsqu'un Environnement artiste importe le blocking UDK dans 3Ds Max, celui-ci est 3 fois plus petit...
Nous espérons trouver la solution bientôt afin de ne pas perdre trop de temps là-dessus et vite commencer le Kismet.


Vue de Top en haut et Perspective en bas. 


Vues du blocking dans 3Ds Max 


Vue de Top

Vue de 3/4

Vue de côté


En rappel, nous devions faire 3 paliers de hauteurs dans le Path. 
Le palier où commence le joueur est le 1er palier, ensuite vient le passage sur le pont qui est notre 2e palier, puis le passage sous le deuxième pont est notre 3e palier



Semaine 01 - Concepts

Game Design

Le personnage principal est un explorateur venu du futur. À cause d'un voyage spatio-temporel qui tourne mal, il se fait téléporter au Moyen-Âge avec ses gadgets futuristes.
Le prenant tous pour un démon-sorcier-extraterrestre, les gardes de la ville se lancent à sa poursuite. En plus d'eux, un sorcier mystérieux se met au travers de son chemin et modifie le path devant lui. 
Grâce à sa guide digitale qui l'aide, le protagoniste doit s'échapper de ses ennemis et se rendre jusqu'au prochain portail inter-temporel pour retourner dans son temps. 

Personnages :
• Personnage principal
• Guide digital (AI)
• Sorcier
• Gardes

Concepts

Première étape, concepts du Path sur papier !
C'est plus facile d'avoir une idée tout de suite et de recommencer plusieurs fois que de commencer direct dans UDK.


Une fois l'avoir présenté au reste de l'équipe et validation, alors on peut commencer le blocking en Max et se faire de nouveau une meilleure idée assez rapidement. Cela permet de vérifier les tailles humain vs architecture et le temps approximatif du patth.


Vue de Top du concept dans 3Ds Max
Pour plus de facilité, on a transformé le petit passage en serpent de la fin en un passage sous un pont. Cela permet de respecter la contrainte des 3 paliers (voir à la fin du post) tout en facilitant le travail de la caméra et les animations des personnages.

Master Tailles
Le "Master Tailles" qui défini la taille de notre personnage principal vs l'architecture. 
Cela sert aussi bien pour les LD (pour construire le niveau), que pour les modeleurs (taille du personnage, taille de l'architecture), que pour les animateurs (hauteur d'un saut, etc). 


Semaine 01 - Contrainte 02 - Chase !

Nous voici en Contrainte 02.

Il faut faire un jeu de Poursuite, qui s'étale sur 150m (environ 30sec).
Il doit y avoir le protagoniste (celui qui court !) et des poursuivants ainsi que 2 éléments interactifs qui viennent nuire au joueur.

En tant que Level Designers, nous devons imaginer un path d'une longueur de 150m, qui soit intéressant et intuitif (le joueur doit savoir où aller - sinon utiliser des Cues Visuels) et permette une poursuite.
Nos contraintes sont :
 Faire le greybox pour nos levels artistes,
 Inclure un saut par dessus un obstacle de taille moyenne,
 Inclure un saut pour atteindre un palier supérieur,
 Inclure une descente / saut pour atteindre un palier inférieur,
 Inclure une courte ou longue glissade,
 Faire le Kismet pour les Matinees des événements intéractifs en collaboration avec les animateurs.

Les objectifs/contraintes en détails sont plus bas dans le post. 

Temps : 3 semaines
Équipe : 9 étudiants

Équipe 


Level Design
Hélène Raguin Bragance

Animation 

Modélisation de personnage 

Modélisation d'environnement




Objectifs du projet : 
Développer la capacité de s’adapter face à un contexte où le temps est restreint pour une charge de travail considérable. Apprendre à prioriser son temps et aller à l’essentiel.

Direction artistique : 
Le niveau de jeu à produire sera basé sur un univers du temps médiéval.

Direction créative : 


Faire une poursuite impliquant 2 personnes dans laquelle se retrouveront 2 événements interactifs qui auront une influence sur le chemin du joueur.
La course doit se faire à une vitesse standard, soit d’environ 5 m/sec. Chaque artiste d’environnement aura son propre niveau dans lequel nous pourront jouer la séquence mise en place par les Level designers, animateurs et modeleurs de personnages.


Description :

La deuxième contrainte consiste à produire un niveau de jeu complet en surmontant des restrictions de temps précises, propres aux différents champs de spécialisation ou métiers, telles que rencontrées dans l’industrie du jeu vidéo actuellement. Pour ce faire, la direction artistique sera la même pour tout le monde tout au long du projet. En équipe, vous devez créer un monde respectant les deux directions artistiques et créatives données.