Obligement - L'Amiga au maximum

Samedi 20 avril 2024 - 01:17  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


En pratique : Aladdin 4D : Clepsydre, ou comment faire des vagues
(Article écrit par Thierry Bauser et extrait d'Ami-GrafX - avril 1995)


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 !
  • Version : 3.0.
  • Outils : standard.
  • Textures : Bois.01.JPEG (un bois quelconque), Marble.01.JPG empruntée aux ComboTextures, Clepsydre.ACK : l'astuce.
  • Temps de modélisation : 60 minutes sur un A4000/40 avec 14 Mo de mémoire.
  • Temps de calcul : 1H30 pour 60 images 640x512 HAM8 sur A4000/40.
  • Principales techniques abordées :
    • Étude des vagues texturales et des paramètres associés.
    • Optimisation des temps de calcul par la technique du plus petit rendu différentiel.
Réalisation

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 :
  • Le ballon.
  • Le liquide contenu dans le ballon.
  • La goutte.
  • Le support.
  • Le liquide contenu dans la vasque.
  • La vasque.
  • Le socle de l'ensemble.
  • Et enfin la vague.
Nous nous intéresserons d'abord aux éléments "classiques" pour terminer par les spécificités de l'ensemble (eaux et vague). Notez que, pour des raisons de clarté, je n'entrerai pas dans les détails dimensionnels des objets, et n'indiquerai éventuellement que des proportions ou des positions relatives entre objets lorsque cela sera nécessaire. De même, les manipulations standard du modeleur seront supposées être maîtrisées. Notez que l'outil "Sweep" (Balayer) sera utilisé de façon intensive.

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").

Aladdin 4D
Vasque Profil

Aladdin 4D
Vasque Sweep

L'objet obtenu doit être identique à celui représenté en figure 3 "Vasque_Mod".

Aladdin 4D
Vasque Mod

Attention, le disque supérieur résultant de la rotation sera groupé séparément, car il constituera l'eau contenue dans cette vasque. Pour les manipulations suivantes, seuls le volume de la vasque (disque exclu) sera concerné.

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.

Aladdin 4D
Vasque TX

Aladdin 4D
Vasque 24b

2. Le socle

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").

Aladdin 4D
Socle Profil

Aladdin 4D
Socle Sweep

Aladdin 4D
Socle Mod

Aladdin 4D
Socle Profil

3. La bulle

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.

Aladdin 4D
Bulle Profil

Aladdin 4D
Bulle Mod

La fonction "Sweep" (Balayer) est paramétrée comme pour la vasque. On efface les deux ou trois premières rangées du haut pour faire un trou. La bulle est lissée également en Phong et un attribut lui est assigné comme suit : R160V255B 185 et transparence de 240. Le reste est laissé en l'état.

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).

Aladdin 4D
Bulle Eau Mod

5. Le support

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.

Aladdin 4D Aladdin 4D
Goutte Profil et Goutte Model

Ensuite, lissage en Phong et assignation d'un attribut à trois membres. En effet, la goutte doit être invisible de l'image 1 à 25, puis visible avec les attributs de l'eau de la bulle des images 25 à 31, et à nouveau invisible jusqu'à la fin de l'animation. Le plus simple sera de cloner l'attribut de l'eau de la bulle et d'ajouter les deux membres en respectant les chronologies indiquées. La goutte doit ensuite être placée à l'extrémité du goulot (base de la bulle).

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%.

Aladdin 4D
Goutte Chemin

Bien sûr, "Status" (Statut) sera activé. Ce chemin sera finalement assigné à la goutte. La spline contrôle à la fois les débuts et fins de mouvements aux bons moments, et l'accélération due à la pesanteur.

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).

Aladdin 4D
Projet Complet

8. La vague

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).

Aladdin 4D
Vague Const

Aladdin 4D
Vague Amort

On peut préciser sur le premier les différents paramètres définissant la vague, et on peut se rendre compte tout de suite que la courbe est une sinusoïdale où l'on retrouve l'amplitude (distance entre crêtes ou entre les creux et les bosses). Vient ensuite la période (distance entre deux alternances) ; on peut aussi parler de son inverse, la fréquence (plus celle-ci est grande, plus les alternances sont rapprochées). La phase détermine le décalage entre la première alternance et l'origine.

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).

Aladdin 4D
Vague M1

Passons tout de suite sur les éléments habituels et plus ou moins communs aux autres fenêtres de contrôle d'Aladdin 4D pour nous intéresser aux paramètres spécifiques :
  • Le type, il détermine comment la vague se développe suivant un axe (Linear X/Y/Z) ou une sphère (Spherical) ou si la zone d'influence est constituée d'un réseau de sources de vagues multiples (Multi), ou encore permet d'introduire un effet d'interactions sur la vague elle-même (Bump).
  • Dans le cas du mode "Multi", les dimensions du réseau cubique sont renseignées dans les colonnes "Multi-options".
  • Le nombre (Wave Number), si plus grand que 1, l'effet obtenu est identique à plusieurs vagues très proches les une des autres.
  • Amplitude, Frequency (fréquence) et Phase, déterminent les paramètres de la sinusoïde, comme on l'a vu.
  • Max Range et Min Range définissent les limites d'influence de la vague. Il est utile, je pense, de préciser ici que la zone d'influence est un volume, si la vague est sphérique, la zone d'influence est une sphère creuse dont Max Range et Min Range sont respectivement les rayons extérieurs et intérieurs.
Pour résumer, le comportement de la vague au cours de l'animation est contrôlé par les variations des paramètres, et il nous sera possible de reproduire les effets d'atténuation nécessaires à notre projet.

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).

Aladdin 4D
Vague M2

Dans un deuxième temps, la vague se propage en cercles concentriques (comme des anneaux allant en s'élargissant), tandis que l'amplitude décroît sensiblement. L'effet est obtenu en modifiant les valeurs "Max Range" et "Min Range" pour contrôler la sphère d'influence dont les deux rayons doivent augmenter. On prendra soin, ces valeurs étant en unité du modeleur, de les ajuster en fonction de la surface concernée. De même, l'amplitude est diminuée en sortie (6 à 2). La figure "Vague_M3" montre les images 34 à 47.

Aladdin 4D
Vague M3

Finalement, les cercles concentriques continuent de grandir mais l'amplitude diminue jusqu'à 0. Ce qui fait disparaître la vague. Voir figure "Vague_M4" pour les dernières images (47 à 51).

Aladdin 4D
Vague M4

Voilà pour notre goutte d'eau. Les images 32, 34, 38 et 42 sont extraites de l'animation (projet épuré pour ne garder que la vague).

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 !

Aladdin 4D

Allez, en prime, vous pourrez étudier le rendu d'une image de l'animation recalculée en 800x600x24 bits ("clepsydre.24").


[Retour en haut] / [Retour aux articles]