はじめに
VR酔いを軽減するために、ポストプロセスのビネット効果を使用して視野を制限したかったのですが、OulusQuestではパフォーマンス上の制約のため、ポストプロセスを使うのは厳しいです。
そこで、ポストプロセスを使用せずにビネット効果のようなものを疑似的に再現する方法を試してみました。
完成イメージは以下動画のような感じです。
ポストプロセスを使わずに疑似的にビネット効果を再現してみた pic.twitter.com/dhSHy5TUjC
— 高浜 (@SatoshiTakahama) September 22, 2020
環境
Windows10
UnrealEngine 4.25.3
作り方
マテリアルの作成
・コンテンツブラウザ上で、新規追加=>マテリアルを選択して生成し、名前をM_Vignetteに変更します。
・M_Vignetteの編集画面を起動し、マテリアルの設定を変更します。
・M_Vignetteに以下のようにノードを追加します。中心を円状にくりぬいて、周囲をディザリングして中心から離れるほど濃くなるようにしています。DitherTemporalAAノードは、低コストで半透明っぽい効果を得られるのですが、自分のOulusQuest向け設定ではパフォーマンス優先のためTemporalAAは無効になっており、本来の効果は発揮できていません。
パネルの作成
・プレイヤーのキャラクターのカメラの前面に、視野を制限するためのパネルを設置します。コンポーネントを追加からPlaneを選択し、カメラに追従するようにカメラの下に配置します。
・パネルの位置と大きさは、動かしてみて適当な感じになるように調整します。マテリアルの所に、先ほど作成したM_Vignetteを設定します。
・あとはキャラクターの動きに合わせてパネルの表示有効・無効を切り替えるようにします。
参考資料
・第2回UE4勉強会 in 大阪 - マテリアル基礎・初級
中心を円状にくりぬく方法、そのほかマテリアルの基礎知識について参考にさせていただきました。
・[UE4] とりとめのないマテリアルネタ色々
DitherTemporalAAについて参考にさせていただきました。