Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Ombres portées avancé

Compatible Director. Cliquer pour en savoir plus sur les compatibilités.Le 03 août 2011

La source:

ombres_avance.rar

1/ recherche des polygones qui reçoivent l'ombre

Dans cet exemple on ne s'occupe pas de l'image d'ombre (nous aborderons plus tard les techniques pour faire ça). Dans cet exemple on s'intéresse aux polygones qui reçoivent une ombre. L'image de texture est une simple tache noire.

Dans les moteurs de jeux 3d les polygones sont stockés dans une structure de rangement (terrains, bsp, quads, octrees etc). Une recherche dans cette structure permet de trouver les polygones concernés par la projection d'ombre.

Pour cet exemple on utilise une technique beaucoup plus simple. L'ombre est projetée sur un simple model, on lance un rayon avec la méthode modelsUnderRay() pour trouver un premier triangle et à l'aide d'un parcours itératif on liste les triangles voisins.

2/ rendu de l'ombre

Les moteurs 3d classiques utilisent le framebuffer pour rendre une ombre portée.

Il n'est pas possible dans director de faire ce genre d'opérations bas-niveau au polygone près, c'est pourquoi à la place on utilise un petit model transparent qui va afficher l'ombre.

Ce model est constemment remis à jour avec le meshDeform modifier afin de coller aux polygones qui reçoivent l'ombre. Ses deux premiers triangles forment un gros carré invisible qui va permettre de calculer automatiquement les coordonnées de texture avec la méthode #wrapPlanar

Afin d'éliminer le z-fighting, on calcule une petite marge pour que les polygones d'ombre ne collent pas trop près des polygones du model récepteur.

3/ optimisation

Le script lingo n'étant pas très rapide (en particulier la mise à jour par meshDeform), il faut vous débrouiller pour que l'ombre soit projetée sur un petit nombre de triangles.

Pour ça on se base sur un nombre de triangles d'ombre limité. Si l'ombre couvre trop de triangles, le rendu de l'ombre sera incomplet.

Si vous projetez plusieurs ombres, limitez leur nombre. Par exemple, vous ne rendez que les 4 ombres les plus proches de la camera. Cette technique doit être combinée avec du shadow culling (ne rendre que les ombres visibles). 3d