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

  • 17
    Like
  • 0
    Comment

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さん記事です。