複数のオブジェクトにまとめて頂点カラーを転送する

こんにちは。Rhinoです。
近頃はモバイルの仕事が増えた為、頂点カラーを使う機会が多いです。
ライティングだったり、アルファだったり、ブレンドなど使用用途も様々ですね。
特に仕事柄ライティング替わりによく使います。
そんな時一度付けた頂点カラーを流用したいと思ったことありませんか?
僕はよくTransfer Attributesを使って解決しています。

Transfer Attributes
UVや頂点カラー、頂点の位置などを様々な条件で転送することができます。

ただし、一つ難点がありまして、転送元と転送先の一対一じゃないと転送できないんですよね。
まとめてはできないんです。こんな作業になっていませんか?

これでは面倒なので、今回はまとめてできるScriptを書いてみたいと思います。

# -*- coding: utf-8 -*-
import maya.cmds as cmds

selection = cmds.ls( sl=True, fl=True )
for obj in selection:
	if obj != selection[0]:
		cmds.transferAttributes( selection[0], obj, pos=0, nml=0, col=1, scs="colorSet", tcs="colorSet", spa=1, clb=1 )

随分短くなりましたね。
実際これくらいで事足りてしまうんですよ。
それでは解説してみたいと思います。

解説

最初の2行は前回と同じですね。お約束みたいなものです。
4行では選択しているオブジェクトをlsというコマンドで取得しています。
その次に続いているsl=Trueは選択しているものを取得しますという意味です。
取得したものはselectionという変数に入ります。

selection = cmds.ls( sl=True, fl=True )

selecitonの中に選択したオブジェクトが入っていますので、これをループで個別に
取り出しながら、頂点カラーを転送してあげるという作業にな

ります。
ではforループで取り出してみましょう。
この時、取り出した個々のオブジェクトはobjという変数に入っていきます。

for obj in selection:

あとは転送してあげればいいのですが、1つだけ問題があります。
転送する際には転送元と転送先を指定する必要があるのですが、
例えば転送元を最初に選択したオブジェクトとした場合、
転送先と転送元が同じオブジェクトになる場合が存在します。
if文でそのようなことが起こらないようにしてあげる必要があります。
selection[0]は0番目、一番最初に選択したオブジェクトという意味です。

if obj != selection[0]:

あとは頂点カラーを使いたい条件で転送してあげれば上手くいくはず。
今回はカラーセット名を直接”colorSet”という文字列で指定していますので、
もし違うカラーセット名をお使いの場合は変更してみて下さい。

cmds.transferAttributes( selection[0], obj, pos=0, nml=0, col=1, scs="colorSet", tcs="colorSet", spa=1, clb=1 )

如何でしょうか?簡単でしたか?
Mayaのコマンドなどを当たり前のように使用していますので、近いうちにコマンドの調べ方などもまとめてみたいと思います。
今回はここまでです。
お疲れさまでした。では!

コメント

タイトルとURLをコピーしました