Raytracing en delphi (progressive path tracing)

Description

Bonjour,
je vous présente aujourd'hui un code permettant de générer des images raytracées, c'est-a-dire en se basant sur les propriétés physiques de la lumière pour générer une scène de facon réaliste (plutot que d'utiliser des approximations et des raccourcis comme les jeux vidéos 3D font de nos jours). Il existe plusieurs méthodes de raytracing, plus ou moins élaborées et plus ou moins réalistes. J'utilise ici une méthode très réaliste, mais malheureusement relativement lente, appelée Path Tracing, donc l'intéret de cette source n'est pas la vitesse mais plutot le résultat. Le point fort de cette source est que l'on peut la laisser tourner aussi longtemps qu'on veut, et l'image obtenue convergera vers la bonne (correcte) image en augmentant le temps de calcul, et l'on peut l'arreter n'importe-quand et prendre le résultat (la méthode est donc progressive, et probabiliste, ou Monte-Carlo si vous préférez).

Voir la capture pour un exemple de rendu fait sur ma machine (7-8 heures, sur un processeur moderne - i5 2500k @ 3.7GHz). En général l'image obtenue devient reconnaissable après une ou deux minutes de calcul au maximum, et la précision devient meilleure plus vous attendez.

J'ai inclus quelques scenes pour que vous puissiez essayer, il suffit de lancer le programme SceneMaker et de cliquer sur les boutons. Chaque bouton cree la scene correspondante qui est directement placee au bon endroit, on peut alors lancer le programme principal pour la dessiner.

Du coté pédagogique, cette source contient plusieurs exemples de:
- polymorphisme et descendance de classe
- gestion robuste de threads (pas d'erreurs de violation d'accès a la fermeture du programme par exemple)
- une petite librairie de vecteurs 3D
- plein d'autres petits trucs

Merci d'excuser les commentaires en anglais, je préfère tout mettre en anglais en terme de code et commentaires, c'est plus facile a maintenir je trouve. Je ferai surement une traduction globale éventuellement.

Source / Exemple :


// zip

Conclusion :


Tous commentaires sont bienvenus.

Cordialement, Bacterius !

PS: merci d'excuser l'oubli d'accents dans la description de la source, je suis sur un clavier anglais et c'est assez difficile d'utiliser la table de caractères spéciaux...

<<<IMPORTANT>>>: Vous pouvez faire ce que vous voulez avec le code, il n'a aucune license. C'est vraiment pas sorcier une fois qu'on a compris le principe général, et c'est pas super elaboré, c'est juste une démonstration :) Enjoy.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.