こんにちは。VR事業部の溝田です。
今回はAmplify Impostors について紹介します。(2018/10/22 時点でベータ版です。)
Amplify Impostorsを用いることで既存の3Dモデルを簡単に多視点対応のビルボードとして生成することができます。これにより少ないポリゴン数で3Dモデルであるかのように見せることができます。実際に使ってみた感覚だと3Dモデルの表現はそのままに、解像度だけを下げたような見た目になるという印象です。
公式のマニュアル(英語)はそこまで文章量が多くないため、簡単に読むことができます。 公式マニュアルはこちらから確認可能です。
Unity Products:Amplify Impostors/Manual - Amplify Creations Wiki
動作環境
今回使用した環境は下記の通りです。
- Unity2017.4.13f1
- Amplify Impostors [BETA] 0.9.1
※Amplify Impostorsは Unity2017以降にて使用可能です。
Amplify Impostorsの利用からLOD適用までのクイックスタート
Amplify Impostorsの説明の前に、まず使ってみましょう。
Amplify Impostorsを使って生成したアセットをLODに設定し、オブジェクトが遠くにあるときに生成したアセットに切り替わるようにしていきます。
Amplity Impostorsの利用
今回はAmplify Impostorsアセット内に含まれている樽のモデル(prop_barrel_01)を利用しました。
使い方は簡単で、シーン上のゲームオブジェクトに、Amplify Impostor(Script) コンポーネントを追加し、BakeImpostorをクリックします。保存先を聞かれ、ImpostorAssets(メッシュやマテリアル、テクスチャなど)が生成されます。
同時にシーン上にImpostorという名前でImpostorAssetsが適用されたゲームオブジェクトが生成されます。
LOD適用
次にLODグループを設定するためのゲームオブジェクトを新規作成(Barrelと命名)し、LOD Group コンポーネントを追加します。 そのゲームオブジェクトの子に先程生成したImpostor及び、元々のモデル(prop_barrel_01)を設定します。
Barrelの LOD0 のRenderersにprop_barrel_01、LOD1 にImpostorを設定し、LOD0 100% 、LOD1 20% 、Culled 1%となるように調整します。
これで完了です。
作成したBarrelオブジェクトを大量に並べて確認するとこのようになります。
※480p以上の画質でないとStatsの文字が見えない恐れがあります。
Trisの値に注目すると分かりますが、最初1.3Mあったのが、距離が離れるにつれて下がっていき最終的に75.0kまで下がっています。
赤で囲っている樽が元々のモデル(LOD 0)で、他の樽はImpostors(LOD1)となっています。 また、Impostorsで生成したアセットでも影は反映されています。
Amplify Impostorsの各パラメータについて
Amplify Impostor(Script) コンポーネントで一度BakeImpostorを押すと、上記の様な表示となり、各パラメータを調整することができます。 下記は意訳の部分もあるので、詳しくは公式のマニュアルを参考にして下さい。
Bake Type
Spherical、Octahedron、HemiOctahedronの三種類から選べます。
Spherical:多視点から撮ったテクスチャを各エリア毎に対応して見せるというものです。綺麗に見える箇所もありますが、エリアが切り替わる部分でガクッとテクスチャが切り替わる印象を受けます。
Octahedron:多視点から撮ったテクスチャを近い位置のものとブレンドして見せるというものです。テクスチャの切り替わりは自然ですが、画像がボケているような印象を受けます。
HemiOctahedron: Octahedronの半球バージョンです。上半球の方向から見られることだけを考慮しており、Octahedronよりテクスチャが有効に使えるため綺麗に見えます。ただし、下半球側から見ると破綻します。
TextureSize
生成するテクスチャのサイズです。大きくすればするほど綺麗にはなりますが、テクスチャ容量が大きくなります。デフォルトの2048で丁度良さそうです。
Axis Frames
生成するテクスチャの軸のあたりのフレーム数です。デフォルトの16の場合は、16×16 =256視点の画像が生成されます。 フレーム数が小さいほど画像の解像度が上がり、フレーム数が大きいほど様々な角度からみたときの見た目が自然になります。 こちらもデフォルトの16で丁度良さそうです。
Pixel Padding
テクスチャ生成時の余白です。余白が小さいと、表示するビルボードの端に余計な画像が表示する恐れがあります。デフォルトの32にしておき、ビルボードの端に余計な画像が表示される場合に調整すればよいかと思います。
Billborad Mesh
ビルボードの形状を設定出来ます。
BakePreset
生成するテクスチャの種類などを変更できるようです。
まとめ
遠景になりうるものにImpostorsを利用して、LODを適用するというのが一番手軽でよい使い道かなと考えます。 近いものに適用するのは非常に厳しいと感じました。
設定するパラメータとしては、下半球方向から見ないものはBake TypeをHemiOctahedronに変える程度で、十分だと感じました。使いすぎるとTexture容量が増大していくので、注意が必要です。
VRで見た場合、右目と左目それぞれでビルボードが計算されて表示されるため、近くでみると破綻しますが、性質上近くで使うものではないため有効かと思います。