|
オリジナル:Eternity Datawhale Datawhaleのヒント 著者:エタニティDatawhaleメンバー 多くのゲーマーは、ゲームをプレイしているときに次のような問題に遭遇します: コンピューターの構成は十分に高いのに、なぜこんなに長く待たなければならないのでしょうか? この問題が発生した場合、慌ててトラブルシューティングをする必要はありません。まず、ゲームインターフェースに「シェーダーをコンパイルしています」というメッセージが表示されているかどうかを確認してください。これがゲームの待機時間の原因の一つである可能性があります。 PC で Black Myth: Wukong を起動すると、進行状況バーに「シェーダーのコンパイルが進行中です...」と表示されます。 「シェーダーコンパイル」は具体的に何をするのでしょうか? この質問に答えるには、まずシェーダーとは何かを説明する必要があります。次に、シェーダーがインストール パッケージに事前にパッケージ化されているのではなく、起動時にコンパイルされる必要がある理由を説明する必要があります。 データ節約版:シェーダーはゲームプレイ時に表示されるグラフィックを決定し、システムやグラフィックカードと密接に関連しています。そのため、シェーダーは通常、起動時(プログラムがデバイスのオペレーティングシステムとグラフィックカードを既に認識している時)にコンパイルされ、基盤となるハードウェアが認識できる形式に変換されます。 ここに画像を挿入したいと思います: Who said my shader is faulty.jpg (当初は絵文字を使いたかったのですが): シェーダーとは何ですか? 話を進める前に、GPUとCPUについてお話ししましょう。CPUは演算コアの数が少ないですが、各コアで多くの処理を実行できます。一方、GPUは各コアで実行できる処理は少ないものの、コアの数が多いという特徴があります。例えば、画像の各ピクセルを変更する必要がある場合、CPUでは通常、forループを使用して各ピクセルを個別に計算する必要があります。しかし、GPUでは、各ピクセルにコアを割り当て、同時に計算を実行できます(ピクセル数がコア数より少ない場合)。画像処理やグラフィックス関連のタスクでは、特に各ピクセルに大量の計算が必要な場合に、GPUにはいくつかの利点があります。 人々はもはや固定された描画機能に満足せず、描画プロセスを自ら制御したいと考えるようになり、プログラマブルなレンダリングパイプラインの開発へとつながりました。この時点で、ハードウェアに描画方法を指示する必要があり、これをシェーダーと呼びます。レンダリングでは、頂点シェーダーとフラグメントシェーダーが一般的に用いられますが、他にもシェーダーは存在しますが、ここではこれ以上説明しません。 「偽の」レンダリング プロセス (シェーダー -> ハードウェア -> レンダリング結果) 上記は、シェーダーコードからハードウェア、そして最終的にプレイヤーが目にするビジュアルに至るまでのプロセスを示しています(もちろん、実際にはそこまで単純ではありません)。シェーダーを使用することで、開発者は様々なコードを記述し、水の流れや髪の毛の流れなど、様々な「派手な」エフェクトを実現できます。 事前にインストール パッケージにパッケージ化されるのではなく、起動時にコンパイルする必要があるのはなぜですか? さて、2 番目の質問に答えてみましょう。誰もが知っているように (知らなくても遅くはありません)、私たちが書くコードのほとんどはマシンが直接使用できるものではなく (高級言語は人間が理解するためのものです)、マシンが理解できる言語、つまりバイナリ ファイルに変換する必要があります。 市場には、様々なハードウェアメーカーが製造する様々なグラフィックカードが存在します。まず、ゲーム開発者とハードウェアメーカーは、いくつかの標準/仕様(OpenGL、Vulkan、DXなど)について合意します。ハードウェアメーカーはこれらの仕様に基づいて対応するハードウェア機能を実装し、ゲーム開発者はこれらの仕様に従ってコードを作成します。コンパイルプロセスは、このコードをグラフィックカードが理解できるバイナリファイルに変換するプロセスです。例えば、OpenGLでは、次のコードを使用してコンパイルおよびリンクできます。 コンパイルされた出力は、グラフィックカードやプラットフォーム/オペレーティングシステムによって異なることがよくあります。さらに、シェーダーには通常、異なる動作に対応する複数のバリアントが存在します。例えば、一部の高性能グラフィックカードでは、パフォーマンスを重視する機能が有効になっているのに対し、比較的ローエンドのハードウェアでは、一部の機能がダウングレードされることがよくあります(これが、ゲームグラフィックの品質がマシンごとに異なる理由です)。 Metal、Vulkan、DX12などの最新のグラフィックインターフェースでは、コンパイル時に中間形式(Metal IR、SPIR-Vなど)の結果を生成することができます。一部のエンジンでは、これらの中間形式の結果をインストールパッケージに含めるように選択していますが、それでも初回ロード時に最終製品をコンパイルせざるを得ません。 以下は Raymond Fei 氏の回答に対する補足です。 さらに、異なるメーカーのGPU同士が一貫性を欠いているというだけでなく、同じメーカーの異なる世代のGPU同士でさえ一貫性を欠いています。同じGPUでも異なるドライバーを使用すると結果が異なる場合があり、下位互換性は保証されていません。つまり、古いGPU/ドライバーでコンパイルされたマシンコードは、新しいGPUでは存在しない可能性があります。そのため、ユーザーのマシンでコンパイルするしか選択肢がありません。これは極端な最適化の代償です。異なるメーカー間で命令セットを統一できないという問題に加え、シェーダーで実行されるプログラムはリアルタイム性が非常に高く、ユーザーは(CPUで実行されるプログラムと比較して)パフォーマンスに非常に敏感であるため、このような対応をせざるを得ないのです。 上記は、ゲーム起動時にシェーダーをコンパイルするプロセスを説明したものです。シェーダーは通常、ゲームが最初にロードされるときにコンパイルされます。一部の仕様では、コンパイルされた出力をキャッシュすることが可能で、これによりゲームの起動が高速化されます。 シェーダーのコンパイルについても、私の理解はまだまだ浅いです。コンパイルの根底にある詳細や、プラットフォーム間でのコンパイル方法について、引き続き学習していきます。もし間違いがあれば、遠慮なくご指摘・ご指摘ください。 コンピュータグラフィックスに興味がある方は、次のサイトをご覧ください。
|
『Black Myth: Wukong』はなぜハイスペックパソコンでもプレイに時間がかかるのでしょうか?
関連するおすすめ記事
-
わずか500万のデータでOpenAIを超える?Kuaishouが最新のコード埋め込みモデル「OASIS」をリリース。
-
初めて、グループ学習で願い事を一緒に考えてみましょう!来月は何を学びたいですか?ぜひ教えてください!
-
日産の倒産危機:キャッシュフローはわずか14ヶ月しか持たない!人員削減と生産削減だけでは到底足りない。
-
評価額110億元のNIO傘下のLiDAR企業がIPOを急いでいる。同社の創業者は百度の自動運転部門出身者である。
-
初めて!GPT-2 は無線通信の物理層を可能にします。北京大学のチームは、事前トレーニング済みの LLM に基づくチャネル予測方式を提案しています。
-
オープンソースの大型モデルLlamaは技術的な優位性を失うのでしょうか?