DXMT について
DXMT とは?
Section titled “DXMT とは?”DXMT は、DirectX 11 のグラフィック呼び出しを Apple Metal API へ変換するグラフィック変換レイヤーです。 macOS は DirectX を直接サポートしていないため、Windows ゲームを実行するには、グラフィック命令を macOS が処理できる形へ変換する必要があります。 バブトンイリホヨでは、Eternal Return と HoYoverse ゲームの DirectX 11 実行経路を扱うため、DXMT を中心に構成しています。
DXMT を使用する理由
Section titled “DXMT を使用する理由”DXMT を使用する理由は大きく 2 つあります。
1. 呼び出しコストが低い
Section titled “1. 呼び出しコストが低い”DXVK のように DirectX 呼び出しを Vulkan へ変換する方式もあります。 しかし macOS は Vulkan をネイティブのグラフィック API として提供していないため、Vulkan 呼び出しをさらに Metal へ変換する追加レイヤーが必要になる場合があります。 この構造は、呼び出しコストや性能面で不利になることがあります。 一方で DXMT は、DirectX 11 命令を Metal へより直接的に接続することを目指しています。 このプロジェクトが DXMT を中心に構成されている理由もこの点にあります。
2. オープンソースであり変更できる
Section titled “2. オープンソースであり変更できる”DXMT はオープンソースであるため、プロジェクトの要件に合わせてコードを変更できます。 現在一部の環境で発生する緑色のフラッシュやエフェクトの崩れは、Apple のグラフィックドライバーへ渡される特定の値が原因になる場合があります。 これを緩和するには、グラフィックドライバーへ値が渡される前に、問題になり得る値を安全な範囲へ調整する必要があります。 カスタム DXMT では、DXMT のコード内で問題になる可能性のある値を安全な値へフィルタリングするように変更できます。
DXVK もオープンソースなので変更自体は可能ですが、前述の Vulkan 経由の構造があるため、このプロジェクトの優先選択肢からは外れます。 GPTK はソースが公開されていないため、同じ方法で変更することは困難です。
DirectX 11 -> Metalランチャーでの役割
Section titled “ランチャーでの役割”ランチャーで Bottle を作成するとき、DXMT バージョンも一緒に選択します。 選択した DXMT は、その Bottle 内で実行されるゲームのグラフィック変換経路として使用されます。 ゲームによって必要な DXMT バージョンやオプションが異なる場合があるため、問題が発生した場合は Wine バージョンだけでなく、DXMT バージョンと実行オプションも一緒に確認するとよいです。 現在は 1 つの DXMT ビルドのみ提供しているため、ユーザーが DXMT バージョンを別途選ぶ必要はありません。
DXMT があるからといって、すべての DirectX ゲームが自動的に実行できるわけではありません。 ゲームが使用する DirectX 機能、シェーダー、アンチチート、ランチャー構造によって実行可否が変わる場合があります。
バブトンイリホヨは Eternal Return と HoYoverse ゲームの実行を優先目標としています。 他のゲームで DXMT が動作したとしても、そのゲームまで公式にサポートするという意味ではありません。