GeeXLab
Current version: 0.45.1
>GeeXLab homepage

FurMark
Current version: 1.30.0
>FurMark homepage

GPU Caps Viewer
Current version: 1.55.0.0
>GPU Caps Viewer homepage

GPU Shark
Current version: 0.26.0.0
>GPU Shark homepage


Blogs
>JeGX's HackLab

Geeks3D's Articles
>GPU Memory Speed Demystified

>Multi-Threading Programming Resources

>GeForce and Radeon OpenCL Overview

>How to Get your Multi-core CPU Busy at 100%

>How To Make a VGA Dummy Plug

>Night Vision Post Processing Filter

PhysX FluidMark
Current version: 1.5.4
>FluidMark homepage

TessMark
Current version: 0.3.0
>TessMark homepage

ShaderToyMark
Current version: 0.3.0
>ShaderToyMark homepage
>ShaderToyMark Scores

Demoniak3D
Current Version: 1.23.0
>Demoniak3D
>Download
>Libraries and Plugins
>Demos
>Online Help - Reference Guide
>Codes Samples
 
Normal Maps

Par Jérôme 'JeGX' GUINOT
jegx [at] ozone3d [dot] net - The oZone3D Team

Version initiale: 2 Novembre 2005




1 - Introduction

2 - Downloads




1 - Introduction

Une normal-map, aussi appelée bump-map, est une texture dans laquelle chaque texel (texel = texture element) contient un vecteur normal XYZ. Dans une texture classique, encore appelée color-map ou diffuse-map ou base-map, chaque texel contient une couleur RGB. Fondamentalement, il n'y a aucune différence entre une normal-map et une color-map si ce n'est l'interprétation que l'on donne aux texels.

Le vecteur normal contenu dans un texel d'une normal-map représente le vecteur perpendiculaire à la surface d'un objet au niveau du texel considéré. Dans ce cas bien particulier, le vecteur normal a pour composante XYZ le triplet {0.0, 0.0, 1.0}. Un vecteur de ce type indique qu'il n'y a aucune déformation (ou relief) au niveau du pixel. Pour perturber la surface, il suffit d'avoir un vecteur différent, par exemple {0.2, 0.3, 0.93}. Détail important pour ceux qui souhaiteraient générer leur normal-map: un vecteur normal à toujours une longueur unitaire, c'est à dire que sqrt(X2 + Y2 + Z2) = 1.0 où sqrt() est la fonction racine carrée.

La principale utilisation d'une normal-map est la description (par pixel) de la surface d'un objet. Cette description très précise, puisque du niveau du pixel, est utilisée dans les algorithmes de bump mapping et d'éclairage par pixel. Les algorithmes cablés de lighting des cartes graphiques utilisent la normale par vertex ce qui conduit à un éclairage très peu réaliste sauf si le nombre de polygones devient très grand (mais nous aurons dans ce cas quelques petits problème de vitesse de rendu!). Grâce aux shaders programmables (vertex et pixel shaders), on peut désormais effectuer les calculs d'éclairage au niveau du pixel en exploitant les normal-maps ce qui conduit à des rendus très réalistes sans pour autant avoir des modèles denses en polygones.

Généralement, une normal-map est dérivée d'une color-map. Cette dérivation se fait à l'aide d'utilitaires de création de normal-maps. Voyons tout cela en détail.

Pour commencer, voilà une color-map:


fig.1 - La color-map.

Et voilà maintenant la normal-map générée à partir de cette color-map:


fig.2 - La normal-map.

L'utilitaire que j'ai employé pour créer la normal-map était disponible à une époque sur le site de nVidia. Il y est peut être encore mais doit être caché dans je ne sais quel package. Alors pour plus d'efficacité, je vous le fournie dans les downloads en fin de page. Cet utilitaire, nmapgen.exe est un tout petit utilitaire en ligne de commande (j'adore ce type de tools!). Je vous fournie également le fichier bat qui va avec afin de double cliquer dessus et de générer directement la normal-map. Le tool XpConfigurator vous permet d'installer une ouverture de shell Dos dans le clic droit de la souris sous Explorer. Très pratique pour générer n'importe où une normal-map.

La page suivante permet de downloader les plugins Photoshop concoctés par nVidia pour créer les normal-maps: Adobe Photoshop Plug-ins.

Une normal-map est reconnaissable par sa couleur bleuté. Je vous ai dit que chaque texel contient un vecteur XYZ. Si l'on tente de visualiser directement une normal-map à l'aide d'un simple viewer d'image, chaque texel sera interprété comme une couleur RGB. Cela signifie que la coordonnée X du vecteur normal sera lue comme la composante R (rouge) de la couleur, Y sera lue comme la composante G (vert) et enfin la coordonnée Z sera assimilée à la composante B (bleu). La normal-map représentant la surface de l'objet (exprimé dans l'espace tangent, voir les explications dans ce tutor: Bump Mapping avec GLSL ), la plus grande partie des vecteurs normaux aura la coordonnée Z très supèrieure aux deux autres X et Y. Z étant interprêté comme la composante bleue de la couleur, la normal-map sera globalement bleuté.

L'utilisation des normal-maps dans le cadre du bump mapping est expliquée dans ce tutoriel: Bump Mapping avec GLSL.



2 - Downloads

Téléchargez nmapGen + textures
Mise à jour: 2 Novembre 2005




GeeXLab demos


GLSL - Mesh exploder


PhysX 3 cloth demo


Normal visualizer with GS


Compute Shaders test on Radeon


Raymarching in GLSL



Misc
>Texture DataPack #1
>Asus Silent Knight CPU Cooler
Page generated in 0.0016040802001953 seconds.