Oculus Rift の HEALTH & SAFETY WARNING 表示を差し替える

Oculus Rift DK2 から(?)、「HEALTH & SAFETY WARNING」が最初に自動表示されるようになっています。こちらは消さないでくださいという扱いだそうです。
しかし日本では英語で出しても結局読まれず、それも問題かと思います。
そこで画像を差し替えられないかと試した結果がこちらです。

目次

  1. 警告画像の所在調査 (ツールを試すだけなら読み飛ばして)
  2. 差し替えツール
  3. おわりに


警告画像の所在調査

SDKのソース拝見!

フォーラムのトピック「Health and Safety message requirements for DK2 submission?」を見たところ、SDKの LibOVR/Src/CAPI/Textures/healthAndSafety.tga.h に元の画像がありそうです。
SDK 0.4.2 の該当ファイルをエディタで見たところ、TGA形式のデータを単に羅列しているようです。

これをそのままTGAファイルにしてみると、確かに 1024×512 ピクセル 32ビット RLE圧縮 の画像でした。

という訳で、自分で同様なTGA画像を用意して healthAndSafety.tga.h を置き換えて Visual Studio でビルドすると…。
はい、できました。libovr.lib が。

しかし、 Unity では OculusPlugin.dll を利用する形になってますので、このままでは使えませんね。

Unity用はどうしよう?

const でTGA画像を持っているのならどこかにそのまま格納されているのではと、 Dogelus2_DK2Mikulus_DK2 1408033版 に含まれていた Plugins/OculusPlugin.dll をバイナリエディタで見てみると…。

それっぽい領域がありました (^_^)
ただ、ちょっと違うようです。

画像として取り出してみると、こちらは非圧縮のようです。
通りで OculuPlugin.dll が8.6MBもあるわけです。

それなら非圧縮の画像を用意して置き換えてみましょう。

TGAのヘッダ部分は、あまり特徴的な並びがありませんが、Oculus Rift で利用されている画像なら

  • 1024×512px 32bit カラー 非圧縮 : 00 00 02 00 (中略) 00 04 00 02 20
  • 1024×512px 32bit カラー RLE圧縮 : 00 00 0A 00 (中略) 00 04 00 02 20

を探せばまあ、OKそうです。

一方フッタは(Oculus Rift で利用されている画像なら)文字列としてみて

  • TRUEVISION-XFILE.\0

で終わっていそうなので、こちらは探しやすそうです。

探してみると4つ分の画像があり、どれが利用されているのか不明だったため、全部バイナリエディタで置き換えてみました。

やったー。注意書きを日本語にできた!


差し替えツール

バイナリエディタで画像を差し替えられることは確認できましたが、手作業で再度やるのも辛いのでツールを作ってみました。

TgaReplacer

ツールの実行

リンク先にある緑ボタンの「TgaRelpacer.zip」からをダウンロードしてきて、適当な所に解凍します。

 

できたフォルダの「TgaReplacer.exe」を起動します。

 

Unityでビルドされたものを書き換える

「書き換えるDLL」の欄に、Plugins/OculusPlugin.dll をドロップします。

サンプルとして、適当な日本語訳の画像を付けてありますが、他のTGA画像も選べます。
ただし本当に任意の画像で問題無く動くかはテストしていません。

完全透明完全透明(非圧縮) な画像にもできますが、Dogelus2 では見えなくなったのに対し、Mikulus ではうっすら四角が出ていました。

また、DLLに含まれる容量を超える画像にはできません。
元は圧縮した状態で約103KB程度のようです。

一方、DLLのファイルサイズが8.6MBくらいだった場合、画像は非圧縮の形式でないと真っ白な表示になりました。SDKのバージョンによって圧縮されているかどうか異なりそうです。

 

画像も指定された状態で「変換開始」を押して、うまく差し替えられれば、保存するか聞かれます。
保存すれば完了です。
念のため元のファイルが同じフォルダに OculusPlugin.dll.bak としてバックアップされますので、不要なら削除します。

Unreal Enginde でパッケージ化されたものを書き換える

Unreal Engine の場合、できあがった exe ファイルを書き換えれば差し替えられそうではありました。でも実行ファイルを書き換えて問題ないかは未知数。

 

 

Unity で編集時点での書き換え

OculusUnityIntegration.unitypackage を全部インポートすると、

  • Assets/Plugins/OculusPlugin.dll
  • Assets/Plugins/x86_64/OculusPlugin.dll

の2つがあるようです。どちらが使われるものなのか把握していませんが、両方差し替えてからUnityを起動してあげると、エディター上でも注意書きを替えられました。

 

 

.bakのファイルも2つ分できるので、不要なら削除します。

 


おわりに

ツールを置いてありますが、当然無保証であり、書き換えた結果動作に不具合が生じても一切責任は負いません。

Oculus SDK の修正自体はライセンス上OKなようですが、修正版を配布する場合、全体を公開しなければならないか、アプリケーションなら別によいのか、読み切れていません。
(どなたか教えていただけるとありがたいです。)

また Oculus Developer Forums でも議論になっているようですが、開発中は非表示にという要望もあります。
おそらく翻訳の必要性も含めて、そのうち本家のSDKの方で警告を差し替えたり非表示にできるようになると私は思っています。

Follow me!