たんさま!
頂点モーフを利用して、法線を任意にコントロールする方法について。
2014-01-05 05:05:16
こんばんわ。
今日も寒いですね。
こちらは、身内が相次いで風邪をひいたらしく、
いつ自分も発症するか、という、恐怖との中で書いております!
さてさて。
今回は、ちびでこさんが、ご自身のブロマガ( ar116150 )で触れられた、
顔面の法線を任意にコントロールする方法について、少し、説明をさせていただきます。
この記事の中で、顔面のポリゴン形状・向きからくる、
顔面の陰について、法線を好みの方向に向けることで、解消する、ということを、さらっと書いてありました。
この画像で触れられていることですね。

左が加工前、右が加工後です。
左のような状況は、キャラクターモデルで、よく問題になります。
実際に、ポリゴンの向きから言うと、これは理屈上、正しいのですが・・・
右のようになっているほうが、キャラクターイラストとしては、より理想的です。
多くの場合、顔面の材質設定を調整し、陰を落とさないようにした上で、テクスチャの塗りで、それっぽくして対処しています。
それはそれで、ひとつの対処法ではあるのですが、顔面の陰は全く動かないし、陰の色などを調整するのも難しいことになります。
聞くところによると、MAXでは、陰の表示に関して、ポリゴン形状とは関係なく、別の形状にできる陰を、そのまま描画させる方法があるのだとか。
つまり、キャラクターモデルの顔面ポリゴンにできる陰が、そのままだと、やはり都合が悪い、ということですよね。
ああ、やっぱりそうなんだ。。。と思いました。
さて。
ではこれを、MMD用のモデルで、どう実現するか。
エフェクトの扱いに慣れている人の場合、シェーダを工夫して、顔面の光源を、環境光とは別のものとして、個別に設ける場合もあります。(レフ板を使うのと同じ様なものです)し、光の影響をコントロールするサブテクスチャを使うことも考えられますが、今回はこれに頼ることなく、
モデルデータ上の「法線」を工夫することで、対処することを考えました。
MMDの場合、シェーダを重複させて扱うことが不自由で、なおかつ、配布モデルデータには、レンダリングをされる方が設定する、様々なシェーディングに対する汎用性、自由度が求められる、という側面もありますが・・・いちばんの要因は、シェーディングを扱うためのノウハウが、自分たちにあまり無いから、ということですかね。
まあ、できりゃいいんです。できりゃ。
今更、"法線"って何?という人はいないとは思いますが。。。
端的に言うと、その頂点の向きを設定してる情報、というところですね。
例えばですね、このようなテストピースを用意してみました。
なんのこともない、簡易プリミティブでできる円柱を、半分に切っただけのものです。
法線がわかりやすいように、わざと大きめにしてひょうじさせてあります。頂点から伸びる、赤くて細い線が、それです。
この赤くて細い線が示しているのは、頂点の真上が、この方向を向いているよ、ということです。
この場合、面は円弧状に配置されているので、その真上は、放射状になっていますね。
真横から見ると、こうなります。
面の向きなのか、頂点の向きなのか、文章が悪くてわかりにくいと思われそうなのですが。。。再度説明すると、これはつまり、その頂点に対してつながっている面のカド、の情報なのです。
書いていてわかりにくいだろうな、とは思うのですが、面の場合、必ず3つのカドがあるわけで、それぞれが別の方向を向いていても、計算で、その面の中間にグラデーションをかけるなどの情報になるので、むしろそのほうが都合がいいわけです。
実際、上のテストピースでも、中央付近で、光と陰の境目が、面の途中でグラデーションで表現されていますよね。
さてしかし、ここからが重要です。
このテストピースに対して、頂点モーフを作成してみましょう。

そのまんま、ぺたっと潰して、平面状にしてみました。こんな感じになります。
おわかりでしょうか?ポリゴンとしては、平面形状なのですが、法線は、円弧のときのまま、です。
これによって、どんなことが起こっているかと言うと、円弧のときにできる筈の陰が、そのまま平面に描画されているのです。
平面状のポリゴンでは、通常はあり得ないことです。これによって、ポリゴンの形状と、陰の描画を、関係なく設定できる、ということが、証明されました。

少し話が逸れたかもしれませんが、今は頂点モーフを設定している最中です。
ちょっと意地悪をして、こんなふうに、法線の向きを、わざとハチャメチャな方向に向けて設定してみましょう。
そうして、TransformViewで、動かしながら、法線がどの様に変かするか、よくよく見てみましょう。
→
→
おわかりだろうか・・・
ハチャメチャに設定したはずの法線は、一切無視されました。
円弧のときの法線情報を、一切変化させることなく、頂点の座標のみが変化したのです。
つまりは、頂点モーフには、法線をコントロールする機能が無いのです。
実際には方法があるのかもしれませんが。。。少なくとも、PMXEでの頂点モーフ作成では、法線をコントロールすることは、できません。
これらの検証により、次の2点が、重要な要素としてわかりました。
顔面のより多くの法線を、合理的にコントロールできるのではないか?という思いつきで、実際にやってみたわけです。
おなじみの、あにまさ式ミクVer.2さんです。
今回は陰の効果をわかりやすくするために、肌のtoonシェーディング設定を、陰色の濃いものに変えてみました。
何をやらせても安定の軍曹さんですから、この程度のことでは、その印象が揺らぐことはありませんでした。まあいいでしょう。肝心なのはここからです。。。

こちらが、軍曹さんの顔面の法線です。
凹凸が比較的緩やかで、目・鼻・口の位置関係なども、以外な程現代的ではあります。
このあたりが安定の秘訣でしょうか?
まあそれはさておき。光と陰の境界線は、面が下を向き始める、頬骨のいちばん高いところから下に、できていますね。このあたりは、軍曹さんに限らず、ごく普通の挙動と言えます。
ではこの肌材質をエクスポートして、メタセコで開きます。

開いてまず最初にやることは、オブジェクトレイヤーをそのまま複製して、モーフ適用後の状態に設定です。そして、デフォルト状態を、このようにがんがん変形させちゃいます。

流石の軍曹さんも、ここまでやると、ちょっとすごいことになっていますね。。。
このとき、上に向ける面、下に向けて陰とする面を、しっかりと考えながら変形させます。
形状が出来上がったら、キーノート上で、モーフとして機能するかどうか、確かめましょう。
→(モーフ動作)→
ここで重要なのは、モーフ適用前が変形させたポリゴン、適用後が最終的に欲しい形状、というのを間違えないことです。多少、生理的に違和感を覚えることかもしれませんが。こうでないと、この作業自体が全く意味をなさないので。。。絶対に間違えないで下さいよ。
さてそれでは、PMDに書きだしまして、PMXEで開きます。

メタセコで変形させた形状そのまんまです。あたりまえですが。。。
で、TransformViewで、モーフ動作させてみます。
→(モーフ動作)→
そして、このモーフ動作状態で、形状変化保存をします。
こうして得られたポリゴンは、もとのモデルと、頂点座標は変わってない筈ですから、もとモデルに追加読み込みして、ウエイトやモーフのデータを転写するなどして、もとモデルのポリゴンと入れ替えます。
このあたりは、PMDデータをマスターデータとして、PMDE←→メタセコの間でモデルを編集するためのノウハウなんで、従来からよく行われていることですし、細かくは説明を省かせていただきますよ。
-----------
と、ここで余談ですが。
この場合、追加したポリゴンにモーフなりウエイトなりの情報を転写するのには、いろいろとリスクが伴います。なんらかの原因で、情報の転写がうまくいかないケースが頻発するからです。
ですから、可能ならば、もとのモデルの頂点のほうに、法線情報のみを転写したほうが無難と言えます。
但しこの場合でも、転写のために、双方を関連付ける情報は、頂点の座標でやったほうがいいと思います。頂点の順番なんて、なんかのキッカケですぐに変わってしまうし。。。
----------
さて。どうでしょう、できましたかな?

ちょっとだけキリっとした軍曹さんになりました。
まあ軍曹さんなんでね。わざわざこんな、まわりくどい方法使わなくても、頂点の数自体は多いほうではないですし、そもそもこんな加工自体、必要ないのかもしれませんが。
まあ説明のためなんで。
法線はこのようになりました。

ちょっとわかりにくいですね。説明用に色をかえてみましょう。

頬骨の下側も平均的に上を向き、あごのラインで下向きに変化しています。
これにより、光と陰の境界線は、実際のポリゴン形状通りではなく、任意の位置にコントロールできています。鼻・唇などの部分も、よりはっきりと、陰を設けてあります。

toon設定などももとに戻し、無改造のあにまさ式Ver2さんと比較してみました。変わったような、変わってないような?w
因みに、髪からおちる影、顔のポリゴン自身からおちる影などは、法線のコントロールでは対処できません。
気になる場合は、影を落としている材質の設定を見直す必要があります。
さてさて、一気に説明してみました。
この方法、シェーディングに頼らないので、ここから更に、効果を付与する場合にも、全部に効いてきます。これが良く影響するか、悪く影響するかは、一概にはわかりません。
モデル作成・調整のためのTipsとして参考になればいいなと思います。
今日も寒いですね。
こちらは、身内が相次いで風邪をひいたらしく、
いつ自分も発症するか、という、恐怖との中で書いております!
さてさて。
今回は、ちびでこさんが、ご自身のブロマガ( ar116150 )で触れられた、
顔面の法線を任意にコントロールする方法について、少し、説明をさせていただきます。
この記事の中で、顔面のポリゴン形状・向きからくる、
顔面の陰について、法線を好みの方向に向けることで、解消する、ということを、さらっと書いてありました。
この画像で触れられていることですね。

左が加工前、右が加工後です。
左のような状況は、キャラクターモデルで、よく問題になります。
実際に、ポリゴンの向きから言うと、これは理屈上、正しいのですが・・・
右のようになっているほうが、キャラクターイラストとしては、より理想的です。
多くの場合、顔面の材質設定を調整し、陰を落とさないようにした上で、テクスチャの塗りで、それっぽくして対処しています。
それはそれで、ひとつの対処法ではあるのですが、顔面の陰は全く動かないし、陰の色などを調整するのも難しいことになります。
聞くところによると、MAXでは、陰の表示に関して、ポリゴン形状とは関係なく、別の形状にできる陰を、そのまま描画させる方法があるのだとか。
つまり、キャラクターモデルの顔面ポリゴンにできる陰が、そのままだと、やはり都合が悪い、ということですよね。
ああ、やっぱりそうなんだ。。。と思いました。
さて。
ではこれを、MMD用のモデルで、どう実現するか。
エフェクトの扱いに慣れている人の場合、シェーダを工夫して、顔面の光源を、環境光とは別のものとして、個別に設ける場合もあります。(レフ板を使うのと同じ様なものです)し、光の影響をコントロールするサブテクスチャを使うことも考えられますが、今回はこれに頼ることなく、
モデルデータ上の「法線」を工夫することで、対処することを考えました。
MMDの場合、シェーダを重複させて扱うことが不自由で、なおかつ、配布モデルデータには、レンダリングをされる方が設定する、様々なシェーディングに対する汎用性、自由度が求められる、という側面もありますが・・・いちばんの要因は、シェーディングを扱うためのノウハウが、自分たちにあまり無いから、ということですかね。
まあ、できりゃいいんです。できりゃ。
今更、"法線"って何?という人はいないとは思いますが。。。
端的に言うと、その頂点の向きを設定してる情報、というところですね。

なんのこともない、簡易プリミティブでできる円柱を、半分に切っただけのものです。
法線がわかりやすいように、わざと大きめにしてひょうじさせてあります。頂点から伸びる、赤くて細い線が、それです。
この赤くて細い線が示しているのは、頂点の真上が、この方向を向いているよ、ということです。
この場合、面は円弧状に配置されているので、その真上は、放射状になっていますね。

面の向きなのか、頂点の向きなのか、文章が悪くてわかりにくいと思われそうなのですが。。。再度説明すると、これはつまり、その頂点に対してつながっている面のカド、の情報なのです。
書いていてわかりにくいだろうな、とは思うのですが、面の場合、必ず3つのカドがあるわけで、それぞれが別の方向を向いていても、計算で、その面の中間にグラデーションをかけるなどの情報になるので、むしろそのほうが都合がいいわけです。
実際、上のテストピースでも、中央付近で、光と陰の境目が、面の途中でグラデーションで表現されていますよね。
さてしかし、ここからが重要です。
このテストピースに対して、頂点モーフを作成してみましょう。


おわかりでしょうか?ポリゴンとしては、平面形状なのですが、法線は、円弧のときのまま、です。
これによって、どんなことが起こっているかと言うと、円弧のときにできる筈の陰が、そのまま平面に描画されているのです。
平面状のポリゴンでは、通常はあり得ないことです。これによって、ポリゴンの形状と、陰の描画を、関係なく設定できる、ということが、証明されました。

少し話が逸れたかもしれませんが、今は頂点モーフを設定している最中です。
ちょっと意地悪をして、こんなふうに、法線の向きを、わざとハチャメチャな方向に向けて設定してみましょう。
そうして、TransformViewで、動かしながら、法線がどの様に変かするか、よくよく見てみましょう。



おわかりだろうか・・・
ハチャメチャに設定したはずの法線は、一切無視されました。
円弧のときの法線情報を、一切変化させることなく、頂点の座標のみが変化したのです。
つまりは、頂点モーフには、法線をコントロールする機能が無いのです。
実際には方法があるのかもしれませんが。。。少なくとも、PMXEでの頂点モーフ作成では、法線をコントロールすることは、できません。
これらの検証により、次の2点が、重要な要素としてわかりました。
- ポリゴンの形状と、陰の描画を、関係なく設定できる
- 頂点モーフには、法線をコントロールする機能が無い
顔面のより多くの法線を、合理的にコントロールできるのではないか?という思いつきで、実際にやってみたわけです。

今回は陰の効果をわかりやすくするために、肌のtoonシェーディング設定を、陰色の濃いものに変えてみました。
何をやらせても安定の軍曹さんですから、この程度のことでは、その印象が揺らぐことはありませんでした。まあいいでしょう。肝心なのはここからです。。。

こちらが、軍曹さんの顔面の法線です。
凹凸が比較的緩やかで、目・鼻・口の位置関係なども、以外な程現代的ではあります。
このあたりが安定の秘訣でしょうか?
まあそれはさておき。光と陰の境界線は、面が下を向き始める、頬骨のいちばん高いところから下に、できていますね。このあたりは、軍曹さんに限らず、ごく普通の挙動と言えます。
ではこの肌材質をエクスポートして、メタセコで開きます。

開いてまず最初にやることは、オブジェクトレイヤーをそのまま複製して、モーフ適用後の状態に設定です。そして、デフォルト状態を、このようにがんがん変形させちゃいます。

流石の軍曹さんも、ここまでやると、ちょっとすごいことになっていますね。。。
このとき、上に向ける面、下に向けて陰とする面を、しっかりと考えながら変形させます。
形状が出来上がったら、キーノート上で、モーフとして機能するかどうか、確かめましょう。


ここで重要なのは、モーフ適用前が変形させたポリゴン、適用後が最終的に欲しい形状、というのを間違えないことです。多少、生理的に違和感を覚えることかもしれませんが。こうでないと、この作業自体が全く意味をなさないので。。。絶対に間違えないで下さいよ。
さてそれでは、PMDに書きだしまして、PMXEで開きます。

メタセコで変形させた形状そのまんまです。あたりまえですが。。。
で、TransformViewで、モーフ動作させてみます。


そして、このモーフ動作状態で、形状変化保存をします。
こうして得られたポリゴンは、もとのモデルと、頂点座標は変わってない筈ですから、もとモデルに追加読み込みして、ウエイトやモーフのデータを転写するなどして、もとモデルのポリゴンと入れ替えます。
このあたりは、PMDデータをマスターデータとして、PMDE←→メタセコの間でモデルを編集するためのノウハウなんで、従来からよく行われていることですし、細かくは説明を省かせていただきますよ。
-----------
と、ここで余談ですが。
この場合、追加したポリゴンにモーフなりウエイトなりの情報を転写するのには、いろいろとリスクが伴います。なんらかの原因で、情報の転写がうまくいかないケースが頻発するからです。
ですから、可能ならば、もとのモデルの頂点のほうに、法線情報のみを転写したほうが無難と言えます。
但しこの場合でも、転写のために、双方を関連付ける情報は、頂点の座標でやったほうがいいと思います。頂点の順番なんて、なんかのキッカケですぐに変わってしまうし。。。
----------
さて。どうでしょう、できましたかな?

ちょっとだけキリっとした軍曹さんになりました。
まあ軍曹さんなんでね。わざわざこんな、まわりくどい方法使わなくても、頂点の数自体は多いほうではないですし、そもそもこんな加工自体、必要ないのかもしれませんが。
まあ説明のためなんで。
法線はこのようになりました。

ちょっとわかりにくいですね。説明用に色をかえてみましょう。

頬骨の下側も平均的に上を向き、あごのラインで下向きに変化しています。
これにより、光と陰の境界線は、実際のポリゴン形状通りではなく、任意の位置にコントロールできています。鼻・唇などの部分も、よりはっきりと、陰を設けてあります。


因みに、髪からおちる影、顔のポリゴン自身からおちる影などは、法線のコントロールでは対処できません。
気になる場合は、影を落としている材質の設定を見直す必要があります。
さてさて、一気に説明してみました。
この方法、シェーディングに頼らないので、ここから更に、効果を付与する場合にも、全部に効いてきます。これが良く影響するか、悪く影響するかは、一概にはわかりません。
モデル作成・調整のためのTipsとして参考になればいいなと思います。
しえら