|
|||||||||||||||||||||||||||||||||||||||||||
|
Bienvenue dans cette nouvelle rubrique consacrée à Aladdin 4D. Nous allons réaliser un projet utilisant les vagues texturales. Description Ce projet pourrait servir de pointeur d'attente, pour peu qu'un système d'exploitation accepte un jour les sprites animés en 640x512x24 (sait-on ce que l'avenir nous réserve ?). Plus modestement, il agrémentera une présentation multimédia. Ce projet sera l'occasion, en tout état de cause, d'aborder les techniques de vagues texturales, en même temps qu'il nous permettra de vous présenter une petite astuce quant à l'optimisation des temps de calcul, par cette technique qui m'a rendu célèbre, directement issue du théorème de Bauser ("Moins j'en calcule, mieux je me porte !"). Mais trêve de plaisanterie, accrochez-vous à vos 96 touches, et en avant !
La clepsydre est une horloge à eau constituée d'un ballon de verre percé en ses sommet et base, et laissant échapper l'eau goutte à goutte (une goutte par seconde). Cette eau est recueillie dans une vasque graduée, la vasque une fois pleine, l'eau est reversée dans le ballon, ad libitum... Dans notre application, la goutte tombera au cours des images 25 à 31, puis disparaîtra, la vague sera alors générée et se développera durant le reste de l'animation (60 images). Je pense que le déroulement est suffisamment simple pour que nous puissions nous passer d'un chronogramme. Nous pourrons donc distinguer plusieurs sous-ensembles :
1. La vasque Elle est constituée d'un profil réalisé à main levée (figure "Vasque Profil") qui permettra, par rotation, d'obtenir le volume voulu (paramètres de rotation, figure "Vasque Sweep"). ![]() Vasque Profil ![]() Vasque Sweep ![]() Vasque Mod L'objet est, après élimination du profil, lissé en Phong, et on lui assigne une texture adéquate imitant le marbre (figure "Vasque TX"). L'image "Vasque.24B" montre le rendu de cette première modélisation. ![]() Vasque TX ![]() Vasque 24b Il est obtenu de façon similaire que la vasque, mais avec une rotation unitaire de 90° et une texture "bois" en mode Shingles (figures "Socle Profil", "Socle Sweep", "Socle Mod", "Socle TX"). ![]() Socle Profil ![]() Socle Sweep ![]() Socle Mod ![]() Socle Profil Même principe à nouveau, les figures "Bulle Profil" (profil obtenu en modifiant un arc de 180°) et "Bulle Mod" vous aiderons à modeler et dimensionner correctement l'ensemble. ![]() Bulle Profil ![]() Bulle Mod 4. L'eau contenue dans la bulle Ici, nous clonons les huit rangées du bas de la bulle. On sélectionne ensuite cette copie et on effectue un changement d'échelle (X0.95 Y0.95 Z1.00). Un attribut est ensuite assigné à l'objet obtenu en R0V0B200 et transparence de 200 (figure "Bulle Eau Mod). ![]() Bulle Eau Mod L'anneau est obtenu par extrusion (outil "Pathex") d'un cercle suivant un autre cercle. Le diamètre de ce dernier devra être légèrement supérieur à celui de la bulle auquel on ajoute le rayon du disque extrudé. Le premier pied est obtenu par extrusion simple du même cercle et incliné et positionné pour partir d'un angle de l'anneau et arriver à la surface du socle (attention, pas plus bas, cela est important, comme nous le verrons par la suite) et dans un des coins. Les trois autres pieds sont obtenus grâce à l'outil "Sweep" (Balayer) en 360°-4 segments-connected last OFF et Solid OFF. 6. La goutte (et son chemin) Les figures "Goutte Profil" et "Goutte Model" permettent de comprendre comment à nouveau, l'outil "Sweep" est utilisé pour réaliser la goutte. ![]() ![]() Goutte Profil et Goutte Model Pour le chemin, on trace un segment vertical depuis le centre de la goutte jusqu'à la surface du disque qui nous servira pour l'eau de la vasque. Une fois transformé en chemin, on lui assignera la spline représentée sur la figure "Goutte Chemin" au niveau de Globals/Movement/Start%. ![]() Goutte Chemin 7. L'eau contenue dans LA vasque Nous revenons à notre disque. Lissage en Phong et assignation d'un clône d'attribut de l'eau de la bulle. On changera dans ce clone la valeur de "Wave Sens" (Sensibilité aux vagues) pour la mettre à 255. Nous reviendrons sur ce paramètre. Ouf, nous allons maintenant pouvoir passer au détail de la vague et de sa gestion. Avant cela, vous pouvez jeter un oeil sur la figure "Projet Complet" pour vérifier si tout va bien pour vous. L'angle de vue est réglé en X100Y180Z16 et la caméra virtuelle en 4028 (window)/174137 (image). ![]() Projet Complet Avant de parler de notre vague particulière, il est bon d'aborder les vagues en général. Nous savons tous ce qu'est une vague, il s'agit d'une oscillation de la surface d'un fluide. Cette oscillation peut être due à un mouvement global (agitation) ou à une action externe (vent, chute d'un objet dans le fluide). Nous savons également que celles-ci ne se développent que sur les masses fluides. Ce type de masse n'existe pas dans Aladdin 4D (si l'on excepte les vagues mécaniques, qui sont en fait des déformations cycliques des polygones), non plus que dans la plupart des logiciels 3D d'ailleurs. L'astuce a donc été (en général) de simuler la présence d'une vague par une altération judicieuse de la surface de l'objet (Cf. effet "Ripple" dans Art Department Pro). C'est, dans le principe, une texture procédurale du type "Bump" (Relief) qui est appliquée à cette surface, avec des paramètres associés particuliers. D'une manière générale aussi, et dans le cas d'Aladdin 4D, les paramètres associés contrôlent le comportement de la vague durant l'animation. Ce qui permet des mouvements assez réalistes, même si les intersections restent droites (il ne s'agit que d'une texture) ; cela est manifeste si vous faites plonger un objet dans un plan agité de vagues (à l'endroit ou l'objet coupe le plan, le segment n'est pas altéré). Hormis ce petit problème, que l'on prendra soin d'éviter, l'effet est très valable. Un peu de théorie Les schémas "Vague Const" et "Vague Amort" représentent chacun une coupe de la vague (ce que l'on voit dans l'eau avec un masque si l'on regarde à la limite entre l'eau et l'air). ![]() Vague Const ![]() Vague Amort Bien sûr, une vraie vague ne se comporte pas ainsi, mais plutôt comme celle du second schéma, dans laquelle les plus avertis auront reconnu une sinusoïdale amortie. L'effet de vague s'atténuant, on constate une diminution de l'amplitude et de la période jusqu'à 0 (approximativement du moins, préciserai-je, car je vois déjà les spécialistes en dynamique des fluides, et autres vibrations et phénomènes ondulatoires, bondir de leur chaise). Cela sera en tout cas suffisant pour notre exemple. Les vagues d'Aladdin 4D On a dit que n'importe quel objet pouvait donc être perturbé par une vague. Dans Aladdin 4D, c'est encore plus simple : si vous créez une vague, tout polygone lissé en Phong y sera sensible, à moins que vous ne précisiez le contraire dans son attribut. C'est en effet le paramètre "Wave Sens" (Sensibilité aux vagues), dont on a déjà parlé, qui contrôle cela, et il est par défaut à 200. Pour que le polygone ne soit plus influencé, il suffit donc de mettre ce paramètre à 0. Il vous faut donc, dès maintenant, modifier les attributs des éléments, sauf celui du plan d'eau et mettre "Wave Sens" (Sensibilité aux vagues) à o. Examinons la figure "Vague_M1", les différents paramètres (il s'agit du membre de la vague au cours de laquelle elle n'existe pas, tant que la goutte n'est pas tombée). ![]() Vague M1
Revenons à notre vague0. L'effet que nous désirons obtenir est celui d'un objet tombant dans l'eau. Pour une goutte, c'est plus simple, car on peut négliger sa forme et son volume et l'assimiler à un point. Le développement de notre vague est un peu plus complexe : au départ, c'est-à-dire au moment de la chute, l'objet s'enfonce et entraîne avec lui une partie du fluide environnant, celui-ci est en quelque sorte aspiré à la source. Ce phénomène dure tant que l'effet de peau dû aux tensions superficielles du fluide subsiste, puis termine lorsque les tensions s'annulent par rupture lors de l'immersion de l'objet. On peut reproduire aisément ce phénomène avec une phase décroissante (attention, cela se traduit par une phase nulle en entrée, et égale à 1 en sortie : l'ondulation part alors de l'extérieur vers le centre). La figure "Vague_M2" indique que cet effet se produit de l'image 31 à 34 supposées correspondre à la pénétration de la goutte dans l'eau de la vasque (bien sûr, le type est sphérique). ![]() Vague M2 ![]() Vague M3 ![]() Vague M4 Le rendu L'animation a été calculée en 640x512 HAM8 en 1H20 en mode double. Compte tenu du nombre de polygones, des calculs de transparence et de la vague, c'est un peu trop court pour être honnête. Et bien oui, j'ai triché. J'ai en fait utilisé une astuce très simple, mais qui permet de gagner un temps très significatif sur le calcul de rendu. C'est ce que j'appelle le principe du plus petit rendu différentiel (PPRD). Le principe part d'une idée simple : ne peut-on éviter de calculer autant de fois qu'il y a d'images des éléments qui ne changent pas au cours de l'animation ? La réponse est oui ! Voici comment je procède... Je repère les éléments qui vont changer (comme la surface de notre liquide), quelle qu'en soit la cause, où qui sont, par leur position, en interaction avec un élément changeant (comme le pied du support se trouvant entre la caméra et le plan d'eau, que de la sorte, il doit cacher). Dans notre cas, il s'agit de la goutte, de la vague et son chemin, du plan d'eau et du pied de devant, pour lequel on a vu qu'il interférait sur le rendu puisqu'il doit cacher le plan d'eau. Je sélectionne alors ces éléments, ils forment ensemble ce que j'appelle le PPRD, et je les cache. Je calcule l'image avec les paramètres que j'utiliserais pour l'animation (post-traitement d'image, matrice de convolution pour les contours, etc.) et dans la même résolution, mais en 24 bits pour un meilleur rendu. Je sauvegarde ensuite l'image ("clepsydre.back" dans notre cas). De retour à l'éditeur, j'inverse les éléments vus et cachés, le PPRD étant seul présent dans le modeleur maintenant. Je créé un fond avec comme texture l'image précédemment sauvegardée. Il faut prendre soin de mettre les curseurs "Color" (Couleur) et "Strength" (Force) à 1,00 en entrée et sortie. Je n'oublie pas d'activer "Background" (Fond) dans les options de rendu, et je calcule l'animation. Vous avez compris, Aladdin 4D calculera beaucoup plus vite avec moins d'éléments, et l'affichage de fond représente aussi, pour les routines de rendu, des temps de calcul beaucoup plus courts que s'il avait fallu recalculer à chaque fois toute la scène. Alors que le fond est calculé en 7 minutes (800x600x24), une image de l'animation est calculée seulement en 1 minute 20 secondes. Dans la mesure où le fond ne contient pas tout les éléments du projet, on peut affirmer que le gain est au minimum de 5,6. En temps réel, ce sont plus de 6 heures gagnées sur le calcul ! ![]()
|