「いけにえと雪のセツナ」グラフィック解説(第4回・ツール編)

投稿者: | 2016年8月22日

はじめに

前回に引き続き、「いけにえと雪のセツナ(I am Setsuna)」(Tokyo RPG Factory)でのグラフィック処理の解説をしていきます!
今回で最終回です!!

前回は「シェーダ編」で、ゲーム性に絡めたシェーダ設計の話をしました。

ただ・・・ボリュームが非常にあったかなと反省していますので・・・。
今回はサラっとした感じで「ツール編」としてお送りします!

※去る2016/4/5にもUnite2016にて一部公開致しましたが、本編はそれも含めつつの内容になっています。
そちらの資料動画も合わせてご覧いただくのをオススメします。


Unityでのツールについて

描画機能を充実したものにしたとしても、それが扱いづらいものだとしたら意味を成しません。
使いやすいものにするためには「ツール」の存在が不可欠です。

例えば前回取り上げた「シェーダ自動生成ツール」も、その一端と言えます。

setsuna_shader_generator

UnityではこのようなGUIツールを気軽に作成することができます。
それにはEditorWindowを活用します。

これから本作で作成したツールの一部を紹介します。


テクスチャサイズチェックツール

まずは「テクスチャサイズチェックツール」というものを取り上げます。

その前に本作のゲーム性のおさらいです。
何度も言いましたが、「見下ろし型RPGである」というのが大きな特徴です。

setsuna_scene_camera

カメラが横方向に回り込んだりすることが無いのと同時に、カメラがプレイヤーに寄ることがありません。
一方テクスチャにはMIPMAPがあり、これはテクスチャとカメラの距離で適切な解像度のものに切り替わるのですが、本作はカメラがプレイヤーに寄らないのでMIPMAPは基本的に必要無いはずですし、実際、殆どのテクスチャはMIPMAPを持っていません。(リソースサイズ削減の目的)

ですので、過度に大きいテクスチャを貼り付けると、データサイズと処理速度的に非常に無駄になり、逆に小さいテクスチャだとボケ気味の絵になってしまうので、適切なサイズのテクスチャを貼り付けるのが理想となります。

そのためのこの「テクスチャサイズチェックツール」です。

ツール動作

ツールのGUIは下の様になっています。(非常にシンプルですが・・・。)

setsuna_tool_map_analyzer

動作は非常にシンプルで、「実行中に「テクスチャサイズチェック」ボタンを押す」だけです。
そうすることで現在表示中のゲーム画像でチェックができます。

setsuna_tool_tex_size_before

↓(ボタンを押す)

setsuna_tool_tex_size_after

ボタンを押すと青、緑、赤での単色表示に変わります。
(エフェクトなど一部はシェーダの関係でそうなりません。)

それぞれの色は以下を意味しています。

意味
MIPMAPレベル0を表示
MIPMAPレベル1を表示
MIPMAPレベル2以上を表示

MIPMAPレベルが大きくなればなるほど解像度が小さいテクスチャになります。
「大きなMIPMAPレベルを表示している=それより小さいレベルが無駄になっている」というのを意味するので、赤や緑のテクスチャは過度に大きなテクスチャが貼られていると言えます。

これを見てテクスチャを調整し、適切なサイズを見定めることが可能です。


カメラロック範囲検知ツール

次に紹介するのは「カメラロック範囲検知ツール」です。

カメラロックとは何か?という話ですが、これもやはり「見下ろし型RPG」というのがかかってきます。

普段プレイヤーを動かしていると、中央にそのプレイヤーが来るようにカメラが追従します。
ですがマップの端の方へ行くとカメラはプレイヤーを追わず、プレイヤーが画面端に行くようなシチュエーションになります。
(モチーフとなったSFC世代のRPGも基本はそんな感じになっていると思います。)

setsuna_tool_camera_lock_before

↓(画面端の方へ移動)

setsuna_tool_camera_lock_after

これを行うにはカメラが移動できる範囲をマップごとに設定する必要があります。
それをサポートするのがこのツールとなります。

ツール動作

「テクスチャサイズチェックツール」と同じGUIで、「カメラロック検知」を押すと動作します。

setsuna_tool_map_analyzer

押すことで内部処理が走りマップの可視部分を総なめして、適切なロック範囲を算出します。

setsuna_tool_camera_lock_map_before

↓(チェック終了)

setsuna_tool_camera_lock_map_after

このロック範囲になる条件ですが「画面外の部分(上図だとグレー部分)が表示されない」「地面コライダーからプレイヤーが行けるところに制限」というものです。
(なので下の方の海は対象外になっています。)

算出した結果は最終的に、コンポーネントとして管理します。
ちなみにこの値は修正可能なので、結果に満足いかない場合でも微調整できます。

setsuna_tool_camera_lock_config

これでカメラロック範囲を容易に設定することが可能になります。


Light Probes配置ツール

次は「Light Probes配置ツール」です。

前回でライティングはLight Probesメインで行われる話をしました。
その為には各マップにLight Probesを適切に配置する必要があります。

setsuna_shader_light_probes

手作業だとそれが結構手間になるので、それをサポートするのがこのツールです。

ツール動作

いつものGUIにLight Probes配置の項目があります。

setsuna_tool_lightprobes_window

「LightProbes配置」で各種パラメータを設定後、「配置実行」で配置を行います。

setsuna_tool_lightprobes_before

↓(配置完了)

setsuna_tool_lightprobes_after0

このようにLight Probesを適当に配置してくれるのですが、画像のように格子状に配置するようになっています。
Light Probeの数が多いとメモリ消費などがかさむので、最終的には手作業である程度数を間引いてもらいました。

setsuna_tool_lightprobes_after0

↓(手作業で間引き)

setsuna_tool_lightprobes_after1

本作での作業時は時間がなく、この辺の作り込みが甘いものになってしまいました。
やり方次第では配置の精度も十分に上げられるものと考えていますが、一から配置するより手間がかからず、作業時間確保の一端にはなっていると思います。


雪面分割ツール

最後に「雪面分割ツール」の話をします。

Unite2016にて、雪面凹みの話をしました。
その実現のため、雪面部分は非常に細かく頂点分割を行っています。

setsuna_tool_snowfield_grid

これはアーティストにこのような頂点の割り方でデータ作成を依頼したわけではありません
Unity上で頂点分割を行って保存しています。

これはそのためのツールです。

処理の意図

まず、最終的な処理の意図について書きます。

アーティストには頂点分割を意識せず、普通の状態の地面でデータを作ってもらいます。
それをUnity上で処理し、細かく頂点を割って最終データとしています。

setsuna_tool_snowfield_before setsuna_tool_snowfield_after
頂点分割前
(アーティストが作る時はこの状態)
頂点分割後
(Unity上でこのようにする)

「最初から頂点を割ってもらった方が楽じゃないの?」と思われると思います。
しかし以下の考えより分割はプログラム側で握った方が都合が良いと考え、最終的に分割をUnity上で行うことにしました。

・見た目や負荷の関係からグリッドの間隔を調整するかのしれないので。
・開発中のマップの変更に伴い、データ修正の手間と不意の不具合発生を避けたかったので。
・分割する必要のないところ(上マップだと崖部分とか)は分割しないようにしたかったので。

このツール自体は非常に作成に時間がかかったのですが、上記が実現できたので、その作成コストは無駄にならなかったものと思います。

ツール動作

普通の状態の地面のメッシュに、下の様なコンポーネントを付与します。

setsuna_tool_snowfield_inspector

各種サイズを指定し、「メッシュ編集」を押すことで分割が行われます。

分割は「地面を大雑把にGameObjectとして分割する」「分割したGameObjectの地面で、凹むところだけ指定のグリッドサイズで頂点分割する」という流れです。

・オブジェクト分割サイズ・・・GameObjectに分ける時のサイズ。(上だと10m四方)
・ポリゴン分割サイズ・・・頂点分割のサイズ。(上だと20cm四方)

GameObjectで大雑把に分けるのは、単一のGameObjectにしてしまうと見えない部分まで描画対象になってしまうので、GameObjectを細かく分けてある程度カリングされるのを期待しています。
(下図はそのGameObjectの一つを選択した状態。)

setsuna_tool_snowfield_gameobject

頂点分割を行うかどうか、つまり凹ませる地面かどうかの指定ですが、それは貼り付けるテクスチャ側のアルファで指定します。
ですので、アーティスト側も直感的な調整が可能です。

ちなみに描画時は必ず不透明となると判断して、アルファは見ていません。
(しかし描画負荷やリソースサイズを考えると、凹み指定は別テクスチャで持っても良かったと考えます。)

setsuna_tool_snowfield_tex_color setsuna_tool_snowfield_tex_alpha
カラー アルファ(凹み度合い)

これらのプロセスを経て、雪面の分割が柔軟性高く行えるようになりました。


まとめ

今回は「いけにえと雪のセツナ」でのツールについてまとめました。

Unity上だとEditorWindowなどでGUI形式でのツール作成が非常に楽に行えるようになっています。
ツールだけではなくInspectorの表示も変えたりできるので、特にプログラマ以外の人間が作業を行いやすくする為に工夫が入れられると思うので、こう言ったところも気を配れると良いと思います。

そして、本連載もこれにて終了になります。

全体を振り返ってみるとUnityをなるべく使い倒すように、そしてそこから大きく外れた使い方をしている箇所も多くあった印象です。
こういったことが出来るかどうかですが、この辺りは作られている作品の状況(スケジュールなど)次第で、しかしながらUnityに熟知しておくのは悪い事ではないと考えます。
余裕が出来た時に一工夫入れるなどのことができると、今後の作品作りも有意義になるかなと思います。

その際、本連載がその一助になれば幸いです。

それではご愛読ありがとうございました!!


※お知らせ

株式会社ロジカルビートでは、一緒に働いてくれる仲間を募集しています!
興味を持たれた方は採用ページを是非ご覧下さい!


 

 

【免責事項】
本サイトでの情報を利用することによる損害等に対し、株式会社ロジカルビートならびに株式会社Tokyo RPG Factoryは一切の責任を負いません。

※「いけにえと雪のセツナ」:©2016 Tokyo RPG Factory Co., Ltd. All rights reserved.