Les nouveautés d’Evergine Studio
Dans cette release, nous avons apporté des améliorations majeures à l’expérience utilisateur d’Evergine Studio. Dans cet article, nous passons en revue les principaux changements, qui, nous l’espérons, vous plairont et vous faciliteront un peu le travail au quotidien sur vos projets Evergine Studio.

Simulez les behaviors et la physique depuis Evergine Studio
Evergine Studio dispose désormais d’un Play Mode qui simule les behaviors et la physique dans l’éditeur. C’était l’une des fonctionnalités les plus demandées. Jusqu’à présent, pour voir comment une scène se comportait, il fallait compiler et lancer l’application, puis revenir à l’éditeur pour corriger ce qui n’allait pas. Désormais, vous pouvez configurer des scènes physiques complexes, ou vérifier comment vos behaviors sont implémentés et comment ils se comportent, directement depuis Evergine Studio, en un seul clic.
La barre supérieure du viewport de la scène comporte trois nouveaux boutons :
- Play (Ctrl+P) exécute la scène comme le ferait votre application : les behaviors se mettent à jour, la physique est simulée, les particules sont émises et la scène est vue à travers ses propres caméras. Pendant l’exécution de la scène, le bouton devient Pause (Ctrl+Shift+P), qui fige la simulation tout en continuant le rendu, ce qui vous permet de toujours déplacer la caméra.
- Step (Ctrl+Alt+P) fait avancer la simulation en pause d’une seule frame, puis la remet en pause. C’est très utile pour comprendre des collisions, des contraintes ou des animations trop rapides pour être suivies à vitesse normale.
- Stop met fin à la simulation et revient à l’édition.

Le Play Mode exécute une copie de la scène construite à partir de son asset ; la scène que vous éditez n’est donc jamais modifiée : lorsque vous appuyez sur Stop, vous la retrouvez exactement telle qu’elle était avant d’appuyer sur Play. Gardez à l’esprit qu’il exécute l’asset de la scène, et non votre application entière : le code que vous ajoutez à votre classe Scene (par exemple dans MyScene.cs) ou à votre classe Application ne s’exécute pas. Si la scène n’a pas de caméra active, le viewport affiche un avertissement au lieu d’un écran noir.
Pour faire de la place aux nouveaux boutons, nous avons également réorganisé la barre d’outils de la scène. Elle affichait auparavant les trois options de snap (translation, rotation et échelle) en même temps. Désormais, elle n’affiche que celle de l’outil de transformation sélectionné.
Release précédente :

Nouvelle release :

Nouveaux manipulateurs
Nous avons également reconstruit tous les manipulateurs qui permettent de déplacer, faire pivoter et mettre à l’échelle les entités dans le viewport de la scène. Ils reposent désormais sur l’implémentation de la bibliothèque ImGuizmo, celle-là même qu’utilisent de nombreux moteurs et outils. Les nouveaux manipulateurs sont plus réactifs et plus faciles à saisir, et ils apportent des améliorations comme l’affichage de la distance parcourue lors d’une translation :

Ou les degrés parcourus lors d’une rotation :

Le snap, le pivot et la multisélection fonctionnent toujours : vous pouvez donc transformer plusieurs entités à la fois.
Les manipulateurs s’accompagnent du View Cube, lui aussi issu d’ImGuizmo. Il affiche l’orientation de la caméra dans un coin du viewport, et un clic sur l’une de ses faces bascule vers la vue de face, de dessus, de côté ou toute autre vue. Configurer la vue pour éditer une scène est désormais beaucoup plus rapide.

Sélection au pixel près
Le système de sélection est une autre amélioration majeure du viewport d’Evergine Studio. Jusqu’à présent, l’éditeur sélectionnait les entités à l’aide de volumes simplifiés (boîtes et sphères ajustées à chaque modèle) : cliquer dans l’espace vide autour d’un objet pouvait donc le sélectionner, et il était difficile de sélectionner un petit objet situé derrière un grand. La sélection est désormais au pixel près : vous sélectionnez exactement ce que vous voyez sous le curseur, ce qui est beaucoup plus précis lorsque vous travaillez sur des scènes complexes. De plus, l’entité sélectionnée est dessinée avec un contour orange autour de sa silhouette, ce qui permet de l’identifier d’un coup d’œil.
![]()
Lorsque vous sélectionnez la racine d’une hiérarchie d’entités, ses enfants et petits-enfants sont dessinés avec un contour bleu. Cela vous indique qu’il ne s’agit pas de l’entité sélectionnée, mais que les transformations que vous lui appliquez les déplaceront également.

Quelques détails supplémentaires rendent la sélection plus confortable :
- L’entité sous le curseur est mise en surbrillance au survol : vous savez ainsi ce que vous allez sélectionner avant de cliquer.
- Les parties de la sélection masquées par d’autres objets restent dessinées avec une opacité réduite, pour ne jamais perdre de vue un objet caché.
- Les clics bénéficient d’une tolérance de quelques pixels, ce qui facilite aussi la sélection d’objets fins comme les lignes.
- Les icônes de l’éditeur (lumières, caméras, particules…) se sélectionnent en cliquant dessus, et la sélection rectangulaire utilise le même système : elle ne sélectionne donc que ce qui est réellement visible.
- Dans une hiérarchie ou un prefab, le premier clic sélectionne la racine et le suivant sélectionne l’entité exacte sous le curseur.
Les couleurs du contour, son épaisseur, l’opacité des parties masquées et la surbrillance au survol se règlent dans Preferences > Viewport.

Gérez les services depuis Project Settings
Dans Evergine, les services (classes qui dérivent de Service ou de UpdatableService) sont l’équivalent, au niveau de l’application, d’un composant ou d’un behavior : vous les utilisez lorsque vous avez besoin d’une logique ou d’un état global qui ne dépend pas des scènes de votre projet. Jusqu’à présent, vous deviez les enregistrer dans le code de votre classe Application. Avec cette release, vous pouvez gérer les services depuis le panneau Project Settings d’Evergine Studio, sans écrire une seule ligne de code.
Dans la nouvelle section Services, vous pouvez ajouter les services de votre projet, les supprimer et configurer leurs propriétés. Le panneau des propriétés utilise les mêmes éditeurs qu’Entity Details : les attributs RenderProperty que vous utilisez déjà dans vos composants fonctionnent donc de la même manière dans vos services.

La configuration est enregistrée avec le projet, et les services sont enregistrés au démarrage de l’application grâce à du code généré. Si vous enregistrez déjà un service du même type dans votre classe Application, votre enregistrement est prioritaire : les projets existants continuent donc de fonctionner comme avant. Les services destinés à un usage interne peuvent être masqués de la liste avec l’attribut [Discoverable(false)].
Des projets compilés en moins de la moitié du temps
Nous avons également travaillé sur les temps de compilation de l’éditeur. Evergine Studio compile désormais vos projets en moins de la moitié du temps nécessaire à la version précédente. Comme Studio compile un projet à son ouverture, vous le remarquez aussi chaque fois que vous en ouvrez un.
Nous avons mesuré les temps avec deux projets : un projet vide et l’exemple de physique de véhicule.
| Projet | Scénario | Version précédente | Nouvelle version | Réduction |
|---|---|---|---|---|
| Projet vide | Build complet | 8,90 s | 3,73 s | 58% |
| Projet vide | Aucune modification | 8,13 s | 3,04 s | 63% |
| Projet vide | Modification C# | 8,06 s | 3,06 s | 62% |
| VehiclePhysicsSample | Build complet | 10,19 s | 4,41 s | 57% |
| VehiclePhysicsSample | Aucune modification | 9,49 s | 3,63 s | 62% |
| VehiclePhysicsSample | Modification C# | 9,42 s | 3,69 s | 61% |
L’amélioration vient de la manière dont la compilation est lancée :
- La restauration des packages, la compilation et la découverte des add-ons se font en un seul appel à MSBuild, qui compile également en parallèle.
- L’état de la compilation incrémentielle est conservé d’une compilation à l’autre.
- Seuls les fichiers modifiés sont publiés.
Une meilleure gestion des assets
La gestion des assets a elle aussi beaucoup évolué dans cette release, avec des moyens plus simples et plus intuitifs de trouver les assets et de les assigner aux composants et aux entités.
Glisser-déposer d’assets
Tous les sélecteurs d’assets prennent désormais en charge le glisser-déposer : faites glisser n’importe quel asset depuis le panneau Assets et déposez-le sur la propriété qui en a besoin dans Entity Details. Par exemple, un matériau sur un MaterialComponent, une police sur un texte 3D ou un son sur un SoundEmitter3D. C’était déjà possible avec les listes déroulantes, mais le glisser-déposer est bien plus confortable et rapide. Les visualiseurs d’assets utilisent les mêmes éditeurs de propriétés : vous pouvez donc aussi déposer une texture sur un matériau dans le visualiseur de matériaux et voir le résultat immédiatement.

Organiser votre contenu est également plus simple. L’arborescence du Project Explorer prend désormais en charge le glisser-déposer de dossiers, plusieurs à la fois si vous le souhaitez, et vous pouvez faire glisser des assets sur un dossier de l’arborescence pour les y déplacer.
Glisser-déposer d’entités
Vous pouvez désormais aussi faire glisser des entités depuis le panneau Scene Hierarchy vers les propriétés de type entité des composants dans Entity Details. C’est particulièrement utile pour configurer des scènes physiques : la propriété Connected Body des contraintes, qui relie un corps à un autre, se définit en faisant glisser l’autre entité dessus. Si vous préférez, le sélecteur vous permet aussi de rechercher l’entité par son nom.

Vos propres composants peuvent en bénéficier avec une propriété de type Entity. L’attribut RenderPropertyAsEntity limite les entités acceptées à celles qui possèdent certains composants :
public class Follower : Behavior
{
// Only accepts entities with a Transform3D component
[RenderPropertyAsEntity(typeof(Transform3D))]
public Entity Target { get; set; }
}
Les références sont enregistrées par identifiant et résolues au chargement de la scène. Lorsque vous instanciez un prefab, ou que vous dupliquez ou collez des entités, elles sont remappées automatiquement afin que les copies pointent vers les entités copiées et non vers les originales.
Assets bruts via AssetsService
Pour charger et manipuler des assets depuis le code, Evergine a toujours utilisé AssetsService, qui regroupe tout ce qui concerne les assets. Désormais, en plus des types d’assets reconnus, il peut aussi charger des assets bruts : des fichiers dans des formats qu’Evergine ne reconnaît pas, comme un fichier de configuration JSON, un CSV de données ou votre propre format. La nouvelle méthode LoadRaw<T> vous fournit un stream du fichier et c’est vous qui décidez comment le lire, ce qui vous donne toute la flexibilité nécessaire. Vous chargez en outre les assets pris en charge et les assets bruts de la même manière, alors qu’auparavant il fallait les traiter séparément en construisant le chemin du fichier à la main.
protected override void CreateScene()
{
var assetsService = Application.Current.Container.Resolve<AssetsService>();
var text = assetsService.LoadRaw<string>(EvergineContent.Raw.hello_txt, stream =>
{
using var reader = new StreamReader(stream);
return reader.ReadToEnd();
});
var textComponent = this.Managers.EntityManager.FindFirstComponentOfType<Text3DMesh>();
textComponent.Text = text;
}
L’identifiant de l’asset provient de la classe générée EvergineContent, comme pour tout autre asset. Le résultat n’est pas mis en cache : chaque appel relit le fichier, conservez-le donc si vous en avez besoin plusieurs fois.
Améliorations générales
Enfin, quelques améliorations plus modestes de l’interface d’Evergine Studio. Elles sont moins spectaculaires, mais elles contribuent elles aussi largement à la meilleure expérience utilisateur que l’équipe Evergine a recherchée avec cette release.
Un panneau Output dont vous pouvez copier le contenu
Nous avons réécrit le panneau Output, dans lequel l’éditeur consigne tout ce qu’il fait. Il affichait auparavant chaque message comme un élément de liste, et copier plusieurs lignes était presque impossible. Désormais, vous pouvez sélectionner directement le texte, ou faire un clic droit et utiliser Select All, pour le copier ou l’analyser avec un outil externe. Le débogage et le signalement de problèmes s’en trouvent facilités.

Plage HDR dans le Texture Viewer
Le visualiseur de textures dispose d’un nouveau contrôle de plage pour parcourir les valeurs des textures HDR, qui vont bien au-delà de 1. Ajustez la plage pour voir des détails qui n’apparaissent que dans une bande précise, comme les zones les plus claires ou les plus sombres d’une environment map.

Propriétés de type chaîne multiligne
Vous pouvez désormais éditer des chaînes multilignes depuis l’éditeur. Il suffit d’ajouter l’attribut RenderPropertyAsTextBox à la propriété de votre composant, behavior ou drawable :
[RenderPropertyAsTextBox(multiline: true, maxLength: 512, placeholder: "Custom text")]
public string DisplayTag { get; set; }
Dans Evergine Studio, la propriété apparaît sous forme de champ multiligne, avec un texte indicatif lorsqu’elle est vide et un compteur de caractères qui impose la longueur maximale.

Fermer tous les onglets
Un clic droit sur l’onglet d’un document affiche Close, Close Others et Close All. Comme dans Visual Studio, ces options fonctionnent par fenêtre : tout fermer dans une fenêtre flottante ne ferme pas les documents de la fenêtre principale.

Réinitialiser les valeurs des profils
Chaque profil (Windows, Android, Web…) peut redéfinir les paramètres des textures et les directives des shaders. Jusqu’à présent, une fois l’une de ces valeurs modifiée, il n’y avait pas de moyen simple de revenir en arrière. Les profils disposent désormais d’un bouton pour rétablir les valeurs d’origine en un seul clic.
Et aussi
- DirectX12 est le backend graphique par défaut. Evergine Studio démarre avec DirectX12 et les nouveaux projets utilisent Windows (DirectX12) comme plateforme. Les installations existantes passent à DirectX12 lors de la mise à jour, sauf si vous avez explicitement choisi Vulkan. DirectX11 reste disponible en tant que plateforme optionnelle.
- Tripo AI sur l’API v3. Tripo abandonne son API v2 ; l’intégration d’Evergine Studio utilise donc déjà la v3.
- Launcher. Vous pouvez désinstaller plusieurs versions d’Evergine à la fois, ce qui est pratique si vous testez souvent des builds nightly et preview, et le Launcher indique mieux sa progression pendant le chargement.
Essayez-le dès maintenant
Toutes ces améliorations sont disponibles dans la nouvelle release d’Evergine. Mettez à jour depuis l’Evergine Launcher, ouvrez votre projet et essayez le Play Mode, la nouvelle sélection et les manipulateurs. Si vous rencontrez un problème ou avez des idées pour améliorer Evergine Studio, faites-le-nous savoir dans notre dépôt GitHub.
