Buenas!
Acabo de subir otro ejemplillo, asi que las dudas/mejoras/preguntas/culpas me las decis por aqui.
Es una implementación mixta de métodos de simplificación de la escena; tenemos el modelo de Marcus, que tiene casi 10000 poligonos, dibujado unas 300 veces en la escena. De buenas a primeras, dibujar esta escena seria una muerte lenta y dolorosa para la GPU, asi que vamos a usar dos metodos para hacerlo todo mas sencillo:
- Si nuestro objeto esta a menos de 500 unidades de la camara: dibujamos el modelo de alta calidad.
- Si esta entre 500 y 1000: dibujamos una version simplificada (Level-Of-Detail), que tiene unos 4000 poligonos (en realidad se pueden hacer tantos niveles de LOD como se quieran, aunque hay que evaluar si el resultado final va a ser lo suficientemente realista y va a merecer la pena).
- Si esta a mas de 1000, dibujamos un impostor. Que es un impostor? Un sprite orientado en todo momento a la camara pero al mismo tiempo con un eje de rotacion restringido (ConstrainedBillboard); en nuestro caso, es el eje Y, para que parezca que el personaje esta siempre de pie y no se "tumbe" al elevar la camara. Y que sprite dibujamos? Pues para ello, al inicializar la aplicacion, renderizamos el modelo desde 8 angulos distintos para obtener 8 proyecciones laterales; asi, dependiendo del angulo de la camara en la escena, dibujaremos al personaje de frente, de lado, etc.
Pues eso, a que esperais para echarle un vistazo? ;)
PD: no recomiendo elevar mucho la camara o el efecto realista de los impostores se vera transformado en sprites del Doom/Duke Nukem. Esta tecnica se suele usar para escenas en las que la altura del jugador no va a variar mucho (crowds, arboles) y no se van a poder apreciar en un angulo distorsionado.