web-dev-qa-db-ja.com

Windowsの低解像度平滑化アルゴリズムを変更する

私はWindows8.1を使用していて、いくつかの古いゲームを実行しています(それらは完全に互換性があります)。それらの多くは800x600または640x480の解像度を使用していますが、私は1920x1080のディスプレイを持っています。スケーリング中、Windowsはある種の平滑化(最近傍アルゴリズムだと思います)を提供しますが、それはかなり貧弱です。たとえば2xSAIなどの高度な方法を使用したいと思います。 DOS-boxで何かを実行する場合、スケーリングアルゴリズムを簡単に選択でき、Windowsではこのようなものが必要です。 AMDビデオカード(r9 380)を持っているので、スムージング方法など、ドライバーにいくつかのグラフィックスの機能強化があります。ただし、古いゲームには影響しません(OpenGLやDirectXを使用していないためだと思います)。それで、低解像度の平滑化方法を選択する方法はありますか?

UPD。 AMDドライバーで「GPUScaling」フラグが見つかりました。これにより、古い2Dゲームにもアンチエイリアシングを使用できます。それにもかかわらず、ここでは補間アルゴリズムの選択肢はありません。

ゲームリスト:Dispel(1999)、Horde 2:Citadel(2001)、StarCraft:Brood War(1998)、Rage of Mages 2:Necromancer(1999)、Primitive wars(2002)、Warlords 3:Darklords Rising(1998)。

3
JustLogin

2017+アップデート

回答が投稿されてから、BlizzardはStarcraftのレンダリングを完全に書き直したため、説明されているメソッドはそのゲームでは機能しなくなりました。これでアップスケーラーが組み込まれ、新しい「リマスター」HDテクスチャパックがブリザードの公式ストアで購入できるようになります。

オリジナルのDiabloなどの同様のエンジンを使用する古いゲームを処理したり、v1.16.1でのみ機能する古いカスタムマップを再生したりするのに役立つ可能性があるため、以下のテキストをそのままにしておくことにしました。

説明

デフォルトでは、モニター自体がスケーリングを行います。モニターが異なれば、スケーラーも大きく異なります。かなり優れているものもあれば、見るのが難しいものもありますが、2xsaiやadvmameはありません。一般に、VGA入力を備えたテレビは主流のモニターよりも少し優れたスケーリングを行います。

一部の人々は中古のCRTモニターを購入することさえします:それらは固定された物理的なピクセルを持っていないので一般により良い画像を提示します-それらの解像度はアナログであり、近くのピクセルを「滑らかにし」、古いゲームは一般にこの種の「スケーリング」を期待します発生する。

_GPU scaling_(使用可能な場合)を有効にすると、ハードウェアに実装されているスケーラーを使用する代わりに、ビデオカードがスケーリングを実行します。構成はできませんが、フィルタリングが含まれている可能性があるため、モニターよりも優れた機能を発揮します。

そのためには、少なくともゲームからの明示的な解像度変更コマンドをインターセプトする必要があるため、問題の解決策はある種のハッキングであり、これは非常に複雑なタスクであり、ハッキングによってビデオやゲームプレイの問題が発生する可能性があります。

言い換えれば、ゲーム出力とGPU入力の間でスケーラーをハックする必要があります。

一部の古いゲームには、スケーラーをサポートする可能性のある最新のファン製バージョンまたはラッパーがありますが、これらは主にエミュレーター(MAME、PCSX、DOSBOX、SCUMMVMなど)に限定されています。これは、OS /ビデオカードとゲームの間をハッキングする必要がないためです。いずれにせよ、ビデオシステム全体をエミュレートするため、結果の画像にフィルターを適用する方が簡単です。

一部のゲームでは、ゲームの世界の大部分を(スケーリングなしで)画面に表示するためにハックが開発されました。これはあなたが求めているものではありませんが、少なくともゲームはスケーリングされたときほど醜く見えません。

ゲームはグラフィックを異なる方法で出力します-WindowsAPI([〜#〜] gdi [〜#〜])を使用するものもあれば、ビデオカードハードウェアに依存してレンダリングするものもあります3D画像(Direct 3DOpenGL)、その他(主に2D/pseudo-3D)DirectDrawを使用して、2D画像をビデオカードに直接出力します。それぞれを操作するためのさまざまなツールやモードがある可能性があるため、ゲームで使用されているものを知っておくと便利な場合があります。

私が見つけたものから:

  • _Primitive wars_はDirectX/OpenGLで動作するようです
  • Starcraft (before 1.18)、_Horde 2_および_Warlords 3_はおそらくDirectDrawを使用します
  • Dispelと_Rage of Mages 2_に関する情報は見つかりませんでしたが、それらの外観から、DirectDrawも推測できます。

残念ながら、私が知る限り、リストされているゲームのいずれにおいても、高度なスケーラーをサポートするハックはありません。 Starcraft(1.16以下)には、以下にリストされているいくつかのエクスパンダーがあります。

DDHack

ただし、DDHack aka _DirectDraw Hack_というプログラムを試してみることをお勧めします。 DirectDrawゲームに少なくともある種のスケーラーを提供します。 2xSAIほど良くはありませんが、何もないよりはましです。一部のゲームでのみ機能し、機能してもバグがある可能性がありますが、おそらく試してみる価値があります。

それはこのように動作します:

  • ダウンロードして解凍します。あなたが試してみたいかもしれないいくつかのバージョンがあります: OneTwoThree
  • ゲームフォルダ内の_ddraw.dll_ファイルをダウンロードに含まれているファイルに置き換えます。そのようなファイルが見つからない場合は、ゲームで機能しない可能性があります。必ず元のファイルをバックアップしてください!
  • メモ帳のようなプレーンテキストエディタで_ddhack.cfg_ファイルを編集します。スペースで区切られたオプションのリストがあります。おそらくhalfnhalfおよびbilinearオプションに興味があるでしょう-それらの1つをファイルに入力して保存してください。ゲームの開始時に黒い画面しか表示されない場合は、altwinposオプションも含めてみてください。
  • ゲームを実行します。それが機能する場合は、少なくとも少し良く見えるはずです。

DxWnd

一部のタイプのゲーム(DirectDrawおよびDirect3D)で動作する可能性のある別のプログラムがありますが、バイリニアスケーラーしかありません。どれよりもさらに良いと思います。

  • ダウンロード ここ 、解凍して実行
  • _Menu -> Edit -> Add_に移動して、新しいゲームプロファイルを作成します
  • 実行したいゲームにpathを入力します
  • フルスクリーンモードでゲームを実行する場合は、_Run in window_のチェックを外します
  • _Video -> Resolution_に移動し、モニターのネイティブ解像度に設定します
  • _DirectX -> Filtering_の下で_Full Bilinear_を選択します
  • Okをクリックし、新しく作成したプロファイルを選択し、_Menu -> File -> Run_を選択してゲームを開始します
  • ゲームが機能しない場合は、_Menu -> Edit -> Modify_を選択し、他のパラメーターを調整してみてください。
  • DxWndのドキュメントは ここ

理論的には、DxWndに2xsaiのようなスケーラーを実装するのはそれほど難しくないと思います。ソースコードは公開されていますが、それでも誰かが行う必要のある作業がいくつかあります...

Starcraft(v1.16以下)のハッキング

_Please read the message on top of this post.
_

このゲームでは、いくつかの解像度エクスパンダー(つまり、マップの詳細を表示しますが、元の解像度で)を使用できます。

それらには基本的な指示が含まれている必要があります。ほとんどの場合、StarCraftを最新のリマスターされていないバージョン(1.16.1)に更新する必要があります。

完全に非常識な応急修理

これは純粋な狂気ですが、理論的には次のことができます。

  • ビデオカードに存在しないモニターを認識させる
  • ゲームに画面に絵を描かせます(表示されません)
  • directXスクリーングラバー(YouTubeビデオのストリーミングに使用されるものなど)を入手して、非表示の画面をストリーミングします
  • 通常のモニターでビデオプレーヤーを使用してビデオストリームを開きます
  • fFmpeg libmpcodecsの_hq2x_、_2xsai_または同様のフィルター(Windows OSでも機能する場合)をロードします
  • プレーヤーウィンドウを全画面表示に展開してから、Alt + Tabキーを押して実際のゲームに移動します

次に、自分のコンピューターからゲームのビデオをストリーミングしているビデオプレーヤーを調べます。ゲームにハードウェアマウスカーソルが必要な場合は機能しません。また、わずかな遅延が発生します。

これはばかげていることに気づき、試したことはありません。これが実際に機能するかどうかはまったくわかりません。実際にこの方法を試す価値があると思っている人がいる場合は、コメントしてください。

2
Jack White