|
Acabo de leer el paper de nvidia en el GDC sobre coómo programar OpenGL en las nuevas N80.Os pongo aqui un resumen. Novedades: pues que ahora tenemos el shader de geometría, y posibilidades de consegur más información durante el pipeline, a parte de mas tipos de texturas. Ell core esta desarrollado con los shaders unificados, que permiten aprovechar todos las unidades de shading en cada momento del pipe, ya que los vertex/pixel/geometry shaders son ahora unidades genéricas. Por lo tanto, si en un momento de render se necesita mas pixel shader, el core aprovechará más el tiempo dedicando más unidades a esta tarea. Sobre el lenguaje, pues tenemos tipos nuevos, basicamente unsigned, y nuevas formas de interpolación de valores (antes teniamos solo la lineal), con lo que podremos mejorar la calidad final de los datos, ya que podremos tener en cuenta la perspectiva, la pantalla, etc. Tambien la salida de los pixel shaders es ahora más variada, gracias a los varying out. Otro aspecto muy desarrollado es el acceso a texturas. Ahora podremos samplear directamente la textura, y podremos programar nuestro propio control de nivel de detalle, mejorando el control de calidad de la textura, y permitiendo filtros precompilados muy rápidos. En cuanto a velocidad, ahora tenemos instancias, que permite acelerar el renderizado de objetos. Ahora un objeto podemos meterlo en memoria de video, como los vertexbuffers de toda la vida, pero al definir una instancia, podemos hacer una llamada para rendear de golpe un numero de ellas. Por ejemplo, 300 particulas de golpe. Lo bueno es que cada instancia tendra un ID que podemos leer en el shader para darle un comportamiento, como cambiar su posicion y datos del material. Particulas es lo primero que podemos aprovechar con estas llamadas. Ademas tenemos buffers orientados a propiedades para poder trabajar con ellos en memoria de video (por ejemplo, guardar la velocidad de la particula, etc). Ojo que podremos rendear atributos a memoria de video! Por ejemplo, aplicar el skinning de animación a un objeto y reutilizar la salida para rendear el objeto en diferentes pases, en sombras, etc, con el ahorro de calculo brutal que tendremos. También tenemos buffers nuevos, orientados a programación generica, donde podremos almacenar constantes para que el shader opere directamente con ellos. Las texturas ahora tienen layers en memoria de video, como subconjuntos de texturas, orientado a eliminar los atlas de textura (texturas enormes con mucha informacion, para ahorrar el cambio de contexto). Podremos incluso rendear en ellos independientemente. Entre los formatos de textura, tenemos formatos de enteros sencillos, de float para renders con mucha calidad, y HDR para calculos de exposición de luz (aunque no podemos hacer un render a texture de este tipo para generar mapas). Podremos trabaajr totalmente en espacio sRGB (el del PNG y con el gamma corregido) y con un zbuffer de 32bits en float, con una precisión muy ampliada. Y desde luego, lo que va a ser el punto fuerte de esta generacion es la creación en shader de geoemtria, gracias a los geoemtry shaders. Podremos usar la funcion emitvertex para ir creando nuestros objetos, curvas, pelo, escamas, etc.
|