Prog Grafik : Lancer de rayons... - Graphisme
Marsh Posté le 11-12-2001 à 16:53:14
Au fait, si y'a kk1 ki si connait, je cherche l'équation d'un plan ki fait des ondes (sortes de vagues) à base de cosinus..
Merci
Marsh Posté le 11-12-2001 à 17:01:00
c un peu de la prog, ça. Post le même topic dans la rubrique porg, tu y trouvera réponse
au fait, c quoi le sujet du projet ?
Marsh Posté le 11-12-2001 à 17:06:52
Le Castor a écrit a écrit : c un peu de la prog, ça. Post le même topic dans la rubrique porg, tu y trouvera réponse au fait, c quoi le sujet du projet ? |
Je sais keu sa touche pa mal à la prog, mais C ossi du grafizm...
Le sujet du projet C faire un lancer de rayon en opengl.
Marsh Posté le 11-12-2001 à 17:12:42
ah ouais, pour l'instant, ça donne pas mal, manque juste l'atténuation, et l'antialiasing, et ça sera parfais
Marsh Posté le 11-12-2001 à 17:14:33
Le Castor a écrit a écrit : ah ouais, pour l'instant, ça donne pas mal, manque juste l'atténuation, et l'antialiasing, et ça sera parfais |
L'antialiasing, C pour trè biento, kant a l'attenuation, elle y est déjà mais pas tou ta fai o point...
Marsh Posté le 11-12-2001 à 17:17:38
Dav Vador a écrit a écrit : L'antialiasing, C pour trè biento, kant a l'attenuation, elle y est déjà mais pas tou ta fai o point... |
wow ! et j'espère qu'il y a plusieurs types d'attenuation, pas que linear, j'veux inverse square aussi
ah oui, le temps de rendu est long, ou c du temp réel ?
Marsh Posté le 11-12-2001 à 17:24:56
Le Castor a écrit a écrit : wow ! et j'espère qu'il y a plusieurs types d'attenuation, pas que linear, j'veux inverse square aussi ah oui, le temps de rendu est long, ou c du temp réel ? |
L'attenuation n'est pas linéaire, inversement proportionnelle à la distance (c'est la seule, mais on peut modifier les coeffs...).
Pour le tps de rendu, il faut compter environ 30s sur mon Athlon 600 quand il y a les 2 plans, kks secondes sans les plans, mais en tou K, C pa du tps réel!!!
Marsh Posté le 11-12-2001 à 17:31:21
Dav Vador a écrit a écrit : L'attenuation n'est pas linéaire, inversement proportionnelle à la distance (c'est la seule, mais on peut modifier les coeffs...). Pour le tps de rendu, il faut compter environ 30s sur mon Athlon 600 quand il y a les 2 plans, kks secondes sans les plans, mais en tou K, C pa du tps réel!!! |
c cool. Un raytracing temps réel serait tellement cool..... et sinon, ca gère les reflexion infinies, comme si tu met deux miroirs l'un en face de l'autre ?
Marsh Posté le 11-12-2001 à 17:34:16
Ca serai kooooooool, mai aC pa moua ki vai le pondre....
Koikeu, sans les réflexions, sans la transparences et avec des plans finis, peut être... J'essaierai si G le tps.
Pour la réflexion, on choisi le nombre d'itérations maxi dans le code.
Marsh Posté le 11-12-2001 à 17:40:08
Dav Vador a écrit a écrit : Ca serai kooooooool, mai aC pa moua ki vai le pondre.... Koikeu, sans les réflexions, sans la transparences et avec des plans finis, peut être... J'essaierai si G le tps. Pour la réflexion, on choisi le nombre d'itérations maxi dans le code. |
wow, c cool. A quand le logiciel 3d complet ?
Marsh Posté le 11-12-2001 à 17:45:02
Le Castor a écrit a écrit : wow, c cool. A quand le logiciel 3d complet ? |
Pa pour mintenan
D'ici les vakance, le lancer de rayon devrait être fini, mais il ne devrai prendre en charge keu des sphères, des plans, et des parallèpipèdes.... Un peu light pour un logiciel 3D...
Mais pour le tps réél, plu j'y pense et plus je me dis keu C possible, mai avec un minimum d'effets bien sûr...
Bon, je vai devoir y aller.
A+
Marsh Posté le 11-12-2001 à 17:46:44
Dav Vador a écrit a écrit : Pa pour mintenan D'ici les vakance, le lancer de rayon devrait être fini, mais il ne devrai prendre en charge keu des sphères, des plans, et des parallèpipèdes.... Un peu light pour un logiciel 3D... Mais pour le tps réél, plu j'y pense et plus je me dis keu C possible, mai avec un minimum d'effets bien sûr... Bon, je vai devoir y aller. A+ |
ok tcho !
Marsh Posté le 11-12-2001 à 19:56:27
moi j'attend le moteur 3d comme ca on pourra faire le jeux si yen a d'autre ki veulent participer en dessins ou en modelisation 3d de perso ce serait cool
Marsh Posté le 11-12-2001 à 21:12:08
Dav vador tu fais quoi comme études? faut être fort en math pour la prog de moteur?
Marsh Posté le 12-12-2001 à 11:05:35
[cit]Au fait, si y'a kk1 ki si connait, je cherche l'équation d'un plan ki fait des ondes (sortes de vagues) à base de cosinus..[/cit]
si tu ne trouves pas là-dedans... je ne sias pas où tu peux l'avoir... (Black Book of Art de M. Abrash (Doom,Kwak,...))
http://www.amazon.com/exec/obidos/ [...] 11-3154162
quoiqu'il me semble avoir vu un book qui expliquait les modèles mathématiques des vagues / rouleaux / écume.
pas mal du tout tes écrans !
[edtdd]--Message édité par TBone--[/edtdd]
Marsh Posté le 12-12-2001 à 11:17:11
http://net.asp.ucar.edu/~layton/research/water/
ça devrait le faire à mon avis.
Marsh Posté le 12-12-2001 à 11:21:34
edit: je viens de jeter un oeil sur la ressource
put@in les maths et moi... bonne chance !
Marsh Posté le 13-12-2001 à 12:56:04
Salu,
mohawk>> Je fais une maîtrise d'info.
Pour la prog du moteur, ya rien de bien compliquer, C juste de la géométrie simple (niveau 3ème à term... pour les équation de plans).
Le lancer de rayons est encore plus simple que le moteur, il y a juste quelques équations d'illumination à respecter, sinon c'est tou de la récursivité.
TBone>> Merci pour les liens.
J'essaie d'uploader kks nouvelles images et sources et exe.
G ajouter l'antialiasing et le chargement de fichiers scènes.
Marsh Posté le 13-12-2001 à 13:13:27
Les mêmes au format PNG (même taille et sans perte de kalité, mais pa lisible par tous).
http://www.multimania.com/davvador [...] /scene.png
http://www.multimania.com/davvador [...] scene2.png
http://www.multimania.com/davvador [...] scene3.png
http://www.multimania.com/davvador [...] scene4.png
http://www.multimania.com/davvador [...] scene5.png
http://www.multimania.com/davvador [...] scene6.png
Et puis les sources...
http://www.multimania.com/davvador [...] urces2.zip
[edtdd]--Message édité par Dav Vador--[/edtdd]
Marsh Posté le 13-12-2001 à 13:35:09
scott a écrit a écrit : fo koi pour lire les png |
Explorer le fait d'origine
Sinon, c cool, avec l'antialiasing ! Le seul problème, c qu'il floute un peu trop l'image. Le pied, ca serait un antialiasing qui renforce les contours (cf. antialisasing catmull-rom dans 3dmax)
Marsh Posté le 13-12-2001 à 13:35:22
J'ai aussi rajouté une scène qu'on peut tester en temps réél!!!!!
Bon ok, ya keu 3 sfère et 1 lumière, mais bon C déjà pa mal...
Imaginez dans 2 ans, quand on aura des athlon K10 à 5Ghtz..., on pourra jouer à des jeux dont le moteur sera en lancer de rayon!
Pour l'instant, G juste implémenté le déplacement de la caméra au clavier:
- 'q' passage en mode rapide (tps réél avec la scène scener.rtd)
- 'r' passage en mode rendu
- 'd' 'f' déplacement sur les X
- 'c' 'v' déplacement sur les Y
- 'g' 'b' déplacement sur les Z
O fait, merci au Castor pour l'ID.
Pour lancer l'exe, il faut passer:
- le fichier scene (rtd) en param 1
- le fichier ppm (facultatif) en param 2
Marsh Posté le 13-12-2001 à 13:38:31
scott a écrit a écrit : fo koi pour lire les png |
Avec ACDSee, C nikel.
Marsh Posté le 13-12-2001 à 13:40:21
Le Castor a écrit a écrit : Explorer le fait d'origine Sinon, c cool, avec l'antialiasing ! Le seul problème, c qu'il floute un peu trop l'image. Le pied, ca serait un antialiasing qui renforce les contours (cf. antialisasing catmull-rom dans 3dmax) |
Pour l'antialiasing, le mien est assez simpliste et basé sur un moyennage donc les contours deviennent un peu flou...
Les catmull, je préfère pa y penser... L'an dernier, G eu à en coder et CT pa 1 parti de plaizir!
Marsh Posté le 13-12-2001 à 13:49:00
Dav Vador a écrit a écrit : Pour l'antialiasing, le mien est assez simpliste et basé sur un moyennage donc les contours deviennent un peu flou... Les catmull, je préfère pa y penser... L'an dernier, G eu à en coder et CT pa 1 parti de plaizir! |
ah ouais ! je vois. Ben en fait, t'as fait la méthode standard.... En tous cas, la scène n°5 est très jolie !
Marsh Posté le 13-12-2001 à 13:55:22
Le Castor>> Merci.
C ossi ma préféré avec la 4.
Je kroi keu G raté la 6 kan G fai mon rendu hier soir (tro de lumière).
O fait, je vou conseille pa de faire des rendu avec antialiasing à fond sur la 5 et la 6 (+d'1/2 heure sur mon athlon).
Pour infos, G komancé mes rendu cette nuit à 4 et G fini à 6h15.
Du cou G vacheman
Marsh Posté le 13-12-2001 à 14:10:59
A yé, G enfin fini d'uploder!
SalT de PC en émulation linux...
Menfin.
Marsh Posté le 13-12-2001 à 18:19:12
même si tu dis que c'est simple, c'est du bon bon boulot !
Marsh Posté le 13-12-2001 à 22:59:38
au fait, je surfais pour LightWave quand je suis tombé là-dessus: http://www.gamasutra.com/gdce/jensen/jensen_01.htm
bon c'est pas de la lumière mais de la flotte mais comme ce sont des "waves" dans tous les cas p'têt que t'auras des zéléments.
je te propose donc que tu fasses un décor temps réel d'une mer un peu mouvementée avec du vent et des mouettes (qui a fait Toooûûût! ?!?) et j'apporte le thé au miel.
quand j'arriverai à faire ça... la fonte des glaces sera terminée...
[edtdd]--Message édité par TBone--[/edtdd]
Marsh Posté le 14-12-2001 à 19:45:43
TBone>> Merci mais je cherche juste une équation simple (fo que je puisse calculer la normale à ce plan) d'un plan qui ressemble à une sinus dans toutes les directions...
Je viens de terminer la 3ème version de mon projet:
http://www.multimania.com/davvador [...] urces3.zip
J'ai rajouté pas mal de trucs:
-Prise en charge de matériaux dans les fichiers RTD
-Amélioration du rendu (léger)
-Rendu tps réel avec changement de résolution, activation/désactivation de l'antialiasing, passage du mode Rendu normal au rapide, déplacement de la caméra au clavier et à la souris, le tout pdt l'exécution.
-kks petits détails...
Pour ce ki est du temps réel, C pa mal du tou.
Me reste enkor à pouvoir importer les fichiers ASE(3DS), normalement ce sera fai ce soir ou demain, et sera kool.
Marsh Posté le 16-12-2001 à 08:04:56
Écoute je sais pas c koi ton truc la (jai pas envi de lire le topic ) , mais si c'est de la prog openGL ou direct X...je te dit mon gars, si tu continue tu va allé loin voir meme crée un ton propre moteur graphique (quake 4 !!! ), tout ce qu'il manque pour que ça soi parfait c 60fps sec avec le meme effet de reflection etc.
Je parle bien sur en pensant que ta codé un truc un openGL. Si c pas le cas donc...
Marsh Posté le 18-12-2001 à 13:29:08
Ded_2K a écrit a écrit : Écoute je sais pas c koi ton truc la (jai pas envi de lire le topic ) , mais si c'est de la prog openGL ou direct X...je te dit mon gars, si tu continue tu va allé loin voir meme crée un ton propre moteur graphique (quake 4 !!! ), tout ce qu'il manque pour que ça soi parfait c 60fps sec avec le meme effet de reflection etc. Je parle bien sur en pensant que ta codé un truc un openGL. Si c pas le cas donc... |
Merci...
Open GL, je ne l'utilise que pour afficher mon tableau de pixels, sinon, je fais tou en soft.
Les 60fps, j'en sui très loin, C pluto 60spf (sec par images)!
Marsh Posté le 18-12-2001 à 14:12:35
c fait expres la deformation des spheres qui s'eloignent du centre?
Marsh Posté le 18-12-2001 à 14:32:47
Suri a écrit a écrit : c fait expres la deformation des spheres qui s'eloignent du centre? |
Oui et non.
Ca vien du fait que le plan sur lequel je lance mes rayons est un plan et non une (partie de) sphère. Je l'ai laissé kom sa pour 2 raisons:
- sa me facilite le boulo
- je trouve sa pa moche!
Marsh Posté le 19-03-2002 à 15:33:19
Version HTML
/*==============================================================================\
* *
* /===========================\ *
* * Raytracing - Tutorial n°1 * *
* \===========================/ *
* *
* *
* Auteur : Dav Vador *
* __ *
* _~\/~_ *
* |(o)(o)| Email : mchepoil@caramail.com *
* \ \/ / ~~~~~~~~~~~~~~~~~~~~~ *
* (^^) *
* *
* * . . + . . * . + . *
* . . * .-------°°°°°°°°-------. . . + *
* + .:::~~°:::O:::::oo:::::O:::°~~:::. * *
* <Site> : <{{ http://davvador.fr.st }}> ° * *
* . '<-(||}-----{#}~~~[##]~~~{#}-----{||)->' . . *
* * . _/ _/ ## \_ \_ . * . *
\================================================
==============================*/
I) K'est ce keu c'est ?
***********************
Raytracing (ou raycasting) se traduit en français par "lancer de rayons".
La technique utilisée pour ce type de rendu s'apparente en effet à un lancer de rayons depuis
la caméra, dans toutes les directions. L'application sur PC se traduit par un lancer de rayons
ayant tous pour origine le centre de la caméra et passant chacun par un pixel de notre écran.
Il faut donc lancer autant de rayons qu'il y a de pixels sur notre écran pour couvrir toute l'image.
II) Koman sa marche ?
*********************
1) Rappels :
============
a) La caméra :
--------------
Elle est déterminée par plusieurs paramètres :
- sa position dans l'espace (xr, yr, zr) et son orientation (rot_x, rot_y, rot_z)
- sa focale f = distance entre le centre de la caméra et son plan de projection (écran)
- sa résolution (res_x, res_y) et le pitch (pitch_x, pitch_y) des pixels = dimensions d'un pixel en unités du repère espace
b) Les matériaux :
------------------
Chaque objet est associé à un matériau (plastique, métal, ...) déterminé par :
- une couleur ambiante : celle que l'on voit toujours (même kan l'objet n'est pas éclairé)
- une couleur diffuse : celle que l'on voit seulement kan l'objet est éclairé
- une couleur de réflexion : les reflets seront teintés par cette couleur
- une couleur spéculaire : les reflets des lumières seront teintés par cette couleur
- une série de coefficients pour attribuer plus ou moins d'importance à chacune de ces couleurs
- un coefficient d'opacité : pour les objets transparents
2) Mise en oeuvre :
===================
Pour chaque rayon lancé, le but est de trouver l'objet touché le premier par le rayon et d'afficher le pixel associé
au rayon courant avec la couleur de l'objet trouvé.
Connaissant la position des objets dans l'espace, il ne nous reste qu'à calculer l'équation du rayon et à passer en revue
tous les objets jusqu'à trouver le premier intersecté par le rayon.
a) Calcul de l'équation du rayon :
----------------------------------
En fait, il ne nous faut que la direction du rayon, soit un vecteur, étant donné que nous connaissons
déjà son origine.
L'écran étant de taille res_x*pitch_x par res_y*pitch_y et la caméra ayant une focale f,
il nous est facile de trouver les coordonnées dans le repère caméra du pixel de coordonnée (i,j) à l'écran.
Si l'on considère que le pixel (0,0) est en haut à gauche de l'écran, alors ses coordonnées dans le repère caméra sont :
vx = (i - res_x/2)*pitch_x // Pour que le point au centre de l'écran aie x = 0
vy = (i - res_y/2)*pitch_y // Pour que le point au centre de l'écran aie y = 0
vz = f
qui sont en fait les coordonnées du vecteur directeur dans le repère caméra.
Il ne nous reste donc plus qu'à effectuer les rotations nécessaires pour que se vecteur aie
la même orientation que la caméra afin d'avoir les coordonnées dans le repère espace.
b) Recherche des intersections :
--------------------------------
Pour chaque objet, on va rechercher l'intersection.
S'il y a une intersection, alors celle-ci se fait au point P tel que :
x = alpha*vx + xr
y = alpha*vy + yr
z = alpha*vz + zr
avec alpha >= 0
Il nous faut donc trouver le aplha (noté A) le plus petit possible.
* Intersection avec une sphère :
Soit la sphère de centre (x0, y0, z0) et de rayon R.
Soit le rayon lancé depuis (xr, yr, zr) et dirigé par (vx, vy, vz).
L'équation de la sphère est : (x-x0)² + (y-y0)² + (z-z0)² = R²
En remplaçant x par A*vx+xr, y par A*vy+yr et z par A*vz+zr, on obtient :
(A*vx + (xr-x0))² + (A*vy + (yr-y0))² + (A*vz + (zr-z0))² = R²
<=> A²(vx² + vy² + vz²) + A*2(vx(xr-x0) + vy(yr-y0) + vz(zr-z0)) + ((x-x0)² + (y-y0)² + (z-z0)² - R²) = 0
qui est une équation du second degré d'inconnue A, donc facile à résoudre.
* Intersection avec un plan :
Soit le plan d'équation ax+by+cz+d = 0
En remplaçant x par A*vx+xr, y par A*vy+yr et z par A*vz+zr, on obtient :
A(a*vx + b*vy + c*vz) + (a*xr + b*yr + c*zr + d) = 0
qui est une équation du 1er degré d'inconnue A, donc solution hyper simple à trouver...
Si Alpha n'existe pas, alors on affiche la couleur de fond (noir par exemple),
sinon, on en déduit facilement la position du point P (voir-ci dessus) et on calcule l'éclairage.
3) Eclairage :
==============
Soit l'intersection du rayon s'étant produit au point P(xp, yp, zp), sur l'objet O.
Dans notre cas, on ne considérera pour le moment que les lumières ambiantes.
L'intensité au point P pour chacune des composantes R, V, B s'écrira donc :
IntP = IntA
avec
- IntA = Som(pour chak lumière){ca*Sa*Ia},
où
- ca est le coefficient d'ambiance de la surface de l'objet O, et est fixé à 1,
- Sa est l'intensité d'ambiance de la surface de l'objet O au point P pour chacune des 3 composantes,
- Ia est l'intensité des sources lumineuses ambiantes pour chacune des 3 composantes,
On impose les contraintes suivantes :
- IntA < Max intensité pour chaque composante
La couleur du pixel à allumer sera donc donnée par IntA.
III) Divers :
*************
La scène est décrite dans le fichier RTD. Dans cette version du programme, seul les sphères et les plans sont affichés.
Les polygones (triangles) et objets 3DS ne sont pas gérés (calculs d'intersection plus complexes).
Je ne vous ai pas donné le descriptif du chargement du fichier RTD, mais si cela vous intéresse, le code doit être
suffisamment parlant, sinon me contacter...
Le but de ce tuto était simplement de vous familiariser avec le principe du Raytracing, tout
a été réduit à son minimum. Dans le prochain tuto, j'essaierais de mettre en place une illumination plus poussée,
non limitée aux seules lumières ambiantes.
Toutefois, si vous vous sentez suffisamment à l'aise, vous pouvez jeter un oeil aux sources
de la dernière version...
Pour lancer le programme :
- "./raytracing.exe scene.rtd <image.ppm>" sous Windows (Cygwin)
- "./raytracing.x86 scene.rtd <image.ppm>" sous Linux
Et voilà votre premier rendu...
Toutes les sources
La page HTML du projet
[jfdsdjhfuetppo]--Message édité par Dav Vador le 24-04-2002 à 11:52:24--[/jfdsdjhfuetppo]
Marsh Posté le 19-03-2002 à 15:42:26
Désolé, G pa eu le temps de faire 1 page html, je fais dés keu possible.
Marsh Posté le 19-03-2002 à 16:12:26
scott a écrit a écrit : fo koi pour lire les png |
IE 5 (le 4 suffirait si ils étaient "dans" une page web), Opera 4, Netscape 4 ou Mozilla.
Si y a des transparences (j'ai pas été voir, mais je pense pas qu'il y en ait) il faut Opera 6 ou Mozilla.
Marsh Posté le 19-03-2002 à 21:06:32
tiens si tu veux du sinus
[jfdsdjhfuetppo]--Message édité par durandal2--[/jfdsdjhfuetppo]
Marsh Posté le 11-12-2001 à 16:45:30
Lorsque mon prof nous a filé le sujet du projet, je l'ai pri pour un fou sachan kil ne nou laissai keu 2 semaine, mais maintenan keu je voi ce keu G fai en 2/3 jours, je me dis keu C faisable...
Voilà kks images que j'ai généré (en ppm puis sauvegardées en jpg et png)...
Les mêmes au format PNG (même taille et sans perte de kalité, mais pa lisible par tous).
http://www.multimania.com/davvador [...] mage13.png
http://www.multimania.com/davvador [...] mage26.png
http://www.multimania.com/davvador [...] mage27.png
Et puis les sources... même pas 500 lignes pour le lancer de rayons...
http://www.multimania.com/davvador [...] racing.zip
Les commentaires viendront avant les vakance (C la date limite de rendu du projet), et pa mal de modif, à komancer par l'import de scènes à partir de fichier...
Pour l'instant, si on ne passe pa de paramètres, l'image est généré sous OpenGL et si on passe un nom de fichier, au format ppm.
Le code marche sous Linux et sous Windows (les makefiles sont dans le zip).
Jusqu'aux vakance, je vais privilégié ce sujet pluto keu l'otre sur mon moteur3D, mais après, je devrai pouvoir me remettre o 2.
A suivre...
[edtdd]--Message édité par Dav Vador--[/edtdd]