Edited at

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

Unreal Engine 4 (UE4) Advent Calendar 2016の12月5日の記事です。

UE4は標準ではセルシェードに対応していません。

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

何か間違い有りましたら指摘ください。

今後また見つけたら随時追加していきます。


シェーディング

手法
概要
実装コスト
エンジン改造
メリット
デメリット

Unlit or Emissive
UE4のシェーディングを動かないようにしてマテリアル内で自前ライティング
安い
不要
マテリアル毎にシェーディングや色を設定できる
UE4のライト計算や影を使用できなくなる

PostProcess
ポストプロセス-マテリアル弄ってライティング
安い
不要
UE4のシェーディングを使用しつつカスタマイズが出来る
マテリアル単位での追加の色設定等が難しい

エンジン改造
エンジンコード弄ってシェーディング
高い
必須
思いのままに実装できる
実装、保守コストが高い


Unlit or Emissive

マテリアルをUnlitにしたり、Emissiveカラーだけを出力に使用する。

そしてマテリアル内で自前でライティングを計算し、結果を出力に繋ぐ。


参考


Post Process

Post Processマテリアルでライティングの数値を逆算して算出、そのライティングの数値を弄ってシェーディングする。

ライティングの数値さえ取れれば使い勝手が良いので、多分現状だと一番使用されている手法っぽい。


参考


エンジン改造

UE4はソースコードが公開されているので、そっちを書き換える。

拡張性は一番高いけど、多少コードを読み書き出来る必要有り。

また、エンジンのバージョンが上がる度にマージしないといけないのでコストが高い。


参考


その他


輪郭線

手法
概要
実装コスト
処理負荷

背面法
モデルを複製・拡大してバックフェイスをレンダリング
そこそこ
モデル数依存

Post Process
ポストプロセス-マテリアルで抽出して線をレンダリング
安い
スクリーン解像度依存


背面法

モデルを法線方向に拡大してバックフェイスをレンダリング→通常モデルをレンダリング。すると拡大した分だけ線が残ってアウトラインになる。

メッシュ数・ポリゴン数が2倍になるので、モノが増えれば増えるほど処理負荷が高くなる。

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


参考


Post Process

Post Processマテリアルで、法線や深度をベースにLaplacianやSobel、Prewittフィルターを使用して輪郭を抽出してレンダリングする。

実装しやすい、ポストプロセスなので処理負荷が一定になりやすい。

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


参考


その他


その他

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


参考


マーケットプレイス


レビュー


締め

明日のUnreal Engine 4 (UE4) Advent Calendar 2016kb10uyさん記事です。