ありそうで中々ないモノを作る。
コレはワシの信念の一つであり、そのようなものを共有することがこのブログの目的の一つでもある。
無料の3DCGツールのblenderにおいて、ボーンの組み方やスキニングの方法、モーションの仕方を解説する記事は多いが、それ以上に踏み込んだ領域まで解説した記事は少ない。実際、ボーンはポリゴンを直接動かす以外の使い方が可能な事、ボーンの表示を任意の形状で表示する機能(カスタムシェイプ)、ボーンの動きで任意の値を制御することも可能な機能(ドライバー)はその有用さに反してあまり知られていないと思われる。
ワシもかなり久しぶりにblenderでの3DCG制作に復帰し、星のカービィのワドルドゥのモデルをリメイクしていた。ワドルドゥには多くのカラーバリエーションが存在し、通常カラーの他にも、SDXでの敵キャラのカラー、USDXのヘルパーマスターでのカラー、スターアライズの2P, 3P, 4Pカラーなどが存在する。これらのカラーバリエーションを搭載すれば、ワドルドゥの魅力もさらに引き出せるハズと考え、blender上でカラーバリエーションを切り替えるシステムを導入している人がいないかを探してみた。
…のだが、ついに見つかることは無かった。特に、リグでカラーを切り替えるシステムを作っている人は日本語圏では一人も見つけることが出来なかった。マテリアルを直接切り替える、別モデルにするという単純な解決方法で事足りる人が多いのかもしれないが、ワシはそれで満足することが出来なかった。
というわけで、ワシは上記の機能を活用し、ありそうで無かった、カラー切り替えリグを作った。本記事ではこのリグの作り方、使い方について解説していく。
環境
バージョン: 3.1
シェーダー: Eevee
アドオンとしてNode Wranglerを有効化済
ボーンの動きでカラーを切り替える
このリグはズバリ、「ボーンの位置でON/OFFを切り替えるコントローラー」の応用である。上記のGIFアニメを見てもらえばわかると思うが、フェーダーを模したリグのツマミの位置に応じて、カラーパターン及びテクスチャが複数段階に切り替わっている。
トランスフォームロックとボーンコンストレイントにより、ツマミはローカルZ座標0.0~1.0の範囲での移動のみ可能となっている。このZ座標がドライバーで変換され、シェーダーノードに入力される。
カラーの場合、0.0~1.0の範囲でデフォルト(赤)、~2.0の範囲でオレンジ、~3.0の範囲でエメラルド、~4.0の範囲で黄色、~5.0の範囲で青、~6.0の範囲で緑色のように切り替わる。
構築するために使った機能
- シェーダーノード
- ミックス
- 大きい
- ノードグループ
- ドライバー
- カスタムシェイプ(後日追記予定)
ノードの構造
仕組みとしては単純。二つのカラー入力を係数に応じて混ぜる「ミックス」ノードの性質を利用している。
カラー入力は、「カラー」として出力されるものであれば何であっても使うことが出来る。テクスチャであっても、トゥーンレンダにおいて放射シェーダーに入力する直前のカラーであっても可能だ。
ミックスノードは、係数が0.0の場合に色1のみを出力し、係数が1.0の場合に色2のみを出力する。係数を0か1のみにできれば、片方のカラーを選択して出力するノードにすることができる。しかし、係数の選択はミックスノードのみでは不可能である。
そこで、数式ノードの「大きい(Greater Than)」を利用し、係数に0.0か1.0のみが入力されるようにする。入力の値としきい値を比較し、入力の値の方が大きければ1.0、そうでなければ0.0を出力する数式である。
この「大きい」ノードの出力を、「ミックス」ノードの係数として入力することで、出力カラーを色1か色2のどちらかにすることができる。「大きい」ノードの入力値を変更することで、「ミックス」ノードの出力カラーを切り替えることが可能になる。このままだと2パターンの切り替えしかできないが、このノードのセットを複数用意することで、3パターン以上の色の切り替えが可能になるのだ。
「大きい」ノードに入力される値は全て共通化することで、他のノード同士での矛盾を潰した。以降、この入力値をリグの見た目から、ツマミ値と呼ぶ。
画像の場合、ツマミ値が1.0以下の場合はデフォルト、1.0より大きく、2.0より小さい場合はオレンジ色…という切り替わりとなる。
ノードグループ化して使いやすく
ノードのうち、「ミックス」ノードと「大きい」ノードを抽出し、ツマミ値とカラー入力をグループ入力とすることで、ノードグループとして使うことが可能。出力されるのは、複数の入力カラーの内、選ばれた1カラーのみである。画像では6パターンとなっているが、大きいノード、ミックスノード、グループ入力の数を増減させることでパターン数を変更することが出来る。
ノードグループの「値(ツマミ値)」を増減させることで、入力されたカラーを切り替えることが可能になる。マテリアル出力する場合、放射シェーダーなどを挟むことを忘れずに。
ドライバーの設定
しかし、この状態ではツマミを動かしてもツマミ値が変わらないため、シェーダーノードかマテリアル設定を開き、「値(ツマミ値)」を直接変更する必要がある。ツマミの動きでツマミ値を変えるには、ノードのツマミ値に、ツマミのローカルZ座標が入力されるようにする。これを実現するのが、ドライバーである。
ドライバーの設定
ツマミ値にドライバーを追加する。右クリックで「ドライバーを追加」をクリックすると、ツマミ値のドライバーが作成される。その時に表示されるパネルか、ドライバーエディタ上で、以下の設定をする。
- 式は、var * 係数
- varはツマミのローカルZ座標
- 係数はパターン数と同じ値にする。(6パターンなら6.0)
- オブジェクトは、ツマミが含まれるアーマチュア、ボーンはツマミのボーンに設定。
- タイプはZ位置、座標はローカル座標とする。
これで、ツマミのZ位置を動かすと、ツマミ値が変わるようになる。そのツマミ値でカラーが切り替わるのである。
コメント
[…] ンを3.0へと改め、多くの新機能を搭載(中)。 シェーダーの配色を調整したことにより、全体的に明るめに。涙もここから搭載。 本日紹介したカラー切り替えリグもここで活用している。 […]
[…] 【blender】ミックスノードによる、カラー切り替えリグ ありそうで中々ないモノを作る。 コレはワシの信念の一つであり、そのようなものを共有することがこのブログの目的の一つでも […]