M1 - Images

TP3 - ombres et lancer de rayons



Partie 1 : ombres et rayons, principes

Comment déterminer qu'un point à la surface d'un objet est éclairé par une source de lumière ou à l'ombre ?
il suffit de déterminer qu'un autre objet se trouve entre le point et la source de lumière.

La solution standard consiste à créer un rayon qui part du point et qui vise la source de lumière : si le rayon trouve une intersection avec un objet entre son origine et son extrémité, le point est à l'ombre de l'objet trouvé, sinon la source de lumière éclaire le point.

Cette solution est très simple mais elle comporte un gros inconvénient : il faut tester la totalité des objets / triangles dans la scène, ce qui est souvent beaucoup trop long.
Il est tout de même possible de l'utiliser en simplifiant un peu les choses, en limitant le nombre de d'objets testé, par exemple ou en simplifiant leur forme.



Il existe un autre test équivalent, (cf shadow volume) qui consiste à déterminer la forme géométrique de l'ombre créée par un objet éclairé une source de lumière. Par exemple, une sphère éclairée par une source directionnelle, comme le soleil, crée une ombre dont la forme est un tube, ou un cylindre. Si le point testé se trouve dans ce tube, il est à l'ombre.

Autre exemple, si la source de lumière est un point, l'ombre crée par une sphère est un cone (sommet : la source, axe : la droite passant par la source et le centre de la sphère). Si le point testé se trouve dans ce cone, il est à l'ombre.


exemple : la source de lumière est un point, l'ovni est remplacé par une géométrie plus simple, une sphere. l'ombre est donc un cone, le calcul realise sur chaque pixel du terrain revient juste à comparer 2 angles pour déterminer qu'un point du terrain est à l'ombre de l'ovni.




Partie 2 : application au projet

Existe-t-il plusieurs types / catégories d'ombres ? Quels objets de la scène du runner peuvent créer une ombre ? Sont-elles toutes calculables facilement avec les 2 solutions de la partie 1 ?

Que peut apporter la présence de l'ombre dans votre projet, même si elle n'est pas exacte ?

Comment calculer l'ombre projettée par le runner sur la piste ? En supposant que le runner est une forme géométrique simple, une sphère ou un cube, par exemple, et connaissant la source de lumière, comment déterminer qu'un point à la surface de la piste ou du runner est éclairé ou à l'ombre de la source ?

Est ce que les 2 solutions de la partie 1 sont utilisables ? Laquelle semble la plus adaptée ? Dans quel cas ?

Et avec plusieurs sources ? Que faudrait-il changer ?
Et avec plusieurs objets pouvant créer une ombre ?
Quelle ombre n'est pas calculable avec cette solution (en temps réel) ?

Modifiez votre projet pour inclure une solution permettant au minimum d'afficher l'ombre du runner sur la piste (pourquoi celle ci en particulier ?).
(vous pouvez aussi repartir d'un exemple plus simple, si vous ne voulez pas "casser" votre projet)