Unity
glTF
VirtualCast
バーチャルキャスト
glb

バーチャルキャスト向け背景(.glb)の作り方

概要

バーチャルキャストの1.4.0より背景モデル(.glb)が読み込めるようになりました。
バーチャルキャスト 1.4.0a リリース
なので… 何ならバーチャルキャストに持って行けて、何が持ってゆけないか? どうやって、どこで設定すればよいか? を整理してゆこうと思います。

ライティング / シェーダー周り

結論から言うと「unlitで頑張る」です。※unlitとは「陰影処理を行わない処理」の事
対応シェーダーは以下の通り。
Standard, Unlit/Color, Unlit/Texture, Unlit/Transparent,
Unlit/Transparent Coutout, UniGLTF/UniUnlit,

colorは単色, Textureはテクスチャをそのまま出力,
Transparentはアルファ値が使える(透明度/透過画像),
Transparent Coutoutは部分的に表示を消すパラメータが使える,
参考:Unity シェーダーチュートリアル / アルファとアルファテスト

「Standard使えるやん!」と思い.glbにして持って行った所…確かにスタンダートシェーダーは有効なのですが、バーチャルキャスト内のライトはデフォルトでは「RotationX,Y,Z が 0 の DirectionalLightが1つ」という仕様で、配信のホストの人がライト機能で変更しないといけません。
(使えない事はないですが”必ず意図した設定”にはできない)
中にライトを持ってゆけず、ベイクした結果もunityに依存した情報なので.glbには持ってゆけません。
つまり、現状は「unlitで頑張る!」という事になります。
ただ、裏を返せばライティングやシェーダーを割り切って、純粋なデザインやアイディアだけに注力してつくれるという事なので、面白アイディアが色々出てきやすくなるんじゃないかな?とも思います。

某VRメタバースではリフレクションプローブだの、GPUパーティクルだの、VRを意識した謹製シェーダーだの、AOマップだの、メッシュベイカー・LODで最適化だの、トリガーだのパーティクルだの…無限にこだわれるので、これはこれで沼でもある。

Standardshader(Unityでのプレビュー)
glTF18y10M18d19h12m52s.png
シェーダーは「Standard」
ライトは「RotationX,Y,Z が 0 の DirectionalLightが1つのみ」という設定です。

Standardshader(バーチャルキャストでのプレビュー)
VCtestModel.png
上記のモデルをバーチャルキャストに持って行ったときのプレビュー
色合いがほぼ同じなので、シェーダーは有効で、ライトの設定が一致してるのだと思います。
厳密にいうと、unityのプレビューとは若干異なりますが、ほぼ上記の設定ではないかと思います。

アニメーションの仕様

結論から言うと「Animationはtransformなら使える!」です。

そもそも .glb のエクスポート対象にならないコンポーネントは=アニメーションのキーにしても実質的な意味はありません。対象となるコンポーネントは以下の通り。

・MeshRenderer + MeshFilter (一番親以外の子供につけてください)
・SkinnedMeshRenderer (一番親以外の子供につけてください)
・Animation (一番親のオブジェクトに付けてください。回転はQuaternionのキーフレームを打ってください。移動・回転・拡縮に対応しています。BlendShapeは未対応)
・+Gamneobjectが必ず持つ transform (position/rotation/scale)

参考:glbファイルの作り方 の「Glbのエクスポート対象になるコンポーネント」を参考。
参考:アニメーションのエクスポート対応状況 の「注意事項」を参考。

注意点としてはtransformのRotationはオイラー角で指定するのではなく、クォータニオンで指定するという点。
この仕様ならゴリゴリの演出を考える必要はなく、数秒のループアニメーションが主になりそうですね。

アニメーションはblenderとUnityどっちで作る?

アニメーションファイル(実際にキーを打つ)を作るのは、Unityでanimationを作成すればOKです。
(blenderで設定する場合…blenderのアニメーションはエクスポートした際にUnityのanimationに置き換わるので、最終的には同じになります)
skyboxの雲の回転などは、空のゲームオブジェクトを回転のキーにしておいてオブジェクトを差し替えられるようにすると楽かもしれないですね。

その他Tips

Skyboxの設定
Skyboxの設定方法がなく.glbには入れる事ができないので、屋外のステージはSkyboxは自作する必要があります。
地面側はおまんじゅうのようにうまく閉じると良さそう?
Vカツ ハロウィンマップ

自作シェーダーは無理(18/10/19)
Skyboxは自作する必要あるので unlit/texture を作成し Cull Front を書き加えて Sphere に適用してもっていったところ.glbに置き換えた段階で通常の unlit/texture に置き換わっていました。
あくまで使えるのは unlit/texture で、unlit/texture のカスタムは使えないという事です。

blenderのデフォルトUVを活用する
skyboxを自作する場合、全天球の場合UV展開が難しくなります。
なので、UV球のプリミティブ作成時に「UVを生成」にチェックしておくとかなりやりやすくなります。
skybox.png

MaterialのTilingは無効になる
unlitのパターンテクスチャで床を作るという方針は難しい…
高解像度のパターン床が必要な場合、メッシュとUVで作った方がいいかもしれません。

全体の指針として
おそらく「unlitシェーダーだけでキングダムハーツを作る」という意識でアーティスティックにデザインをまとめると良さそうだなと思いました。
また、色合いがビビットカラーな見た目でも、面白い仕掛けがあればライティングとかカラーパレットは忘れても「配信としての面白さ」には直接関わらなさそうだなと思いました。
むしろ、配信者さんが沈まないような落ち着きのある空間を作るのが最難関だと思います。

某VRなんとかだと何でもアリなので、これくらい制限ある中でまとめる方が手に収まりやすいですね…

参考になるモデル

スター・オープンスタジオ
イブニング・オープンスタジオ
スカイ・オープンスタジオ
星の表現など、参考になると思います。

HOT LIMITごっこ
波のシェーダーが書けないので、半透明のメッシュを回転させて波を表現

【Vキャス背景】荷馬車(アニメーション)
アニメーションの継ぎ目が分からないアニメーションで移動を表現しています。
電車なども同じ方法で表現できそうです。