Facebook Reality Labs en Cycles

Facebook Reality Labs en Cycles. La Fundación Blender ha publicado una descripción general del trabajo realizado con Facebook Reality Labs en el renderizador Cycles de Blender. El comunicado abarca el primer año de la empresa matriz Meta como patrocinador corporativo de la aplicación 3D de código abierto.

El trabajo, destinado a mejorar la representación en tiempo real de personajes digitales, incluye un nuevo procedimiento Alembic que acelera la carga de cachés de animación.

Facebook (ahora Meta) se unió al fondo de desarrollo Blender durante 2020 con el propósito principal de dar soporte al desarrollo de Cycles. Un equipo de Facebook Reality Labs dirigido por Feng Xie y Christophe Hery está interesado en utilizar Cycles como renderizador para algunos de sus proyectos.

Eligieron Cycles porque es un renderizador de producción con todas las funciones; sin embargo, también están interesados en mejorar las posibilidades y características de renderizado en tiempo real de Cycles para el renderizado humano digital de alta calidad.

Facebook Reality Labs en Cycles
Facebook Reality Labs en Cycles

Hay tres áreas principales de colaboración

Optimización de la actualización de escenas: esta área pretende reducir el esfuerzo para sincronizar los datos de la escena y sus copias en el dispositivo para permitir la representación de animaciones persistentes en tiempo real.

Agregar la API de procedimiento nativa y procedimiento Alembic para acelerar la carga de animaciones de geometría bakeada y la reproducción en tiempo real.
Mejorar los modelos BSDF para la representación de la piel y los ojos. En particular, dar soporte al modelo anisotrópico BSSRDF para la representación de la piel, y acelerar la convergencia de los efectos cáusticos importantes para la representación ocular.

Este artículo pone de manifiesto el trabajo realizado hasta ahora.

Optimización de actualización de escenas

Para admitir tantas plataformas como sea posible, Cycles almacena los datos de toda la escena en búferes unificados y específicos. Por ejemplo, todas las UV de todos los objetos se almacenan juntas en un único búfer contiguo en la memoria; de manera similar para triángulos o gráficos de sombreado.

Un problema importante con este enfoque es que si algo cambia, los búferes se destruyen antes de ser recreados, lo que implica copiar todos los datos otra vez, primero en los búferes, luego en los dispositivos. Estas copias y transferencias de datos pueden llevar mucho tiempo.

Data para todas las geometrías se empaquetan en búferes unificados y específicos antes de copiarse en el dispositivo
Data para todas las geometrías se empaquetan en búferes unificados y específicos antes de copiarse en el dispositivo
Cuando se modifica cualquier geometría, todos los datos se invalidan, se vuelven a empaquetar y se copian en el dispositivo. Facebook Reality Labs en Cycles.
Cuando se modifica cualquier geometría, todos los datos se invalidan, se vuelven a empaquetar y se copian en el dispositivo . Facebook Reality Labs en Cycles.

La solución, propuesta por Feng, fue preservar los búferes, siempre y cuando el número de objetos o sus topologías permanezcan sin cambios. Pero copiar en los búferes solo los datos de los objetos que han cambiado. Por ejemplo, si solo han cambiado las posiciones de una malla, solo se copian sus posiciones en el búfer global, mientras que no se copian otros datos.

Anteriormente, todos los datos (UV, atributos, etc.) tenían que ser copiados. De la misma manera, si solo cambia una malla en la escena, solo se copiarán sus datos: no se realizará ninguna otra copia de ningún otro dato de ningún otro objeto.

Solo se invalidan y copian los datos específicos de la geometría modificada. Sin embargo, todavía necesita ser copiado en el dispositivo. Facebook Reality Labs en Cycles.
Solo se invalidan y copian los datos específicos de la geometría modificada. Sin embargo, todavía necesita ser copiado en el dispositivo. Facebook Reality Labs en Cycles.

Facebook Reality Labs en Cycles trabaja fundamentalmente con nodos

La detección de cambios se realiza a través de una nueva API para los nodos de los que se compone la escena de Cycles, (que no debe confundirse con los nodos de sombreado). Mientras que en el pasado las aplicaciones cliente podían tener acceso directo a los sockets de los nodos, estos ahora están encapsulados y tienen indicadores específicos para indicar si su valor proviene de una modificación.

Estos indicadores entran en acción al establecer un nuevo valor en el socket si difiere del anterior. Por lo tanto, para cada socket, ahora podemos detectar automáticamente lo que ha cambiado al sincronizar datos con Blender o cualquier otra aplicación. Tener esta información por socket es crucial para evitar hacer trabajos innecesarios, y esto con una mayor granularidad de lo que Cycles podía hacer hasta ahora.

Otra optimización es la adición de BVH refit para OptiX: los BVH de los objetos se mantienen en la memoria y solo se reconstruyen si cambia la topología del objeto. De lo contrario, el BVH simplemente se modifica para tener en cuenta las nuevas posiciones de vértice.

Con todos estos cambios se ha conseguido reducir el consumo de memoria en Cycles, y han echo posible dividir el tiempo de sincronización a la mitad en términos generales. Los resultados de referencia utilizando el carácter Trudy 1.0 de FRL se comparten a continuación.

Sistema procesal de Facebook Reality Labs en Cycles

Otra novedad fue la adición de un sistema procesal. Los procedimientos son nodos que pueden generar otros nodos en la escena justo antes de la representación. Tal mecanismo es común en otros motores de renderizado de producción.

Alembic fue el sistema elegido para implementar el procedimiento de las primeras versiones de Cycles. Alembic es ampliamente utilizado por los programas para crear contenido 3D para intercambiar animaciones de geometría bakeada; incluidas las deformaciones de la piel y el cabello. En el futuro, esto permite explorar el desarrollo de un procedimiento USD nativo.

El procedimiento Alembic permite la carga de archivos Alembic de forma nativa, evitando pasar por Blender y su ARN; que resulta lento para traspasar y convertir. El procedimiento es accesible a través de Blender, y cuando está activo, Blender no cargará datos del archivo Alembic, ahorrando un tiempo precioso.

El procedimiento también tiene su propia memoria caché para precargar datos desde el disco para limitar las costosas operaciones de E/S. Con este procedimiento podemos cargar datos mucho más rápido que desde Blender.

Mejores BSDF

El equipo de Facebook también está interesado en mejorar la corrección física de los BSDF de Cycles. Por ejemplo, una contribución reciente vio la representación de la dispersión del subsuelo mejorada a través de la adición de una función de fase anisotrópica para simular mejor la interacción entre la luz y la piel.

Esta contribución fue hecha por Christophe Hery, el coautor de la publicación original de Pixar que presenta esta mejora a la comunidad de renderizado.

Colaboraciones futuras de Facebook Reality Labs en Cycles

Aunque esta colaboración se centraba anteriormente en la velocidad de sincronización, ahora se centra en la corrección física y la velocidad de RayTrace. Pronto se publicará que mejorará la representación de cáusticas. También hay varias optimizaciones posibles para mejorar el rendimiento de la transferencia de datos y el uso de memoria de Cycles, especialmente en VRAM.

Tienes más información y comentarios sobre Facebook Reality Labs en Cycles y Cycles en el foro, sigue leyendo…