おはこんちにばんは。
すっかり存在を忘れていたシリーズ(?)記事を思い出したので書きます。
先日第2回1weekWCがありました。イベントの詳細は各自で調べてください。
私は作りたい時にしかワールド作らないので、開始から3~4日くらいは「何も思いつかないしスルーでいいかあ」と思っていました。
でも週末くらいに突然「影使って遊びたい!」と思ったので突貫工事を始めました。
できたものがこちら。
https://twitter.com/it__was__rainy/status/1465698680233623572?s=21
駅である必要、ある?ないですね。これ幸いとかこつけただけです。
ワールドの裏設定とかは特になんもないので以下、技術的なお話が続きます。
今回のワールドの最大かつ唯一のポイントは「Shadow only」です。
Unityの(Skinned)MeshRendererコンポーネントには、「オブジェクトが影を落とすかどうか」を決定する「Cast Shadow」という項目があります。これをShadow onlyにして影絵遊びをしたかったっていうのがワールドのコンセプトですかね。詳しい仕様が知りたい人は公式ドキュメントを読んでください。
で、影であれこれするにあたって1番の敵はQuest対応です。今Questにはリアルタイムシャドウを持ってこれません。私はQuest勢なのでQuest対応していないワールドを作ってもどうしようもない。
Questで影を見るためにはベイクするしかないわけですが、まあこれが大変というかなんというか、試行錯誤してました。作業時間の8割くらいはライティング。
実は最初は影だけのワールドにするつもりでした。左右の壁にそれぞれ影が落ちてる感じの。(写真は撮ってないので頑張って想像してください)
そうするには右を照らすライトとオブジェクト、左を照らすライトとオブジェクトを分けなきゃいけないんですが、ライトのcullingmaskはリアルタイムでしか働かないのでベイク前提だとうまくいきませんでした。没。
それで片側だけにすることになったんですけど、それだけだと味気ないので表の空間(透明な駅)がやっつけ作業で生み出されました。こっちはリアルタイムライトですが影は消しています。
あとは本題の影の方ですが、私のマシンスペックではなかなか綺麗に焼けない。1回のベイクも時間かかるし。VRCの為と言うよりはワールド制作のためにつよつよPCが欲しいですね。最終的にresolution40のsize2048で妥協しました。この時点で〆切の前日だったのでベイク時間的にもこれ以上の試行錯誤は現実的ではなかった。あ、ちなみにライトベイクはUnity標準のCPUなんちゃらでやってます。
ライトの角度は真横ではなくちょっと斜め上から照らしています。その方が全体的な見栄えが良かったのと、線路の影は床に落とした方がわかりやすいので(壁に落とすとただの一本線になるから)。まあこのせいでPC用の調整にまた苦労するんですが……。
アバターの影はどうしようもないので、プレイヤーに当たるライトを切ってアバター自体を真っ黒にすることで影っぽい写真を撮れるようにしてみましたが、standardliteとかだと設定によっては黒くならないのが惜しいところ。リアルタイムシャドウ返して。
ここまででQuest対応を完了したので、PC用にsceneを分けてリアルタイムライトにして……。
あ、ライト斜め上だとプレイヤーの影はコレジャナイ感する……プレイヤー用のライトだけ真横から照らすか……でもそうすると壁に2つライト当たって影が薄くなる……でも今更ライトの角度変えて焼き直ししたくない……まあいいか!!
こんな感じで完成しました。この後一旦提出して〆切過ぎてから微調整したりフレンドにデバッグしてもらったりしてました。
本当はcullingmaskとShadowonlyを使って、懐中電灯を壁に当ててオブジェクトの影を探して遊ぶみたいなことしたかったんだけどQuest対応できないので没にしました。