ブログ2つを書くほどのコンテンツがないので、個人ブログを辞めて会社のブログに引っ越すことにしました。
これからもよろしくお願いします。
新しい記事です。
FBX をプリセットとスクリプトでエクスポート(Maya)
1,2週間前から取引先から最近流行っているMayaのマルウェアの報告がありました。
感染すると:
・userSetup と animImportExport.pres.mel を書き換えて、マルウェアコードを追加します。
・シーンを保存する時に、マルウェアコードを追加して保存します。
・
2020年6月27日以降Mayaを起動すると無限ループでMayaをクラッシュさせます。
まーまーやばいやつですね。
何も知らないでこのままいったら、おそらくプリファレンスフォルダ削除で直していたんでしょうね。
喜んだ後に普通に仕事して、感染したファイルを開いて、また無限ループ。
の無限ループ。
melなので、コードの中身は簡単に確認が出来るけど、結構読み辛いです。
で、少し調べてみたら、githubにマルウェアのdeobfuscated コードがあがっていました。
興味があったら:
■
マルウェアコードhttps://gist.github.com/OriginalAdric/acbe902c89064e8300f2bc475a953e05・・・ deobfuscate って日本語でなんていうのかな。
--- 解決方法 ---■
Autodesk Maya Security Tool
https://apps.autodesk.com/MAYA/en/Detail/Index?id=8637238041954239715&appLang=en&os=Win64
※ Autodeskアカウントが必須
インストール方法など(ボンデジ)https://support.borndigital.co.jp/hc/ja/articles/900001472643
以上のツールを使えばマルウェア駆除が出来ますが、シーン1つ修正するとMayaが強制終了してしまうので、
複数ファイルをやるときにかなり時間が掛かってしまいます。
もっと早く出来ないかと色々検証してみて、出来たのはこれです:
■
checkMalwaredownload仕組みはシンプルです。
・入力したフォルダの中をmaとmbファイルを探して、そのファイルの中に怪しい変数名が入っているかどうかを検索して、感染したファイルをリスト化します。
・Clean up にクリックすると Maya batch モードで MayaScanner を使ってマルウェア駆除します。
ファイルの大きさやプラグインを使っている数によって処理時間が異なりますが、1ファイル30秒以上が掛かります。
・ログも残しているので、なにかしらの原因で駆除が出来なかった場合はスクリプトエディターで報告が出てくるはずです。その場合はMayaScannerを手動でやるしかありません。

■ インストール
Mayaの scripts フォルダにコピー
■ 実行方法
import checkMalware; checkMalware.main()
入力ウィンドウが出てきて、ここに確認したいフォルダを入力して、OKにクリック。
感染したファイルのリストが出てきて、シーン名にダブルクリックで開けます。
※ incrementalsaveの中はチェックしない
注意:
・ignore userSetup,py というオプションは一時的に userSetup.py を userSetup.py.skbk にリネームして読み込まれないようにしているだけで、スクリプトが中断されたらリネームしたまま残ってしまう可能性があります。
・ツールはバージョンの確認はしないので、修正されたファイルは実行されたMayaのバージョンになります。
・ファイルアトリビュートを変更しないので、ファイルは読み取り専用になっていれば、上書きが出来なくてエラーになってしまいます。あらかじめに読み取り専用のチェックを外してください
Maya Batch モードだと userSetup.py で読み込んでいる弊社のパイプラインツールはうまく動かなかったから、エラーで中断していた。userSetupを無視するオプションはMayaにはないので、一時的に userSetup をリネームすることにしました。
時々エラーが出ていて、マルウェア駆除が出来ていませんでした。
その原因は、たまに起こる原因不明の現象。cmds.file(q=True, sn=True) でシーン名を取得が出来ない。
そのワークアラウンドは cmds.file(query=True, l=True)[0] でシーン名を取得すること。
なので、MayaScannerCB.py を編集して、以下のコードを追加しました
# myara -------------------------------------------------------------------------------
if cmds.file(q=True, sn=True) == "":
cmds.warning("No Name Found. Renaming")
realName = cmds.file(query=True, l=True)[0]
cmds.file(rename=realName)
# ------------------------------------------------------------------------------- myara
■
MayaScannerFIXdownloadMayaScanner をインストールした後にこのファイルを上書き
C:\ProgramData\Autodesk\ApplicationPlugins\MayaScanner\Contents\plug-ins
MayaとSoftimageにデータを持って行ったりもって来たりするツールを作ろうとしています。
最初のプロトタイプ(テスト用)が出来たので、公開します。
オブジェクトモデルをインポートエクスポート
UVをインポートエクスポート
という機能です。
仕組みはわりと簡単です。
一時フォルダにOBJに書き出して、OBJを読み込む。
UVの場合は、一時フォルダからOBJを読み込んで、UVをコピーして、OBJを削除。
※ C:\TEMP フォルダを使用されていない場合は自動に作成されます。
※ ただのOBJなので、マテリアル設定などは持っていけない。
色々考えて試してみた結果、この簡単な方法が一番うまく行きました。
これでFBXとかを使い分けると共有が出来るデータの幅が広がりそう。例えばSIにデータを持って行って、SIでウェイト作業を行って、ウェイトだけMayaに持って帰ったりして・・・。
参考までにして、好きにカスタマイズしてみてください。
MayaSIDownload・script フォルダにコピー
・Python で:
オブジェクトデータをエクスポート
import MayaSI
MayaSI.expOBJ()
オブジェクトをインポート
import MayaSI
MayaSI.impOBJ()
UVをインポート
import MayaSI
MayaSI.impUV()
SIMaya_PluginDownloadプラグインフォルダにコピー
オブジェクトデータをエクスポート
Application.expOBJ()
オブジェクトをインポート
Application.impOBJ()
UVをインポート
Application.impUV()
= エラー
(その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
・ファイル保存して、完了。
※他の場所に移って編集された場合は、元の場所に上書きしてください。
以上。
※
= エラー以前公開した
mSkinはWindows 10 + Softimage 2015 だと動かないという報告があった為、色々調べてみました。
因みに Windows 10 + Softimage 2013 では特に問題がありません。
2014は未確認。
カスタマイズされたPySideとPyQtForSoftimageが必要で、残念ながら外部Pythonでしか効かないワークアラウンドです。
面倒だけど、PyQtを Windows 10 + Softimage 2015 で使いたければこれをやるしか方法がないです。
必要なソフト:・Python 2.7https://www.python.org/downloads/
注意:メインページの一番目立つリンクは 32bit版です。
Python 2.7 の最新リリースを探って、ちゃんと 64 bit版をダウンロードしてください。
64bitのインストーラーのファイル名は「amd64.msi」で終わります。
例:python-2.7.14.amd64.msi
・PyWin32https://github.com/mhammond/pywin32/releasesPython 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=0mSkin_Win10_SI2015_WG に同封しています。
・mSkin 2015Download以上のPyQtForSoftimageが同封してあります。
インストール+設定方法:・Python 2.7, PyWin32
両方はダブルクリックして、インストールが出来ます。
・PySidePip を使ってインストールします。
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を再起動。
・PyQtForSoftimage / mSkinmSkinを使う場合は 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 で使えるようになります。