Bonjour, Guilherme ici, le développeur principal derrière Cave Engine, et je suis très heureux d'écrire cette note de version pour vous.
Les quatre derniers mois ont été intenses ici au studio, et nous avons développé des jeux et des outils comme jamais auparavant. Le prochain jeu que nous produisons chez Uniday Studio est bien plus complexe que tout ce que nous avons fait jusqu'à présent, et c'est pour cela que le moteur a beaucoup évolué. J'espère que cette note de version vous le montrera en pratique.
Cave Engine 1.4 est littéralement la meilleure version que le moteur ait jamais eue. Il y a d'innombrables améliorations et corrections, et il est beaucoup plus stable tant sous Windows que Linux. Attendez-vous à une meilleure expérience utilisateur, de meilleures performances, plus d'outils et de fonctionnalités avancées pour créer vos jeux.
Quoi de neuf ?
Je vais essayer de vous présenter les fonctionnalités les plus passionnantes, alors plongeons-y et explorons.
Nouveaux tutoriels d'intégration pour les débutants
C’est littéralement la meilleure version JAMAIS sortie pour commencer avec Cave si vous êtes nouveau. La version 1.4 propose un système d’intégration avec vos premiers pas dans le moteur (intégré à l’interface utilisateur), pour que vous puissiez apprendre à tester le jeu, le modifier et même l’exporter en runtime. J’ai aussi beaucoup amélioré les tutoriels et la documentation intégrés au moteur pour faciliter la vie à tout le monde.

Cela fait partie de mon effort pour, au lieu de faire des tutoriels, rendre le moteur tellement simple qu’ils ne soient même pas nécessaires. :)
Nouvelle expérience de création de projet
Créer un nouveau projet dans Cave est désormais bien plus excitant et propose beaucoup de nouvelles fonctionnalités.

J’ai complètement réécrit le menu de nouveau projet, et maintenant vous pouvez choisir entre un projet vide, un template jeu à la première personne, à la troisième personne ou en vue du dessus. Les nouveaux templates de jeu sont aussi bien plus stables et complets. J’en parlerai plus juste après. Mais avant cela, une fonctionnalité supplémentaire pour le nouveau système de projet est un petit bouton générateur de noms de jeu aléatoires. Maintenant, chaque fois que vous êtes à court d'idées pour le nom de votre projet, cliquez simplement dessus, et il vous générera un nom aléatoire qui, je l’espère, vous inspirera.
Nouveaux assets par défaut pour les projets
Lorsque vous créez un nouveau projet, vous aurez plusieurs options pour le démarrer avec des assets par défaut. Cela inclut des éléments déjà présents dans Cave, tels que :
- Menu principal
- Menu de pause
- Contrôleur de personnage à la première personne
- Contrôleur de personnage à la troisième personne
- Contrôleur de personnage en vue de dessus
- Proto personnage entièrement animé (avec cinématique inverse)
- Barre de santé et système de game over
- Système de fin de niveau et passage au niveau suivant
- Scène par défaut avec un terrain généré
- Primitives de mesh par défaut (cube, sphère, cylindre, plan, cône)
- Matériau de test par défaut
- Texture de ciel procédurale (avec nuages, étoiles, soleil, etc.)
- Fichier README expliquant tout ce qui a été ajouté à votre nouveau projet (et comment vous pouvez l'étendre)
Mais maintenant vous avez aussi :

- Génération de terrain améliorée, et maintenant les objets ajoutés à la scène s'alignent sur celui-ci.
- Contrôleur de véhicule (avec mesh et physique) fourni avec template inclus.
- Modèle d'ennemi avec une IA de base Wander construite avec le système State Machine de Cave.
- Plus de primitives de mesh par défaut, cette fois pour fournir des assets de construction de type blockmesh (murs, portes, fenêtres, escaliers, etc.).
- Nouveau mesh par défaut "Rampe".
Nombreuses améliorations de l'UI et UX de l'éditeur
J’ai apporté énormément d’améliorations à l’interface utilisateur de l’éditeur et à l’expérience utilisateur globale. Je vais essayer de mettre en avant les principales pour que vous puissiez explorer le reste vous-même.
Nouvelle UI pour les composants d’élément UI

Il est maintenant beaucoup plus facile et intuitif de définir la position, l'échelle et les points d’ancrage d’un UIElement. J’ai aussi amélioré l’onglet Behavior.
Améliorations de l'éditeur de scripts Python
Lorsque vous ouvrez un script Python depuis l'Asset Browser, vous pouvez maintenant éditer le script en entier dans l’éditeur en pleine hauteur directement dans l’onglet Properties. Cela signifie que vous n’avez plus besoin de cliquer deux fois pour ouvrir le script dans un onglet externe. Cela facilite grandement l’écriture du code dans l’éditeur de Cave.

Nous avons aussi un onglet Inspect pour voir le contenu de votre script, et les outils de l’éditeur ont leur propre onglet dédié où vous pouvez enregistrer ou recharger un outil, ou exécuter le script dans l’éditeur.
Améliorations de l'éditeur de programmes Shader
Comme pour l’éditeur de script Python, vous n’avez plus besoin de changer d’onglet pour éditer complètement les programmes Shader. Les shaders vertex et fragment apparaissent directement dans l’onglet Properties pour que vous puissiez les modifier. Vous pouvez toujours les ouvrir individuellement dans un autre onglet si vous le souhaitez.
Améliorations de l’onglet Console
Un bouton permet désormais de copier tous les messages dans le presse-papiers. C’est très utile pour déboguer ou partager la sortie console avec quelqu’un.
Proto Character et Véhicule dans le menu "New Entity..."

Si vous n’avez pas supprimé le Proto Character ou le Véhicule qui maintenant sont fournis par défaut dans vos nouveaux projets, ils apparaîtront comme options pour que vous puissiez rapidement les ajouter à votre scène en appuyant sur Shift + A pour ajouter une nouvelle entité.
Création automatique d’un Rigid Body
En glissant un mesh dans la scène (depuis l’Asset Browser), vous pouvez appuyer sur Drag + Ctrl pour créer automatiquement un rigid body pour ce mesh.
Contrôles de caméra de type Blender (vue 3D)
C’est probablement la fonctionnalité la plus demandée depuis la sortie initiale de Cave Engine, et maintenant elle est enfin là. En naviguant dans la vue 3D, vous pouvez utiliser le bouton de la molette de la souris pour orbiter autour des objets, exactement comme dans Blender.
Cette fonctionnalité est expérimentale, donc si vous souhaitez signaler un problème ou suggérer des améliorations, n’hésitez pas à nous en parler sur notre serveur Discord.
Améliorations du système State Machine

Lorsque vous écrivez du code pour une transition d’état, vous n’avez plus besoin d’accéder aux variables locales "from state" comme si elles étaient des propriétés d’un dictionnaire. Elles sont maintenant directement disponibles comme variables locales.
Code de transition avant cette mise à jour (exemple) :
result = state.get("myVar") == 3
Après la mise à jour (exemple) :
result = myVar == 3
Améliorations du système Path Component

Le Path Component et l’outil Path ont été ajoutés en expérimental dans la dernière version de Cave (1.3), et depuis ils ont beaucoup évolué. Pour la 1.4, les points forts sont les deux nouvelles méthodes de PathComponent : GetSampleAdvance(...) et GenerateProceduralMesh(...).
La première fonction vous permet de fournir une position et obtenir la position la plus proche sur un Path Component depuis cette position, plus une valeur d’avance. Pourquoi est-ce utile ? Parce que c’est essentiellement tout ce dont vous avez besoin pour faire suivre un chemin à un personnage, un véhicule, ou autre.
La seconde fonction, comme son nom l’indique, prend un mesh et génère procéduralement un nouveau mesh le long du Path Component, ce qui vous permet de créer routes, murs, bâtiments, et bien plus.
Améliorations du système Terrain
Le système de terrain dans Cave a reçu beaucoup d’améliorations dans cette version, et je peux déjà vous dire une chose : il est maintenant beaucoup plus rapide de rendre tout le terrain.

Maintenant vous pouvez ANNULER ! (Ctrl + Z)
Oui, vous pouvez enfin annuler vos modifications (ou toute autre modification) faits au terrain avec l’outil Terrain. C’est une très belle amélioration de confort.
Optimisations du rendu du terrain
J’ai réduit d’environ 100 fois le nombre d’appels de dessin utilisés pour rendre le terrain, ce qui rapproche la performance du minimum théorique. J’ai aussi amélioré les systèmes internes pour optimiser encore plus le rendu du terrain. Attendez-vous à de meilleures performances.
Nouveau mode d’alignement sur Path
Comme mentionné plus tôt, le système Path a beaucoup évolué. Cela impacte également le système Terrain car vous avez maintenant un nouveau mode d’alignement sur Path qui vous permet de sélectionner un path dans votre scène et de l’utiliser pour terraformer le terrain. C’est idéal pour créer routes et fonctionnalités similaires.
Meilleure génération de heightmap
La génération par défaut de heightmap était assez médiocre, nous l’avons donc ajustée afin de générer des paysages plus intéressants. Nous avons aussi corrigé un problème où chaque terrain généré utilisait la même graine aléatoire, ce qui les rendait toujours identiques.
Ce n’est plus le cas, et vous pouvez maintenant définir la graine aléatoire via du code. Cela mettra aussi à jour correctement les graines de génération du terrain.
Nouvelle méthode de raycasting Terrain
Avec une position d’origine et une position cible, vous pouvez faire appel au composant terrain pour effectuer un raycast et vérifier si cela entre en collision avec le terrain, en retournant la position et la normale de collision le cas échéant.
Améliorations des performances de rendu
Beaucoup de travail a été fait sur les systèmes internes de cache OpenGL pour réduire la surcharge du pilote. Cave Engine avait déjà des systèmes étendus pour réduire cette surcharge, mais maintenant cela a été poussé à un autre niveau.
Dans certains cas, j’ai pu mesurer une réduction d’environ mille fois de cette surcharge par rapport à auparavant. Cela dépend bien sûr de votre machine, mais si vous étiez limité par la surcharge du pilote, il y a de fortes chances que vous constatiez des améliorations significatives des performances dans cette version.
Les nouvelles optimisations internes incluent :
- Cache de liaison des programmes shader
- Mise en cache des valeurs uniformes
- Logique d'invalidation du cache
Ces changements réduisent les appels OpenGL redondants et améliorent les performances de rendu.
De plus :
- Améliorations de la sécurité de liaison des uniformes
- Contournement possible pour les problèmes de nettoyage de profondeur sur AMD
Corrections pour la version Linux
J'ai également corrigé les innombrables problèmes de chemin Python que certains utilisateurs Linux rencontraient lors de l'utilisation du moteur, en particulier lors de la création d'un nouveau projet.
Nouveaux APIs Python
Avec la plupart des fonctionnalités mentionnées ci-dessus, de nouveaux APIs Python ont été ajoutés ou mis à jour pour les supporter, mais il y a beaucoup plus. J'en liste quelques-uns ici.
VehicleComponent.SetSteering(...)
Mesh.AddMeshAsLod(...)
PathComponent.GenerateProceduralMesh(...)
PathComponent.GetSampleAdvance(...)
PathEdge.GetPointA()
PathEdge.GetPointB()
Transform.AlignAxis(...)
De nouvelles options pour VSync et les limites de FPS ont également été ajoutées. Consultez les stubs Python pour voir tout ce qui est nouveau.
Plus d'APIs cave.ui et meilleur développement d'outils
Si vous aimez ou avez besoin d'écrire des outils personnalisés pour l'éditeur afin de vous aider à construire vos jeux ou assister pendant le développement, votre vie vient de s'améliorer. Vous pouvez désormais consulter les stubs API de notre code cave.ui et attendre une expérience d'outillage d'éditeur plus stable. Les onglets de débogage sont maintenant rechargés lorsque le jeu est rechargé.
Corrections de bugs
Les corrections suivantes ont été incluses dans cette version :
- Correction des problèmes d'export sous Linux
- Correction d'un plantage sous Linux causé par un chemin Python incorrect
- Correction de la carte de hauteur du terrain générant toujours le même résultat
- Correction du crash de récursion au rechargement de template
- Correction des miniatures noires quand une exposition manuelle était utilisée
- Correction du code par défaut incorrect dans DebugTab
- Correction de l'éditeur de code non modifiable lorsque la chaîne était vide
- Correction des maillages animés avec des limites AABB incorrectes
- Correction des erreurs de culling pour les chunks de terrain
- Correction des références manquantes au composant StateMachine
- Correction de diverses fautes dans l'interface de l'éditeur
- Correction des fautes dans la documentation
- Correction d'un crash d'EntityMap
- Correction des problèmes de surlignage de chaîne dans CodeEditor
- Correction du surlignage des commentaires dans CodeEditor après des chaînes
- Correction de l'implémentation du copier dans le presse-papiers ne utilisant pas SDL
Problèmes connus
Nous avons quelques problèmes connus qui valent la peine d'être mentionnés. La raison pour laquelle ils ne sont pas encore corrigés est soit parce qu'ils sont de faible priorité, soit parce que nous n'avons pas pu les reproduire de manière constante. Si vous avez des indices à leur sujet, veuillez me le faire savoir sur notre serveur Discord.
- Cave ne fonctionne pas sur certains systèmes Linux Wayland (ou la plupart) (seul X11 est supporté pour le moment).
- Parfois, un chunk de terrain disparaît selon l'angle de la caméra (un problème de culling avec faux positifs). C'est un bug très rare que je n'ai pas encore réussi à reproduire.