3Dペイントソフトでテクスチャを作成する際
パーツの塗り分けに「IDマスク」という単色で塗り分けした画像を使います。
塗り分け画像の作り方はいくつかあるものの、
Blenderで検索して出てくる方法では
手順が多く煩わしいものが多かったので、別の方法まとめておきたいと思います。
ペイントマスクについて
まず、Blenderの機能としてペイントマスクのことについて触れておきます
ペイントマスクとは テクスチャペイント ウエイトペイント 頂点ペイントの各モードに付いている機能で
「選択した面のみ」に各ペイント結果の効果をつける機能です
各エディタ画面のメニューに四角の重なったようなアイコンや[M]キーを押すことで切り替えができます
面の選択は編集モードの面選択状態と同じになる他、
右クリック選択の設定の場合は右クリックで 左クリック選択の設定の場合はAlt+クリックで選択
さらにShift同時押しで追加選択もできます
また、 メニューに「選択」メニューが追加表示されて編集モードと同じような選択ツールも使用できるようになります
特に「リンク選択」は重要で
現在選択している部分とメッシュ上でつながった部分が一気に選択された状態になります。
UVシームで範囲が完全に区切られている場合にはメッシュがつながっていても別パーツとして扱われます
テクスチャペイントモードでのIDマップ塗り分け
テクスチャペイントに入る前にUV展開は済んでいる前提で話をします
テクスチャペイントではビューのモードをテクスチャペイントに切り替えるだけでもいいですが
上のタブからテクスチャペイントのワークスペースを利用すると必要な設定が一通りされていて楽です
IDマスクはBlender内のマテリアルでは利用しないデータですので
プロパティエディタのツールセッティングのモードを「単一画像」に切り替えます
(これはオブジェクトのマテリアル設定に関係なく
表示している画像をUVマッピングした状態でペイントするモードです)
既存の画像を選択するか 新規のボタンを選択してペイント対象の画像を作成します
キャプチャでUVMapなっている部分で ペイントで使用するUVマップを指定します
これでブラシツールでペイント可能な状態になりましたが
先に説明したペイントマスクモードに入ることで特定の部位のみにペイントできます
さらに、ペイントマスクモードで塗りつぶしツールを使用すると
選択部位全てに色が付きます
IDマスクを作るのはとても楽なのではないでしょうか
UVの範囲外に余裕を持たせた塗り足し(パディング)はオプションの「にじみ」の項目で指定できます
後はパーツ分けしたい部分毎に塗った後保存するだけです
3DペイントソフトではIDマスクの再読み込みに対応しているようなので
必用に応じて更新して行ってもいいでしょう
カラーパレットの作成スクリプト
Blenderにプリセットされているカラーパレットもあるものの
IDマスクの作成にはもっと少ない色数のカラーパレットが欲しくなりました
一個一個手動登録してもよかったのですが スクリプトで自動化しました
import bpy
# インデクスで指定したRGBカラーを返す 54色が最大
def index2color(index):
col_list = [255, 65280, 16711680, 65535, 16711935, 16776960,
128, 32768, 8388608, 32896, 8388736, 8421376,
39423, 26367, 10053222, 9868950, 6697728, 6723891,
16751052, 10079487, 16737843, 13421619, 52377, 52479,
12632256, 8421504, 16751001, 6697881, 13434879, 16777164,
6684774, 8421631, 13395456, 16764108, 8388608, 16711935,
65535, 16776960, 8388736, 128, 8421376, 16711680,
16763904, 16777164, 13434828, 10092543, 16764057, 13408767,
13056, 13107, 13209, 6697881, 10040115, 3355443]
if index > 54:
return([0, 0, 0])
else:
col_int = col_list[index]
color = [col_int %256 %256 /255, col_int //256%256 /255, col_int //256 //256 /255]
return (color)
palette = bpy.data.palettes.new("id_palette")
for i in range(54):
col = palette.colors.new()
col.color = index2color(i)
スクリプトを実行した後 カラーパレットの一覧のプルダウンから「id_palette」を」選択するとパレットが表示されます
登録する色は別に作っていた関数を利用して
オフィスソフトのカラーパレットにある54色を参考にしました