前の記事でMAYAのスクリプトを使った、ポリゴン頂点の位置を取得する方法を書きました。
MAYAのスクリプトでポリゴン頂点の位置を取得するコマンド
pointPosition
ポリゴンの頂点には位置情報の他にカラーの情報もあり取得はもちろん編集もできます。
MAYAのスクリプトでポリゴンの頂点カラーを扱うコマンド
polyColorPerVertex
そこで今回は、ポリゴン頂点の位置情報と頂点のカラーの情報をあわせたPythonスクリプトを作りたいと思います。
|
ポリゴン頂点の位置情報を取得する
ポリゴン頂点の位置を取得するには
pointPosition
を使います。
import maya.cmds as cmds
selectedVertex_list = cmds.ls(sl=True)
vertex_pos_1 = cmds.pointPosition(selectedVertex_list[0])
print(vertex_pos_1)
説明:
vertex_pos_1 = cmds.pointPosition(selectedVertex_list[0])
pointPositionで選択した頂点の位置を取得、変数に代入
実行:
ポリゴン頂点を選択して実行
選択した頂点の座標位置が出力されました。
ポリゴン頂点のカラー情報を取得する
MAYAのスクリプトでポリゴンの頂点カラーを扱うコマンドは
polyColorPerVertex
ポリゴン頂点のカラーの値を取得する
polyColorPerVertexでポリゴン頂点のカラーの値を取得します
import maya.cmds as cmds
cmds.polyColorPerVertex( rgb=True ,q=True)
結果:
ポリゴンの頂点を選択して実行
選択した頂点のRGBの値が出力されました。
ポリゴン頂点のカラーの値を編集する
polyColorPerVertexでポリゴン頂点のカラー情報を編集します
import maya.cmds as cmds
cmds.polyColorPerVertex( rgb=(0.8 ,0.4 ,0.3) ,a=1 ,cdo=True)
説明:
cmds.polyColorPerVertex( rgb=(0.8 ,0.4 ,0.3) ,a=1 ,cdo=True)
選択した頂点を r=0.8 ,g=0.4 ,b=0.3 ,a=1 で編集します。
結果:
ポリゴン頂点を選択して実行
指定した値 r=0.8 ,g=0.4 ,b=0.3 ,a=1 で頂点のカラーが変わりました。
原点から距離に応じた頂点カラーをセットする
ポリゴン頂点の座標の値と頂点カラーの値が取得できたので、原点からの距離に応じて設定する頂点カラーの色を変えるスクリプトを書きたいと思います。
import maya.cmds as cmds
import maya.mel as mm
selectedVertex_list = cmds.ls(sl=True)
selectedVertex_num =cmds.filterExpand(selectedVertex_list , sm=31)
for i in range(len(selectedVertex_num)):
vertex_pos = cmds.pointPosition(selectedVertex_num[i])
mm.eval("vector $vertex_pos_1 = << %s , %s , %s >>; " % (vertex_pos[0],vertex_pos[1],vertex_pos[2]))
distance_value = mm.eval("mag $vertex_pos_1;")
if distance_value <= 1.0 :
cmds.polyColorPerVertex(selectedVertex_num[i], rgb=(0.0 ,0.0 ,1.0) ,a=1 ,cdo=True)
elif distance_value > 1.0 and distance_value <= 2.0:
cmds.polyColorPerVertex(selectedVertex_num[i], rgb=(1.0 ,0.0 ,0.0) ,a=1 ,cdo=True)
elif distance_value > 2.0 and distance_value <= 3.0:
cmds.polyColorPerVertex(selectedVertex_num[i], rgb=(0.0 ,1.0 ,0.0) ,a=1 ,cdo=True)
else:
cmds.polyColorPerVertex(selectedVertex_num[i], rgb=(0.5 ,0.5 ,0.5) ,a=1 ,cdo=True)
説明:
selectedVertex_list = cmds.ls(sl=True)
selectedVertex_num =cmds.filterExpand(selectedVertex_list , sm=31)
選択した頂点のリストが纏まっていると扱えないので filterExpand の引数に、ポリゴン頂点のセレクションマスク番号[31]を指定してバラバラにします。
vertex_pos = cmds.pointPosition(selectedVertex_num[i])
mm.eval("vector $vertex_pos_1 = << %s , %s , %s >>; " % (vertex_pos[0],vertex_pos[1],vertex_pos[2]))
pointPositionで取得した頂点の位置の値をeval()でMELのvector型の変数”$vertex_pos_1″に文字列で当てはめます。
distance_value = mm.eval("mag $vertex_pos_1;")
MELのコマンド mag でvector型の変数 “$vertex_pos_1” の大きさ(長さ)を取得。Pythonの変数 “distance_value” に代入しました。
if distance_value <= 1.0 :
cmds.polyColorPerVertex(selectedVertex_num[i], rgb=(0.0 ,0.0 ,1.0) ,a=1 ,cdo=True)
elif distance_value > 1.0 and distance_value <= 2.0:
cmds.polyColorPerVertex(selectedVertex_num[i], rgb=(1.0 ,0.0 ,0.0) ,a=1 ,cdo=True)
elif distance_value > 2.0 and distance_value <= 3.0:
cmds.polyColorPerVertex(selectedVertex_num[i], rgb=(0.0 ,1.0 ,0.0) ,a=1 ,cdo=True)
else:
cmds.polyColorPerVertex(selectedVertex_num[i], rgb=(0.5 ,0.5 ,0.5) ,a=1 ,cdo=True)
頂点の距離 “distance_value” に応じて頂点のカラーを設定します
結果:
カラーを設定する頂点を選択して実行。
設定した距離に応じて、頂点カラー色が変わりました。
まとめ:平面以外のメッシュにも応用できる
平面ではなく立体物に対して実行しました。
今回は原点からの距離に応じて設定する頂点カラーの値を変えましたが、原点からではなく自由に動かせるロケータからの距離にすると、もっと活用できる場面が増えると思います。
|
|
|
BTOパソコンの草分け的ブランドFRONTIER(フロンティア) 3DCG/動画編集/ゲーム用途に合わせてCPUやGPUなどパーツを自由に選べてコスパにもこだわる方にオススメ。 |
|
|
|
|
|