VR住宅「Abstract:Coast」製作記
記事としていろいろ残しておきたいなー、ということで新作ワールド、Abstract : Coastの制作についてまとめたいと思います。
自己紹介
るらです。VR空間で寝泊まりしてるCGアーティストです。
VR睡眠を3年続けた結果、先日ついにプレイ時間が10000時間に到達してしまいました。
どっぷりバーチャルに潜ってるユーザーということもあり、快適に過ごすための自宅向けワールドを制作・販売したり、イベントものだとShaderFesのワールドの制作をしたりなどして遊んでます。
Abstract : Coast
さてさて、今回の自宅向けワールド、Abstract : Coastはその名の通り、抽象的な海岸をイメージして制作しています。あえて海や水は使わずに岩とコンクリート素材で表現してるのがポイントですね。
また、今回はエリアごとにテーマをガラッと変えているのも大きなポイントです。
気分とシチュエーションに合わせて使い分けるためにいろいろ用意しました。
私の販売しているワールドはどれも身内で使うために作っている側面もあるので、実用に即したものになっているかと思います。
私のVでの生活
ちょっと脇道にそれますが、ここ最近の自宅ワールドでの私のVでの生活スタイルを書いておきます。
23時~24時頃にVRCにInして、フレンドとワールド巡りやゲームワールドなどで遊んで、いろいろ見たしそろそろ帰るかー、となって他のワールドから帰ってきたあと、みんながまだ元気な場合は明るい部屋で遊びつつ、今日は疲れて動画でも見ながらまったりしたい、というときは暗い部屋ですごします。
それも終わって流石にもう寝なきゃまずい(深夜03:00)となると寝室に行って朝まで寝るという1日です。
とまぁ、こんな生活を3年以上続けてるとワールドにあると楽しいもの、快適さに必要なもの、どういった構造だと使いやすいのか、などの知見が自然と溜まっていきます。
私はどちらかというとゲームアート側のクリエイターなので、アート的、デザイン的な見栄えを提供することはできますが、建築の知識というものは全然ありません。
なので建築についての理屈だったことはわからないですが、VRの空間に関してだけは、自然と蓄積した経験で空間を製作していけるんじゃないかなー、と思ってます。
ワークフロー
さてさて、ワールド製作の話に戻りましょう。
どういった手順でワールドを作っているのか、というのをそこそこ聞かれるので、具体的にざっくり説明してみます。
全部解説しきれないため、専門的な用語とかは説明無しで出すので、わからないのは読み飛ばしてもらえれば!
-----------スタート(年末年始ぐらい)-----------
ふわっとした構想・リファレンス収集
GravitySketchでラフ制作
Unityにエクスポート
軽くライティングを設定
VRCにアップロードしてラフ確認①
ガタガタなメッシュをBlenderで清書①
GravitySketchに清書モデルをエクスポート
清書モデルにラフスケッチをオーバードロー
Unityにエクスポート
軽くライティングを設定
VRCにアップロードしてラフ確認②
-----------ここまでラフ-----------
Blenderで清書②
躯体メッシュ作成(本番用)
モジュラー用メッシュ(仮)作成
モジュラー用メッシュ(仮)をコレクション化
モジュラーのコレクションをBlenderで配置
躯体メッシュをUnityで配置
モジュラー用メッシュ(仮)をUnityでPrefab化
エディタ拡張でモジュラーのコレクションをUnityに配置
いい感じだったらモジュラー用メッシュを本番用メッシュに差し替え
-----------ここまで仮テクスチャ-----------
トリムシート作成
主要マテリアル作成
シェーダー作成(岩・布など)
特殊マテリアル調整
テクスチャリング(UV展開)
ライトマップ展開
ライティング調整
インテリア製作・配置
GeometryNode検証
エフェクト製作・調整
プローブライティング調整
オーディオ調整
データ整理
ポスター作成
動画作成
デバッグ依頼
モデルルーム用データ作成
内覧会準備
といった作業がだいたい全部でしょうか。
紆余曲折ありながら悩みながら作ったりもしましたが、私のやってることはだいたい網羅できた…はず!
全部説明しようかな、と思って書き始めましたがこれはちょっと無理ですね。面白そうなところを抜粋して解説していきます。
ワークフロー解説(多いのでちょっとだけ)
GravitySketch
ShaderFesの時にも使っていたGravitySketch、かなりお気に入りツールとなったのでワークフローにガッツリ組み込んでます。
マルチプレイが楽しいです。
他の人が作ってる部屋に勝手に壺置いたり、「これ便利そうだからコピーさせて!」って素材をもらってきたり、勝手に柱を足したら思いの外良くて採用されたり、人の建物の上に鉄球クレーンを配置してみたり。
なかなかカオスな様相でしたが、自由な創作という感じでのびのびラフ制作ができました。
VRのグレーボックス制作には最高のツールですね。Steamで無料なのでみんなも試してみて…!
コレクション
モジュラーアセットを使うワークフローで役に立つのがBlenderのコレクション機能です。
Blender使ってても意外と知らない人多いかと思うので、ワールドを作る方は是非試してみて下さい。とても楽になります。
トリムシート
トリムシートに関してはこちらの記事で説明してるので詳細は省きます。
気になる方は是非こちらも!
今回は面白そうなとこだけピックアップして説明しようと思います。
インテリアとして配置してある球、こちらはトリムシートを使って製作しています。お皿もですね。
なのでこれは、テクスチャ的な追加コストはほぼゼロなエコなアイテムです。
こういったものにユニークテクスチャをたくさん割いてしまうとワールド容量が肥大化してしまうので、高い解像度を維持したままちょっとしたものを追加したい、というときにはトリムシートは便利なテクニックですね。
壺は実は大元のメッシュ形状は3種類しかありません。
それらのトリムシートのUV展開を変えたり、スケールを引き伸ばしたりすることでたくさんバリエーションがあるかのように見せることができます。こちらは工数削減的なエコ手法です。
エフェクト
エフェクトとしてワールドの一部にはダストパーティクルをいれてあります。意外と空気感を表現するのに重要だったりします。
全域にはいらないので、ダストが見えそうなところにほんのり使うのがポイントですね。
こちらはHibernationの時に制作した流体シミュレーションをベイクした炎のパーティクルです。
動きがあるものが少しあるとワールドが映えていいですね。
ゆらゆらしてて見てて楽しいエフェクトですね。
こちらはパーティクルとトレイルを使用して作っているものです。
岩シェーダー
岩はでかいです。
でかいということはテクスチャの解像度が粗くなります。
遠くで見る岩はそれほど問題ありませんが、VRでは近くで見ます。それも超近くで、です。
それに耐えられる解像度のテクスチャを用意するにはおそらく8Kあっても厳しいでしょう。
ではタイリングさせればいいのでは?
となるかと思います。が、ただ単純にタイリング数を上げた場合、岩が本来持つ形状によるエッジ部分の汚れなど、そういった情報が死んでしまいます。超ハイポリにすればその限りではありませんが、負荷的にもあまり無視できない量のポリゴン数が必要になってしまいますね。
また、テクスチャによってはタイリング感が目立ってしまうという問題も発生します。
色々頭を悩ませた結果、ハイポリからベイクした曲率やAOなどの情報をシェーダーで合成することにしました。
ShaderFesで展示していた岩と同じ手法ですね。
自作のマスクマップを使っています。
つまりどういうことかと言うと、タイリングとは別に、ハイポリの岩から持ってきた岩の形状特有の汚しや陰などをシェーダーで合成しているということですね。
とはいえ私も手探りでやっているのでもっといい手法があるよ、という方がいれば是非教えてほしいです!
プローブライティング
ライトプローブによるライティングは重要です。
細かいものまでライトマップを使用してベイクすると、ライトマップの枚数が膨大になってしまいがちです。
焼くべきオブジェクトと焼くべきではないオブジェクトをしっかりと見極めるのがポイントです。
細かいもの、ライトマップを使う必要がないものに関しては、ベイク用の影だけ落として光の当たり方に関してはライトプローブの影響を利用する、というのが基本です。
さて、私がよくやるプローブライティングのちょっとしたテクニックを紹介します。
プローブライティングは周辺のライトプローブからの影響を利用してオブジェクトの色味を馴染ませることができるものです。
しかし、ライトプローブの影響次第では色味がおかしくなることがあります。
ライトプローブの位置で調整するのが王道なのですが、VRChatのようなアバターが入ってくる環境だと光の影響がコロコロ変わってしまうのでよくありません。
そこで、私が勝手に「ProbeAnchor」と名付けてる方法を使います。
空のGameObject(ProbeAnchor)を作成し、対象のMeshRendererのAnchorOverrideに入れます。
これによって、対象のオブジェクトのライトプローブの基準位置をProbeAnchorに移すことができます。
そしてこのProbeAnchorの位置をちょっと動かすことで、光の当たり方を制御することができます。
ハック的な方法ですが、かなり細かい調整ができるのでおすすめの手法です。
また、ライトプローブの影響を1つのProbeAnchorにまとめることでBatchingされやすくなる、というのも良いポイントです。
プローブライティングには欠点があって、違うプローブからの影響を受けるオブジェクトはBatchingされません。
ライトプローブを置きまくってプローブライティングをしすぎると、重くなってしまいます。
これを一つの影響だけ受けるようにまとめてあげるのはBatchingに効果的なはずです。たぶん。
データ整理
見落とされがちな項目ですが、人が触るデータはなるべく綺麗にしておく必要があります。
シーン内で綺麗に見えててもヒエラルキー内で雑多に散らかっていたりするのはよくないですね。
私も自分しか触らない作業中は散らかりますが、人に渡すデータは綺麗にしてから渡すのは大事なことです。
他にはFBXのモデルが回転角が-90とかになってたり、スケールが0.01とかになってたり…
個人的にはオブジェクト名はちゃんとしててもメッシュ名にCubeとかCylinderってついてるのも嫌なのでオブジェクト名とメッシュ名は全て合わせるようにしています。
とまぁ、こんなことをしていますが、時間がかかる割には表に見えるものでもない悲しく辛い作業なので、ここで少しだけアピールすることを許して下さい〜!
まとめ
技術的にもっと書きたいことはありますが、だいぶ長々と書いてしまったのでここらへんでまとめて今回はこのあたりにしておきましょう。
最近はメタバースメタバースと騒がれがちですが、VR住宅に関しては、実際に暮らしながら技術と経験と知見とを少しずつ積み重ねていくのがとても大事だなぁ、ということをとても実感しています。
私は今後もVRで地(コライダー?)に足をつけて製作を続けていきたいと思いますので、VirtualFoxDesignStudioをよろしくお願い致します。
ワールドはこちらで販売中です!
記事執筆時点(2022/3/4)で100名以上の方に購入していただきました。
皆さんのおかげで今後も作家としての製作が続けやすくなります!大変感謝です!