¿Cuántos sombreadores activos en un cuadro en el juego debería usar normalmente? ¿5 o más como 100?

20

¿Cuántos sombreadores suelen estar activos, al mismo tiempo en una escena, en los juegos modernos? Sé que se están utilizando múltiples sombreadores, con los juegos cambiando entre ellos en cada cuadro, y es común dibujar objetos a través del sombreador:

  1. Dibuja todos los objetos con el sombreador uno
  2. Cambiar del sombreador uno al sombreador dos
  3. Dibuja todos los objetos con sombreador dos

Aún así, sé que no es tan simple, especialmente con efectos como un efecto de brillo para toda la escena, renderizar a textura, etc., pero supongo que podemos suponer que funciona así la mayor parte del tiempo, ¿verdad? El enfoque de "grupo por sombreador" es bueno, porque cambiar sombreadores es una operación costosa.

Por un lado, no puede tener demasiados sombreadores, porque desea renderizar la escena rápidamente. Por otro lado, necesita muchos sombreadores diferentes (o súper sombreadores con ramas, bastante similares) para la piel, el metal, el agua, etc.

¿Cuántos (y qué) sombreadores diferentes usaría el juego de detectives 3D teórico, moderno, en tercera persona para PC (DirectX 11, si es importante)? ¿Sería 5, 20 o más como 100 sombreadores activos, contando solo activos, en algún "marco X"? Sé que no es un número, pero me pregunto qué escala y factores son importantes, en consideración para un juego de PC.


En mi juego de muestra, usaría aproximadamente 9-11 por cuadro (cuente como sombreadores pequeños diferentes o un sombreador súper, no importa ahora):

  1. Sombreador de piel
  2. Sombreador de ojos (¿no demasiado? Pero son diferentes)
  3. Sombreador de metal
  4. Sombreador de tierra
  5. Sombreador de nieve / lluvia (si es necesario)
  6. Sombreador de agua (si el agua existe en la escena)
  7. Glow shader (solo cuando hay algunos efectos especiales involucrados)
  8. Shader emisor de luz (farolas, etc.)
  9. Sombreador estándar (para todos los demás, solo sombreado estándar)
  10. Sombreador estándar con mapas normales
  11. Sombreador 2D (para GUI, etc.)

¿Es "mucho" o "no muchos"? ¿Olvidé algunos sombreadores importantes que necesitaría?

PolGraphic
fuente

Respuestas:

28

Realmente depende de la técnica. En un render hacia adelante, a menudo tiene un sombreador para cada tipo de material diferente. En los juegos AAA que usan esta técnica, los sombreadores a menudo se generan a partir de un conjunto de opciones sobre el material que un artista puede configurar. Esto puede generar cientos de sombreadores (1). Pero digamos que generalmente el número de sombreadores es del orden de 40

En un sombreado / renderizado diferido, a menudo codifica el tipo de material en el G-buffer y luego usa un sombreador grande para representar correctamente diferentes tipos de material de manera diferente. Esto conduce a sombreadores mucho menos, pero más complicados. Digamos que el número de sombreadores aquí es del orden de 5.

(1) Fuente: trabajé para un contratista de Crystal Dynamics donde construí una herramienta para reducir el número de sombreadores generados para Tomb Raider ya que la generación automática se estaba yendo de las manos;). El objetivo era reducir el número de sombreadores al orden de 40 o algo así.

Roy T.
fuente
2
Gracias por su respuesta, fue bastante complejo y rico. Lo acabo de votar. Aún así, esperaré unos días antes de que se marque, porque es una pregunta bastante "abierta", tal vez alguien más tendrá algo más que agregar de su propia experiencia también. Una vez más, gracias Roy :)
PolGraphic
s / less / less / ...
error
3

Sé que querías una respuesta para PC. Pero responderé por lo que hago en iOS y no espero obtener su marca de verificación.

Parece que tienes la idea correcta. Sin embargo, será diferente para cada aplicación. Al final, se trata de hacer lo necesario para obtener la velocidad de fotogramas deseada. En el iPhone, mi tasa objetivo es 60. No me gusta que sea inferior a 30. Cuando tengo una explosión con varios cientos de partículas animadas basadas en sprites, se reduce a 30 en el iphone5 y mucho más bajo en el 4. Entonces Tengo que tomar decisiones sobre la reducción de la complejidad en ciertos dispositivos. Y a veces esa decisión afecta a los sombreadores.

Pero generalmente no afecta cuántos sombreadores, sino qué sombreadores utilizo para una tarea basada en mi objetivo de velocidad de fotogramas.

En mi opinión, los sombreadores cuando se usan correctamente aumentan la velocidad de fotogramas. Tengo una aplicación que tiene 80 sombreadores, pero no los usa todos en un solo cuadro, probablemente alrededor de 10. Y los compila según sea necesario y los descarta todos entre escenas. Y en mi hardware no he visto la velocidad de fotogramas del efecto de recuento de sombreadores. Solo las técnicas utilizadas en el sombreador. Pero seguro que creo que usar 2 sombreadores similares es mejor para la velocidad de cuadros que tener uno más complejo que se bifurca.

También tengo sombreadores que reducen la calidad si el renderizado es lento o en un dispositivo más lento. Uso el mapeo normal en el iPhone 5, pero cambio el sombreador a uno que no hace el mapeo normal en el iPhone 4.

Me gusta la respuesta de Roy y siempre trato de entender cómo se hacen los juegos "reales". Como soy autodidacta, nunca sé si mi gran descubrimiento del día es cómo se hace generalmente o si todavía estoy a unos pasos de los verdaderos profesionales.

Badweasel
fuente
1
No hay problema con el hecho de que su respuesta "es para iOS". Dije sobre PC principalmente porque quiero evitar respuestas cortas "depende de la plataforma";) Quizás tu respuesta no sea 100% para mí. Pero aún así, tiene algunas conclusiones independientes de la plataforma, así que lo he encontrado bien. Y otros miembros de la comunidad (que usan iOS) pueden encontrarlo aún más útil, así que gracias y voto mío :)
PolGraphic
1

Realmente no puedes poner un número en cuántos sombreadores deberías tener o no, ya que depende de los factores limitantes de tu juego, así como de la plataforma objetivo. En la práctica, se debe seguir reduciendo el número de sombreadores activos para que sean "solo los que realmente necesita". A veces esto significa que solo tienes un puñado de sombreadores (más o menos 10) a la vez, y a veces significa que tienes unas pocas docenas.

Una forma de ayudar a limitar la cantidad de permutaciones que aparecen en su juego es implementar la técnica de "ubershader", por la cual casi todos los sombreadores se derivan de un sombreador singular, y las diferencias y comportamientos especiales se intercambian a través de un preprocesador. Por supuesto, hay excepciones para efectos especiales como profundidad de campo, oclusión ambiental, etc.

Mi experiencia con los juegos AAA hasta este punto ha demostrado que un par de docenas de sombreadores activos no es irrazonable.

Evan
fuente