|
Otra charla del GDC, y con esta creo que es la última. Esta está muy chula, sobre todo para alguien que trabaje en un departamento de efectos, o quiera currarse una demo espectacular. Trata de cómo renderizar hierba y vegetación aprovechando tecnología multicpu. Normalmente, la vegetación se diseña usando mapas de densidad, que representan zonas de vegetación. Estos mapas suelen ser de distintos tipos, indicando diferentes vegetaciones. El sistema debe de poder aprovechar esos mapas, renderizar con distitnos niveles de detalle (y por tanto, distintos algoritmos), y debe de ser rápido descartando geometría. Los niveles de detalle cambian la forma de pintar la geometría, usando billboards alienados a cámara cuando es preciso, o ni siquiera eso si están muy lejos. La charla explica un algoritmo en varios pasos, descartando rápidamente cuadrados con densidad 0 antes de determinar detalles de vegetaciñon, y gestionando solo los rectángulos visibles con densidad. Cuando tenemos las listas, mandarlas a un proceso que las procese en multithreading, para generar la vegetación. La charla comenta que se han dado cuenta que es mejor mandar muchísimos trabajos a la cola que no tener grandes gestores por CPU. Esto es compatible con mi propia experiencia, ya que los multicore tienen problemas al acceder al bus de datos simultaneamente. De todos modos, tendríamos que ver cómo funciona eso cuando el número de cores aumenta. Cada trabajo recibe unos trabajos para generar la vegetación, como la semilla de "randomización", o los tamaños necesarios. Los trabajos deben de estar libre de dependencias, para evitar las esperas. El gestor de trabajos debería de dar poca prioridad a este tipo de trabajos (frente a tareas del juego o de físicas). Una vez terminado esto (aqui hay esperan a que los trabajos terminen) , renderizamos la vegetación. Cada nivel de detalle va en listas separadas, ordenadas de tal manera que aprovechemos el test de alpha y el test de profundidad para renderizar menos píxeles.
|