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)