website logo
Auteur
avatar
thellier

Forum » » Création-Développement » » Oui on peut faire du bump mapping avec Warp3D/Os4


Posté : 25-11-2012 10:57 icone du post






>La lightmap = Bump mapping ?
Non pas vraiment la lightmap c'est juste une texture fixe comme un calque où on aurait dessiné les parties éclairé/pas éclairées en niveau de gris noir blanc : imagine un mur avec une lampe en applique alors la lightmap serait juste un calque avec un rond plus clair au niveau de la lampe
On peut faire une lightmap dans Dpaint à la main...
Le bump mapping c'est générer à la volée une lightmap à partir d'une normalemap

>Est-ce un tableau bidimensionnel contenant des 0 et des 1 ou des valeurs pour gérer plus finement les bosses et donc des valeurs entre 0 et 255 (ou plus si on utilise des couleurs 24 bits) ?
Tout à fait
On part d'une image quelconque dont on dit que "telle valeur de pixel equivaudra à une hauteur"
Ca peut donc marcher effectivement avec n'importe quelle type de texture comme tu le dis
De toute façon au final on obtient une texture qui contient une normale par pixel c'est avec cette texture
(normale map) que Warp3D va bosser
http://faculty.ycp.edu/~dbabcock/PastCourses/cs470/labs/images/nor malVectors.png
Donc n'importe quelle fonction capable de convertir chacun des pixels depuis 3 valeurs R G B vers nx ny nz (normale de pixels) pourrait faire l'affaire

>Le dot product me fait penser en fait à un produit scalaire, non ?
Oui c'est ça mon niveau de math et anglais est devenu faible avec le temps ...

>Je n'ai pas bien compris la normale pour les pixels.
>On a une série de 0 et de 1 qui indique si oui ou non on a de la lumière sur les pixels de la face.
>Donc par pixel on a une seule valeur 0 ou 1.
Effectivement 0 et 1 c'est le cas limite mais on comprend bien que
si 2 pixels de suite sont à 0 la pente est à 0 (on est monté de 0 millimetres)
si le premier est à 0 le deuxième à 1 la pente est à 1 (on est monté de 1 millimetre)
une fois qu'on a la pente alors la normale est là
http://thellier.free.fr/pixels-normals.gif


>Donc je ne comprends pas la notion de pente en x et en y, ce qui impliquerait pour moi au moins deux valeurs par pixel.
C'est car on parcoure la texture en x et en y
Admettons une tex de 4x4 pixels en niveau de gris de 0 à 100
10 10 10 10
10 20 10 10
10 15 10 10
10 10 10 10

On a un point "plus haut" qui est à 20 entouré de 2 pixels
20 10
15

Calculons sa normale de pixels
en x = 10 -20 = -10 sur 100 soit -10/100 donc normale.x=0.10
en y = 15 -20 = -5 sur 100 soit -5/100 donc normale.y=0.05
oui je change le signe car la normale regarde vers le haut pas comme la pente
on met normale.z=1.0; faute de mieux et comme en mathematique la
longueur d'une normale n doit valoir 1.0
alors on calcule sa longueur long=racinecarrée(n.x * n.x + n.y*n.y + n.z*n.z)
et on fait
n.x = n.x/long ;
n.y = n.y/long ;
n.z = n.z/long ;
on obtient une normale standard par pixel
on la stocke dans la texture qui elle contenait juste 3 UBYTE R G B (donc des valeurs de 0 à 255)
R=(n.x/2.0+0.5)*255;
G=(n.y/2.0+0.5)*255;
B=(n.z/2.0+0.5)*255;
Ca y est on a une normale map

après on laisse juste Warp3D faire le boulot : un dotproduct par pixel
qui va générer à la volée une lightmap

Alain











Un amateur pas trop éclairé, bien près du 0

Cet article provient de Le site des utilisateurs francophones actuels et futurs d'AmigaOS 4.x
https://amiga-ng.org/viewtopic.php?topic=1414&forum=14