Acabo de ver un video sobre lo que los editores llaman el "próximo paso importante después de la invención del 3D". Según la persona que habla en él, usan una gran cantidad de átomos agrupados en nubes en lugar de polígonos, para alcanzar un nivel de detalle ilimitado .
Hicieron todo lo posible para que el video fuera comprensible para personas sin conocimiento de ninguna técnica de renderizado, y por lo tanto, o para otros fines, omitieron todos los detalles de cómo funciona su motor.
El nivel de detalle en su video me parece bastante impresionante.
- ¿Cómo es posible renderizar escenas usando átomos personalizados en lugar de polígonos en el hardware actual? (Velocidad, en cuanto a memoria)
- Si esto es real, ¿por qué nadie más lo ha pensado hasta ahora?
Como desarrollador de OpenGL, estoy realmente desconcertado por esto y me gustaría escuchar lo que dicen los expertos. Por lo tanto, tampoco quiero que esto parezca un anuncio barato e incluiré el enlace al video solo si se solicita, en la sección de comentarios.
Respuestas:
Es fácil hacer eso. Usando un Octtree, simplemente divide el mundo en piezas progresivamente más pequeñas hasta alcanzar el nivel de detalle necesario. Esto podría ser del tamaño de un grano de arena, por ejemplo. Piensa en Minecraft llevado al extremo.
¿Qué representas entonces? Si el detalle es lo suficientemente pequeño, puede considerar renderizar bloques: los nodos hoja del octtree. Otras opciones incluyen esferas o incluso primitivas geométricas. Se puede almacenar un color y normal en cada nodo, y para una LOD reducida se puede almacenar información compuesta en los niveles más altos del árbol.
¿Cómo puedes gestionar tantos datos? Si el árbol es una estructura de datos real, puede hacer que varios punteros hagan referencia a los mismos subárboles, al igual que reutilizar una textura pero también incluye geometría. El truco es conseguir la mayor reutilización posible en todos los niveles. Por ejemplo, si conecta 4 octantes en disposición tetraédrica, todos al mismo nodo hijo en todos los niveles, puede hacer un fractal sierpinsky 3d muy grande casi sin memoria. La escena real será mucho más grande, por supuesto.
El problema es que solo funcionará para la geometría estática porque la animación real requeriría la manipulación de todos esos datos en cada cuadro. Sin embargo, renderizar, especialmente con LOD variable, no es un problema.
¿Cómo hacer tal cosa? Soy un gran fanático del trazado de rayos, y maneja ese tipo de cosas bastante bien con y sin una GPU.
Todo esto es especulación, por supuesto. No tengo información específica sobre el caso del que estás hablando. Y ahora para algo relacionado pero diferente:
Una gran cantidad de datos prestados
EDITAR Y aquí hay uno que hice, pero alteré deliberadamente las normales para hacer que las cajas sean más aparentes:
Stanford Bunny en voxels
Esa velocidad de fotogramas estaba en un solo núcleo IIRC. Duplicar la profundidad del árbol generalmente reducirá la velocidad de fotogramas a la mitad, mientras que usar múltiples núcleos se escalará muy bien. Normalmente mantengo primitivas (triángulos y demás) en mi octtree, pero en el caso de las sonrisas había decidido representar los nodos de las hojas del árbol en este caso. Se puede obtener un mejor rendimiento si optimiza en torno a un método específico, por supuesto.
En algún lugar de ompf hay un automóvil hecho con voxels que es realmente fantástico, excepto que es estático. Parece que no puedo encontrarlo ahora ...
fuente
Al ver el video, nada me indica que se haya utilizado ningún hardware especial. De hecho, se afirma que esto se ejecuta en software a 20 fps, a menos que me haya perdido algo.
Quizás se sorprenderá al saber que ha habido una gran cantidad de desarrollos en el renderizado en tiempo real utilizando una variedad de tecnologías como el trazado de rayos, el renderizado de vóxel y el splat de superficie. Sin embargo, es difícil decir qué se ha utilizado en este caso. (Si está interesado, eche un vistazo a http://igad2.nhtv.nl/ompf2/ para ver un gran foro de trazado de rayos en tiempo real, o http://www.atomontage.com/ para un motor de vóxel interesante. Google "salpicaduras de superficie" para algunos enlaces geniales sobre ese tema)
Si miras la película, notarás que toda la geometría es estática y, aunque detallada, hay una gran cantidad de repeticiones de objetos, lo que puede sugerir una instancia.
Y lo más probable es que haya muchos sacrificios agresivos, niveles de detalle y particiones espaciales.
Si nos fijamos en la calidad visual (no en la complejidad geométrica) no se ve tan impresionante. De hecho, se ve bastante plano. El sombreado que se muestra puede integrarse en los datos y no evaluarse en tiempo real.
Me encantaría ver una demostración con geometría animada e iluminación dinámica.
A menos que esté completamente equivocado (y no sería la primera vez que lo estoy), mi primera respuesta sugeriría un uso (quizás muy inteligente) de la tecnología existente, quizás optimizado y extendido para crear esta demostración. Sin embargo, convertirlo en un motor de juego real, con todas las otras tareas además de representar la geometría estática que eso incluye, es un juego de pelota completamente diferente.
Por supuesto, todo esto es pura especulación (lo que me hace muy divertido). Todo lo que digo es que esto no es necesariamente falso (de hecho, no creo que lo sea y todavía estoy impresionado), pero probablemente tampoco sea tan innovador como lo hacen sonar.
fuente
Estos átomos en realidad no son tan mágicos / especiales / ajenos al hardware gráfico actual. Es solo una especie de nube de puntos o representación basada en voxel. Entonces, en lugar de triángulos, representan puntos o cuadros, nada inalcanzable con el hardware actual.
Ha sido y ya está hecho y no es la súper invención, pero tal vez se les ocurrió una forma más eficiente de memoria y tiempo para hacerlo. Aunque se ve y suena bastante interesante, debe tomar este video con un poco de sal. Renderizar 100,000 puntos en lugar de un polígono completamente texturizado (que ya ocupa solo unos pocos píxeles en la pantalla) no mejora la calidad de sus gráficos en un factor de 100,000.
Y, por cierto, he oído que el software de identificación también está probando el procesamiento de vóxeles acelerado por GPU, pero tengo un poco más de confianza en John Carmack que en el orador de este video :)
fuente
Esa fue una estafa de inversión.
En cuanto a la idea, no es factible en el hardware actual no dedicado. La cantidad de puntos que necesitaría para evitar huecos al mirar algo de cerca está mucho más allá de la cantidad de puntos que podría disparar en la RAM de hoy. Incluso si no conozco ninguna estructura de datos o algoritmos de búsqueda que produzcan algo cercano al rendimiento que se muestra en la demostración. E incluso si , de alguna manera fuera posible buscar estos puntos en tiempo real, las fallas de caché y el ancho de banda de memoria garantizarían que no pueda.
No dudo del hecho de que tales imágenes no se pueden lograr en tiempo real, solo que no con el método presentado. Supongo que las demostraciones se renderizaron con voxels, que se han utilizado durante décadas y que ya pueden producir detalles bastante altos en tiempo real: http://www.youtube.com/watch?v=BKEfxM6girI http://www.youtube .com / watch? v = VpEpAFGplnI
fuente
Por lo que vi, parece que están usando formas paramétricas en lugar de formas poligonales simples; en otras palabras, cambian la geometría de acuerdo con la resolución requerida.
Esto se puede hacer usando técnicas como sombreadores de geometría y ruido de perlin.
Otra posibilidad es utilizar GPGPU (p. Ej., CUDA) para representar escenas que no son polígonos y realizar el trazado de rayos (para el orden z y las sombras). Otra posibilidad es un hardware personalizado que muestre fórmulas en lugar de triángulos.
fuente
Pienso en todas sus afirmaciones, la compresión de la memoria parece una exageración, podría entender que algo como la compresión RLE tiene un gran impacto. Al final, creo que este sistema tendrá muchos "pros", pero muchos "contras", como el trazado de rayos o el renderizado de iso-superficie con cubos de marcha.
En cuanto a representar 'billones' de átomos; No creo que digan eso. En cambio, lo que están haciendo es buscar átomos W * H, es decir, un átomo por píxel en la pantalla. Esto podría lograrse de muchas maneras lentas y difíciles. Algunas formas de acelerar esto son los árboles KD y los árboles BSP, los octrees, etc. Sin embargo, al final, se clasifican muchos datos y el hecho de que su demostración aparentemente clasifica 1440x720 átomos, más de una vez por cuadro, Debido a las sombras / reflejos en su demo, es sorprendente. Así que cudos!
fuente
la forma en que funciona es mucho más simple de lo que podrías pensar, en lugar de precargar un nivel de juego, solo carga una sola pantalla, uno o unos pocos átomos por píxel en tu pantalla, nada más, el juego / motor predice qué los siguientes cuadros son y eso es lo único que se carga, solo se representa la parte del objeto visible, no todo el objeto en sí. PROS: tanta definición y resolución puede manejar su monitor, bajo uso de memoria CONTRAS: la velocidad de lectura del disco es bastante grande y podría conducir a una baja velocidad de fotogramas.
fuente