Volumes : fumée, feu et liquides

Un volume est une boîte de voxels plutôt qu’une surface : un panache de fumée, une flamme, une explosion, de l’eau. Pixor lit les fichiers .vdb de Blender, EmberGen et Houdini, et en propose quelques-uns à lui pour quand vous n’avez pas d’outil de simulation.

Un volume n’a pas de géométrie. Il est dessiné en faisant avancer un rayon à travers lui pour chaque pixel, sur le processeur, et le résultat entre dans la même image que le modèle — si bien qu’une flamme se place devant une main, qu’un personnage se tient dans la fumée, et que les bandes, les traits et le nettoyage le traitent exactement comme tout le reste.

En ajouter un

Dans l’étape Scène, le menu + de l’Arborescence, sous Un volume :

Bouffée une bouffée de fumée ronde
Flamme chaud et étroit en bas, froid et large en haut
Nuage large, plat en dessous, bosselé au-dessus
Brume fin, bas et régulier
À partir d’un fichier .vdb… une simulation de Blender, EmberGen ou Houdini

Un volume est un nœud Volume du graphe de scène, et sa ligne dans l’Arborescence est ce même nœud : une Ligne après lui est une rangée de volumes, chacun placé par sa copie, et un volume relié à rien n’est pas dans la scène. Ses réglages sont aussi sur le nœud (pxr project scene game.pixor --set flame.voxels=48, par le nom du volume).

En ligne de commande : --volume flame:0.5,0.8,0.5:0,0.55,0, où les nombres sont la taille puis la position, en mètres. Un chemin vers un .vdb fonctionne au même endroit : --volume smoke.vdb:1.2.

Porté par un os, un volume va où va l’os dans chaque clip — la flamme d’une torche dans une main — et reste droit, comme le feu ; sa position est alors mesurée depuis l’os. En ligne de commande, @BONE à la fin : --volume flame:0.25:0,0.05,0@hand.r.

Porté par l’émetteur d’un effet, un volume fait partie de cet effet : il est dessiné sur les rangées propres à l’effet, dès la première image de l’effet, où que se trouve l’émetteur — sur son os, ou là où les clés d’un clip le déplacent — et sur aucune autre rangée. La fumée d’une explosion, le feu d’un sort. Sa position est alors mesurée depuis l’émetteur. En ligne de commande, @effect:N pour le N-ième effet du projet : --effect explosion --volume puff:1.5@effect:1.

Rendu

Ces réglages sont sous Rendu dans l’Inspecteur du volume.

  • Épaisseur est la quantité de volume dont un pixel a besoin pour être dessiné. Plus haut donne une forme plus serrée et plus dure ; plus bas, une forme plus vaporeuse.
  • Bord doux indique la largeur du bord effiloché. Le bord est dissous par un tramage ordonné ancré au volume lui-même, jamais fondu, si bien que chaque pixel reste sur la palette et que le motif ne grouille pas quand le volume tourne.
  • Ombre propre indique à quel point le volume assombrit là où la lumière doit le traverser.
  • Couleur est celle du volume lui-même, et sa rampe est construite à partir d’elle. Couleur chaude est la couleur de la partie qui brûle ; la régler identique à la couleur signifie que rien ne brûle, ce que veut la fumée. Brille par-dessus indique à quel point une partie doit être chaude avant de prendre la couleur chaude quelle que soit la lumière.
  • Voxels indique la finesse du découpage du volume le long de son plus grand côté. Un pixel de sprite demande un ou deux voxels : davantage ne fait que scintiller, car un voxel différent remporte le pixel à chaque image. Une simulation en 256³ est réduite à cette valeur au chargement, c’est pourquoi un panache à 32 px reste stable.
  • Échantillons est le nombre de points d’un rayon examinés par voxel. Deux suffisent aux tailles de sprites ; davantage est plus doux et plus lent.

Les volumes ne prennent pas d’éclat : un nuage n’en a pas, et la densité à partir de laquelle ils sont ombrés est assez irrégulière pour pétiller si on leur en permettait un.

Séquences : donner du mouvement

Un .vdb est un volume fixe. Une simulation écrit un fichier par image — fire_0001.vdb, fire_0002.vdb, etc. — et indiquer le premier à Pixor joue les suivants.

Dans la section Séquence du volume :

Images combien de fichiers lire, en comptant à partir de celui que vous avez ouvert
Un sur prendre un fichier sur N : une simulation est généralement écrite avec plus d’images qu’un sprite n’en veut
Boucler sur fondre ce nombre d’images de la fin vers le début, pour que le sprite tourne en boucle sans saut. Ces fichiers deviennent le fondu et ne sont pas joués : cinq fichiers avec un fondu d’un donnent quatre images

En ligne de commande, la séquence suit la taille et la position : --volume fire_0001.vdb:1.5::24,2,4 — 24 fichiers, un sur deux, les quatre derniers fondus dans le premier.

Une séquence se joue en même temps que le mouvement que la planche a déjà : placez un feu à côté d’un cycle de marche et les images du feu sont celles de la marche. Quand rien d’autre ne bouge, la séquence est le mouvement et reçoit sa propre action, appelée volume.

Chaque image est placée par la même transformation, tirée de la boîte que remplit toute la séquence, si bien qu’un panache qui grandit ne rétrécit pas l’image à chaque image. Cela signifie aussi que Taille est la taille de toute la séquence, pas celle de sa première image.

Une séquence n’est jamais en mémoire en entier : chaque fichier est lu une fois pour trouver cette boîte, puis à nouveau quand la planche ou l’aperçu atteint son image, les trois dernières étant conservées. Une longue simulation coûte du temps de lecture, pas de la mémoire.

Ce que lit Pixor

Les fichiers .vdb contenant des grilles de flottants ou de vecteurs dans l’arbre habituel, avec des valeurs stockées en clair, zippées ou compressées en Blosc-LZ4 (découpées ou non en un flux par octet, comme les écrivent Blosc 1.14 et les versions suivantes), toutes ou seulement les actives — c’est ce qu’écrivent Blender, EmberGen, Houdini et les outils d’OpenVDB lui-même. Pixelise une grille nommée density, smoke, fog ou d, puis temperature, flame, heat ou fire pour la partie chaude, puis velocity pour le mouvement qu’utilise la passe anti-scintillement. La surface d’un liquide (un level set) est lue comme une épaisseur à bord net, pleine de part en part.

Tout ce que Pixor ne peut pas lire est signalé nommément au lieu de ressortir faux : un autre compresseur, un autre type d’arbre, une transformation cisaillée. pxr inspect fire.vdb affiche les grilles d’un fichier, leur taille et la taille de leurs voxels.

Ce qui n’existe pas encore

  • Les liquides sont lus et dessinés comme un volume, sans écume ni reflet. Une nappe d’eau avec les deux, c’est le nœud Eau du monde (Mondes).

Ce que décrit cette page se trouve dans la version complète ; la démo gratuite dans le navigateur se limite au look par défaut et à la planche PNG.

Essayer dans le navigateur Obtenir Pixor