顔の法線をいじりアニメ風に調整する
Contents
顔の法線を弄る。アニメふうに影を落とす
この記事で表記している造形は未完成品です。
首周り、胴体に繋がる部分は通常の法線にする必要があるのですが処理してません。
前置きはさておき、アニメ系の顔立ちのキャラクタを作る場合法線の情報をイジらないと
気に食わない影が出ます。
ソレが出ないようにライティングを施すのも一手ですが、色んな制限や工数等の関係により
一発でそれっぽい陰影を作り出したいです。
ローポリモデルを変形させて陰影を改造する、そしてGATOR
シェーディング表示でもある程度の造形は確認可能。ハイクオリティビューで
Incidence等でリアルタイムに確認するもよし。
目的としては以下の項目。
- 目のくぼみを削除して目回りをフラットにする
- 口の周りもフラットにする
- 下の図のように、口周りとアゴ周りは上を向けて上からの光源を拾いやすくする。
- 頬の輪郭は弧の影がつくように
作業手順
- フルディティールのモデルを複製し、ローメッシュを作る。
- ローメッシュを変形させて法線を固定させる。User_Normal_Clusterを適応させる。SIでモデル→コンポーネント→ユーザー法線の設定→ユーザ
- フルディティールにGATORでUser_Normal_Clusterを転送。
- GATORの転送を維持しながら、ローメッシュを変形させてはユーザー法線をリセットする。残念ながらクラスタ転送の関係上リアルタイムには更新できない。
以下の図のように、鼻に影がチョットでて頬に弧影ができればひとまず安泰。あとはコツコツ手動で調整。
首周りの法線はリセットしとかないと胴体と接続したとき影に違和感がでるので巧くブレンドさせます。
手動で調整する
マニュアル見てください。まずは機能の把握。
特に必要なのは「平均化」や「複数操作」など。重要な機能はまず頭に叩き込みます。
ポリゴンが多くてもスムージングかけながら調整していく。
GATOR転送で法線を調整する、そしてVerTexColorに置換してレンダリングでも利用可能にする
サブディビジョン適応が前提のメッシュで作業可能。
- GOTOR元(にVertexColorを適応させる。属性をFoot4に変更。
- GATOR先「ココでは調整用メッシュと名付ける」にUser_Normal_Clusterを付けてそれをGATORでリアルタイムに転送する。
- GATOR元にICEを適応させる。GetDataからUser_Normal_Clusterを読み込み、カラー情報に変更させてVertexColorに戻す。Floot4になってないと色情報がむちゃくちゃになるので注意。
- レンダーツリーで Color_Map_lookUpでVertexColorを読み込み、InterNal_To_object_normalに読み込ませる。(MetaSL専用)
- 調整用を整形する。頂点を追加したり消したりしても構わない。ソレが終わったらユーザー法線→リセット を適応させる。
- レンダリングで使いたい場合は、更にコレをICEでUser_Normal_Clusterに戻して、「法線マップに焼き付ける」等でNormalMapに変更。
通常の法線+調整した法線を混ぜて使う。
法線を調整したいのは顔だけなので、ソレ以外(耳、首、頭全体)を除外します。
- ICEノードで Self.NodeNormalを取得。これはUser_nomal_Clusterの影響を受けない法線情報です。
- 新しく頂点カラーを設定する。「NormalMap_Def」と命名し(これもFloot4)NodeNormalのベクトル情報をカラーに置換する
- MaskのためにWeightMapを設定。法線弄りたい箇所を塗りたくる。Vertex_MASKにリネーム
- RenderTreeでNormalMap_Defを読み込み、マスク素材として制作しておいたVertex_MASKをMix2Colorsでブレンドさせる。
以上!これで法線弄りたい箇所以外は通常の法線となる。
組み上げた頂点カラーをぼかしたい場合は以下の記事参考に
Messing around with vertex colors
[browser-shot width=”300″ url=”http://xsisupport.com/2010/12/14/messing-around-with-vertex-colors/”]
画像に置き換えて、サブディビジョンレベルを上げるモデルに対応させる
UserNomalはOpenGLサブディビジョン入れると効果が消えます。
ローカルサブディビジョンリファインメントで固定することも出来ますがファイル容量やデーターの持ち方としても良い方法では有りません。
その対策を行います。
頂点カラーに置換する方法ではなく今度は画像に置き換えてみます。
結論。完全再現は無理でした。
UserNomalで変更加えたものをローカルサブディビジョンリファインメントすると分かるのですが
ローポリ過ぎるとスムース掛けたような法線になってくれません。バキバキになります。
あと、画像化してもNormal情報を上手く処理する方法を見つけれず断念。誰かいい方法見つけたら教えてください。
RenderMapでジオメトリ法線焼き付けても上手く扱えるノードがないし
VectorStateの情報をVector_to_Colorで法線ベクトルに状態変更すると焼けないし。
というわけで代替案だけ。
Vector_Stateで法線ベクトルを持ってくる。またはRenderMapの法線焼付け情報でマップタブの法線を有効にして
オブジェクト空間、サンプルされた法線で焼きこみ。
Internal_To_Objectノードに画像を差し込む。
← 差し込んでる 差し込んでない→
法線情報は上手く設定出来てそうな感じです。とはいえ、細かい所がおかしいです。
明るさや部分によってはガタガタです。
RenderMapした画像を、ぼかします。
完成品が以下のGif動画。もうこれでいいんじゃないでしょうかね。というわけではないのですが
割りと柔らかい丸まった影が落ちます。メリハリ付けたいならまた別の手法が必要ですね。
何枚かパターンレンダリングして画像合成するべきなのか。
UserNormalを手動調整で完璧にするのか。様々な手段があります。
画像でやりきるなら、
気に食わないライトのアタリ方があったらPhotoshopで塗ることもできます。緑がY、青がZ、赤がXです。
ただし上記の画像だとネガティブのほう( -Y -Z -X)が塗れませんね。
もっといい方法あったら教えてください。といった具合です。
PhongシェーディングでMetaSLの影を落としているので落影は超汚いです。
メンタルレイ等でレンダリングすればマトモになります。
首と胴体くっつける際はウェイトマップで
マテリアルブレンドするなり工夫してみると良いと考えています。
法線マップに焼き付ける
- 法線を調整したモデルを複製する、Ultimapper_hi とプリフィックスを付けておく。
- 元モデルのUserNormalClusterを削除する。
- Ultimatpperを設定する、Ultimapper_hiモデルをピック
- タンジェント空間で法線にチェックをいれてレンダリング。
Ultimapperはメンタルレイシェーダー以外付けてあるとエラーでるので注意。
サーフェイスまでの距離は0~001アタリで調整。
どうしても法線マップは汚くなりますのでphotoshopで修正するなりしないとだめかも。
で、エンベロープつけると、MetaSLで表示されないという最悪な仕様がありますのでレンダリング専用です。
上手くいきました。少々ガタついてるのは仕方ないでしょう。
MetaSLだと法線マップの精度が低いかもしれません。レンダリングしてチェックします。
眼窩アタリみてると、法線マップ化すると法線の精度は80%くらいに下がる感じ?
何度か距離変えてみたりパターン出さないといけないかも。
元々顎の下の影が汚かったのでちょうどよいです。
手でコツコツPhotoshopの指先ツールで調節。
NormalMapを手動で調整する
耳、入りませんので削除。他、体にブレンドする箇所も削除。
Photoshopの塗りつぶしレイヤーで #7f7fff カラーを下地にひいて
レイヤーマスクでもかけてコツコツ不要な場所塗りつぶしていきます。
しかし眼窩を、もっと平面にさせたいのですがNormalMapにするとイマイチになるかも。
何パターンか試さないといけない感じ。