Reflection Probeの設置方法について

このページでは、「Reflection Probeの入稿の仕方」について、簡単に解説いたします。

1. はじめに

Reflection Probeとは?

「Reflection Probe」 は、金属などの滑らかな面に周囲の景色が映る「映り込み」を扱うことができます。

Reflection Probe

Vket の会場ワールドには、ブースが効果範囲になる Reflection Probe がすでに設置済みです。特別な設定をすることなく Standard シェーダーなどでの映り込みを実現できます。会場ワールドに Reflection Probe を委ねる場合は、出展者の側で Reflection Probe を設置する必要はありません。

一方、映り込む景色を操作したい、独自の背景を使用したい、といった場合には、出展者の側で ブース内に Reflection Probe を設置して入稿することも可能です。

Reflection Probeの作成

Reflection Probe は、設置したい場所でメニュー GameObjectLightReflection Probe から新規作成することができます。

Static, Dynamic どちらのオブジェクトに入れても構いませんが、Batching static などの static 設定は入稿ルールの通りに設定をお願いします。

2. Reflection Probeを設置する手順 - Baked

周囲のReflection Probe Staticなオブジェクトの映り込みを画像としてベイク(焼き込む)ものです。Realtimeと異なり動く物やプレイヤーなどは映り込みませんが、その分負荷が軽量です。

2-1. TypeをBakedに変更する

設置した Reflection Probe の Type を 'Baked' にしてください。

Cubemap capture settingsのResolutionは、入稿ルールに従って「128」以下になるようにしてください。

Reflection Probe

このReflection Probeを入稿すれば、スペースを配置したワールドの側でライトベイクを行う際に、周囲の景色を元にベイクされます。

3. Reflection Probeを設置する手順 - Custom

Unityエディタ内でベイクした映り込みのCubemapに加えて、自分で作ったカスタムのCubemapも扱えるようにする設定です。

3-1. TypeをCustomに変更する

設置した Reflection Probe の Type を Custom にしてください。

設定欄が増え、Cubemap を設定することができるようになります。

Reflection Probe

3-2.位置と大きさを設定する

Reflection Probe は球体を中心に撮影されます。まずは位置を合わせてください。

Reflection Probe

映り込みはBoxで示された範囲内のメッシュに発生します。

この Box は「軸平行バウンディングボックス(AABB)」であることに注意してください。

会場ワールドに配置されるにあたってブースはY軸回転されますが、この Box はY軸回転されません。

Reflection Probe

そのため、一般的なワールド作成においては Box で影響範囲を指定するところですが、
Vketへの入稿物では「Box Size を 0 に設定し、対象メッシュの AnchorOverride に「Reflection Probeそのもの」を設定する方法が便利です。

Reflection Probe

Reflection Probe

3-3. キューブマップを Reflection Probe に設定する

Reflection Probe の「Bake」ボタンを押すと、Cubemap が撮影されて保存ダイアログが開きます。(Cubemap がすでに設定されている場合は上書きされます)

この Cubemap は入稿フォルダ内に移動してください。

Reflection Probe

Bakeボタンを押して撮影するのではなく、他で用意したキューブマップを設定することもできます。その場合は Cubemap 設定欄に直接キューブマップのファイルを指定してください。

この場合、Bake ボタンを押すと用意したキューブマップが上書きされてしまいますのでご注意ください。

以前 (Unity2017頃) は、Type を Custom に切り替えたあとの最初の1回のライトベイクはキューブマップが上書きされてしまうというUnityEditorのバグがあったのですが、現在 (Unity2018以降) は特に発生しないようです。もし上書きされてしまってもいいように、キューブマップのファイルはバックアップを保存しておくとよいと思います。

4. Reflection Probeはどのように見えるのか?

ここまでがReflection Probeの設置手順です。ここからは、Reflection Probe がどのように見えて、どのように調整すればいいかの Tips になります。

Reflection Probe は、おおよそ「滑らかで、平らで、広い面積のメッシュによく映える」という特徴があります。鏡を想像してもらえるとわかりやすく、鏡の内外での景色の違いが、まるで間違い探しゲームのように明確にわかってしまうという特徴があります。

一方、金属でできたアクセサリーなど、面積が小さく凹凸の大きなメッシュに対しては、映り込みで見た目は顕著に向上しますが、映り込む景色は不明瞭なので間違い探しが始まってしまうことはあまりありません。

このため、映り込ませたいメッシュが「滑らかで、平らで、広い面積のメッシュ」であるか否かで、調整難易度が大きく変わるという特徴があります。

4-1. アクセサリーに対する調整ノウハウ

「滑らかで、平らで、広い面積のメッシュ」ではないのであれば、Cubemap は実際の景色と乖離していてもまず気付かれることはないです。

金属光沢などのルックを最重視し、もっとも良く見える素材を使うと良いです。

キューブマップは PolyHaven などのフリー素材が利用できます。色味がある程度同じである画像を選べば、実際の景色がワールドと相当異なっていたとしても気付かれることはほとんどなく、ルックが向上するメリットのほうが強く現れます。

4-2. 鏡に対する調整ノウハウ

「滑らかで、平らで、広い面積のメッシュ」である場合は、間違い探しが可能なレベルで差異がわかってしまうため、実際の景色に近づけるという調整が必要になります。

たとえば「鏡」「磨かれた床」「ニスの塗られた家具」などのメッシュで必要になってきます。

次章で調整のやり方を解説します。

5. Reflection Probe を実際の景色に合わせるための Tips

5-1. Skybox を調整する

Vket2021 の入稿作業用シーンは DefaultSkybox になっています。Reflection Probe を撮影(つまりBakeボタンを押す) するときのみ一時的に Skybox を変えると良いでしょう。
前述の通り、色合いが似た傾向であるならば全く異なる景色であっても気にならないケースも多いです。

Skyboxを差し替えるのではなく、ブースを包み込む Cube を配置し、その Cube のマテリアルとして VRChat/Panosphere を利用する、といった手法も可能です。

Reflection Probe

色合いが似ていればある程度は大丈夫なため、たとえばVket2021「復刻江戸城城下町」であればVket4「阿頼屋敷」、Vket2021「はじまりの街アルメア」であればVket5「メテコレプカ」などで撮影したパノラマテクスチャも使用できると思います。

5-2. 向きを調整する

VketのブースはY軸回転されてワールドに配置されますが、Reflection Probe は回転されずにワールド座標系に合わせた方向が維持されてしまいます。

Reflection Probe

これを解消するには、下見などでブースが配置された向きを確認し、入稿シーンでブースを回転させた状態で Reflection Probe の「Bake」ボタンを押してベイクしてください。

Reflection Probe

ベイク後ブースの回転はもとに戻して入稿してください。

5-3. ブレンド率を調整する

Reflection Probe は影響範囲内にあるものが最大2個まで、ブレンドされて映り込みます。

Reflection Probe

会場ワールド側にReflection Probeがすでに配置されているため、通常は出展者の側でReflection Probeを配置しても、会場ワールド側に配置されたReflection Probeが映り込むことになります。
AnchorOverride に Reflection Probe 自体を設定することで、このブレンドを上書きして常に出展者の側で用意されたReflection Probeを使用することが可能です。(そのため、前述の手順では AnchorOverride に Reflection Probe を指定すると案内させていただきました。)

Reflection Probe

なお、この動作は AnchorOverride に Reflection Probe を直に指定した場合にのみ有効で、Reflection Probe と同一座標にある別の GameObject を指定しても無効ですのでご注意ください。