雑文録

とりあえず書いたものを置いておく用

■Blenderを使わなくても作れる!意識の高くないワールド製作 (VRChat)

f:id:karina-kamei:20210619215214p:plain

◆これは何

自分が今までに作ったワールドの製作過程をサンプルとして、

ワールド製作に必要な作業を最初から最後まで一つの流れとして示す中で、

実際に行き詰った部分や別解などをピックアップしていく情報資料です。

 

※資料としては太字だけ読んでくれたら良いです。

字の薄い部分は基本的に長いしノイズになるので、気になった※の見出しだけドラッグして読んでください。

 

◆なんで作った

アバター改変と比較して、ワールド製作は一般にハードルが高いものと考えられがちです。散らばった雑多な情報群はwikiや個人ブログ、アドベントカレンダーやquitaなどに知見として蓄積していますが、何の知識もない状態からワールドを作り始めて個人的に満足行く状態でパブリッシュ(正確には、コミュニティラボに登録)するまで、を包括的に示してくれているサイトは少ないと思います。

  

これはワールド製作に限った話ではなくアバターでも同じことだとは思いますが、好きな市販アバターを購入して画像編集ソフトでカラーリングを変化させたり、アクセサリーを付加することで気軽に個性を出すことができるアバター改変と比較して、とりあえず完成させるという部分のハードルは高いと思……いや高いです、確実に。

 

だからアバター改変と同じくらい気軽に自己を表現できるように、これからVRで好みの場所を創りたい人の一助となれば良いなと思って書きました。

 

※嘘です。

自分が行ける世界を広げるためにコレを書いてます。行ったことがない世界を求めてVRに訪れたのに、フレンド達が集まるのは変わり映えのない同じワールドばかり。実際にワールドは沢山存在するけど巡るのは一人きりで、それならキャラクタークリエイトができる別のオフラインゲームと変わらないんじゃないか?みたいな思いがあり、

いつもの仲が良いメンバーで集まってのんびり過ごすにせよ、そこがいつもと変わらないワールドではなく“いつメン”の誰かが製作途中で、訪れるたびに更新が入って景観が変化していくワールドであったりだとか、そこがフレプラなら普段とは違うワールドの持ち主でインスタンスが開かれることで、『いつものメンバー』に変化が生まれたりして欲しいという願望、嘘、目的で書きました。

 

◆『海と牢獄(sea prison)』の製作過程

 

 

何故そのワールドを作るのか?具体的には作った場所で何をしたいのか?を考える 

・見たい景色があって、それは既存のワールドに存在しない

・フレンド達に来てもらう、何かの用途に使う『自分の所有する場所』が欲しい!

など、何かしらの理由があってワールドを作りたいのだと思います。後者の場合はシステム面での実装が幾つか必要な場合もありますが、自分の所有物でない場所でなら参考元になるワールド、或いは情報を聴くことができる界隈内の知り合いが居ると思うので任せます。

今回は『海に行きたい』という理由でUnityのプロジェクトを立ち上げました。

海と言っても青い空!白い積乱雲!ベージュの砂浜と水着にビーチボール!みたいな海ならば幾つも良いワールドは公開されていて、にも関わらず自分がワールドを作りたいということは「そういう海に行きたいのではない」ということが判明します。

個人的な経験として生まれてから海に行った経験が数回しかなく、そのうちの一回の『夕暮れ時に一人で行った江ノ島の海岸で、缶ビール片手に好きな曲を聴きながら一駅分歩いた』記憶の海に行きたいのだという結論が出ました。つまり具体的には明るくない海岸を眺めたり、好きな曲を聴きながら歩いていたい』のでワールドを作るということです。

 

製作中にどの部分が自分の好みや目的に合っていて、どの部分がそうではないのかが明確であると、アバターと同様にワールドのどこを改変すれば良いかが分かりやすいです。今回はまず、なるべく海岸の距離が長い方が歩きやすいことから、プライベートビーチ的な狭い海岸よりも平行に海岸が広がっている海水浴場系の販売ワールドを探します。

その上で次項の販売ワールドを基盤に使用させていただきましたが、もうちょっと暗くて荒れた海の方が良いということで、後述のスカイボックスやライティング、ポストプロセシングで色合いや明るさを修正することが、この時点で予定されています。

 

①外観に向いた販売ワールド、アセットの選択 

一枚の地面とミラーを置いて、ワールドを立ち上げるまでの流れを記して頂いているサイトは沢山あり、実際それを自分も参考にさせて頂いてます。ですが自分だけのワールドを作りたい理由がある時に、わざわざ白紙のSceneファイルからVRChat用にワールドの設定をしていくのは面倒くさいです。今回は主に『海辺をモデリングするのがしんどい』という理由で、海岸の付属している家ワールドを探して使用させていただきました。

 

・『海辺の別荘』を購入

booth.pm

 

使用規約の確認:販売ワールドによっては全体公開(でデータを使用して)のパブリッシュを禁止されている場合もあるので規約を確認しておきましょう。この販売ワールドのアセットは海の家,fbxを使用しての全体公開が禁止されていますが、海や砂浜、ボール遊び機能などのデータの使用は許可されています。なので海岸の部分だけを使用させていただき、もし屋内などの過ごす場所が欲しくなった場合は別のアセットを用意します。

 

・販売アセット内のSceneファイルを開く 

ここでsceneファイルを直接弄る前に、control+Dでファイルを複製しておきましょう。(改変してから最初に保存する時にSave as Newを選択しても良いです)。後から元のsceneにあった元データを使いたくなる時があるので、改変する前のデータは残しておいて複製後のsceneファイルを弄った方が良いです。販売ワールドのsceneファイルを使用せずに一からワールドを創る際でも、最初のsample sceneをそのまま使っていると、新しいアセットのインポートの際にsceneが初期化されたりするので危ないです。

 

今回のワールドは全体公開する予定なので、規約で全体公開禁止の海の家.fbxを使用している部分はscene内から削除します。最終的に残ったのは海(水面シェーダー)と地面、フリー素材の波の音だけです。(これなら一から作った方が……と思うかもしれませんが、ワールドの縮尺や後述のVRChatの機能やライティング周りの設定など、とりあえず足し引きで形にできる雛形があると取っ掛かりになりやすいです。)

 

②アウトライン(だいたいの景色)の製作

どんな場所があると嬉しいかを考える。ある程度の広さがあるワールドであっても、基本的に絵になる(写真映えする)か多人数で集まって過ごしやすい場所が幾つか決まっていて、作る際にも使われる際にもそこが注目されやすいと思います。なので改変前のワールドにVRで実際に入ってみてから、それぞれの場所からどんな風景が見えると嬉しいか、という二次元的な絵作りをイメージすると何を改変すれば良いかが見えてきやすいです。

 

空間デザインとか導線とかの話は難しいので、実際に創ってみてから思うように行かなかった部分を、次に活かしたり手直ししていけば良いと思います。もしくは空間デザインが上手いと思った販売ワールドを、そのまま使用させてもらう(マテリアル変更や小物の配置で自分の好みに近付けていく)のも選択肢です。

 

この絵作りは自分が好きな写真や絵の景色だとか、実際に行ったことのある場所、映画やゲームで思い入れのある風景などを参考にすると良いです。今回は⓪で聞いていた好きな曲が映画のサントラで、その曲が流れていた際の景色がとても印象深かったので、それをイメージして景観を創ることにしました。(当然ですがゲームや映像作品は、後述のポストプロセシングを使用していることが多いので再現しやすいです) 

www.amazon.co.jp

 

ジャケ画から、全体的な色合いは暗い青緑/黒/薄緑ですね、地面は砂浜ではなく黒いゴツゴツした岩肌です。

(後から気付いたのですが、サントラのジャケ画?は海ではなく山でした。が、この時点で日本海側の景色がイメージできていたので、そちらを優先します)現時点でのワールドの景観から、その絵作りに近付けていくために必要な作業を行っていきます。

 

この時、一つの工程を終えるごとにアップロードして実際にVRで景色を見たり、自分のアバターで自撮りをしてみたりすると、行った作業で理想にどれくらい近付けているか、次に必要な工程が分かったり、単純に進捗が目に見えて嬉しいのでおすすめです。あとは進捗画像で興味を持ったフレンドが、次にテストしている際に訪問してくれるかもしれません。

 

・ゴツゴツした岩肌についてはBoothで瓦礫のアセットが安かったので採用。 

booth.pm

コピー&ペースト&rotation&スケールの-1設定で、別物っぽく見せて増やしていきます。(これは遠景用の建物などで単体のモデルを使い回すことでの容量削減、単純に複数のモデルを見つけてくる/作る手間を減らす際によく使われている方法だと思います。)

※rotation以外にも、スケールを-1にすることで左右対称に変形できます。

 

・スカイボックスの変更 

タオルクラウド

TowelCloud · Wiki · 飛駒タオル / TowelCloud · GitLab

今回の海岸のように地上に注目してもらいたい時は、情報量が少なめのスカイボックスの相性が良かったりします。その中でもタオルクラウドは自然に雲が流れていく景観、そして地平線や雲の色までを自分で設定できるという大きな特徴があります。

今回は青緑っぽい空が既存のスカイボックスに無かったこと、そして⓪の『歩いていたい』という用途において雲の流れという時間経過による景観の変化があることが大きな利点であったので、こちらを使用させていただきました。

 (この時に後述の『マテリアルの変更』も行っています)

※他のスカイボックスの紹介

AllSky - 200+ Sky / Skybox Set | 2D Sky | Unity Asset Store

基本的に情報量が多めなので、シンプルな部屋系のワールドとの相性が良いと思います。有料版と無料版がありますが有料版はかなりバリエーションが豊富で、情報量が多めの空ならこれを買っておけば好みのものが見つかると思います。ちなみに自分は持っていません。

Urban Night Sky | 2D Sky | Unity Asset Store

個人的に好きなスカイボックスです。冬の避難所、セロトニン工場はこちらを使っています。

使わない(quad、sphereなど):システム側でのスカイボックスを使わず、板や球面にエミッションをかけて後述のポストプロセシングでブルームをかけると、昔のアニメなどで使われていた逆光の眩しい空などが表現できたりします。他にも特殊なシェーダーを使ったマテリアルを張り付けたりなど、スカイボックスではできない表現を使うことができます。

 

・ライティングの調整

全体的な色合いはここで調整します。ひらけたワールドであればディレクショナルライトの色を、絵作りや先に選んだスカイボックスと合うように調整していけば良いです。

閉所(入り組んだ場所)のライティングに関して自分は少しばかりこだわる方ですが、これについて書くと一枚の記事でも収まらないので、ここでは割愛します。面倒であったらNoshadowのディレクショナルライトを一つだけ置いて、それで終わりでも良いです。

 

※ライティングの細かい話

とりあえず、

・屋外と屋内や、複数の部屋が隣接して存在するワールドなら、各種ライト周りのShadowをOnにしておく(屋外や隣の部屋からの照明が壁を貫通しないように)

・リアルタイムライトの場合はアバターの影が動いていると負荷が大きいのでPlayer,Playerlocal,Mirrorreflection(UI,UIMenu)の項目をoffにしておくか、逆にNoshadowにしてアバターの影が表示されないようにする(もっと言うとBakeしてライトプローブを設置するのが理想的で、屋内系の販売ワールドにはあらかじめ設定されていることが多い。同様にReflectionprobeやオブジェクトのStaticも設定されていることが多いのは、屋内系の販売ワールドが取っつきやすい理由の一つです)

・ライトベイク結果が変な感じになったら、ライトマップの解像度を10まで上げるかGenerat Lightmap UVsにチェックを入れてApplyのどちらかで解決します。特に後者はprefab(ワールドに置くやつ)ではなくfbx(3Dモデル自体)の設定なので忘れられがちです。

f:id:karina-kamei:20210619215927p:plain

スカイボックスと同じ項目から設定できるアンビエントライトは、アバターを照らさないことがあるので気を付けるアバターで使用率の高いarktoonなどは、ほぼディレクショナルライトのみからライティングを取得するので、ワールド自体のディレクショナルライトが存在しない/暗めの場合はアバター専用に別のディレクショナルライトを置く)スカイボックス依存にしない場合、ワールドの陰になる(ライティングで照らされない)部分の色合いをここで決めると良い。

・scene編集の左上にある太陽マークを押すと『ライティングを無効化した状態』のレイアウトに変更できるので、暗いワールドでの作業やライティングの影響の確認などに必須。

くらいだけ覚えておけばいいと思います。

 

後述のポストプロセシングや、オブジェクト自体のカラーリングでも色合いは調整できますが、スカイボックスなどと併せて『理由のあるライティング』でワールドの色合いを設定できると“作り物っぽさ”が感じられなくなって良いです(個人の好みかもしれない)ただし『暗いワールド(ホラーではない)』を作りたい場合はこちらで満足行くまで暗くしておいて、後述のポストプロセシングで視認性を上げると良い感じになる場合が多いです。

 

③ディティールの製作

アセットを探しましょう。絵作りのために欲しいものの現実での名前が分かっている(Boothなら素材データの3Dモデルから、アセットストアならグーグル翻訳で英訳して検索する)か、実際のワールドでこのアセットが欲しいと分かっていると見つけやすいです。

 

・オブジェクト(アセット)の追加

"Shouwa" 80's Japanese town model set - vol.2 Foundation | 3D Urban | Unity Asset Store

 堤防(地面の切れ目を隠すオブジェクト)これは上記の昭和アセットから。行くことができる足場の切れ目は作り物っぽさの原因になりやすいので、他にも遠景用のビルや山などを置いておくか後述のフォグなどを使って切れ目を隠すといいです(水上や空中に浮かんでいる、或いは地下にあるような絵作りのワールドでは考えなくて良いことですが)

・マテリアルを変更

Texture Pack Vol. 1 | 2D Textures & Materials | Unity Asset Store

アセットストアに結構あります。場合によっては購入した販売ワールドや家具などのアセットのマテリアルを流用しても良いかもしれません。とりあえずそれっぽい素材名のマテリアルをドラッグ&ドロップしてみて『おっ!』ってなるものがあれば、それで行きましょう(もし改変するのであればsceneファイルと同じ理由で複製しておいた方がいいです)

※シェーダーで見た目を盛る

SnowCover+TriPlanar系シェーダー - RAKURAI WORKS - BOOTH

今回は落雷さんのシェーダーで本来のマテリアルから、ディティールに少しだけ手を加えました。これもサブスタンスペインター等を使える場合は直接テクスチャを編集できるのですが、そうでなくても見た目を盛る方法はあるという話です。

 

◆屋内編

大体のイメージで作ったので瓦礫(海岸の岩)が大きすぎる気がする、かといってこれ以上小さくしてオブジェクト数を増やすと負荷がまずいことになる。そのため屋内をスタート地点にして、海岸を遠くから眺めることができるように方針を変えました。

 

※屋外から創るか、屋内から創るか

②③と②´③´の工程はどちらから行っても構いません。今回はやりたいことが海岸で歩くことだったので外観から創りましたが、もし初めてワールドを製作するなら……

個人的なおすすめは『内観から創る』ことです。何故かというと内観に使用するアセットの多くは『部屋/家ワールド』として、VRChatユーザーが過ごしやすいための設定や機能などが予めセットアップされており、とりあえずアップロードしてVRで景色を確認してから外観を創っていく方ができるので、モチベーション維持の観点からも良いです。特に機能面については販売ワールドがSDK2/SDK3のどちらに対応しているかで、できることが変わってくるので⓪のやりたいことに照らし合わせて最初に決めておいた方が良いです。

 

②´なんか暗い牢屋っぽい建物から海を眺めていたいな(これはイメージ元が幾つかあります)と思った。AmanekさんのRoom02(和室)のマテリアルを変更して、牢屋っぽく使わせていただくことにしました。

booth.pm

以前に創ったワールドのセロトニン工場ではRoom01を、冬の避難所ではRoom03を使用させていただき、大変お世話になっている作者さんです。丁度公開時のツイートがサムネイル画像と同じアングルなので分かりやすいかもしれない。

 

※部屋パーツの管理

複数のアセットや複製したパーツを管理する場合は『一階/二階』や『部屋1/2』などの名前で生成したゲームオブジェクト(Positionやスケールを0,0,0/1,1,1にしておくのを忘れないようにしましょう)の子にして、部屋ごとに管理した方が改築が行いやすいです。今回は今の『二階』にあたる部分を先に作ってから、もう少し高い位置から海岸を眺めたいということで『一階』を生成、後から『二階』のゲームオブジェクトごと最初の部屋を上に移動させて二階建てにしました。一階二階を繋ぐ階段のエリアは窓と反対側の壁と一緒に『階段』の名前のゲームオブジェクトで管理して、一階と二階で上下対象ではない階段へと繋がる部分の位置を調整しました。イメージとしては横スクロール型ゲームの部屋を『一階』と『二階』で絵作りして、そこに辻褄を合わせるための『階段』を後付けした感じです。

 

※Quadを使おう!

QuadとはUnity内で追加できる、片方だけに面がある平板状のオブジェクトです。

室内アセット同士を繋ぎ合わせるためにスケールを変化させた場合など、床や壁の模様が伸びてしまう場合がありますが、Quadを上から張り付けてマテリアルを再設定すればなんとかなります。

他にも大きなフロアの壁や地面など『とりあえず』で作りたい時などPlaneよりも容量が軽く、裏面や側面が存在しないので複数を貼り合わせやすいという利点があります。

 

※室内光源の選択について(長い)

今回の室内はスポットライト(天井の照明)とエリアライト(窓から差し込む光)を使用しています。

室内ワールドの照明にはポイントライト(全周を照らす)が使用されることが多い印象ですが、吊り下げ型の照明や蛍光灯などでは地面に比べて距離の近い天井が明るく照らされやすいです。暗めの室内ワールドで天井よりも地面(と壁)に注目してもらいたい場合などは、角度を60~100°くらいに設定したスポットライトを、地面に向けた方が見栄えが良くなることが多いと思います。

リアライトはかなり処理量が大きいらしく、ベイク専用で一つ置くごとにベイク時間が一時間ずつ増えていく(i5-9400の場合)と思った方が良いです。基本的にはディレクショナル・ポイント・スポットの三種で演出して、エリアライトは最終兵器と思った方が良いです。もしくはBakeryを使うこともできますが、いきなりはハードルが高いと思います。

また記述されていることは少ないですがlightだけではなく、emissionを設定したstandardシェーダーオブジェクトの表面も光源として作用します。これはエリアライトを除いて一点からしか光を発生させられないlightとの大きな違いで、細長い蛍光灯などはポイントライトではなく自己のemissionで周囲を照らし、その上でスポットライトを地面に向けたりすると非常にそれっぽい感じになると思います。

 

※③´(別段重要な話はなかったので格納)

張り紙(ビラ?)とダメージ壁のデカールを置きました。Quadにアルファ(透明な部分が設定された)テクスチャを張り付けたデカール系のアセットは、お手軽に見た目を盛るのに便利だと思います。

テレビデオを置きました。同梱されているCRT風シェーダーが非常に好みで、以前のワールドでは動画プレイヤーを参照するテクスチャをこのシェーダーに組み込んで、どんな動画を流してもアナログプレイヤー風になるようにしました。今回は海辺にカメラを置いて、そこからの映像(レンダーテクスチャ)にCRT風のエフェクトがかかるようにしました。

台所を置きました。舟を浮かべました。ペンダントライトを軒先?にも吊るしました。

 

どうしてもミラーの前に集まってしまうことは避けられないので、見て欲しい景色が映っていたりアバターが並んでると見栄えがするような場所にミラーを置くと良いです。意外とミラーを置かなくても円陣を組んでお話しできるので、一つの場所に集まってほしくない場合はミラー無くても良いと思います個人的には、屋内メインなら置くと思いますが。

 

④ポストプロセシング、ライティングの追加設定 

【VRChat】PPSv2を導入してワールドでポストエフェクトを使う|落雷|pixivFANBOX

この辺の視覚効果は『絵作り』が終わった風景を引き立たせるための処理なので、大まかな景観とライティングができてから設定した方がいいです。③より先でも良いですが『絵作り』に必要なアセットが既に見つかっているなら、そっちから先にやった方が良いと思います。

特にポストプロセシングは少ない作業で大きく見た目が変わるため、大まかな景観とライティングを仕上げる前に触ってしまうと、そこで時間と労力を使い切ってしまう危険があるのも理由です。後に『ご褒美』を取っておくとモチベーションが維持しやすいです。

f:id:karina-kamei:20210619214200p:plain

今回のポストプロセシングはカラーグレーディングをメインに設定しました。暗めのワールドである場合は、ポストエクスポージャーを弄ると概念的な暗さを保ったまま、暗さに目が慣れたような視界にしやすいです。

 

※フォグ(ライティングの追加設定)

今回は地平線近くの空と同じ色にフォグを設定することで、海や堤防などの遠景が空に溶けていくような視覚効果にしました。自分の知る限りでは今回の『地平線や遠景などをぼかす』以外に、暗くて入り組んだワールドで輪郭線を出す(距離に応じてフォグの濃さが変わるので、手前にあるオブジェクトのシルエットが見えやすくなる)ことや、基本のライティングに加えて黒いフォグ/白いフォグで明るさを調整する用途で使うことができます。

 

⑤軽量化

だいたいテクスチャの解像度を落とすだけです。手間の割にびっくりするくらい最初の読み込み容量が減るのでやっておきましょう。

販売アセットだと基本テクスチャにノーマルマップ、金属マップまで全部4096×4096が初期設定であったりしますが、絵画とか飾るのでもなければ基本的に全部1024×1024に変更しても見栄えは落ちないと思って良いです。

 

※それぞれのアセットがワールド容量に占める割合を確認する方法

ワールド最適化 - VRChat 技術メモ帳 - VRChat tech notes

⑥パブリッシュ(コミュニティラボに登録)

お疲れ様です。モデリングしなくてもコードを書かなくてもアニメーションが分からなくても、ここまでの工数を踏めばそれは『あなたのワールド』です。

ワールド巡りで『あなたの世界』に出会える時を楽しみにしています。

 

■追記:これは広告

 

実際のVRがどんな場所か知らない人たちにも伝わりやすいように、自分がVRSNSで体験してきたことを切って繋いで物語にしました。

現在は第二章の『VRSNSに送り込まれた神の使者が、ボイチェン美少女になった現実世界での同級生と再会する話』を毎週日曜に更新しています。

 

書き溜め分を公開後、カクヨム等にも掲載していく予定です。

読んでもらえたら嬉しいです。