web-dev-qa-db-ja.com

レイトレーシングにGPUではなくCPUを使用するのはなぜですか?

ラスター化とレイトレーシングに関する調査を行った後。 CPUがレイトレーシングでどのように機能するかについての情報は、インターネットであまり入手できないことを発見しました。私は、Pixarと、それらがCPU上でCars 2をどのように事前レンダリングしたかについての記事に出会いました。これには、フレームあたり11.5時間かかりました。 GPUは同じ画質でこれをより速くレンダリングしなかったでしょうか? 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-presents-transformers-2-facts-and-figures/ 乾杯、サム

34
oodle600

私は、独自のレンダラーを備えた大規模なVFXおよびアニメーション機能スタジオのレンダリングソフトウェアアーキテクトの1人です(ピクサーではありませんが、昔はレンダリングソフトウェアアーキテクトでもありました)。

フィルムのほとんどすべての高品質レンダリング(すべての主要なレンダラーを含むすべての大きなスタジオで)はCPUのみです。これには多くの理由があります。順不同で、いくつかの本当に魅力的なものが問題の風味をあなたに与えます:

  • GPUは、すべてがメモリ内にある場合にのみ高速になります。最大のGPUカードには、12GB程度の容量があり、すべてを保持する必要があります。さて、30GBのジオメトリと1TB以上のテクスチャを参照するシーンを定期的にレンダリングします。 GPUメモリにロードできません。文字通り2桁も大きすぎます。そのため、GPUは私たちの最大の(または平均的な)シーンにも対応できません。 (CPUレンダラーを使用すると、必要なときにいつでもディスクからデータをページングできます。GPUはそれが得意ではありません。)

  • 誇大広告を信じないでください、GPUでのレイトレーシングはCPUに対する明らかな勝利ではありません。 GPUは、一貫性の高い作業に優れています(一度に多くのデータに対して同じことを行います)。レイトレーシングは非常に一貫性がありません(各レイは異なる方向に進み、異なるオブジェクトと交差し、異なるマテリアルにシェーディングし、異なるテクスチャにアクセスします)。このため、このアクセスパターンはGPUパフォーマンスを著しく低下させます。 GPUレイトレーシングがCPUベースの最適なレイトレーシングコードに一致するのはごく最近のことであり、それを超えたとしても、すべての古いコードを捨てて、GPUのバグのある脆弱なコードを新たに開始するには不十分です。そして、最も大きく、最も高価なシーンは、GPUがわずかに高速なシーンです。簡単なシーンでずっと速くなることは、私たちにとって本当に重要ではありません。

  • CPUベースのレンダラーに実稼働で強化されたコードが50または100人年ある場合は、2倍のスピードアップを実現するために捨てずに最初からやり直してください。ソフトウェアエンジニアリングの努力、安定性などは、より重要であり、より大きなコスト要因です。

  • 同様に、スタジオが20,000個のCPUコアを保持するデータセンターに投資している場合、すべてが可能な限り最小で最も電力効率が高く、熱効率の高いフォームファクターであり、これは無駄にしないだけでなく、無駄な投資でもあります。最上位のGPUを含む新しいマシンと交換すると、レンダーファームのコストが大幅に増加し、レンダリングファームが大きくなり、より多くの熱が発生するため、文字通り建物に収まらない場合があります。

  • アムダールの法則:実際の「レンダリング」自体は、シーンを生成する1つの段階にすぎず、GPUはそれを助けません。シーンを完全に生成してレンダラーにエクスポートするのに1時間、「レンダリング」するのに9時間かかり、その9時間のうち、ディスクからテクスチャ、ボリューム、その他のデータを読み取るのに1時間かかるとします。そのため、ユーザーがレンダリングを体験する合計10時間(最終イメージの準備が整うまでボタンを押す)のうち、GPUで8時間かかる可能性があります。そのため、GPUがその部分のCPUの10倍高速だったとしても、10時間から1 + 1 + 0.8 = 3時間近くになります。したがって、GPUの10倍の高速化は、実際のゲインの3倍にしか変換されません。 GPUがレイトレーシングに関してCPUの1,000,000倍高速である場合、1 + 1 + tinyがまだあり、これは5倍の高速化です。

しかし、ゲームの違いは何ですか? GPUがゲームには適しているが映画には適しないのはなぜですか?

まず、ゲームを作成するとき、リアルタイムでレンダリングする必要があることを忘れないでください。つまり、最も重要な制約は60Hz(または何であれ)フレームレートであり、それを達成するために必要な品質または機能を犠牲にすることを意味します。対照的に、映画の場合、壊れない制約は、監督とVFXスーパーバイザーが品質と満足していることを満足させ、それを得るのにかかる時間は(ある程度)二次的です。

また、ゲームでは、フレームごとにフレームをレンダリングし、すべてのユーザーの前でライブを行います。しかし、フィルムを使用すると、効果的にONCEをレンダリングし、映画館に配信されるのは映画ファイルです。したがって、映画ファンは1フレームあたり10時間かかったかどうかを知ることも気にすることもありませんが、見栄えが悪い場合は気づきます。繰り返しになりますが、見栄えが良い限り、レンダリングに時間がかかるペナルティはほとんどありません。

ゲームでは、プレーヤーが世界中をさまよい、ほぼどこからでも眺めることができるため、どのフレームをレンダリングするのか本当にわかりません。すべてを完璧にしようとすることはできませんし、すべきではありません。常に十分に良いものにしたいだけです。しかし、映画の場合、ショットはすべて手作りです!膨大な時間をかけて、すべてのショットを作成、アニメーション化、照明、および合成します。その後、一度だけレンダリングするだけで済みます。経済性について考えてみてください-カレンダー(および給与)の10日間が照明になり、ショットを適切に合成したら、1時間(または1分)で一晩でレンダリングする利点は非常に小さく、価値がありません画像の品質または達成可能な複雑さの犠牲。

85
Larry Gritz