Version: 2023.1
言語: 日本語
リフレクションプローブのタイプ
より高度なリフレクションプローブの機能

リフレクションプローブの使用

デフォルトのリフレクションプローブ

Unity には SkyManager という専用のマネージャーがあり、環境ライティングがデフォルトでシーンに影響するように なっています。SkyManager は、アンビエントプローブデフォルトのリフレクションプローブ を自動的に生成して、環境ライティングをキャプチャします。

手動で作成したライトマップとライトプローブがないシーンやゲームオブジェクトのライティング結果に環境ライティングが自動的に影響するのを防ぐには、デフォルトのリフレクションプローブとアンビエントプローブを無効にします。これらのプローブを無効にするには、SkyManager を無効にする を参照してください。

リフレクションプローブの追加

Reflection Probe コンポーネントはシーンのどんなオブジェクトにも加えることができますが、通常は、それぞれのプローブを個々の空のゲームオブジェクトに加えます。基本的なワークフローは以下のとおりです。

  • 新規で空のゲームオブジェクトを作成し (メニュー: GameObject > Create Empty)、それに Reflection Probe コンポーネントを加えます (メニュー: Component > Rendering > Reflection Probe)。また、すでにプローブをシーン中に作成している場合、新規に作成せずに複製する方が簡単です (メニュー: Edit > Duplicate)。
  • 新しいプローブを希望の場所に置き、 Offset ポイントと影響の及ぶゾーンの大きさを設定します。
  • オプションとして、動作をカスタマイズするためにプローブにある他のプロパティを設定します。
  • 割り当てが必要な場所全てに、プローブを追加していきます。

リフレクション (反射、映り込み) を確認するために、最低でも一つは反射するオブジェクトもシーンに配置する必要があります。簡単なテストオブジェクトは以下のように作成することができます。

  • スフィア等のプリミティブなオブジェクトをシーンに加えます (メニュー: GameObject > 3D Object > Sphere)。
  • 新しいマテリアルを作成し (メニュー: Assets > Create > Material)、デフォルトの Standard シェーダーのままにしておきます。
  • MetallicSmoothness プロパティをどちらも 1.0 に設定することでマテリアルが反射するようにします。
  • 新しく作成したマテリアルをスフィアオブジェクトにドラッグしてマテリアルの割り当てを行ってください。

これでスフィアがプローブから得られたリフレクション情報を表示することができます。単一のプローブを用いた簡単な配置を行うことで、リフレクションの基本的な効果を十分に確かめることができます。

最後に、プローブはリフレクションが表示される前にベイクされていなければなりません。 ライティングウィンドウAuto Generate オプションを有効にしているのであれば(デフォルトで有効になっています)、リフレクションは位置を変えたりシーン内のオブジェクトを変更するのに合わせて更新されていきます。ただし、その場合は瞬時には反応していきません。自動的なベイクを無効にする場合は、プローブを更新するために、Reflection Probe のインスペクターにある Bake ボタンをクリックしなければなりません。自動的なベイクを無効にする主な理由は、多数のプローブのある複雑なシーンではベイク処理にかなりの時間を要することです。

プローブの配置

プローブの位置は主にゲームオブジェクトの位置で決定されるので、オブジェクトを希望の場所にドラッグするだけで調整が可能です。これを完了次第、影響の範囲を決めるプローブゾーンを設定します。プローブゾーンというのは軸に沿ったボックス形状であり、大きさは Box Size プロパティによって決定されます。size の値を直接設定したり、インスペクターから size editing mode を有効にした上でシーンビューに表示されるボックスの端をドラッグすることもできます (詳しくは Reflection Probe コンポーネントのページを参照してください)。完全なプローブの群を持つゾーンは、リフレクション可能なオブジェクトが通る可能性のある領域すべてを全体的にカバーします。

反射していることが顕著であるため、プローブはシーン中の巨大なオブジェクトの近くに設置するべきです。壁の中心や角の周辺はプローブを設置する候補にするとよいでしょう。小さいオブジェクトであっても強い視覚効果を持つ場合は、近くにプローブが必要になることがあります。例えば、オブジェクト自体は小さくて重要でない場合でも、キャンプファイヤーの炎にリフレクションの効果を加えたいと考えるでしょう。

プローブをシーン中の適切な位置に配置したら、それぞれのプローブのエフェクトゾーンを定義する必要があります。こちらの設定は Box Size プロパティを上で説明したようにして使用できます。壁の形状がかなり平坦に近ければ、壁の長さに対してプローブゾーンは一つで事足りるかもしれません。しかし、ゾーンは壁の高さと比較すると低いかもしれません。これは、壁にかなり近いオブジェクトしか反射できないということを暗示しています。ある場所とほかのある場所で外見がほどんど違わないような開けた場所の場合、単一のプローブでカバーできることがよくあります。プローブのゾーンはメインのワールド軸 (X,Y,Z) に対して整列しており、回転はできないことに注意してください。つまり、プローブのグループが軸に整列されていない場合は、均一な壁に沿わせることがある、という意味です。

デフォルトでは、プローブのエフェクトゾーンはビューポイントの中心にありますが、そこはリフレクションキューブマップをキャプチャする理想の位置ではないかもしれません。例えば、とても高い壁のために用意したプローブゾーンを壁から距離を取って設置するかもしれませんが、ゾーンの中心よりもむしろ、壁に近い位置からリフレクションをキャプチャしたい場合もあるでしょう。オプションで Box Offset プロパティを使用することで、ビューポイントにオフセットを加えることもできます (つまり、オフセットというのはゲームオブジェクトのローカル空間での位置で、プローブのキューブマップビューはそこから生成されます)。これを使用することで、エフェクトゾーン内のどこにでも簡単にビューポイントを設置することができ、それどころかゾーンの外側に設置することもできます。

プローブゾーンの重複

リフレクションプローブの有効範囲を重ねることなく近接させて配置するのはとても困難ですが、重複を気にする必要はありません。しかし、これによって重複エリアでどちらのプローブを使用するか選択するという問題は残されることになります。デフォルトではまず、Unity はリフレクションオブジェクトのバウンディングボックス間の交差する点や、それぞれのオーバーラップしているプローブゾーンを計算します。そして、交差しているゾーンのバウンディングボックスの中で一番大きな体積を占めるものが選択されます。

交差している部分のオブジェクト面積が大きいため Probe A が選択されます
交差している部分のオブジェクト面積が大きいため Probe A が選択されます

プローブの Importance プロパティを使用することにより、計算の修正を行うことができます。より Importance の値が高いプローブはオーバーラップしているゾーン内の Importance が低いものよりも高い優先度を持ちます。これは例えば、大きなゾーン内に完全に包み込まれている小さなプローブゾーン (つまり、重複している片方のゾーンのバウンディングボックスと包囲ゾーンは常に大きいため、小さいゾーンが使用されることはありません) を使いたい場合などに便利です。

ブレンド

Reflection Probe のブレンドを有効にするには、Graphic Settings > Tier settings の順に選択します。Tier settings はUnity の ビルトインレンダーパイプライン でのみ可能です。ブレンドを有効にすると、リフレクションオブジェクトがあるゾーンから別のゾーンに移動していくにつれ、次第に 1 つのキューブマップがフェードアウトし、他がフェードインします。段階的な遷移により、オブジェクトがゾーンの境界を超えると突然リフレクションが “発生する” 状況を避けることができます。

ブレンドは Mesh Renderer コンポーネントの Reflection Probes プロパティを使用して制御します。4 つのブレンドオプションが利用可能です。

  • Off - リフレクションプローブのブレンドを無効にします。リフレクションにはスカイボックスのみを使用します。
  • Blend Probes - 隣接したプローブのみをブレンドし、スカイボックスを無視します。このオプションは、“屋内” オブジェクトや、またはシーンの囲われている部分 (例えば、洞窟やトンネルなど) のために使用するといいでしょう。なぜなら、これらの場所からは空が見えないため、空がリフレクションに反映されるべきではないからです。
  • Blend Probes and Skybox - Blend Probes のように動作しますが、ブレンドにスカイボックスも使用することができます。これは空が常に見えるような開けた場所にあるオブジェクトに使用するべきオプションです。
  • Simple - 2 つの重なるリフレクションプローブ群があるときに、プローブ間のブレンドを無効にします。

プローブの Importance 値が同じである場合、オブジェクトのバウンディングボックスを伴う指定したプローブゾーンのブレンド比重はすべてのプローブの合計でそれらの交差領域(体積)を除算することで計算されます。例えば、ボックスが Probe A のゾーンと 1.0 だけキューブ形状のユニットで交差し、Probe B のゾーンと 2.0 交差している場合ブレンドの値は次のようになります。

  • Probe A: 1.0 / (1.0 + 2.0) = 0.33
  • Probe B: 2.0 / (1.0 + 2.0) = 0.67

言い換えれば、ブレンドは 33% だけ Probe A のリフレクションを組み込み、67% だけ Probe B のリフレクションを組み込むともいえます。

完全に他のものに内包されているプローブについて計算する場合、少し異なった扱いをしなければなりません。内側のゾーンが完全に外側のものと重複しているからです。オブジェクトのバウンディングボックスが完全に内側のゾーン内にある場合、ゾーンのブレンド比重は 1.0 (すなわち、外側のゾーンは一切使われないということ) です。オブジェクトが部分的に内側のゾーンから外れている場合、その内側のゾーンを伴うバウンディングボックスの交差点の体積はボックスの総体積に除算されます。例えば、交差点の体積が 1.0 だけキューブ形状のユニットで交差し、バウンディングボックスの体積が 4.0 だけキューブ形状のユニットである場合、内側のプローブのブレンド比重は 1.0 / 4.0 = 0.25 となります。この値は外側のプローブの比重を取得するために 1.0 から減算されます。この場合 0.75 となります。

ブレンドに関係あるプローブの Importance 値が他方よりも高い場合、より重要なプローブが通常の方法で他のものをオーバーライドします。


  • バージョン 5.6 で更新

  • 2017–06–06 公開ページ

リフレクションプローブのタイプ
より高度なリフレクションプローブの機能