darksch escribió:garbagecrystal escribió:Nanite no tiene que ver con árboles de vóxels, es el sistema de auto LOD. No acepta deformables porque las deformaciones las tendría que calcular a la inversa (desde el LOD al original, guardar una copia del original y luego volver a aplicar el autolod a la copia) y eso es un problema no trivial.
¿Seguro?, si nos fijamos entre otras cosas Nanite no soporta transparencias completas (masks), además de que los triángulos de tamaño inferior a 1px son desastrosos para rasterizado por triángulos, como ya se dijera en cierta GDC mostrando Frostbite. El que no tenga máscaras y no le importen los triángulos minúsculos da que pensar, porque precisamente son 2 aspectos coincidentes con el render basado en voxel raycasting, que consiste en lanzar rayos y dibujar lo 1º con lo que impacte, de ahí que no soporte máscaras.
Otro aspecto interesante es que precisamente uno de los problemas era la resolución, normalmente inferior a la obtenida por triángulos, y casualidad que en una PS5 debe ir a 1440p dinámicos, es decir inferior a lo que claramente podría renderizar de manera más tradicional que a 30 fps los 4K seguro que se los come con patatas.
Otro aspecto es ese "auto-LOD", que me parece muy costoso en tiempo real para millones de polígonos. Otra casualidad es que para voxel ray-casting no es necesario, se usa modelo único, porque lo importante es que vas a dibujar los mismos px.
En resumen, esos polígonos minúsculos, sin máscara, bajada de resolución, y cosas como la de las estatuas (que justamente puse un video que hace lo mismo), da que pensar. A mí es que esas paredes con detalles tan minúsculos, con triángulos, me suena rarísimo. El sistema por triángulos no está pensado para eso.
Bueno por aquí está esto, no se hasta que punto será así:
https://forum.unity.com/threads/so-nanite.889714/#post-5854663The unreal solution is an hybrid of voxel based tracing for large scale, distance field for medium scale and screen space for details, basically a combination of all technique they used so far (vxgi, distance field ambient and shadow, ssgi). According to the eurogamer interview that is. Unity would need some tooling to catch up, especially non rtx like updating and sign distance field.
Nanite:
It's probably using Geometry image as per the Brian Karis blog, which allow for virtualization in the form of sparse texture, so there is no (traditional vertice based) mesh, it's images, and the eurogamer interview tells you it's a SOFTWARE RASTERIZATION done in compute, unity won't have that for a while because that mean changing the whole pipeline.
There is a lot we can infer from that, in how it's done, it mean they probably unified the whole structure, as the voxel is probably octree used to serve the virtual paging, occlusion culling, GI, etc ... Ie each leaf contain a distance field and a geometric image.
For the rasterization they probably sort data as screen tile sorted front to back, which mean they can use the voxel octree to just serve a list of potential image geometric patch, then reading the geometric image, they can discard per pixel backfacing and frustum culling, and have a cache that keep track of tile coverage to stop patch processing when it's fully covered on screen.
Mesh are automatically LOD by subsampling the geometric image, and since it's using a virtual paging, only the right size of image is served at the right distance. It's also bypassing the inefficiency of small triangle per pixel that plague hardware rasterizer.
Sería un híbrido de técnicas para, en cada caso y con el tamaño en pantalla como criterio, aplicar una u otra.
Aquí un par de curiosidades:
Muchas estatuas, nos sonará, indica el hardware y rendimiento.
https://youtu.be/ij0vw8yTCsYSistema híbrido voxel-triángulos.
https://youtu.be/XkSS_veoSg0