【blender】毛束ジェネレーターとシェーディングについて

配布してほしいというようなご要望を頂きましたが、

個人的に進めているプロジェクトでもあり、完全公開するわけにはいかないので、ブログ記事形式で一部公開します。

お仕事募集中なので、御用がありましたらご連絡ください。

それと、毎度のことながらメモ書きみたいな文章です、ご了承ください。

暇つぶし程度にご覧ください。

数か月前の話だが、

今後の自主制作に向けて、キャラづくりのテクニカル的な部分の研究を行っていた

自分は背景メインでいろいろ研究しているが、その知見をキャラクターにも応用できるのでは? ということで、とりあえず実験してみた

結論としては、シェーディングやジオメトリノードの知識はある程度キャラクターづくりに生かせると感じた一方で、

やはり、自分が少し頑張ったところで、キャラクターづくりをマスターするに至らないし、

個人的には別のルックを作ってみたいという気持ちもある

なので、今回の研究結果はひとまず保留とし、どこかでアニメを作れる機会を頂いたときのために結果は温存しつつ、部分的な解説だけこのページで行うことにした

ジオメトリについて

毛束のジオメトリについてはジオメトリノードで作っている

もとはカーブなので、形状を簡単に変更することができる

上画像はポニテの後頭部の部分だ

カーブがそのまま毛束に変換させるというようなジェネレーターとなっている

カーブのセグメントにはそれぞれ、半径と傾きの値を保持することができるが

それをジオメトリノードから参照して結果に反映することで、頭部の丸みに沿った傾き、カールした毛束、だったり、

後は、生え際と毛先は細いけど真ん中部分だけ太い毛束、というようなものを作れるようになっている

ちなみに、ポニテのようなパーツは、先ほどの後頭部のように薄っぺらい毛束ではなく、塊のような毛束になるようにしている

これに関しては、ジオメトリノードのプロパティの中から切り替えることができるようにした

今回の毛束をジオメトリノードで作った理由についてだが、

まず、毛束というモチーフ自体が、生え際から毛先にかけての軌道という、カーブと同じ特徴持つモチーフだ

なので、毛束はカーブで表現するのが一番理にかなっていると思った

具体的には、カーブには始点と終点があり、それは毛束も同じだ

なので、生え際から毛先にかけてのマッピングを属性としてマテリアルノードに渡し、それをもとにシェーディングをする

ということができる

これが、今回、ジオメトリノードで毛束を作ろうと思った理由だが、

ただ、同時に毛束がリアルになりすぎてしまうというのも問題としてあって、これが今回の研究が没になった要因となった

瀬戸の花嫁のさんちゃんとか、ルナちゃんみたいな、デフォルメの利いた髪型が作りたい

その点、カーブで毛束を作るというのは便利である一方で、常識から外れた髪型を作りにくい、表現の幅を狭めてしまう。というのが課題だと感じた

次回以降はジオメトリノードではなく、メッシュで髪を作ってそれをいい感じにシェーディングする方法を考えてみたい

マテリアルについて

部分部分かいつまみつつ、説明する

まず、全体的な流れだが、

基本的には、ジオメトリノードで作った属性と、ジオメトリ自体の属性、両方を使ってシェーディングしている

例えば、上の画像は、毛束の始点から終点までのマッピングをマテリアルノードに渡す属性だ

カラフルに見えるのは、正規化された値とそうでない値をRチャンネルとGチャンネル別々に入れているからだ

その後にあるXYZ分離ノードを用いて、成分ごとに分離して使っている

ちなみに、毛束の横方向のマッピングも、不完全ではあるが一応作っている

これにより、先ほどの毛が生える方向のマッピングと合わせて、UV展開的なことをしているということになる

UV展開ではないが、この、毛束の横方向の情報を用いて、ノイズテクスチャをマッピングしている

これにより、ハイライトなどの細かな揺らぎ、みたいなものを作っている

これができるのがジオメトリノードで作ることの一番の利点だと思う

つまり、”毛の向き”を定義できるというのが最重要事項で、

メッシュで作ってしまうと、自動では毛の向きが定義できないし、手動で設定するにしても、例えば、毛が途中で分かれている個所などは、破綻が起こってしまいそうな気がする

その点、カーブというのは向きを含んでいるので、毛束を作るという点ではとても使いやすいジオメトリだった

ハイライトに関しては、テクスチャ座標の反射を使うと簡単に表現できる

XYZ分離を使い、Z成分のみ使うのが肝で、そうして作ったグラデーションに、先ほどのノイズを掛け合わせたりして、髪っぽい質感にしている

このままだと、良い位置にハイライトが出なかったりするので、そのあたりはジオメトリノードで作った属性の値などを使い、調整している

ただ単にハイライトをスクリーンなどで合成しただけでは単調な見た目になってしまうので、その下に乗算でワントーン暗くなるような領域を作るようにした

これにより、よりツヤツヤした感じの表現にすることができた気がする

あとは、通常のトゥーンシェーダーと同じような、shader to RGB ノードを使ったシェーディングも行っている

ここでの工夫としては、毛束の端の方は影が出にくくなるようにして、より丸みを帯びた印象にしようとしたり、

あとは、先述したノイズをオーバーレイで合成することにより、細かい毛のテクスチャを表現したり、などもしている。

イラストでありがちな、顔の周りが明るくなっている感じも表現した

エンプティを鼻のあたりに配置し、そのエンプティからの距離に応じてマスクを作って色を付けている

テクスチャ座標から、エンプティの位置を読み込み、そこからの距離に応じて白黒のグラデーションが生成されるという感じだ

回り込みのような光はレイヤーウェイトを用いて表現している

ただ単にレイヤーウェイトを繋げているだけなので、大きな工夫はしていないが、

細かいところでいうと、先ほどのノイズをオーバーレイで掛け合わせて、髪っぽい質感にしたりなどの工夫はした

金髪系には、青系の差し色が似合うという法則がこの世には存在する

なので、青色を覆い焼きカラーで合成した

髪の毛の各部の色については、僕自身、もともとキャライラストを描いていた人間でもあったので、そのころの経験が役に立った

最後に、作ったマスクを用いて各部に着色し、このような見た目の髪の毛を作っている

なので、今回はテクスチャを使わず、モデリングもしない。完全にノードだけで作ったということになる

この方法では、ジオメトリノードを使って簡単に毛束を作れるようになった一方で、やはり、簡単がゆえに表現の幅が狭まってしまったりなどの課題もある気がした

個人的には、次回作ではもう少し、キャラクターはデフォルメしたいと考えている

今後はさらにデフォルメされた髪の毛の表現を研究したい

この記事をツイートする

Youtubeやってます!

作品発表、メイキング、解説もやってます

よろしければ高評価、チャンネル登録、よろしくお願いします

お仕事募集中です

お問い合わせフォーム、またはX(Twitter)のダイレクトメッセージからお気軽にお問い合わせください。

お仕事以外のご相談、顔合わせ等のご連絡も大歓迎です。