24 octobre 2024

Nouvel effet de type bibliothèque dans Evergine

La dernière release d'Evergine introduit une nouvelle fonctionnalité puissante : l'asset Library Effect. Ce nouveau type d'effet est conçu pour améliorer la lisibilité du code et permettre sa réutilisation dans tous vos projets. Lorsque vous développez plusieurs effets, vous remarquez sans doute des schémas récurrents ou des fonctions utilitaires communes que vous aimeriez réutiliser. Avec les Library Effects, c'est désormais non seulement possible, mais aussi simple.

Qu'est-ce qu'un Library Effect ?

Un Library Effect est un ensemble de variables statiques, de constantes, de directives et de fonctions réutilisables que vous pouvez référencer depuis vos effets Graphics et Compute. Il vous suffit d'inclure la bibliothèque dans vos fichiers d'effets pour centraliser la logique commune et garder un code d'effets propre et facile à maintenir.

Créer un Library Effect

Vous pouvez créer un nouveau Library Effect depuis le menu Asset d'Evergine Studio ou en faisant un clic droit dans le panneau Asset Details puis en sélectionnant l'option correspondante.

Définir un Library Effect

Chaque nouveau Library Effect doit commencer par le metatag [Begin_Library] et se terminer par le metatag [End_Library]. Les Library Effects sont compilés comme n'importe quel autre effet : vous devez donc indiquer la version du profil de compilation, comme vous le feriez pour définir des passes. Ainsi, les éventuels problèmes peuvent être détectés et débogués très tôt, avant même que la bibliothèque ne soit utilisée dans d'autres effets.

Structurer vos bibliothèques

Dans un Library Effect, vous pouvez définir les variables, constantes et fonctions communes que vous souhaitez réutiliser dans vos effets Graphics ou Compute. Dans l'exemple ci-dessous, une bibliothèque Tonemapping est créée avec la logique d'implémentation d'un ajustement colorimétrique ACES.

Utiliser un Library Effect dans d'autres effets

Pour utiliser un Library Effect dans vos effets Graphics ou Compute, il suffit de l'inclure à l'aide du metatag suivant :

[Include_Library LibraryName LibraryIdentifierNumber]

  • LibraryName : un nom lisible pour votre bibliothèque.
  • LibraryIdentifierNumber : un GUID unique qui identifie l'asset Library Effect.

L'intérêt du GUID est qu'il ne dépend pas du chemin relatif de l'asset. Vous pouvez donc déplacer vos assets de bibliothèque dans les dossiers de contenu du projet sans casser les références.

Pour inclure plus facilement une bibliothèque dans vos effets, vous pouvez faire un glisser-déposer de l'asset Library Effect depuis le panneau Asset Details vers un autre effet ouvert dans l'Effect Editor. Cette action crée automatiquement la référence dans votre code.

Exemple : utiliser la bibliothèque Tonemapping dans un effet graphique

Voici un exemple d'utilisation de la bibliothèque MyLibrary définie précédemment dans un effet graphique.

Dépendances des Library Effects et inclusions récursives

Les Library Effects peuvent également référencer d'autres Library Effects, ce qui vous permet de créer des effets plus complexes en combinant plusieurs bibliothèques. Cette approche vous aide à organiser votre code selon un arbre de dépendances logique et garantit une meilleure modularité ainsi qu'une meilleure séparation des responsabilités.

Utiliser des directives dans vos Library Effects

Vous pouvez utiliser des directives dans vos Library Effects pour contrôler le flux de votre code HLSL, ce qui permet de créer plusieurs variantes de votre bibliothèque en fonction des valeurs de ces directives.

Lorsque vous importez un Library Effect dans votre effet Graphics ou Compute, ses directives sont également importées et fusionnées avec celles de l'effet lui-même et de toutes ses bibliothèques dépendantes. Vous obtenez ainsi un groupe unique et unifié de directives que l'effet peut utiliser.

Gérer les erreurs avec l'Effect Analyzer

L'Evergine Effect Editor s'enrichit d'un nouvel Effect Analyzer qui fournit des informations détaillées sur les nouveaux metatags [Include_Library] et vous aide à gérer les problèmes qui peuvent survenir lorsque vous travaillez avec des Library Effects. Voici quelques cas courants et la façon dont l'Effect Analyzer les traite :

  1. Référence non résolue : si une bibliothèque incluse possède un Library Identifier Number incorrect, l'analyseur signale que la référence à la bibliothèque ne peut pas être résolue.
  2. Erreur de compilation de la bibliothèque : si votre Library Effect contient une erreur de code, l'analyseur met en évidence la ligne d'inclusion dans votre effet principal et affiche l'erreur dans la bibliothèque elle-même.
  3. Problèmes de références croisées : si un effet inclut une bibliothèque qui inclut elle-même une autre bibliothèque et qu'une dépendance cyclique est détectée, l'analyseur signale un problème de référence croisée.

Conclusion

L'arrivée des Library Effects dans Evergine ouvre de nouvelles possibilités pour le développement d'effets, en vous permettant de mieux structurer, optimiser et réutiliser votre code HLSL. Grâce à la prise en charge des inclusions récursives, des directives et à une gestion des erreurs améliorée, les Library Effects offrent un ensemble d'outils puissant pour construire des pipelines de rendu sophistiqués.

Essayez-les et découvrez comment ils peuvent simplifier votre processus de développement de shaders !

Jorge Canton
Auteur
Jorge Cantón
Plain Concepts Research