J'imagine que t'as lu
http://www.iquilezles.org/www/material/nvscene2008/rwwtt.pdf ?
Je t'avouerais que j'ai découvert les distance fields grâce à U2 qui m'a filé ce même lien il y a à peine une semaine ! J'ai déjà fait des tests pour voir mais mes rayons manquent parfois leur cible, j'ai dû rater des trucs essentiels parce que j'ai besoin de beaucoup de steps et au bout de 64 je m'arrête et ça touche pas forcément la destination.
Voici une image en fausses couleurs d'une sphère avec du noise avec 64 steps par rayon maximum (en rouge) :

Quand c'est violet c'est l'infini donc pas besoin de tracer de rayons. Quand c'est noir c'est qu'il est pas arrivé au hit après 64 rayons, en gros, là où j'ai échoué.
J'ai pas beaucoup poussé plus loin vu que je suis sur d'autres trucs en ce moment.
Mais oui tu as bien cerné le principe : en gros tu évalues la distance à l'objet le plus proche à chaque point de ton rayon. Ca te permet d'avoir une limite maximale du pas auquel tu peux avancer avant de risquer de toucher un objet...
Le problème vient évidemment des rayons rasants puisque tu te rapproches continuellement de la surface sans forcément jamais la toucher... Du coup t'avances seulement un tout petit peu à chaque fois, c'est le paradoxe de Zénon all over again !
D'après Iñigo, tu peux fixer une taille de step minimale pour être certain de toujours avancer d'au moins un certain pas. Et tu peux aussi tirer avantage du fait que l'erreur diminue avec la distance à la caméra donc faire en sorte que tes pas de rayons soient proportionnels à cette même distance.
J'ai eu beau faire joujou avec ce pas minimum et cette correction par la distance à la caméra, j'ai toujours de la merde.
Bref. Disons que tu trouves bien ton intersection quelque part, après il s'agit de récupérer la normale à la surface, calculer l'ombrage et l'ambient occlusion.
Je vais pas paraphraser Iñigo puisque tout est expliqué dans son PDF mais ça reste assez simple. Le plus difficile restant vraiment à trouver correctement l'intersection en un minimum de steps...
Pour ce qui concerne la différence avec du ray-casting : là tu codes la distance d'un objet par rapport à un point.
En ray-tracing tu calcule carrément l'intersection du rayon avec l'objet avec une formule (pas forcément super simple selon l'objet à intersecter).
Par exemple pour un cube qui est pas le plus simple :
- En ray-trace, tu dois calculer l'intersection avec une des 6 faces du cube, en gros tu calcules l'intersection avec 6 plans et tu vérifies si cette intersection se trouve dans les limites de la taille des faces du cube. J'écris même pas le code parce que c'est une horreur.
- Avec les distance fields tu écris simplement :
Distance = max( abs( p.x ), max( abs( p.y ), abs( p.z ) ) ) -1.0;