『RedSpace』制作秘話
はじめに
Cluster Creator Kit Advent Calendar 2020 6日目の記事になります。
この記事ではclusterゲームワールド杯に参加した話について書こうと思います。
作成したゲームワールド『RedSpace』
URL:https://cluster.mu/w/d068ca39-4314-49e6-9b85-7a716a40edc3
clusterゲームワールド杯とは2020年9月18日~10月18日の一か月にわたってゲームワールドを作成するイベントです。
https://www.contest.cluster.mu/gameworldcup
※ギミックのネタバレを含むため事前にプレイしてから読むことを推奨します
当初のコンセプト
宇宙を舞台にしたゲームワールドをつくるということから始まりました。
最初に作ろうと思っていたのは宇宙戦艦を操縦して戦うSFシューティングゲームでした。ただ時間がかかる。既に似たようなシューティングゲームワールドがあるので体験として新しくないと思ったのでやめました。
なぜホラーワールド?
ゲームワールド杯の審査基準は創造力、マルチプレイ、マルチデバイスでした。普通に考えるとみんなで楽しく遊べるゲームが良いかなと思いますが、ありきたりすぎるのであえて別の方向を目指すことにしました。
前々から本格的なホラーワールドを作りたいとも思っていたので宇宙+ホラーを舞台したゲームにすることに決定しました。
ワールド作成で大事にしたこと
ホラーワールドということでそこにいるだけで怖いと感じられる雰囲気を重視しました。
怖いとは何でしょうか?例えば、恐怖を感じるのは高所に立った時、暗闇に気配を感じたときなど、本能的に危険を感じることだと思います。個人的には自身の身を守るための防衛反応だと考えています。なので本能に根差した恐怖感を想起させることを目指してワールド制作をすすめました。
暗闇、存在は認識できるがわからないもの
RedSpaceはこれが恐怖のコンセプトになっています。
暗闇で視界を制限されながら何が出てくるかわからない恐怖感を感じられることを目指しています。
避けたこと
まず一つ目はスプラッターです。clusterサービス自体が全年齢対象なのと個人的に痛そうなのは嫌いなのでやめました。
2つ目はびっくり演出、心臓に悪すぎるのとclusterだとローカルイベントが作れなかったのでやめました。
3つ目は複雑なゲームです。普段ゲームをやらない人にも楽しんでもらえるように同時に2つの操作を要求するようなゲームは避けました。基本移動とボタンを押す操作だけで構成されています。
4つ目は攻略がめんどくさくなって止めてしまうのを避けるため、難しいパズル要素などの仕組みは入れないようにしました。また、トリガー上限やギミックのバグを避けるため極力シンプルにしたかっというのもあります。(結局バグりましたが、、、
他には銃で撃つ要素を入れようと思いましたが、倒せると怖くなくなる(脅威ではなくなる)のでやめました。
最後に強制的に一人にさせるワープギミックを入れようと思いましたがプレイヤーが迷子になったり、公式実況配信で困りそうなのでやめました。
暗闇を実現する方法
怖さを演出する暗いワールドをつくる技術的な話もしていこうと思います。
ワールド全体のライティングも暗いのですがさらに暗くするため一定距離以上は見えなくなってます。
技術的には黒いフォグを使って、一定距離以上は真っ暗になるようになってます。これにより先の見えないワールドになっています。具体的な設定値は画像の通り。
1メッシュに対してclusterはRealTimeLightが2つという制限があるので極力ベイクライト使うようにしました。ワールド内のライトはすべてベイクしています。DirectionalLightも無効にしています。ワールドで使用しているRealTimeLightは懐中電灯だけです。
基本的には懐中電灯で照らされた近距離だけ見えるようになってます。
カメラに映らない存在
このワールドにはカメラに写らないオブジェクトがあります。
カメラに写らなくした理由の1つはわかる、理解すると怖くなくなるので極力情報を少なくするという目的がありました。SNSで簡単に共有されないようにする目的もあります。
また、配信時などもパニック映画でよくあるような人は逃げ惑うが実態を見せない演出にもつながると思ってあえてカメラに写さないように設定しました。
配信だけでなく実際にclusterに来ることで体験できる要素がほしかったというのもあります。
仕組みとしてはUI Layer(Layer 5)に設定するだけです。
基本的にはカメラに写りませんがが、まったく何も見えないというのも寂しいので黒いモヤだけが写るようにしました。
マップデザイン
マップについては時間短縮のため、基本的にアセットをなるべくそのまま使っています。
マップは明るいところと暗いところで明確に分けてメリハリを付けてます。入り口とゴールは明るく安全だと認識できるように作っています。一方それ以外は暗くホラーな雰囲気に作っています。
入り口のゲートと階段があるのは別の世界がはじまる、冒険に臨むという体験のために用意しています。
探索要素としてスイッチを押すことで別のエリアへのゲートが解放され、次のスイッチのあるエリアに入れるようになっています。
タイミングと難易度
カメラに映らない存在の動きは以下のようになっています。
1番目のスイッチ(S1)は最初なので割と遅めに現れるようになっています。(経路①)
2番目のスイッチ(S2)を押したときはプレイヤーが出ようとするタイミングで入り口にちょうど現れるようにしています。(経路②)
3番目は次のスイッチエリアに出現し、プレイヤーが次のスイッチに近づいたタイミングで発見できるようにしています。(経路③)
これらの経路は固定でタイムラインで制御しています。接触タイミングと動きを調整することで追ってきていると思わせるようになっています。
スイッチを押すタイミングで再生が始まるので良い感じにずれが発生してランダムに見えるようになったと思います。
長い通路上は避ける場所がないので隣接する部屋はセーフエリアを設置しています。画像の水色の箇所がセーフエリアです。
マップを見てプレイした方は気付いたかもしれませんが、もう一か所追ってきていると思わせている場所があります。それはゴール手前の地点です。実際は画面効果と音が設置されているだけですが迫ってきていると勘違いさせることを狙っています。
移動ルートですが一見どこを通っても妨害されるように見えますが、最短で行けば実は全部避けてスイッチが押せるようになっています。余裕のある方はぜひチャレンジしてみてください。
気持ち悪い動き
ぐにょぐにょという動きですが人型ではないモデルに以下アセットの採掘モーションを適用しています。SpringBoneとモーションを組み合わせることで気持ち悪い動きになっています。(普段のアバター改変の経験が活きてます
人型でないモデルに人型アニメーションを適用すると意外な動きになるのは結構面白いです。
画面効果
近づくと画面が真っ赤になるエフェクトはPostProcessingStackを使用しています。
Post-process Volumeのオブジェクトにコライダーを追加して、近づいた時だけエフェクトを描けるようになっています。
画面を真っ赤にするのにはColorGradingを使用しています。色褪せた感じになるように彩度とコントラストも弄っています。
Grainを使って画面全体にノイズを付与、Vignetteを使って視界の範囲を狭くしています。これだけだと画面がちょっとのっぺりしてしまうのでBloomを追加し、光沢感、まぶしさを出しています。
全部合わせるとこんな感じになります。
軽量化
モバイル対応のための軽量化には苦労しました。
何もしないと3000Callを超えの状態だったのでオクルージョンカリングを利用することで300Callくらいに抑えました。
DrawCall数は抑えられましたが、視点位置によって非表示になったりして調整が難しいという問題がありました。特にVRとデスクトップで見え方が変わったりと適切なパラメータ調整が大変でした。
また、iPhoneだとメモリ不足で複数ユーザで入ると落ちるという問題がありました。そのため本選出場後に本格的な軽量化を行うことにしました。
負荷の軽減のためにエリアごとにメッシュの結合を行うことにしました。メッシュの結合には以下のアセットを使いました。
MesghBakerと違ってマテリアル結合はできませんが、UIが使いやすかったのでこちらを利用しました。同一マテリアルを1メッシュにしただけでも大幅に軽量化されました。最終的には全体で60~160Callくらいに軽量化できました。
次にしたテクスチャの削減です。こちらはメモリ使用量に影響します。解像度を下げるのも良いですが、Crunch Compressionによる圧縮も非常に効果的でした。このワールドでは見た目の影響が出ない80%のQualityで圧縮しています。一枚当たり5.1MB→1MBで容量が1/5くらいになってます。
もともと130MBあったワールドサイズを最終的に60MB未満に収めることができました。また、モバイルでの使用メモリ量も1GB未満に抑えられました。
ライティングの補足
基本的にLightProbeとReflectionProbeも置いてベイクしています。
ライティングの設定はこんな感じになってます。圧縮すると汚くなるのでCompress Lightmapsは基本的に無効にしています。
Lightmap Sizeに関してはワールド容量、テクスチャ使用量に影響するので見た目と相談してちょうど良いサイズに設定しています。容量的には27MBくらいです。
Lightmap Parametersは基本的にデフォルト値のままですが、裏向きメッシュが原因で影ができるのを避けるため、Backface Toleranceは小さく調整しています。
最後に
審査基準とは別方向を目指していたので本選に選ばれたときは正直驚きでした。なんやかんやでZONe賞も受賞させていただきました。
怖いと感じるワールドを目指しましたが最終的な怖さレベルで言えばこんな感じになったと思います。
VRで一人でプレイ>>>>>>スマホ、デスクトップ>=複数人でプレイ
最初に一人でテストプレイした時は正直怖かったです。こんな感じで機器によって全然プレイ体験が違うので機会があればVRで一人遊んでみるのも良いと思います。