通常、ゲームの1つのフレームでアクティブなシェーダーをいくつ使用する必要がありますか?100のような5つ以上?


20

現代のゲームでは、1つのシーンで同時にいくつのシェーダーが通常アクティブになっていますか?複数のシェーダーが使用されており、各フレームでゲームが切り替えられることを知っています。シェーダーを介してオブジェクトを描画することは一般的です。

  1. すべてのオブジェクトをシェーダー1で描画します
  2. シェーダー1からシェーダー2に変更する
  3. シェーダー2ですべてのオブジェクトを描く

それでも、特にシーン全体のグローエフェクト、テクスチャへのレンダリングなどのエフェクトの場合、それほど単純ではないことはわかっていますが、ほとんどの場合、そのように動作すると想定できますか?シェーダーの切り替えは高価な操作であるため、「シェーダーごとのグループ化」アプローチが適しています。

片側からは、シーンを高速でレンダリングするため、シェーダーを多くしすぎることはできません。一方、スキン、金属、水などには、多くの異なるシェーダー(または枝を持つ超シェーダー-非常に似ています)が必要です。

理論的、現代的、三人称のPC用3D探偵ゲーム(重要な場合はDirectX 11)は、いくつの(そしてどの)シェーダーを使用しますか?いくつかの「フレームX」で、アクティブのみをカウントする100個のアクティブシェーダーのように、5、20、またはそれ以上ですか?私はそれが1つの数字ではないことを知っていますが、PCゲームを考慮して、どのような規模と要因が重要なのかと思います。


私のサンプルゲームでは、フレームごとに約9〜11を使用します(別の小さなシェーダーまたは1つの超シェーダーとしてカウントします-今は関係ありません)。

  1. スキンシェーダー
  2. アイシェーダー(多すぎない?
  3. メタルシェーダー
  4. グラウンドシェーダー
  5. 雪/雨シェーダー(必要な場合)
  6. ウォーターシェーダー(シーンに水が存在する場合)
  7. グローシェーダー(一部の特殊効果が含まれる場合のみ)
  8. 発光シェーダー(街灯など)
  9. 標準シェーダー(他のすべての場合は標準シェーディングのみ)
  10. 法線マップ付きの標準シェーダー
  11. 2Dシェーダー(GUIなど)

それは「たくさん」ですか「あまり多くない」ですか?必要ないくつかの重要なシェーダーを忘れましたか?

回答:


28

それは本当にテクニックに依存します。フォワードレンダリングでは、さまざまなマテリアルタイプごとに1つのシェーダーを使用することがよくあります。この手法を使用するAAAゲームでは、シェーダーは多くの場合、アーティストが設定できる素材のオプションセットから生成されます。これにより、数百のシェーダーが発生する可能性があります(1)。しかし、一般的にシェーダーの数は40のオーダーであると言うことができます

遅延シェーディング/レンダリングでは、多くの場合、Gバッファーでマテリアルタイプをエンコードし、後で1つの大きなシェーダーを使用して、さまざまなマテリアルタイプを異なる方法で正しくレンダリングします。これにより、シェーダーがはるかに少なくなりますが、より複雑になります。ここで、シェーダーの数は5のオーダーだとしましょう。

(1)出典:Crystal Dynamicsの請負業者で働き、自動生成が手に負えなくなったため、Tomb Raiderで生成されるシェーダーの数を減らすツールを構築しました;)。目標は、シェーダーの数を40個程度に減らすことでした。


2
あなたの答えをありがとう-それは非常に複雑で豊かだった。ただ投票しました。それでも、採点が行われる前に数日待つことにします。なぜなら、それは非常に「未解決の」質問だからです。もう一度、ロイに感謝します:)
PolGraphic

s / less / fewer /
エラー

3

私はあなたがPCの答えを望んでいたことを知っています。しかし、私はiOSで何をするかについて答えますが、あなたのチェックマークを取得するつもりはありません。

あなたは正しい考えを持っているようです。ただし、アプリごとに異なります。最終的には、目的のフレームレートを得るために必要なことをすべて実行することが重要です。iPhoneでの目標レートは60です。30を下回らないようにしています。数百のアニメーションスプライトベースのパーティクルで爆発すると、iphone5では30になり、4でははるかに低くなります。特定のデバイスの複雑さを軽減することについて決定する必要があります。そして、その決定がシェーダーに影響する場合があります。

ただし、一般的には、シェーダーの数には影響しませんが、フレームレートの目標に基づいてタスクに使用するシェーダーは変わりません。

私の意見では、シェーダーを正しく使用すると、フレームレートが上がります。80個のシェーダーを持つアプリがありますが、1つのフレームですべてのシェーダーを使用するわけではありません-おそらく10前後です。必要に応じてコンパイルし、シーン間ですべてを破棄します。そして、私のハードウェアでは、シェーダーカウントがフレームレートに影響するのを見ていません。シェーダーで使用されるテクニックのみ。しかし、確かに、2つの同様のシェーダーを使用すると、分岐するより複雑なシェーダーを使用するよりもフレームレートの方が優れていると思います。

また、レンダリングが遅い場合や遅いデバイスの場合、品質を低下させるシェーダーもあります。iPhone 5では通常のマッピングを使用しますが、iPhone 4では通常のマッピングを行わないシェーダーに交換します。

私はロイの答えが好きで、「本物の」ゲームがどのように作られるかについての洞察を常に得ようとしています。私は独学しているので、今日の私の素晴らしい発見が、それが一般的に行われている方法だけなのか、それとも本物の専門家の背後にあるいくつかのステップであるのかわからない。


1
あなたの答えが「iOS用」であるという事実には問題ありません。私は主に「プラットフォームに依存する」短い応答を避けたいので、PCについて言いました;)おそらくあなたの答えは私にとって100%ではありません。しかし、それでも、プラットフォームに依存しない結論がいくつかあるので、私はそれが良いことがわかりました。そして、コミュニティの他のメンバー(iOSを使用している)がさらに便利な場合があるので、私からの感謝と投票:)
PolGraphic

1

ゲームの制限要因やターゲットプラットフォームに依存しているため、必要なシェーダーの数や必要がないシェーダーの数を実際に決めることはできません。実際には、アクティブなシェーダーの数を「実際に必要な数だけ」に減らす必要があります。これは、一度に数個のシェーダー(10個程度)しか持っていないことを意味することもあれば、数十個あることを意味することもあります。

ゲームでポップアップする順列の量を制限する1つの方法は、「すべてのシェーダーが単一のシェーダーから派生し、相違点と特別な動作がプリプロセッサを介して交換される「ubershader」技術を実装することです。もちろん、被写界深度、アンビエントオクルージョンなどの特殊効果には例外があります。

ここまでのAAAゲームの経験から、数十個のアクティブなシェーダーが不合理ではないことがわかりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.