Rendu d'une goutte Extrait du Calcul Scientifique http://cs-ljk.imag.fr/visualisation-46/examples/article/rendu-d-une-goutte Rendu d'une goutte - Visualisation - Examples - Date de mise en ligne : jeudi 21 juin 2012 Calcul Scientifique Copyright © Calcul Scientifique Page 1/6 Rendu d'une goutte Informations et images fournies par Roland Denis. Objectif : à partir de données 2D obtenues par simulation, réaliser le rendu 3D réaliste d'une goutte d'eau. Données d'entrée : elles sont sous la forme d'une grille rectilinéaire au format vtk (fichier .vtr), contenant entre autre la distance à l'interface. [Distance à l'interface] Image finale : Ci dessous, une des images finale obtenue [Rendu réaliste d'une goutte - Auteur : R.Denis] 3 Outils successifs ont été utilisés pour réaliser ce rendu : Paraview pour la génération 3D du maillage de la surface de la goutte ; Blender pour la composition de la scène de rendu ; Luxrender pour le calcul du rendu Paraview L'idée générale est d'extraire le contour 2D de la goutte, puis d'utiliser le filtre paraview 'rotational extrusion' qui génère une surface 3D par rotation des données d'entrée autour de l'axe des Z. Enfin, les données sont exportées dans un format lisible par Blender. La suite du paragraphe détaille tout d'abord une série de problèmes rencontrés, quels filtres ont été utilisés pour les résoudre, avant de faire un tableau récapitulatif du pipeline. Axe de rotation fixé Problème : L'extrusion rotationnelle s'applique autour de l'axe des z, or les données d'entrée sont dans un plan x/y avec l'axe de rotation en y. Solution : appliquer une rotation (= filtre 'transform') de 90° avant et de -90° après l'extrusion. Trou dans la surface Problème : Les données en x ne commencent pas exactement à 0, elles sont légèrement décalées. Conséquence : quand on applique l'extrusion, il y a un trou dans la surface autour de l'axe de rotation. Copyright © Calcul Scientifique Page 2/6 Rendu d'une goutte Contournement : Copie des données en miroir autour de l'axe y (filtrer 'reflect'). Filtre Delaunay 2D pour remailler le tout, ce qui a pour effet de connecter les points qui ne le sont pas, c'est à dire les points de part et d'autre de l'axe des y. On recoupe en 2 (Clip) pour ne garder que les x positifs. Inconvénient : Gourmand en temps de calcul. Bord dans le maillage, points dupliqués Problème : La surface n'est pas jointe entre le début et la fin de la rotation. On peut voir les zones concernées avec le filtre "Feature Edges" (décocher l'option "feature edges'). Cela pose peut poser des problèmes de rendu par la suite Solution : Le filtre "Clean" permet de fusionner les points qui sont proches. Il faut choisir une tolérance faible, de l'ordre de 10^-10, et appliquer également le filtre avant l'extrusion pour éviter les conflits. Maillage irrégulier Problème : Le maillage est irrégulier, les points inégalement espacés. C'est le cas pour les points de la ligne de contour, qui semblent alignés sur le maillage cartésien. Solution : Régulariser le maillage avec le filtre 'smooth'. Choisir un nombre d'itération élevé, 400 par exemple. Inconvénient : 'Smooth' entraîne une perte de volume, mais d'autant plus faible que le maillage est fin. Pour les tests : ré-échantillonage On peut utiliser le filtre 'Extract subset' pour ne garder qu'une partie des données en test. Cela permet entre autre d'avoir un temps de réponse correcte dans paraview - temps de réponse mis à mal par l'application du filtre Delaunay 2D. Tableau récapitulatif du pipeline Filtre Pipeline Commentairegoutte Paraview visualisation Extract Subset Mettre par exemple les samples rates à 4. Dans les VOI, bien mettre les min et max voulus. Attention, à la ré-ouverture ces valeurs sont parfois ré-initialisées à 0 Reflect Plane : X ; center 0 Delaunay2D Valeurs par défaut Copyright © Calcul Scientifique Page 3/6 Rendu d'une goutte Clip Restriction à x positif. Avec les valeurs par défaut (X Normal) c'est bon. Contour contour 2D de la moitié de la goutte. Contour by : choisir phi ; value range : 0 Clean Tolérance : 1e-10 Transform rotation 90° Ligne rotate : saisir 90 ; 0 ; 0 Rotational Extrusion Augmenter la résolution (par ex 180) et décocher l'option capping Tranform rotation -90° Ligne rotate : saisir -90 ; 0 ; 0 Clean Tolérance 1e-15 Smooth 400 Itérations Generate Surface Normals Options cochées : Consistency, Flip Normals (sinon les normales pointent vers l'intérieur de la goutte) et Piece invariant Blender Ce paragraphe détaille un exemple de construction d'une scène Blender qui permet de réaliser un rendu réaliste de la goutte. Certains des paramètres sont liés à luxrender - l'exemple suppose donc que luxrender est installé et activé pour blender. (article à venir, mais c'est simple et tout est très bien expliqué sur le site de luxrender) Exemple testé sous Blender 2.61 + luxrender 1.0 Démarrage Importer le maillage exporté à partir de paraview : File/import/X3D extensible puis choisir le fichier exporté sous Paraview Clean éventuel des objets : dans l'outliner, à droite, ne garder que les 3 objets caméra/Lamp/Goutte (Renommer les objets si besoin, l'objet importé étant nommé initialement 'ShapeIndexedFaceSet') Lier la caméra à la goutte : sélectionner la caméra, fenêtre 'property', onglet 'Object constraint', dans add constraint choisir 'Track to' ; target : la goutte ; To : -Z ; Up : Y (Dans la suite, pour liéer les lampes à la goutte c'est la même chose) Réglage de la caméra La goutte est petite. Pour pouvoir la voir dans la caméra on augmente la distance focale de cette dernière et on la rapproche de la goutte. Par exemple : Onglet 'camera', partie Liens, saisir dans 'Field of view' 4.5°, Onglet 'Objet', partie 'Transform', Location(m) : 0.11 ; -0.12 ; 0.025 Il faut éventuellement redéfinir le clipping range de la caméra : Onglet 'Camera', partie Liens, saisir dans Clipping Copyright © Calcul Scientifique Page 4/6 Rendu d'une goutte Start à 0.1, end à 100 On décale légèrement la caméra pour que la goutte et son ombre soit bien positionnée dans le cadre : Onglet 'Camera', partie Liens, saisir dans Shift : 0.03 en X, 0.14 en Y Normalement, à ce stade, on visualise la goutte à une taille raisonnable dans la caméra (numpad 0 à partir de la fenêtre view3D) Réglage des lampes Pour améliorer l'éclairage de la goutte, on peut par exemple : Ajouter une 2me lampe de l'autre coté de la goutte ayant un éclairage plus large, mais à plus faible énergie. Ajouter un 'ciel' : lampe hémisphérique sur laquelle on plaque une image de ciel. Rapprocher les lampes. Lampe de type 'spot' Location : X -0.07 /Y -0.2 / Z 0.37 Onglet Lamp : type area, size 0.1 Lampe de type 'area' Menu add/Lamp/Area Location X 0.06 / Y 0.6/ Z 0.7 Onglet Lamp : type area, Gain 0.2 Lampe pour le ciel Menu add/Lamp/Hémi Location : X 0/Y 0.04/Z 0.3 Onglet lamp, gain = 0.5 Dans HDRI map, choisir un fichier hdr de ciel Ajout d'un plancher Fenêtre 2D, Add/Mesh/plane Location : 0 ; 0 ; -0.0005 (à adapter si on fait un scale de la goutte) Onglet material, dans LuxRender matérials database, cliquer sur enable, puis choisir par exemple dans la catégory 'Walls and Flooring' le 'HerringboneFlooring'. (S'il n'y a qu'une option 'add' dans l'onglet, cliquer sur 'add') Onglet Texture, choisir par exemple WoodTex Copyright © Calcul Scientifique Page 5/6 Rendu d'une goutte La goutte 1) Dans l'onglet world on défini 2 milieux : l'eau et le reste du monde (water et world) Dans 'Luxrender Volume', ajouter un volume. Modifier son nom (water) et aller cherche un volume par défaut : water 100 ° Ajouter un deuxième volume, nommé word. Saisir un IOR de 1.000277 dans la partie LuxRender World Settings, sélectionner water dans default interior, et world dans default exterior. 2) Selectionner la goutte Dans l'onglet material, partie LuxRender Materials : Choisir Glass2 comme material type Interior : water exterior : world Eventuellement cocher dispersion Profondeur de champ A compléter Luxrender Copyright © Calcul Scientifique Page 6/6