Pourquoi voudriez-vous utiliser le rendu logiciel sur le rendu matériel, aujourd'hui?

13

Par opposition au rendu CPU ou logiciel je suppose?

En règle générale, tout le rendu actuel ne serait pas basé sur le GPU, étant donné que vous utiliseriez OpenGL ou Direct X?

Quelqu'un pourrait-il me donner des informations ici, vous ne trouvez pas de réponses appropriées?

user3333072
la source

Réponses:

7

Comme vous savez clairement ce qu'est le rendu GPU ... laissez-moi répondre à ce que vous semblez demander.

Traditionnellement, le rendu matériel a été stigmatisé comme étant très complexe. Cela est dû en grande partie à la conception des interfaces de programmation d'application (API) qui ne sont pas bien adaptées pour masquer la complexité; c'est-à-dire que la courbe d'apprentissage a été abrupte. Cela est également dû en partie à la compréhension que l'écriture d'applications 3D - pour lesquelles ces API sont fortement adaptées - est beaucoup plus complexe que l'écriture d'applications 2D. Concernant la complexité des interfaces, je fais référence à des interfaces comme OpenGL et DirectX. Concernant 3D vs 2D, je fais référence aux mathématiques et à la géométrie qui entrent dans la construction de scènes 3D, à la simplicité avec laquelle l'esprit non formé peut aborder les problèmes 2D.

Cependant, ces dernières années, non seulement le matériel d'apprentissage est devenu beaucoup plus disponible, mais aussi, de nombreuses bibliothèques qui enveloppent les complexités sous-jacentes de ces interfaces sont devenues disponibles et ont abaissé les barrières à l'entrée. Tout cela a alimenté un cycle d'intérêt accru qui était déjà présent en raison de l'importance croissante de la visualisation, des interfaces utilisateur lisses et des performances sur les appareils de faible puissance.

Le rendu logiciel et le rendu 2D ont donc été de bons points d'entrée et zones de mise au point pour ceux qui débutaient dans le graphisme et / ou souhaitaient créer un produit où le rendu ne prenait pas trop de temps sur un projet. Au moins en ce qui concerne la 2D, cela s'applique toujours; La technologie a largement comblé le vide en apportant le rendu 2D au GPU.

Ingénieur
la source
20

Il y a de très bonnes réponses ici, alors juste pour les compléter.

La capacité est l'un des principaux moteurs du rendu logiciel. Cela a été abordé dans l'une des réponses, mais je vais faire un point d'opposition: le rendu logiciel peut en fait être plus performant que le rendu matériel, pas moins.

Avec le matériel, vous êtes généralement limité aux capacités du matériel lui-même, bien qu'OpenGL pour un soit capable d'émuler le logiciel de beaucoup de choses qui peuvent ne pas exister dans le matériel. Cela signifie que si vous essayez d'utiliser la fonctionnalité X mais que le matériel ne la prend pas en charge, l'une des deux choses se produira: soit vous reviendrez à l'émulation logicielle (le scénario OpenGL typique), soit vous n'y arriverez pas. l'utiliser du tout (le scénario D3D typique).

Avec le rendu logiciel, vous pouvez écrire le code vous-même. Vous pouvez manipuler les choses et avoir un contrôle total sur ce qui se passe au niveau des pixels. Pour donner un exemple d'une explosion du passé, Quake a fait implémenter des pixel shaders dans le logiciel en 1996, à une époque où les cartes 3D (elles n'étaient pas alors appelées "GPU") pouvaient à peine pixelliser quelques dizaines de triangles texturés.

C'est plus le cas également avec les GPU actuels, mais il existe encore des parties importantes du pipeline graphique qui sont exposées en tant que fonctionnalités fixes (ou même pas du tout exposées).

Le rendu logiciel peut mieux évoluer. Ce n'est que relativement récemment que nous avons vu des configurations multi-GPU devenir vraiment viables, mais les logiciels peuvent évoluer sur de nombreux cœurs de processeurs sur de nombreux serveurs. Vous pouvez avoir des batteries de serveurs entières dédiées à cela, et les batteries de rendu professionnelles utiliseront toujours le rendu logiciel.

Les logiciels peuvent exposer différents paradigmes de rendu. Le matériel actuel est très concentré sur le paradigme triangle / sommet / fragment / rastérisation; il s'agit de choisir une chose et de l'optimiser jusqu'à ce qu'elle hurle de miséricorde. Les GPU sont toujours un mauvais choix, par exemple pour le lancer de rayons, qui est plus couramment implémenté dans les logiciels.

Bien sûr, lorsqu'il s'agit d'une comparaison directe de pommes à pommes, un GPU battra le logiciel n'importe quel jour de la semaine - à condition de comparer les zones où les GPU sont plus forts. Mais cela ne veut pas dire qu'ils sont plus forts dans tous les domaines. Malgré cela, et pour les besoins de ce site SE, l'utilisation de matériel est généralement la voie à suivre, mais sachez qu'il existe des cas d'utilisation où les logiciels sont également viables.

Maximus Minimus
la source
8
+1 pour "le rendu logiciel peut en fait être plus performant que le rendu matériel, pas moins".
concept3d
10

Le rendu matériel ou GPU est, comme vous l'avez deviné, en utilisant l'unité de traitement graphique (alias carte vidéo) pour rendre une image. Le contraire est le rendu logiciel où le CPU est utilisé.

Le rendu logiciel est généralement utilisé comme solution de rechange lorsqu'il n'y a pas de GPU (approprié) disponible. Cependant, étant donné que le GPU est de plusieurs ordres de grandeur, les rendus logiciels plus rapides ne sont presque jamais utiles car un processeur ne sera généralement pas en mesure de restituer des images en temps réel. Le rendu logiciel est utile lorsqu'une précision élevée est requise ou si des formules extrêmement compliquées sont nécessaires pour rendre l'image. Étant donné que les CPU sont plus polyvalents que les GPU et ont donc plus de capacités. Cependant, cet argument devient de moins en moins valide car les GPU peuvent de nos jours gérer des tâches de plus en plus complexes et ne se limitent plus à des flottants de 32 bits pour représenter des nombres.

Roy T.
la source
2

Je pense que c'est une très bonne question.

Ce que je peux imaginer c'est:

  • La VRAM est plus limitée que la mémoire RAM générale. En cas de rendu GPU - chaque texture est plus un problème. Vous pouvez stocker en moyenne environ 4 à 8 fois plus de données en RAM qu'en VRAM. Bien sûr, ce scénario suppose qu'aucun système n'est responsable de la libération / du transfert des textures inutilisées / requises de / vers RAM / VRAM

  • En termes de multithreading, c'est beaucoup plus facile lorsque vous travaillez avec le rendu logiciel - pas besoin de partager des contextes

  • Si vous faites des graphiques 2D - généralement la plupart des frameworks implémentent l'évaluation de Dirty Rectangles - ce qui résout de nombreux problèmes de performances.

Pourtant, le rendu utilisant OGL / D3D offre beaucoup plus de performances et de possibilités. Les shaders peuvent faire des choses vraiment incroyables, qui sont presque impossibles avec le rendu logiciel.

Mais les techniques telles que le blitting, l'utilisation de colorkeys, ont leur propre sensation comme si vous étiez au niveau de base, à l'origine du monde de l'infographie.

Je pense qu'il est au moins bon de connaître le rendu logiciel. C'est vraiment un monde très excitant, sans mentionner qu'il est la racine de tout ce que nous voyons aujourd'hui.

luke1985
la source
1
Vous n'avez pas besoin d'accélération matérielle pour exécuter les shaders. OS X 10.9 est livré avec une fonctionnalité de mise en œuvre logicielle complète de GL4. Les performances sont incroyablement bonnes pour le rendu logiciel; ce n'est pas au point où vous pouvez réellement jouer à des jeux sophistiqués (pour être honnête, les GPU d'Apple ne sont pas non plus livrés avec leurs produits) mais c'est beaucoup plus pratique que d'utiliser quelque chose comme le rasterizer de référence Direct3D. C'est en fait quelque chose que vous pourriez expédier avec un logiciel fonctionnel.
Andon M. Coleman
@ AndonM.Coleman Tout le monde n'utilise pas Apple et je ne connais pas de moteurs de rendu qui prennent en charge les shaders sur Linux et Windows.
luke1985
1
Ce n'était pas mon point cependant. Il existe des implémentations d'OpenGL où les shaders entièrement fonctionnels s'exécutent complètement sur le CPU. Le fait qu'Apple soit le développeur est largement hors de propos. Votre réponse a donné l'impression que vous pensiez que vous deviez avoir un GPU pour exécuter des shaders modernes dans OpenGL.
Andon M. Coleman
@ AndonM.Coleman Et c'est presque correct, car dans 80% des cas, vous devez le faire.
luke1985
2
Les shaders peuvent être facilement mis en œuvre via le rendu logiciel, même Tomb Raider 1 et Quake 1 avaient des shaders de pixels. C'est exactement le contraire, un processeur vous donne beaucoup plus de contrôle que le pipeline de vertex / fragment limitant des GPU actuels.
lama12345