Maya Script Python – カラークラス

何気なく気が向いたので、頂点カラーエディタをapi2.0で作り始めました。
とりあえずの実装は1時間ほどで終わり、数万ポリゴン程度であれば、リアルタイムでの更新も重さとしては問題なさそうです。
ただ、更新がきちんとされない場合がある、、
apiで編集した結果をビューポートに再現するときは、MFnMesh関数セットのupdateSurface()を使うようですが、
なんだか思うようにならない。
全ての変更を適用後、一度だけメソッドを実行すれば良い。というような事が書かれているかと思うが、
人によってはポリゴン単位で実行している。

 

うーん、良く分からない。
プラグイン化すれば済む話なのだろうか。

 

それはそうと、カラーを編集する際に、apiではMColorクラスをインスタンス作成時に値を入れて作成したものを使いますが、
MColorクラスは大した機能を持っていない。(多分)
PymelのColorクラスでは色々な機能が存在するので、値の編集には便利そうだ。
しかも継承している元のクラスがVectorなので、そっちのメソッドも使うことができる。
例えばこんな感じ。

import maya.api.OpenMaya as om2
import pymel.core as pm

pColor = pm.datatypes.Color([0.5,0.5,0.5])
mColor = om2.MColor([0.5,0.5,0.5])
pColorB = pm.datatypes.Color.black

print "{0:-^30}".format("MColor")
print mColor
print mColor * 2
print mColor.r,mColor.g,mColor.b,mColor.a
print "{0:-^30}".format("pm.datatypes.Color")
print pColor
print pColor * 2
print pColor.hsva
print pColor.gamma(2.0)
print pColor.normal()
print pColorB

上記を実行すると、
————MColor————
(0.5, 0.5, 0.5, 1)
(1, 1, 1, 1)
0.5 0.5 0.5 1.0
——pm.datatypes.Color——
[0.5, 0.5, 0.5, 1.0]
[1.0, 1.0, 1.0, 2.0]
(0.0, 0.0, 0.5, 1.0)
[0.25, 0.25, 0.25, 1.0]
[0.577350258827, 0.577350258827, 0.577350258827, 1.0]
[0.0, 0.0, 0.0, 1.0]
と表示される。
Pymelの方では、hsvに変換したり、ガンマ補正をかけたり、ベクトルとしてノーマルを求めたりすることができる。
ただ、*2などの掛け算をするとアルファの値にまで影響が及ぶのがいただけない。

コメントする

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トラックバックする

トラックバック用URL:

アニメーションが親切に解説されております

レンダリング、ライティングの基本が分かります

図版が見やすい美術解剖書です