• 追加された行はこの色です。
  • 削除された行はこの色です。
#contents

----
time: 08:00

** ハイライト [#wdb8d4ea]

スペキュラーによるハイライトを入れます。
- [[西川善司の「試験に出るゲームグラフィックス」(1)「GUILTY GEAR Xrd -SIGN-」で実現された「アニメにしか見えないリアルタイム3Dグラフィックス」の秘密,前編>http://www.4gamer.net/games/216/G021678/20140703095/]]
下部の方にある資料のように法線をカスタムする事が多いようです。
-- [[Blender 2.74のカスタム法線でちょっと遊んでみる その2【ちょっとしたメモ】>http://ch.nicovideo.jp/Arasen/blomaga/ar751632]]
Blenderだと此方の方法があります。
- また、髪のハイライトに関してはUE4 Forumに上がっているマテリアルがいい感じです。→ https://forums.unrealengine.com/showthread.php?63555-FREE-Hair-Material

今回は単純なPhongシェーディングで実装しましたが、きっちりやらないと綺麗に出ないですね。

+ ベースマテリアルを弄ります。前項の「if」ノードの後に、Phong計算を入れてスペキュラーハイライトを加算します。
-- 「Power(Max(Dot(法線, Normalize(カメラの方向+ライトの方向)), 0), SpecularPower)」までがPhong計算式です。
-- 広がり方、閾値、強さをそれぞれパラメーター化しました。
-- 「ValueStep」で2値化しました。(ライティング2値化の所で説明→[[リニアなライティング結果を2値に>http://com04.sakura.ne.jp/unreal/wiki/index.php?Unreal%20Engine%204%20%28UE4%29%20%C2%B6%A4%CE%C6%F5%20Advent%20Calendar%202015%20-%20%A5%E2%A5%C7%A5%EB#db47ac62]]
-- 最後にベースカラーに加算した後、値が1.0を超えることがあるのでClampしています。エミッシブカラーに繋いでいるので、1.0を超えるとブルームが発光し出します。
&ref(model_20.png,,50%);
+ 結果。あんまり真っ白なのは合わない気がしたので弱めに。うーん、微妙だなー。顔は消してもいいかも
&ref(model_21.png,,60%);
+ 設定パラメーター
|''テクスチャ名''|''Specular Power''|''Specular Scale''|''Specular Threshold''|''備考''|
|clothes|50.0|0.005|0.8|あまりハイライトが強すぎるとフィギュアとかの質感になるので抑え目|
|eye|50.0|0.0|0.5|目は要らないので、Specular Scaleを0.0にして消す|
|face|50.0|0.0|0.5|微妙なんで消した|
|facial|50.0|0.0|0.5|要らないので、Specular Scaleを0.0にして消す|
|hair1|50.0|0.1|0.8||
|hair2|50.0|0.1|0.8||
|skin|50.0|0.3|0.2||


** リムライト [#u7bc759f]
セルシェーディングでは度々リムライトが実装されるようです。なので対応してみます。

+ ベースマテリアルを弄ります。先ほどのベースマテリアルの「Add」と「Clamp」ノードの間に追加します。
-- 「[[Fresnel>https://docs.unrealengine.com/latest/JPN/Engine/Rendering/Materials/HowTo/Fresnel/index.html]]」ノードで、フレネル値を取得できます。
--- フレネルとは、カメラが見ている方向と法線が垂直な所が1.0が返ってくる計算です。垂直から80度、70度となるにつれ0.0になっていきます。
-- リムライトは輪郭部分の逆光表現ですので、フレネルの値がそのまま使ってもそれっぽくなります。
-- 閾値、強さをそれぞれパラメーター化しました。
-- こちらも「ValueStep」で2値化しました。(ライティング2値化の所で説明→[[リニアなライティング結果を2値に>http://com04.sakura.ne.jp/unreal/wiki/index.php?Unreal%20Engine%204%20%28UE4%29%20%C2%B6%A4%CE%C6%F5%20Advent%20Calendar%202015%20-%20%A5%E2%A5%C7%A5%EB#db47ac62]]
&ref(model_22.png,,80%);
+ 結果。とりあえずマテリアルインスタンス個別での調整は無し。
&ref(model_23.png,,80%);

割と絵が騒がしくなってきた感がありますが、一項目ごとに細かく調整するよりは
機能をある程度実装した後に纏めて調整した方がいいので置いておきます。
必要無ければその時消せばOK。

----
time: 09:00

** マテリアルを纏める [#z27b34f5]

ベースマテリアルが大きくなってきましたので、[[マテリアル関数>https://docs.unrealengine.com/latest/JPN/Engine/Rendering/Materials/Functions/Creating/index.html]]化します。
&ref(model_24.png,,30%);
- マテリアル関数化する事によって、別のマテリアルへ適用しやすくなったり、別のプロジェクトへ持って行きやすくなります。
- 移植は基本的にノードのコピー&ペーストでいけるはずです。

+ ベースマテリアルからマテリアル関数に各種移植していきます。
-- コンテンツブラウザで右クリック→「マテリアル・テクスチャ」→「マテリアル関数」を作成します。
-- 「FunctionInput」ノードで、引数としてマテリアル関数の外からパラメーターを持ってこれます。
--- 詳細欄の「Input Name」が入力値(引数)の名前、「Input Type」で「Scalar」や「Vector」を指定できます。
&ref(model_25.png,,80%);
+ 「MaterialFunctionLambert」を作成。ランバート反射周りを移植します。
-- 「FunctionInput」ノードでライトの方向「LightDir」を受け取るようにしておきます。これで複数ライトにも対応できます。
&ref(model_26.png,,80%);
+ 「MaterialFunctionSetupColor」を作成。色味構築部分を移植します
-- 「FunctionInput」ノードでテクスチャや、各種調整パラメーターを受け付けるようにします。
&ref(model_27.png,,80%);
+ 「MaterialFunctionSpecular」を作成。スペキュラ表現周りを移植します。
-- 「FunctionInput」ノードで各種調整パラメーターを受け付けるようにします。
&ref(model_28.png,,80%);
+ 「MaterialFunctionRimlight」を作成。
-- 「FunctionInput」ノードで各種調整パラメーターを受け付けるようにします。
&ref(model_29.png,,80%);
+ マテリアル関数化完了。ベースマテリアルはこんな感じ。
&ref(model_30.png,,50%);



    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS