【Blender】マテリアルノードを使って3D空間でグラデーションを掛けて結果をベイクする
目次
はじめに
Blenderでキャラモデル制作などをしているときに「髪の毛にグラデーションを掛けたい」というシチュエーションがあると思うのでその時のためにメモしておく。
グラデーションの掛け方
上記画像のようにノードを設定する、構成要素としては
- 入力 → テクスチャ座標
- コンバーター → XYZ分離
- コンバーター → 数式(積和算)
- コンバーター → カラーランプ
- シェーダー → ディフューズBSDF
- 出力 → マテリアルアウト
XYZの出力は繋ぐ場所によってどの方向にグラデーションするかが選択できる。あとは積和算の数字をいじることでグラデーションのかかり方を調整できる。
また、テクスチャ座標の出力を生成からオブジェクトへ変更するグラデーションの掛かり方が変わるので好みのほうを選ぶ。
ベイクする
Blender内でしか使えないため、Unityなどで使用できるようにするためテクスチャにベイクする。
まずは元のオブジェクトを複製する、3Dビューポートで元のオブジェクトを選択し「SHIFT+D」で複製する。同じ場所にコピーが作られるので動かさないようにする。
ベイク先のオブジェクトには新しくマテリアルを作り上記画像のように設定する。テクスチャノードは任意のサイズのテクスチャを新規作成してセットしておく。
ベイクはCyclesレンダラーでしかできないので、レンダープロパティからエンジンを「Cycles」に変更する。
ベイクタイプはディフューズ、影響はカラーのみ、選択物→アクティブにチェックを入れてレイの最大距離は0.001ぐらい。デバイスは良いグラボを積んでいるならGPU演算にしておく。
準備が出来たらベイク元とベイク先を選択し、ベイク先をアクティブにした状態で「ベイク」を押す。
ベイクには時間がかかるのでしばらく待つ。
成功するとこのようにベイク先のテクスチャにベイク結果が描きこまれる。
TexToolsでベイクする
Blenderのアドオンである「TexTools」にベイク機能が備わっているのでそちらの方法も記載する。
ワークスペース「UV編集」にしてテクスチャをベイクしたいオブジェクトを選択する。UVエディター側の画面でNキーを押してサイドパネルを出したら出力したいサイズを選択し、画像の部分をクリックして「Diffuse」を選択、最後に「Bake 1x」と書かれたボタンを押す。
成功するとカラーがベイクされた新規画像が生成される。必要であれば名前を付けて保存しておこう。
注意:TexToolsでのベイクを行うとレンダラーが自動的に「Cycles」に変更される。
TexToolsでノーマルベイクする
もはやこの記事の主旨とは関係ないが、ノーマルをベイクする方法についても書いておく
まずはベイク元となるハイポリのメッシュを用意する。ここでは例としてサブディビジョンサーフェスを適用したモンキーオブジェクトを使う。
次に転送元オブジェクトと転送先オブジェクトを両方選択する。
この時、転送元オブジェクトの名前は「(転送先オブジェクトの名前)_hi」か「(転送先オブジェクトの名前) high」にする必要がある、この例では転送先のオブジェクト名が「モンキー」で転送元は「モンキー_hi」にしている。名前があっていない場合は「Organize 2x」ボタンを押すと名前を修正してくれる(オブジェクトモードでやらないとエラーになる)。
あとはベイクタイプをTangent Normalに変更し、ケージを押し出しを良い感じに設定する。ケージを押し出しはベイク元のオブジェがベイク先より小さい場合に設定する。上の画像はケージを押し出しを0にしてベイクした結果の画像で黄色い部分がちゃんとベイクできていない。
ケージを押し出しを少し上げてい再ベイクした結果、ちゃんとベイクされた。Ray Distanceは基本0で問題ないはず。
出力されたノーマルマップ画像を適用したのが上記左側の画像で、右側が適用前となる。