UE4のセルシェード実装方法を纏めたい

[Unreal Engine 4 (UE4) Advent Calendar 2016](http://qiita.com/advent-calendar/2016/ue4)の12月5日の記事です。

UE4は標準ではセルシェードに対応していません。
そこでUE4でセルルック、セルシェードを実装されている方々の手法のリンクを纏めました。

何か間違い有りましたら指摘ください。
今後また見つけたら随時追加していきます。

- 他まとめリンク
    - 販売・公開されているToonシェーダ系UE4アセット・情報 自分用まとめメモ(仮) - ぼっちプログラマのメモ
        - http://pafuhana1213.hatenablog.com/entry/2019/04/09/104042


# シェーディング

|手法|概要|実装コスト|エンジン改造|メリット|デメリット|
|:----:|:----:|:---:|:---:|:---:|:---:|
|[Unlit or Emissive](#Unlit or Emissive)|UE4のシェーディングを動かないようにしてマテリアル内で自前ライティング|安い|不要|マテリアル毎にシェーディングや色を設定できる|UE4のライト計算や影を使用できなくなる|
|[PostProcess](#Post Process)|ポストプロセス-マテリアル弄ってライティング|安い|不要|UE4のシェーディングを使用しつつカスタマイズが出来る|マテリアル単位での追加の色設定等が難しい|
|[エンジン改造](#エンジン改造)|エンジンコード弄ってシェーディング|高い|必須|思いのままに実装できる|実装、保守コストが高い|


## Unlit or Emissive

マテリアルをUnlitにしたり、Emissiveカラーだけを出力に使用する。
そしてマテリアル内で自前でライティングを計算し、結果を出力に繋ぐ。


### 参考

- UE4 誰でもわかるセルシェーダー入門 - Let's Enjoy Unreal Engine
http://unrealengine.hatenablog.com/entry/2019/12/01/000735

- 【UE4】セルっぽいルックを頑張ってみる その２（カラー） - 開発日誌
http://ogimafu.blogspot.jp/2015/03/ue4_22.html

## Post Process

Post Processマテリアルでライティングの数値を逆算して算出、そのライティングの数値を弄ってシェーディングする。
ライティングの数値さえ取れれば使い勝手が良いので、多分現状だと一番使用されている手法っぽい。

### 参考
- 【UE4】ポストプロセスマテリアルで簡単なセルシェーディングやってみた　【★★★】 - キンアジのブログ
https://kinnaji.com/2018/12/10/instantcellshading/

- Unreal Engine 4(UE4)ってPBRでHDRだけどアニメ調のレンダリングもしたいですよね？ - Qiita
http://qiita.com/junyash/items/a548fc71a8bae76382e1

- UE4でセルシェーディング - Roy
http://royaaaa.hatenablog.com/entry/2016/05/31/211359

- UE4 トゥーンシェーディングとアウトラインによるセルルック表現のためにやったこと - Let's Enjoy Unreal Engine
http://unrealengine.hatenablog.com/entry/2015/10/25/233253

- アンリアルフェス2015横浜で公開したNPR、トゥーンのアルゴリズムと使い方詳しく解説するよ(*´∀｀)う - Qiita
http://qiita.com/junyash/items/0e528e1f291a710cf04f

- ノンフォトリアルやセルルック等の独特なレンダリングを！ - Unreal Engine Forum
[https://forums.unrealengine.com/showthread.php?49796-ノンフォトリアルやセルルック等の独特なレンダリングを！](
https://forums.unrealengine.com/showthread.php?49796-%E3%83%8E%E3%83%B3%E3%83%95%E3%82%A9%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%84%E3%82%BB%E3%83%AB%E3%83%AB%E3%83%83%E3%82%AF%E7%AD%89%E3%81%AE%E7%8B%AC%E7%89%B9%E3%81%AA%E3%83%AC%E3%83%B3%E3%83%80%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%92%EF%BC%81)

- Unreal Engine 4でToon Shaderを試してみる - 書きたいときに書きたいことを書くブログ
http://himazinn0523.blog55.fc2.com/blog-entry-1351.html

## エンジン改造

UE4はソースコードが公開されているので、そっちを書き換える。
拡張性は一番高いけど、多少コードを読み書き出来る必要有り。
また、エンジンのバージョンが上がる度にマージしないといけないのでコストが高い。

### 参考
- UE4.14.0 Forward Shadingのエンジン改造でセルシェードやってみた - slideshare
http://www.slideshare.net/com044/ue4140-forward-shading-69295343

- [UE4] エンジンのシェーダコードを変更する - もんしょの巣穴blog
http://monsho.blog63.fc2.com/blog-entry-155.html
http://monsho.blog63.fc2.com/blog-entry-161.html

## その他

- 【UE4】水彩風マテリアルを作ってみた - てんちょーの技術日誌
http://shop-0761.hatenablog.com/entry/2016/12/08/000026

- それぞれを複合されている模様。
    - 【第3回UE4札幌Meetup!!!】 UE4で実装するセル表現 - Slideshare<br>
http://www.slideshare.net/TomohiroOgiwara/ue4meetup-63696087


# 輪郭線

|手法|概要|実装コスト|処理負荷|
|:---:|:---:|:---:|:---:|
|[背面法](#背面法)|モデルを複製・拡大してバックフェイスをレンダリング|そこそこ|モデル数依存|
|[Post Process](#Post Process)|ポストプロセス-マテリアルで抽出して線をレンダリング|安い|スクリーン解像度依存|


## 背面法

モデルを法線方向に拡大してバックフェイスをレンダリング→通常モデルをレンダリング。すると拡大した分だけ線が残ってアウトラインになる。
メッシュ数・ポリゴン数が2倍になるので、モノが増えれば増えるほど処理負荷が高くなる。

そのままだと、カメラ距離によって線の太さが変わる。

### 参考
- UE4 誰でもわかるアウトライン入門 - Let's Enjoy Unreal Engine
http://unrealengine.hatenablog.com/entry/2019/12/05/000603

- [UE4] スケルタルメッシュのボーン情報を別メッシュにコピーする - historia
http://historia.co.jp/archives/5587

## Post Process

Post Processマテリアルで、法線や深度をベースにLaplacianやSobel、Prewittフィルターを使用して輪郭を抽出してレンダリングする。
実装しやすい、ポストプロセスなので処理負荷が一定になりやすい。

キャラクターの一部分だけ線を細くしたい、とかカメラ距離によって線の太さを変えたい、となった場合は色々対応が必要。

### 参考
- Unreal Engine 4(UE4)ってPBRでHDRだけどアニメ調のレンダリングもしたいですよね？ - Qiita
http://qiita.com/junyash/items/a548fc71a8bae76382e1

- UE4 トゥーンシェーディングとアウトラインによるセルルック表現のためにやったこと - Let's Enjoy Unreal Engine
http://unrealengine.hatenablog.com/entry/2015/10/25/233253

- アンリアルフェス2015横浜で公開したNPR、トゥーンのアルゴリズムと使い方詳しく解説するよ(*´∀｀)う - Qiita
http://qiita.com/junyash/items/0e528e1f291a710cf04f

- UE4 にて特定の Actor に対して輪郭線・クリース線・色の境界線を描画する、あるいはD言語くんを真の姿にする方法 - rarilog
http://rarihoma.xvs.jp/2015/02/22/1/

- UE4のポストプロセスマテリアルで色々してみた　基本編 - Unreal Engine 4 (UE4) Advent Calendar 2014 - ぼっちプログラマのメモ
http://pafuhana1213.hatenablog.com/entry/2014/12/02/121649


## その他

- それぞれ複合されている模様。
    - 【UE4】セルっぽいルックを頑張ってみる その４（エッジ） - 開発日誌<br>
http://ogimafu.blogspot.jp/2015/04/ue4.html

# その他

リムライトやスペキュラ、ディフュージョンフィルター等など他にも色々要素があります。

## 参考
- UE4のUnlitでトゥーンレンダリングをキメる！ - Qiita
https://qiita.com/ruyo/items/28255f26725a6b6bd475

- UE4でMToonを再現したい（1/2） - Qiita
https://qiita.com/ruyo/items/ec082d81dea3033e1500

- 【UE4】セルっぽいルックを頑張ってみる その１（概要） - 開発日誌
http://ogimafu.blogspot.jp/2015/03/ue4.html

- 妹でもわかるUnreal Engine4
http://imoue.hatenablog.com/search?q=%E3%83%88%E3%82%A5%E3%83%BC%E3%83%B3

- Unreal Fest East 2017: Unreal Engineを使用した商用タイトルでのノンフォトリアルレンダリング（NPR）事例 - Youtube
https://www.youtube.com/watch?v=4h4ABU7RegU

# マーケットプレイス
- illustrious - UE4 Marketplace
https://www.unrealengine.com/marketplace/illustrious

- Character Cel Shading Pack - UE4 Marketplace
https://www.unrealengine.com/marketplace/character-cel-shading-pack

- All Platform Outline Pack - UE4 Marketplace
https://www.unrealengine.com/marketplace/all-platform-outline-pack

- Advanced Cel Shader Pack - UE4 Marketplace
https://www.unrealengine.com/marketplace/advanced-cel-shader-pack

## レビュー
- 帰ってきた、UE4のマーケットプレイスで購入したアセットを片っ端からレビューマン その1 - ぼっちプログラマのメモ
http://pafuhana1213.hatenablog.com/entry/2016/12/09/004326#section2



# 締め
明日の[Unreal Engine 4 (UE4) Advent Calendar 2016](http://qiita.com/advent-calendar/2016/ue4)は[kb10uy](http://qiita.com/kb10uy)さん記事です。