テクスチャからウェイトマップをリアルタイムに生成するには
https://www.youtube.com/watch?v=eaX8BC1bHHE
このビデオではリアルタイムにテクスチャからウェイトマップを生成する方法を解説します。テクスチャからウェイトマップを生成する方法については、以前解説ビデオ「テクスチャからウェイトマップを生成するには」でご紹介していますが、そのビデオではテクスチャをいったんカラーマップへとベイクし、そこからウェイトマップへと転送しており、正確にテクスチャをウェイトマップへと移すことができますが、いったんベイクを行った後でテクスチャのプロパティを変更しても、その修正が反映されることはありません。修正を反映しようとすると、もう一度ベイクしなおしてから転写しなおすという作業が必要になります。これをリアルタイムに反映させるために、メッシュオペレーションを利用します。
サンプルとなるシーンにはあらかじめテクスチャが設定された板ポリゴンが1枚用意されています。このテクスチャをリアルタイムにウェイトマップへと反映させてみます。まずはビューポート上でテクスチャが簡単に確認できるよう、バージョン16.0から搭載されてたテクスチャキャッシュ機能を利用してみます。テクスチャキャッシュの設定方法など詳細については、日本語解説ビデオ「ビューポート上でプロシージャルテクスチャを描画するテクスチャキャッシュ機能」をご覧ください。シェーダツリーから板ポリゴンのマテリアルグループを右クリックし、選択マスクをキャッシュをクリックします。これでプロシージャルテクスチャがビューポート上で確認できるようになりました。プロパティの値を変えて、テクスチャの見え方を調整します。
ではまず下準備として、このテクスチャのインスタンスを作成しておきます。シェーダツリーからテクスチャを選択し、右クリックでインスタンス作成を実行します。作成されたインスタンスは、わかりやすいように名称をVeins_Instなどと変えておきます。
ではオペレーションリストを開き、まずはウェイトマップを作成してみましょう。オペレータ追加 > 頂点マップ > Set Weightを追加します。マップの名称を設定したら、マップを選択ボタンをクリックします。そうすることで、今作成したウェイトマップを選択状態にしてくれますので、ビューポート上でウェイトマップ表示をオンにしていれば、そのまま確認することができます。現在、何も選択していない状態でウェイトマップを設定しましたので、すべてに対してマップ値100%が適用されています。
ではこれをテクスチャに沿ってウェイトを設定してみましょう。Set Weightを展開し、Selection > (Selectionを追加)をクリックしたら、新規 > Select By Falloffを追加します。これはフォールオフによって選択を行うというツールです。さらにどのフォールオフを使うのかを指定するため、Select By Falloffを展開し、フォールオフ > (フォールオフを追加)から新規 > Texture Falloffを追加します。このテクスチャはどれを使うのかというのを設定する必要がありますので、Texture Falloffを展開し、テクスチャロケータ > (テクスチャロケータを追加)から先ほど作成したインスタンスのテクスチャロケータを指定します。
これでテクスチャによるウェイトマップが生成されるはずなのですが、このサンプルシーンにあるモデルは単なる1枚の板ポリゴンであり、頂点が足りていませんので、Base Meshに戻ってテクスチャを分割します。そうするとテクスチャがウェイトマップに移されるようになりました。
ただしこの状態だと、選択をする・しないというのをフォールオフで選択プロパティで指定するしきい値50%で切り分けていますので、これをさらにぼかします。オペレータ追加 > 頂点マップ > Smooth Weightを追加します。ここでウェイトマップの名称を指定するわけですが、元となるウェイトマップの名称を変更しても、すぐに対応できるように、ここはスケマティックビューで接続しておくと良いでしょう。
スケマティックビューを出し、Set WeightとSmooth Weightを追加します。それぞれのマップの名称はデフォルトでノードに追加されていませんので、それぞれマップ名称をノードへと追加したら、Set Weightのマップ名称をSmooth Weightのマップ名称へと接続します。あとはスムーズさをビューポートで確認しながら、Smooth Weightの回数を調整していきます。
さらにウェイト値に調整を加えたいときには、オペレータ追加 > 頂点マップ > Remap Weightを使うと良いでしょう。こちらも先ほどと同様、スケマティックビューでウェイトのマップ名称を接続します。これにより、ウェイト値をどのように表現したいのかを、より詳細に設定することができます。
ここまででウェイトの設定ができたら、リプリケータで配置してみましょう。このウェイトマップに沿ってリプリケータで配置したいので、まずはSurface Particle Generatorを追加し、ソースサーフェイスとして板ポリゴンを選択します。ただこの状態だと、板ポリゴン全面に対して均一にパーティクルを配置してしまいますので、密度マップとサイズマップにウェイトマップを指定してみます。
Surface Particle Generatorをスケマティックビューに追加し、ノードを右クリックし、チャンネルの追加からdensVMapとsizeVMapを追加します。これがそれぞれ密度マップとサイズマップになりますので、ここにSet Weightのマップ名称を接続します。
あとはリプリケータで複製する元となるメッシュを作成し、リプリケータを追加したら、原型となるアイテムに複製元となるメッシュを、またポイントソースにSurface Particle Generatorを指定します。配置具合については、Surface Particle Generatorの平均間隔の値などを調整してみてください。
この方法であればすべてメッシュオペレーションで組まれていますので、配置具合以外にも後から様々な調整が可能になります。