ReShadeをSteamVRに適用して液晶HMDの白飛び・色が薄い問題を改善する

2020年1月18日

様々なアプリにエフェクトを追加する「ReShade」をVRで利用して、Oculus Rift SやValve Indexなどの液晶採用のHMDで問題になる白飛びを改善する方法についてまとめています。

ReShadeとは

ReShadeはNVIDIAのエンジニアCrosireさんが開発した、ゲーム向けの汎用ポストエフェクト注入ソフトウェアです。DirectXやOpenGLなどのグラフィックスAPIに介入することで、様々な特殊エフェクトをリアルタイムにゲームへ適用することが出来ます。

ポストエフェクトは、色調補正やアンビエントオクルージョン・被写界深度など、70種類以上が初めから登録されており、画面上にオーバレイされるメニューから、いつでも必要な物を選んで調整することができます。シェーダを記述することで、ユーザ自身がエフェクトを追加することも出来ます。

また、特定のゲーム向けにチューニングしたエフェクトのパラーメータを集めたサイトSweetFX Settings DBを通じて、エフェクトの設定を共有することも出来ます。

エフェクト適用前と適用後のスクリーンショットも登録されているので、どんなことが出来るかをこのサイトで確認してみても良いでしょう。

※SweetFXはReShadeが持つエフェクト機能のことだと考えておけば良いです。

液晶HMDの白飛び・色が薄い問題とは

Oculus Rift SやValve Indexなどの液晶採用のVR HMDにおいて、薄い水色や肌色が白っぽく表示される現象のことです。

液晶は有機ELに比べてコントラスト性能が劣りますが、液晶採用のHMDではコントラスト性能を稼ぐ為にバックライトが強めに調整されています。その結果、薄い水色や肌色が白っぽく表示され、特にアニメセルのようなべた塗りの映像にやや弱い特性を持っています。

白飛びは、白に近い色における階調の表現力が低いことによって起こりますが、表示する絵にあわせて明るさやガンマ値を調整することで、ある程度は防ぐことが可能です。

この調整にReShadeを利用できれば、液晶採用HMDの白飛び問題を軽減させられることが期待できます。

ReShadeを使うことのメリット

HTC VIVEシリーズやValve INDEXは、SteamのHMDドライバ側で色調を補正する機能を持っています。またAMD製GPUであればディスプレイ出力の調整として色調を補正することができます。

これらが利用できる環境であれば、そちらで調整しても良いのですが、あまり満足度の高い調整はできません。ReShadeを使った場合は以下のようなメリットがあります。

非線形の細かい調整ができる

ReShade以外の調整方法では、単純に赤の成分を何%足す・引くのような調整が基本になります。色が薄い部分だけを濃くしたいけど中間色の部分は何も変えたくない、というような変更はできません。ReShadeであればカーブやLUT(ルックアップテーブル)を使ったピンポイント(非線形)の調整が行えます。

一般的に3D描画を行うアプリでは色味の調整をRGBで行っていません。描画自体はRGBで行われますが、描画処理の最終段でsRGBと呼ばれる別の非線形の色空間にマッピングした上で調整されています。この処理の流れを考慮して色味を調整できるのもReShadeの強みです。

アプリごとに設定を保存できる

ReShade以外の調整方法では、システム全体の色味を変更するため、アプリによって設定を変えることができない(保存された複数の設定を手動で切り替えることはできるが手間)ですが、ReShadeはもともとアプリごとにインストールするものですので、別々の設定を使うことができます。

ReShadeの基本的な使い方

ReShadeをVRで使う方法に入る前に、ReShade自体の基本的な使い方を抑えておきます。使い方自体は、通常のゲームもVRのゲームも同じです。

インストール

インストールの形態

ReShadeでは対象となるソフトごとに別々にインストールを行う必要があります。ReShadeのプログラムと設定は、ソフトのインストール先に直接保存され、独立して存在します。レジストリやAppDataにも設定は一切格納されません。

バージョンアップが少々手間ではあるものの、ソフトごとに細かいチューニングやReShadeバージョンの固定が出来るので柔軟性が高いインストール形態と言えます。

インストール手順

ここでは「無料で入手可能」かつ「長時間利用する人が多い」と思われるSteamVR版のVRChatを例にして手順を説明していきます。既にVRChat本体のインストールは済ませた前提です。

  1. セットアッププログラムのダウンロード

* 最新のセットアッププログラムはReShade公式サイトのトップページからダウンロードできますが、ここでは後のVR対応の動作が確認できている4.5.3をダウンロードして下さい。
2. セットアッププログラムの実行と対象プログラムの選択
* セットアッププログラムを起動すると、プログラムの選択に進むか確認するウィンドウが表示されるので、上側の「Select a game or applicatin to manage its ReShade installation」(ゲームやアプリケーションを選択してReShadeのインストールを管理する)を選択して下さい。
3. 対象のプログラムを選択
* 最近起動したプログラムがリストアップされますので、ReShadeを適用したいソフトがリストに表示されていれば、それを選択してから「Use selected application」を選択します。
* リストに表示されていない場合は、「Browse…」から適用したいソフトの実行ファイルを直接選択します。
* VRChatの場合は C:\Program Files (x86)\Steam\steamapps\common\VRChat\VRChat.exe です。
4. グラフィックスAPIの選択
* 選んだソフトが利用しているグラフィックスAPIを聞かれますので「Direct3D 10/11/12」を選択します。
* Unity製のVRアプリはほとんどがDirectX11を利用しています
5. インストールするエフェクト(シェーダプログラム)の選択
* インストール対象となるエフェクトを選択します。ここで選択したシェーダプログラムが自動でダウンロードされ、対象ソフトのディレクトリに保存されます。
* ひとまず最初は何も選択を変えずにそのまま「OK」を選択して全部インストールしてみて下さい。
* ただし、数が多いと起動時にエフェクトを使えるようになるまでの時間が若干延びますので、慣れてきたら必要な物だけを選択するようにすると良いでしょう。
6. ウィンドウのタイトルバーに「ReShade instlation was successful!」と表示されればインストール成功です。
* ウィンドウをここで閉じるとインストールは完了です。
* 「Edit ReShade settings」を選ぶと、ReShadeを使う前に部分的に設定を変更することが出来ます。
7. ReShadeの追加設定
* 以下の設定は任意で、後から変更も可能です。それぞれ次のような意味があります。
* Preset
* SweetFX Settings DBから取得した設定を読み込ませて適用します
* Effects Path
* エフェクトのシェーダープログラムが格納されているディレクトリを指定します。
* Textures Path
* エフェクトから参照するテクスチャ画像が格納されているディレクトリを指定します。
* Screenshot Path
* ReShadeのUIから作成できるスクリーンショット画像のカクノディレクトリを指定します。
* Perormance Mode
* 色補正の強さなどを固定し、動的に変更できなくする代わりに、パフォーマンスを向上させます。
* Show FPS
* 画面の右上にフレームレートを表示します。
* Show Clock
* 画面の右上に時計を表示します。
* Skip Tutrial
* 初回起動時の利用説明を省略します。

使い方

引き続きVRChatの画面を見ながら使い方を説明してきます。

  1. 起動するとこのように画面上部にReShadeの情報が表示されるようになります。
  2. ここで Homeを押すとチュートリアルの画面になりますので、「Skip Tutorial」を選びます。(Edit ReShade settingsでSkip Tutrialをチェックしていない場合)
  3. 実際にエフェクトを設定する画面になります。ここではガンマ値を調整するTonemapを適用してみます。一覧からTonemapを探しても良いですが、数が多くて探しづらいので検索機能を利用します。

* 左上にあるキーワード検索のエディットボックスをクリックします
* キーボードから「tone」と入力します
4. 入力するとエフェクトが絞り込まれて一つになりますので、設定を適用していきます。
* Tonemapの左側のチェックボックスをチェックします。
* 下側にパラメータ調整のスライドバーが表示されるので、ガンマ値のスライダーを動かします。
5. ガンマ値のスライドバーを右にずらすと、この画面のように全体が暗くなります。(違いが分かりやすいようにエフェクトを強めにかけています)
* 「Reset all to default」を選んで「Yes」を選ぶとスライドバーで調整したパラメーターが元に戻ります。
* チェックボックスのチェックを外せばどんなパラメータを設定していても、エフェクトが無効になります。

色調を補正するエフェクトには、他にもTechnicolorと呼ばれる独特ものもあります。

各種エフェクトやパラメータは、説明するよりも実際に変更してみた方が雰囲気をつかみやすいと思うので、色々試してみて下さい。

Tips

  • Homeタブ(初期のエフェクト選択画面)
  • 右上にある+を押すと、設定のプリセットを追加することが出来ます。
  • Settingsタブ
  • 「Effect Toggle Key」で全エフェクトの有効・無効を切り替えるホットキーを登録できます。
  • VRで利用するときはあまり旨味は無いかもしれません。
  • 「Input processing」でReShadeのGUIを表示しているときのキーボードの扱いを設定できます。
  • デフォルトの「Nlock all input when overlay is visible」の場合、GUI画面を出している場合にはゲームにキーボードの入力は伝わりません
  • VRで利用する場合は、ウィンドウはほぼ見ないためにGUIを出しっぱなしにすることもあるので、「Pass all input」(GUIの表示状態にかかわらず、キーボードの入力をゲームに伝える)、「Block input when cursor is on overlay」(マウスカーソルがGUIのウィンドウに無い場合だけキーボードの入力を伝える)にしても良いかもしれません。
  • Statisticsタブ
  • 適用しているエフェクトの処理にどれぐらい時間がかかっているのかをここで見ることが出来ます。
  • 色調補正であれば比較的動作は軽いものの、凝ったエフェクトはそれなりに処理を食うこと雰囲気でつかめると思います。
  • GUIウィンドウのサイズは変更できます。
  • 普通のウィンドウと同じように右側の境界にマウスカーソルを合わせると変更できます。

アンインストール方法

アンインストールはインストールと同じ手順でセットアッププログラムから対象のプログラムを選び「Uninstall」を選ぶだけです。

一時的に無効にしたいだけの場合は、アプリケーションのインストール先ディレクトリにある dxgi.dll を別の名前にするのが簡単です。

ReShadeをVRで利用する方法

追記:ReShadeが 5.0 でSteamVRに正式対応しました。以下の記述は古いのでご注意ください。

ここまで紹介した方法では、デスクトップ上に表示されるウィンドウにはエフェクトが適用される一方で、VR HMDに表示される画面には一切変化が無いと思います。これは、VRアプリがHMDに特殊な方法で描画結果を転送しているものの、ReShadeがその方法に対応していないためです。

このままでは白飛び問題の対策には役に立たないので、当サイトでReShadeをVRに仮対応させてみました。
(対応作業はとあるフォロワの方と共同で進めました。ご協力ありがとうございます。)

ReShade VR仮対応版のインストール方法

  1. 前述のReShadeのインストールを終わらせて、対象のアプリでReShadeが正常に動作していることを確認します。
  2. 対象のアプリを終了させます。
  3. reshade_vr-453_test9をダウンロードし、中に入っている dxgi.dll を、対象アプリのインストール先ディレクトリにある dxgi.dll に上書きします。

* dxgi.dll はReShadeの本体ですので、アプリのインストール先ディレクトリには dxgi.dll が必ず存在するはずです。ディレクトリにdxgi.dllが無い場合は、手順かディレクトリが間違っています。

これで対処のアプリを起動すると、先ほどはエフェクトを有効にしてもVR HMDに変化が無かった状況が改善され、デスクトップに表示されているウィンドウと同じエフェクトがVR側にも適用されるようになったはずです。

この状態でTonemapやTechnicolor2、DPX、RiftGammaGainなどを使って好みの設定を探してみて下さい。

VR Onlyモード

VR Onlyにチェックを入れると、デスクトップウィンドウ側のエフェクトが無効になり、VR HND側だけにエフェクトが適用されるようになります。パフォーマンスを稼ぎたい場合や、デスクトップ側をリファレンスにしてHMD側を調整したい場合に利用して下さい。

変更履歴

  • 2020/03/02 v4.5.3 test9
  • DiRT Rally 2.0で起きていた問題を修正
  • 2020/02/11 v4.5.3 test7
  • UnrealEngineとの互換性を向上
  • 2020/01/26 v4.5.3 test6
  • 複数のエフェクトを組み合わせた場合の結果がおかしくなる問題を修正
  • デスクトップウィンドウへのエフェクトを無効にするVR Onlyモードを追加
  • 2020/01/26 v4.5.3 test5
  • 起動直後にレンダリング解像度を変えてくるアプリに対応
  • 2020/01/23 v4.5.3 test4
  • Skyrim VRが動かないのを修正
  • 2020/01/22 v4.5.3 test3
  • 特定のバージョンの Unity との互換性を向上(現物が無いのを勘で直したので、まだ動かない環境があるかもしれません)
  • 2020/01/20 v4.5.3 test2
  • 動かない環境があったのを修正
  • 2020/01/19 v4.5.3 test1
  • 初版

オススメ設定

特にこれといった設定をまだ見つけられてはいないのですが、ひとまずはTonemapだけを適用するところから始めると良いのでは無いかと思います。

  • Gamma値を上げると画面が暗くなっていき、目が疲れにくい絵になっていきます。
  • Saturation値を上げると色の鮮やかさが強くなり、白飛びが多少ましになります。

このVR HMD機種ではこの設定をすると良かった、みたいな情報も大歓迎です。

ReShade VR仮対応版の制約

試行錯誤しながらの仮対応ですので、以下のような制約があります。

  • DirectX 11/DirectX 12のみVR対応しています。
  • OpenGLやVulkanには対応していません。対応の予定もありません。
  • SteamVRのみVR対応しています。
  • Oculusストアで購入したアプリには効果がありません。
  • Steamで購入していてもOculusネイティブ(LibOVR)モードで動かすと同様に効果がありませんので、起動モードをSteamVRにして下さい。
  • 落ち着いたら対応を検討するかもしれません。
  • ReVIVEを使えば動くかもしれませんが未確認です。
  • VR HMD側にはReShadeの設定用GUIが表示されません。
  • 表示してもキーボードとマウスでしか操作できず微妙だと思うので、敢えて表示させていません。
  • 深度バッファを使ったエフェクト(被写界深度やアンビエントオクルージョンなど)は正常に動作しません。
  • 深度バッファの検出および選択機能をVR向けには実装していません。VR HMD側の画面は常に一様な深度として処理されます。
  • 真面目に対応してもVRとしてちゃんと表示されるか分からないので、今のところ対応は消極的です。
  • パフォーマンスの最適化が不十分です
  • エフェクト一つの負荷はおおよそ1%~2%程度ですが、動作が重いと感じたらSteamVR側のレンダリング解像度(SS)を下げてみて下さい。エフェクトの処理負荷は解像度に比例します。
  • デスクトップ側のウィンドウを小さくしても効果があるかもしれません。
  • エフェクトを一つも適用していない場合は、普段と同じパフォーマンスで動作するようにしています。(SteamVRに介入する部分を無効化しています。)

動作確認とフィードバックについて

今のところ、いくつかのUnityアプリで動作することを確認したのみで、あまり広い範囲での動作確認はできていません

そもそも需要がどれぐらいあるか分かってない事情もありますので、試された方は「使っているVR HMD機種」と「対象アプリ」について動作した・しなかったの報告を頂けると非常にありがたいです。報告はコメント欄、もしくはTwitterにてお気軽にお寄せ頂ければと思います。

ある程度の動作確認ができた上で、ReShade本家の作者の感触が良ければ、協力者の方と一緒に本家への統合を進めて行きたいと考えています。

簡単に複数のソフトにインストールする方法

ReShadeのインストールはファイルのコピーだけで完結しています。実行プログラムを書き換えたり、レジストリを追加したりする処理は行われていません。

そのため、一度正式な手順でインストールして好みの設定を見つけてしまえば、後は関係するファイルをコピーするだけで二つ目以降のインストールは終わります

コピーする必要があるのは以下のファイルです。

  • dxgi.dll
  • ReShade 本体
  • DefaultPreset.ini
  • エフェクトの設定が保存されているファイル
  • ReShade.ini
  • エフェクト以外の設定が保存されているファイル
  • DefaultPreset.ini とスクリーンショット保存先の絶対パスが書かれているので、目的に応じて書き換える必要あり
  • reshade-shaders
  • エフェクトのシェーダーとテクスチャが保存されている
  • ReShade.ini に記述されている相対パスを絶対パスに書き換えれば、いちいちコピーする必要は無くなる

「設定は共通で良い」「ReShadeが使用するディスク領域がソフト数に比例しても良い」場合であれば、何も考えずにコピーするだけで問題ありません。そうで無い場合は上記の説明を参考に ReShade.ini の内容を調整して下さい。

最後に

ポストエフェクトをゲームに適用するReShadeをVRに対応させ、液晶採用のVR HMDにおける白飛び問題を、色調補正のエフェクトで軽減する試みについて紹介しました。

色調補正機能を標準で持たないOculus Rift SやWindows Mixed Realityの機種では特に役に立つのでは無いかと思います。そして、VIVEシリーズやValve IndexなどのSteamVR経由で色調補正が出来る機種においても、アプリごとに個別に直感的かつ細かい調整が出来る点も場合によってはメリットになるはずです。

ただし、色調を補正できるからといって有機EL相当の結果が得られるわけではありません。あくまでもパネルに出力する前のデータに手を加えているに過ぎないので、期待は禁物です。とはいえ、線形にRGB値を調整するのでは無く、数式に基づいたカーブ補正やルックアップテーブル(LUT)のような、液晶モニタが内部でハードウェアのばらつきをキャリブレーションする時のような補正も不可能ではありませんので、頑張ってチューニングしてみる価値はありそうです。

また、VR HMDを使ってなくても、ReShadeは色々な活用ができるツールです。特にスクリーンショットを頻繁に公開するような人にとっては、補正と保存が一緒に出来るのも嬉しい点では無いでしょうか。

カスタマイズ系関連記事:

スポンサーリンク