Philosophie de conception Niagara
Pourquoi réinventer les effets visuels pour l'Unreal Engine ?
L'Unreal Engine élargit sa base d'utilisateurs et est désormais utilisé dans de nombreux secteurs autres que celui du développement de jeux. En voici quelques exemples :
- Visualisation architecturale
- Design industriel, tel que le design automobile
- Production virtuelle de télévision et de film
Nos utilisateurs sont plus diversifiés que jamais, qu'il s'agisse d'étudiants en design, de petits développeurs indépendants, de grandes équipes de studios professionnels ou de personnes et d'entreprises extérieures au secteur des jeux. À mesure que nous avançons, les développeurs d'Epic ne sauront pas tout sur chaque industrie utilisant l'Unreal Engine. Nous voulions créer un système d'effets visuels (VFX) qui fonctionnerait pour tous nos utilisateurs, tous secteurs confondus.
Nos objectifs pour un nouveau système d'effets visuels
Nous voulions créer un nouveau système qui donnerait à tous les utilisateurs la souplesse nécessaire pour créer les effets dont ils ont besoin. Nos objectifs pour notre nouveau système d'effets visuels étaient les suivants :
- Il permet aux artistes d'avoir le contrôle total de la situation.
- Il est programmable et personnalisable sur chaque axe.
- Il fournit de meilleurs outils de débogage, de visualisation et de performance.
- Il prend en charge les données provenant d'autres parties de l'Unreal Engine, ou de sources externes.
- Il facilite l'évolution de l'utilisateur.
Comment Niagara atteint ses objectifs
Partage des données
Le contrôle total de l'utilisateur commence par l'accès aux données. Nous voulons que l'utilisateur puisse utiliser n'importe quelle donnée de n'importe quelle partie de l'Unreal Engine, ainsi que des données issues d'autres applications. Nous avons donc décidé de tout exposer à l'utilisateur.
Données utiles de particule
Afin d'exposer toutes ces données à l'utilisateur, nous devons établir comment quelqu'un peut utiliser ces données. Les espaces de noms servent des conteneurs pour les données hiérarchiques. Par exemple, Emitter.Age contient les données relatives à un émetteur ; Particle.Position contient les données relatives à une particule. Notre carte de paramètres est la charge utile de la particule qui porte tous les attributs de la particule. De ce fait, tout devient facultatif.
Plusieurs types de données peuvent être ajoutés
Tout type de données peut être ajouté comme paramètre de particule. Vous pouvez ajouter des structures complexes, des matrices de transformation ou des drapeaux booléens. Vous pouvez ajouter ces données ou tout autre type de données, et les utiliser dans votre simulation d'effets.
Combinaison du Paradigme de graphique et du Paradigme de pile
Le Paradigme de pile (comme celui utilisé dans Cascade) et le Paradigme du graphique (comme celui utilisé dans Blueprints) présentent tous deux des avantages. Les piles offrent aux utilisateurs un comportement modulaire et une bonne lisibilité. Les graphiques permettent aux utilisateurs de mieux contrôler leur comportement. Notre nouveau système d'effets combine les avantages de ces deux paradigmes.
Hiérarchie pour la structure hybride de Niagara
Modules
Les modules fonctionnent selon un paradigme de graphique : vous pouvez créer des modules avec HLSL dans l'Éditeur de script en utilisant un graphique de nœuds visuel. Les modules parlent de données communes, encapsulent les comportements et s'empilent les uns sur les autres.
Émetteurs
Les émetteurs fonctionnent selon un paradigme de pile : ils servent de conteneurs pour les modules et peuvent s'empiler pour créer divers effets. Un émetteur est à usage unique, mais il est aussi réutilisable. Les paramètres sont transférés au niveau de l'émetteur à partir des modules, mais vous pouvez modifier les modules et les paramètres dans l'émetteur.
Systèmes
Comme les émetteurs, les systèmes fonctionnent dans un paradigme de pile, et fonctionnent également avec une timeline de Sequencer - que vous pouvez utiliser pour contrôler le comportement des émetteurs dans le système. Un système est un conteneur pour les émetteurs. Le système combine ces émetteurs en un seul effet. Lorsque vous éditez un système dans le Niagara Editor, vous pouvez modifier et remplacer tout paramètre, module ou émetteur présent dans le système.
Pile de sélection et groupes de pile de Niagara
La simulation de particules dans Niagara fonctionne conceptuellement comme une pile : la simulation va du haut de la pile vers le bas, et exécute les modules dans l'ordre. De manière cruciale, chaque module est affecté à un groupe qui décrit le moment où le module est exécuté. Par exemple, les modules qui initialisent les particules ou qui agissent lorsqu'une particule apparaît sont dans le groupe Apparition de particule.
Au sein de chaque groupe, il peut y avoir plusieurs étapes, qui sont appelées à des moments particuliers du cycle de vie d'un système. Les émetteurs, les systèmes et les particules ont tous des étapes Apparition et Mise à jour par défaut. Les étapes d'apparition sont invoquées dans la première image où ce groupe existe. Par exemple, les systèmes invoquent leur étape Apparition lorsque le système est instancié pour la première fois dans le niveau et activé. Les particules invoquent leur étape Apparition chaque fois que l'émetteur émet une particule, et les instructions Apparition seront exécutées pour chaque nouvelle particule créée. Les étapes de mise à jour sont invoquées dans chaque image où le système, l'émetteur ou la particule est actif.
Il existe également des étapes avancées, telles que les Événements et Étapes de simulation, qui peuvent être ajoutées aux flux d'Apparition et de Mise à jour. *les Événements sont invoqués chaque fois qu'une particule génère un nouvel événement et qu'un émetteur est configuré pour gérer cet événement. Dans la mesure du possible, les étapes du gestionnaire d'événements se produisent dans la même image, mais après l'événement d'origine. Les Étapes de simulation sont une fonctionnalité avancée du processeur graphique. Cette fonctionnalité permet à plusieurs étapes d'Apparition et de Mise à jour de se produire en séquence, et est utile pour construire des structures complexes comme les simulations de fluides.
Un module est un élément, mais un élément n'est pas un module. Les Modules sont des éléments modifiables qu'un utilisateur peut créer. Les Éléments désignent les parties d'un système ou d'un émetteur que l'utilisateur ne peut pas créer. Des exemples d'éléments sont les propriétés du système, les propriétés de l'émetteur et les moteurs de rendu.
Étapes, Groupes, Espaces de noms et Encapsulation de données
En ajoutant chaque module à une étape (Mise à jour, Apparition, Événement ou Simulation) dans un groupe (Système, Émetteur ou Particule), vous pouvez contrôler quand un module s'exécute ainsi que les données sur lesquelles il opère. Les groupes de piles sont associés à des Espaces de noms qui définissent les données que les modules de ce groupe peuvent lire ou écrire.
Par exemple, les modules qui s'exécutent dans le groupe Système peuvent lire et écrire dans les paramètres de l'Espace de noms du système, mais ne peuvent lire que les paramètres qui appartiennent aux Espaces de nom du Moteur ou de l'Utilisateur. Au fur et à mesure que l'exécution descend dans la pile, du groupe Système au groupe Émetteur, les modules qui s'exécutent dans le groupe Émetteur peuvent lire et écrire des paramètres dans l'Espace de nom Émetteur, mais ne peuvent lire que des paramètres dans les Espaces de nom Système, Moteur et Utilisateur. Les modules du groupe Particule ne peuvent lire que les paramètres des Espaces de noms Système et Émetteur.
Étant donné que les modules des groupes d'Émetteur peuvent lire des paramètres dans l'Espace de noms du Système, une simulation pertinente pour tous les émetteurs peut être effectuée une fois par les modules du groupe du Système, et les résultats de cette simulation (stockés dans l'Espace de nom du Système) peuvent être lus par les modules du groupe Émetteur dans chaque émetteur individuel. Cela se poursuit avec les modules de groupe Particule qui peuvent lire à partir des paramètres dans les Espaces de noms Système et Émetteur. Consultez le tableau ci-dessous pour une représentation plus concise de ces relations.
Groupe de modules | Lire à partir d'un espace de noms | Écrire dans un espace de noms |
---|---|---|
Système | Système, Moteur, Utilisateur | Système |
Émetteur | Système, Émetteur, Moteur, Utilisateur | Émetteur |
Particule | Système, Émetteur, Particule, Moteur, Utilisateur | Particule |