web-dev-qa-db-fra.com

Pourquoi utilisons-nous des CPU pour le lancer de rayons au lieu de GPU?

Après avoir fait quelques recherches sur la pixellisation et le lancer de rayons. J'ai découvert qu'il n'y a pas beaucoup d'informations sur le fonctionnement des processeurs pour le lancer de rayons disponibles sur Internet. Je suis tombé sur un article sur Pixar et comment ils ont pré-rendu Cars 2 sur le CPU. Cela leur a pris 11,5 heures par image. Un GPU n'aurait-il pas rendu cela plus rapidement avec la même qualité d'image? http://gizmodo.com/5813587/12500-cpu-cores-were-required-to-render-cars-2https://www.engadget.com/2014/ 10/18/disney-big-hero-6 /http://www.firstshowing.net/2009/michael-bay-present-transformers-2-facts-and-figures/ À la vôtre, Sam

34
oodle600

Je suis l'un des architectes de logiciels de rendu dans un grand studio d'effets visuels et d'animation avec un moteur de rendu propriétaire (pas Pixar, même si j'étais autrefois l'architecte du logiciel de rendu là-bas, il y a très longtemps).

Presque tous les rendus de haute qualité pour les films (dans tous les grands studios, avec tous les principaux moteurs de rendu) sont uniquement CPU. Il y a un tas de raisons pour lesquelles c'est le cas. Dans aucun ordre particulier, certains des plus convaincants pour vous donner la saveur des problèmes:

  • Les GPU ne vont vite que lorsque tout est en mémoire. Les plus grandes cartes GPU ont, quoi, 12 Go environ, et elles doivent contenir tout. Eh bien, nous rendons régulièrement des scènes avec 30 Go de géométrie et qui font référence à 1 To ou plus de texture. Impossible de charger cela dans la mémoire du GPU, c'est littéralement deux ordres de grandeur trop gros. Les GPU sont donc tout simplement incapables de gérer nos scènes les plus importantes (voire moyennes). (Avec les moteurs de rendu CPU, nous pouvons paginer des choses à partir du disque quand nous en avons besoin. Les GPU ne sont pas bons pour cela.)

  • Ne croyez pas que le battage médiatique, le lancer de rayons avec les GPU n'est pas une victoire évidente sur le processeur. Les GPU sont parfaits pour un travail hautement cohérent (faire les mêmes choses avec beaucoup de données à la fois). Le lancer de rayons est très incohérent (chaque rayon peut aller dans une direction différente, intersecter différents objets, ombrer différents matériaux, accéder à différentes textures), et donc ce modèle d'accès dégrade très gravement les performances du GPU. Ce n'est que très récemment que le traçage de rayons GPU pourrait correspondre au meilleur code de traçage de rayons basé sur le processeur, et même s'il l'a dépassé, ce n'est pas beaucoup, pas assez pour jeter tout l'ancien code et recommencer avec un code fragile buggy pour les GPU . Et les scènes les plus grandes et les plus chères sont celles où les GPU ne sont que légèrement plus rapides. Être beaucoup plus rapide sur les scènes faciles n'est pas vraiment important pour nous.

  • Si vous avez 50 ou 100 années-homme de code renforcé en production dans votre moteur de rendu basé sur le processeur, vous ne le jetez pas et vous recommencez afin d'obtenir une accélération 2x. L'effort de génie logiciel, la stabilité, etc., sont plus importants et constituent un facteur de coût plus important.

  • De même, si votre studio investit dans un centre de données contenant 20000 cœurs de processeur, le tout dans le plus petit facteur de forme le plus économe en énergie et en chaleur que vous puissiez, c'est également un investissement de coût irrécupérable que vous ne jetez pas simplement. Les remplacer par de nouvelles machines contenant des GPU haut de gamme augmente considérablement le coût de votre ferme de rendu.Elles sont plus grandes et produisent plus de chaleur, ce qui pourrait ne pas convenir à votre bâtiment.

  • La loi d'Amdahl: Le "rendu" réel en soi n'est qu'une étape dans la génération des scènes, et les GPU n'y contribuent pas. Disons qu'il faut 1 heure pour générer et exporter complètement la scène vers le moteur de rendu, et 9 heures pour le "rendre", et sur ces 9 heures, une heure lit la texture, les volumes et d'autres données du disque. Ainsi, sur les 10 heures totales de la façon dont l'utilisateur éprouve le rendu (bouton poussoir jusqu'à ce que l'image finale soit prête), 8 heures sont potentiellement accélérées avec les GPU. Donc, même si le GPU était 10 fois plus rapide que le CPU pour cette partie, vous passez de 10 heures à 1 + 1 + 0,8 = près de 3 heures. Ainsi, une accélération de 10 fois le processeur graphique ne se traduit que par un gain réel de 3 fois. Si le GPU était 1 000 000x plus rapide que le CPU pour le lancer de rayons, vous avez toujours 1 + 1 + minuscule, ce qui n'est qu'une accélération de 5x.

Mais qu'est-ce qui est différent dans les jeux? Pourquoi les GPU sont-ils bons pour les jeux mais pas pour les films?

Tout d'abord, lorsque vous créez un jeu, souvenez-vous qu'il doit être rendu en temps réel - cela signifie que votre contrainte la plus importante est la fréquence d'images de 60 Hz (ou autre), et vous sacrifiez la qualité ou les fonctionnalités si nécessaire pour y parvenir. En revanche, avec le film, la contrainte incassable rend le réalisateur et le superviseur d'effets visuels satisfaits de la qualité et de l'apparence qu'il souhaite, et du temps qu'il vous faut pour l'obtenir est (dans une certaine mesure) secondaire.

De plus, avec un jeu, vous restituez image après image après image, en direct devant chaque utilisateur. Mais avec le film, vous effectuez effectivement le rendu UNE FOIS, et ce qui est livré au cinéma est un fichier de film - donc les cinéphiles ne sauront jamais ou se soucieront si cela vous a pris 10 heures par image, mais ils remarqueront si cela ne semble pas bon. Encore une fois, il y a moins de pénalité imposée à ces rendus qui prennent beaucoup de temps, tant qu'ils ont l'air fabuleux.

Avec un jeu, vous ne savez pas vraiment quelles images vous allez rendre, car le joueur peut se promener partout dans le monde, voir de presque n'importe où. Vous ne pouvez pas et ne devriez pas essayer de tout rendre parfait, vous voulez juste que ce soit assez bon tout le temps. Mais pour un film, les plans sont tous faits à la main! Une énorme quantité de temps humain est consacrée à la composition, à l'animation, à l'éclairage et à la composition de chaque plan, puis vous n'avez besoin de le rendre qu'une seule fois. Pensez à l'économie - une fois que 10 jours de calendrier (et de salaire) ont été consacrés à l'éclairage et à la composition de la photo juste, l'avantage de la rendre en une heure (ou même une minute) par rapport à la nuit, est assez petit et ne vaut pas la peine tout sacrifice de qualité ou de complexité réalisable de l'image.

85
Larry Gritz