myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

SI データを Maya に持って行ったり、持って来たり

MayaとSoftimageにデータを持って行ったりもって来たりするツールを作ろうとしています。

最初のプロトタイプ(テスト用)が出来たので、公開します。

オブジェクトモデルをインポートエクスポート
UVをインポートエクスポート

という機能です。

仕組みはわりと簡単です。
一時フォルダにOBJに書き出して、OBJを読み込む。
UVの場合は、一時フォルダからOBJを読み込んで、UVをコピーして、OBJを削除。

※ C:\TEMP フォルダを使用されていない場合は自動に作成されます。

※ ただのOBJなので、マテリアル設定などは持っていけない。


色々考えて試してみた結果、この簡単な方法が一番うまく行きました。

これでFBXとかを使い分けると共有が出来るデータの幅が広がりそう。例えばSIにデータを持って行って、SIでウェイト作業を行って、ウェイトだけMayaに持って帰ったりして・・・。

参考までにして、好きにカスタマイズしてみてください。



MayaSI
Download

・script フォルダにコピー
・Python で:

オブジェクトデータをエクスポート
import MayaSI
MayaSI.expOBJ()

オブジェクトをインポート
import MayaSI
MayaSI.impOBJ()

UVをインポート
import MayaSI
MayaSI.impUV()


SIMaya_Plugin
Download

プラグインフォルダにコピー

オブジェクトデータをエクスポート
Application.expOBJ()

オブジェクトをインポート
Application.impOBJ()

UVをインポート
Application.impUV()

SI | Normal + Inmed モードでもウェイトが消えない方法

Softimage でInmedモード(ヒストリーが残らないモード)のままでウェイトが付いているオブジェクトにNormal(法線)ツールを使うと、ウェイトが消えてしまう。

Inmedモードで法線いじらなければ済む問題ですが、ついやってしまいます。

Inmedモードを切って、
法線をいじって、
Freeze M を掛けて
Inmedモードに戻す

という手順になりますが、これは自動に出来ないのかと今更思いついて書いてみました。

答えは、コマンドイベントを作って、以上の手順を自動にすればいいだけです。
なんで早くこれをやらなかったのかな!

以下のコードをPythonファイルに保存して

例:NormalsEvent.py



プラグインフォルダに入れる:

例: C:\Users\myara\Autodesk\Softimage_2015_SP1\Application\Plugins


ワークグループの場合は:

C:\Workgroup\Application\Plugins


それだけです。あとはSoftimageに任せてください。


from win32com.client import constants as c
xsi = Application

def XSILoadPlugin( in_reg ):
in_reg.Author = "myara"
in_reg.Name = "NormalsEvent Plug-in"
in_reg.Major = 1
in_reg.Minor = 0

in_reg.RegisterEvent("Normal_BeginCommand", c.siOnBeginCommand)
in_reg.RegisterEvent("Normal_EndCommand", c.siOnEndCommand)
#RegistrationInsertionPoint - do not remove this line

return True

def XSIUnloadPlugin( in_reg ):
strPluginName = in_reg.Name
Application.LogMessage(str(strPluginName) + str(" has been unloaded."), c.siVerbose)
return True

def Normal_BeginCommand_OnEvent( in_ctxt ):
Application.LogMessage("BeginCommand_OnEvent called", c.siVerbose)
Application.LogMessage("Command: " + str(in_ctxt.GetAttribute("Command")), c.siVerbose)

coms = ['Tweak Normal Tool', 'Average User Normals', 'Set User Normal Values', 'Set Vertex User Normals', 'Set Polygon User Normals', 'Invert User Normals', 'Normalize User Normals', 'Paste User Normals', 'Create User Normals']

if str(in_ctxt.GetAttribute("Command")) in coms:
UserImmed = xsi.GetUserPref("OperationMode")
if UserImmed == True :
xsi.SetGlobal('Normal_Immed', 1)
xsi.SetUserPref("OperationMode", False )

return False

def Normal_EndCommand_OnEvent( in_ctxt ):
Application.LogMessage("EndCommand_OnEvent called", c.siVerbose)
Application.LogMessage("Command: " + str(in_ctxt.GetAttribute("Command")), c.siVerbose)

coms = ['Tweak Normal Tool', 'Average User Normals', 'Set User Normal Values', 'Set Vertex User Normals', 'Set Polygon User Normals', 'Invert User Normals', 'Normalize User Normals', 'Paste User Normals', 'Create User Normals']

if str(in_ctxt.GetAttribute("Command")) in coms:
UserImmed = xsi.GetUserPref("OperationMode")
if xsi.GetGlobal('Normal_Immed') == 1 :
sel = xsi.Selection
for obj in sel:
if obj.Type.find('Component')!=-1:
obj = obj.SubComponent.Parent3DObject
xsi.FreezeModeling(obj)
xsi.SetUserPref("OperationMode", True )

return False


元から書いてある部分
Application.LogMessage("Command: " + str(in_ctxt.GetAttribute("Command")), c.siVerbose)

をあえて残しています。
このコマンドイベントは全てのコマンドを感知して、この行で使われたコマンドのログを残してくれる。
スクリプトエディターのプリファレンスにVerboseもログするようにしない限りログには出てこないけど、似たようなコマンドイベントを作りたい場合は便利だと思ったので、念のため残しておきます。

では、 Read more

PySide + SI 2015 + Win10 + Maya

= エラー
(その2)

以前の記事にWin10 で PySideを使う方法を書きましたが、一つ大きな問題があるのは、Mayaには影響がある可能性がある。

PYTHONHOME という環境変数を設定するとMayaのPythonがうまく動かないこともあるので、その場合はSoftimageの環境だけに設定する必要があります。

やりかたはわりと簡単です。

・環境変数のPYTHONHOMEを削除しておく。
・Softimage のフォルダを開く
例:
C:\Program Files\Autodesk\Softimage 2013 SP1\Application\bin
・setenv.bat をテキストエディターで編集する。(例 notepad++)
※ 管理者として編集が出来るソフトが必要ですが、できない場合は、このsetenv.batをほかの場所にコピーしてから編集してもOK。

このファイルをひらくと最初に以下の5行が見えます:

@echo off
rem Softimage Installation path
set SI_HOME=C:\Program Files\Autodesk\Softimage 2013 SP1
set XSI_HOME=%SI_HOME%
set XSI_BINDIR=%XSI_HOME%\Application\bin



この次にPYTHONHOME 変数を入れればいいです。
PYTHONHOME = C:\Python27

注意:クオーテーションマークは不要 (PYTHONHOME = "C:\Python27" はNG)

こんな感じ:

@echo off
rem Softimage Installation path
set SI_HOME=C:\Program Files\Autodesk\Softimage 2013 SP1
set XSI_HOME=%SI_HOME%
set XSI_BINDIR=%XSI_HOME%\Application\bin

set PYTHONHOME=C:\Python27



・ファイル保存して、完了。
※他の場所に移って編集された場合は、元の場所に上書きしてください。

以上。

※ 

ALTは押し辛い→Sharpkeysで解決

MayaではALTを押しながらカメラを回転・移動などするので、頻繁に押しています。
しかし、ALTの位置がかなり端っこの方にあって、親指は曲がった状態で押さないといけない。

これが指や手の疲れや痛みにつながるので何とかしたいと思って、数年前に「ALT」を「無変換」キーと差し替えたソフトを使ってみてなんとか解決しました。

今週に新しいPCが届いてデフォルトのままで使っていたらやっぱりALTは押し辛い!差し替えた時はめっちゃ楽だったと改めて思って、今回このソフトを紹介しようと思っています。

Sharpkeys
http://www.randyrants.com/

ちょっとした問題ですが、僕のキーボードではALTを押してもSharpkeysは認識しないので、手動で「Special Key Left Alt」を選択しないといけない。「無変換」キーはちゃんと認識されるので、押すだけで済みます。

是非試してみてください。

PySide + SI 2015 + Win10

= エラー


以前公開したmSkinはWindows 10 + Softimage 2015 だと動かないという報告があった為、色々調べてみました。
因みに Windows 10 + Softimage 2013 では特に問題がありません。
2014は未確認。

カスタマイズされたPySideとPyQtForSoftimageが必要で、残念ながら外部Pythonでしか効かないワークアラウンドです。
面倒だけど、PyQtを Windows 10 + Softimage 2015 で使いたければこれをやるしか方法がないです。

必要なソフト:

・Python 2.7
https://www.python.org/downloads/
注意:メインページの一番目立つリンクは 32bit版です。
Python 2.7 の最新リリースを探って、ちゃんと 64 bit版をダウンロードしてください。
64bitのインストーラーのファイル名は「amd64.msi」で終わります。
例:python-2.7.14.amd64.msi

・PyWin32
https://github.com/mhammond/pywin32/releases
Python 2.7 amd64 用のインストーラーをダウンロードしてください。
例: pywin32-221.win-amd64-py2.7.exe

・PySide 1.2.4 yamahigashi (松本)氏のカスタマイズバージョン
PySide-1.2.4-cp27-cp27m-win_amd64.whl
https://www.dropbox.com/s/y1mfleopvx5cr2w/PySide-1.2.4-cp27-cp27m-win_amd64.whl?dl=0

・PyQtForSoftimage yamahigashi (松本)氏のカスタマイズバージョン
https://www.dropbox.com/s/9x9k3u27v2oslmr/PyQtForSoftimage_win10_returnedvalue.xsiaddon?dl=0
mSkin_Win10_SI2015_WG に同封しています。

・mSkin 2015
Download
以上のPyQtForSoftimageが同封してあります。



インストール+設定方法:

・Python 2.7, PyWin32
両方はダブルクリックして、インストールが出来ます。

・PySide
Pip を使ってインストールします。

Python27のScriptsフォルダでコマンドプロンプトを開く。(おそらく管理者として開く必要がある)
※ PowerShellでもOK。

例: C:\Python27\scripts

最新のPython27はインストールしていたらpipの更新する必要がないでしょうけど、念のためにpipをアップグレードしましょう:

pip install --upgrade pip



yamahigashi氏のPySideをインストールする:

pip install whlファイルのパス


例:

pip install PySide-1.2.4-cp27-cp27m-win_amd64.whl



・環境変数
外部のPythonはSoftimageで認識されるようにPythonの環境変数を設定する必要がある。

Windows ボタンを押して enviro、もしくは 環境 を書けば、すぐに出てきます。

新しい「PYTHONHOME」という名前で環境変数を作って、Pythonをインストールしたパスを記入すれば完了。
例:C:\Python27

Softimage で プリファレンス / Scripting の
Use Python Installed with Softimage (Windows Only) というオプションのチェックをはずして、Softimageを再起動。

xsi_scriptpreference.jpg

・PyQtForSoftimage / mSkin

mSkinを使う場合は Workgroup にこのmSkin2015バージョンを接続するだけで完了。
PyQtForSoftimageをインストールする必要がありません。

mSkinは使わない場合は、yamahigashi氏のPyQtForSoftimageをインストールしてください。
このカスタマイズされたPyQtForSoftimageのgetQtSoftimageAnchorは long 値 ではなくストリングを返す為、long(sianchor)を使っている部分は編集する必要があります。

例:

sianchor = Application.getQtSoftimageAnchor()
sianchor = Qt.wrapinstance(long(sianchor), QWidget)



sianchor = Application.getQtSoftimageAnchor()
sianchor = Qt.wrapinstance(sianchor, QWidget)


に変更


これで PySideはWindows10 の Softimage 2015 で使えるようになります。

Next page