読者です 読者をやめる 読者になる 読者になる

Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE4 比較的安価な手法でトゥーン(セル)シェーディングをやってみる

過去にUE4でトゥーンやセルルック表現についてを解説しました。

unrealengine.hatenablog.com

またエピック下田さんが開発したNPRマテリアルを利用することにより、同じようなことが可能となります。

qiita.com

これらの手法を使うのは当然ありなのですが、上記はエンジンビルドが必要だったり、複雑なマテリアルを使いこなす必要があります。
まずお手軽に、そして比較的安価な手法によるセルシェーディング可能な方法が海外フォーラムで公開されていました。

forums.unrealengine.com

セルシェーディングポストプロセス

この手法はかなり単純なもので、比較的誰でもすぐに利用可能です。詳しいやり方は公式のWiki上にも掲載されていますので、そちらも参考に。
Cel Shading Post Process - Epic Wiki

やっていることはポストプロセスマテリアルにより、シーンテクスチャーからポストプロセス入力とディフューズカラーを割り算したものをクランプしておき、Rチャンネルの情報をマスクで取り出します。

その結果をカラールックアップテーブルテクスチャーとディフューズカラーのRGBをかけ算したものをポストプロセスマテリアルとして渡すだけです。

f:id:alwei:20160529200427p:plain

なんとこれだけでもうセルシェーディング可能です。Texture Sampleノードにはカラールックアップテーブルテクスチャーが必要です。今回自分の環境ではペイントソフトを使って以下のようなグレーとホワイトのみのテクスチャーを用意しました。

f:id:alwei:20160529200742j:plain

このテクスチャーをインポートし、テクスチャーエディターを開いて以下の画像のようにsRGBを切り、タイリングをクランプし、フィルターにNearestを利用します。

f:id:alwei:20160529200904p:plain

この他にもポストプロセスマテリアルで、"Blendable Location"を"Before Translucency"を設定したり、ポストプロセスボリュームで、ブルームのintensityを0、自動露出(Auto Exposure)のminとmaxのbrightnessを2に設定しておきます。画面全体に効果をかけるので、"Unbound"のチェックもつけておきます。

シーン内のマテリアルにはラフネス1、メタリック0、エミッシブ0にしておく必要があるとありますが、これらの設定はなくても大差がないと私は感じました。場合によっては設定した方がより良い効果がでるかもしれません。

これで以下のような結果を得ることができました。

いつものようにレーシングミクにも適用してみます。

f:id:alwei:20160529202702p:plain

アウトラインは当然ありませんが、なかなか悪くないような感じです。

メリットとデメリット

この手法を用いた際のメリットは以下のもののようです。

・キャストシャドウがしっかりと落とせる
・そしてそのシャドウを自身で受け取れる
・UE4標準ライトを使って調整可能
・ノーマルマップもサポート

逆にデメリットは以下のようです。

・セルシェーダーがシーン全体にかかる
・ディフューズとノーマルしかサポートしない
・非効率的(処理負荷が高め)
・リフレクション、ブルーム、エミッシブなポストプロセスを中断する

色々メリットとデメリットはありますが、最大の利点はやはり利用しやすいということです。誰でも簡単に組める程度の内容です。

ぜひお試しを

折角なので、今回私が自分で組んだポストプロセスマテリアルとルックアップテーブルテクスチャーを公開しておきます。
以下のものをポストプロセスマテリアルとして利用すれば比較的すぐにトゥーン(セル)シェーディングが利用可能です。

https://dl.dropboxusercontent.com/u/48003650/CelShade.zip

利用する際にはContentフォルダー直下にフォルダーごと配置すればプロジェクト内で利用できます。

f:id:alwei:20160529203919p:plain

ぜひみなさんもダウンロードして色々試して遊んでみてください!!


続き

unrealengine.hatenablog.com