Rendu Volumétrique
2 mars 2022
Thibault Lambert
NanoVDB . OpenVDB . Rendu . Unreal . Volumétrique

Support d’OpenVDB dans Unreal

Étendre le support des outils et rendus volumétriques dans Unreal

Introduction

Le rendu volumétrique est de plus en plus populaire dans le domaine du rendu temps réel (e.g., nuages volumetriques, textures volumetriques, Embergen, FluidNinja etc.), même s’il reste toujours un domaine de recherche actif (e.g. ceci ou cela). OpenVDB est la référence incontestée pour stocker, manipuler et rendre des volume épars et dynamiques, mais est une librairie plutôt orientée pour l’industrie du rendu précalculé (e.g. effets spéciaux). Avec l’introduction de NanoVDB, nous avons désormais accès à une version allégée et plus performante, principalement grâce à son support des cartes graphiques, ouvrant un nouveau monde de possibilités pour des utilisations temps réel. 

Nous sommes heureux de partager un nouveau plugin Unreal qui peut importer des fichiers OpenVDB (et NanoVDB) dans Unreal, les convertit automatiquement en NanoVDB, et permet des manipulations basiques de volumes VDB dans l’éditeur. Ce plugin a été conçu pour Unreal 5, et est disponible sur github (en anglais). 

Nous pensons et espérons que ce plugin sera un bac à sable expérimental pour de nombreux utilisateurs, que cela soit pour des programmeurs ou des artistes, dans le contexte de jeux vidéo, de productions virtuelles ou même pour de la recherche ou des rendus précalculés en utilisant le pathtracer d’Unreal. Le plugin implémente toutes les couches bas niveau permettant aux utilisateurs d’importer simplement leur fichiers VDB et de pouvoir immédiatement jouer avec eux dans Unreal. Nous donnons également accès à une couche supplémentaire haut niveau pour pouvoir rapidement visualiser et utiliser des volumes, tout en essayant de donner un maximum de liberté aux utilisateurs pour pouvoir expérimenter leurs propres idées. 

Un exemple de rendu du nuage de Walt Disney Animation Studios sous la licence CCA-SA 3.0 Licence, avec le pathtracer d’Unreal.

Importer un fichier OpenVDB dans Unreal

Le but principal de ce plugin est de donner aux utilisateurs la possibilité d’importer facilement des fichiers OpenVDB (et NanoVDB) dans Unreal. Pour cela, il suffit de copier le plugin dans le répertoire Plugin de votre projet, et de recompiler Unreal (ou de directement prendre les binaires précompilés). Une fois activé, les fichiers OpenVDB seront directement reconnus par Unreal, et en importer un est aussi simple que faire glisser le fichier dans le panneau des ressources d’Unreal. 

Durant l’import, tous les fichiers VDB sont convertis en NanoVDB, les rendant non-modifiables mais plus performants à rendre et échantillonner. Parce que les fichiers VDBs peuvent contenir plusieurs Grilles, nous avons pris la décision d’importer chaque grille comme une ressource différente. Ne nous supportons que les LevelSets (quelquefois appelés Signed Distance Fields, ou surface OpenVDB) et les FogVolumes pour le moment. 

 

Utiliser des fichiers VDB dans Unreal

Les choses sérieuses peuvent maintenant démarrer, et nous pouvons désormais faire des expériences et tests avec ces données/grilles NanoVDB. Nous fournissons plusieurs façons de jouer avec ces données NanoVDB, et essayons de rendre ces outils aussi génériques que possible pour que les artistes puissent explorer le maximum de possibilités.

VdbActor

La manière la plus simple et courante d’utiliser un fichier VDB est de l’afficher dans la vue 3D. Faire glisser une ressource VDB (appelée VdbVolume) dans la vue 3D va créer un VdbActor avec un VdbComponent associé. Les VdbActors n’apparaitront dans la vue 3D que s’ils utilisent un matériel Volume. 

Ce mode de rendu est compatible avec des fonctionnalités Unreal intégrées (mais pas toutes) comme la sélection, l’utilisation des matériaux, la lumière directionnelle etc. Le moteur de rendu d’Unreal n’est pas simple à modifier depuis un plugin, donc ajouter des fonctionnalités manquantes peut s’avérer difficile voire impossible dans certains cas sans pouvoir modifier le code source du moteur. 

  • LevelSets 

Bien que très différents, les LevelSets sont des surfaces opaques qui ressemblent fortement à des maillages polygonaux classiques. Ils sont plutôt “simples” à afficher et sans équivoques

Un levelset du dragon (merci au Stanford Computer Graphics Laboratory) avec un simple matériel de position.
  • FogVolumes

Les fumées FogVolumes sont beaucoup plus complexes. Les rendre de manière naïve (un voxel à la fois) est malheureusement beaucoup trop couteux et il nous faut trouver des solutions plus optimales et approximatives. Une approche habituelle est d’utiliser des lancers de rayons et de lire les informations le long du rayon. Nous fournissons un exemple d’implémentation, mais celle-ci ne donne ni les meilleurs résultats visuellement, ni les meilleures performances. C’est pour cela que nous donnons aux utilisateurs plusieurs manières (avec ou sans code) de modifier ou changer cette méthode, afin que chacun puisse expérimenter sa propre idée le plus facilement possible. Veuillez vous référer à la documentation pour plus d’informations. 

Un rendu simple du lapin de Stanford, disponible sur le site d’OpenVDB.

Niagara 

Nous offrons également une interface sur mesure pour Niagara, qui permet d’échantillonner et parcourir n’importe quelles données VDB via les modules Niagara d’Unreal. Pour des opérations plus complexes, vous pouvez également utiliser les nœuds CustomHLSL, comme expliqué dans la documentation. 

Échantillonnage du dragon Stanford dans un module Niagara pour pouvoir placer des particules sur la surface du volume.

Recherche

Comme mentionné précédemment, implémenter et supporter les fonctionnalités basiques d’Unreal peut s’avérer être fastidieux. Pour les programmeurs qui ne sont pas intéressés par ces intégrations superflues mais qui veulent tout de même pouvoir expérimenter des algorithmes sur des fichiers VDB dans un moteur de jeu à la pointe de la technologie, nous proposons un autre mode de rendu, appelé “Recherche” (Research en anglais). 

Coder, expérimenter, modifier le rendu et écrire des shaders est significativement plus simple en utilisant ce mode. Les itérations sont beaucoup plus rapides (notamment moins de compilations de shaders), et nous avons également mis en place le code permettant à chacun de tester son propre denoiser. 

Rendu du lapin de Stanford avec le mode expérimental de “Recherche”, permettant de tester plus rapidement et facilement vos propres algorithmes.

Pour aller encore plus loin, nous avons rajouté un support limité sur le pathtracer d’Unreal, pour pouvoir rendre interactivement et progressivement des volumes. Ce mode est utile pour tester des techniques souvent associées au rendus précalculés, permettant d’obtenir de images de qualité supérieure à tous les résultats temps réel. C’est personnellement mon mode préféré, car il permet de tester plus rapidement des techniques déjà éprouvées dans d’autres industries, d’obtenir des résultats physiquement plausibles, le tout dans des délais très raisonnables. Il peut être utilisé comme un mode photo, pour calculer une cinématique ou une bande annonce, ou tester le dernier papier scientifique sur le sujet etc. 

Nous testons différents paramètres pour rendre le nuage Disney, sous la licence CCA-SA 3.0.

 

Résumé des fonctionnalités

  • Importe des fichiers OpenVDB 
  • Importe des fichiers NanoVDB 
  • Convertit tous les fichiers VDB en NanoVDB, une fois importés 
  • Visualisation dans la vue 3D 
  • Support des matériaux Unreal  
  • Support de la première lumière directionnelle, et de la lumière ambiante 
  • Les modules Niagara peuvent échantillonner des grilles VDB 
  • Possibilité de convertir une grille en Texture3D 
  • Support (limité) du pathtracer, pour des résultats plus couteux mais de meilleure qualité 
  • Une intégration plus classique avec le mode “Recherche”, pour des expérimentations plus rapides

Conclusion

Nous espérons que ce plugin pourra être utile autant pour les programmeurs que pour les artistes. Nous sommes réellement enthousiastes d’avoir et de donner accès à ces nouvelles technologies d’outils volumétriques dans Unreal. Même si rendre un effet volumétrique reste toujours couteux, nous croyons que la qualité et la résolution des volumes vont grandement s’améliorer dans les prochaines années, avec des algorithmes de plus en plus efficaces et performants, des meilleurs denoisers, ainsi qu’avec du matériel informatique de plus en plus puissant. Nous serons très heureux de voir si la communauté embrasse cet effort et notre plugin, et nous serons heureux de continuer ces efforts s’il existe un intérêt dans cette communauté. 

Author

Thibault Lambert est ingénieur graphique senior en R&D et a rejoint Eidos-Montréal en 2018. Au cours des 14 dernières années, il a travaillé à la fois dans l’industrie des effets spéciaux et celle des jeux vidéo, et a eu la chance de travailler sur plusieurs films et jeux AAA à succès. Il est passionné par le graphisme en temps réel et œuvre à combler autant que possible l’écart entre le rendu hors ligne et le rendu en temps réel, apportant les technologies du temps réel à l’industrie cinématographique et reproduisant des techniques hors-ligne complexe en temps réel dans les jeux vidéo. 

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert