Diferencia entre renderizar en OpenGL y software de animación 3D

16

Con OpenGL y tal, puedo renderizar algunas cosas bastante sorprendentes en "tiempo real" 60 FPS. Sin embargo, si trato de hacer un video de esa misma escena en Digamos Maya, o 3ds Max, tomaría MUCHO MUCHO más tiempo para que se reproduzca, aunque tenga la misma resolución y FPS.

¿Por qué estos dos tipos de renderizado toman diferentes períodos de tiempo para el mismo resultado?

Nota: Sí, me doy cuenta de que el software de animación 3D puede producir imágenes muy superiores a lo que se podría hacer en tiempo real. Pero para esta pregunta me refiero a una escena de igual complejidad.

J.Doe
fuente
1
La respuesta corta es que OpenGL toma atajos.
user253751

Respuestas:

9

La principal diferencia sería que con OpenGL en un videojuego, tendrá un proceso llamado rasterización que básicamente se encarga de determinar qué parte de la escena ve.

Tiene que ser rápido para que podamos experimentarlo en tiempo real.

Por lo tanto, el algoritmo realiza algunos pasos simples.

  • comprobar si una cierta parte de la escena está en mi punto de vista frustum

    El sacrificio de Frustum

  • compruebe si hay algo delante de él que deba ser renderizado más tarde usando un búfer de profundidad

    Tampón de profundidad

  • ordenar los objetos que encontramos para dibujar

  • dibujarlos proyectándolos en la pantalla
  • sombrearlos en base a texturas / sombreadores / luces / ...

Por otro lado, un software de renderizado (Blender / Max / Maya / ...) probablemente usa algún tipo de trazado de rayos

Esto implica muchas más matemáticas para lograr un mayor grado de realismo. Básicamente funciona de la misma manera:

  • crear una cámara y un plano de imagen delante de ella
  • dispara un rayo (o múltiples rayos de muestra) a través de cada píxel
  • comprobar si el rayo golpea algo en la escena
  • el golpe más cercano es el que se dibujará en el píxel finalmente (como el búfer de profundidad)
  • calcular la luz para el punto dado Cálculo de luz

....

Dejaré de enumerar aquí ya que este es el punto donde despega el trazado de rayos.

En lugar de solo verificar si se golpea un punto, la mayoría de raytracer ahora comienza a calcular:

  • la cantidad de luz que penetra una superficie
  • cuánta luz se refleja
  • proyecta nuevos rayos desde el punto de golpe a la escena hasta que pueda golpear una fuente de luz

Hay un montón de técnicas con diferentes grados de realismo que se pueden utilizar para calcular la luz de un determinado punto de la escena.

TL; DR Lo esencial sería que un trazador de rayos trata principalmente de ser físicamente preciso cuando se trata de la iluminación y, por lo tanto, tiene muchos más cálculos por píxel (a veces dispara miles de rayos) y, por otro lado, los juegos obtienen su velocidad al dibujando trozos más grandes de la pantalla con cálculos de luz más simples y muchos trucos de sombreado que lo hacen ver realista.

xoryouyou
fuente
7

Estás comparando manzanas con naranjas

El juego es como el puerto de visualización en su aplicación de modelado. Puede usar la ventana gráfica para renderizar y obtendrá las mismas velocidades de 60 fps.

No hay ninguna razón por la que no pueda obtener gráficos en tiempo real que sean muy buenos con software de modelado como Maya o 3DS Max. Resultados que están a la par con muchos juegos. Tienen sombreadores de ventana gráfica al igual que los juegos. También hay una opción de representación de la ventana gráfica que agrupa los fotogramas en el disco tan rápido como lo permite (he realizado renderizaciones Full HD a 30 fps desde Maya). Todo lo que tiene que hacer es dejar de usar los raytracers de software proporcionados.

Sin embargo, hay algunas diferencias. La principal diferencia es que usted, como usuario, no optimiza las cosas tanto como lo hacen los desarrolladores de juegos (la optimización está utilizando todos los trucos del libro). En segundo lugar, tus primitivas de animación funcionan en la CPU porque necesitas la flexibilidad. En los juegos uno puede permitirse hacer optimizaciones. En general, paga por no tener un equipo de programación a su lado.

De hecho, muchas de las cosas pueden haberse calculado previamente, por lo que no son mucho más rápidas, sino que están mejor organizadas. Hornear su iluminación indirecta superará los resultados no horneados todos los días.

¿Por qué los rastreadores son más lentos?

No son *, uno solo tiende a hacer más trabajo en un rastreador de rayos porque es fácil. Característica por característica, no son mucho más lentos en los ciclos de cálculo. Por ejemplo, no hay necesidad de un trazador de rayos para emitir rayos secundarios (los reflejos de vida en ese caso el trazador de rayos eliminará la geometría, o ni siquiera la cargará, de hecho, el rayo mental hace exactamente eso). Por lo general, se hace porque es trivial hacerlo y esa es la clara ventaja de los trazadores de rayos. Incluso puede configurarlos para que se ejecuten en la CPU en algunos casos. Simplemente están optimizados para diferentes cosas:

  1. Emitir datos al disco, no solo cuadros, sino todos los datos. Algo que rompería la velocidad de la mayoría de los juegos al instante.

  2. Trabajando en hardware general. La GPU es mucho más rápida para ciertas cosas una vez que se optimiza para la GPU. Pero no funciona para todas las cargas, de hecho, una CPU Intel es más rápida en computación en general que la GPU. La GPU es masivamente paralela que la CPU no lo es. La arquitectura gana si puede permanecer en la GPU y minimizar la transferencia y optimizar la arquitectura de la GPU.

Entonces paga por flexibilidad y facilidad de uso. Pero sí, admitiré que tanto Maya como Max sufren de vejez extrema. Entonces podrían ser más rápidos.

TL; DR La diferencia radica principalmente en la optimización (lea muchos trucos) y los recursos externos disponibles.

PD: Hay una idea errónea de que esto se debe a que es más físicamente correcto. Ciertamente puede ser, pero el rastreador de rayos no es inherentemente más físicamente correcto que su juego promedio o cualquier otro cálculo. De hecho, muchos juegos usan modelos realmente buenos, mientras que muchos modeladores no lo hacen.

* Ver http://www.graphics.cornell.edu/~bjw/mca.pdf

joojaa
fuente
2
Lo siento, pero eso está mal. OpenGL y DirectX usan aproximaciones que son inherentemente más rápidas que el trazado de rayos preciso. El objetivo de los gráficos 3D acelerados es tener algoritmos que equilibren el realismo y la velocidad, que se
vean lo
2
@IMil OpenGL puede usarse para trazado de rayos. Es más rápido porque está optimizado para el hardware en cuestión. Pero Maya NO tiene que rastrear rastro. Maya y Max pueden usar openGL y directX tanto como tu juego. La vista de Mayas (y 3ds) es opengl o directX (su elección). El hecho de que su procesador sea más lento en ciertas cargas de procesamiento en paralelo es otra cosa. Entonces la respuesta se mantiene. La configuración estándar de maya no es más realista que una línea de exploración estándar.
joojaa
5

Vista previa en tiempo real

Trabajando en el lado VFX de la industria, si está hablando de vistas previas de vistas en tiempo real y no de renderizado de producción, entonces Maya y 3DS Max también suelen usar OpenGL (o posiblemente DirectX, más o menos lo mismo).

Una de las principales diferencias conceptuales entre el software de animación VFX y los juegos es el nivel de suposiciones que pueden hacer. Por ejemplo, en el software VFX, no es raro que el artista cargue una única malla de caracteres sin costuras que abarca cientos de miles a millones de polígonos. Los juegos tienden a optimizar más para una escena grande que consiste en un bote de mallas simples y optimizadas (miles de triángulos cada una).

Renderizado de producción y trazado de ruta

El software VFX también pone el énfasis no en la vista previa en tiempo real sino en el renderizado de producción donde los rayos de luz se simulan uno a la vez. La vista previa en tiempo real a menudo es solo eso, una "vista previa" del resultado de producción de mayor calidad.

Los juegos están haciendo un hermoso trabajo al aproximar muchos de esos efectos últimamente, como profundidad de campo en tiempo real, sombras suaves, reflejos difusos, etc., pero están en la categoría de aproximación de alta resistencia (ej .: mapas de cubos borrosos para difusos). reflexiones en lugar de simular realmente rayos de luz).

Contenido

Volviendo a este tema, las suposiciones de contenido entre un software VFX y un juego difieren enormemente. El enfoque principal de un software VFX es permitir que se cree cualquier tipo de contenido posible (al menos eso es lo ideal, aunque en la práctica a menudo no está cerca). Los juegos se centran en el contenido con suposiciones mucho más pesadas (todos los modelos deben estar en el rango de miles de triángulos, los mapas normales deben aplicarse a detalles falsos, en realidad no deberíamos tener 13 mil millones de partículas, los personajes no están realmente animados por músculo plataformas y mapas de tensión, etc.).

Debido a esas suposiciones, los motores de juego a menudo pueden aplicar más fácilmente técnicas de aceleración como el sacrificio de frustum que les permite mantener una alta velocidad de cuadros interactiva. Pueden hacer suposiciones de que parte del contenido será estático, horneado de antemano. El software VFX no puede hacer fácilmente ese tipo de suposiciones dado el grado mucho más alto de flexibilidad en la creación de contenido.

Los juegos lo hacen mejor

Esto podría ser una especie de punto de vista controvertido, pero la industria del juego es una industria mucho más lucrativa que el software VFX. Sus presupuestos para un solo juego pueden abarcar cientos de millones de dólares, y pueden permitirse seguir lanzando motores de próxima generación cada pocos años. Sus esfuerzos de I + D son increíbles, y hay cientos y cientos de títulos de juegos que se lanzan todo el tiempo.

El software VFX y CAD, por otro lado, no es tan lucrativo. Los investigadores que trabajan en entornos académicos suelen externalizar la I + D, y gran parte de la industria a menudo implementa técnicas publicadas muchos años antes como si fuera algo nuevo. Por lo tanto, el software VFX, incluso de compañías tan grandes como AutoDesk, a menudo no es tan "avanzado" como los últimos motores de juegos AAA.

También tienden a tener un legado mucho más largo. Maya es un producto de 17 años, por ejemplo. Se ha reformado mucho, pero su arquitectura central sigue siendo la misma. Esto podría ser análogo a tratar de tomar Quake 2 y seguir actualizándolo y actualizándolo hasta 2015. Los esfuerzos pueden ser excelentes, pero probablemente no coincidan con Unreal Engine 4.

TL; DR

De todos modos, esa es una pequeña versión de ese lado del tema. No pude distinguir si estaba hablando de vistas previas en tiempo real en ventanas gráficas o renderizado de producción, así que intenté cubrir un poco de ambas.

Dragon Energy
fuente
También es una cuestión de tiempo. Incluso si pudiera renderizar a unos 60 fps y obtener resultados aceptables, rara vez se optimiza para optimizarlo. Digamos que toma 3 minutos por cuadro y tiene 200 cuadros para renderizar. Es posible que pueda obtener los 60 fps contratando a un escritor de sombreadores y optimizando, pero eso toma al menos uno o dos días de su tiempo. Pero 200 fotogramas a los 3 minutos solo toma 10 horas, por lo que ahorra ese costo. En la práctica, es más barato comprar más hardware y no preocuparse demasiado por él. Los juegos simplemente no pueden adoptar este enfoque.
joojaa
@joojaa Sin embargo, también es un poco más complejo. Solo hacer sombreadores en tiempo real realmente buenos para Maya podría llevar un año más o menos, incluso por parte de un desarrollador de sombreadores experimentado (con menores ganancias), porque la flexibilidad del sistema nodal está dirigida a la producción. Se necesitaría una mentalidad de ingeniería inversa y un nuevo tipo de técnica de generación de código GLSL / HLSL (como un sistema de meta programación) para traducir estos nodos sombreadores de propósito general en un sistema de sombreado en tiempo real que capture el rango de efectos de UE 4 , por ejemplo
Dragon Energy
El motor de sombreado de @joojaa UE 4 está dirigido directamente a una mentalidad PBR muy aproximada (un subconjunto muy pequeño del sombreador PBR de Disney). Diseñaron incluso su sistema de material para un propósito rápido y en tiempo real, en lugar de comenzar con algo como el sistema de material de Maya que no lo es (diseñado para el trazado de rayos). Incluso si el UE 4 más brillante trabajara en VP 2.0, tendrían que trabajar día y noche durante posiblemente años para lograr los mismos resultados en un diseño que no pretende hacer este tipo de cosas.
Dragon Energy
pero eso es un costo único, incluso si tuviera esa tubería en una aplicación de efectos visuales, cada escena podría necesitar esa optimización adicional. No hay ninguna razón por la que un usuario maya no pueda renderizar en UDK, por ejemplo, para la misma plataforma de desarrollo de sombreadores.
joojaa
1
Continuemos esta discusión en el chat .
joojaa