Suivez-nous sur X

|
|
|
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
|
|
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
|
|
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
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
En pratique : Real 3D - Les textures procédurales
(Article écrit par Jac Pourtant et extrait d'Amiga News - octobre 1996)
|
|
Ce mois-ci nous allons continuer à étudier les textures, mais sous leur angle algorithmique puisque nous allons nous concentrer
sur les "handlers" de la fenêtre "Materials".
Cette série n'a pas pour but de se substituer au manuel, mais d'éclairer les points obscurs de celui-ci. Il ne faut donc pas
attendre de réalisation plus ou moins spectaculaire comme dans d'autres séries du genre. Avant tout, je voudrais revenir sur
ce conseil du mois dernier si vous êtes sous environnement CyberGraphX. Je me suis personnellement enregistré chez le polonais
"Miloslaw Smyk, ul. Orawska 22/34, 70-131 Szczecin, Pologne" et j'ai donc modifié mon Default.prj pour intégrer cette wfmh.library
géniale qui me sort non seulement mes fenêtres View en 15 bits merveilleusement tramés, mais aussi les gadgets "Visible" de la
fenêtre "Tools" en relief (Miloslaw nous dit que son oeuvre est compatible avec les versions 3.11 et aussi 3.3 - que je ne connais
pas).
Généralités
Les handlers (j'ai pris ici ceux de la version 3.11) sont des clés mathématiques qui se rajoutent à tous les réglages que nous avons
vus le mois dernier. Ils sont tous à la position "default" par défaut. Cette position ne reçoit
aucun paramètre. Les autres reçoivent soit une ou des expression(s) mathématique(s), comme "Formula", soit une ou des expression(s)
en langage RPL, comme "RPL", ou bien des valeurs dans les gadgets numériques "a" et "b" pour le reste des positions.
Il est très difficile de faire court, il faudrait au minimum deux pages par handler pour les détailler. Chacun doit faire ses
propres essais. Mon rôle est de débroussailler.
Pour RPL ou Formula, on ne peut pas rentrer n'importe quel paramètre, je vais indiquer ceux qui conviennent. Par contre, la
formulation dépasse le cadre de cet épisode ainsi que le RPL qui viendra en son temps (dans quelques mois...).
Rappelons enfin ce que dit le manuel : "les paramètres sont prévus pour évoluer entre 0 et 100. En dehors de ces limites, les
résultats sont imprévisibles".
Le mapping handler
Pour utiliser ce handler, il faut appliquer une texture en placage (mapping), c'est-à-dire qu'il faut avoir chargé une image qu'on
va appliquer à l'objet.
- Formula et RPL : les variables sont "x, y et z". Reportez-vous au manuel page "R.1.8" pour voir comment elles sont appliquées.
- Tilt : la texture est appliquée en oblique selon "a" (défaut "a=1").
- Waves : l'application se fait par une sinusoïde avec "a" pour la fréquence et "b" pour l'amplitude (défaut "a=b=1").
- SwapXY : ici, "x et y" sont intervertis et "a et b" ne jouent aucun rôle.
- Noise : la granulation est proportionnelle à "b". Pour "b=10", granulation faible; "b=100", granulation forte; "b=1000", plus
rien n'est reconnaissable. Ici, "a" ne joue que le rôle de graine aléatoire. En faisant évaluer "a" dans une animation, la
granulation scintillera.
Le scope handler
Scope veut dire ici quelle portion et sous quelle intensité le placage sera visible.
- Formula et RPL : les variables sont "s, sp, sb, br, tr, tu, ts, ro, ri". "s" représente le pourcentage de mixage de la
texture présente avec les autres. Si "s" est négatif, l'objet disparaît. Si "s=0", l'image est invisible. Si "s=100 ou plus",
l'image s'applique pleinement. Il y aurait énormément plus à dire en fonction de toutes les variables, mais ce serait un traité
en 10 volumes...
- Sphere : l'image n'est visible que dans une sphère centrée à l'origine de la texture. Le paramètre "a" définit le rayon de la
sphère, "b" ne joue aucun rôle.
- InvSqr : plus on s'éloigne de l'origine de la texture, moins elle s'applique. Plus "a" est petit, plus vite la texture s'estompe
avec l'éloignement, "b" n'a pas d'influence.
- InvExp : la même chose que "InvSqr" sauf qu'au lieu de l'inverse du carré, la progression est exponentielle et donc plus radicale.
- Local : là, il s'agit d'un condensé de "Sphere" et de "InvSqr" puisque l'image n'est visible que dans la sphère, mais en se
dégradant vers le bord.
- Temporal : l'image s'applique uniformément mais en fonction du temps. Les valeurs pour "a et b" sont comprises entre "0" (0%)
et "1" (100%); "a" représente le facteur au temps "0", "b" au temps "1". Ainsi "a=0.100" et "b=0.850" : le placage est visible à
10% au début, à 85% à la fin de la séquence.
- Noise : grenage aléatoire où "a" représente la grosseur du grain (très gros si proche de "0", très fin vers "10", invisible
dans les hautes valeurs) et "b" l'intensité (de "0.200" où l'image est pratiquement inaltérée à "5.000" où elle est pratiquement
invisible.
- Depth : le placage ne s'applique ici qu'entre la profondeur "a" et la profondeur "b" (en mètres absolus). "b" doit être plus
grand que "a". Comme le dit le manuel, pratique pour n'appliquer la texture que sur une face de cube, par exemple.
- Angle : la texture ne sera visible qu'entre l'angle "a" et l'angle "b" ("0" étant la surface, "-1" la perpendiculaire
"derrière", "1" la perpendiculaire "devant"). Donc "a=0, b=1.1" ("1.1" pour être sûr) la texture ne sera visible que sur la
face avant ; pour "a=-1.1, b=0", que sur la face arrière. Et bien d'autres possibilités...
Le bump handler
Le placage de relief (bump mapping) ne fonctionne pas si on applique une image. Il faut donc séparer les textures si on veut les deux.
- Formula et RPL : les variables sont "bh, bx, by".
- Waves : "a" nous donne la fréquence des vagues qui s'étendent parallèlement en direction des "x". "b" nous fournit l'amplitude
(au-delà de "1.000", l'effet s'amplifiant, les vagues s'écrêtent, c'est-à-dire qu'elles deviennent presque carrées.
- Bumps : comme "Waves" sauf que les vagues s'étendent dans les directions "x et y", ce qui nous donne une structure régulière en
forme de "boîte à oeufs".
- Noise : relief aléatoire où "a" représente la grosseur du grain ("a" plus élevé, grain plus fin) et "b" la force.
- Roughness : je dois dire que je n'ai obtenu aucun résultat. Je n'en parlerai donc pas. Il semble y avoir une bogue.
Le color handler
- Formula et RPL : "R, G, B" en sont les variables.
- Bright : les couleurs sont augmentées en fonction de "b" dans un rayon déterminé par "a".
- Waves : similaire à "Bump Waves" sauf que c'est la couleur qui est en jeu, bien qu'on puisse en confondre l'effet sur une
surface plane.
- Granite : seul "a" a une influence sur le grain qui imite le granite (plus "a" est petit, plus le grain est gros).
- Noise : similaire à Granite, sauf que joue ici un rôle : celui de rajouter de la couleur jusqu'à un point exagéré dont on
peut jouer pour faire du multicolore.
- Marble : du marbre, bien sûr, si "a" est inférieur à "1.000" et même à "0.100", mais du moucheté irrégulier au-dessus de
"3.000". "b" règle l'intensité comme de bien entendu.
- Dither : aucune réaction constatée de ma part. Et vous ?
- Col.repl : idem, l'objet entier prend la couleur définie dans les gadgets numériques de couleur transparente et c'est tout.
Pas de quoi fouetter un spline. "a et b" sont muets.
L'index handler
Celui-ci est différent des autres. On en tire un index ("i") avec lequel on peut choisir une texture indexée. Dans les paramètres
"a et b", on peut placer le décalage de la congruence et le modulo. Vous me direz, c'est un peu hermétique, alors prenons un
exemple. Nous voulons faire une animation de 20 images. Nous voulons plaquer une texture basée sur une série de sept images
indexées de 0 à 6 (par exemple de "pic.0" à "pic.6"), et nous voulons démarrer à la troisième image ("pic.2"). Alors laissons
sur "Default", faisons "a=2, b=7". Ensuite, rentrons dans le nom de la texture "...chemin/textures/pic.%d". Le tour est joué.
Il fallait le trouver, car ce n'est vraiment pas marqué explicitement dans le manuel. Ça m'a pris deux heures pour comprendre
le processus. Si on veut indexer plus d'images, prenons le standard à quatre chiffres (genre "pic.0001") et le nom de la texture
à évoquer sera ".../pic.%04d" (selon les conventions de programmation C ANSI).
- Formula et RPL : variable "i" comme index.
- PingPong : comme "Default", sauf que l'index revient lentement au début pour réaliser une oscillation.
Le menu
Le menu de la fenêtre "Materials" offre peu d'intérêt. Les deux fonctions les plus utiles sont les deux premières qui sélectionnent
l'image à plaquer et qui la visualisent. Les raccourcis clavier ("Amiga-D" et "Right Amiga-S") suffisent. Transparent Color peut-être
pratique si on ne veut pas rentrer les valeurs manuellement, la sélection de cet item rentre la valeur de la couleur actuelle
définie soit par la palette soit par la roue de couleurs. "Tags" et "Procedure" appellent les fenêtres correspondantes, les
manuels ne disent pas un seul mot.
Le dernier item, la fenêtre "View" s'ouvre en plein milieu de la fenêtre "Materials". C'est un peu gênant. Il suffit de la
sélectionner et de désactiver le menu "Project/Windows/No Gadgets", la déplacer, la redimensionner à son goût et éventuellement
réactiver l'option "No Gadget". L'inconvénient de cette fenêtre est qu'elle n'est qu'une quelconque fenêtre View qui montre
les objets du projet en plus de ses objets propres. Alors ce n'est pratique que sans objets ou en désélectionnant leur présence
en raytrace.
Dénonçons les bogues
Que tous ceux d'entre vous qui ont remarqué des bogues dans Real 3D me les signalent. Il y en a d'évidentes comme le rendu des
surfaces courbes qui se fait en 16 bits et non en 24 bits (on voit les bandes de couleurs très nettement).
J'ai constaté dernièrement que le fait de sauvegarder une fenêtre "View Tools" dans l'environnement faisait planter au lancement
de Real 3D, mais peut-être est-ce une facétie du DraCo ?
|