Introduction à la superposition des moteurs de jeu

Architecture en couches du moteur de jeu (descendante)

Tool Layer
Dans un moteur de jeu moderne, la première chose que nous voyons n'est peut-être pas des codes complexes, mais divers éditeurs. Grâce à ces éditeurs, nous pouvons créer et concevoir des niveaux, des personnages, des animations, etc. Pour le contenu du jeu, cette série d'éditeurs constitue le top couche du moteur - la couche outil.
Insérer la description de l'image ici
Couche de fonctions

  • Le processus de conversion d'un monde virtuel tridimensionnel en une image bidimensionnelle image par image nécessite l'utilisation d'un système de rendu (Rendering) ;
  • Pour faire bouger les modèles stationnaires et effectuer des mouvements réalistes pour former une image continue, nous devons utiliser le système d'animation (Animation) ;
  • Les collisions physiques et l'action de diverses forces rapprochent le mouvement des objets du monde réel. Nous devons utiliser le système physique (Physique) ;
  • Chaque monde de jeu a ses propres règles, et il existe également des PNJ pour enrichir la jouabilité du jeu, ce qui nécessite l'utilisation de scripts (Script), de machines à états (FSM) et d'IA ;

Le fonctionnement de tout jeu est indissociable de l’interaction homme-machine, qui implique une série de fonctions. Les fonctions ci-dessus combinées forment la couche fonctionnelle du moteur de jeu.
Insérer la description de l'image ici
Le jeu Resource Layer
contient non seulement des lignes de code source, mais également des fichiers multimédias dans divers formats, tels que les fichiers PSD de PhotoShop et les fichiers MAX de 3DSMAX, qui chargent et gèrent cette série de graphiques, d'images, d'audio, de fichiers vidéo et d'autres données. tâches de la couche ressources. La couche de ressources est située sous la couche fonctionnelle et fournit en permanence des données à la couche fonctionnelle. C'est comme un peintre peignant au-dessus, et la couche de ressources fournit continuellement de la peinture pour celle-ci en dessous.
Insérer la description de l'image ici
Couche centrale La couche
la plus centrale et la plus importante du moteur de jeu est la couche centrale. La couche centrale est chargée de répondre aux appels fréquents des couches supérieures et de fournir diverses fonctions de base, telles que la gestion de la mémoire, l'allocation des conteneurs, le calcul des données, la création multithread, etc.
Insérer la description de l'image ici
Couche plate-forme
La couche plate-forme est la couche la plus facilement négligée. Un jeu ou un moteur peut être publié sur différentes plates-formes et avoir différentes interfaces graphiques ; et différents utilisateurs peuvent utiliser différents périphériques matériels, tels qu'un clavier, une souris et un contrôleur. L'adaptation aux différentes plates-formes est la tâche de la couche plate-forme. Insérer la description de l'image ici
Les middlewares et bibliothèques tierces des bibliothèques tierces
sont convertis sous forme de SDK (Software Development Kit) ou de format de fichier.
Insérer la description de l'image ici
Pourquoi une architecture en couches ?

Insérer la description de l'image ici
Afin de découpler le moteur de jeu et de réduire la complexité, chaque couche effectuera ses propres tâches indépendamment. La couche inférieure fournit des services de base à la couche supérieure et la couche supérieure appelle les outils sous-jacents. Une telle architecture en couches rend la couche supérieure flexible et la couche inférieure stable, ce qui est plus propice aux mises à jour et au développement des fonctions.

Couche de ressources

Les fichiers PSD dans Photohop, les fichiers MAX dans 3DSMAX, etc. contiennent généralement les propres informations de l'outil, une grande quantité de données qui n'ont rien à voir avec le moteur et le format des données est relativement complexe. L'utilisation directe réduira considérablement l'efficacité. Afin d'améliorer l'efficacité de la planification des ressources, le moteur doit convertir différentes ressources en fichiers d'actifs lors de l'importation. Par exemple, lors de l'utilisation de fichiers de texture dans le moteur, nous pouvons importer des fichiers aux formats JPG et PNG. Cependant, les algorithmes de compression de ces deux fichiers ne sont pas efficaces pour le GPU. Les utiliser directement dans le GPU entraînera une perte de performances, ils sont donc généralement converti en dds. Le format est ensuite stocké dans la mémoire vidéo.
Insérer la description de l'image ici
Pour n'importe quel personnage de jeu, tel que le petit robot dans l'image ci-dessus, vous devrez peut-être lier les matériaux, textures, grilles, animations et autres ressources correspondants, définir un fichier d'actifs composites pour associer ces ressources, telles que des fichiers XML, et utiliser le GUID. (symbole Globally Unique Identifier) ​​pour la gestion de l'identification.
Insérer la description de l'image ici
Lorsqu'il est réellement exécuté, le jeu doit également utiliser Asset Manager (Runtime Asset Manager), qui gère les actifs en fonction du cycle de vie des actifs (Asset Life Cycle), du chargement et du déchargement en temps réel des actifs, de l'allocation des ressources et du garbage collection. (GC). , chargement différé, etc. sont inclus.

Couche fonctionnelle

Insérer la description de l'image ici
L'utilisation de la couche fonctionnelle fait avancer le monde virtuel du jeu à chaque fois qu'un tick passe. Au sein d'un tick, les fonctions tickLogic() et tickRender() sont exécutées respectivement. La logique tickLogic() est généralement exécutée en premier et est principalement utilisée pour simuler le monde du jeu, y compris le traitement des entrées et des sorties, la transformation de la position de la perspective de la caméra, la détection des collisions, etc. Opération : le tickRender() utilisé pour dessiner le monde est rendu en fonction de la position de chaque actif calculée par tickLogic().
Insérer la description de l'image ici
La couche fonctionnelle est très complexe et vaste, en particulier lorsqu'il s'agit de programmation réseau, c'est pourquoi une informatique multithread est généralement requise. Le multithreading courant actuel consiste à diviser les tâches qui peuvent être calculées en parallèle et à les placer dans plusieurs threads pour le calcul.Cependant, s'il y a des tâches qui ne conviennent pas au calcul parallèle, ses défauts seront révélés. À l'avenir, le moteur divisera chaque tâche en très petites unités exécutables et allouera chaque tâche atomique à plusieurs threads pour son exécution, permettant ainsi une utilisation plus efficace des ressources.
Insérer la description de l'image ici

couche centrale

La couche centrale constitue la base de toute la logique de la couche supérieure. Elle fournit des bibliothèques mathématiques (telles que les opérations matricielles), des structures de données et des conteneurs (tels que des arbres binaires), une gestion de la mémoire et d'autres outils. Parce que tout dans le moteur est centré sur l'efficacité, lors de l'exécution d'opérations mathématiques, vous pouvez utiliser des opérations approximatives ou SIMD (flux de données à instruction unique, exécutant la même instruction en même temps de manière synchrone) pour améliorer l'efficacité du calcul ; comme pour les données. structures et conteneurs. Les structures de données fournies avec les langages de programmation peuvent causer certains problèmes. Par exemple, l'espace de stockage ouvert par Vector en C++ augmentera de façon exponentielle lors de l'ajout d'objets. Après avoir ajouté un grand nombre d'objets, nous ne pourrons pas pour utiliser l'espace de stockage. On sait que des trous de mémoire peuvent se produire, et la structure des données dans le moteur est plus pratique pour la gestion de la mémoire et améliore l'efficacité de l'accès. La gestion de la mémoire du moteur est très similaire à celle du système d'exploitation. Le principe de base peut être résumé comme suit : stocker les données ensemble autant que possible et y accéder facilement. Accès en séquence, traitement par lots
Insérer la description de l'image ici

couche de plateforme

La couche plate-forme permet au jeu d'être compatible avec différentes plates-formes telles que Xbox, Mac et Windows, ainsi qu'avec différents appareils tels que les contrôleurs, les claviers et les souris. La couche plate-forme utilise l'interface matérielle de rendu (RHI) pour supprimer les différences entre les différentes API graphiques (telles que DirectX11, DirectX12, OpenGL), de sorte que la couche supérieure n'ait pas besoin de se soucier des problèmes pouvant être causés par l'utilisation de différentes API.
Insérer la description de l'image ici

couche d'outils

Insérer la description de l'image ici
La couche outil se présente généralement sous la forme d'un éditeur (éditeur de blueprints, éditeur de matériaux, etc.) et peut être développée à l'aide de différents langages de programmation (C++, C#, Html5, etc.). L'efficacité du développement est priorisée. pour permettre à différents utilisateurs de créer du contenu de jeu. . Étant donné que de nombreux actifs numériques de jeu sont créés dans différents DCC (Blender, MAYA, etc.), la couche d'outils contient généralement des outils d'importation et d'exportation pour importer et exporter des ressources de jeu.

Je suppose que tu aimes

Origine blog.csdn.net/gghhb12/article/details/136437631
conseillé
Classement