やりたいこと
周囲の風景を反射する鏡を作りたい。
結果的には下記の画像のような平面的な鏡を作ります(風景に溶け込んで分かりにくいですが、四角い鏡が設置され周りの風景を映しています。
使用したバージョンは UE4.16.2, Windows10 です。
方法
Planar Reflection というアクターを使います。
鏡の作り方についてググると Scene capture を使った方法が多く出てきますが、それだと鏡に映り込んだ風景がプレイヤーの移動に対応して変化してくれないので、鏡の前で動き回ると不自然な感じがします。
Planar Reflection を使えば動きに対応して映り込みが正しく変化するのでとても自然な鏡になります。
Planar Reflection の機能を有効化するためにまずエディタの設定を変更する必要があります。
Edit > Project Settings で設定画面を開いて、Engine > Rendering > Lighting の Support global clip plane for Planar Reflections の項目をオンにします。
(古いバージョンの場合は Edit > Project Settings > Engine > Rendering > Optimizations の場所にこの項目があります)
エディタの再起動が必要になるので、再起動します。
(再起動後にプロジェクトを開くとシェーダーコンパイルが走ります)
プロジェクトを新規作成し、First personテンプレートを使って手順を説明します。
まず、鏡として用いるための Plane アクターをレベル内の適当な場所に配置します。
こいつを
適当な場所に置きました。
次に、Planar Reflection アクターを、先ほどの Plane と同じ位置に設置します。
Plane と同じ位置に置きますが、少しズレていても実際は問題ありません。
ただし高さ(Z軸:図の中で青色の軸)の位置は同じに揃えて下さい。
次に、アウトライナで Planar Reflection を Plane アクターの子にします。
こういう状態にする。
アウトライナで Plane を選択し、位置を少し上にズラしてみましょう。
鏡っぽいの(Planar Reflection)が現れました。
Planar Reflection の Show Preview Plane をオフにします。
Show Preview Plane はこの図の右下あたりです。
するとエディタ画面から Planar Reflection が見えなくなります。
次に、鏡(Plane)アクター用のマテリアルを用意します。
マテリアルを新規作成して下の図のようにノードを作ります。
VectorParameter と ScalarParameter をそれぞれ接続しています(パラメータではなくConstantでもOK)。
ベースカラーは白、Metallic と Specular は1、Roughness は 0 にします。
このマテリアルを Plane アクターに取り付けます。
鏡のサイズを大きくしたかったので Plane アクターの Scale の X と Y を 6 にしました。
Plane アクターの位置や角度を適当に調節して鏡を立たせます。
鏡ができました!
鏡の中の映り込みがあまり綺麗ではないので、Planar Reflection のパラメータを調整します。
Prefilter Roughness を 0 に、Screen Percentage を 100 にします。
すると、こんな感じでくっきりした映り込みになります。
お疲れさまでした。
情報源
Planar Reflection のパラメータについては公式ドキュメントに記載があります。
https://docs.unrealengine.com/latest/INT/Engine/Rendering/LightingAndShadows/PlanarReflections/
Planar Reflection について詳しく解説している動画です。
https://www.youtube.com/watch?v=UZsr7HlLQ-Y
本記事では理屈抜きでやり方の手続きだけ書きましたが、詳しい背景はこの動画を見るとよく解説されています。動画内で M_Mirror というマテリアルが説明なしに出てくるのですが、おそらくはこの記事で作ったマテリアルと同じようなものだと思います。
コメント
参考になりました!