BlenderのヘアーカーブシステムのInterpolate Hair Curvesノードは、ガイドカーブを植えると、補間して自然な子カーブを生成してくれるノードです。簡単に言うとカーブを増毛してくれるノードですが、うまく機能せずカーブが消えたり、あまり増えないように見えることがあります。
最近、髪や動物の毛などをヘアーカーブで作っていると、この問題にたびたび出くわすので原因を調べることにしました。そもそもこのノードがどういう仕組みで動いているのか、どうすればその問題を解決できるのかについてまとめましたので、困っている方は参考にしてみてください。
この記事は、Interpolate Hair Curvesノードを使ったときにカーブが生えない・少ない問題の原因と解決法を解説した初級~中級者向けの記事です。
難易度
Interpolate Hair Curvesの問題点
Interpolate Hair Curvesノードは、ヘアーカーブでガイドカーブを植えると、補間して自然な子カーブを生やしてくれるノードです。
しかし、メッシュの大きさによって、同じ設定でも違う量のカーブが生えてくるという問題があります。
例えば右図のように、1m半径の球ではデフォルト設定である程度カーブが生えていますが、0.5m半径の球ではたった1本のカーブしか生えていません。

どうしてこのようなことが起こるのか、Interpolate Hair Curvesノードの仕組みを見てみたいと思います。
Interpolate Hair Curvesノードの仕組み
Interpolate Hair Curvesノードのノード内容は右の図のようになります。
この中にガイドカーブを補間しカーブを生成する、Interpolate Curvesノードというノードを発見しました。

補間ノードを手作りしてみた
というわけでInterpolate Curvesノードを使ってヘアーカーブ補間ノードを簡易的に手作りしてみました。
Interpolate Curves ノード(カーブ補間ノード)は既存のカーブの間を補間して新しいカーブを生成するノード。元のカーブの数を少なくして編集しやすくしつつ、最終レンダリングやビューポート表示用に高密度のカーブを作るのに便利なノードです。
(髪の「子カーブ」生成などでよく使われます)
入力(Inputs)に
- Guide Curves(ガイドカーブ)
- 新しいカーブを補間する元のカーブ。
- Points(ポイント)
- 新しく生成するカーブの根元の位置。
以上2つのパラメータが必要なことを発見しました。

Interpolate Curvesノードのpointsに渡すため、Distribute Points on Facesノードが使われています。このノードでポイントを分布するときに、Densityのパラメータが現れます。
Density…このパラメータは平方メートルあたりに配置するポイントの数。
ここが原因となって生えるカーブの数がメッシュの大きさに拠ってしまいます。1㎡につき10本なら、0.5㎡では2.5本しか補間のカーブが生えないということになるからです。だからメッシュが小さいと生えるカーブが少なくなってしまうのです。
計算が合わない
では最初の画像を見てみましょう。実際計算してみます。
球の表面積 S=4×π(パイ)×(rの二乗)
大きい球の表面積
4×3.14×1×1=12.56㎡
生えるべきカーブの本数
12.56×10=125.6本
実際生えている本数…142本
小さい球の表面積
4×3.14×0.5×0.5=3.14㎡
生えるべきカーブの本数
3.14×10=31.4本
実際生えている本数…39本
実際生えている本数をスプレッドシートで確認すると、39本生えてる…!?1本しか見えてないのに…!?
どういうことなのでしょうか…?


スケールを見てみる
とりあえずTransformのScaleの値を見てみましょう。
メッシュの球を見てみると、Scaleはちゃんと1になっています。きちんとScaleが適用されているようです。

次はカーブ。
Scaleの値が0.5になっている…!!そしてカーブを選択すると、球の内部に隠れたカーブがあります。これが生えているのに見えないカーブっぽい…。
スケールを適用すると、カーブがメッシュ上に生え、大体計算通りになりました。
つまり、カーブのスケールをきちんと適用してない場合、スケールがかかった小さい球にカーブが生えることになるから、カーブの根本の位置がメッシュの内部に入り、表面には見えなくなる…ということでした。
しかし、じゃあ1本見えてるカーブは何なんだろう?どうしてガイドカーブだけ見えているのでしょうか?


もう一度解析
もう一度Interpolate Hair Curvesノードの内容を調べてみると、どうやら元のガイドカーブをJoin Geometryで一緒にしているようでした。
簡易的に作ってみた補間ノードにその機構を再現してみました。元のCurveをJoin Geometryノードで足しています。
こうすると、Interpolate Curvesノードで補間カーブを生成した約39本のカーブ(スケールがかかっているから内部にしか生えてない)と、ガイドカーブ1本が再現されます。

まとめ
以上の結果から、Interpolate Hair Curvesノードの挙動について以下のようにまとめることができます。
- Qメッシュの大きさによって補間生成されるカーブの数が違うのはどうして?
- A
補間生成されるカーブはDensityパラメータ(1平方メートルあたりのポイント数)によって決まるから。かなり大きな数値を入れないと本数が多くならないのは1㎡を基準にしているからで、メッシュが小さい場合はもう大きな数値を入れないといけないのは仕方がないです。
- Q全くカーブが生えてないように見えることもあるのはどうして?
- A
メッシュだけでなく、カーブのスケールもきちんと適用しないと、生える位置がとても小さくなって、メッシュの内部にカーブが入り込んでしまい、生えているけど見えなくなるから。特に、元のメッシュはスケールを適用しているのに、カーブのスケールを適用し忘れたときにカーブが見えなくなりがちです。
- Qガイドカーブだけしか生えてないように見えるのはどうして?
- A
Interpolate Hair Curvesノードは、内部でガイドカーブも一緒に統合しています。だからガイドカーブはそのまま生えることになります。だけど、他の補間で生成されたカーブのスケールが適用されてないと、内部に隠れたままになってしまい、ガイドカーブだけが見えることになります。
あとは、基本的なことですが、Surfaceのメッシュや、UVマップを間違えずにちゃんとセットすることも重要です。
人の頭部の大きさは
高さ 平均23cm
横幅 平均15.5cm
奥行 平均18cm
くらいで、その中で髪が生える面積はさらに小さくなり、1mと比べるとかなり狭い領域になります。
人間の髪の毛は約10万本、毛髪の太さは約0.07~0.08mm(CGにすると細すぎるのでBlenderだと大体0.2~0.4mmにしている人が多い、髪の毛も本数もリアルな本数まで増やすことはないです。)

Densityパラメータで人間や動物くらいの大きさのメッシュにカーブを生やす場合、200,000~400,000本という莫大な数値になってしまうのは、毛が生える面積等を考えると仕方がない数値になります。
右画像:Densityを200000に設定してやっと9700本生えている。
何十万と設定しているのに全然髪が生えてない!!ってときは、メッシュがものすごく小さいか、どこかで設定を間違えているか、スケールを適用してない可能性が高いのでチェックしてみてください。

ヘアーカーブガイド
ヘアーカーブ記事をまとめて、どこから読めばいいか導線を書いたガイド記事です。ヘアー、ファー、ヘアーカード作成まで。


コメント