見出し画像

VRChatのワールド制作基礎能力ツリー

はじめに

今回の記事は、ワールドを作り始めたい or 作っている途中で、何から勉強したらいいか分からない人やもっとクオリティ上げたいと思っている人にお送りする記事です。

VRChatのワールド制作に用いることが出来るUnityやVRChatの機能は、非常に多いです。そして体系的に纏められていることは少ないため、それらの機能を知らないまま、ワールド制作している方もいらっしゃると思います。

そこで、今回は基本的なところを一通り書き出してみました。ゲームのスキルツリーを連想していたので、ワールド制作基礎能力ツリーと名前を付けてみました。

この記事を足掛かりに各機能を自分で調べてもらうことを想定していますので、基本的に細かい解説はなしで、簡易的な説明のみです。あくまでとっかかりとしての記事です。

基本的とはいえ、ワールドのクオリティをグッと上げてくれるものもあります。勉強するときの足掛かりにしてみてください。

最初のファーストステップとして

本題に入る前に、一度もワールドを作ろうとしたことがない人向けのおすすめを書いておきます。

個人的なおすすめは、Boothで販売されている販売ワールド(具体例)を買って、実際にアップロードしてみるのが安定だと思います。

Boothで販売されているワールドは、VRChatに最適化された形で、各種設定がきちんとされている状態が大半なので、この後紹介する機能がどのような形で使われているのかを知ることが出来るとおもいます。

もしくは和牛先生が作られているマッハで学ぶワールド制作入門のような、一連の流れとモデルが付いている教本もありかなと思います。

1つだけ注意があります。最近VRChat公式からVCCに移行するようにとのアナウンスが出ています。なのでUnityプロジェクトを作るときはVCCの記事を参考にしたほうが良いです。
上記、和牛先生の教本は対応済みでいいのですが、導入記事は古いことがあるので気を付けてください。

では本題に行きましょう。

ワールド制作基礎能力ツリー

①予備知識関係

知っておいたほうがいい知識

レイヤー』という機能があります。どういう時に役立つかというと、「ガラスがあるけどすり抜けたい」とか「テーブルがあるので、コップが乗っかってほしい」など、物同士が衝突するかどうかを設定することが出来ます。
また、特定のオブジェクトにのみ光源を当てたり・当てなかったり、ミラーにオブジェクトが映る・映らないを設定出来たりと、レイヤーは重要な機能かなと思います。ぜひ調べてみてください。
(2023/03/07追記 レイヤーについての記事を書きました↓)

Prefab』はたくさん配置するオブジェクトの管理に便利です。オブジェクトのPrefabを作って配置すると、後から調整したいなと思ったときに、元のPrefabに対して調整するだけで、配置した全てのオブジェクトにその変更が反映されます。自分はこの記事が好みです。

知らなくても大丈夫(知ってると楽しい)

3Dオブジェクトが描画されるまでの工程である『レンダリングパイプライン』については、必須というわけではないものの、「何故こうなるの?」といういくつかの疑問を解決させてくれます。
普段過ごしてるVRChatのワールドで、発生している不思議な現象の理由が分かったり、Shaderを専門的に学習したい時のファーストステップとして最適だと思います。
phi16さんがレンダリングパイプラインのワールドを作っています。ある程度理解できるようになったら行ってみると面白いかもしれません。

②クオリティアップ

クオリティアップという項目として、書き出しては見ましたが、かなり多いですね(笑)
でも、ここにある項目をいくつかチャレンジするだけでも、飛躍的にワールドのクオリティは上がるはずです。ぜひ試してみてください。

PostProcess(ポストプロセス)』ですが、我々の視界(カメラ)の映像にエフェクトを掛けてくれます。分かりやすいような例でいうと、近年ではSNSにアップする写真を加工したりすることがありますよね?あのような感じで、視界にエフェクトを盛ることが出来ます。
綺麗なワールドだとほぼ使われています。ワールドの空気感をお手軽にアップしてくれるので便利です。良く使われているのは[Bloom]と[Color Grading]あたりなので、そこらへんの機能を触ってみるといいでしょう。

ライティング』を勉強すると、ワールドの光と影を制御することが出来ます。こちらもワールドのクオリティに直結してくるので、勉強したほうがいいのですが、結構覚えることが多いです。
特にライトベイクは光と影のふんわりとした感じを出すのに欠かせないのですが、わりと多くの人が挫折しがちなポイントかもしれません。とはいえ色んな人が沢山記事書いてくれているので、情報は手に入れやすいです。
最初のワールド作りなら、「ライトベイクに挑戦せずに、小さめの部屋くらいのワールドで、Realtimeの光源を使ってライティングすること」をお勧めします。各種光源の項目や設定方法に慣れてきてから、ライトベイクに挑戦するほうが良いでしょう。
LightProbeはアバター等動くものにライトベイクの明暗を反映する機能ですので、ライトベイクが分かった後にチャレンジしてみるといいでしょう。
(2023/10/01追記 つまりライトベイクって何なの?を解説する記事を書いてみました↓)

まずはLightの各項目から、少しずつ覚えていくといいでしょう。

Reflection Probe』は、オブジェクトに反射として映り込む景色を制御することが出来ます。
これを設定できてないワールドはちょっと残念に思うことがあります。
Unityだと、デフォルトではSkyboxが反射する景色になってますので、全てのオブジェクトにSkyboxが映りこみます。たとえ、室内のオブジェクトであろうと…です。気を付けましょう。
Reflection Probeを設定することで上書きすることができます。
正しく使うにはいくつかの設定をきちんと理解する必要がありますが、比較的手軽に設定できるので試してみてください。
(追記:ReflectionProbeについての記事を書きました↓)

Texture』は私たちがシェーダーで一般的に使っている画像のことなのですが、MipmapsやAniso levelという項目があります。どちらも適切に設定してあげることで、オブジェクトを遠くから見たときのじらつきや違和感を軽減することが出来ます。
特にMipmapsはオブジェクトの距離が頻繁に変わるVRでは、じらつきを抑えてくれる重要な項目になっています。テクスチャの容量が1.3倍になってしまうのですが、基本的に切らないようにしましょう(例外としてSkyboxは切ったほうがいいです)

Shader基礎』と銘打ちましたが、Shaderを書こうという話ではなく、Shaderの一般的なパラメータを理解しようという話です。
最初はUnityデフォルトのStandardシェーダーについての理解を深めることをお勧めします。
Unityアセットを買うと、物によってはAlbedoのところにテクスチャ1枚だけというマテリアルが結構あります。個人的にこれは非常にもったいないと感じます。
マテリアルの質感はMetallicやSmoothnessといった反射に関する項目や、見た目の凹凸に影響するNormalmap・Heightmap・Occlusionmapを利用することで非常にリッチにできます。
凄く綺麗な部屋などのワールドに行って、細かい壁の凹凸に手をかざしてみてください。パッと見はデコボコしているように見えて、実は真っ平ということがあるはずです。テクスチャによる疑似的な凹凸表現はよく観察すると色々なところに使われているので、探してみるのも楽しいですよ。

左は先ほど紹介した各機能を使っています。右はAlbedoのみで反射関係は0。

パーティクル』については、アバター改変等で利用していて良くご存じの人も多いと思いますが、ワールドの賑やかしとして非常に使い勝手がいいです。
とはいえ、非常に機能が多く、設定が相互に影響しあっているところもあり大変かもしれません。最初の一歩としては既存のパーティクルを改変する形で使うのが良いかなと思います。
私見ですが、最低限覚えたほうが良いと思う機能を列挙しておくので、そこから勉強し始めてもいいかもしれません。
上部のMain項目に加えて、[Shape]・[Color over lifetime]・[Rendering]あたりをいじれれば、良い感じにふわふわ浮かんで、色が変化しながらスッと消えてくエモい奴とかは作れます。

BGM・効果音』は、私のワールドクリエイター知り合いの大半は、ネットから探してきたフリー音源を使っています。規約をしっかり確認して使えばいいと思います。ここのやつとかよく使われているのを見ます。
Unity上で扱う際はAudioSourceというコンポーネントで扱うことになるのですが、VRC独自のコンポーネントもいくつかあります。
VRC SpatialAudioSourceはその一つで、特定の方向から聞こえてくる音といった、3Dの音源として使いたい場合は付ける必要があります。
(2024/01/30 追記   音の付け方についての解説を書きました↓)

③ギミック関係

ギミックについてですが、VRChatのギミックは基本的に『Animation』か『Udon』、もしくはその両方を使うことで一通り実装できます。とはいえ、便利なギミック等はboothで沢山出ているのでそちらを探し出して使うのが良いでしょう。
(2024/04/01 ギミックについて一通りまとめた記事を書きました↓)

ピックアップや同期については、一部VRC特有のコンポーネントがあるので調べておくといいでしょう。[VRC Pickup]や[VRC Object Sync]などです。
(2023/10/09 追記 ピックアップについての記事を書きました↓)

Animation』はUnity標準の機能なので、解説記事も豊富にあるため探しやすいでしょう。特にVRChat特有のあれこれはほとんどないはずなので、一般的なUnityユーザー向けの記事を読んでもいいと思います。
(2023/10/09 引っかかりそうなところに気が付いたので以下に追記)
アバターのAnimation用のコンポーネントは、ワールド側では基本的に使用できません。なのでアバター向けのAnimation解説は部分的にしか参考にならないかもしれません。
また、一般的なUnityと違って、Animationコンポーネントは使えないので、必ずAnimator Controllerを作って、Animatorコンポーネントで使用しましょう。Animationコンポーネントだと、Unity上は問題なく動きますが、VRChat上で動かなくなります。

一方で『Udon』はVRChat特有の機能であることに加えて、環境の変化が激しく、記事が古くなるのが早いです。(余談ですが、初心者はワールド製作者の集会に行くと『うどんをこねた』とかいう会話がなされているのを聞いて、「なぜうどん!?」って思うかもしれませんが、この『Udon』です)
特に最近VCC(VRChat Creator Companion)経由でのダウンロードに切り替えが行われており、検索上位に出てくる導入記事は当てになりません。
そこら辺の事情を一通り別記事として書き出してみました。ギミック作成に興味がない人も出来れば読んでおくといいと思います。
(2023/10/09 追記 Udon SharpがVRChat SDKに統合されたので、インポート周りで悩む必要はなくなりました。最新のVCCでワールドプロジェクトを作ればOKです)

ギミック実装したくない人はBoothで欲しいギミックを探して、インポートするだけで大丈夫です。ただしそれらのギミックは現状壊れて動かない可能性があることを覚えておいてください(詳細は上記記事へ)

記事にも書いていますが、導入方法については『VCC ワールド』で調べるといいでしょう。自分でギミックを実装したい人は、実装方法の調べ方については『Udon Sharp』などで検索して出てくる古い記事でもおおむね問題ないでしょう。
『UdonSharp』に苦手意識があるなら、『Udon Node Graph』、『CyanTrigger』、『Trigger2to3』などの別ツールで実装するという手があるので調べてみて、自分に合ったものを探すといいでしょう。

④負荷軽減

負荷軽減……と一口でいうものの、大別すると2種類に分かれると思います。
FPS改善と容量改善です。

前者はワールドで遊んでるときに「このワールド重いね」と言う人がたまにいると思いますが、その時重いねと言っているのはFPSです。メニューの左上にちょこんと出ている数字で、低いとカクカクします。
後者はワールドの読み込みの時に、読み込んでいるものが容量に当たります。これは基本的に数字が大きくてもカクカクしたりとかはありません。

したがって、快適なワールドを目指すならFPSを改善するべきなのですが、特定の条件でしか使えなかったり、軽量化する代わりに容量が増えるものなど色々あります。よっておすすめ順で上から並べていきたいと思います。
(本当は予備知識として、「バッチ数」や「セットパスコール」、「プロファイラー」「フレームデバッガー」なども紹介しようかと考えたのですが、下の単語で調べるうちに知ることになると思うので割愛します)

その前に、一つだけアドバイスしておきます。
負荷軽減は大きな見た目の変化が一切なく、時間がかかる作業です。そのため人によってはモチベーションを失いやすい作業になっています。
最初から気を使いすぎずに、まず作ってみて、重かったらここの項目を見て軽量化するくらいの気持ちのほうが良いと思います。

FPS改善

GPU Instancing』はシェーダーの機能の一部で、Standardシェーダーにもある機能です。同じメッシュ・マテリアル(つまり同じオブジェクトであること)であれば、描画を節約してくれる良いやつです。チェックマーク一つで適応できるので初心者にもおすすめです。次に紹介するStatic batcingをオンにしていると、そちらが優先されるので注意。
あと経験則ですが、Reflection Probeの情報を受け取ろうとするとGPU Instancingできなくなるようです(Anchor overrideを使っての回避などはできますが、そのテクニックはReflection Probeの記事に書いてあります)
中級者?向けではありますが、マテリアルの色を変えたい場合、MaterialPropertyBlockという機能とGPU Instancingを併用することで、色の異なるマテリアルを1回の描画で済ませることができます(参考記事)

Cast ShadowをOFFにする
一般的にリアルタイムの光源によって影があるオブジェクトは、影なしの状態の2倍の負荷がかかっていると思ってください。余計な影を出さないことで負荷を軽減できます。リアルタイムの影付き光源がなければ話は別です。
レイヤーを分けて、光を当てないことでも同じ効果が得られます。

ライトベイク(Static batcing)
Static batcingにチェックを入れてライトベイクをすると、ゲーム中にメッシュを動的に結合して、まとめてくれるので描画回数を減らしてくれます。ただし結合したメッシュ分の容量が、ワールド容量として増えるので注意。
軽量化できる理屈は上のライトベイクの場所で貼った記事に書いています。

メッシュ結合
メッシュが複数に分かれている場合、それぞれ別に描画されます。Static batcingはUnityで自動的にまとめてくれますが、こちらは自前でまとめてしまおうという話です。
ただし視錐台カリングが働く程度に分割されていたほうが良いです。以前ツールの記事で説明した「Mesh Combine Studio 2」は自動で考慮して結合してくれます。

LOD
LODは距離に応じてモデルを切り替える機能ですが、低ポリゴンモデルに切り替えるだけではなく、Cullingで非表示にしてくれる設定が出来ます。これを利用して、距離に応じてモデルを非表示にしてあげれば、軽量化が出来ます。
利用するときにはモデルが消えていても気にならない構造や工夫が必要になりますが、割とお手軽に設定できるのでオススメです。

マテリアル結合
複数のマテリアルをまとめる方法で、代表的な手法として「アトラス化」や「TextureArray」があります。「MeshBaker」などがUnity上のツールとして有名ですが、きちんとやるには各種マテリアルの設定に気を使ってやる必要があるので、なかなか難しいと思います。
中・上級者向けですが、Blender等のモデリングでUV自作とそれに合わせたテクスチャ作成を出来るのであれば、自前ですることもできます。トリムシートと呼ばれるタイリング機能を有効活用したテクスチャの作成方法もあります(英語ですが詳しく書かれています→参考)
(2024/02/29 MeshBakerの記事のリンクを追加)

オクルージョンカリング
あらかじめ遮蔽物と遮蔽される物について、見える角度などの情報を計算・保存しておいて、見えない時に非表示にする機能です。上手く使えば便利で軽量化には強力な機能なのですが、『特定の角度から見たら物が消える』原因になってしまうので、使いどころを選びます。
Unityアセットストアのアセットには既に設定されていたりすることがあるので、アセットを多用したい人は逆に知っておいたほうが良いでしょう。
アバターの分の負荷を減らすことも使い方次第では可能なので、集会用のイベント会場とかを作りたい人にはオススメです。
(追記:記事を書きました↓)

Material Property block
Shaderとスクリプトに関する知識を要求する中級者?向けの話です。書こうか迷いましたが、一応書いておきます。
テクスチャを使わずにバリエーションを作る際に、マテリアルの設定で差分を作ると、マテリアルが増えて描画負荷が上がってしまいます。
Material Property blockを使うと1個のマテリアルで色々な差分が作れるようになります。とはいえ一つ一つ設定してあげる必要があるので、なかなか労力がいる作業です。

追記:何人かの識者と話しているうちに、正確にはGPU Instancingのおかげで軽量化できていたことを思い出したので、GPU Instancingの項に記載しました。ありがとうございます!

容量改善

テクスチャ圧縮・解像度変更
Unityはテクスチャごとに解像度や圧縮の設定を行うことが出来ます。あらかじめ解像度を下げたり、Crunch圧縮でテクスチャを圧縮してあげると、ワールド容量は劇的に改善されます。
解像度を下げたら見た目が悪くなってしまうのでは?と思うのは当然ですが、4096×4096とかは大体の場合過剰すぎるので、見た目をチェックしつつ適切な解像度を選びましょう。
クランチ圧縮は特にSkyboxの空の色のグラデーションなど、連続的な模様だと劣化が目立ってしまうことがあるので、同様で見た目に大きな変化がないか確認しながらのほうが良いでしょう。CompressionをHighQualityにしていると、クランチ圧縮しない画像形式が選択されます。

モデル圧縮
FBXの設定項目の中にMesh Compressionという項目があります。これをOFF以外に設定すると、メッシュデータを圧縮でき、FBXの容量が減ります。
ただし、小数点部分の精度を丸める形で圧縮を行うため、復元した時に劣化します。

音源のモノラル化・圧縮
AudioClipにたいして、Force To Monoのチェックを入れるとモノラル化されて、容量が半分になります。
また、mp3/Vobis形式でQualityを下げると、劣化する代わりに容量を減らすことが出来ます。

アニメーションのKeyframe Reduction
Animation付きのFBXでは圧縮の項目があります。Animationの制御点(Keyframe)を減らすことで容量を減らすことが出来ますが、当然カクカクした動きになる可能性があります。

おまけ:よくある問題解決

いまいち調べづらそうなところや、よくワールド制作初心者集会で聞くお悩みを書いてみました。

▼水シェーダーが消えるor模様が変。
一部のシェーダーは深さ情報をもとに処理を行うため、リアルタイムライトを必要とします。無いと上手く動かずに消えたり、変な見え方をします。
判断基準としては、『遠くになるにつれて色が変わる』ようなシェーダーは大体該当すると思います。他の例としては霧シェーダーとかも該当します。

▼アバターの明るさが違う。
VRChatはアバターのシェーダーが何でもありなので、一概にワールドのせいとは言えないものの、一般的なアバター向けシェーダーはリアルタイムライトが最低1つは必要です。レイヤーを駆使して、アバターにだけ当てるリアルタイムライト(Intensityは0.01でも良い)を用意しておくというのが良く使われる解決方法です。とはいえ、UTSは処理が特殊なのでそれでもダメかもしれません、私はUTS対応を諦めてます。

▼半透明のオブジェクトが重なった時におかしくなる。半透明のオブジェクト越しに見ると、アバターの服とかが消える。
→レンダーキューで調べましょう。

▼特定の角度から見るとオブジェクトが消える。
→大体のケースがOcclusion Cullingのせいなので、上のオクルージョンカリングの項目に貼った記事を読むとよいでしょう。例外として、動きのあるシェーダーを使ってるとBoundsが小さすぎて、視錐台カリングで消されてる場合があります。Boundsを拡張エディタなどで大きくするなどの対処が必要です。このリンクの記事の途中で若干詳しく書いています。

▼Skybox変えたら部屋の色が変わってしまう。
→[Window]→[Rendering]→[Lighting Settings]で出てくるウィンドウの一番上にあるEnviromentの各項目は結構大事です。
Enviroment LightingのSourceがSkyboxになっていると、Skyboxの明るさに依存してしまうので、Gradientとかにしておくのがいいでしょう。Gradientだと影の濃さや色とかも調整することが出来ます。

▼遠くのオブジェクトが消える!
Main CameraのFarを正しく設定しましょう。遠くのオブジェクトが全て見える距離を入力してください。そして設定したカメラをvrcworldコンポーネントのreference cameraに設定すると、無事遠くまで見えるようになるでしょう。

▼オブジェクトの重なってる部分がチカチカしてる!
Z-Fightingと呼ばれる現象です。違うオブジェクトどうしであれば、離したり、レンダキューをいじればよいのですが、同じオブジェクトの場合はモデルを作り直すしかないです。もしくは目立たないように隠すか……です。

▼壁をすり抜けてしまう or 吹き飛びます
コライダーを設定していても、薄い板状になっているとすり抜けたりします。またメッシュコライダーの裏側からだと、簡単に貫通するみたいです。ボックスコライダーなどを置くか、間隔をあけてもう一個コライダーを置くなどしましょう。

▼きちんと穴が開いているのに通り抜けられない
プレイヤーには、高さ1.65m、幅0.4mのカプセルコライダーが設定されていて、常に衝突判定を行っています。したがって、それ以下の高さや幅だと通り抜けられないので、コライダーの位置をずらして、高さや幅を確保してあげるといいでしょう。
(2022/11/14 追記) clientsimだとアバターの身長が2mで扱われているようです。シミュレータの方が身長高いので、コライダーを通り抜けられるかのチェックはVRC上で行ったほうが確実です。
(2023/12/18 追記) アバターを小さくしたり、大きくしたりする機能があると思いますが、あれで小さくなったり大きくなったりしてもコライダーのサイズは変わりません。注意してください。

▼同期オブジェクトを沢山置いたら、同期がおかしくなった!
ワールドのプレイヤー全員に正しく同期させようとすると、高頻度で更新を掛ける必要があります。特にVRC Object Syncは簡単に利用できるものの、高頻度で更新されていたりします。
どうしても同期するオブジェクトを沢山置きたいのであれば、Udonで特定の条件の時だけ同期するギミック等()を使う必要があるでしょう。

▼アニメーション等で動かしたいけどライトベイクしたい。
→Staticの項目でContribute GIのみをチェックして、ベイクしましょう。

▼アニメーション設定したのに動かない。
→Batching Staticとかにチェック入ってると当然ながら動かない。Staticにしないか、Contribute GIのみをチェックするかのどちらか。

▼エラーとか特にないけど、ダウンロードしたUdonギミックが動かない。
→関連ファイルにReimport試してみること。iwaSyncとかでURLが入力できなくて初心者が苦しんでるのをよく見ます。
どうもUdonどうしの参照関係が上手く処理されてない気がしています。これで駄目な場合はそもそもエラーが出てるケースしか自分は見たことないです。

▼このコンポーネントって使えないの!?
ホワイトリストを見ましょう

▼黒い謎の残像みたいなのが見えるよ!?アバターもなんか怖い……。
もしかしてポストプロセスのSSAOを使ってないですか?理由は推測でしかないので語りませんが、ポストプロセスのSSAOは2022/10/29現在、VRで良い感じに動いてくれません。あと、アバターの目は大体窪んでいるので、SSAOで黒くなってしまうのがしんどいところ。

▼パーティクルが頭を傾けると傾く。
パーティクルがビルボードの時に[Renderer]のRender AlignmentがViewになっているのが原因。WorldやLocalに直すと良くなりますが、代わりにビルボードがこっちを向かなくなります。おそらくもっともスマートな方法はY軸固定のビルボードShaderをつかうことだがややハードルが高いです。
追記:みみーさんから教えていただいたのですが、Render AlignmentをViewにしたまま、Render Alignmentの二つ下にあるAllow Rollのチェックを外すことで、ビルボードがこちらを向いたまま、傾かなくなるそうです。情報ありがとうございます!

▼室内がなんか明るくなっちゃってベイクできない!なんで?
当然のことながら部屋のMeshRendererのCast ShadowをOFFにしているとベイクできません。あとは、影を落とすオブジェクトと影を受けるオブジェクトは同一レイヤーにある必要があります。影を出しているかどうか、影を受けられているかどうかを意識しましょう。

▼重力変えたいんだけど……。
Edit→Project Settings→Physics→Gravityで変えられます。
ただしプラスの値にすれば天井に立てたりするわけではないので注意すること。アバターの上下と視点はそのままなので、suzukiさんの重力ギミックを使うなどの工夫が必要です。

▼ミラーにUI映らないようにしてたつもりなんだけど、何かいる……。
時折VRChatのアップデートのバグで、別のレイヤーに移ってることが割と頻繁にあるので注意。放っておくと勝手に修正されてたりします(最近でいうとカメラのレンズとか)

▼既知のバグ情報とかある?
変だなと思ったことはCannyで検索してみましょう。そして早く直してほしいなら投票するのです。各タイトルの左の「▲」をクリックで投票。
https://feedback.vrchat.com/feature-requests

▼Quest対応しようと思ったんだけど。
Quest版は、PC版に比べて制約がかなり多いです。Quest対応の記事を読んでから取り組んだほうが良いでしょう。記事に書いてなさそうなところだと、浮動小数点の精度がQuestのほうが低いので、Z-fightingしやすいとかでしょうか。波打ち際など、割と予想外なところがZ-fightingしたりします。

▼ネットから情報を拾ってくるやつ作りたい!
残念ですが、2022/10/28現在SDK3では外部の情報を持ってくる手段は、動画プレイヤー経由くらいしかありません。SDK2ではVRC_Panoramaというのがありましたが、SDK3にはそれにあたる機能がない状態です。待つしかない状態です(VKet等の大型イベントではVRChat運営から限定的に許可されていたりします)
2023/03/07 外部からテキストと画像を持ってこれる機能がアップデートで追加されました。

▼アバターとかワールドが崩れだした!何事!?
Unityは原点から離れるほど、浮動小数点の計算精度が甘くなっていく仕様になっています。英語ですが下のワールドに行くと説明を見れますし、何より体感できます。
基本的には原点付近にワールドを作ると良いでしょう。

▼Project Settingsについて(2023/01/30追記)
一般的なUnity向けの参考書などは、このProject Settingsを変更することで○○できます、のような記載があったりしますが、VRChatでは一部の項目(Gravity、Physics Layerなど)を除いて、Project Settingsの変更内容は反映されないことがあります。特にグラフィック関係の設定は、VRChatのプリセットで固定されていて、ユーザ側がVRChat内で選択するような方式になっています。
どれが反映されるのかが綺麗に纏められている記事等は私の知る限りではないので、Twitter等で検索するのがいいかもしれません。

▼VRCのミラーの注意点(2023/10/09 追記)
ベイクしないでワールドを作る場合、リアルタイムのポイントライトやスポットライトを使うことがあると思いますが、デフォルトのミラーにはそれら2種類の灯りが映らないので注意しましょう。
(→部屋は明るいのに、ミラーの中が暗い場合はこれを疑ってみましょう)
VRC Mirror ReflectionのDisable Pixel Lightsのチェックを外すことで、ミラーの中にもきちんと反映されるようになります(代わりに重くなるかもしれません)
またパーティクルもDisable Pixel Lightsのチェックが付いてると見えないことがあります。

▼Udonギミックのオン・オフについて(2023/10/09 追記)
よく、VRChatのビデオプレイヤーをLura Switchとかで表示・非表示しようとして、『何か動かなくなった!』などの声を聞きます。
Udon系のギミックには、ワールドに入った時に非表示になっていると、一部の処理が動かない仕様があります。
なので、ワールドに入った時は表示しておく必要があります。どうしても最初に消えていてほしい場合は、ワールドに入って数秒後に非表示にするUdonを使うのが良いでしょう。

まとめ

以上、ワールド制作基礎能力ツリーでした。
上記情報を手掛かりに、自分のワールドのクオリティをグングン上げていってもらえたら幸いです。

あとは自分のワールドの目指したい方向性を決めて、boothとかでアセットを集めていけばいい感じのワールドが作れると思います。
ギミック系やよく使うアセット集については、自分もいずれ記事書こうかなと思いますが、はーもんどさんの記事で基本的なものは網羅できるのではないかなと思います。

普通に書くのに燃え尽きてしまったため、書き忘れがある気がしてならないので、思い出したら履歴を残しつつ書き足したいと思っています。

過去一番の長文になってしまいましたが、ここまでお付き合いいただきありがとうございました。お疲れ様です。

※この記事は月1で更新してる下記マガジンの一つです。良ければ他のも読んで、ワールド製作に役立てていただければ幸いです。


この記事が気に入ったらサポートをしてみませんか?