Blog Personal.

Feedback, Futuro, Opinión

¿Es el NeRF el futuro de los gráficos a tiempo real? Depende de la aplicación

Me habéis pedido que vea y diga lo que pienso del siguiente video:

Sinceramente me dan mucho coraje todos estos canales que se citan entre si con tiempo y recursos para hacer estos videos y con una oratoria típica de haber salido de una escuela de comunicación audiovisual. El trabajo que hay detrás de ellos no los hace una persona y sus referencias cruzadas entre ellos y los recursos que tienen hacen que sinceramente no me fié de su artificialidad, es un poco…

Es por eso que esos canales no los suelo seguir, cosas mias, en todo caso vayamos a lo que nos interesa.

Pero bueno, vayamos al tema del llamado NeRF o Neural Radiance Field que es lo que os interesa. Dot CSV en su video dice que se basaen el Ray Marching donde al contrario que el Ray Tracing los rayos no interseccionan con los objetos de la escena sino que lo que hacen es atravesarla hasta que salen de la misma, al igual que con el trazado de rayos necesitamos tener la información de la geometría de la escena de manera ordenada, pero el NeRF no trabaja con poligonos ni renderiza escenas generadas por polígonos sino por puntos volumetricos, es decir por Voxels y cuando digo Voxels me refiero a lo que realmente son voxeles que no son más pixeles 3D o volumétricos al tener no solo información de ancho y alto sino también de profundidad lo que nos permite crear imágenes volumétricas.

Ahora bien, aquí los Voxeles al contrario que en algunas técnicas en tiempo real no se utiliza para generar un mapa tridimensional de la escena para saber por donde se mueve la luz sino que no existen polígonos a la hora de componer la escena sino voxeles propiamente dicho y esta es la clave del Volume Rendering. ¿Es este el futuro? No, su campo tradicional no es el de los gráficos a tiempo real sino el de la medicina.

En visualización científica y gráficos por computador, la «renderización de volúmenes» o Volume rendering en inglés es un conjunto de técnicas usadas para mostrar una proyección 2D (en la pantalla de visualización) de un conjunto de datos discretamente muestreados en 3D.

Típicamente un conjunto de datos 3D puede verse como un grupo de rebanadas 2D tomadas por una tomografía axial computarizada, una resonancia magnética nuclear o un escáner MicroCT. Normalmente son obtenidas de forma regular (como por ejemplo una rebanada por milímetro) además de tener un número regular de píxeles en un patrón regular. Este es un ejemplo de un volumen regular, donde cada elemento del volumen, o voxel, está representado por un único valor que es obtenido mediante muestreo del área intermedia que rodea el voxel.

El NeRF al ser una técnica basada en Voxeles y no basada en vertices para saber donde están los elementos de la escena necesita la información desde todas las perspectivas posibles para poder componer un cubo. Uno puede pensar que renderizando la escena a tiempo real y luego generando una voxelización masiva sería viable… ¿Cierto? El problema es que esto es demasiado lento y la generación tanto del cubo de voxeles como el recorrido de estos tardaría eones en realizarse de manera eficiente.

Si por algo se añadieron las estructuras de datos espaciales en el trazado de rayos fue para acelerarlo, para que el sistema no perdiese tiempo haciendo interseccionar los rayos en zonas de la pantalla donde… ¡Agua! pero con el Ray Marching cada uno de los rayos ha de atravesar la escena y pixel por pixel ir acumulando información, no se si sois conscientes del volumen de información necesario y la potencia de calculo que se necesitaría para esta técnica para hacerla viable en tiempo real, recordad que:

  • Tendriamos que renderizar la escena de forma normal.
  • Voxelizar la escena.
  • Hacer que cada rayo atraviese la escena. de punta a punta.

Pero hay una cosa que realmente el vídeo no tiene en cuenta, un detalle que a todos se les pasa por la cabeza que es… ¿Es correcta la información de color de cada uno de los voxeles que componen la escena? Uno de los problemas que tiene la rasterización es que carece de la información del recorrido de la luz por lo que la única manera que tenemos de simular la luz es manipulando el valor de color de los pixeles, esto con la luz directo no es problema pero si que lo es con la indirecta que es donde empezamos a necesitar técnicas más complejas como el trazado de rayos donde si que disponemos de la información de recorrido de los fotones que van de una punta a la otra de la escena.

Si tomamos varias fotos de la realidad y hacemos que el sistema las tome como punto de información nos aseguramos que el color de cada pixel en la composición es el correcto por el hecho que son fotos tomadas de la realidad. Pero en un mundo inexistente y por tanto completamente virtual no tenemos esa información. Es más, si nos fijamos en las imagenes médicas tomadas a través de tomografía axial veremos que han sido coloreadas a posteriori porque no obtiene la información del color.

¿Y que ocurre con el llamado Volume Ray Marching? Pues que necesita que de cada voxel de la matriz 3d ir acumulando el color del mismo y realizar la operación correspondiente, sin la información de color entonces no hay nada de nada por lo que vamos a necesitar tener la información de color de cada uno de los voxeles. Es decir, primero tendremos que renderizar la escena con la información de color de esta para tener dicha información y luego voxelizarla como he comentado antes. ¿Parece fácil no? El problema es que el proceso de voxelización de una escena poligonal es sumamente leeentooo y cuando digo leeento, me refiero al estilo que te puedes morir esperando.

Y hay un motivo por el cual esta técnica no se utiliza ni siquiera en el cine donde el tiempo de renderizado no parece tan importante y en el que cada fotograma se renderiza en potentes granjas no en milesimas de segundo sino en minutos y en algunos casos incluso horas. El trazado de rayos puro y duro tiene menos necesidad computacional que la técnica de la que estamos hablando y el tiempo es dinero. Es un concepto genial sobre el papel pero que necesita de una potencia computacional enorme cuando la referencia no son escenas tomadas de la vida real.

Si vamos al paper original, veremos que NeRF significa Neural Radiance Fields y deja muy claro que para funcionar necesita imágenes del entorno que quiere representar por lo que no es útil para generar entornos ficticios virtuales.

El paper lo deja bien claro con esto:

Presentamos un método que logra resultados de vanguardia para sintetizar vistas novedosas de escenas complejas mediante la optimización de una función de escena volumétrica continua subyacente utilizando un conjunto escaso de vistas de entrada.

Es decir, necesita como referencia las fotografias de los diferentes angulos de la escena.

Tened en cuenta lo que os he comentado antes y llegareis a la misma conclusión.¿Es el NeRF es el futuro de los gráficos a tiempo real? Pues depende, Lo es si por ejemplo quieres realizar una especie de Google Maps ultradetallado, la visita a un museo virtual, si quieres tener una tienda donde los usuarios puedan versiones 3D de tus productos desde todos los ángulos, incluso hacer el tour de una casa que quieras vender. pero si hablamos de videojuegos y películas su utilidad es nula.

Esto es todo, tenéis el Discord y los comentarios de esta entrada para comentarla.

0 0 vote
Article Rating
5 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Yon

Cuando vi el vídeo hace unos días pensé que si esa técnica sirve para algo, tal vez sea para mejorar o aligerar los procesos de fotogrametría (yo en el curro he usado varios programas de ese ámbito), ya sea para que pueda mejorar la parte donde menos información cubran las fotografías (típicos puntos ciegos) o simplemente que puedan aligerar el proceso de correlación o de generación de nube de puntos, pero para tiempo real como indica el del canal de youtube… no lo veo ahora mismo.

Virtuosity

Yo creo que lo has malinterpretado. Dice claramente que es una técnica de optimización. No aumenta el coste, lo reduce. La voxelizacion se hace a la geometría estática y es prebaked. y opcionalmente a la dinámica. Igual que en SVOGI, prebaked+realtime. Y también se tiene en cuenta la oclusión y descarte de zonas no visibles como en los escenarios .bsp u octree. La voxelizacion se hace porque simplifica aquello con lo que interactúan los rayos y además son conos que pierden detalle en la distancia, porque los voxels cambian de LOD y se ven grandes en pantalla a lo lejos… Read more »

Virtuosity

En resumen:

Es una técnica complementaria para los derivados de Sparse voxel octree cone tracing como Lumen.
Les aporta densidad de voxels, no sólo opacidad donde rebotar.

Esto debería mejorar la oclusión indirecta de objetos o sus superficies cercanas entre sí afectando tanto al color indirecto rebotado como a las sombras indirectas, porque modifica la energía de los rayos de Lumen o similares.

Lo de «usar varias cámaras» es disparar rayos desde distintos ángulos como un paso para establecer la densidad, probablemente en la fase de prebaked.

Batlander

Esto lo veo útil para ahorrar tiempo metiendo ciertos objetos y tener un repositorio de objetos, paredes, piedras….

IntelCeleronMasterRace

Personalmente, con que la iluminacion sea como la de Tomorrow Children de PS4….me basta y sobra para ver un buen salto. Y el mainkra con reitreisin sera, algo muy bueno de igual manera.

Un Battlefield 5 optimizado suena…..bastante bien tambien, teniendo en cuenta lo cara que es una PC que lo corra bien con RTX onnnnn.