CafzoneWare: le raytracer C#

Genial Tzim :wink:

De mon cote, j’ai ete incapable de le recompiler, quand j’ouvre le projet il me manque un fichier. Enfin j’ai pu y passer que 5 minutes, et je suis pas chez moi avant lundi prochain et j’ai pas d’outils a mon taff.

Houhou bravo ca cartonne. :pleure:

Ouah :expressionless: Tranquille !

C’est super!! Marrant de voir le truc progresser :stuck_out_tongue:

Je vais integrer ca dans le code des ce soir. Il sera surement interessant de creer un projet sourceforge, comme ca on aura un CVS et tout pour faire des modification du code en parallele.

[Edité le 5/11/2002 par GloP]

l’AA est implémenté !

Ajout d’une Classe CameraAA.

Ajout d’une méthode Norme() a la structure RGBColor

Classe Camera
Transformation de la méthodes TraceImage en méthode virtuelle.
Transformation de
private Ray GetRayAt(int i, int j)
en
protected Ray GetRayAt(double i, double j)

Image passe aussi en Protected.

http://letzimisce.free.fr/cafzone/GloPRender.zip

Résultat

[quote]Avant :
http://letzimisce.free.fr/cafzone/out.jpg (rendu en 30s)
http://letzimisce.free.fr/cafzone/GlopRender.jpg (rendu en 40s)

Après :
http://letzimisce.free.fr/cafzone/outAAdef.jpg (rendu en 36s)
http://letzimisce.free.fr/cafzone/GlopRenderAA.jpg (rendu en 49s)[/quote]Il est fort probable que les liens ne marchent plus… m’enfin, télechargez les sources et testez vous même

[Edité le 4/11/2002 par Tzim]

[Edité le 26/11/2002 par Tzim]

Glop > Ai commencé a implémenter un Antialiasing Adaptatif… mais comme je débutes en C#, j’aurais des questions … on verra sur IRC.

Sinon, pour les alergiques a l’anglais, ou ceux qui auraient du mal a débuter, je conseilles ce bouquin :

Algorithmes pour l’informatique graphique : Synthèse d’images et animations 3D, cours et exercices corrigés
de Remy Malgouyres (un excelent prof, je vous assure)
Dunod; (Sciences Sup) ; ISBN : 2100066242

Ou “comment comprendre les bases du rendu 3D en 7 heures de train …”

NB : un niveau Term S en math peu suffire…

Ben là je suis un petit peu overbooké jusqu’à vendredi à cause d’un projet de robotique, genre traitement d’image et recherche de la trajectoire optimale en fonction des obstacles de meeeeeerde qu’on voit même pas parce qu’ils brillent face à la caméra mais bon je suis zeeeen… En plus, je patauge comme un cochon dans la librairie OpenCV d’Intel pour Visual C++ qui m’a l’air vachement bien, sauf que le pdf d’explication fait … 420 PAAAAAGES rhaaaaaaa

Tout ça pour dire que si réécriture il y a, ce sera au plus tôt le W-E prochain :wink:

Bon esprit Xentyr :wink: Ca m’interesse de voir ce que t’as fait (des fois que t’ai eu des bonnes idees que je pourrais piquer sauvagement niark niark niark). Comment ca voleur ? Mais non, pas voleur ! (cf la folie des grandeurs avec DeFunes).

Fais peter !!!

Mmmmh, je posterai sûrement ici le petit raytracer que je développe, faut hum me laisser le temps de réorganiser mon code (oui, c’est porcasse, oui j’ai honte :hypocrite mais au départ ce devait seulement être un essai…). Ah oui, c’est du C++, je prends en entrée un fichier de description texte (quadrique, polygone, plan, surfaces de bézier) et la résolution souhaitée et je sors un bon vieux TARGA, y’a pas plus simple comme format d’image…
Sinon, ben il gère réflexion, réfraction, transparence colorée, anti-aliasing, pénombre, flou, gouraud shading et phong shading, bump mapping hardcodé pour le moment, mais je compte pas m’arrêter là car c’est bien marrant à coder.:slight_smile: Effectivement, ce thread vient à temps pour me rappeler d’organiser ce « petit » bout de code hehe :cool:
Et puis, tiens, je vais même essayer de le réécrire en C#, ce sera mon premier projet de taille raisonnable sur ce langage. Vala, d’une pierre deux coups :wink:

[Edité le 3/11/2002 par xentyr]

C# en lui meme est deja completement libre.

MS a abandonne tout copyright sur le langage depuis que c’est un standard depose aupres d’instance independantes (en particulier ECMA), tout comme le C, le C++ ou autre.

Pas comme JAVA qui est une propriete exclusive de Sun Microsystem, qui a l’epoque de son proces avec MS ne voulait pas abandonner son copyright sur le langage.

N’importe qui peut ecrire un compilo C#, il faut une license de SUN pour ecrire un compilo Java. Super libre.

Le framework, ainsi que le SDK du .net framework qui incluent un compilateur C#, meme si ils ne sont pas open source, sont 100% gratuits et incluent tout les outils necessaires au developpement en C#.

Si utiliser du code pas open source te demange, MS a sorti un compilateur et une plateforme .net quasi complete, aux extension special win32 pres, en open source fonctionnant sous FreeBSD et win32. le compilateur C# est la et est largement suffisant pour faire tourner le raytracer. Le projet s’appelle ROTOR et O’Reilly en parle la : http://www.ondotnet.com/pub/a/dotnet/2002/…7/archtour.html.

Si un truc qui viens de MS te donne des boutons, tu peux utiliser Mono qui a pour but d’etre une plate forme .net complete, open source et gratuite. Il y a un compilateur C# qui devrait compiler le code du raytracer sans soucis (a part les winforms pour la fenetre avec mon bouton GO, 3 secondes a virer, deplacer le contenu de OnClick_ButtonGo() dans le main() d’un programme std). Ca se passe la: http://www.go-mono.com/.

Tu vois :wink: Rien ne t’arrete.

J’ai du mal à comprendre tout ce qui à été traite dans ce thread mais je vais mis mettre car ca à l’air passionnant, sinon pour le C#, ca ressemble comme deux goutes d’eau à du java mais j’espère la rapidité en plus. J’attendrai une alternative libre pour mis mettre.

La fameuse Cornell box ne comporte pas grand chose de plus que des triangles et des spheres :yltype: Il est effectivement facile de faire rendre des meshs, mais c’est pas ma priorite. Ca veut pas dire que je le ferai pas des que le reste marchera! Et si quelqun veut le rajouter avant/pendant que je fait le reste ca serait super. Mais je fais ca pour moi, et donc je commence par ce qui m’interesse. Faire un truc qui charge un fichier avec un mesh je sais que je sais faire et ca a rien de passionnant, si ce n’est de voir un rendu d’un mesh complique au final. Mais j’ai plus de motivation pour voir des caustics :drink:

Sinon pour l’illumination globale, les photons maps peuvent aussi servir a ca de maniere tres impressionante et super rapide. Beaucoup plus que les hemi-cube/hemi-spheres. C’est surtout beaucoup plus fin au niveau algorithme et pas du simple bourrinage. Donc ca m’interesse plus que les hemi-spheres :stuck_out_tongue:

Le raytracing est effectivement un domaine très intéressant.
Je trouve ça dommage quand même de se limiter à renderiser des cbes, des cones et d’autres primitives simplistes alors que renderiser un mesh n’est finalement pas plus dur et ne demande pas des masses de codes (surtout si tu veux implémenter un moteur d’illumination global, ça serait un peu gaché… une sphere en radiosité, je sais pas trop si on verrait la différence avec une sphere raytracée classiquement).

Pour l’antialiasing, il y a plein de méthods qui marchent, de la plus simple (super sampling) aux plus farfeluex (stochastic antialiasing etc…).

Pour finir, il existe une méthode de rendu en radiosity qui semble plus simple à assimiler que les algos “bourrins” (Monte-Carlo par ex) qui est la méthode des hémi-cube. A voir donc…

[quote]Pour sur que je suis interesse.
Ton code et ce que j’ai trouve sur le net m’a mis l’eau a la bouche.
http://www.alrj.org/docs.php , dans la section 3d

J’ai passe toute la matinee dessus, va falloir que jbosse un peu cet aprem ;)[/quote]
Alors le mieux:

  1. pour le graphisme en general, plus culture que vraiment pour une application dans ce cas precis du raytracer. Mais c’est la « bible »:

Computer Graphics - Principles and Practice par Foley, van Dam, Feiner et Hughes. Second edition in C. ISBN:0-201-84840-6

  1. Pour le raytracing et son implementation , pour bien comprendre le mieux a mon avis, et aussi un tres grosse reference, c’est :

Realistic Ray Tracing par Peter Shirley. ISBN: 1-56881-110-1

  1. Et enfin pour le photon mapping, par l’inventeur de la technique lui meme, et donc ze reference:

Realistic Image Synthesis Using Photon Mapping par Henrik Wann Jensen. ISBN: 1-56881-147-0. Si tu fais une recherche sur son nom sur google tu va trouver son site qui est tres interessant. Il est prof a Stanford au passage :wink:

Voila voila !

[Edité le 31/10/2002 par GloP]

Pour sur que je suis interesse.
Ton code et ce que j’ai trouve sur le net m’a mis l’eau a la bouche.
http://www.alrj.org/docs.php , dans la section 3d

J’ai passe toute la matinee dessus, va falloir que jbosse un peu cet aprem :wink:

[quote]Qu’est ce qu’il a de sale mon code ? :wink: :wink: Je le trouve plutot propre, a part le manque de commentaires.[/quote] ouais j’avais cru que tu avais tout mis dans ton main, désolé

[quote]Je veux pas chercher la petite bete mais il n’y a aucune texture dans cette image et seulement deux shaders differents ;)[/quote]question de vocabulaire, pour moi, c’est une texture quand meme (généré, certes, une courbe de niveau peut-etre, mais ca reste une texture, nah :wink: )

[quote]Les refractions : fastoche, dérivé de la réflection (meme technique)
l’anti aliasing : super fastoche… tu calcules 4 fois, tu moyennes les couleurs
les photons maps : plus dur déjà[/quote]
Oui je sais comment il faut faire :wink: Pour ce qui est de l’antialiasing j’implementerai plutot de l’adaptative super sampling pour pas avoir a calculer betement une image 4 fois plus grosse que l’image que je veux au final :wink:

Qu’est ce qu’il a de sale mon code ? :wink: :wink: Je le trouve plutot propre, a part le manque de commentaires.

Encore une fois le but pour moi n’est pas de faire un raytracer « complet », ni meme optimise, mais d’experimenter avec les differentes techniques de rendu. Je m’en fiche d’avoir un cylindre, un cone, un cube ou un tore, et je m’en fiche d’attendre 5 minutes pour faire une image que MentalRay torche en 10 secondes.

Je veux juste comprendre en y mettant les mains comment ca marche et implementer un ou deux algos un peu pointus. A la base le but de « l’exercice » est de faire une implementation de photon mapping qui reste la maniere la plus simple et la plus efficace de gerer l’illumination globale et les caustics. Ainsi que pas mal d’autres effets sympa comme les « participating media » genre fumee, marbre, peau et autre.

Je cherchait pas tant de l’aide que de partager un base qui est dans l’etat encore suffisament simple pour s’y plonger rapidement. Le code de beaucoup de raytracer est disponible publiquement mais est bien trop complexe pour s’y attaquer sans une bonne connaissance du sujet. En l’etat le programme implemente les bases du concept de raytracing et est donc un bon debut pour apprendre et creuser le sujet. C’est aussi pour permettre aux gens de regarder du code en C#, de decouvrir le langage et de decouvrir le raytracing que je trouve tres interessant.

Si plusieurs personnes sont interessees par rajouter du code a cette base tant mieux :wink: Ca me fait plaisir de voir que d’autres personnes s’interessent aux meme chose que moi et son assez motivees pour aller jusqu’a rajouter du code! N’hesitez pas a me contacter pour coordiner vos efforts avec les miens.

Je veux pas chercher la petite bete mais il n’y a aucune texture dans cette image et seulement deux shaders differents :wink: Tout les effets de lumiere et la « Transparence coloree » sont calcules grace au photon mapping. Il y a un displacement map pour la surface de l’eau mais ca ne fait pas vraiment parti du rendu, c’est une etape de modification de geometrie avant le rendu lui meme.

[Edité le 31/10/2002 par GloP]

[quote]Non la par contre je suis pas d’accord. Le raytracing n’est pas la solution la plus fiable pour simuler la lumiere puisqu’elle ne gere en rien ce que l’on appelle l’illumination globale. C’est a dire par exemple la raison pour laquelle meme quand le soleil n’eclaire pas dirrectement botre fenetre il fait quand meme jour a l’interieur de votre chambre. Les techniques de radiosite sont une des solutions amenee a ce probleme.

On peut approcher une solution a l’illumination globale de maniere beaucoup plus rapide avec une technique appellee “photon mapping” qui peut aussi servir a simuler les caustics (que le raytracing ne traite pas), c’est a dire les effets de concentration de lumieres (lentilles ou traits lumineux au fond d’une piscine par exemple).[/quote]
ah ben je savais po… je croyais justement que le raytracing etait l’emulation des photons… donc de tout ce qui fait que l’eclairage est ce qu’il est dans la vie reel…

Non la par contre je suis pas d’accord. Le raytracing n’est pas la solution la plus fiable pour simuler la lumiere puisqu’elle ne gere en rien ce que l’on appelle l’illumination globale. C’est a dire par exemple la raison pour laquelle meme quand le soleil n’eclaire pas dirrectement botre fenetre il fait quand meme jour a l’interieur de votre chambre. Les techniques de radiosite sont une des solutions amenee a ce probleme.

On peut approcher une solution a l’illumination globale de maniere beaucoup plus rapide avec une technique appellee “photon mapping” qui peut aussi servir a simuler les caustics (que le raytracing ne traite pas), c’est a dire les effets de concentration de lumieres (lentilles ou traits lumineux au fond d’une piscine par exemple).

Les refractions : fastoche, dérivé de la réflection (meme technique)
l’anti aliasing : super fastoche… tu calcules 4 fois, tu moyennes les couleurs
les photons maps : plus dur déjà
- pour les caustics : ca peut se faire autrement, je crois, que par photon maps (un truc du genre t’essaye de voir si pour aller du point vers la source de lumière, tu peux pas passer par des objets refractants, en plus de la ligne droite)
-la global illumination : mmmmh… cf la niouze “le plus gros PC du woarld :)”

pour l’instant, cependant, je te conseille de faire le code plus propre, de diversifier les formes de bases (cylindre, cone, cube, tore…) et de considerer les bounding boxes (HYPER IMPORTANT).

voilà… si tu veux, je veux bien t’aider, surtout si c’est en C# parceque je connais pas du tout (je connais bien le C/C++ par contre, et j’ai fait un ray-tracer en C/C++ mais je pense pas pouvoir remettre la main sur les sources, crash disk POWAAAA)

tu as oublié, dans les effets utilisés pour l’image que tu as montré : la transparence colorées (bah oui, c’est con, mais pas si evident…), les textures aléatoires (pas evident non plus)
voilà…

[EDIT]
nighty : non, le raytracing n’est pas la réalité.
Dans la réalité, c’est la lumière qui tape dans l’objectif
Dans un raytracer, on pars de l’objectif, on essaye de voir où on tape, et après on essaye de voir quelle lumière eclaire ce point (meme dans le cas de l’illumination globale). En l’occurrence, seule une bidouille permet d’obtenir l’effet de flou fonction de la profondeur et de la focale.

[Edité le 31/10/2002 par urdle]

la raytracer et la meilleur emulation de la lumiere, puisqu’il s’agit de gere des rayon de lumiere qui ce reflechise, se refracte… bref comme dans la vraie vie…

je pense que quand les cartes seront géré ceci, le realisme sera enfin atteind en ce qui concerne les lumieres…

un exemple de raytracing… le logiciel architecte 3d 2001 qui met pret de 30 secondes pour faire une scene compexe en raytracing… et c’est clair que c’est beau…

[quote]Est-ce que tu aurais une source a nous conseiller pour tout ce qui est algos (anti aliasing etc) ?
Le code me fait pas peur, c’est plutot les algos. Faudrait pas non plus reinventer la friteuse … :slight_smile:
salut Glop au fait ![/quote]
Une petite recherche sur Google devrait resoudre la plupart de ces problemes d’algo. Sinon je recommande plusieurs livres, « malheureusement » en anglais, dont je peux te donner les references si tu es interesse.