オリジナルの3Dモデルをつかったミラーを作る

この記事ではclusterクリエイター・白百合めしべさんがCluster Creator KitのMirrorを使って、オリジナルの3Dモデルを使ったミラーを作る方法を紹介します。

環境

  • Cluster Creator Kit : version 1.14.1
  • Unity 2019.4.22f1
  • Blender v2.83.8

概要

Cluster Creator Kit(以下、CCK)には鏡を設置できるコンポーネントが用意されています。
Mirrorコンポーネントの説明はこちら

自分のワールドに鏡を設置する方法はCluster Creator Guideに詳しく書かれているので、そちらを参照してみてください。

CCKの鏡はプリミティブのQuadで利用されることを前提に作られています。
そのためオリジナルの3Dモデルを作るにしても平面のみが対象になります。

今回の記事で作ったミラーをテストできるワールドがあります。

鏡の大まかな仕組み

まずは鏡がどのように実現されているか簡単に説明します。

平面の鏡は入射した光が鏡面に対して垂直の法線に対して入射角と反射角が同じになるように反射してきます。
その光を目がとらえて、まるで鏡の奥に物があるように見えています。

簡単な説明になりますが、clusterでは鏡に映る映像を視点とは反対に位置するところに反射用のカメラを置き、そのカメラがとらえたものを鏡に映すことで対応しています。
反対に位置するところを求めるのにも鏡の法線が必要になります。

鏡の3Dモデルを作るのにも法線が重要であることがわかります。
気を付けたいのがCCKのMirrorコンポーネントでは頂点の法線ではなくローカル空間において-Z方向を法線として利用しています。

また鏡が重たいと言われているのは1つの鏡に反射用のカメラが1台追加されるためです。
カメラが1台追加されるとレンダリングコストはほぼ比例します。
鏡はワールドに1つ、使わないときはOFFにするような仕組みがあるとよさそうですね。

Unityで法線の確認してみる

Mirrorコンポーネントをつけたデフォルト(メッシュがQuad)の鏡で法線を確認することができます。
画像のようにローカル空間に変更してミラーを選択すると青い矢印とは逆の方向がミラーになっていることがわかります。
鏡の法線は-Z方向ということが確認できましたね。

PC, PCVR, スマホのみ対応する鏡を作る

PC, PCVR, スマホのみに対応したオリジナルの形の鏡をつくるのはとても簡単です。
さきほど説明した法線方向だけUnityプリミティブのQuadに合わせれば実現します。

ここでの説明ではBlender v2.83.8を使用してモデルを作成しています。

メニューから円を追加します。

オペレーターから頂点を10に変更します。

Fキーを押して面を張ります。

頂点を全選択状態のままメニューより「チェッカー選択解除」を選択します。

Sキーを押して好みの星型にしてみよう。

全頂点を選択してからRキーを押して星を回転させます。
オペレーターには画像のように設定してください。

メニューよりFBXのエクスポートを選択します。

エクスポートの設定はこのようにします。
とくに前方、上の方向が重要です。

エクスポートしたFBXをUnityにインポートして、ファイルを展開すると以下のようになります。格子状のアイコンがメッシュになります。
円から作成したのでデフォルトではCircleになっていることがほとんどです。

ヒエラルキーからMirrorオブジェクトを選択して、MeshFilterのMesh項目にあるQuadの横にある丸いボタンを押します。

Select Meshウィンドウが開くのでさきほどインポートしたCircleを選択します。

Editorを実行すると先ほどつくったモデルに置き換わっています。

Quest向け

Questに対応するためにはPC, PCVR, スマホ向けに説明した内容に加えて
UnityプリミティブのQuadの細かい仕様に合わせる必要があります。
合わせる仕様は以下のとおり。

  • 1m x 1mの平面
  • Pivotポイントはローカル座標軸の原点であること
  • Quadと同じUV展開であること

さきほどPC, PCVR, スマホ向けに作成した3Dモデルを改変してQuestの仕様に沿う形にしていきます。
念のためblenderのファイルをコピーしてから作成することをオススメします。

モデルの寸法を1m x 1mに変更する。

Nキーを押すとプロパティシェルフを開きます。
アイテムタブを選択すると寸法が表示されています。
この数値は後程使うので、オリジナルのメッシュを複製しておくかメモに残しておいてください。
寸法をYを除くXZを1mに設定してください。

入力した寸法を適用させるためメニューより適用の拡大縮小を選択してください。

編集モードに変更して最上部の頂点を選択します。そうするとZの値が0.5でないことが確認できます。
Zの値から-0.5した値をメモします。
画像の場合は「0.052786」になります。

オブジェクトモードにして位置に先ほど求めた値の負の値を入力します。
画像の例では「0.052786」だったので「-0.052786」です。

位置を適用します。

さきほどの頂点の位置が0.5mになっていることを確認します。
他の頂点も選択して、-0.5~0.5mの中に納まっていることを確認してみてください。

UV Editingのタブを選択して全頂点を選択する。
前面からの視点に変更する。
(blenderの軸の色が縦が青、横が赤になっていること)
その後Uキーを押してメニューより「ビューから投影(バウンド)」を選択してください。

UVが画像のようにぴったりと展開されます。

これでモデルサイズ、ピボットポイント、UVが調整できたので、
UnityにFBXエクスポートしてミラーにメッシュを設定してみてください。

その後、Unityの画面でblenderで1m x 1mの寸法を合わせる前の寸法に表示されている値をScaleに入力します。
blenderのXZの値がUnityのXYの値になります。

その後は等倍にスケールするか、親オブジェクトをスケールすれば大きさを自由に変更できます。

さいごに

Quest向けの仕様にそって作れば、今回作った星型でなくても、いろんな形の鏡をつくることができます。
つまりステージの床面を鏡仕様にしたり、いろんな展開ができます。
ワールド制作に活かしてみてください。

さらなるステップアップとしてCCKに収録されているMirrorシェーダーを改変して自分オリジナルの鏡(床)もつくることができます!

この記事を参考にチャレンジしてみよう!

デバッグにつきあってくれたYSKさん、YouAoiさん、ありがとうございました!