Moteur Unigine
Commençons par la version Unigine. Nous utilisons la version 2.11, sortie ce printemps, à partir de laquelle une licence gratuite est apparue dans le moteur. Pour le moment, la version 2.12 est sortie et la version 2.13 est attendue prochainement.
Ce qu'il faut généralement savoir sur Unigine, c'est un moteur de jeu Tomsk souvent utilisé pour les benchmarks et les simulations. Au fil des ans, il a sorti des jeux tels que Oil Rush, Cradle, et ici, par exemple, le mmo Dual Universe relativement récent.
À l'intérieur, de nombreuses solutions intéressantes et prometteuses sont utilisées, cela rend une très belle image et peut être très attrayant pour les artistes, surtout s'ils modélisent dans un package 3D séparé, et non au moyen du moteur lui-même.
Le terrain est prêt à l'emploi, ainsi que l'eau, les nuages, la volumétrie, les projecteurs et d'autres choses utiles. Différents masques sont superposés au dessus du terrain pour les détails et autres choses - un outil très cool pour créer des paysages, bien qu'en termes de convivialité, il y ait place à l'amélioration.
En tant qu'outil pour un développeur de jeux - ici, en principe, l'expérience de l'utilisation de C # dans Unity peut être appliquée, bien qu'Unigine n'ait pas la même variété de solutions de composants prêtes à l'emploi. Néanmoins, certaines choses de base sont implémentées, et la documentation vous aidera à écrire le reste. Le C ++ n'est allé nulle part non plus.
Le moteur n'est pas encore adapté pour une plate-forme mobile, ainsi que pour un développement sans programmation (bien qu'il soit prévu de le développer également dans ces domaines). Configuration matérielle requise au niveau de la requête Unreal, la taille minimale du fichier d'application est assez importante. Mais c'est sympa et bien optimisé.
Mais revenons au prototype du jeu. Dans la version Unigine, les principales difficultés étaient liées à la conception visuelle de la physique pour une machine à écrire, car la documentation suggère de faire tout cela à l'aveugle, à travers du code, en outre, toutes sortes de paramètres physiques sont dispersés à différents endroits de l'éditeur et le pipeline d'assemblage visuel lui-même n'est pas décrit. Autrement dit, il n'y avait pas d'exemple tout fait trivial qui pouvait être modifié sans plonger dans toutes les nuances. En 2.12, une démo est apparue avec un tracteur creusant le sol, mais, peut-être, il est à nouveau assemblé par code, je n'ai pas regardé ce moment.
Quoi qu'il en soit, j'ai plus ou moins assemblé la machine en me concentrant sur la documentation. A propos de ce que j'ai écrit précédemment l'article correspondant: Comment j'ai collecté la physique des roues dans Unigine .
En termes de gameplay, dans Unigine, contrairement à Unity et Godot, par exemple, il s'est avéré assez facile de changer la physique de la voiture à la volée, non seulement le visuel, mais aussi l'emplacement / la taille des roues. Sans proposer d'astuces supplémentaires pour ne pas tomber à travers le sol, et sans reconstruire le modèle. Bien qu'il y ait une chance de tomber dans la texture, mais dans des situations complètement différentes, et pas au moment du changement de machine.
Le concept d'un véhicule unique qui change simplement ses formes, se transforme, s'adapte, voit ce qui se passe dans d'autres dimensions et ainsi de suite s'adapte bien à tout cela. Au moins, le gameplay principal pourrait être construit autour de tels changements, mais pas nécessairement.
Ce qui est triste avec le moteur, c'est l'assemblage de l'interface utilisateur à partir de l'éditeur - tout est en quelque sorte fastidieux, avec des scripts séparés suspendus pour chaque élément interactif. Bien qu'ici je n'ai édité que l'implémentation qui figurait dans les exemples, je n'ai pas beaucoup compris, d'ailleurs, je n'ai pas immédiatement compris comment afficher la couche gui pour voir la représentation visuelle dans l'éditeur.
D'un autre côté, si nous entendons un jeu plus orienté console, sur un gameplay lié à un petit nombre de boutons, avec une utilisation minimale de l'interface et avec un minimum d'éléments d'interface, alors ce n'est plus un problème notable.
Une autre chose déprimante, de simples animations enregistrées sur un instrument interne - un tracker. Oui, il est puissant à sa manière, mais trop carré pour être utilisé. De plus, l'animation enregistrée de cette manière ne peut être lue qu'en utilisant le langage UnigineScript obsolète. C'est alors que dans Unity ou Godot, vous pouvez animer littéralement tout autour du périmètre. Oui, vous pouvez importer une animation d'os, mais c'est un peu différent (en plus, je n'ai pas encore essayé cette méthode et je ne sais pas comment c'est).
Si, encore une fois, vous le regardez de l'autre côté, le moteur est encore plus concentré sur les simulations physiques et les interactions, alors pourquoi ne pas l'utiliser au lieu de créer des animations prédéfinies là-bas - c'est-à-dire pour créer des émetteurs, des commutateurs, structures en interaction, application de forces, utilisation de la gravité, etc. Vous pouvez donc vous passer d'un animateur interne, mais s'il a été correctement implémenté, c'est aussi un gros problème, même si ce n'est qu'en termes de direction - en quelques clics, vous pouvez enregistrer un vol caméra à travers la scène avec toutes sortes d'éléments interactifs, et vous avez ici un film fini. De plus, avec de telles opportunités pour une image cinématographique.
Quant à mon projet - pour le moment, après plusieurs itérations, j'ai enfin compilé et posté une démo plus ou moins solide qui peut être testée.
L'archive pour Win64 peut être téléchargée ici (poids 687Mb): DROPBOX
ou sur la page itch.io: NEWANGERS unpacked
prend 3 Go
.
- La construction a trois modes d'affichage principaux - «jour» et «nuit» (avec des préréglages de paramètres graphiques élevés), et le mode «a la comic» (avec des paramètres graphiques inférieurs).
- Pour basculer entre les modes, appuyez sur Echap pour faire apparaître le curseur de la souris et sélectionnez l'option souhaitée dans le menu en haut à gauche.
- Il y a des objets interactifs sur les niveaux - des portails en forme d'étoile bleue, à travers lesquels la voiture est transportée vers d'autres mondes et vous pouvez revenir en arrière en entrant dans le portail de ce côté.
- De nombreux objets du niveau sont perméables, mais certains ont des collisionneurs et les niveaux eux-mêmes sont plus ou moins entourés de murs de blocage.
- , , WASD. Q E. , , , R. Tab , , , .
- , .
- 1,2,3,4,5,6,7 — . .
- , «» .
- PgUp , . PgDown — .
- P — , L — .
Un ami a posté les sources antérieures de ce prototype sur sa page, ainsi que quelques modifications à la physique des roues de la version originale: GITLAB .
Moteur Godot
Passons au moteur suivant de notre liste. Une solution compacte open source avec d'énormes capacités (Blender du monde des moteurs de jeu), mais, encore une fois, est toujours inférieure à Unity en termes de variété de composants prêts à l'emploi. Bien que de nombreuses solutions non officielles, ainsi que des exemples avec des codes sources pour Godot, aient déjà été écrits, et en raison de la simplicité / rapidité relative de mise en œuvre de la nouvelle fonctionnalité, je ne peux pas dire que ce soit une sorte de problème pour le moment.
Godot a une meilleure réputation en tant que moteur 2D, grâce à la variété d'outils bien développés spécifiquement pour la 2D, mais ils sont un avantage supplémentaire pour la 3D - il est beaucoup plus facile de créer une interface utilisateur de jeu. Encore plus facile que dans Unity, comme pour moi. Pour le moment, Godot dans son développement a atteint la version 3.2.3 stable (mais tout le monde en attend 4 à cause du volcan, des optimisations, etc.) Assemblages tremblants des quatre, au fait, vous pouvez déjà essayer - au moins évaluer l'image).
Le moteur ne nécessite pas de matériel puissant pour les graphiques 3D et produit une image assez décente. Il n’existe pas un grand nombre d’outils tridimensionnels prêts à l'emploi, mais certains des plus nécessaires, utiles et universels ont été mis en œuvre. Il en va de même pour les optimisations. Par exemple, le moteur implémente la suppression habituelle du frustrum, qui coupe la géométrie du champ de vision de la caméra. Abattage par occlusion (afin de ne pas compter les objets fermés par des murs), vous devrez trouver la mise en œuvre vous-même (ce qui n'est pas si difficile, surtout à certains endroits, et pas dans tous les jeux dont vous en avez besoin). Également hors de la boîte dans le moteur, il n'y a pas de lot de géométrie (bien qu'il y en ait partiellement pour gles2) et de terrain, mais ce n'est pas un tel problème, il vous suffit d'optimiser quelque chose manuellement - coudre des mailles ensemble, casser la géométrie en petites parties ou utiliser des morceaux, etc. Plus loin.Vous pouvez trouver une sorte de mise en œuvre dans un petit magasin local, par exemple, ajouter une solution de terrain prête à l'emploi à votre projet.
L'interface du moteur, en passant, est assez réfléchie et personnalisable (bien qu'il y ait des éléments inflexibles). Il est généralement pratique à utiliser. Il existe suffisamment de langues prises en charge pour différents niveaux d'immersion. Il existe à la fois C ++ et C # et un GDScript interne plutôt pratique qui s'exécute directement dans l'éditeur, sans nécessiter le lancement d'un environnement séparé. Le script visuel est également présent, donc sans connaissance de la programmation, Godot est également tout à fait possible de vivre - concevoir une logique minimale, animer quelque chose (Godot a un outil simple et cool pour enregistrer des animations).
Le faible poids de l'application, la nature multiplateforme, la rapidité de développement, la facilité de mise en œuvre de diverses solutions tierces sont également des avantages importants du moteur. Il existe deux options de rendu - gles2 et gles3, tous deux prenant en charge la 3D, mais dans la première, c'est plus simple et en général, il convient mieux aux téléphones 2D et mobiles. Gles3 fournit un niveau graphique plus avancé, certaines parties des appareils mobiles le prennent également en charge.
Passons à un prototype de jeu basé sur ce moteur. À Godot, un simple modèle de véhicule physique sort presque de la boîte, donc amener vos voitures ici était assez facile.
Avec lequel certains problèmes sont survenus - il n'est pas si facile d'intervenir dans un objet physique lancé, par exemple pour le téléporter d'un point à un autre ou pour changer l'emplacement de la roue de la voiture à la volée. Par conséquent, ici une telle astuce comme dans Unigine ne fonctionne pas et, si je comprends bien, dans Godot, il est plus facile de recréer un objet que de changer la configuration physique ou quelque chose du genre à la volée. Mais en fait, tout cela n'est pas vraiment nécessaire, et dans ce prototype, je viens de revenir à l'idée standard du gameplay, lorsque vous roulez pour différentes voitures, en passant de l'une à l'autre quelque part dans des endroits distincts.
Godot a des outils intéressants comme les objets CGS et les multi-maillages. J'ai écrit plus en détail sur les caractéristiques de leur utilisation dans l'article: Godot, 1000 petites choses
Le prototype du Nevanger sur ce moteur a reçu un nom séparé -Moteurs sauvages . En général, je reçois comme une famille de projets similaires, unis par le concept de voitures étranges voyageant à travers des mondes étranges. Et en tant que nom collectif de travail, je les appelais Nevangers, jusqu'à ce qu'un nom plus spécifique apparaisse. Le prototype Godot a maintenant son propre nom, la version suspendue sur la version 0.9 de Unity (qui a tout déclenché) a également un nom différent, mais il y reviendra plus tard, s'il est temps d'y revenir.
Au début, je n'avais pas de vision particulière de ce que j'aimerais mettre en œuvre dans la démo de Wild Engines, je viens de faire des croquis de niveaux, en essayant de comprendre comment mieux implémenter le terrain et quelles opportunités j'aimerais voir. Ensuite, j'ai eu l'idée de faire bouger la caméra derrière la souris et il est devenu possible de réaliser une visée plus contrôlée de l'arme que dans les autres versions. Ainsi, ce prototype deviendra probablement plus axé sur l'utilisation de la prise de vue.
En cours de route, j'ai commencé à assembler un niveau à partir de plates-formes constituées de petits blocs, en essayant diverses approches d'optimisation et de mesure des performances. Optimisation par optimisations, mais à un moment donné, j'ai déjà rempli la zone visible par la caméra de géométrie à tel point que l'éditeur a cessé de faire glisser toute la scène en cours, tombant avec des erreurs. Ce qui a été corrigé en incluant plus de mémoire dans les paramètres. Ensuite, j'ai pris la génération de plate-forme plus dans le code, ne laissant que des blocs dimensionnels simplifiés avec des identifiants sur la scène, qui eux-mêmes ont chargé la plate-forme nécessaire lorsque le jeu a été lancé. Ensuite, j'ai réduit la quantité de mémoire utilisée à une valeur inférieure et augmenté le niveau plusieurs fois plus sans aucun problème. De plus, avec une telle implémentation, il y a toujours la possibilité de réutiliser des plates-formes déjà chargées, de les déplacer vers d'autres endroits du niveau,lorsque la machine se dirige dans cette direction pour pouvoir dessiner avec eux l'espace de niveau pratiquement à l'infini avec les mêmes ressources et sans transitions.
De la même manière, j'ai rassemblé plus tard des croquis d'un niveau similaire dans Unigine, seulement là, l'éditeur tire immédiatement toute la scène sans avoir besoin de charger les plates-formes en blocs par code (mais pour Unigine, un ordinateur beaucoup plus puissant est utilisé).
En conséquence, dans la version de démonstration de Wild Engines, il y a 4 voitures, dont l'une doit être sélectionnée pour démarrer, et deux petits niveaux (niveau A et niveau B). Quelques premières cartes sont également restées (niveaux 0 et 1), mais elles sont encore plus testées et le paysage n'est pas optimisé.
Le mode plein écran et les ombres peuvent être activés / désactivés dans le menu.
Les boutons 1, 2 et 3 changent la position de la caméra. La souris vise et fait pivoter la caméra, plus le curseur est éloigné du centre.
WASD - bougez. PgDown - sauter. Q - impulsion aléatoire.
Bouton gauche de la souris - coup.
Avec Enter, un indice sur le contrôle apparaît et un bouton pour revenir au menu principal, où vous pouvez changer la machine / le niveau.
Version Win64 (42 Mo): DROPBOX wildengines_x64
Version Linux (44 Mo): DROPBOX wildengines_linux
Prime
Et voici l'un des nouveaux méchas émergents, le Nécromancien:
Vous pouvez le monter dans la version Unigine.
Un autre nouveau mechos, rose avec rétroéclairage bleu, Debag, est à la fois ici et là.
Il y avait aussi une vieille cartouche qui traînait ... que pensez-vous, des clones de n'importe quel jeu huit bits pourraient être cachés sous ce nom sur une cartouche chinoise, si Vangers était une franchise de renommée mondiale à cette époque lointaine?