基礎から始める3dsmax/Python(MaxPlus)プログラミング②

前回で3dsmaxでPythonを使う基本操作を学びました。
今回は次のステップに移ります。

MaxPlusは日本語だけでなく、英語でも解説の文献がほとんどありません。
頼りになるのはここです。
(「ページを表示できません」と出たら右上の「日本語」をクリックして「English」に変更してください)

ここに様々なMaxPlusのサンプルプログラムがあり、それとHelpで命令や処理の詳細を調べるのが良いかと思います。

例えば、「demoHelloWorld.py」をクリックすると、そのソースコードが表示されます。

右上に「English」ボタンがあり、ここを「日本語」に切り替えると・・・

残念ですが、日本語の解説はありません。ですが、「Bing翻訳」ボタンがあり、変換をしてくれます。

まず、前回もやりました、「スクリプト」→「MaxScriptリスナー」を起動します。そのメニューから「マクロレコーダー」を起動します。

以下のようにピンクの画面が上に現れます。

マクロレコーダーは3dsMaxの操作をすると、その際に使ったMaxScriptコマンドを表示する機能です。ここからプログラムを作成するためのヒントを得ることができます。

例えば、作成→ティーポットのボタンをクリックします。
するとレコーダーには、

と記録されます。これで半径=radius、セグメント=segsということが判ります。ドラッグしてティーポットを作ると、

radiusが29.5799で位置がpos:[x,y,z]で決まることが判ります。

これをDelキーで消して、Undoすると・・・

このように表示されます。選択=select、削除=delete、そして操作にはexecute.actionという番号が付いていて履歴を取っていることが判るでしょう。

さらにサンプルを見てみると・・・

MaxPlus.Point3という命令で座標を決めているということが判ります。
ここまでのまとめで、前回の最後のプログラムを改造します。

import MaxPlus
obj = MaxPlus.Factory.CreateGeomObject(MaxPlus.ClassIds.Teapot)
node = MaxPlus.Factory.CreateNode(obj)
obj.ParameterBlock.Radius.Value = 10.0
obj.ParameterBlock.segs.Value = 1
node.Position = MaxPlus.Point3(1,2,3)

これを実行します。

このように大きさが10、セグメント1、座標が(1,2,3)のティーポットをPythonで作成できました。
前回、ParameterBlock.Radius.Valueが大きさなら、マクロレコーダーでSegsがセグメントなのが判ったので応用して、ParameterBlock.segs.Valueにしただけです。
プログラムの流れですが、先ほどティーポットを作る手順のようにまず、MaxPlus.Factoryで作るものを決めて、そこからCreateNodeでオブジェクト生成するようです。

では次のサンプルです。

import MaxPlus
obj = MaxPlus.Factory.CreateGeomObject(MaxPlus.ClassIds.Cylinder)
obj.ParameterBlock.Radius.Value = 10.0
obj.ParameterBlock.Height.Value = 30.0
node = MaxPlus.Factory.CreateNode(obj)
mod = MaxPlus.Factory.CreateObjectModifier(MaxPlus.ClassIds.Bend)
mod.ParameterBlock.BendAngle.Value = 45.0
node.AddModifier(mod)

3dsMaxといえばモディファイアですよね。それをプログラムで作るサンプルです。
実行すると・・・

円柱を作って、Bendモディファイアで変形しています。
5行目までは、ティーポットとほぼ同じですから簡単ですね。
CreateGeomObject(MaxPlus.ClassIds.???)の???でプリミティブが決まるのでしょう。また、CreateObjectModifier(MaxPlus.ClassIds.???)でモディファイアを設定しています。
BendAngle.Valueが角度を決める変数です。

HELPでCylinderを検索してみましょう。

すると、HeightSegmentsという命令で高さセグメントを決めているようです。

さらにTwistファイアをかけて、マクロレコーダーを見ると・・・
 
命令は「Twist」のようです。
では、先ほどのプログラムを書き換えてみましょう。

import MaxPlus
obj = MaxPlus.Factory.CreateGeomObject(MaxPlus.ClassIds.Cylinder)
obj.ParameterBlock.Radius.Value = 10.0
obj.ParameterBlock.Height.Value = 30.0
obj.ParameterBlock.heightsegs.Value = 3.0
node = MaxPlus.Factory.CreateNode(obj)
mod = MaxPlus.Factory.CreateObjectModifier(MaxPlus.ClassIds.Bend)
mod.ParameterBlock.BendAngle.Value = 45.0
node.AddModifier(mod)
mod2 = MaxPlus.Factory.CreateObjectModifier(MaxPlus.ClassIds.Twist)
mod2.ParameterBlock.angle.Value = 45.0
node.AddModifier(mod2)

実行すると・・・

追加したのは5行目で高さのセグメントを3にして、さらに7,8,9行目をコピーして、10,11,12行にして、ClassIds.TwistにしてTwistモディファイアを追加しています。Helpで調べると「angle」で角度を決めることが判りました。

いかがでしょうか。3dsMaxでPythonもなかなか面白くなってきましたね。
では、また来週!

 

UnrealEngine4/Voxel Global Illumintaion (VXGI) をテスト②

先週に引き続きUnrealEngine4でVXGIを試してみます。
前回はデモを起動するだけでしたが、今回は機能をしっかり解説します。

まず、前回作ったUE4.19-VXGIを起動します。普通に新規作成から、お馴染みのThirdPresonのテンプレートでスターターコンテンツ付です。

以下のように空やライトなど全部消して、壁を移動して空間も狭くします。
もちろん真っ暗にして「非ライティング」で作業します。
右上の「モード」からポストプロセスボリュームを出します。

この空間に配置します。

以下のように、VXGIの項目が追加されています。各項目を「Enable」をONするだけで、今回は細かい設定は省略します。次回以降にお話ししましょう。

もともとのオブジェトは削除して、スターターコンテンツからイスと岩を置きます。ピンクの壁はただのCubeです。

モード→ライト→AreaLightをドラッグします。

上が表なので回転とスケールで以下のようにしましょう。

Playすると以下のようにエリアライトでソフトな影が出ます。ちゃんとGIしてますね。
マテリアルが設定できますが、実はこの色は関係ありません。

ライトカラーはその下に明るさと一緒にあります。

青いライトにしてみました。

もう1つエリアライトを出して背後に置きます。明るさを強くします。

色はオレンジに。マテリアルは白に戻しました。

このようにリムライトができます。ライトの板は自体は右の青いライトの色です。

右のピンクの壁のエミッシブ(自己照明)を強くします。

壁全体が光ったGIの表現ができます。ロボットの背中に映り込みも計算されています。

スターターコンテンツをご存知の方は以下のマテリアルに見覚えがあるかと思います。

これを床に貼ると・・・

このアニメーションの光もGI計算します。

表示メニューをクリックすると、VXGIのモードがあります。

まずVoxel計算の状態です。

前回の説明では良く解らなかったかと思いますが、各パーツをブロック化して、その6面の光だけ計算する、ということらしいです。
以下はEmmitance表示。光っているパーツです。

ぜひ動画でご覧ください。

次回はポストプロセスの設定などを細かく調べていきましょう。

 

文系デザイナーのためのmaya MEL/Python基礎の基礎 Step2-13

今日はちょっと番外編です。
Mel→Pythonコンバーター「Serpens」が公開されましたので、すごく気になったので、使ってみたいと思います。

以下の「UnPySide The Blog」様です。MITライセンスでMaya2016~18まで動作確認できているようです。
https://unpyside.wixsite.com/unpyside

Gumroadから0円でダウンロードできますが、ぜひ寄付をお願いします。
解凍したフォルダをドキュメントのMayaのバージョンの下にコピーします。
(下の図では右から左にコピー)

Mayaを起動して、スクリプトエディタからPythonコマンドを3行入力します。
これは「readme.txt」にあるのでコピー&ペーストします。

全部選択してシェルフに登録して起動します。
以下のようなウインドウが開きますので、左のウインドウにMELを入れてEnterキーで変換します。

右側をスクリプトエディタに貼りました。これは過去にやったWindowコマンドのHELPにあるサンプルです。

実行すると、ちゃんとエラーもなく動きます。素晴らしいです!

プログラムを見ると、この連載でやっている「PyMel」だけでなく「cmds」も併用しています。実はUI関連などcmdsを使う方が楽な場合もあります。両方使うと混乱するので、この連載ではPyMelだけにしています。
ぜひ使ってみてください。