From BlenderWiki

Jump to: navigation, search
Blender3D FreeTip.gif
IMPORTANT! Do not update this page!
We have moved the Blender User Manual to a new location. Please do not update this page, as it will be locked soon.

Traduction effectuée d’après cette révision de la version anglaise.

Simulation de fluide

Mode: Modes Object et Edit (mesh)

Panneau: Sous-contexte PhysicsFluid

Raccourci clavier: F7

Description

Pendant le modelage d’une scène avec Blender, certains objets peuvent être marqués comme participant à la simulation de fluide, par exemple comme fluide, ou comme obstacle… La bounding box (“boîte englobante”) d’un autre objet sera utilisée pour définir une région parallélépipédique dans laquelle aura lieu la simulation (région appelée “simulation domain”, ou “domaine de simulation”, ou encore “domaine de fluide”). Les paramètres globaux de la simulation comme la viscosité et la gravité sont réglés pour cet objet domaine.

Avec le bouton BAKE, la géométrie et les réglages sont exportés vers le simulateur, et la simulation de fluide est effectuée, produisant un mesh de surface plus une prévisualisation, pour chaque images de l’animation, et sauvegardant le tout sur le disque dur. Dès lors, le “mesh-fluide” approprié pour l’image courante est chargé depuis le disque et affiché ou rendu.

Exemple d’animation de rupture d’un barrage.


Processus

En général, vous suivrez ces étapes :

  1. Modéliser la scène (objets, matériaux, lumières, caméra).
  2. Désigner la portion de la scène ou aura lieu la simulation de fluide (le domaine).
  3. Spécifier la fonction de chaque objet en relation avec le fluide (Inflow, Outflow, Obstacle, …).
  4. Créer la(les) source(s) du fluide, et donnez-leur un matériau, une viscosité et une vélocité initiale.
  5. “Cuire” (Bake) une première simulation.
  6. Revoir les réglages si nécessaire, en enregistrant les modifications.
  7. “Cuire” la simulation finale.

Quand vous “cuisez”, La partie de l’en-tête de la fenêtre User Preferences (en haut) qui affiche la version de Blender se transforme en barre de progression, avec le nombre d’images déjà “cuites”, et le nombre total d’images à “cuire”. La “cuisson” prend beaucoup de puissance CPU (et de temps). Ne la regardez pas : nous savons tous qu’une casserole pleine d’eau ne bout jamais si on la regarde, un gâteau ne cuit jamais, et regarder la “cuisson” d’une simulation de fluide c’est comme de regarder l’herbe pousser… En bref : “cuisez” de nuit !

À cause des possibilités de liens et relations entre scènes, il ne peut y avoir qu’un seul domaine par fichier .blend.

Options

Options basiques (et fréquemment utilisées) pour la simulation de fluide.
Options avancées, moins souvent utilisées.
Domain/Fluid/Obstacle/Inflow/Outflow/Particle/Control
Sélectionner une de ces options détermine comment l’objet ainsi activé sera utilisé durant la simulation. Chaque bouton définit une fonctionnalité/interaction différente, et chacun active des options supplémentaires décrites ci-après.
Rendu du Mesh
Si le mesh a des modificateurs (modifiers), son exportation vers le moteur de fluide utilisera les réglages de rendu de ceux-ci. En fonction de ces réglages, les temps de calculs et/ou la mémoire utilisée par ceux-ci peuvent augmenter de manière exponentielle. Par exemple, lorsque vous utilisez un mesh en mouvement, avec Subsurf, comme obstacle, cela peut aider de réduire le niveau de subdivision, voir de l’annuler. Quitte à, une fois la simulation bien au point, augmenter de nouveau ce réglage pour obtenir un résultat plus réaliste.


“Domain”

Une tasse de 10cm à une Resolution de 70.
Une tasse de 10cm à une Resolution de 200.

La boîte englobante de l’objet sert de frontières à la simulation. Tous les objets du fluide doivent être dans le domaine. Les objets du fluide en dehors du domaine ne participeront pas à la simulation. Pas la plus petite gouttelette ne peut sortir de ce domaine, comme si le fluide était contenu dans un espace cubique par d’invisibles champs de force. Il ne peut y avoir qu’un seul objet domaine de simulation de fluide par scène. Les longueurs des côtés de la bounding box peuvent être différentes.

La forme de l’objet n’a aucune importance, car c’est sa boîte englobante – par définition toujours parallélépipédique – qui sert de domaine. Il n’y a donc normalement aucune raison de choisir un objet autre qu’un Cube (éventuellement étiré !) comme domaine. Si vous avez besoin d’obstacles, ou d’autres limites qu’une boîte au fluide, vous devrez insérer des objets supplémentaires en tant qu’Obstacles, dans le domaine de simulation.

Cet objet sera remplacé par le fluide au cours de la simulation.

“Resolution”

La granularité, la précision du (mesh) résultat de la simulation de fluide. Il s’agit probablement du paramètre le plus important, car il détermine la quantité de détails dans le fluide, la mémoire vive et l’espace disque utilisés, ainsi que le temps de calcul. Notez que les besoins de mémoire vive augmentent très rapidement : une résolution de 32 nécessite 4Mo, 64, 30Mo, et 128 demande plus de 230Mo. Faites attention à régler cette résolution suffisamment bas, en fonction de votre quantité de mémoire vive, pour éviter de planter Blender. Rappelez-vous également que beaucoup de systèmes d’exploitation limitent la quantité de mémoire qui peut être allouée à un unique processus, comme Blender, même si la machine en contient bien plus. À vous de découvrir quelles sont les limitations de votre système.

Assurez-vous d’utiliser la résolution appropriée à la taille du domaine dans le “monde réel” (celle-ci, en mètres, est modifiable dans les réglages avancés, Ad). Si le domaine n’est pas cubique, la résolution choisie sera appliquée sur le côté le plus long. La résolution sur les deux autres axes sera réduite en accord avec leurs longueurs respectives (notez qu’un domaine non-cubique nécessitera donc moins de mémoire qu’un domaine cubique, à résolution égale).

“Preview-Res.”

La résolution de prévisualisation, elle détermine la résolution du mesh visible dans la fenêtre 3D. Celui-ci ne sera pas rendu ; notez que même s’il “n’y a rien à voir” sur la prévisualisation, il peut y avoir un fluide trop “fin” pour être calculé à cette résolution, tout en restant visible au rendu.

Temps “Start” et “End”

Start est l’instant de départ, de début, de la simulation (en secondes). Cela permet de faire démarrer l’animation dans Blender après le début de la simulation de fluide. Les résultats de la simulation avant cet instant ne sont pas sauvegardés.

Par exemple, si vous voulez que le fluide semble avoir déjà coulé durant quatre secondes à la première “image” de donnée, vous entrerez 4.0 dans ce contrôle.

End est l’instant d’arrêt, de fin, de la simulation (en secondes).

Les temps de début et de fin n’ont rien à voir avec la quantité de frames “cuites”, ils sont basés sur les forces physique et la viscosité du fluide.

Le baking commence toujours à l’image #1 :
Le simulateur de fluide ne tient pas compte du réglage Sta dans le panneau Anim, il commencera toujours à “cuire” à partir de la frame 1.
Si vous souhaitez que la simulation démarre après la première image, vous devez définir des clés d’animation pour les objets Fluid dans votre domaine, afin qu’ils soient inactifs jusqu’à l’image de début de simulation désirée. Voyez ci-dessous pour plus d’informations.
Le baking se termine toujours à l’image End réglée dans le panneau Anim :
Si vous rendez à 25 fps (PAL), et que votre temps de fin est à 4.0 secondes, alors vous devriez (si votre temps de départ est 0.0) régler la fin de votre animation à l’image 4.0 × 25 = 100.
Les temps “Start” et “End” sont exprimés en temps-simulation (en secondes) :
Si vous réglez le temps Start à 3.0 et le temps End à 4.0, vous simulerez une seconde de mouvement du fluide. Cette seconde sera “étendue” sur le nombre d’images défini dans votre réglage d’animation End du panneau Anim.
Cela signifie, par exemple, que si vous avez réglé Blender pour qu’il rende 250 images à 25 fps (contexte Scene → sous-contexte Render → panneaux Anim et Output), le fluide semblera avoir couler pendant déjà 3.0 secondes au départ de l’animation, et coulera “au ralenti” (à un dixième de la vitesse normale), car 1.0 seconde de simulation sera “étendue” sur 10 secondes de vidéo. Pour corriger cela, modifiez le temps de fin à 3.0 + 10.0 = 13.0, pour que cela corresponde aux 250 images à 25 fps. Maintenant, la simulation sera en temps réel, puisque vous aurez dix secondes de simulation de mouvements de fluide pour dix secondes d’animation. Tout cela vous permet donc d’avoir un contrôle sur la vitesse de la simulation.


“Disp.-Qual.”

Quelles données utiliser pour l’affichage dans Blender (premier menu déroulant) et pour le moteur de rendu (deuxième menu déroulant) :

  • Geometry : Utiliser la géométrie originale (avant la simulation).
  • Preview : Utiliser le mesh de prévisualisation.
  • Final : Utiliser le mesh haute définition final.

Si aucune donnée n’est trouvée (simulation pas encore “cuite”, par ex.), le mesh de départ sera affiché par défaut.

Après “cuisson” du domaine, il est (normalement) affiché en prévisualisation dans les vues 3D de Blender. Pour revoir le système d’origine, sélectionnez Geometry dans le menu déroulant de gauche.

Dossier de “baking”

INDISPENSABLE ! Répertoire et préfixe de fichier où stocker les données calculées. C’est un peu la même chose que les réglages de sortie du moteur de rendu, excepté pour la sélection d’un fichier existant : lorsque vous sélectionnez un mesh antérieurement calculé (par ex. “untitled_OBcube_fluidsurface_final_0132.bobj.gz”), le préfixe sera automatiquement réglé (“untitled_OBcube_” pour notre exemple). En modifiant ce préfixe, vous pouvez disposer de plusieurs simulations différentes (différences de réglages…) entre lesquelles vous pouvez naviguer rapidement.

La valeur par défaut est “/tmp/”, qui ne correspond probablement pas à ce que vous voulez. Choisissez un nom de dossier et un préfixe de fichier appropriés, afin que ces fichiers soient stockés au bon endroit et nommés de façon à ce que deux simulations de fluide différentes n’entrent pas en conflit (si vous ne souhaitez spécifier ici qu’un nom de dossier, c-à-d pas de préfixe de fichier, n’oubliez pas le “/” final).

Bouton “BAKE”

Exécute la simulation de fluide. L’interface (GUI, pour “Graphical User Interface”) de Blender va alors se figer et affichera juste l’image en cours de simulation. Tapez Esc pour interrompre la simulation. Une fois les calculs finis, il y aura trois fichiers par frame dans le répertoire de sortie : deux *.bobj.gz (un pour la qualité Final, un pour la qualité Preview), plus un *.bvel.gz (pour la qualité Final).

Notes…

Libérer les anciennes solutions “cuites”
Effacer le contenu du répertoire “Bake” est une façon “brutale” de réaliser cela, mais soyez prudents : si plus d’une simulation utilise le même dossier, vous risquez de tout effacer en même temps ; pensez également à leur attribuer des préfixes différents, si vous ne voulez pas qu’elles se “recouvrent”.
Réutiliser les “cuissons”
Choisir une simulation antérieurement “cuite” (en sélectionnant, par ex., un de ses fichiers) affichera automatiquement le mesh de cette simulation, quel que soit celle à laquelle appartient le domaine actuel. Vous pouvez ainsi, en créant juste un domaine, réutiliser une vieille simulation en pointant simplement sur un de ses fichiers.
Sélectionner un domaine “cuit”
Après cuisson, un domaine “devient” le “mesh-fluide”. Pour sélectionner de nouveau le domaine (pour en modifier les paramètres, le recuire, …), sélectionnez (cliquez RMB Template-RMB.png) le mesh. Vous pouvez alors retravailler votre domaine avant de le “recuire”.


Boutons “St”/“Ad”/“Bn”/“Par”

Jusqu’à présent, nous étions dans les boutons Standard. Cliquer sur un autre de ces boutons affichera un autre “panneau” (groupe de contrôles : Standard, Ad pour “Advanced” – “avancé”, Bn pour “Boundary” – “limites”, et Particule), qui affichera des options plus avancées, souvent bien réglées par défaut.

Standard
Les réglages de ce groupe ont déjà été décrits ci-dessus…
Advanced
Vecteur Gravity
L’intensité et la direction de l’accélération gravitationnelle (en m.s-2). La partie “principale” devrait être négative sur l’axe des Z (-9.81 m.s-2 pour la gravité terrestre).
Attention : L’ensemble de ces trois valeurs ne devrait pas être nul, sinon le fluide ne bougera pas (comme un liquide en apesanteur). Il doit y avoir au moins une faible valeur pour l’une des directions.
Viscosity
“L’épaisseur” du fluide, en fait, la force nécessaire au déplacement d’un objet d’une certaine surface à une certaine vitesse, à travers ce fluide. Vous pouvez soit entrer directement une valeur, soit sélectionner une des présélections dans la liste déroulante (Water – de l’eau, Oil – de l’huile [SAE 50 ?], Honey – du miel [liquide !]).
Si vous entrez directement une valeur, notez que la viscosité (dynamique) d’un fluide du monde réel est mesurée en Pascal-seconde (Pa.s) – ou en Poise (P, valant 0.1 Pa.s, du français Jean-Louis Poiseuille, auteur des lois de “l’écoulement laminaire des fluides visqueux”), et centiPoise (cP, valant 0.001 Pa.s). Blender utilise pour sa part la viscosité cinématique (qui est la viscosité dynamique, en Pa.s, divisée par la masse volumique du fluide, en kg.m-3, ce qui nous donne une unité en mètre carré par seconde, m2.s-1). Le tableau ci-dessous vous donne quelques exemples de fluides avec leur viscosité dynamique en Poise, et leur viscosité cinématique.
Le format d’entrée des valeurs manuelles est à “virgule flottante” (aussi appelé “notation scientifique”) : vous spécifiez à la fois un nombre “à virgule” et un exposant, cela permet de simplifier la saisie de valeurs très petites ou très grandes. La viscosité dynamique de l’eau à 20 °C est de 1.002 cP, soit 0.001002 Pa.s ; la masse volumique de l’eau étant (à peu près) de 1000 kg.m-3, cela nous donne une valeur de viscosité cinématique à rentrer de 0.000001002 m2.s-1, soit 1.002×10-6 m2.s-1 en notation scientifique. Le verre ou l’acier fondus sont aussi des fluides, mais très visqueux : vous devriez rentrer quelque chose comme 1.0×100 (= 1.0) comme viscosité cinématique (c’est-à-dire une viscosité de l’ordre du million de centiPoises).
Notez que le simulateur n’est pas adapté aux “non-fluides”, comme des matières qui ne “coulent” pas. Régler la viscosité à une valeur très élevée ne donnera pas un comportement de corps rigide, mais peut provoquer des instabilités!
La viscosité varie
Les valeurs par défaut fournies par Blender sont considérées comme typiques pour leur fluide respectif et “rendent bien” à la simulation. Cependant, la viscosité réelle de certains fluides, particulièrement celle de ceux fortement chargés en sucres (comme du sirop de chocolat ou du miel), dépend fortement de la température et de leur concentration. La viscosité des huiles varie selon leur valeur de SAE. Le verre à température ambiante est (quasiment) solide, alors qu’à 1500 °C, il coule (presque) comme de l’eau.


NdT
Certaines valeurs données dans ce tableau me semblent incohérentes (entre autre, elles paraissent indiquer une densité du verre un milliard de fois supérieure à celle de l’eau !). Si vous vous y connaissez dans ce domaine (ce qui n’est pas vraiment mon cas), voyez cette page, et/ou laissez-moi un message.
--Mont29 14:10, 7 August 2009 (UTC)


Conversion entre viscosité dynamique et cinématique pour Blender
Fluide viscosité dynamique (en cP) viscosité cinématique (en m2.s-1, Blender)
Eau (20°C) 1.002×100 (1.002) 1.002×10-6 (0.000001002)
Huile SAE 50 5.0×102 (500) 5.0×10-5 (0.00005)
Miel (20°C) 1.0×104 (10 000) 2.0×10-3 (0.002)
Sirop de chocolat 3.0×104 (30 000) 3.0×10-3 (0.003)
Ketchup 1.0×105 (100 000) 1.0×10-1 (0.1)
Verre fondu 1.0×1015 1.0×100 (1.0)
Realworld-size
Taille “réelle” du domaine (en mètres). Si vous voulez créer une tasse de café, cela peut faire 10 cm (0.1 mètre), alors que pour une piscine, 10 m sera plus approprié. Cette taille se rapporte à la plus grande dimension de la boîte englobante du domaine.
Gridlevel
Combien de niveaux de grille adaptative utiliser pendant la simulation – régler cette option à -1 activera la sélection automatique de la valeur de ce paramètre.
Compressibility
Si vous avez des problèmes avec de grandes zones de fluide “statique” en haute résolution, cela peut aider de réduire cette valeur (notez que cela augmentera le temps de calcul).
Bn (pour “boundaries”, “limites”)
Boundary type
Il s’agit des mêmes réglages que pour les obstacles (décrits plus loin), cela déterminera si les six faces de la bounding box seront “collantes” (Noslip), “déperlantes” (Free), ou dans un état intermédiaire (Part), auquel cas vous devrez régler PartSlip Amount à votre convenance.
Surface Smoothing
Quantité de lissage à appliquer au “mesh-fluide”. 1.0 par défaut, 0.0 pour le désactiver, plus de 1.0 pour un lissage plus fort.
Surface Subdivision
Permet la création de meshes haute-résolution directement pendant la simulation (par opposition à l’utilisation a posteriori d’un modificateur Subsurf, par exemple). Une valeur de 1 signifie aucune subdivision, et chaque indentation de cette valeur résulte en un niveau de subdivision supplémentaire de chaque “voxel” de fluide (NdT : il me semble qu’un “voxel” est l’équivalent d’un pixel, mais en trois dimensions…). Les meshes résultants deviennent donc rapidement très grands, et peuvent occuper beaucoup d’espace disque. Attention à l’utilisation conjointe de fortes valeurs pour ce paramètre et Surface Smoothing – cela peut conduire à de longs temps de calcul dus à la génération de la surface du mesh.
Generate SpeedVecs/Disable
Si le bouton Disable est activé, il n’y aura pas de vecteur vitesse d’exporté. Par défaut, ceux-ci sont générés et stockés sur le disque. Ils sont utiles pour, par exemple, réaliser un flou cinétique avec les nœuds de compositing.
Particles (“Particules”)
Vous pouvez ici ajouter des particules aux fluides simulés, pour en améliorer l’aspect visuel.
Tracer Particles
Nombre de traceurs de particules à placer dans le fluide au début de la simulation. Pour les afficher, ajoutez un autre objet en tant que Particle (décrit plus loin), qui utilise le même répertoire de “cuisson” que le Domain.
Generate Particles
Contrôle la quantité de particules “fluides” à créer (0.0 = aucune, 1.0 = normale, plus de 1.0 = plus de particules). Pour utiliser ce réglage, vous devez avoir au moins une subdivision de surface de 2.
Un exemple de l’effet des particules peut être vu ici – l’image de gauche a été simulée sans, et celle de droite avec les particules et la subdivision activées.


“Fluid”

Toutes les parties de cet objet situées dans la boîte englobante du Domain seront utilisées comme fluides dans la simulation. Si vous placez plus d’un objet Fluid dans le domaine, ils ne devraient pas – en l’état actuel des choses – s’interpénétrer. Assurez-vous également que toutes les normales sont dirigées vers l’extérieur. Au contraire des objets Domain, la forme (géométrie) des meshes Fluid est prise en compte.

Volume init (type de volume initial)
  • Volume initialise la zone interne de l’objet comme fluide, cela ne fonctionne qu’avec des volumes fermés.
  • Shell n’initialise qu’une fine couche de fluide pour toutes les faces de l’objet (“shell” = “coquille”, “enveloppe”). Cela fonctionne avec tout type de mesh (fermé ou ouvert).
  • Both combine les deux options précédentes – l’objet doit donc aussi être fermé.
Exemple des différents types de volumes initiaux : Volume, Shell et Both. Notez que le “shell” est généralement un peu plus large que le “volume intérieur”.
Initial Velocity
Vitesse initiale du fluide, dans les trois directions, en mètre par seconde (m.s-1).
Blender3D FreeTip.gif
L’orientation des normales de surface est très importante
Blender utilise l’orientation des normales de surface pour déterminer ce qui est “à l’intérieur” de l’objet “fluide”, et ce qui est “à l’extérieur”. Vous devez avoir toutes vos normales dirigées vers l’extérieur (en mode Edit, utilisez CtrlN ou faites Space → Edit → Normals → Calculate Outside). Si une normale est dirigée dans la mauvaise direction, vous serez “récompensé” par un énorme “flot de fluide”, car Blender pensera que le volume de l’objet est hors de son mesh ! C’est valable quel que soit le réglage de type de Volume init.


“Obstacle”

Cet objet sera utilisé comme un obstacle dans la simulation. Comme avec un objet Fluid, les objets Obstacle ne devraient pas – en l’état actuel des choses – s’interpénétrer. Toujours comme avec les fluides, la forme des obstacles est utilisée dans la simulation. Assurez-vous également, pour les volumes fermés, que leurs normales soient correctement dirigées (vers l’extérieur, utilisez éventuellement Flip Normals, en mode Edit, panneau Mesh Tools, contexte Editing [F9]), tout spécialement si vous utilisez un conteneur ayant subi une rotation. Appliquer le modificateur Subsurf avant de “cuire” la simulation peut également être une bonne idée, si le mesh n’est pas animé.

Volume init (type de volume initial)
Comme pour les objets Fluid décrits ci-dessus.
Boundary type (type de limite, voyez l’image ci-dessous)
Détermine si les surfaces de l’obstacle sont “collantes” ou “glissantes”, ce qu’on appelle “l’adhésion de surface”. Dans le monde réel, cette adhésion dépend du fluide et de la surface de l’obstacle : sa granularité ou ses qualités de friction/adhésion/absorption.
  • Noslip fait que le fluide “colle” aux surfaces de l’obstacle.
  • Free(-slip) permet au fluide de glisser “librement” autour de l’obstacle (réservé aux objets immobiles).
  • Part(-slip) permet de réaliser un intermédiaire entre les deux options précédentes, le réglage PartSlip Amount qui apparaît alors permettant de régler entre 0.0 (équivalent à Noslip) et 1.0 (équivalent à Free) cet effet (réservé aux objets immobiles).
Notez que si le mesh se déplace, il sera automatiquement placé en mode Noslip.
Exemple de différents types de limites avec une goutte tombant sur un plan incliné. De gauche à droite : Noslip, Partslip à 0.3, Partslip à 0.7 et Freeslip.
Animated Mesh/Export
Activez le bouton Export si le mesh est animé (par ex., déformé par une armature, des clés de forme, ou par un lattice). Notez que cela peut être sensiblement plus lent, et n’est pas requis si c’est l’objet qui est animé (c-à-d animation par Ipos Object sur la position, la rotation, …).
PartSlip Amount
Proportion relative entre Noslip et Freeslip, si Partslip est activé (voyez ci-dessus).
Blender3D FreeTip.gif
Les objets animés sont Noslip
Si un obstacle est mobile, Blender le traite automatiquement comme “collant” (Noslip). Si vous voulez que votre fluide fasse des éclaboussures au contact d’un objet mobile, placez une surface transparente là où le fluide heurtera votre objet, exactement de la forme et orientation de celui-ci, mais juste un tout petit peu “en avant” (c-à-d juste entre l’objet et le fluide). Alors que votre objet se meut et que le fluide jaillit,ce dernier va heurter la surface transparente immobile (en mode Freeslip ou Partslip), et l’objet continuera joyeusement son mouvement… en ayant causé une belle éclaboussure.


Impact Factor
Correction du volume de fluide pour le gain/la perte dû(due) à l’impact avec les objets (obstacles) mobiles. Si l’objet est immobile, ce réglage n’a aucun effet. S’il est au contraire en mouvement et que le fluide le heurte, une valeur négative retire une partie du fluide du domaine, et une valeur positive y en ajoute. Valeurs possibles comprises entre -2.0 et 10.0.


“Inflow”

Cet objet ajoutera du fluide dans la simulation (pensez-y comme à un robinet d'eau).

Volume init (type de volume initial)
Comme pour les objets Fluid décrits ci-dessus.
Inflow velocity
Vitesse initiale donnée au fluide “créé” dans cet objet.
Local Coords/Enable
Utiliser les coordonnées locales pour l’inflow. Utile si l’objet se déplace ou est en rotation, car le flot produit suivra le mouvement. Si cette option est désactivée, l’emplacement et la direction du flot ne changent pas.
Animated Mesh/Export
Comme pour les objets Obstacle décrits ci-dessus.


“Outflow”

Tout fluide entrant dans cet objet sera “détruit” (pensez-y comme à une bonde de lavabo, ou un trou noir). Utile pour éviter le remplissage du Domain si on utilise aussi un Inflow. Quand ce comportement est activé, l’objet agit comme une tornade, ou un aspirateur à liquides, et l’endroit où disparaît le fluide se déplace avec l’objet.

Volume init (type de volume initial)
Comme avec les objets Fluid décrits ci-dessus.
Animated Mesh/Export
Comme pour les objets Obstacle décrits ci-dessus.


“Particle”

Cela permet d’afficher les particules créées pendant la simulation. Pour l’instant, seuls les “traceurs” nageant dans le fluide (voyez le type Domain) sont supportés. Notez que la forme, la position, la taille de l’objet n’ont aucune importance – une fois que le bouton Particle est activé, un système de particules avec les particules de la simulation de fluide sera généré, au bon endroit. Si vous déplacez l’objet original, il peut être nécessaire de supprimer le système de particules, désactiver les particules de la simulation de fluide, puis de les réactiver. Les particules de la simulation de fluide sont également pour l’instant insensibles aux autres réglages des particules, non plus qu’aux divers champs de force.

Particle type
Drops
Les éclaboussures à la surface du fluide donnent des gouttelettes projetées en l’air (eau fraîche, avec une faible tension superficielle).
Floats
Les “éclaboussures” sont plus massives et retombent plus vite dans le fluide (liquide plus “lourd”, comme de l’eau de mer froide ou de la soupe, avec une plus forte tension superficielle).
Tracer
Les “gouttes” suivent l’ancienne surface de l’eau, comme un brouillard suspendu sur les anciens niveaux du fluide. À utiliser pour voir là où était le niveau du fluide.
Size Influence
Les particules peuvent avoir différentes tailles, si cette valeur est à 0.0, toutes ont la même.
Alpha Influence
Si cette valeur est supérieure à 0.0, la valeur alpha des particules est proportionnelle à leur taille.
Path (dossier de baking)
Quelle simulation préalablement “cuite” utiliser pour charger les particules, cela devrait normalement avoir la même valeur que le champ équivalent de l’objet Domain (faites par ex. un copier-coller – CtrlC puis CtrlV).

“Control”

Options de Control de fluide.
Time
Vous pouvez y spécifier les instants de début et de fin d’activité de l’objet Control.
Attraction force
La force d’attraction spécifie la force qui est émise par l’objet de contrôle de fluide. Une force positive attire le fluide, une force négative le repousse.
Velocity force
Si l’objet Control se déplace, la vitesse résultante peut également introduire une force exercée sur le fluide.
Quality
Une qualité plus élevée induit plus de particules de contrôle pour l’objet Control.
Reverse
Le mouvement des particules de contrôle est inversé.

Voyez ces notes de version (en) pour plus d’informations.

Un autre exemple d’une goutte tombant dans un liquide, simulé dans Blender et rendu avec Yafray.


Animer les propriétés du fluide

Un nouveau type de courbes Ipo, FluidSim, est disponible pour les objets domaine. Au contraire de la plupart des valeurs “animables” de Blender, les Ipos FluidSim ne peuvent être définies (création des clefs) simplement en utilisant la touche I ; vous devez entrer les valeurs “à la main” dans la fenêtre Ipo. Pour insérer une clef, vous devez sélectionner la propriété que vous souhaitez animer dans la fenêtre Ipo, puis cliquer CtrlLMB Template-LMB.png dans celle-ci à l’endroit voulu (dans le temps – abscisse – et en valeur – ordonnées).

Blender3D FreeTip.gif
Précision des clefs
Notez que vous n’êtes pas obligé d’être très précis dans votre clic : de toute façon, vous êtes encouragé à ouvrir le panneau Transform Properties du point que vous venez d’insérer (N), pour arrondir la valeur X à la frame désirée, et régler précisément la valeur Y.


Un domaine de fluide dispose de plusieurs canaux pour contrôler le fluide dans le temps:

Fac-Visc
Un facteur multiplicatif de la viscosité du fluide. Vous devez régler cette courbe avant la “cuisson”. Elle vous permet de changer l’eau en v… en huile, par exemple !
Fac-Tim
Modifie la vitesse de la simulation. Comme pour le contrôle Speed du Video Sequence Editor, qui peut accélérer ou ralentir une vidéo, cette courbe peut accélérer ou ralentir le mouvement du fluide durant une animation. Les valeurs inférieures ou égales à 0.0 donnent un fluide figé, immobile ; Les valeurs entre 0.0 et 1.0 donnent un mouvement ralenti (et un fluide semblant plus épais) ; 1.0 est la vitesse “normale” ; et les valeurs supérieures à 1.0 donnent un mouvement accéléré (et un fluide plus… fluide).
Gravity
Permet de modifier les composantes X, Y, Z du vecteur de la “gravité” appliquée au fluide. Pensez à des situations comme boire une tasse de café en conduisant NASCAR à Talladega (NdT : ???), ou siroter un espresso sur l’autobahn (autoroute ?), ou arroser les plantes vertes de la navette spatiale… Les changements dans ces courbes feront valser le fluide, à cause des forces externes.

Les objets Fluid, Obstacle, Inflow, Outflow et Particle peuvent utiliser les canaux suivants :

VelX/VelY/VelZ
Ces courbes permettent de simuler une variation de pression et/ou de direction d’un jet d’eau, par exemple, ou les effets du vent sur une chute d’eau…
Active
Cette courbe permet de (dés)activer la fonction de l’objet (Inflow, Outflow, etc.). Il faut pour cela “traverser” la valeur 0.0 (c-à-d passer d’une valeur positive à 0.0 ou moins pour désactiver l’objet, et inversement pour le réactiver). À utiliser par exemple pour un goutte-à-goutte, ou n’importe quel type d’Inflow intermittent. Cela fonctionne également pour les Outflows et les Obstacles : vous pouvez ainsi simuler, par exemple, l’ouverture d’une vidange.

Vous pouvez également contrôler les réglages des forces des objets Control :

AttrForceStr, AttrForceRa
Ces courbes contrôlent les valeurs des réglages de la force d’attraction.
VelForceStr, VelForceRa
Ces courbes contrôlent les valeurs des réglages de la force de vitesse.


Détails techniques

My cup runneth over”, créé avec Blender et Yafray.

L’animation de fluide peut demander beaucoup de temps – mieux vous en comprendrez le fonctionnement, meilleure sera votre estimation du résultat final. L’algorithme utilisé par la simulation de fluide dans Blender est le Lattice Boltzmann Method (LBM) ; il existe d’autres algorithmes, comme le Navier-Stokes (NS) et le Smoothed Particles Hydrodynamics (SPH). Le LBM se situe entre ces deux derniers.

En règle générale, il est très difficile pour les ordinateurs actuels de simuler correctement ne serait-ce qu’un réservoir d’un mètre cube d’eau. Pour simuler une vague déferlant dans une ville, vous auriez probablement besoin d’un des plus coûteux super-calculateurs existants, et cela pourrait n’être pas encore suffisant, quel que soit l’algorithme que vous utilisiez. En conséquence, pour obtenir “l’effet dont vous avez vraiment envie”, vous devrez vous appuyer sur des stratégies très similaires à celles employées (depuis fort longtemps, et avec quelque succès…) par les réalisateurs de films de ce type : “faire semblant !

Une bonne simulation de fluide est un élément très important, mais pas le seul, pour obtenir une image satisfaisante. Laissez Blender se charger des gros calculs bien lourds de la simulation de fluide de base, puis créez le réalisme en ajoutant des détails soigneusement choisis, qui correspondent aux attentes du spectateur pour le “maelström de la vraie vie que vous avez créé”.

Par exemple, vous pouvez prétendre avoir une vague dans une ville géante en construisant un “modèle réduit”, en y faisant déferler une petite vague, le tout en très haute définition, et espérer que personne ne fera la différence entre une vague de 100 m de haut et une de 1 m (personne ne la fera). Texturez le front de vague avec beaucoup de Noise (bruit) et de Clouds (nuages) affectant la couleur. Ajoutez beaucoup d’émetteurs d’écume (particules) sur les diverses surfaces frappées par la vague, en les réglant pour qu’ils émettent au moment de l’impact et dans la direction “miroir” de celle de la vague par rapport à la surface. Animez les véhicules, les déchets, les gens se noyant… pour qu’ils soient emportés par la vague, en utilisant le mesh “cuit” de celle-ci. Utilisez une ligne d’émetteurs d’écume pointés vers le haut et placée sur la crête de la vague pour simuler l’écume projetée dans les airs par la crête. Pensez à où exactement vous voulez placer la caméra, si vous utiliserez un téléobjectif ou un grand angle, et ainsi de suite (le spectateur doit-il “regarder d’en haut les pauvres acteurs infortunés”, ou “se noyer avec eux” ?). Voilà le type de détails, au-delà de la simulation de fluide elle-même, auxquels prêter attention, car ce sont eux qui porteront le plan.

Dans le cas du simulateur LBM de Blender, les éléments suivants rendront les choses plus difficiles à calculer :

  • Grand domaine.
  • Durée de la simulation longue.
  • Faibles viscosités.
  • Hautes vitesses.

La viscosité de l’eau est déjà très faible, donc, particulièrement en faibles résolutions, les turbulences de l’eau ne peuvent être correctement simulées. Si vous y regardez de près, la plupart des simulations de fluides sur ordinateurs ne ressemblent pas encore vraiment à de la vraie eau. De manière générale, ne vous appuyez pas trop sur les réglages physiques (comme la taille du domaine ou la durée – en secondes – simulée). Essayez plutôt d’obtenir une bonne animation en faible résolution, puis augmentez celle-ci autant que possible ou désiré.

Astuces

  • Ne soyez pas surpris du nombre de fichiers *.bobj.gz et *.bvel.gz présents après une simulation. Un ensemble pour la prévisualisation (preview), un pour la qualité finale (final). Et un (ou deux) fichiers par image de l’animation. Chaque fichier contient les résultats de la simulation – vous en avez donc besoin ! Pour l’instant, ces fichiers ne seront pas effacés automatiquement, il vaut donc mieux les stocker dans un dossier dédié. Comme avec le bouton ANIM, vous devez vous charger de la gestion des fichiers produits vous-même. Si vous n’avez plus besoin d’une simulation de fluide, supprimez tous les fichiers *.bobj.gz et *.bvel.gz correspondants.
  • Avant de lancer une simulation en haute résolution qui peut prendre des heures, faites d’abord une simulation en basse résolution pour vérifier que tout va bien (timing, …).
  • Les objets Fluid doivent être totalement dans la boîte englobante de l’objet Domain. Sinon, la “cuisson” risque d’être problématique, voir de ne pas marcher du tout. Les objets Fluid et Obstacle peuvent être des meshes (de formes) complexes. Des volumes très fins peuvent ne pas apparaître si la résolution est trop faible (augmenter celle-ci peut résoudre ce problème).
  • Notez que certains paramètres de la simulation de fluide, comme la vitesse initiale d’un Inflow, peuvent être animés par les Ipos Fluidsim (voyez ci-dessus).
  • N’essayez pas de réaliser une scène complexe d’un seul coup. Blender dispose d’un puissant outil de compositing que vous pouvez utiliser pour combiner plusieurs animations. Par exemple, pour produire une animation montrant deux flux de fluide séparés, tout en conservant une taille de domaine raisonnable, rendez un .avi pour le premier flux. Déplacez ensuite le domaine et rendez un deuxième .avi pour l’autre flux, avec un canal alpha (NdT : dans un troisième .avi N&B ?). Puis compositez ces deux éléments (avec par ex. la fonction Add). Un autre .avi pour l’écume, la fumée, le brouillard… appliqué par dessus le tout. Encore un bon rideau de pluie, et vous avez une belle tempête qui se prépare ! Quelques éclairs, des détritus volants dans tous les sens, tout ça en animations séparées, compositez le tout, et vous avez un résultat vraiment spectaculaire.
  • Si vous avez des problèmes, quelque chose qui ne marche pas comme vous pensez qu’il devrait – faites-le moi savoir : envoyez le fichier .blend et la description du problème (en anglais !) à nils at thuerey dot de. Pensez à relire cette page et à aller voir le blenderartists-forum avant d’envoyer un mail !


Limitations & Contournements

  • Un seul Domain par fichier .blend (en ce qui concerne la version 2.42 du moins), mais vous pouvez avoir plusieurs objets Fluid.
Pour contourner le problème : pour commencer, utilisez un petit domaine en le déplaçant pour tester chaque parties de votre simulation de fluide, puis pour finir, agrandissez le domaine de manière qu’il inclue tous vos objets fluides (les calculs seront alors plus longs). C’est en fait un avantage : vous pouvez facilement contrôler le temps processeur alloué à la simulation simplement en faisant varier la taille et l’emplacement du domaine.
  • Si la simulation ne marche pas comme souhaité, assurez-vous que les normales sont correctes (par ex., passez en mode Edit, sélectionnez tous les vertices, et recalculez toutes les normales d’un coup).
  • Il y a pour l’instant des problèmes avec la simulation en apesanteur (gravité zéro) – réglez simplement la gravité à une très faible valeur, en attendant que ce soit résolu.
  • Si un objet est initialisé comme Volume, il doit être fermé : un plan ne fonctionnera pas. Pour utiliser un plan, utilisez l’init Shell, ou extrudez-le (cela le transformera en un parallélépipède, donc en volume fermé).
  • Blender se fige après que vous avez cliqué sur BAKE. Taper Esc le relance après un certain temps – cela peut arriver si la résolution est trop importante : le système utilise alors la mémoire virtuelle sur le disque dur, ce qui rend l’opération extrêmement longue. Réduire la résolution devrait résoudre ce problème.
  • Blender plante après que vous avez cliqué sur BAKE – cela peut arriver si la résolution est vraiment très grande, et que plus de 2 Go de mémoire sont alloués, ce qui fait planter Blender. Réduisez la résolution. Beaucoup de systèmes d’exploitation limitent la quantité de mémoire qui peut être allouée à un unique processus, comme Blender, même si la machine en contient bien plus…
  • Les meshes doivent être fermés, donc si par ex. certaines parties d’un objet Fluid ne sont pas initialisées comme fluide dans la simulation, vérifiez que toutes les parties de votre mesh sont closes. Par exemple, le mesh Suzanne (la tête de singe) de Blender n’est malheureusement pas fermé (les yeux sont séparés du reste).
  • Si la simulation se termine prématurément avec un message d’erreur (disant par exemple que l’initialisation a échoué – “init has failed”), assurez-vous de la validité des réglages de votre domaine, par exemple en les réinitialisant à leur valeur par défaut.
  • Pour importer un mesh de surface fluide seul, vous pouvez utiliser ce script : .bobj.-Import-Script.
  • Vous ne pourrez peut-être pas “cuire” une simulation prenant plus de 1 Go de mémoire, même avec la version LargeAddressAware de Blender – c’est peut-être une limitation du moteur de fluide actuel.
  • Notez que les premières images peuvent très bien ne prendre que quelques centaines de Mo de RAM, mais la simulation peut plus tard consommer plus d’un Go, ce qui peut expliquer pourquoi votre “cuisson” n’échoue qu’après un moment. Dans ce cas, essayez de “cuire” une image du milieu ou de la fin de l’animation, en résolution maximale, pour voir si ça marche.
  • La mémoire utilisée double quand vous passer d’une subdivision de surface de 1 à une de 2 (et ainsi de suite…).
  • Utiliser Generate Particles augmentera également la consommation mémoire, puisque ça augmente l’aire et la complexité de la surface. Les particules générées “normalement” par la simulation de fluide “mangent” probablement moins de mémoire.


Voyez aussi

Documentation externe :


Remerciements

L’intégration du simulateur de fluide à Blender a été effectuée comme un projet Google “Summer-of-Code” (SoC). Plus d’informations sur le moteur à www.ntoken.com. Les animations suivantes ont été crées avant l’intégration du simulateur dans Blender : “Adaptive Grids”, “Interactive Animations”. Merci à Chris Want pour l’organisation des projets Blender-SoC, et à Jonathan Merrit pour avoir été le mentor de celui-ci ! Et bien sûr merci à Google pour cette initiative… les progrès de ce SoC ont été postés ici : SoC-Blenderfluid-Blog at PlanetSoC.

Le simulateur lui-même a été développé par Nils Thuerey avec l’aide et sous la supervision des personnes suivantes : U. Ruede, T. Pohl, C. Koerner, M. Thies, M. Oechsner et T. Hofmann, au département 10 des sciences informatiques (simulation de système, LSS) à l’université d’Erlangen, Allemagne.

http://www10.informatik.uni-erlangen.de/~sinithue/img/lsslogo.png http://www10.informatik.uni-erlangen.de/~sinithue/img/unierlangenlogo.png