Python
Blender
maya
HOUDINI
Nuke

Maya, Houdini, blender, Nuke でのPythonインタープリタ

More than 1 year has passed since last update.

これはなに?

DCCツールとかその辺りでは拡張用の言語としてPythonが採用されていることが多いです。
(タイトルに挙げた以外だと、Softimage、3dsMax、Cinema4D、LightWave、modo、3D-Coat、Motionbuilder、Metasequoia、Vueあたりも。Adobeは頑なにjsx)

これらのPython環境は、アプリケーション本体(GUI)を立ちあげなくても
対話モードで使えたりします。
タイトルに挙げた4つで確認してみました。

  • Autodesk Maya >web
  • Side Effects Houdini >web
  • blender >web
  • The Foundry NUKE >web

環境

  • Microsoft Windows [Version 10.0.10240]
    • ※Autodeskファミリーはいまのところwin10に正式対応してません
  • ConEmu 150913 [64] >web

Maya

Mayaインストールフォルダのbin内のmayapy.exeを使います。

例:
C:\Program Files\Autodesk\Maya2016\bin\mayapy.exe

公式ドキュメント:
http://help.autodesk.com/view/MAYAUL/2016/JPN/?guid=GUID-83799297-C629-48A8-BCE4-061D3F275215

モジュール

Mayaの機能を使うためのモジュールは現在二種類あります。

  • Maya Python (または単にcmdsとも)
  • PyMEL

多くの場合、前者はimport maya.cmds as cmds(とか~~as mc)、
後者はimport pymel.core as pm(とか~~as pmc)として利用します。
後者は前者をオブジェクティブにラップしたものです(ざっくり
もともと外部で開発されていたものですが、Maya2011から標準搭載されるようになりました。
githubで公開されています。
https://github.com/LumaPictures/pymel

Maya Python

maya.cmdsは、読み込めはしますが、

import maya.cmds as mc

中を見てみても、使える感じじゃありません

>>> dir(mc)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']

initializeしてあげると、使えるようになります。
下記はドキュメントにあった例文(▼)

initialize
try:            
    import maya.standalone          
    maya.standalone.initialize()        
except:             
    pass

mayapy.png
みたいな。

PyMEL

PyMELも読み込めます。
読んだ途端にMaya起動時にスクリプトエディタに出るのと同様のログがプリントされます。

import pymel.core as pm

cmdsをinitializeしたときはメモリ109MBくらいでしたが、PyMELだと475MBくらい行きました。
GUI込みの、普通のMaya起動だと677MBくらい。
mayapy_memory.png

ちなみにPyMEL読み込む処理の中にinitializeも含まれてます。
古事記にもそう書かれている。
https://github.com/LumaPictures/pymel/blob/master/pymel/internal/startup.py

Houdini

Houdini インストールフォルダのhython.exeを使います。

例:
C:\Program Files\Side Effects Software\Houdini 15.0.244.16\bin\hython.exe

なんとなくsys.argv

>>> sys.argv
['C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.16\\houdini\\python2.7libs\\houdiniInterpreter.py']

なるほどね。

モジュール

Houdiniの機能を使うためのモジュールは「hou」モジュールです。
hython.exeを起動した時点で読み込まれてます。

>>> dir()
['__builtins__', '__doc__', '__name__', 'hou']

中にはいろいろ入ってます。
dir_hou.png

公式ドキュメント:
http://www.sidefx.com/docs/houdini15.0/hom/commandline
※日本語版は、パブリックなものとしては12で止まっており、国内代理店と契約すれば最新版が見れるようです。
http://sidefx.jp/doc/hom/

なお、単純に「hython」で検索すると、Haskell実装Pythonというのも出てきますのでちょっと注意。

numpy

hython環境では、デフォルトでnumpyが読み込めます。
ありがてえありがてえ(

blender

blender を、「--python-console」というオプションを付けて起動します。

例:
"C:\Program Files\Blender Foundation\Blender\blender.exe" --python-console
blender_console.png
何よりも無言のblenderウィンドウがどぅーーんと立ち上がるのが印象深いです(立ち上がりますが、特に使わないウィンドウです)。

なんとなくsys.argv

>>> sys.argv
['blender-app.exe', '--python-console']

なるほどね。

モジュール

blenderの機能を使うためのモジュールは「bpy」モジュールです。
読み込みます。

import bpy

中身。ある程度まとめられてます。

>>> dir(bpy)
['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'app', 'context', 'data', 'ops', 'path', 'props', 'types', 'utils']

…じっくり使ったわけではないのでこれで使える状態なのかとかよく分かりません(笑
(なんかblender(GUI)上のPython Consoleとは読まれてるクラスとかが違うような気も。)

公式ドキュメント:
http://wiki.blender.org/index.php/Doc:JA/2.6/Manual/Render/Command_Line
※日本語版は2.6。最新はこちら
http://www.blender.org/manual/advanced/command_line.html?highlight=python#python-options
「Render」カテゴリだったのが「advanced」に移動してます。

Python Console :
http://www.blender.org/manual/editors/python_console.html
Blender Python API :
http://www.blender.org/api/blender_python_api_2_76_2/
Scripting & Extending Blender » Introduction :
http://www.blender.org/manual/advanced/scripting/introduction.html

numpy

Houdini同様、blenderもなにもしなくてもnumpy読み込めます。

終了

後ろに応答しないblenderウィンドウがいらっしゃる関係か、雑にウィンドウを閉じようとすると警告されます。
quit()exit()でちゃんと終了させてあげましょう。
(…なんか最後に一瞬Errorが出て、not found云々っぽいですが、まあ…)

Nuke

Nuke に「-t」というオプションを付けて起動します。terminalのt。

例:
"C:\Program Files\Nuke9.0v8\Nuke9.0.exe" -t

…するとPythonインタープリタとして起動するっぽいですが、
無料体験版ではライセンス的に許可されていないようで、試せませんでした。
nuke_licError.png
…。
コマンドラインからのレンダリングも制限されているので、そりゃそうかー。です。
ということで、苦し紛れに普通にNuke上で云々してみました。


また、-tの後ろにPythonスクリプトファイルを与えると、それを実行してくれるようです。
"C:\Program Files\Nuke9.0v8\Nuke9.0.exe" -t path\to\your\script.py

モジュール

Nukeの機能を使うためのモジュールは「nuke」モジュールです。
nuke_script.png
それにしても、単にdir()した時点ですでにグローバルになんかいろいろ置かれてます。。。

公式ドキュメント:
https://www.thefoundry.co.uk/products/nuke/developers/90/pythondevguide/command_line.html

NUKE Python Developer's Guide v9.0v8 documentation :
http://docs.thefoundry.co.uk/nuke/90/pythondevguide/index.html

まとめ

Houdini、Nukeは、モジュールが最初から読み込まれている勢、
Maya、blenderは任意に読み込む勢、
でした。

また、
MayaとHoudiniはそのままPythonインタープリタが立ち上がるexeが用意されてます。
blenderとNukeはオプションつけることでインタープリタにもなるパターン。

sys.argvはHoudiniとblenderにはなんか入ってましたが、
言及してないMayaとNukeは[''](空っぽ)でした。

Mayaは、開発周りのドキュメントも日本語化に熱心です。
ドキュメントとして優秀か、誤訳はないか、というのとはまた別枠ですが、ありがたいです。

他のPython動くツールも対話モードがあるかみてみたいですね。

おまけ

3dsMax

Maxにも Python API が標準で載るようになりましたが、上に書いたような対話モードではなく起動したMax上で使えます。
あとは3dsmaxcmd.exeですかね。でも対話モードないのかな?あるのかな?基本的にはバッチレンダリング用途の人です。すみませんよく分かりません(笑

Executing Python scripts from the command line:
http://docs.autodesk.com/3DSMAX/16/ENU/3ds-Max-Python-API-Documentation/files/GUID-379E0B39-7F56-4764-88B6-B26090948800.htm

ConEmu

登録しておくと便利です
conemu.png

ConEmu プロジェクト日本語トップページ - OSDN:
https://osdn.jp/projects/conemu/