chui en train d'écrire un ptit raytracer en c++ sans prétention. Je serais interessé d'avoir des conseils d'autres developpeurs. Merci
Voici l'adresse de mon site
Xray's homepage
chui en train d'écrire un ptit raytracer en c++ sans prétention. Je serais interessé d'avoir des conseils d'autres developpeurs. Merci
Voici l'adresse de mon site
Xray's homepage
Etant aussi un peu intéressé par le domaine, un lanceur de rayon tout seul n'a pas grand intérêt.
Ce qui compte, c'est ce que tu veux faire avec et te fixer un objectif plus ou moins précis.
Perso, ce qui m'intéresse, c'est l'exactitude physique du résultat (je met de coté l'aspect perceptuel de coté).
Ce qui est bien avec le lancer de rayon, c'est que la méthode de base est relativement simple. Ensuite, c'est très évolutif, tu y mets un peu ce que tu veux : nouvelles primitives, nouveaux matériaux, nouvelles sources de lumières, nouveaux algorithmes.
Autre chose sympa, c'est son caractère universel. Outre le fait de produire de jolies images, c'est une technique qui peut s'appliquer un petit peu partout, en synthèse d'image, en simulation physique (diffusion de chaleur, diffusions d'ondes, ... )
Tu as de bons tuts dans les cours et tutoriels C++ : http://cpp.developpez.com/cours/
Sympathique.
Je suis allez sur ton blog, le résultat est déja trés bon.
Felicitation.
JBusyComponent, une API pour rendre occupé un composant swing.
SCJP Java 6.0 (90% pass score)
Merci .
Pour l'instant vu que je fais ça en dilétante ,donc je dois avouer que c'est plus l"aspect visuel du rendu qui m'interresse. En effet afin d'obtenir quelque chose de physiquement correcte, j'ai l'impression qui faut lire pas mal. J'ai découvert ya pas longtemps l 'existence du photon mapping par exemple .Je sais pas quel niveau mathématique cela implique d'où ma venue sur le forum..
Le photon mapping n'est pas forcément la meilleure technique (la technique de base pose des problèmes aux bords, sur des géométries particulières, ... )
Pas mal, oui et non. Pour avoir un résultat à peu près correct, il faut une technique correcte, des brdf/btdf correctes, des matériaux corrects en entrée.En effet afin d'obtenir quelque chose de physiquement correcte, j'ai l'impression qui faut lire pas mal.
Le niveau mathématique n'est pas extraordinaire. Si tu sais ce qu'est une intégrale, tu as déjà fait un très grand chemin.Je sais pas quel niveau mathématique cela implique d'où ma venue sur le forum..
Tu peux me donner une liste de techniques ,avantage , inconvénients de rendu pour l'ambiant si ça te dérange pas. J'ai entendu parler du photon mapping, de la radiositée , par contre j'ai entendu parler de monté carlo , ca consiste en quoi ? MErci .
Les techniques de rendu d'illumination globale sont assez nombreuses.
-> La méthode de monté carlo est la technique la plus générale à base de lancer de rayon. Elle consiste à résoudre l'équation du rendu en effectuant un échantillonnage (d'où le terme de méthode de montécarlo). En gros, à chacune des intersections tu lance plein de rayons pour récupérer l'illumination des lumières, des autres objets, des éventuels milieux participants.
-> Le path tracing. C'est une modification de la façon dont on effectue le rendu de monté carlo. Au lieu d'avoir à relancer des rayons dans toutes les directions, on lance uniquement un seul rayon à chaque intersection (éventuellement on lance des rayons d'éclairement, mais c'est tout). L'idée est de lancer alors plusieurs centaines de ces rayons à partir des pixels de la caméra.
-> Le light tracing. C'est un peu la même chose que le path tracing, sauf qu'ici, tu lances des rayons depuis les sources lumineuses et tu espère qu'ils vont rencontrer le plan image (je te laisse imaginer le nombre de rayon qu'il faut)
-> Le path tracing bidirectionnel. C'est une combinaison du path tracing et du light tracing. Au lieu de lancer des rayons uniquement à partir de la caméra ou des lumières, tu en lances simultanément depuis les sources de lumière et la caméra. L'idée de base de l'algorithme, c'est tu lances crée un chemin depuis la caméra et un chemin depuis la lumière, tu les connectes et tu récupère l'illumination, il y a des méthodes pour combiner les deux chemin en utilisant les points qui les composent.
-> Le MLT et l'ERPT (Metropolis Light Transport et Energy Redistribution Path Tracing), ce sont des méthodes qui utilisent le path tracing bidirectionnel. En fait au lieu de créer de nouveaux chemins, on utilisent ceux qu'on a déjà crée et on leur applique des mutations (modification légère ou plus importante du rayon). C'est très pratique lorsque tu as trouvé une zone très lumineuse tu effectues des variations très légère et tu exploites au mieux cette énergie.
-> Le photon mapping. La technique est actuellement l'une des plus employée dans les moteurs de rendu commerciaux. L'idée de base, c'est de découpler la lumière de la géométrie. Tu lances des photons dans la scène et à chaque intersection avec la scène, tu stockes un photon, ensuite lors du rendu, tu effectues une passe de lancer de rayon classique et tu calcules l'illumination indirecte en effectuant une collecte de photons (tu récupère les photons les plus proches du point d'impact pour calculer l'illumination). La collecte des photons se fait à l'aide d'une structure accélératrice (la carte de photons ou photon map), c'est généralement un KD-Tree.
-> L'irradiance caching. C'est une technique qui utilise l'une des techniques au dessus pour calculer l'illumination indirecte diffuse (les inter réflexions entre objets), elle se base sur l'idée que les inter-réflexions produisent des variations de lumières qui sont très lentes, et donc qu'on a pas à la calculer partout. Tu calcules précisément l'illumination indirecte à certains points et à d'autres tu l'interpoles à l'aide des points précis.
Voilà pour les techniques de base, ensuite, il y a énormément de variations ou d'autres techniques pour calculer l'illumination globale et toutes te les citer me prendrait un temps considérable.
Pour ce qui est des points forts ou faibles des méthodes du dessus, en fait ils sont plus ou moins nombreux.
Pour les techniques de monté carlo, le principal problème, c'est le bruit. Ces techniques produisent des images très bruités et pour avoir quelque chose de joli, il faut compter énormément de temps (pour avoir deux fois moins de bruit, il faut lancer quatre fois plus de rayons). Le calcul de certains effets peut être très long. Pour le path tracing, le calcul de l'illumination indirecte à partir d'une source de lumière très petite peu être long. Par la même occasion, les caustiques sont très long à calculer et il faut considérablement beaucoup de rayons pour avoir quelque chose de joli.
Le light tracing n'en parlons pas, il faut beaucoup trop de temps pour avoir quelque chose de correct. Ca ne reste qu'un outil théorique (on alors dans des conditions très particulières)
Le path tracing bidirectionnel est une technique des plus généralistes qui permet de gérer tous les effets lumineux mais souffre toujours du bruit. Pour palier les problèmes du bruit, il y a le MLT ou l'ERPT mais là, c'est la technique qui est compliqué (comment gérer les mutations ?), il y a de nombreux paramètres à fixer ce qui rend l'utilisation compliquée (et on ne comprend pas toujours ces paramètres, ils sont généralement fixés de manière empirique) . Cependant une fois les paramètres sont bien réglées, on obtient des images plutôt pas mal (le moteur de rendu maxwell renderer est basé sur du MLT)
Le photon mapping permet de gérer des images plutôt sympa mais souffre de certains défaut. Il y a les problèmes des bords, les problèmes d'estimations aux surfaces concaves, le choix de certains paramètres (le nombre de photons, le rayon de recherche, le nombre de photon à chercher, ...), les problèmes de sur échantillonnage pour les milieux participatifs, la gestion des surfaces glossy, l'utilisation quasi obligatoire du final gathering, bref tout un tas de problèmes et de paramètres qui peuvent en faire une technique quelque fois délicate à mettre en oeuvre. Le gros avantage c'est qu'elle est considérablement plus rapide que les autres techniques d'où sa popularité (même si les images produites ne sont pas toujours correctes d'un point de vue physique)
Il existe de nombreux documents ou livres qui parlent de ces techniques, si tu as besoin de bibliographie, dis le.
XRayDev je t'encourage à continuer mais y'a pas de démo à télécharger..
tu peux t'inspirer de Persistence Of Vision par exemple
Merci beaucoup Pr@muald, je vais digérer ce que tu m'as livré comme informations et faire des recherches. C'est cool ta réponse est exhaustive ca va m'ouvrir d'autres pistes. Tu as retenu quelle technique finalement pour ton raytracer ? Si tu as des reférences de bouquins sympas (en francais de préférence) je suis preneur.
Mat.M je fourni pas de démo pour l'instant car il existe des tonnes de softs plus élaborés que le mien , en plus les scènes sont codés, j'ai pas écrit de parser encore, l'importer 3ds fonctionne que partielement. En fait j'attaque sur tous les fronts et du coup le code est vraiment minimaliste et bidoullé à fond, ce qui m'interessait c'était d'avoir un rendu le plus vite possible. J'ai pas d'interface graphique je rend dans une fenêtre directement donc pour l'instant l'intérêt de mon prog est plus que limité. Ca faisait un bail que j'avais pas codé , je me rappel plus comment fonctionne la MFC ... je préfère me concentrer sur le rendu bien qu'une interface graphique va devinir urgente.. lol merci pour tes encouragements.
J'ai utilisé du photon map et du path tracing bidirectionnel (les deux codés comme des pieds ), plus récemment, je me suis mis au lancer de rayon interactif et dynamique (enfin mes études m'y obligent ) . Si j'ai le temps j'aimerai bien me coder la technique photon ray splattingTu as retenu quelle technique finalement pour ton raytracer ?
En français absolument aucun. En anglais, tu peux regarder (au moins) ceux-ci :Si tu as des reférences de bouquins sympas (en francais de préférence) je suis preneur.
-> Realistic Image Synthesis Using Photon Mapping, H.W. Jensen.
-> Advanced Global Illumination, Dutré, Bala, Bekaert
-> Physically Based Rendering, Pharr, Humphreys
Il y a aussi énormément de papiers sur ces sujets. Tu peux lire ces deux thèses :
-> Robust Monte Carlo Methods for Light Transport Simulation, E. Veach (c'est l'inventeur du MLT)
-> Mathematical Models and Monte Carlo Algorithms for Physically Based Rendering, E. Lafortune (c'est l'inventeur, en parallèle de Veach, du path tracing bidirectionnel)
Je vais jetter un coup d'oeil sur les publi dont tu me parles mais j'ai peur de rien y piger. ca fait un bail que j'ai pas fait de maths et quand chui tombé sur des publis sur le web je pigeais que dalle....
tiens je connaissais pas le photon ray splatting !!
Les techniques sortent plus vites que j'ai le temps de les énumérer
N'hésite pas à poser tes questions. Il faut que tu retiennes une chose, les choses que tu verras même si elle te paraissent hyper compliquées ne le sont pas forcément.Je vais jetter un coup d'oeil sur les publi dont tu me parles mais j'ai peur de rien y piger. ca fait un bail que j'ai pas fait de maths et quand chui tombé sur des publis sur le web je pigeais que dalle....
C'est relativement récent (Eurographics 2007) :tiens je connaissais pas le photon ray splatting !!
http://www.mpi-inf.mpg.de/~rherzog/P...herzog07EG.pdf
Même si tu ne comprend pas la technique, regarde les comparaisons entre photon map et cette technique pour te rendre compte à quel point le photon map te crée des choses qui ne sont pas correctes.
Xraydev si tu ne connais pas les MFC y'a pas grand chose à apprendre: tu crées un projet SDI avec une CView et dans le OnDraw avec le HDC tu peux dessiner et tracer l'image..
Tu peux prendre SetPixel mais c'est lent mieux vaut prendre SetDIBBits
ca l'air interessant le photon splatting, là je rentre du taff, j'ai la gueule enfarinée mais c'est clair que ca doit valoir le détour . J'ai parcouru vite fait la doc, pour chercher les comparaison mapping /scattering . Les images sont impressionnates . C'est vrai que c'est le délire comme même d'aller simuler des photons, quand j'ai découvert la technique j'ai trouvé ça super vendeur et stimulant intellectulement bien que je m'y sois pas attelé pour l'heure.
Je te remercie pour le lien , et j'aurai surement un tas de questions a te poser si ça te dérange pas (surement sur des notions de maths).
Pour Mat.m, c'était pas trop le coup du Cview qui m'embêtait mais je savais que si je commencais mon appli avec les MFC, j'aurais passé un temps fou à tweaker et designer mon interface (chui capable de rester 3h choisir la forme d'un bouton ou sa couleur) , je préférais tailler dans le vif du sujet càd le raytracer, mais je vais migrer vers MFC tantôt . lol .J'ai quelques trucs à faire avant pour homogenéiser le code car j'ai pris quelques libertées qu'il faut que je corrige maintenant sinon le boulot sera plus long après . En tout cas merci à vous deux pour votre intérêt , ca fait plaisir ...
Salut.
Je viens de découvrir ce thread. Intéressant et beau travaille .
Pour commencer, tu devrait regarder ce PDF :
http://www.cs.kuleuven.be/~phil/GI/
Il explique le plus gros. Brdf, monté carlos, géométrie ...
Je ne sais pas jusqu'où tu veut aller.
Sinon juste quelque remarque sur deux méthodes que je connaît assez bien:
Monté carlos : sont grand intéré est aussi dans la simplification du calcul de la brdf en enlevant des cosinus dans le Calcul pendant la discretisation de l'hémisphère (ou de la sphère pour des surface translucide). Couplé avec la méthode de la roulette russe et c'est encore plus rapide . Mais c'est vrai que c'est assez bruité. Pour du visible cela as peu d'intérêt mais pour de l'IR y as pas trop le choix (toute surface est émettrice de lumière!!!).
Photon map : est trés bonne pour calculer les partie diffuse. Sa grande puissance ce trouve dans la possibilité de généré des effets de caustique. Un beaucoup plus intéressant pour du rendu urbain, et l'éclairage indirect que génère les buildings sur le sol!!!
Le bute de toute ces méthodes est d'accélérer les calculs et permettre d'atteindre rapidement certain effet visuel.
A toit de voir jusqu'où tu veut aller. Certain commence à en faire avec les carte graphique
Bon courage
Voici un autre site avec beaucoup de ressource pour le rendu.
http://www.vterrain.org/
Je viens ausis de voir ça, tu vas beaucoup plus vite que moi pour implémenter un ray tracing (j'en suis encore au début, mais c'est surtout que je n'ai pas le temps d'avancer, rédaction oblige !).
Tu fais du suréchantillonnage de ta scène ? Tu as optimisé la recherche des primitives interceptées ? Ce sont des sujets que j'aborderai dans un tutoriel (dans 10 ans si tout va bien ).
Ha oui tien. Bonne question.
Qu'utilise tu pour découper ta scène??
Grille régulière? octree?? BoudingBox?? BSP-Tree?? ...
tien en cherchant je suis tombé sur ca
http://www.flipcode.com/archives/Ray...oduction.shtml
Si c'est du realtime que vous cherchez, je pense que ce forum est une grosse source :
http://ompf.org/forum/
Si c'est de l'interractif, en fait, il suffit d'avoir une bonne structure accélératrice pas de réflexions/réfraction et une source ponctuelle et ça passe tout seul (sur le XYZ-dragon et l'happy buddha je suis à plus de 2 fps), sinon, il faut passer en ray-bundle (4 rayons à la fois), mais c'est plus délicat à gérer.
nan nan pour l'instant c'est brute de décoffrage, j'ai un peu honte mais le prog est très basic pour l'isntant, en fait dans l'esprit j'étais parti pour raytracer quelques spheres et voir .Du coup vu que ca rendait pas mal je me suis is tiens j'ajoute ça et ça . Pour les intersections y'a rien d'optimisé (c'est pour ça que le rendu est long), j'utilise des bounding spheres, je pense implémenter un KD tree (déjà pour utiliser le photon mapping).
J'avais implémenté le supersampling mais je l'ai viré lors de l'implémentation de la profondeur de champs qui est très gourmande en calcul (je fais un grand nombre de passes pour avoir une qualité correcte, du coup je me posais des questions sur les pseudo number savoir si la fonction RND() était judiscieuse ou pas , j'ai vu d'autre générateur de pseudo nombres aléatoires mais j'ai pas étudié la question en plus je crois que la distribution doit suivre une courbe de Gauss.). Pareille pour les ombres douces, ca demande pas mal de calculs en plus (je fais bouger la source lumineuse sur une surface), là j'ai même pas essayé une scene complexe + ombres douces + prof champs car je vais exploser mon PC .lol
Alors je me demande si j'ai bien implementé ces fonctions, faudra que je voie d'autres raytracer .
J'ai trouvé ce lien , le rendu est super sympa aussi
http://www.toxicengine.org/index.php
Au fait merci pour le lien sur le compendium, ca va être complexe pour moi mais ca fait une base de travail .
Y as les hierarchique oriented boudingbox qui semble etre trés performant(je ne sais plus si c'est le nom mais c'est le concept)
faudrait que tu regarde du coté de boost random
http://matthieu-brucher.developpez.c.../boost/random/
Un astuce est lorsque tu as une ombre, tu rejete quelques rayon aléatoirement, proche de la direction du rayon entre le pixel et la source.
Ça ne l'est pas tans que ça en faite. Le compendium donne une expliquation physique du lancer de rayon de BASE. Un fois compris à peu prés le principe, tu comprendra mieux les optimisations
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager