オーバーウォッチゲームのヒーローがかつてはげかかった方法

画像

Parallels Desktop 12 for Macの機能の1つは、PCゲームのサポートです。 WindowsおよびXboxでのみ使用可能なゲームは数多くあり、Parallels Desktopを使用すると、仮想マシン内で再起動せずにMacでこれらのゲームをプレイできます。 Mac上のPCゲームの問題は完全に解決されたと仮定できますか? まだではありませんが、現在取り組んでいます。 この記事では、これを行う方法の例をいくつか説明します。



DirectXを完全にサポートすることが難しい理由



実際、MacでWindowsを実行できるPC仮想マシンは、それ自体でPCゲームが動作することを保証しません。 実際、ほとんどのゲームでは、ビデオアダプターの側から特定のバージョンのDirectXサポートが必要であり、このサポートの提供はビデオドライバーの開発者に完全に委ねられています。 当然、「実際の」Nvidia、AMD、およびIntelビデオカード用に設計されたビデオドライバーは、仮想マシンでは機能しません。



現時点では、DirectXの最新バージョンはDirectX 12ですが、まだ普及していません。 もう1つは、DirectX 11のバージョンで、ゲーム開発者の間ですでに非常に人気があります。 確かに、DirectX 10以降では、実際に積極的に使用されています。たとえば、DirectX 10のみをサポートし、機能が制限されているDirectX 11向けのほとんどの新しいゲームは、顕著な視覚的な違いのないDirectX 10。







Parallels Desktop for Macの最初のバージョン以来、DirectXサポートを提供してきました。 WindowsとDirectXの進化に伴い、Parallels Desktopも進化しました。 DirectX 7、DirectX 8、DirectX 9をサポートし、数年前からサポートしていました。また、上記の観点から特に重要なDirectX 10をサポートしました。 ただし、DirectX 10の機能のうち、ビデオドライバーの操作に関係する部分(コマンドの解釈とイメージの作成に必要な規則)は、ドキュメントでかなり簡潔に説明されています。 さまざまな組み合わせ、状態、呼び出しの数は非常に多く、仕様を読んで明確なプログラムコードを作成するだけで、残念ながらすべてのPCゲームを実行および動作させることができます。



さらに、OpenGLを介してDirectX 10のサポートを提供していることに注意する必要があります。 DirectXコマンドをOpenGLコマンドに変換します。 ただし、OpenGLとDirectXの同じデザインはわずかに異なる方法で機能し、異なる条件で異なる絵を描くことができます。 何が残っていますか? 試行錯誤によって機能します。つまり、 DirectX 10機能を使用してバグに取り組む最新のゲームを起動します。



オーバーウォッチとの戦い



私たちは、すべての主要なゲームプラットフォーム向けにBlizzard EntertainmentがリリースしたマルチプレイヤーシューティングゲームOverwatchの例を使用して、DirectX 10のサポートをテストすることにしました。 PC、PS4、およびXbox One向け-ただしMac向けではありません。 OverwatchはDirectX 10を非常に集中的に利用しているため、DX10ドライバーの優れた強度テストであることがわかりました。 そしてゲームはうまくいきましたが、多くの問題がありました。 多くのものが間違って、ゆっくりと描かれました。 ゲームの最初の様子は次のとおりです。







以下では、直面しなければならない3つの問題のみを説明します。



コントロールとメニュー項目



最初に目を引いたのは、NVidiaとIntelのビデオカードでは、Overwatchゲームがメニュー項目、インジケーター、アイコンの一部を描画しなかったことです。 この問題はすぐに見つかりました-頂点シェーダーのVertexID組み込み変数の値の解釈の不一致に関連していることが判明しました。 DirectXでのインデックスレンダリングの場合、この変数は「頂点インデックス」値に等しく、OpenGLを介した作業の場合、値BaseVertexが引き続き追加されます。 メニューやその他の「フラットな」ゲーム要素を表示するために使用されるテクスチャ生成シェーダーは、コードで定義済みの値に対してVertexIDを使用します。 NVidiaおよびIntelのドライバーはOpenGL仕様に従って動作するため、間違った画像を提供します。 対照的に、AMDのドライバーはBaseVertexをVertexIDに追加しません。その結果、エラーにエラーが重畳され、正しい結果が得られます。



GL_ARB_shader_draw_parameters拡張機能を使用して状況を簡単に修正できますが、残念ながら、Macはそれをサポートしていません-少なくとも今のところは。 別の解決策が見つかりました-NVidiaおよびIntelビデオカードを使用する場合、BaseVertex値をシェーダー内に渡し、gl_VertexIdから減算します。 結果は、DirectX 10番号の観点から正しい変数値です。 もちろん、AMDのビデオカードでは、これは起こりません。



影の問題



実際、オブジェクトの影はオーバーウォッチで正しく描画されていました。 しかし、照らされたすべてのエリアで、ストリップが目立ちました。







シェーダーを詳細に扱った後、その理由はOpenGLの状態を設定することにありました。 Direct3D 10ランタイムコンポーネントのRasterizerState関数には、ポリゴンの深さの調整を指定する3つの値、DepthBias、DepthBiasClamp、およびSlopeScaledDepthBiasがあります。 OpenGLの対応するものは、正しいパラメーターを使用してglPolygonOffsetを呼び出すことに要約されますが、この場合、DepthBiasの値がゼロの場合、SlopeScaledDepthBiasがゼロではないことを想定していませんでした。



髪が抜ける理由



Parallels Desktopの Overwatchゲームのすべてのキャラクターが髪を完全に失ったか、「ハリネズミの下で」髪を切ったという事実は、ソーシャルネットワークで強い反応を引き起こし、 多くのジョークを生み出しました。







ただし、bげたヒーローに「引き戻す」ことは、性格の良いユーザーがゲームにキャラクターの毛だけでなく、他のオブジェクトも欠けていることに気付かなかったことは注目に値します。 テストでは、このエキゾチックなエラーの原因は、フリーテクスチャチャネルの不足であることが示されています。 OpenGLでは、シェーダーのタイプごとに16を超えることはできません。 この制限は、AMDビデオカードで16以上のテクスチャチャネルを使用すると、ドライバーのOpenGL状態が損傷し、その後のレンダリングで問題が発生するためです。 その結果、レンダリングに関係する他のすべてのテクスチャの代わりに、シェーダーは黒い色を受け取り、場合によっては、シーンから描画オブジェクトが完全に消えることになりました。 もちろん、問題自体を取り除くことはできなかったと言わなければなりませんが、Overwatchではこの制限を取り除くことによる悪影響は最小限であったため、この場合は取り除くことを決めました。 一般的な場合、DirectX 10と比較してOpenGLのテクスチャチャンネルが不足するという問題は深刻であることに注意してください。 後者では、理論的には1つのレンダリングで最大128個のリソースを使用でき、この機能を使用するアプリケーションが非常に少ないことのみが保存されます。



結果



すべての作業に1か月もかからず、説明したエラーと他の多くのエラーの両方を修正した後、ユーザーがParallels Desktop for MacでOverwatchを実際にプレイできるようにしました。 もちろん、この速度はPCのオーバーウォッチの速度に匹敵するものではなく、深刻な負荷がかかるとゲームの速度が低下します。 しかし、「PCに追いつき追い越す」という目標は私たちによって設定されたものではありません。 Overwatchの例を使用して、仮想ドライバーの動作に問題を発見し、修正することができました。 得られた結果は、他の3Dアプリケーションの作業をサポートするのに役立ちます。 そしてもちろん、Macユーザーからの好意的なフィードバックに匹敵するものはありません。なぜなら、私たちのおかげで、彼らはこのプラットフォームで昔のお気に入りのゲームをプレイできるからです。







DirectX 11サポートはいつ表示されますか?



実際、Mac上のOpenGLはゆっくりと開発されており、常に最新の最新バージョンよりも著しく遅れています。 DirectX 10をサポートしている場合でも、Macの既存のOpenGL機能が欠けていることが多く、さまざまなトリックに頼って、欠けている機能を自分でエミュレートする必要がありました。 MacはOpenGL 4.1をサポートするようになりました。DirectX10にはこれで十分ですが、11番目のバージョンには、計算シェーダーなどの主要な機能がいくつかあります。 そのため、AppleがそのマシンでOpenGLをさらに開発するかどうかに大きく依存します。



All Articles