株式会社デジタル・フロンティア-Digital Frontier

Header

Main

MAYAからのテクスチャ制御

2011/5/10

Tag: ,,,,,

はじめまして。 MAYA背景チームのATDをさせてもらっている conie lee と申します。
今回は、テクスチャ(イメージ)の制御について投稿させて頂きたいと思います。

・ テクスチャの再ロード
・ イメージのサイズ
・ win32comからPhotoshopの制御
・ PIL

■ テクスチャの再ロード (Fileノード)

一番よく使う機能の1つは、fileノードのReload機能でしょう。
イメージ編集ツール(Photoshopなど)で修正したファイルをmayaのview port上に反映させるために使いますが、


大きなマップになるとテクスチャの数が2~300枚以上になる場合もあります。
Hypershadeからfileノードを探し、Reloadする作業は時間が掛かります。
こんな時、以下のscriptを実行すると、すべてのテクスチャをReloadしてくれます。

import maya.cmds as cmds

texList = cmds.ls(type = "file")
for i in range(len(texList)):
    getPath = cmds.getAttr(texList[i] + '.fileTextureName')
    cmds.setAttr( texList[i] + '.fileTextureName', getPath ,type = "string")

このままじゃ効率が悪いので、基準になる時間を設定して更新されたファイルだけReloadすればいいでしょう。

■ テクスチャのサイズ

Mayaで使うテクスチャのサイズが2のべき乗じゃない場合、
mayaのview port上でテクスチャがぼけて表示されたり、
ゲームの実機上ではUVが伸びて見える原因になったりします。
サイズをチェックしたい場合、

cmds.getAttr('fileノード名.outSize')

を使えばサイズをゲットすることができます。

テクスチャのサイズをmayaにimportする前に知りたい場合、以下の方法があります。

import maya.OpenMaya as M
import maya.cmds as cmds

getPath = cmds.fileDialog(dm = "*.tga")
w = M.uIntPtr()
h = M.uIntPtr()
img = M.MImage()
img.readFromFile(getPath)
img.getSize(w, h)

print w.value()
print h.value()

■ win32comからPhotoshopの制御

今回のメインテーマになるwin32comを利用したPhotoshopの制御です。

■ 1. インストール

・ python2.6.x のインストーラをダウンロードしてインストールします。
・ pywin32-216.win-amd64-py2.6(win32comが入ったモジュール) をダウンロードしてインストールします。

■ 2. 準備

python command windowを開きます。

import win32com.client
ps = win32com.client.Dispatch("Photoshop.Application")


エラーがなければ、これでPhotoshopが起動されます。

Window用Photoshop場合、Java SciprtとVisual Basic言語でphotoshopを制御することができます。
win32comから制御する場合は、Visual Basic Script を使います。

photoshopがインストールされている pathには scriptsガイドがあるので参照してくたざい。
例) C:\Program Files (x86)\Adobe\Adobe Photoshop CS2\スクリプティングガイド
VisualBasic Reference Guide.pdf

このファイルの中には photoshopの object と constantのリストが含まれています。

■ 3. 実行

● 3-1 新規ファイル作成

doc = ps.Documents
doc.Add(256,256)

これで、新規ファイルが作成されます。

サイズを確認して見ましょう。
幅256、高さ256を入力したのに違うサイズに作成されました。

人によっては合ってるかもしれませんが、これはUnitの問題です。
unitをpixelに変更しましょう。

# constant を Queryする場合の例
ps.Preferences.RulerUnits

ps.Preferences.RulerUnits をqueryすると 4とreturnしました。
VisualBasic Reference Guide.pdfを確認しましょう。

# constant を Editする場合の例
ps.Preferences.RulerUnits = 1

unitが mmになっていたのでpixelに変更しました。

これでもう一回実行すると

doc.Add(256,256)


ちゃんと作成されました。

● 3-2 現在、選択しているDocumentsの制御

actDoc = ps.ActiveDocument

現在選択されているObjectをケットします。


# イメージを複製したい場合
actDoc = ps.ActiveDocument
actDoc.Duplicate()
# (イメージ > 複製 と同じ)
# イメージを反転したい場合
actDoc = ps.ActiveDocument
actDoc.FlipCanvas(1) # horiznotal (イメージ > カンバスの回転 > カンバスを左右に反転 と同じ)
actDoc.FlipCanvas(2) # vertical (イメージ > カンバスの回転 > カンバスを上下に反転 と同じ)

actDoc.FlipCanvas(Parameter Type)ように
methodの引数がconstantの場合整数を入れます。

● 3-3 Filter 適用する方法

actDoc = ps.ActiveDocument
actDoc.ActiveLayer.ApplyGaussianBlur(2)
# フィルタ > ぼかし > ばかし(ガウス) と同じ

■ 4. Mayaで実行

mayaからwin32comを実行する一番簡単な方法は、
PythonがインストールされているPath\Lib\site-packages\
の下にあるファイルをまるっと
MayaがインストールされているPath\Python\lib\site-packages\
へコピーすることです。
※pywin32以外のモジュールをコピーしてしまう可能性も大いにあるので、pythonモジュールをしっかり整理しておきたい方は、周りに居るpython&システムに詳しい方に聞いて下さいね!

ちなみに、pywin32をインストールしたマシンであればこれだけで動くのですが、違うマシンでも動かしたい場合は別途dllにもパスを通す必要があります。(コピー後であれば、MayaがインストールされているPath\Python\lib\site-packages\pywin32_system32 をwindowsのシステムパスへ追加する)

また、私がうまくいった環境は以下になります。
・window7 x64
・maya2011 x64
・python2.6.4 amd64
・pywin32-216.win-amd64-py2.6

python, win32com, mayaのバージョンがうまく合わずに動かない場合も多々あるので、試される方は気をつけてください。
※動かなくても当方で責任を取る事は出来ませんので、周りに居るpython&システムに詳しい方に聞いて下さいね!

■ Python Imaging Library(PIL)

最後に、他にイメージを制御するmoudleの中にはPILがあります。
Photoshopにはない機能もあるので使って見てください。
たとえば、Photoshop のRGBColor objectには Alpha情報がないです。
この時はPILを使えばいいです。


import PIL.Image
import maya.cmds as cmds
getPath =     cmds.fileDialog(dm = "*.tga")
im = PIL.Image.open(getPath)
getColor = im.getdata()[0]


これで RGBAの情報がゲットできます。

getColor = im.getdata()[index]
を利用すれば他のpixelカラー情報も得ることができます。

このイメージはテクスチャのサイズごとに Polygon Plane を Subdivisionし、
Faceごとに Vertex Colorを適用した例です。
赤丸部分では、Vertex Color alphaを使ってplaneが透明になるように処理しています。

以上、MAYAからのテクスチャ制御でした。

-conie-

フィルタ > ぼかし > ばかし(ガウス)
Pocket

コメント

コメントはありません

コメントフォーム

コメントは承認制ですので、即時に反映されません。ご了承ください。

*