1

A la demande de mon frère, utilisateur de 3D Studio Max (The Rain Knight, http://www.3dcars.fr.st), j'ai developpé un programme OpenGL Windows qui effectue des reflexions d'environnement en temps réel sur des meshes de 3D Studio Max.

Le programme lit des fichiers .3ds et des maps d'environnement .bmp.
Son but est de positionner la caméra en fonction des reflexions obtenues pour ensuite reporter cette position caméra et effectuer un rendu évolué dans 3D Studio Max.
L'utilisateur peut tourner et translater sa camera, et zoomer/dézoomer avec la souris. De nombreuses autres options sont disponibles (par le biais du menu ou au clavier).

Le programme fonctionne avec deux modes de mapping, au choix :
- Sphere Mapping (coordonnées de texture générées automatiquement par le programme)
- Environment Mapping (360° x 360°) (coordonnées de textures calculées moi même). Les coordonnées de texture correspondent à la latitude et longitude d'un point sur la sphère d'environment.

Pour télécharger le programme : em3dsv1.0.zip
Consulter le Readme : em3dsv_1.0_Readme.htm

Je vais faire un .zip avec la source demain (enfin tout à l'heure tongue) pour ceux qui sont interessés mais le code est sale...

car_front.jpg
et ici en grand

crown.jpg sphere.jpg
Mon site :
[TI68k] Space Dementia I : Version 0.8
[TI68k] Space Dementia II, mod arena : Version 0.3 avec IA
[OpenGL] Environment Mapping 3ds Viewer : version 1.0
[OpenGL] Programmation d'une simulation de voiture avec le moteur physique Tokamak

2

ca a l'air sympa... pk tu gere pas l'HDR? c'est tout con a rajouter, et si t'as pas acces aux vp/fp ou aux floating point render targets tu peux quand meme le faire en forkant ton environment map et en balancant a OpenGL une version rescalee sur le CPU avec l'expose. (ok ca a pas bcp d'interet pour le gars qui se sert de ton prog pour 3ds mais ca peut etre sympa pour aborder l'HDR smile)

"des reflexions d'environnement"

j'appelle pas ca des reflexions mais bon ^^
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

3

tu peux quand meme le faire en forkant ton environment map et en balancant a OpenGL une version rescalee sur le CPU avec l'expose

pas compris triso, tu peux parler français stp ? happy
Mon site :
[TI68k] Space Dementia I : Version 0.8
[TI68k] Space Dementia II, mod arena : Version 0.3 avec IA
[OpenGL] Environment Mapping 3ds Viewer : version 1.0
[OpenGL] Programmation d'une simulation de voiture avec le moteur physique Tokamak

4

greuh...
t'as ta texture HDR, avec pixel sous forme flottante, pas entiere. tu clone cette map, tu la fork quoi... t'en fais une copie, bref... que tu rescale avec le facteur d'expose, et t'uploade la copie a OpenGL comme une texture normale, et quand l'expose change, tu re-rescale l'image d'origine dans le clone, et tu le re-uploade a OpenGL...

par rescaler, je veux dire un truc du genre:

scale = expose * 255.0f;
for (i = 0; i < width * height; i++)
{
final[i].r = clamp(hdr[i].r * scale);
final[i].g = clamp(hdr[i].g * scale);
final[i].b = clamp(hdr[i].b * scale);
}

avec un

inline BYTE clamp(float val)
{
return (val > 0xff ? 0xff : val);
}

rien de plus...
et t'upload la texture "final" a gl...

par "une version rescalee sur le CPU", je voulais dire que ca tu le fais sur le CPU dans ton prog, au lieu de le faire sur le GPU dans un fragment program...
je vois pas comment expliquer autrement triso
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

5

Ok j'ai a peu près compris.
Je suis pas spécialiste en HDR, l'expose c'est un coefficient de luminosité ? (stoché dans le fichier hdr ou completement défini par le programme a une valeur quelconque ?)
Tu dit : si l'expose change, mais c'est moi qui décide la valeur que je veux lui donner... ? Enfin je peux aussi proposer à l'utilisateur de le changer.
Mon site :
[TI68k] Space Dementia I : Version 0.8
[TI68k] Space Dementia II, mod arena : Version 0.3 avec IA
[OpenGL] Environment Mapping 3ds Viewer : version 1.0
[OpenGL] Programmation d'une simulation de voiture avec le moteur physique Tokamak

6

oui, l'expose c'est l'utilisateur qui la change en temps reel, c'est comme l'expose en photographie... plus tu laisse le diaphragme (y me semble que c'est le diaphragme, un truc comme ca, mais je suis pas sur du terme) ouvert longtemps, ou plus tu l'ouvre, plus la lumiere entre et vient impresionner le film, et plus t'as une image lumineuse (cf images surexposees), c'est utile pour voir des details dans des endroits tres sombres ou t'as pas bcp de lumiere, mais en contrepartie, dans des endroits tres lumineux, t'es aveugle et tu vois que dalle... l'inverse marche aussi, si tu le laisse ouvert tres peu de temps, dc que ton expose est tres faible, tu verra que dalle dans les endroits sombres mais tu verra bcp mieux les endroits tres lumineux...
tu peux voir ca comme le coefficient de dilatation de la pupille aussi, t'as sans doute du observer des chats? la nuit ils ont les yeux super dilates, leur "coeff d'expose" est tres eleve, ils recuperent un max de lumiere, alors que quand ils sont dans un endroit tres lumineux, y a juste une fente dans l'oeil pour laisser passer tres peu de lumiere...

et le truc bien c'est que tu peux regler ca automatiquement, dans le cas d'un jeu par exemple, tu peux chopper l'intensite moyenne de ton frame buffer, et regler l'expose en fonction de ca. du coup si t'es dans un endroit tres sombre, tu verra plus ou moins bien, mais si qqun allume brusquement la lumiere, tu sera aveugle pendant quelques secondes le temps que l'expose se regle correctement, et progressivement tu verra mieux... idem si t'es dans une piece eclairee et que toutes les lumieres s'eteignent, au debut tu verra tout noir, mais progressivement les forment ressortiront (a condition qu'il y aie la moindre petite source de lumiere)...

et le principe des images HDRI, c'est justement de ne pas stocker d'expose. toutes les images non-HDRI ou qui n'ont pas de notion de HDR sont pre-exposees, alors que les HDRI contiennent un range d'intensites enorme compare aux autres (d'ou le stockage en floats ou en halfs, ou sur quoi que ce soit qui soit superieur a 8 bits), avec aussi bien une bonne precision dans les intensites tres faibles que dans les intensites tres hautes, ce qui te permet de regler l'expose en temps reel et de pouvoir afficher sur un moniteur qui a un low dynamic range une image qui a un high dynamic range. tu peux voir le range de couleurs entre 0 et 1 d'un moniteur comme une "fenetre" sur le range des vraies intensites, que tu etire plus ou moins... mmh enfin bref...
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

7

tiens d'ailleurs la:

car_front.jpg

le bout de ciel au fond qui apparait tout blanc et qui donne l'impression de "baver" sur ce qu'il y a a cote...
si l'expose etait plus faible que ce qu'il est, tu verrais les details de cette partie, elle serait pas super blanche, mais le reste de la scene serait tres sombre...
si l'expose etait plus eleve que ce qu'il est, tu verrais une zone blanche saturee encore plus grande, mais si il y avait des parties sombres dans l'image, tu les verrais mieux...
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

8

Ouais j'ai tout a fait compris...
Il faudra donc que je teste différentes valeurs d'expose pour utiliser une valeur par défaut modifiable ensuite... ou pour scaler la valeur calculée à partir de l'image dans le cas ou c'est implémenté...
Mon site :
[TI68k] Space Dementia I : Version 0.8
[TI68k] Space Dementia II, mod arena : Version 0.3 avec IA
[OpenGL] Environment Mapping 3ds Viewer : version 1.0
[OpenGL] Programmation d'une simulation de voiture avec le moteur physique Tokamak

9

bah tu sais... comme valeur par defaut tu peux mettre 1, ou bien faire une moyenne de toutes les intensites de ton image et de faire ton expose_default = 1.0f / total_intensities; ou un truc du genre...
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina