2Dゲームのリッチなビジュアルを実現する技術調査

# 2Dゲームのリッチなビジュアル

　ずいぶん前になりますが、オクトパストラベラーが発売されたとき、「3Dは技術的な手段でビジュアルをリッチに見せる方法がたくさんあるけど、**2Dゲームのビジュアルを技術でリッチにしてるのってあんまり無いのでは・・・？** 」と、技術需要が発生しそうな匂いを感じたので研究しはじめました。
　調べたらすでに結構そういうゲームはあって無知を知る結果にはなりましたが、じゃあ「*その実現方法わかる？*」といわれると微妙なところだったので、研究を継続することに。

　まずは **市場の絵が綺麗なゲームがなぜ綺麗に見えるのか？** を言語化して、関連してそうな技術を洗い出しました。本記事はそのまとめです。

### 備考

　2Dゲームのビジュアルクオリティを支えるものには２つの要素があると思っています。

* **イラスト自体の美麗さ** や **手付けのリッチなアニメーション** など、デザイナーさんの努力によるもの
* **フィルター** や **ライティング** 、**フレーム補間** などの技術によるもの

　前者も勉強しがいのある領域ではありますが、切り離して考えないとややこしくなるため本研究の対象外としています。
　分かりやすいものだと、例えば [CUPHEAD](https://store.steampowered.com/app/268910/Cuphead/?l=japanese&cc=ru) はフィルム風のノイズフィルターなどの技術的な手法が使われているものの、基本的には **圧倒的な枚数のアニメーション** と **こだわりぬいたテイストのイラスト** によってそのクオリティが支えられています。とてもリッチで真似したい2Dグラフィックなのですが、こういう手段で築き上げられたクオリティは生半可な技術の及ぶところではないので、本研究では触れてません。
　エンジニア的に貢献できそうな後者に注目していろいろ調べました。

# 絵づくりの技を盗みたいゲーム

　具体的にどこが綺麗かを言語化＆それを実現するのに使えそうな技術を書き殴ります。

## [オクトパストラベラー](https://www.youtube.com/watch?time_continue=79&v=_5pweox1Io8)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184294/f9141f29-da28-0882-5949-7fab572738a5.png)

今回の研究の発端。
「*2Dスプライトのドット絵のキャラを3D空間で動かす*」というのはゼノギアスとかペーパーマリオとか色々前例が思いつきますが、オクトパスは *ポストエフェクト*　や *ボリュームライト* などをふんだんに使って **光と陰影を感じる空間** を実現しています。

### 【ポイント１】Lightの反映
<img height = 250 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184294/3862feb7-17af-3358-eba2-ebe1d54a453e.png">　<img height = 250 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184294/0835c91a-66f0-d4d7-5ed8-c376ff9c427f.png">


　言うまでもない点ですが、各キャラクターが発生したエフェクトや手に持ったランプなどの光を受けて、

* スプライトの **シルエットの影** ができる
* スプライトに **光の色が反映** される
* 光を受けた時、輝度が高いと [**Bloom**](https://docs.unity3d.com/ja/current/Manual/PostProcessing-Bloom.html) によってボケる

というような効果を生んでいます。エフェクトの輝度やBloomの強さはかなり大げさになっていて、ちょっとした変化でも一目に光の影響が出ていることがわかります。（いい意味でわざとらしい）

### 【ポイント２】焦点距離によるボカし

<img height = 250 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184294/252ac5cd-7be9-1987-ad94-0421a4b26ac1.png">

　[**Depth Of Field**](https://docs.unity3d.com/ja/2018.1/Manual/PostProcessing-DepthOfField.html) によって焦点範囲外のオブジェクトに強くピンボケをかけていて、奥行きを感じやすいです。
*焦点範囲を狭めにしている*ようで、ちょっと奥にオブジェクトが離れるだけでボケが入り、画面に映る範囲が狭くても空間感を感じます。

### 【ポイント３】ボリュームライトによる空間表現

<img height = 250 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184294/7e3ea30f-da61-404e-fce0-d3d2f0e93875.png">

　**ボリュームライト**とは、本来見えない光の形が、霧やホコリによって見えることです。（[参照](http://www.asahi-net.or.jp/~qb3k-kwsk/3dcg/know/layout/lay32.html)）
上図では、崖の隙間から指す光が見えることで、奥行きを感じられるようになっています。この表現があることで影やオブジェクトの色味とは別に光を感じることができ、リッチな印象を与えています。
　Unityでのボリュームライト表現は [**Aura – Volumetric Lighting**](https://lmhpoly.com/unity-tutorial-volumetric-lighting/) が素晴らしいという噂。


## [The Last Night](http://oddtales.net/)

<img height = 250 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184294/05211242-552f-e75c-ae71-a5aaf195e07d.png">

**クオリティが変態すぎる。** 今回の研究で目指す方向の極地。
オクトパストラベラーでやっている技術は軒並み使われていそうなので、それ以外のものをピックアップします。

### 【ポイント１】ドット絵の陰影に光を反映

<img height = 250 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184294/5eb8e4d0-e7e8-a970-51c3-153ce4d9acb6.png">　<img height = 250 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184294/42e825c5-ab05-9057-2df5-c54d4cf6cec6.png">

　上の図では家屋から漏れるオレンジ色の光を受けて、背中や頭のフチがドット絵でリムライト（逆光によるフチの着色）っぽいデザインになっていますが、雷？が光ったときにそのリムライト部分の色が変わるだけでなく、ドットの領域が **ドット単位で** 広がっています。
　**形状を持たない2Dの絵にこういう表現をするのはかなり特殊なことをしないといけないはず** で、かなり特徴的です。

* [ドット絵に照明効果を追加する - テラシュールブログ](http://tsubakit1.hateblo.jp/entry/2018/06/08/220000)

こういうことをやっているんでしょうか？調査＆検証中…

<img height = 250 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184294/0d971d55-9997-e66a-0447-dfc9d93a2091.png">
▲めっちゃカッコいい

### 【ポイント２】画面手前へのボリュームライト＋リッチマテリアルの地面

<img height = 250 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184294/55c2afac-1128-61ba-fae9-b7d00e11901a.png">　<img height = 250 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184294/7dbb75b8-aeec-a9ce-ea46-d20864fcbbd1.png">

地面のマテリアルの [**ノーマル（凸凹）**](https://docs.unity3d.com/ja/current/Manual/StandardShaderMaterialParameterNormalMap.html) や [**スペキュラー（照り返し）**](https://docs.unity3d.com/ja/current/Manual/StandardShaderMaterialParameterSpecular.html) が繊細。
ボリュームライトで画面手前を照らす絵が多く、その際の地面の照らされ方が全体のドットデザインとは逆にリアル指向のビジュアルで、それが結果的に **画面の奥行きを生んでいる** ように見えます。

## その他注目ゲーム

* [Hollow Knight](https://store.steampowered.com/app/367520/Hollow_Knight/)
  * [Unityに公式に紹介される](https://unity.com/ja/madewith/hollow-knight)クオリティ
  * **何層にも分けたレイヤーによる多重スクロール** で奥行きを感じます
  * Bloomで全体的にボヤっとした雰囲気
* [幻想郷萃夜祭](https://store.steampowered.com/app/1122050/Gensokyo_Night_Festival/)
  * クリエイティブのクオリティに由来するところもあるけど、エフェクトが綺麗。
  * **Bloomが良い感じに反映** されていて、東方原作の弾幕の華やかなイメージが落とし込まれています（色使いがカラフルなのに雑多に感じなくて凄いなぁ）
* [Legend of Dungeon](https://store.steampowered.com/app/238280/Legend_of_Dungeon/)
  * 3Dのキューブ？で床と壁を置き、そのうえで動くキャラクターの影や配置された光による陰影を反映している
* [Ori and the Blind Forest](https://www.orithegame.com/)
  * 背景がほとんど2Dスプライト…？の割には光がすごく凹凸を感じる反映のされ方をしている。要調査


# 検証する技術リスト

　ここまでの調査をもとに、関連してそうな以下の技術を組み合わせて今後いろいろ試してみたいです。ひとまず今回はここまで。

## 1. スプライトに光の影響を与える
  * [Sprite RendererでLightを使う - (:3[kanのメモ帳]](http://kan-kikuchi.hatenablog.com/entry/2D_Light)
  * [PostProcessing](https://docs.unity3d.com/ja/2018.1/Manual/PostProcessing-Stack.html) でBloomかけるとどうなるかな？

## 2. PixelPerfectでドット絵感出す
* [ピクセルパーフェクトなスプライト表現する - テラシュールブログ](http://tsubakit1.hateblo.jp/entry/2018/05/29/003530)
* アニメーションと組み合わせるといい感じ：https://twitter.com/notargs/status/1132561608759103489?s=20

## 3. SpriteにLightで陰影をつける
* [ドット絵に照明効果を追加する - テラシュールブログ](http://tsubakit1.hateblo.jp/entry/2018/06/08/220000)

## 4. ボリュームライトで空間感を出す
* [ボリュームライト表現やレンズの汚れ表現 - テラシュールブログ](http://tsubakit1.hateblo.jp/entry/2014/10/01/013054)
* [Aura 2 - Volumetric Lighting & Fog](https://assetstore.unity.com/packages/tools/particles-effects/aura-2-volumetric-lighting-fog-137148) ってアセットもある

## 5. スプライトのいろんな特殊効果当てる
* [2DxFX](https://assetstore.unity.com/packages/tools/sprite-management/2dxfx-2d-sprite-fx-42566) で相性よさそうなもの使ってみる
* [紹介記事](http://www.asset-sale.net/entry/2DxFX%3A_2D_Sprite_FX_180227) - 2DSpriteにかける特殊効果アセット（残像、水による歪み、ホログラムなどなど）

#### 2019/08/27 [続編記事](https://qiita.com/flankids/items/3a69bbdc4b52d0a516ef) 出しました

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ドット絵のキャラクターを自然に3D空間に馴染ませるテクニック <a href="https://t.co/juxESYa1sE">https://t.co/juxESYa1sE</a> <a href="https://twitter.com/hashtag/Qiita?src=hash&amp;ref_src=twsrc%5Etfw">#Qiita</a> <a href="https://t.co/WnlyWOtoRn">pic.twitter.com/WnlyWOtoRn</a></p>&mdash; 徳川バガ寅 (@flankids) <a href="https://twitter.com/flankids/status/1166051747288080385?ref_src=twsrc%5Etfw">August 26, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>