前の記事で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で選択した頂点の位置を取得、変数に代入
実行:
ポリゴン頂点を選択して実行
![ポリゴン頂点を選択](https://i0.wp.com/liquidjumper.com/Home/wp-content/uploads/2020/08/maya_python_change_the_value_of_the_vertex_color_01.jpg?resize=358%2C313&ssl=1)
選択した頂点の座標位置が出力されました。
ポリゴン頂点のカラー情報を取得する
MAYAのスクリプトでポリゴンの頂点カラーを扱うコマンドは
polyColorPerVertex
ポリゴン頂点のカラーの値を取得する
polyColorPerVertexでポリゴン頂点のカラーの値を取得します
import maya.cmds as cmds
cmds.polyColorPerVertex( rgb=True ,q=True)
結果:
ポリゴンの頂点を選択して実行
![ポリゴン頂点を選択](https://i0.wp.com/liquidjumper.com/Home/wp-content/uploads/2020/08/maya_python_change_the_value_of_the_vertex_color_01.jpg?resize=358%2C313&ssl=1)
選択した頂点の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 で編集します。
結果:
ポリゴン頂点を選択して実行
![ポリゴン頂点を選択](https://i0.wp.com/liquidjumper.com/Home/wp-content/uploads/2020/08/maya_python_change_the_value_of_the_vertex_color_01.jpg?resize=358%2C313&ssl=1)
指定した値 r=0.8 ,g=0.4 ,b=0.3 ,a=1 で頂点のカラーが変わりました。
![頂点カラーの値を変えました](https://i0.wp.com/liquidjumper.com/Home/wp-content/uploads/2020/08/maya_python_change_the_value_of_the_vertex_color_02.jpg?resize=358%2C306&ssl=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” に応じて頂点のカラーを設定します
結果:
カラーを設定する頂点を選択して実行。
![複数の頂点を選択](https://i0.wp.com/liquidjumper.com/Home/wp-content/uploads/2020/08/maya_python_change_the_value_of_the_vertex_color_04.jpg?resize=382%2C273&ssl=1)
設定した距離に応じて、頂点カラー色が変わりました。
![距離に応じて頂点カラーの値をかえました](https://i0.wp.com/liquidjumper.com/Home/wp-content/uploads/2020/08/maya_python_change_the_value_of_the_vertex_color_03.jpg?resize=382%2C285&ssl=1)
まとめ:平面以外のメッシュにも応用できる
平面ではなく立体物に対して実行しました。
![立体物にスクリプトを実行](https://i0.wp.com/liquidjumper.com/Home/wp-content/uploads/2020/08/maya_python_change_the_value_of_the_vertex_color_05.jpg?resize=434%2C322&ssl=1)
今回は原点からの距離に応じて設定する頂点カラーの値を変えましたが、原点からではなく自由に動かせるロケータからの距離にすると、もっと活用できる場面が増えると思います。
![]() |
|
![]() |
|
![]() |
|
BTOパソコンの草分け的ブランドFRONTIER(フロンティア) 3DCG/動画編集/ゲーム用途に合わせてCPUやGPUなどパーツを自由に選べてコスパにもこだわる方にオススメ。 |
![]() |
|
![]() |
|
![]() |
|
![]() |
|
![]() |
|