Combien de shaders sont généralement actifs, en même temps dans une scène, dans les jeux modernes? Je sais que plusieurs shaders sont utilisés, les jeux basculant entre eux dans chaque image, et il est courant de dessiner des objets via le shader:
- Dessinez tous les objets avec le shader one
- Passer du shader un au shader deux
- Dessinez tous les objets avec le shader deux
Pourtant, je sais que ce n'est pas aussi simple, en particulier avec des effets comme un effet de lueur pour toute la scène, le rendu à la texture, etc., mais je suppose que nous pouvons supposer que cela fonctionne de cette façon la plupart du temps, non? L'approche "grouper par shader" est bonne, car la commutation des shaders est une opération coûteuse.
D'un côté, vous ne pouvez pas avoir trop de shaders, car vous voulez rendre la scène rapidement. D'autre part, vous avez besoin de nombreux shaders différents (ou uber-shader avec des branches - assez similaires) pour la peau, le métal, l'eau, etc.
Combien (et quels) shaders différents le jeu de détective 3D théorique, moderne, à la troisième personne pour PC (DirectX 11, le cas échéant) utiliserait-il? Ce serait 5, 20 ou plus comme 100 shaders actifs, ne comptant que les actifs, à une certaine "trame X"? Je sais que ce n'est pas un chiffre, mais je me demande quelle échelle et quels facteurs sont importants, en considération pour un jeu PC.
Dans mon exemple de jeu, j'utiliserais environ 9-11 par image (comptez-le comme différent, de petits shaders ou un uber-shader - ça n'a plus d'importance maintenant):
- Shader de peau
- Shader des yeux (pas trop? Mais ils sont différents)
- Shader métal
- Shader au sol
- Shader neige / pluie (si nécessaire)
- Shader d'eau (si l'eau existe dans la scène)
- Glow shader (uniquement lorsque certains effets spéciaux sont impliqués)
- Shader émetteur de lumière (lampadaires, etc.)
- Ombrage standard (pour tous les autres, juste ombrage standard)
- Shader standard avec des cartes normales
- Shader 2D (pour GUI etc.)
Est-ce «beaucoup» ou «pas beaucoup»? Ai-je oublié certains shaders importants dont j'aurais besoin?
Je sais que tu voulais une réponse pour PC. Mais je répondrai de ce que je fais dans iOS et je ne m'attends pas à recevoir votre coche.
Il semble que vous ayez la bonne idée. Cela va être différent pour chaque application. En fin de compte, il s'agit de faire ce qu'il faut pour obtenir la fréquence d'images souhaitée. Sur l'iPhone, mon objectif est de 60. Je n'aime pas qu'il descende en dessous de 30. Quand j'ai une explosion avec plusieurs centaines de particules animées à base de sprite, il descend à 30 sur l'iphone5 et beaucoup plus bas sur le 4. Donc Je dois prendre des décisions sur la réduction de la complexité de certains appareils. Et parfois, cette décision affecte les shaders.
Mais cela n'affecte généralement pas le nombre de shaders, mais plutôt les shaders que j'utilise pour une tâche en fonction de mon objectif de fréquence d'images.
À mon avis, les shaders, lorsqu'ils sont utilisés correctement, augmentent la fréquence d'images. J'ai une application qui a 80 shaders, mais elle ne les utilise pas tous sur une seule image - probablement environ 10. Et elle les compile au besoin et les supprime tous entre les scènes. Et sur mon matériel, je n'ai pas vu la fréquence d'images de l'effet de comptage des shaders. Seules les techniques utilisées dans le shader. Mais pour sûr, je pense que l'utilisation de 2 shaders similaires est meilleure pour la fréquence d'images que d'avoir un plus complexe qui se ramifie.
J'ai également des shaders qui réduisent la qualité si le rendu est lent ou sur un appareil plus lent. J'utilise le mappage normal sur l'iPhone 5, mais je remplace le shader par celui qui ne fait pas de mappage normal sur l'iPhone 4.
J'aime la réponse de Roy et j'essaie toujours de comprendre comment les "vrais" jeux sont créés. Depuis que je suis autodidacte, je ne sais jamais si ma grande découverte de la journée est simplement comment cela se fait généralement ou encore quelques pas derrière les vrais professionnels.
la source
Vous ne pouvez pas vraiment chiffrer le nombre de shaders que vous devriez ou ne devriez pas avoir, car cela dépend des facteurs limitants de votre jeu, ainsi que de la plate-forme cible. Dans la pratique, il faut suivre la réduction du nombre de shaders actifs pour "seulement autant que vous en avez réellement besoin". Parfois, cela signifie que vous n'avez qu'une poignée de shaders (une dizaine) à la fois, et parfois cela signifie que vous en avez quelques dizaines.
Une façon d'aider à limiter la quantité de permutations qui apparaissent dans votre jeu est d'implémenter la technique "ubershader", par laquelle presque chaque shader est dérivé d'un shader singulier, et les différences et les comportements spéciaux sont échangés via un préprocesseur. Il existe bien sûr des exceptions pour les effets spéciaux tels que la profondeur de champ, l'occlusion ambiante, etc.
Mon expérience avec les jeux AAA jusqu'à présent a montré que quelques dizaines de shaders actifs n'étaient pas déraisonnables.
la source