概要
こんにちは、VRChatでワールド制作などをしているサックーと申します。
この記事は、VRChatで2022年11月20日(日)~ 11月27日(日)に開催された、クロスプラットフォーム対応 イベント・アバターの展示会「じゃぱんくえすた」のうち、自分が制作を担当したAvatar World -秘境 山-の制作振り返りになります。
こんなことを考えて作ったとか、どこをイメージしたとか、多少のギミック紹介になります。技術的な話は限りなく少なく、自分の山へのこだわりについてがほとんどですのでご了承ください。
構想段階
自分が制作に入った時に伝えられたものは、「原始の世界でアバターたちが生活しているような展示」をしたいとのことでした。
当初は竪穴式住居を置いたりと縄文時代あたりを明確に想定されていたのですが、実際に置かれるアバターたちは基本的に現代の装いであることが多いので、「生活している」感じは出しづらいのではということになりました。
そこで少し方向性を変更し、
- 時代を明確に定めずざっくり江戸以前くらいの文明観とする
- より大自然を前面に出したワールドとする
- 少しファンタジー(不思議)要素を入れる
- 「アバターたちが生活している」から「VRChatterがワールドで遊んでいる」イメージとする
とすることにしました。
また、いろいろなタイプのアバターに対応できるように草原(森)・海岸・洞窟・冬景色のエリアが欲しいという希望もありました。
ただ、自分が山を好きなこともありクオリティアップのためにも冬景色と山岳エリアを差し替えて
- 草原と山
- 海岸と洞窟
という組み合わせで二つのワールドを作ることになりました。
そのうち草原と山を自分が担当し、海岸と洞窟(のちの島)をyuki-jpさんにお願いすることになりました。(引き受けてくれてありがとうございました)
ところで話はそれるんですが、草原を作るとなった時点で自分の中ではEstyさんのことしか頭にありませんでした。
VRChat内の草原の表現で自分が一番好きだったのがEstyさんの「Breezing in the epilogue - 終末のそよ風」だったからです。
World: Breezing in the epilogue - 終末のそよ風 by EstyOctoberhttps://t.co/2rtxV6jAZV
— EstyOctober (@EstyOctober) November 18, 2021
新しいワールド作りました!
ふんわり光る生物が、そよ風に乗って泳ぐ、
小さな草原のワールドです。
やわらかい風を感じてもらえたら嬉しいです。
クエスト対応です。#VRChat #VRChat_world紹介 pic.twitter.com/luBurPN1jP
しかもなんとQuest対応している!ぜひ使わせてもらいたいですと直談判して協力していただけることになり、今回のワールドでも素敵な草原を実現できました。
実はその時点ではこの草は汎用的に使えるものではなかったのですが、Terrainに合わせてメッシュを生成する機能を作ってくださり、非常に助かりました。
本当にありがとうございました!
モック作成
イベントの告知をするにあたってワールドのイメージを伝える必要があるので、イラストをなおちーさんが描いてくださることになていました。
それにあたって僕の方で「こういう画を作ります」というのを伝える必要があり、ばらばらの状態でいくつかの場所を作成しました。
この時点でレオさんとEstyOctoberさんがいくつかモデルを作ってくださっていたのでそれを使っています。
こんな感じで思うままに作っています
これを基になおちーさんに描いていただいたイラストがこちらの告知でお披露目されています
私達のワールドについてご説明します!
— じゃぱんくえすた🦊ワールド再公開! (@Japan_Questa) August 15, 2022
じゃぱんくえすたでは、それぞれ異なる役割とコンセプトを持った3つのワールドを公開します。
エントランス・イベント紹介・アバター展示のそれぞれの世界で、色とりどりの楽しさを体験していただきたいです!#じゃぱんくえすた pic.twitter.com/BQisDULy3y
実際のワールドで使った場所としてはつり橋のところしかないんですが、3枚目の二重稜線の間の池は個人的に結構気に入ってはいました。
あと1,2枚目の白いPlaneは雲海のつもりで、Skyboxの違和感を隠すために雲海で下を見えないようにできないかななどと考えていました。
途中経過(少し)
実際のシーンを作っていくにあたって、まず全体の流れを想像しました。
最初に山をバックにした草原があって、登っていきながら途中に滝があって山頂に至る、みたいなざっくりとした構成ができました。
そしていきなり飛ぶんですが、大体の形ができた状態のスクショがこちらです。Terrainの形状はこの時からあまり変わっていません。
途中経過は以上です…
場所ごとの解説
ここから順路に沿って、各場所の話をしていこうかなと思います。
入口
入口は木々に囲まれているかつ霧に包まれて視界があまりないようにしようと考えていました。
BGMもまだ流れておらず環境音のみで静かな雰囲気です。
霧が晴れると同時にロゴが現れ、タイトルコール後にBGMが流れ始めることで一気に盛り上げる形にできたかなと思っています。ちなみにロゴのモデルとアニメーションは、神域担当のりーふでさんが作ってくれています。
ちなみにFogが段々晴れるギミックは最初期から入れたいと思ってたんですが、Vketで先を越されてしまって若干悔しかったです。
若干の工夫としてはSkyboxのExposureも同時にいじっているところがあります。
Unityの標準のFogはSkyboxに対してはかからないため、そのままだと結構残念な感じになってしまいます。
そこでExposureを上げて発光させることでいい感じにごまかしています。(上図参照)
技術的には
RenderSettings.skybox.SetFloat("_Exposure", _exposure );
のようにRenderSettings.skybox
でSkyboxのマテリアルを直接いじれます。
これを使ってFogのDensityと連動して値を変更しています。
ちなみにここで上を見たときの画は結構お気に入りポイントだったりします
草原
さて入口を抜けると左手に草原が広がります。
個々の景色はモデルがありまして、山梨県の瑞牆山のふもとにある「みずがきやま自然公園」からの景色を若干イメージしています。
草原から森になり、急に断崖になっているあたりですね。今思うともうちょっと岩肌感出せばよかったです。木を生やしすぎました。
https://www.takibi-reservation.style/media/fieldreport/chubu/66441/
そして草原の地形としてはいくつか小さな丘があるようなものになっています。
これはEstyさんからのアドバイスで、のっぺりさせないことで遠近感を出し、より広く感じるようになっています。
また真ん中の丘にぶっ刺した謎の岩は、なんだろうと思わせて草原に足を踏み入れてもらうだけのための存在です。
というのもこのワールドでは足音のギミックを入れており、場所によってその音も変えているためそれに気づいてもらいたかったからです。
こちらはPMのばーゆさんの意見でした。
さらに左奥に巨大な岩が浮遊して回転しているのが見えると思いますが、これはあそこが山頂でありゴールであることを示すために置いています。
池とお社
草原を抜けた先には池とお社があります。
こちらにもモデルがありまして、長野県は上高地の明神池です。
あの辺りは水が本当にきれいで、滾々と水が湧き出ているところをずっと見ていられる気がします。
ところでワールドとしては意味深なお社になってしまったと思うんですが、何もギミックはありません()
川とつり橋
さて池の脇あたりには川が流れていてつり橋で渡っていくようになっています。
ここのこだわりの一つに音があります。
川に関しては3つ、つり橋には2つのAudio Sourceを置いています。
それぞれ素材としては同じ音を使っているのですが、実はPitchを少しずつずらしています。
ちょっとずれた音が重なることで重層的な表現にできているかなと思っています。
ただし、これがやっていいことなのかよくわかってないです…
ほんとはこちらで紹介されているようなアンビソニックス形式の素材とか使えたらいいのかなと思ってはいます。
そして川には飛び込み音のギミックを設定していて、自分だけでなく他の人が飛び込んだ時も音としぶきが上がるようになっています。
ただ心残りとしてはLocalPlayerとRemotePlayerの当たり判定位置が違うことで、変な位置で反応しちゃうところですね…
LocalとRemoteのプレイヤーの当たり判定が違う問題結構深刻
— サックー@XR (@VRC_Sakk) November 30, 2022
どうにかならないものか… pic.twitter.com/dNotltQuZq
さて、つり橋についてはレオさんにかずら橋というのをベースに作っていただきました。
徳島県三好市の山中で昔から使われていたもので、つる植物を使って作られた野趣あふれる橋となっており秘境にぴったりかなと思っています。
ゆっくりと揺れるアニメーションもつけてもらったので、ギシギシという音を合わせることで結構スリルも出せたのかなと思っています。
断崖の道
つり橋を渡った先には断崖沿いの道があります。当初は道幅は半分で柵もありませんでしたが、危険すぎるということで今の姿になりました。
ここは本当は北アルプスの黒部川沿いにある下ノ廊下っぽくしたかったんですが、あまりに難易度が上がりすぎるため断念しました…
自分自身はまだ行ったことがなく、いつか行きたいなあと思っています。
あと梯子を上るとくえすたちゃんが「みゃん!」と言っているのは、不思議パワーでプレイヤーを上に運んでくれているから…という設定です。
涸れ沢
このワールドにおける山ポイントその1、涸れた沢です。
これは山でよくある、降雨後や雪解けの時期にのみ水が流れる沢をイメージしています。地味すぎて自前の写真を見つけられませんでした()
もうちょっと岩をゴロゴロさせたら分かりやすかったかなとは思っています。
https://www.yamakei-online.com/cl_record/detail.php?id=94483
あとこういう丸太2本渡しただけの橋も割とあるよねって思ってます。
熊笹
山ポイントその2、熊笹です。
日本の中山帯(1500m前後)には熊笹がとても多く生えている印象があります。
しかしそんなモデルは見当たらなかったのでレオさんに作っていただきました。
テクスチャは自分が実際に山で撮った写真を使ってもらっています。
本当はもっと敷き詰めたかったんですが、負荷がすごいことになるので一部にとどめています…
滝
熊笹を抜けると2本目のつり橋が滝の近くにかかっています。ここはモデルとかなく適当です。山にある滝って実際は結構しぶきが散りまくっていて、こんなしっかりと水が流れていることは少ない気がします。
あと観光目的以外でこんな滝の近くに橋をかけることはなさそうですよね…
滝の音の減衰はいじっていて、いい感じの場所で急に減衰するようにしています。実際の音もちょっと角を曲がったり、高くなったところに登るだけで一気に音が大きくなる印象があります。
あとは滝つぼのところは一応くぼませています。ヤタノさん企画のかくれんぼで、この滝つぼに隠れてくれた方がいて面白かったです。
雪渓
滝を超えると雪渓が待ち構えています。当初はこれが雪だということを認識してもらえないことがあったので、くえすたちゃんにしゃべってもらうことで雪だと主張しています。
あと足音も溶けかけの雪の音にしてそれっぽくしました。
北アルプスだと夏山でも結構雪渓が残っているところがあると思います。この写真は8月下旬に槍ヶ岳を目指していた時のものです。
ということでこのU字谷の景色は槍ヶ岳近辺である槍沢をモデルにしています。
とても地味な山ポイントその3がありまして、モレーン丘をなんとなく作っています。
氷河が削ってきた土砂が氷河の末端で盛り上がるように溜まり、丘のようになったものですね。実際に槍沢にもあります。
あとは適当に丸太が雪に埋めれてるのも道案内も兼ねて置きました。山だとぬかるみがちなところに足場として丸太が置かれてることがあります。
二の鳥居
急に二の鳥居になりましたが一の鳥居は入口のところのやつですね。
信仰の対象となっている山(山がご本尊?)には登山道がすなわち参道であり、途中いくつかの鳥居があることが多いです。
ただしこれはルートを示すためという側面もあります。当初なんとなくわき道を生やしただけだったため、多くの人が雪渓を直進することとなっていました。
ここから雪渓を狭め、岩を大胆に置き、鳥居を立てて灯篭を置いて、とどめにくえすたちゃんを雪渓の上に出してふさぐことで、ようやく導線を確保できました。ヨイコノさんアドバイスありがとうございました!
ハイマツ
山ポイントその4、ハイマツです。
森林限界を超えた先の稜線にあるのはハイマツしかないだろうと思ってこれも作ってもらいました。
下の写真の山肌に見えるのは大体ハイマツです。険しい山肌に這うように生えています。これも本当はもっと生やしまくりたかったですが(ry
山頂への稜線
いよいよ標高が高くなり、切り立った稜線にたどり着きました。ここの道幅も半分しかなく(ry
ここは北アルプスのジャンダルム周辺をイメージしました。(一般登山道最難関ルート)
こだわりとしては落石音が鳴るギミックを仕込んだところですね。
シンプルに経路上に置かれたコライダーに当たるとカラカラと岩が転がる音が聞こえてきます。
本当は土煙のパーティクルなんかも出したかったです。
山頂
いよいよ山頂にたどり着きました。ワールド内設定としては三の鳥居とメインのお社という感じになります。
山頂に小さな祠がある山は結構ある気がします。
また展示会系ワールドのお約束として他会場へのポータルがあります。
最初は常時ポータルを出していたのですが、いかんせんスペースが狭くて大人数だと危険だったため切り替え式にしました。
そのスイッチとした祠に気づいてもらうために、パーティクルと音で風が吹いてる風にしてみました。
そこからその下のくえすたちゃんのセリフに「風が呼んでる気がする…」などと入れてみたのですが、まさか雨降りさんの手によってあんな素敵なストーリーが形作られるとは思ってませんでした。
大正ワールドに隠された前日譚をまだ読んでいない方は是非読んでください!
Skybox
このワールドのスカイボックスは自分が実際に山で撮影した写真を使っています。
Insta360 X3という360度カメラを使って、長野県は浅間山で撮影しました。360度写真として書き出した上でUnityではTextureShapeでCubeを選択すればきれいに使用できます。
10月に行ったのですが、カラマツがきれいに黄葉していて針葉樹も黄葉するのかと衝撃を受けました。
これをSkyboxにするにあたり、Terrainに生やす木の葉っぱも黄葉させてみました。
軽量化について
今回のワールドはもちろんQuest対応しており、そのため負荷と容量の両面での軽量化は欠かせませんでした。
そこでやったことを一部紹介します。
基本的には自分が過去書いたワールドのQuest対応記事の内容と一緒です。
容量
まず展示会イベントの特殊な事情として、出展者からの入稿物の容量があるというのがあります。
今回アバターワールドは1ワールド当たり30体置く想定で、Androidプラットフォームでのビルド容量が1体当たり2MBという制限での入稿をしてもらいました。
つまり入稿物だけで最大60MB必要とし、ワールド側で使えるのは40MBとなりました。一昔前のQuest対応ワールドは50MB制限だったので、おおむねその感覚ですね。
大体のワールドに置いて容量の多くを占めるのはテクスチャだと思いますが、今回はそうでもありませんでした。
それはレオさんが多くのモデルを共通の小さなトリムシートを使いまわせるように作っていただけたのが大きいです。また、ライトマップもベイクのパラメータを調整して2枚に抑えることができました。さらに出展者の皆さんが制限よりも軽量なものを入れてもらったおかげも大きいです。結局34体になりましたが問題なかったです。
なのでそれほど容量に関しては気にすることなく作れたので良かったです。(上記記事の一般的な容量削減はしています。)
その分をSkyboxのパノラマに回したり、いろいろな音素材を仕込むことができました。
ちなみに圧縮後の各素材の容量を調べるにはこちらのツールが良いとEstyさんから教えていただきました。EditorLogでは圧縮後の個々の容量は見れないので非常に便利です。
ツール紹介:アバターやワールドの“大きさ”を調べられる lox9973 さん作成の AssetBundleStat
— naqtn(なくとん) (@naqtn) June 21, 2022
特徴:
- 各アセットのバンドル中での圧縮されたサイズと圧縮前のサイズの両方を表示
- 大きさを視覚的に面積で表示
- 自分が作ったものだけでなく、ダウンロードしたものも調べられる pic.twitter.com/lll52Jqcai
負荷
負荷は今回かなりきつかったです。そもそもTerrainが重いということ、開けた地形で遠くまで見えることが影響したかなと思います。
特に一度に描画するポリゴン数が実は厳しく、様々な対策を行いました。PCにおいてポリゴン数は大した問題にならないのですが、Quest単体で一度に描画するポリゴン数が100万を超えると一気にパフォーマンスが落ちるという問題があります。そのため確実にそのラインを(プレイヤーのアバター分も考慮して)下回る必要がありました。
LOD
一番お手頃なのは遠い距離のものを非表示にすることで、基本的にはLODによって実装できます。
スクリプトによる距離で表示切替
アバターも多くのポリゴンを持つため非表示にしたかったのですが、アバター名等の看板で使用していたTextMeshProが自前でフォントデータを用意しなかったためLODが使えませんでした。
またLODは複数選択で同時編集ができない、表示距離がメッシュのBoundsによって変わるといった問題もあり、アバターに対してLODを用いるのは断念しました。
そこでU#によってプレイヤーとの距離で表示切替をする仕組みを作りました。
ただし距離を計算するのは比較的重い処理なのでそれによる負荷の方が高くなってしまう可能性もあったため、ちゃんと検証してから用いました。
表示を切り替える距離と距離判定の更新間隔、切りかえる対象を設定できます。対象を見指定の場合はデフォルトで子階層のもの全部になります。
Terrainの調整
ポリゴン数のうち多くを占める木のビルボード開始距離を短くすることを行っています。当初はLODで3段階設定していたのですが、まったく追いつかなかったので泣く泣くビルボードを使いました。
これはPCとQuestで値を変えています。
ちなみに遠くまでメッシュで表示するとこんな感じです。当初は手前だともっとハイポリモデルできれいな感じでした…
あとは負荷の高かった熊笹をQuestでローポリ版に差し替えてりしています。
このあたりの調整をツールで自動化できなかったのでSwitchPlatformが結構厄介でした。
草の密度を下げる
あとは単純にポリゴン数の多い草の密度を下げました。密度が高い方がきれいなのでPCとQuestで入れ替えています。
まとめ
半分以上山の話をしていた気がしますが、そのくらいの気持ちでこのワールドを作ったんだということが伝われば幸いです。
ワールド自体は現在再パブリック化しており、いつでも訪れることが可能です。たとえイベントが終わったとしても永く愛してもらえるワールドを作ったつもりでありますので、ぜひまた足を運んでいただければ嬉しいです。
最後に、制作に際し助けていただいた運営の皆さん、入稿いただいた出展者の皆さん、そしてワールドを訪れていただいた皆さんに感謝申し上げます。
ありがとうございました!
隠し要素 ※ネタバレ注意
こういうイベント系ワールドを作れるとなったらやりたいことの一つとして、隠し要素がありますよね!
とはいえ自分はそんなたいそうなことをやる気はなく、この第二山頂をそれにしようと思っていました。
当初こちらをゴールにしようとしていましたが、途中で現在の場所に変更しました。
こっちの道は完全にサポート外ということで道幅も狭く柵もありません。さらに登り方も一度トラバース(横滑り)して裏から回り込む必要があるようになっています。
アスレチック好きのVRChatterなら問題ないだろうと思っています()
いざイベントが始まってみると、他のワールドには何やらギミック付きの隠し要素があるらしいとツイッターを見ていて知りました。隠し要素は運営内でも共有されてなかったんですよね。
そこで自分もなんかやりたくなり、ぱっと追加実装しました。
ーーーーーーネタバレーーーーーーー
断崖の梯子を上って左にいる子猫がお母さんを探しているので、
第二山頂の親子猫のところに連れて行くと、感謝とともに夜を迎えることができます。
この夜の状態の見え方は実際の山の夜に近づけています。月明かりのない場合は本当に先が見通せなくて結構怖いです。まだ体験していない方はぜひやってみてください。
ところでこちらの猫たちなのですが、他の猫地蔵とマテリアルが異なっています。一応ヒント兼つじつま合わせのつもりでした。
そして会期限定ギミックとして、イベント終了時に強制的に夜になるものも仕込んでいました。
普通に途中を歩いていて夜になる体験はその時にしか味わえないモノだったので、もし居合わせていた方がいたらラッキーです!
おまけ じゃぱんくえすた全体の世界観について勝手な考察
企画初期段階から「じゃぱんくえすた」という一つのイベントを構成する5つのワールドが、共通の世界観の上にあるといいよねという話も出ていました。
一つは共通のオブジェクトを置いたら良さそうということで、Estyさんが作ってくれた謎の文字っぽいものが刻まれた岩が各ワールドで使われています。
その使われ方はそのワールドの時代(神秘の強さ?)を表していて、神域では超巨大であり、秘境では小さくなりながらも輝きを失っておらず、大正では普通の石とあまり変わらなくなっていたりします。
あとレオさんの祠や猫地蔵が全ワールドにあることも一続きのの信仰があることを示唆していますね。
そしてそれらを決定づけているのがくえすたちゃんではないでしょうか。時代を超えて存在し続けているくえすたちゃんが5つのワールドを串刺しにしてくれています。
さらにその補助をしてくれているのが雨降りさんによる前日譚ですね。くえすたちゃんが各ワールドでどのような過ごし方をしていたのかを垣間見ることができ、ますます想像が膨らむようになっていました。
以上の話は、はっきりみんなで合意した内容ではないので、僕の解釈に過ぎないことご留意ください!!
皆さんもぜひ世界感含め楽しんでいただければ幸いです!