8 - Ombres et occultations

Mise en place

Structuration

Si le chapitre sur la structuration se trouve juste avant le chapitre sur les ombres, c’est loin d’être un hasard. En effet, la gestion des occultations devrait générer peu de lignes de code supplémentaires car elle réutilise la méthode de RayCast.

A ce niveau, vous avez trois choix :

  • Arrêtez le projet ici car le travail pour restructurer semble trop important.

  • Structurez le code quitte à lancer les grands travaux.

  • Votre code est déjà plutôt bien organisé, il ne reste que quelques adaptations à faire.

Principe

../_images/schema.png

Pour trouver la couleur d’un point, nous parcourons la liste des lampes et nous calculons ainsi la valeur du diffus et du spéculaire pour chaque lampe. Pour gérer l’occultation, il faut se poser la question suivante : existe-t-il un objet qui empêche le rayon lumineux de parvenir à la surface de l’objet ?

Ce problème peut sembler complexe au premier abord, mais il peut être résolu facilement en réutilisant l’algorithmique du RayCasting. En effet, il suffit pour déterminer s’il y a occultation ou non de lancer un rayon depuis le point courant dans le sens inverse des rayons lumineux. Si une intersection avec un objet est détectée et qu’elle se trouve placée entre le point courant et la source, alors, il y a occultation. Dans ce cas précis, les rayons lumineux de cette source ne peuvent atteindre le point courant et par conséquent, la lampe ne peut créer un effet de diffus et de spéculaire.

Résultat

../_images/rendu.png

Dès que les ombres sont présentes dans une scène, l’effet de réalisme est plus impressionnant. Remarquez que les ombres ne sont pas noires à 100%, cela est dû à l’utilisation de la lampe ambiante.