architecture logicielle d’un jeu vidéo
DESCRIPTION
Architecture Logicielle d’un jeu vidéo. Steve Gury [email protected]. Agenda. 3D Engine Physic Engine Network Engine & plateforme serveur. Physic Engine. Game Engine. 3D Engine. Network Engine. Vue d’ensemble. Architecture simpliste d’un jeu moderne. Moteur 3D. Objectif: - PowerPoint PPT PresentationTRANSCRIPT
Architecture Logicielle d’un jeu vidéo
Steve [email protected]
Agenda 3D Engine Physic Engine Network Engine & plateforme serveur
Vue d’ensemble
Game Engine 3D EnginePhysic Engine
Network Engine
Architecture simpliste d’un jeu moderne
Moteur 3D Objectif:
Calculer une scène en 3D Visualiser cette scène sur un écran 2D
Interne: Gérer l’interaction avec le matériel efficacement Adapter l’api sous jacente au code du jeu
(Direct 3D / OpenGL)
Direct 3D Historique
DOS -> Hack de perf Windows -> Pas content MS dit: API rapide qui simplifie tout ça
Mode protégé / réel
Mémoire physique
Process 1 Process 2
Mode protégé / réel
Mémoire physique
Process 1 Process 2
Adressage virtuelle Adressage virtuelle
Mode protégé / réel Avantages:
Robustesse du système Debuging plus facile
Inconvénients Légère baisse de performances Plus difficile à écrire (ancien code non portable)
Direct 3D HAL
Hardware Abstraction Layer
API Nouvel API de plus haut niveau Simplification de l’écriture de code 3D
Architecture matérielle
CPU
BUS
GPU
RAM
VRAM
D’abord simple processeur d’affichage, le GPU devient dans les années 90 un co-processeur de calcul 3D. D’abord fixe, puis programmable
PCI Express
GPU programmable DirectX 5+
DirectX utilise le GPU pour certaines fonctions
DirectX 8+ Le programmeur peut définir des « shaders » qui
seront exécutés lors du rendu 2 types
Vertex Shader: agit sur les points Pixel Shader: agit sur les pixels (après rasterisation)
3D Pipeline
Input Assembler Rasterizer Output
MergerVertexshader
Pixelshader
Index Buffer
Vertex Buffer
Buffer
Texture
Buffer
Texture
Shaders Code compilé sur le CPU, exécuté sur le
GPU Historique:
Assembleur CG (nividia) HLSL (DirectX) et GLSL (OpenGL) CUDA, OpenCL
Utilisations dans des effets, éclairage…
Level of Details Performances liées au nombre de points à
afficher
Smooth C’est l’inverse du LoD, on ajoute des points
en subdivisant la surface
Ombre Shadow map
Shadow casting
Texture Pour définir de manière précise la couleur
d’un objet en différent endroit, on utilise une texture
Filtrage des textures On se trouve rarement dans le cas où un pixel affiché à
l’écran correspond à un seul pixel de la texture
Point voisin Filtrage linéaire Filtrage anisotropique
Filtrage des textures Filtrage anisotropique
Filtrage anisotropique
Anti-aliasing Crénelage du à la rastérisation
Inesthétique Crée une sorte de scintillement (arbre)
Mip mapping Pre calcul du re-échantillonnage des textures
Sélection de la texture idéale Interpolation entre les textures correspondantes
Agenda 3D Engine Physic Engine Network Engine & plateforme serveur
Moteur Physique Objectif:
Calculer la position et le déplacement des objets du monde
Calculer les interactions des objets entre eux
Interne: Intégrer numériquement des équations
physique Résoudre les collisions/intersections de volume
Intégration numérique Besoin de réalisme
Utilisation des équations différentielles physiques
ex (RFD): Besoin de résoudre ces équations
numériquement
extfam
Intégration numérique Différents algorithmes de résolution
numérique d’équations différentielles Runge-Kutta
Résolution de collisions A partir de deux volumes décrits par deux
mesh, il faut résoudre la collision C’est-à-dire déterminer le point de collision et
la normale en ce point Détection souvent à posteriori
Résolution de collisions Performances dépendent du nombre de
points des meshs de la scène Heuristiques Bounding Box
Champs d’application Tous ne peux pas être simuler de cette
manière
Animation Animation des personnages pour augmenter
le réalisme des jeux Personnages: éléments les plus détaillés du jeux Performances: Pas de temps réel Complexité des modèles
Animation Animation de squelette (Bones)
Association de sommet avec des bones
Définition de l’animation au niveau des jointures
Motion capture Capture du mouvement de vraie personne Strictement équivalent à l’animation
classique
Compromis: la cinématique inverse
Mélange d’animation pré calculée et d’animation procédurale
Physix & GPU Utilisation de shader pour tirer parti de la
puissance des GPU (hautement parallèle) Autrefois hack aujourd’hui une techno
« PhysiX » racheté par Nvidia
Agenda 3D Engine Physic Engine Network Engine & plateforme serveur
Réseau Popularisation des jeux en ligne
Multiplayer en LAN Multiplayer online MMO à personnage persistent L’avenir: MMO à univers persistent
Ce qui change Abonnement
Le gain dépend du temps de jeu Marketing viral
Auto Patch vs Livraison boite Travail sur la duré Patch à la volé
Architecture Cohérence temporelle Problématique de passage à l’échelle
Diffusion de données Nouvelles perspectives pour délivrer:
Du contenu Des mises à jour
Avantages: Peer to peer Streaming LoD (Level of Details)
Passage à l’échelle (scalability) C’est LA problématique des jeux en ligne
1 serveurs = 1000 joueurs 10 serveurs = 5000 joueurs 100 serveurs = 10000 joueurs
Redondance & Haute disponibilité
Éviter les SPOF (Single Point of Failure) Utiliser la redondance sur tous les services
Routage Service d’annuaire Nœud de calcul Système de persistance
Routage Point d’entrée à la plateforme Routage:
en fonction du type de message en fonction de la charge
Service d’annuaire Identifier les capacités des nœuds d’un
cluster Abstraire le nœud logique du nœud physique
UDP broadcast / multicast Gestion de réponses différentes
Nœud de calcul Moteur du cluster
Exécute le code serveur Sans état (Stateless)
Passage à l’échelle parfaite Avec état (Statefull)
Reporte le problème sur la persistance
Système de persistance Système de stockage des données Dans la plupart des cas, c’est le point noir de
la plateforme Le besoin de cohérence globale du système
rend la parallèlisation difficile Systèmes « ACID » classiques pas adaptés
A: Atomic C: Consistent I: Isolated D: Durable
Sharding Segmentation logique des données
Par zone géographique Par type de donnée Par probabilité d’interaction
Bien un temps mais ne scale pas
Persistence in memory Tout est gardé en mémoire et régulièrement
enregistré en base Avantages:
Vitesse Inconvénients:
Perte de la cohérence Duplication des données impossibles
Scale au prix de la cohérence
Database + système de réplication
Database traditionnel type: Mysql, Postgresql, Oracle, SQL Server, …
Système de réplication Master / Master : Lenteur des transactions Master / Slave : Clients spécifiques lisent les
données en read-only sur les serveurs slave (+ temps de propagation)
Scale un peu
Système NoSQL Conteneur clé/valeur distribué
BigTable, MongoDb, Voldemort, … Avantages:
Scale vraiment Inconvénients:
Récriture des schémas de donnée sans forme normale
Cohérence temporelle Valeur du temps différente pour tous les
joueurs Synchro d’horloge Lag entre action d’un client et notification server
Dérive du temps Incohérence temporelle (lag négatif)
Système pour cacher le lag « Sir yes sir » Animation à durée variable
Dead reckoning Estimer la position d’un objet à partir de sa
dernière position/vitesse connue Objectif: minimiser les trajectoires erratiques Inconvénients: trajectoires irréels (sans
pathfinding)
Résolution de conflit Serveur fait foi Estimation de la vue erronée d’un client Prise de décision en fonction de cette vue