UserList.GetUser('spl0k').blog;

UserList.GetUser('spl0k').blog;

Home :: Infos 

lundi 1 mars 2010

Raytracer : AABBumphong

Bien bien bien.
Aujourd'hui, on commence par quelques statistiques.

Et ces stats vont porter sur le teapot qui était affiché dans le post précédent.
La scène prenait entre 4 et 6 minutes à rendre sur mon desktop (et j'ai un minimum de 3 minutes et quelques sur le laptop qui a trois ans de plus, pas compris). Sachant que le modèle comporte 1024 triangles (530 vertices), j'ose même pas imaginer le temps que ça pourrait prendre sur un modèle plus complexe. Bref, il fallait optimiser tout ça.
On inclus donc des boites englobantes (bounding boxes), une pour chaque objet ce qui permet d'éviter les calculs complexes d'intersection si un rayon ne touche pas la boite. Donc on met une boite pour chaque objet, mais aussi une pour chaque triangle si cet objet est composé de triangles (j'ai testé, l'intersection avec une AABB prend moins de temps qu'avec un triangle).
Et ça nous donne, pour le teapot, un temps de calcul qui passe de 4-6 minutes à 1 minute 10 secondes, bien plus raisonnable :) (2 minutes 35 si on ne met pas de AABB sur les triangles)

post.expand();

jeudi 25 février 2010

Raytracer : Objets

On ajoute le support des triangles, des objets composés de triangles, un parseur de fichiers .obj et TADAA

Bon par contre là avec 1024 triangles ça commence à prendre un peu de temps, 3 minutes. Va falloir optimiser tout ça.

mercredi 24 février 2010

Raytracer : Réfraction et mapping

Réfraction whoooo

post.expand();

lundi 8 février 2010

Raytracer : miroir mon beau miroir

Aujourd'hui (ou plutôt il y a quelques jours), on ajoute les réflexions.

Pas très compliqué à implémenter : on bouge un peu de code pour que le calcul de la couleur renvoyée par UN rayon soit géré par une fonction.
Si on touche un objet et que cet objet a un coefficient de réflexion non nul, on calcule à partir du rayon incident et de la normale au point d'intersection le rayon réfléchi (de la même façon qu'il a été calculé pour le spéculaire précédemment, sauf que c'est pas le même rayon incident) et on rappelle notre fonction de calcul pour un rayon.
On joue alors avec une fonction récursive et il faudra donc penser à ajouter une profondeur maximum si on ne veut pas se retrouver avec un récursion infinie.

mardi 2 février 2010

Raytracer : Phong'd

Bien, on a un élcirage mais il n'est pas terminé. En effet, tout éclairage digne de ce nom devrait respecter le modèle d'illumination de Phong.
Ce modèle, qu'est-ce que c'est ? Ca dit juste que pour un éclairage assez réaliste on a une composante ambiante, une diffuse et une spéculaire. Ca tombe bien on a déjà les deux premières, il ne reste plus qu'à implémenter le spéculaire.

post.expand();

lundi 1 février 2010

Raytracer : que la lumière soit

La dernière fois, nous étions arrivé à une jolie sphère toute rouge. Tellement rouge qu'on dirait qu'elle est plate et que c'est donc un disque.
Et pourtant ce n'est pas le cas.

Ceci est dû au fait qu'on affiche la couleur de l'objet tel quel, sans prendre en compte qu'il pourrait y avoir de la lumière. Ajoutons donc le support des sources lumineuses. Uniquement le diffus pour le moment.
Une lumière diffuse est une lumière qui, quand elle touche un objet, part dans toutes les directions avec la même intensité, mais cette intensité dépend de l'angle avec lequel la lumière frappe l'objet (qui n'a pas mal, parce qu'on a encore pas d'objet vampire (et 2 jeux de mots foireux pour le prix d'un, 2))

post.expand();

dimanche 31 janvier 2010

Raytracer : correction des rayons

Comme vous avez pu le constater dans le post précédent, le calcul de la direction des rayons était foireux. Tout ça parce qu'on veut trop s'inspirer de ce qu'on connait déjà pour représenter les rotation (rotators).
Donc on oublie le concept des rotators et on retourne sur des repères à base de trois vecteurs.

post.expand();

Raytracer : first steps

Bon, dépoussiérons un peu ce truc.

Je suis actuellement en train de développer un raytracer from scratch.
Vous pourrez donc suivre ici l'avancement du projet. J'essaierai de poster régulièrement si j'oublie pas.
Pour ceux qui s'intéressent au sujet, on peut déjà trouver pas mal d'articles sur le net donc je ne posterai que très peu de code.

Donc, première étape : une scène, un observateur, des objets (que des sphères pour le moment), l'écriture de fichiers bitmap, des rayons et leur intersection avec les objets et un premier algorithme pour lancer, à partir de l'observateur, des rayons dans une direction voulue.
Et ça donne ça :

Bon, comme vous pouvez le constater, il y a un petit problème dans la direction des rayons :D

vendredi 4 juillet 2008

TeeViewer v 0.8 et DR v0.23

Post qui arrive avec un peu de retard.

Dans un premier temps, on va parler de TeeViewer.
Il s'agit d'un petit programme permettant de charger un fichier PNG d'un skin de Teeworlds et de l'afficher tel qu'il sera rendu dans le jeu (ou presque).
Cette petite application, développée en Java (6.0), semble déjà être appréciée par les skin-makers.
TeeViewer (jar, 8Ko)

Ensuite, on continue avec Domination Reloaded qui passe en version 0.23.
Depuis mon dernier post ici à ce sujet (release de la 0.1), il ya eu quelques correction de bugs, l'ajout de la gestion des bots, et des nouvelles maps.
Cette version a été proposée au MSUC.

vendredi 2 mai 2008

DR v0.1 released

Bon voilà, première version de mon fameux mod Domination Reloaded en ligne.
Et mon site web aussi par la même occasion.
Ca se passe ici

(Manque juste une bannière pour aller en haut du site, mais vu que je n'ai aucun skill de graphiste...)