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.

Evergine Studio 2026.11.4.444 avec une scène ouverte

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 :

Exécution d’une scène avec Play, Pause et Step dans le Scene Viewer

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 :

La barre d’outils de la scène dans la version précédente, avec les trois options de snap

Nouvelle release :

La barre d’outils de la scène dans la nouvelle version, avec une seule option de snap et les boutons Play, Step et Stop

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 :

Translation d’une entité avec le nouveau manipulateur, qui affiche la distance parcourue

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

Rotation d’une entité avec le nouveau manipulateur, qui affiche l’angle parcouru en degrés et en radians

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.

Changement de vue avec le View Cube dans le coin du viewport

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.

Sélection au pixel près : cliquer sur chaque objet le sélectionne et dessine son contour orange

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.

Une hiérarchie sélectionnée : la théière racine avec un contour orange, et le cône et le cylindre enfants avec un contour bleu

Quelques détails supplémentaires rendent la sélection plus confortable :

Les couleurs du contour, son épaisseur, l’opacité des parties masquées et la surbrillance au survol se règlent dans Preferences > Viewport.

Les options du contour de sélection dans la section Viewport de la boîte de dialogue Preferences

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 section Services de Project Settings avec un service et ses propriétés

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.

ProjetScénarioVersion précédenteNouvelle versionRéduction
Projet videBuild complet8,90 s3,73 s58%
Projet videAucune modification8,13 s3,04 s63%
Projet videModification C#8,06 s3,06 s62%
VehiclePhysicsSampleBuild complet10,19 s4,41 s57%
VehiclePhysicsSampleAucune modification9,49 s3,63 s62%
VehiclePhysicsSampleModification C#9,42 s3,69 s61%

L’amélioration vient de la manière dont la compilation est lancée :

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.

Glisser un matériau depuis le panneau Assets vers la propriété Material d’une entité

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.

Glisser une entité depuis la Scene Hierarchy vers une propriété de type entité

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.

Texte sélectionné dans le panneau Output avec le menu Copy, Select All et Clear

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.

Une texture HDR dans le Texture Viewer avec le contrôle Range ajusté

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.

La propriété DisplayTag éditée en texte multiligne, avec le compteur 122/512

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.

Menu d’onglet avec les options Close, Close Others et Close All

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

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.

Jorge Cantón
Auteur
Jorge Cantón
Directeur de la recherche chez Plain Concepts