[accueil]
[mail]

LINKS

GameDev






Demo



Scena: Design et architecture

Classes

Voici une (petite) partie de la hiérarchie de classes:

Instanciation

Scena dispose d'un mécanisme d'instanciation qui permet de partager des données entre plusieurs duplicats d'un même objet. Ainsi, comme dans 3DS Max, les multiples instances d'un même Mesh partageront une même géométrie (les même Index et Vertex Buffers par exemple), mais avec une Frame parente et des propriétés de rendu différentes.

Hierarchie de Frames

Les objets de la classe Frame permettent de positionner les autres objets dans l'espace. Il s'agit en fait de simples repères. Un objet Frame contient trois matrices: une matrice de transformation locale (LTM), une matrice de transformation du monde (WTM), et une matrice de vue en espace camera (VTM). Le calcul de ces matrices se fait de façon récursive en suivant la hierarchie de Frames jusqu'à la racine. De plus, ce calcul est effectué par évaluation paresseuse (quand il est nécessaire uniquement).

Animation

Le mécanisme d'animation de Scena est fortement inspiré du concept de "Controller" de 3DS Max. Ainsi, il est possible d'associer des fonctions du temps à certains champs de certains objets. Il est par exemple possible de modifier en fonction du temps la matrice de transformation locale d'une Frame (pour déplacer un objet) ou encore de faire varier la couleur ou le rayon d'une lumière en fonction du temps (pour accompagner une explosion par exemple).

Spatialisation

Le terme spatialisation, désigne l'organisation spatiale des objets graphiques permettant d'effectuer rapidement (càd non linéairement) les opérations de culling de scène.

La gestion de la spatialisation est abstraite du point de vue du coeur du moteur. En effet, une classe abstraite SpatialStructure sert d'interface aux structures spatiales. Définir une structure spatiale passe par l'implémentation des opérations d'insertion et de suppression de Renderable, ainsi que des opérations d'intersection avec un Frustum(celui d'une camera ou une lumière), avec une sphère et avec une OBB.

Il est alors possible d'utiliser différentes structures comme des Kd-Tree, des octree, des systèmes par portails, etc...

Indépendance vis-à-vis de la plate-forme

L'indépendance vis-à-vis de la plate-forme est garantie par le caractère abstrait de certaines classes (Renderer, RenderTarget) qui disposent d'une implémentation concrète par plate-forme (par exemple D3DRenderer, D3DRenderTarget). Par ailleurs le design pattern Bridge est utilisé dans plusieurs cas pour ne pas faire interférer les deux axes de spécialisation (spécialisation de la plate-forme et spécialisation du comportement). C'est le cas des classes Mesh et Texture qui utilisent les classes MeshImpl et TextureImpl.

Renderer et Render State management

Les RenderState sont des objets encapsulant les informations décrivant l'état dans lequel doit être le Renderer avant d'effectuer le rendu d'un Renderable. L'intérêt des RenderState est l'ordre(total) qu'il est possible de définir sur l'ensemble de ces états. Il est alors possible de trier les Renderable d'après leur RenderState, afin de minimiser les coûts de changement d'état lors du rendu de la scène.

Sauvegarde / lecture sur disque

Les Packages sont des conteneurs de meshes, lumières, cameras, controllers d'animation, matériaux, etc... Les Packages peuvent être utilisés pour stocker tout une scène, ou un ensemble cohérent de ressources (un véhicule dans un jeu par exemple). Les Packages sont directement enregistrables et lisibles sur le disque via les fichiers .pkg.

Export Max

Un plugin pour Flexporter (l'excellent plugin Max d'export développé par Pierre Terdiman) permet d'exporter des fichiers packages (.pkg) depuis 3DS Max 3 et 4.

Explorer

Package Explorer est l'outil permettant de visualiser les scènes contenues dans un fichier package et d'explorer l'arborescence de données de ce package.

Il permettra prochainement l'édition du contenu d'un Package.

D3D8: Vertex Shaders

 

D3D8: Vertex et Index Buffers