* セルシェード [#q04f5914] 色々作業中。試したこと考えたことメモ。 多分UE4.6くらい - まとめページはこちらに UE4のセルシェード実装方法を纏めたい - Qiita http://qiita.com/com04/items/a7895160df8d854fe924 - ''UE4.14くらいの僕'' 「エンジン改造安定」 -- UE4.14.0 Forward Shadingのエンジン改造でセルシェードやってみた - Qiita https://www.slideshare.net/com044/ue4140-forward-shading-69295343 -- [[第7回UE4ぷちコン]] (Deferredをエンジン改造) ---- #contents * 参考 [#s774fd54] - UE4のセルシェード実装方法を纏めたい - Qiita http://qiita.com/com04/items/a7895160df8d854fe924 - UE4でToonシェード wiki内: ポストプロセス-マテリアル-Toonシェード - Unreal Engine Forum : ノンフォトリアルやセルルック等の独特なレンダリングを! 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 Forum : Advanced Cel Shader Pack [Submitted] https://forums.unrealengine.com/showthread.php?44471-Advanced-Cel-Shader-Pack-Submitted - ニコニコ立体さんをUE4で表示するという流れに乗って遊んでみました。 https://twitter.com/housakusleeping/status/528575375689793536 - Unreal engine 4でのリアルタイムセルルック3DCGアニメーション http://www.slideshare.net/masahikonakamura50/unreal-engine-43dcg * UE4でセルシェードをするための問題点 [#xe89d905] ** ライティング [#y822d7a3] *** シェーディングどうする問題 [#q83ae138] - UE4ではライティングが内部的に行われ、ユーザーがフックする事ができない。 なので従来のようにライティング計算時にシェーディングを弄る事が出来ない。 のでポストプロセスでシェーディング結果から、ライティング値を逆算する手法で試している。 [[シモダさんのサンプルを参考>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]] &ref(ue4-cellshade01.png,,60%); - 「SceneTexture」の「BaseColor」、「SceneColor」を使用すると陰影が出てしまう。 なので、基本色には「DiffuseColor」を使用して、上記ライティング逆算結果から影を付けている。 - もしライト1灯だけ、というなら全マテリアルを「Unlit」にしてポストプロセスで自前計算してもいいかもしない。 *** エミッシブ出ない問題 [#gf4b2c40] - 上記シェーディングで、「DiffuseColor」を使用してしまうと、今度はエミッシブが適用できずBloomを炊けない。 - 他にアルファを使用しない縛りであれば、エミッシブを炊くのはTranslucentにしてしまえば適用できるというトリックでいけるかもしれない。 *** 女優ライト問題 [#vf8618e5] - %%UE4では、ライトを特定のモデルにだけ適用する、といった事が出来ない。%% %%セルシェードのみならずキャラクター物で良く使用される女優ライトが適用できない。%% %%自前でどうにかするしかない。%% → 4.11辺りでLighting Channels機能が入った: https://docs.unrealengine.com/latest/INT/Engine/Rendering/LightingAndShadows/LightingChannels/ *** アーティストが影色指定できない問題 [#o6571123] - UE4のポストプロセスでセルシェードを行った場合。 UE4のGバッファーにはユーザーデータを書き出せないので、通常のセルシェードで良く行われる、このマテリアルの影の色はこの色、といった指定が出来ない。 対応方法考え中。 &ref(ue4-cellshade02.png,,80%); * テクニック的な [#y0c741db] ** ポストプロセスマテリアルで、特定のマテリアル部分だけ判定したい [#g2370ce4] - 髪だけ別のシェーディングしたい、的な 条件として、メタリックの数値をシーンで一切使っていないこと。 - マテリアル側で、メタリックを0.01に設定して &ref(ue4-cellshade_teq0101.png,,60%); - ポストプロセス側で、ifで0.0より大きいか判定して表示。 &ref(ue4-cellshade_teq0102.png,,60%); マテリアルのメタリック0.01とかなら見た目でほぼわからないからいーよねー、という適当。 (地面はメタリック入ってしまっている) &ref(ue4-cellshade_teq0103.jpg,,60%); ** 背面法によるアウトライン [#n2eb4990] - %%UE4のマテリアルでは描画面逆転する方法がない?%% - %%なので、モデルデータに描画面を逆転した状態のメッシュを複製して、専用のマテリアルを割り当てておく%% - %%マテリアルを「Unlit」にして、頂点法線方向に「ワールド位置オフセット」を付ける。%% &ref(ue4-cellshade_teq0201.png,,60%); %%他にスマートな方法が無いか検証中%% &ref(ue4-cellshade_teq0202.png,,60%); → 「TwoSidedSign」ノードが追加されたので、マテリアルをDouble SideにしてMaskedで表面抜いてやればOK https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/ExpressionReference/Constant/#twosidedsign 背面用メッシュは、PoseableMeshComponent使えばOK http://historia.co.jp/archives/5587 * W.I.P. [#xa9882a1] ライティング結果さえ抽出できれば、後はUE4に関係ない部分ではあるけど。 ** 影の色 [#o0cad735] - 前述の通り、現在はアーティスト側で指定できないので計算で。 - セルシェードにおいて、明度を下げるだけの影は違う。ので彩度も上げた。 - 明度だけ / 彩度も弄った &ref(ue4-cellshade_wip04.png,,40%); ** Unityちゃん、通常レンダリング / セルシェード / アウトライン無し / アウトラインにカラー付け [#j1c3efbe] - アウトラインのカラー付けは、明度下げたり彩度上げたりした。 &ref(ue4-cellshade_wip01.png,,40%); - ニコニ立体ちゃん版。通常レンダリング / セルシェード / アウトラインにカラー付け Unityちゃんよりセルセルっぽい。アウトラインのカラー付けもこっちの方が映える &ref(ue4-cellshade_wip02.png,,40%); ** 髪のスペキュラー弄る [#j0b0d683] - Unityちゃん、スペキュラー無し / 変更前のスペキュラー / 弄った後のスペキュラー 色々レイヤー合成してみた。 &ref(ue4-cellshade_wip03.png,,40%); |