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.
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.
la source
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.
la source