Otro ejemplo mas: simulando geometria con impostores - DotNetClubs
en

DotNetClubs

Comunidades de estudiantes entusiastas de la tecnología

Otro ejemplo mas: simulando geometria con impostores

Último artículo 01-23-2010 16:37 escrito por r2d2rigo. 6 respuestas.
Página 1 de 1 (7 elementos)
Ordenar mensajes: Anterior Siguiente
  • 01-05-2010 20:57

    • r2d2rigo
    • Contribuyente Top 25
    • Se unió el 12-14-2008
    • Envíos: 58
    • Puntos: 965

    Otro ejemplo mas: simulando geometria con impostores

     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.

    • Puntos de post: 20
  • 01-05-2010 23:22 en respuesta a

    • Javi
    • Contribuyente Top 10
    • Se unió el 10-11-2006
    • Sevilla
    • Envíos: 596
    • Puntos: 8,530
    • DotNetClub_Coordinadores
      DotNetClub_Miembros
      DotNetClubs_AdminTeam
      WG_XNACommunity

    Re: Otro ejemplo mas: simulando geometria con impostores

     Vaya ejemplo chulo que has subido R2d2rigo, no he mirado el código aún, pero te felicito me he encantado (ves como todavía quedaban técnicas por subir XDD).

    • Puntos de post: 35
  • 01-06-2010 14:01 en respuesta a

    • mariscal
    • Contribuyente Top 10
    • Se unió el 03-10-2008
    • Málaga
    • Envíos: 108
    • Puntos: 1,635

    Re: Otro ejemplo mas: simulando geometria con impostores

     Joder R2d2rigo me quito el sombrero... madre mia que ejemplo más wapo y práctico te ha quedado... si queréis podéis inaugurar con este ejemplo la nueva sección que deciáis sobre técnicas de videojuegos, ya que al menos, esa la usan en el último de la saga total war, el empire total war... os lo digo porque mi portatil no llega muy fino a correr el juego asi que tengo que ponerlo casi a lo más perrillo y cuando alejo la cámara lo único que veo son sprites... xD

     

    Lo dicho, lo voto como ejemplo de la semana!! :D

    • Puntos de post: 20
  • 01-07-2010 9:49 en respuesta a

    • jbosch
    • Contribuyente Top 10
    • Se unió el 09-11-2008
    • Lleida
    • Envíos: 326
    • Puntos: 4,780
    • DotNetClub_Coordinadores
      DotNetClub_Miembros

    Re: Otro ejemplo mas: simulando geometria con impostores

    Genial Rodrigo... verdaderamente genial Smile

     

    PD: Por cierto, lo de los "impostores" al principio me sorprendió un poco... forma parte de la jerga?

    Jesús Bosch
    Presidente UOC DotNetClub
    http://uoc.dotnetclubs.com/

    Blog personal:
    http://geeks.ms/blogs/jbosch

    Website:
    http://www.verticaling.com/

    GamerTag:
    JboschCatalonia
    • Puntos de post: 5
  • 01-07-2010 19:35 en respuesta a

    • r2d2rigo
    • Contribuyente Top 25
    • Se unió el 12-14-2008
    • Envíos: 58
    • Puntos: 965

    Re: Otro ejemplo mas: simulando geometria con impostores

    @Javi: lo que pasa es que de tecnicas graficas "puras" ya estan casi todas implementadas, pero vamos, con lo de hacer tecnicas de videojuegos me disteis unas cuantas ideas con las que voy a tener para rato Big Smile

    @mariscal: no solo en el R:TW, esto se viene haciendo desde hace muchiiisimo tiempo, solo que antes los sprites se solian pintar a mano en lugar de generarlos en tiempo de ejecucion. Sobre todo para RTS y juegos en los que el detalle no primaba demasiado, pero ahora en FPSs y MMORPGs esta empezando a tomar fuerza porque los escenarios ya no son tan cerrados y pequeños como en los tiempos del Quake.

    @jbosch: si, su nombre es "impostor" o "imposter" (dependiendo del ingles USA/UK). Este tipo de tecnicas suelen tener nombres curiosos, y a veces muy muy raros.

    Un saludo a todos! Smile

    • Puntos de post: 20
  • 01-21-2010 16:24 en respuesta a

    • Shaitan
    • Contribuyente Top 500
    • Se unió el 11-23-2009
    • Envíos: 1
    • Puntos: 20

    Re: Otro ejemplo mas: simulando geometria con impostores

     Muy buenos los articulos que te van saliendo.

    Por cierto, la forma de evitar el problema que tienes al cambiar la altura de la cámara es calcular mas poses del personaje para cuando la cámara esta más elevada y hacer que el billboard (sprite) siempre este orientado a la cámara . El problema entonces es la memoria que te consumen las texturas con todas las posibles poses.

     Por cierto, utilizas algún método para generar la textura con las poses?

     

    J. 

    • Puntos de post: 20
  • 01-23-2010 16:37 en respuesta a

    • r2d2rigo
    • Contribuyente Top 25
    • Se unió el 12-14-2008
    • Envíos: 58
    • Puntos: 965

    Re: Otro ejemplo mas: simulando geometria con impostores

    @Shaitan: no es tan sencillo; ademas de generar vistas desde angulos inclinados (o desde arriba), hay que recalcular el eje de restriccion de movimiento del billboard (nunca se puede usar un billboard libre para los impostores). Poderse, se puede, pero para conservar la simplicidad del ejemplo decidi no hacerlo, ademas que asi se ilustra el uso principal de los impostores, objetos lejanos situados a una altura similar.

     Sobre el metodo... simplemente roto la camara alrededor del objeto y voy dibujando a un RenderTarget2D que copia a un array de Texture2D. En juegos mas complejos lo que se suele hacer es crear un atlas en el que se van colocando todos los posibles impostores tileados, para ahorrar el maximo de VRAM posible.

    • Puntos de post: 5
Página 1 de 1 (7 elementos)
(c) DotNetClubs 2008
Ofrecido por Community Server (Commercial Edition)