【レポート】Unity5を使った「いけにえと雪のセツナ」の雪世界の作り方 #unite2016tokyo

IMG 5812

スライド

【Unity5を使った「いけにえと雪のセツナ」の雪世界の作り方】



いけにえと雪のセツナ

いけにえと雪のセツナ いけにえと雪のセツナ

PS4PSVマルチプラットフォームタイトルのRPGゲームクロノトリガーみたいなゲームを目指して作成されています。 タイトルの通り雪が降っている世界がメインステージ。

いけにえと雪のセツナ - 描画設計

いけにえと雪のセツナ

unity5.2.2p3で作成されている。 2014年後半から開発。完成までに約1年半かかった。 PS4PSVマルチプラットフォームなのですが、スペック的に低いPSVを基準に描画周りを考えて作成をした。

カラースペースをガンマで対応。

PSVがリニアに対応していなかった。 Unity - マニュアル: リニアレンダリング パイプライン処理 - Wikipedia

フォワードレンダリングを採用。

デファードレンダリングPSVでの負荷が心配。 デファードレンダリング はライトと影が最も厳密にレンダリングされます。もし多くのリアルタイムライトを使いたいのであれば最適でしょう レンダリングパス

テクスチャサイズ。

MIPMAPはOFF。見下ろし型なので。 解析度はPS4: 1940 * 1080PSV: 960*544 PS4基準で縦横を半分にしてPSVで利用。
MIPMAP

ライティング

Enlightenを利用、EnlightenはGI(グローバルイルミネーション)のことです。 品質が高い。 リアルタイムのライトは利用していない。エフェクトのみ。 Unity - マニュアル: グローバルイルミネーション ライトプローブ

シェーダー

「シェーダ自動生成システム」を作成。 これは、UnityEditorで動くツールで、色々と機能を選択してシェーダーファイルとして生成できる シェーダーのベースはUnity5のstandardを改造。 surfaceだと明るくなる問題がある。また、独自言語なんので最適化しにくい。 PassはForwardBaseのみ設定。 そのstandardも細かいところで削っている利用している。 Unity - マニュアル: ShaderLab: Pass タグ

Replaces shaderの活用

Replaces shaderはcameraの機能。 特定のRendererのみ使うのがUnityでは使いにくい。 特定のシェーダーのみ描画できる。

雪世界の表現

技法2つ。 いけにえと雪のセツナ

雪面の凹み

足あとをつけるだけだと寂しい。 VTF(vertex Texture Fetch)を活用。 マップテクスチャを、1グリッド20cm四方の地形を作り、Playerが通過時に頂点シェーダーを参照して凹ませている。

DOFパーティクル(被写界深度

雪に関連するドラマ映画を見て、雪の描写を考えた。 目の前でボケて見えるような描写がしたい。 逆方向のMIPMAPを使っている。 MIPMAPレベルをカメラに近づくほど高くして、奥に行くほど低解像度にしている。 Border Mip Mapsの設定をONにする必要がある。 DOFパーティクルは簡単だった。

いけにえと雪のセツナ

ビルド時の最適化

メモリ、負荷を減らしたい。 jenkinsで定期的にビルドを行っているのが、実際のビルド前に最適化を行っている。

Rendererマージ

Rendererをまとめて一つの大きなMeshにしている。 prefabを配置するスタイルだとゲームオブジェクトが増える。

FBX再出力、再参照

頂点ライトマップ

Enlightenを使うと色々メリットがあるが、テクスチャ枚数が多いのでをVRAMを消費する。 そこで考えたのが頂点ライトマップ。 品質は落ちるが、テクスチャの枚数を減らせることができる。

ビルド時最適化のメリット・デメリット

メリット:メモリや負荷を抑えることができる。 デメリット:処理に時間が掛かる。

まとめ

Unityの性能を引き出すためには、Unityを熟知するのが必須(ドキュメントをしっかり読み込む) 実は、抜け道がたくさんある。 出来ない場合もあるので、早めに諦めることも肝心。

感想

Uniteに展示がされていた本作品なのですが、PS4PSV向けとあって、とてもグラフィックが綺麗です。 実際に試遊をさせていただいたのですが、今回話しにあった雪の描写などがとても良くできているのではないかと感じました。
IMG 5813

今回はモバイル向けの話ではなかったので、特にグラフィック面等、実践できる部分は少ないかもしれないのですが色々と勉強になりました。 まとめでもおっしゃられていたのですが、Unityを熟知することがとても大切で、私もまだまだ知らないので、この辺りを勉強して行かなくてはいけないのでは無いかと思いました。