カテゴリー: 3ds max

3ds max, Programming

Py3dsMaxでmaxの特殊な引数への対応

max script で各種操作を行う際によく目にする、# 付きのパラメータ(named parameter? name type?)を Py3dsMax で扱うためのメモ。

本家のドキュメントの Type Conversion でも簡単には触れられているのですが、 “testing” という文字列を #testing という名前としての値に変換するには max script では


"testing" as name
#testing

とし、同様のことを Py3dsmax で行うには


>>> mxs.pyhelper.namify("testing")
#testing

とします。ここまでは OK。で、ここからが疑問で、関数への引数として渡すには? ということが書いてないです。どうすればいいんでしょう?

答えとしては単純で、namify された値をそのまま渡せばいけました。これに気づくまで、わざわざ max script のコードを生成してそれを実行してましたよ。。。。。

たとえば、確認ダイアログを出さないでシーンをリセットする場合。


noPrompt = mxs.pyhelper.namify('noPrompt')
mxs.resetMaxFile(noPrompt)

こんな感じです。メンドクサイですけど、しかたないですね、、、

3ds max, Programming

Py3dsMaxでKrakatoa PRTローダを操作する

Py3dsMax 関連でドハマりしたのでメモ。

Py3dsMax であるクラスに関連するオブジェクトを取得するのは、maxScript にある getClassInstances() 関数を使えば取得できます。が、どうやらモノによってはこれで取得したオブジェクトだと、親クラスで定義されているプロパティにアクセスできないようです。


from Py3dsMax import mxs 
for n in mxs.getClassInstances(mxs.KrakatoaPRTLoader): 
    print n.name

これは一見 OK そうですが、実はダメです。なーぜーーーーー!?

PRT Loader を選択した状態で selection から拾う、


from Py3dsMax import mxs 
for n in mxs.selection: 
    print n.name

これならイケるんですね。ぐぬぬぬ。何が違うのか全く不明です。

ちなみにどちらの例でも fileList のように KrakatoaPRTLoaderクラスで定義されているプロパティはアクセスできます。

でまあ、いろいろ試行錯誤した結果こんな感じに。ここで得られた objs なら、 show するなり何なりで通常のオブジェクトと同じように操作できます。


from Py3dsMax import mxs

objs = []
for n in mxs.getClassInstances(mxs.KrakatoaPRTLoader): 
    objs.append('selectMore ' + mxs.exprForMAXObject(n))

s = '''undo on
(
clearSelection()
%s
)''' % '\n'.join(objs)

mxs.execute(s)
objs = mxs.selection
mxs.execute('max undo')

for o in objs:
    print o.name

良い子はマネしちゃいけない、極悪非道なコードです。あまりにも酷すぎます。

全く、なんなんでしょうね、、、、、

3ds max, Programming

PyMax公開準備中

公開をしないとな~と思いつつ後回しにしてしまっていた PyMax を公開するための準備をはじめました。

まずは形からってことで、PyMax のサイトを立ち上げました。
コードとかバイナリとかドキュメントとか、準備ができ次第順次公開していく予定です。できれば今回のゴールデンウィーク中に一通りの準備を終えたいところです。

同時に、PyMax を一緒にメンテナンスしていただける方も絶賛募集中です!! JCGS としては既にガンガン使っているので使えることは間違いないですが、まだまだやらないといけないことがたくさんあるのです。きちんとメンテナンスをして情報発信をしていけば、日本国内だけではなく世界中のプロダクションで使用されること間違いなしの PyMax 、一緒にメンテナンスしませんか!!

3ds max, CG

CGWORLD.jp スクリプト兵法書~MAXScript編~ 第四回

CGWORLD.jp の max script 講座の第四回が更新されました。

前回に引き続き、一気にステップアップするための内容です。

今回は具体的に ParticleFlow とスクリプトを使用して映像を作るための手順の解説をしています。
ParticleFlow に関してはいろいろと問題もあって、環境によっては今回解説した内容だけではきちんと動かない可能性もあるので、もし問題や不明な点があればご連絡頂けると嬉しいです。

3ds max, コンピュータ

PyMax

3ds max のスクリプト言語としては maxScript があるのですが、これがまたどうにもこうにもアレな感じで、しかも max 以外では使うことができないので頑張って勉強をして覚えるのもためらってしまうという方が多いかと思います。というか、私もその一人です。

某所で maxScript の記事を書かせて頂いている身でこんなことを言うのは何なんですが、、、、ソレハサテオキ。

そんな maxScripter の希望の星として、max で Python が使える Py3dsMax というのが Blur Studio から公開されています。。。。。というか、正確には公開されていました。何故か2月以降公開が取りやめになってしまっていて、開発者は”もうすぐ公開するよ~”といいつつ音沙汰が無い状態です。

これではさすがに Py3dsMax ベースで仕事をすることはできないので、一念発起して自分で作ってしまいました。名づけて PyMax!!どうも某社のインハウス実装と同じ名前らしいという情報も小耳に挟んだものの、気にしない(笑。

見ての通り、Pythonスクリプトを文字列として渡してやると計算結果が maxScript のオブジェクト値として返ってきます。ぐれいと!!

今のところ __pymax__ という謎のパラメータに計算結果を代入してやらないと値の取得ができないのですが、これは回避することができそうです。

PyMaxは、公開したらどれくらいの方が開発に参加して頂けるのでしょうか?それによってはオープンソース化も考えています。一人で抱え込んでいても仕方ないですしね。興味のある方、ご連絡お待ちしています 🙂

3ds max, CG, Programming

Py3dsMax installation and demo

Blur Studio 作の Py3dsMax が更新されていて、本格的に使用できるようになっていました。以前も動作はしたのですが、UI 部分が動かなかったので MaxScript から python モジュールにスクリプトを文字列として渡すとかしないといけなかったんですね。

今回のアップデートは PyQt に対応し、Python スクリプトもエディタから直接実行できるようになっています。Great!!!!!!

インストールも至って簡単で、Py3dsMax のサイトから必要なインストーラをダウンロードしてインストール、そして 3ds max のプラグインパスにインストールした Py3dsMax のパスを通すだけ(Max2010は、標準添付のQtライブラリを改名して無効にする必要あり)。

ついでなのでダウンロードからインストール、サンプルプログラムの実行までをムービーにしてみました。画面再撮で見にくかったり、インストール途中でハマってもたついたりしますが、全体の雰囲気は掴めるのではないかと思います。



とりあえずいいから動いているのを見たい!! という方は、 07:00 あたりから再生してください。

3ds max, CG, Programming

Custom Plugin Manager for 3ds max

プラグイン開発者にとって、プラグインの動的 Load/Unload ができるかできないかは生産性に直結する問題です。

振り返ってみると Maya はさすがというか標準で対応していて、気軽にプラグインの更新ができるようになっています。

ところが、3ds max は遅延ロードには対応しているものの Unload ができません。これは正直アリエナイです(笑。こんな環境でプラグイン開発なんてやってたらmaxの再起動だけで1日が過ぎてしまいます。いや、そんなのに頼らずに一発で動くのを作ればいいじゃん?という声も聞こえてきそうですが、よっぽどの天才ならともかく、凡人の私には無理です(笑

ということで、プラグインマネージャからプラグインのアンロードができるように手を加えてみました。maxのモロモロの実装がアレな関係でMayaほどきちんと動かないですが、Unload→プラグイン更新→Load くらいはできます。

max2010/64bit 版のプラグインをアップロードしておくので、使いたい方は自己責任でご利用ください 😀

Unload 対応プラグインマネージャ for 3ds max 2010/64bit

3ds max, CG

subAnimName

プロパティの確認

show $polySurface46.modifiers[#pointcache]
(中略)
.playbackFrame (再生フレーム) : float
(中略)
false

subAnims の確認

getSubAnimNames  $polySurface46.modifiers[#pointcache]
#(#strength, #再生フレーム)

日本…語…だ…と!?

paramWire.connect $obj01.Custom_Attributes[#AnimationFrame] s.modifiers[#pointcache][#playbackFrame ] “AnimationFrame” →NG

paramWire.connect $obj01.Custom_Attributes[#AnimationFrame] s.modifiers[#pointcache][#’再生フレーム’] “AnimationFrame” →OK

Σ( ̄Д ̄;)

3ds max 死ねぇぇぇ!!

ホント、こういう中途半端なことは心底やめてほしいとおもう。こんなことするぐらいならローカライズなんかしないで、日本でも英語版のまま売ってくれたほうがマシ。

3ds max, CG, Mental ray

どうにもわからない

3ds max + Mental ray でボリュームレンダリングをする方法がわからなくて散々試行錯誤したのだけれども、やっぱりわからない(涙。

マテリアルを mental ray にして、Surface シェーダに Transparency をアサインして完全に透明にして、Volume に Mist とかを割り当てればボリュームレンダリングっぽい絵ができると思ったのに、なぜかできない。なぜだ。。。

YouTube でみつけた、こんな感じのことがしたいだけなんだけど…