コンテンツライブラリにオオハシのグルームサンプルが追加されました。
このファイルを使って、羽根の作成を確認できますが、ファイルが複雑なのでシーンの見方を紹介します。
Youtubeで制作者であるAndriy氏のHoudihi Hiveを見ることも可能なのでぜひ!(日本語ではありません)
まずはファイルをダウンロード、解答し、Houdini20.5で開きます。
https://www.sidefx.com/contentlibrary/toucan-groom/
最初はビューポートには何も表示されていません。
SolarisのDesktopを使用しているため、一度デフォルトのBuildに戻しましょう。
またビューポートの下部では、更新のタイミングを設定することができますが、これがManualになっている場合、手動で更新ボタンを押すまで更新されません。重いデータの場合、自動更新がかかるとその間何もできなくなってしまうので今回のように手動でクックするタイミングを調整することができます。
更新ボタンをおしてクックします。
クックが終わるとこのようにスキンとGroomingを表示することができます。
この後もDisplayフラグを変えるたびに更新ボタンでクックを実行します。
もちろんAuto Updateに変更してもよいのですが、最終的な羽根の生成は重いのでManualで進めることをお勧めします。
それではまずModelingのところから見ていきます。
Skin Modeling内に入り、Creating Proxy Bodyを確認します。
鳥のプロキシジオメトリを用意しておく必要があります。なぜなら、鳥のモデルを受け取る段階では、現在も鳥のモデルをモデリング中かもしれないからです。プロキシがないと、そのモデルに羽根を生成することができません。したがって、作業を始める前に必ずこれを用意しておく必要があります。
羽根の配置にはこのようにプロキシジオメトリを使うの方法がお勧めです。これを用意しておけば、後で多くの時間を節約できます。
さらにここでは、黒い羽根と白い羽根用にプロキシジオメトリを分けられています。
OUT proxy blackにDisplayフラグを設定し、クックすると黒い羽根をはやす部分のプロキシジオメトリをみることができます。
プロキシの準備ができたら、最初のステップは、羽根用のガイドを作成することです。
Uキーで階層をあがり、今度はGroomingのfeathers_modeling内に入ります。
ここでは、Guide Groomノードを使用しています。
重要なのは、すべての羽根を作っているわけではないという点です。
最小限のガイドだけを使って羽根の曲がり具合や長さを決定しています。これにより、最終的な羽根の形状が作られます。ガイドの数を最小限に抑えると、グルーミングがしやすくなり、制御もしやすくなります。
ガイドが多すぎると、操作が難しくなってしまいます。
最小限のガイドを作成後、Generateノードを使って他のすべてのガイドを作成しています。
主にDensityパラメータを調整して、必要なガイドや羽根の数を確認します。
Densityパラメータを、鳥の制作の全ての段階で使用することができます。これは非常に重要なポイントで、羽根を作るすべてのステージでこのコントロールが可能だということです。
ここで2つのHair Groomノードを使用しています。1つは黒い羽根用、もう1つは白い羽根用です。
頭の上にある羽根用の小さなブランチもあります。これはオプション部分です。
この部分では、これら3つの別々のブランチを1つにマージしています。そして今、全てのガイドが揃い、鳥全体の最終的なガイドが完成しました。
次に段階では、鳥の形状を視覚的にコントロールしています。ご覧の通り、プロキシジオメトリは羽根で完全には覆われておらず、数センチの隙間がありますが、この段階ではそれほど重要ではありません。
後の段階で、プロキシジオメトリに羽根を非常に正確にフィットさせるための特別なノードを使用します。
また、後でプロキシジオメトリを少しずつスカルプトして、最終的な形状を作っています。
このサンプルでは、ノードネットワークを構築する際に、いつでもどのノードにも戻ってパラメータを変更でき、その変更が他の部分に影響を与えないように設計しています。このワークフローでは、それが崩れることはありません。
次のステージは羽根の生成です。羽根の生成はすべてこの紫色のボックス内で行われます。
このステージの最後には、ほぼ最終バージョンに近い羽根が得られ、それを少しランダム化して微調整します。
ここに3つの重要なノードを囲んでいます。
最初のノード(1)は羽根を生成し、次のノード(2)でグルーミングを行い、最後のノードで(3)、パターンを使って羽根同士や他のパーツとの位置や配置が干渉しないように設定されています。
Houdiniがすべてを処理してます。
1で囲んだノードは、Template Interpolate用で、先ほど作成したガイドを使って羽根を生成します。
先に作成した各ガイドが、羽根の中心部分、コアになっています。
羽根の作成に関してはSideFXのチュートリアルがあるのでそちらもご参照ください。
羽根が体に沿って配置されていますね。
法線をコピーし、その法線からクォータニオンを作成し、そのクォータニオンをFeather Template Interpolateノードに入力しています。
Feather Template Interpolateオペレーターは、一連のテンプレートカーブのバーブ値をブレンドするために使用されます。複数のテンプレートカーブを入力として受け取り、それらのバーブ値を補間して、テンプレートのブレンドから羽根を作成します。
ここではバーブという言葉がたくさん出てきますが、バーブ(barb)とは、鳥の羽根の中心軸(羽軸)から枝分かれする細い毛のことらしいです。
すべての羽根を手動で配置する必要はなく、アルゴリズムによって自動的に黒い部分や表面に沿って配置されていることがわかります。
次に非常に重要なノードは、Feather Surface Blendです。
Feather Surface Blendオペレーターは、羽根がポリゴンメッシュの曲面に沿うようにするために使用されます。このオペレーターは、表面ジオメトリに基づいて羽根の形状を変形させ、より自然でリアルな見た目を実現します。
ここでは4番目の入力としてProxyジオメトリを接続しています。
4番目の入力が羽根をフィットさせるためのジオメトリとなっているため、プロキシジオメトリ上に羽根が配置されます。
プロキシジオメトリを自動的に埋めてくれるので、手動で配置する必要はありません。
ちなみにこのProxyに接続されいているはEditノードは、プロキシジオメトリをスカルプトするために使われています。Houdini20.5であればSculptノードを使うこともできます。
3つ目の非常に重要なノードは、羽根同士の干渉を修正するためのIntersectionノードです。
Feather Deintersectオペレーターは、羽根グルーミング内で交差している羽根を解消する役割を担っています。
この3つのオペレーターが、全ての処理を行ってくれる超重要ノードです。
こちらのノードは、これら3つのオペレーターに入力を与えるためのマスクや必要なアクションです。
羽根のバーブの数は少なく設定されており、これはリアルタイムでの反応速度を確保するためです。
Feather Visualizeノードを使って、すべての羽根をバーブ付きの羽根ではなく、平面として可視化することができます。
次の段階ではFeather Widthノードを設定しており、羽軸とバーブのカーブ幅を設定します。
そのあとで羽根のリサンプリングを行っています。
この上にあるノードはバーブの量などをコントロールするために設定を行っています。
ここで重要なのは、囲んだ2つのノードで、それ以外はすべて準備作業になります。
これら2つのノードは非常に密接に関連しているため、常に一緒に調整します。
Feather Widthノードでは、羽軸やバーブのカーブ幅を設定します。
アトリビュートを使用して、カスタマイズしています。
ランダム化しています。
Feather Resampleオペレーターは、羽軸やバーブカーブの密度と滑らかさを調整するために使用されます。これにより、バーブやバーブ頂点の数を増減して、望むレベルのディテールを実現できます。
次はランダム化です。ここで重要なのは、2つのノードだけです。
クランプとノイズノードがあり、基本はキャラクターのヘアスタイルを作るのと同じです。
Feather Clumpノードは、羽根のバーブを束ねたり分割したりする役割を果たします。バーブは互いにフック(小羽枝)で繋がっており、現実ではそのフックが力で引き裂かれることで分裂が生じます。
ここでは、Feather Noiseを3回再利用し、体の部位によりノイズを変えています。
Feather Noiseノードは、羽根のバーブにノイズを加えるために使用され、バーブの位置に変化をもたらすことで、より自然で有機的な見た目を実現します。ノイズの量は、法線、接線、従接線の軸ごとに独立して制御可能です。また、羽軸とバーブに沿った周波数もそれぞれ調整できます。
最後は色のパートです。
もちろんこの部分省略し、シェーディング段階で色を適用してテクスチャを使用して抽出することもできます。
しかし、このサンプルではジオメトリの段階で色を適用しています。
大きな羽根(翼や尾羽根)は、ブランチが分かれています。
ただし、設定はこれまでと同じで色のランダム化や羽根の大きさの調整を行っています。
このブランチの一番上にある2つのノードは翼と尾の大きな羽根を作成しています。
この2つのノードは2つのサブネットワークなので中に入ってみます。
ここには5つの羽根グループがあります。基本的には、1つ、2つ、3つ、4つ、5つと見えるそれぞれは、異なる羽根に対して同じノードを使用しています。
すべての羽根を個別に作っているわけではなく、ここで見えるように5つの異なるタイプだけを作成しています。理由は、隣り合う羽根同士は非常に似ているからです。
この羽根を補間しています。
例えば1のグループには2つのユニークな羽根があり、それらを補間してグループ全体を構成しています。
このカラ―グラデーションは、補間を示すためのもので、視覚的にわかりやすくするために使用されています。
羽根の配置には2本のカーブだけが使用されています。
curve7は、羽根が成長を開始するポイントを示し、curve8は羽根の向きに関するもので、羽根がどの方向を向いているかを示しています。
8つのポイントを使って、すべての羽根を配置することができていて、素晴らしいですね。
すべての羽根は、このプロシージャルアルゴリズムを使用して自動的に生成させています。
自分の鳥を作るには、ただコピー&ペーストするだけで簡単です。
2本のカーブを作成して、ここにあるカーブに置き換えるだけで、自分の羽根や翼を作成できます。
8~10本のテンプレート羽根があれば、あとはそれを使って流れるような作ることが可能です。
鳥のサイズが大きく異なる場合には、いくつかのパラメーターを調整するだけで対応できます。それ以外は同じ手順で問題ありません。
これは1つの方法であり、他のアプローチも可能で、パラメータや設定を調整して自分に合った方法を試してみることもできます。
最後にLOPに移動し、Karma XPUで確認します。FurのShadingに関してHoudiniにチュートリアルが公開されておりそれが羽根にも応用できます。
ぜひ、オオハシグルームをダウンロードしてHoudiniで鳥の羽を作る方法を学習してみてくださいね。