gridの状態を保存する
■背景などの大きなシーンの作成と、細かいオブジェクトの作成をやっていると
グリッドを切り替えることが多くなります(私は・・・)。
で、毎回オプションを設定しなくていいように、今のgrid設定を保存するMELがほしかったのです。
デフォルトだとScriptEditorにMayaはコマンドを返してくれないのでオプションを -q しました。
↓スクリプト↓
//saveGridOptionToShelf.mel
//command : saveGridOptionToShelf
global proc saveGridOptionToShelf()
{
string $flags[10] = {"-da","-dab","-ddl","-dgl","-dol","-dpl","-olp","-plp","-s","-sp"};
string $flag;
string $values[10];
int $i = 0;
for($flag in $flags)
{
$values[$i] = `grid -q $flag`;
$i++;
};
string $script = ("grid " +
$flags[0] + " " + $values[0] +
$flags[1] + " " + $values[1] +
$flags[2] + " " + $values[2] +
$flags[3] + " " + $values[3] +
$flags[4] + " " + $values[4] +
$flags[5] + " " + $values[5] +
$flags[6] + " " + $values[6] +
$flags[7] + " " + $values[7] +
$flags[8] + " " + $values[8] +
$flags[9] + " " + $values[9] + ";");
scriptToShelf ("grid", $script, 1);
//print $script; //上の行をコメントにして、この行を使えば ScriptEditor に出力するだけにもできる
}アニメータ AndrewGordon のBLOG:SplineDoctors
今年のMasterClassで講師をやっていた ドクター・ゴードンのブログですが、内容がすごく面白い!
ブロッキングどうやってる?とか、ポリッシュってどうよ?とか、アニメーションをつけるにあたっての哲学が書かれていたりします。
私はつい最近までブロッキングもポリッシュも知らずに、なんとなーくしかやっていなかったけど、いざ言葉として認識できると、なんかこう目標が明確になるような気がしてそれだけでアニメーションが上手くなったような気に・・・(これは本当にただの気のせいなんだけど・・・)
英語だし記事もたくさんあるけど、なんとか全部読みたい。。
時間がかかりそうですが、、、
podCast用の有名アニメーターへのインタビューなどもあります。ゴードンがインタビューしている。
中にはDr.エド・カットマル(Pixarの生みの親だ!)やブラッドバードなどへのインタビューもあったり、Pixar好き、というかCGアニメーターとしてはかなり興味深いブログです。
render codec を毎回入力しなくて良いスクリプト
※今のところMobu2009じゃないと機能しません・・・。
■File->Render でムービーを書き出す
このときMotionBuilderではなぜか圧縮方式を毎回聞いてくる・・・。
たいていの場合一度圧縮形式を決めたら、それを変更することはないので、
これは面倒くさい。
なんとか以前の設定を使ってレンダリングできないものかと、pythonスクリプトを調べてみると・・・
■codecExamples.py
サンプルファイルに codecExamples.py を発見。
中を覗くと、どうやら一度目はcodecの設定画面が出るが、二度目以降は以前の設定でレンダーするというもの。
これだ!
ただ、AVI形式が指定される点、一度は必ず設定を聞かれる点が不満。
二度目以降は常に同じ設定でレンダーをしてくれる仕様にしたい。
というわけで、ちょこっと書き換えました。
ボタンだけだけど、ついでにUIも作ってみた。
■ポイント
mgr = FBVideoCodecManager()
mgr.VideoCodecMode = FBVideoCodecMode.FBVideoCodecStored
ポイントは FBVideoCodecStored というオプション。以前レンダーをした時に記憶した設定を利用するようになる。
FBVideoCodecAsk というオプションもあり、こちらは毎回 codec を聞いてくる。
■codecStoredRender.py
レンダー設定はオリジナルUIで行い、レンダーのみ作ったUIのボタンで行うという、プログラムとしてはスマートじゃない感じになったけど、売り物でもないし、、、、いいか。
以下スクリプト↓
from pyfbsdk import *
from pyfbsdk_additions import *
import sys
####################
## Main Scripts ##
####################
def renderUseSameSetting(control, event):
try:
mgr = FBVideoCodecManager()
lApp = FBApplication()
if (control.Caption == "Render Movie"):
print "Render video with previous settings."
mgr.VideoCodecMode = FBVideoCodecMode.FBVideoCodecStored
lOptions = FBVideoGrabber().GetOptions()
lApp.FileRender( lOptions )
else:
print "Render video with new settings."
mgr.VideoCodecMode = FBVideoCodecMode.FBVideoCodecAsk
except Exception, e:
FBMessageBox( "ERROR", "Unknown error encountered. Aborting! " + str(e), "OK", None, None )
#################
## Create UI ##
#################
def PopulateLayout(mainLyt):
x = FBAddRegionParam(5,FBAttachType.kFBAttachLeft,"")
y = FBAddRegionParam(0,FBAttachType.kFBAttachTop,"")
w = FBAddRegionParam(-5,FBAttachType.kFBAttachRight,"")
h = FBAddRegionParam(-5,FBAttachType.kFBAttachBottom,"")
mainLyt.AddRegion("main","main", x, y, w, h)
lyt = VBoxLayout()
mainLyt.SetControl("main",lyt)
label = FBLabel()
label.Caption = "- Use [File>Render] for set options."
lyt.Add(label,15)
b = FBButton()
b.Caption = "Render Movie"
b.Justify = FBTextJustify.kFBTextJustifyCenter
lyt.AddRelative(b)
b.OnClick.Add(renderUseSameSetting)
def CreateTool():
# Tool creation will serve as the hub for all other controls
t = CreateUniqueTool("Render +CodecStoring")
t.StartSizeX = 200
t.StartSizeY = 100
PopulateLayout(t)
ShowTool(t)
CreateTool()
#END OF SCRIPT#
<追記>
HTMLの <pre> タグを覚えました。
プログラムのインデントなどがこれで見やすくなったかな。
特に python ではインデントでブロック管理するみたいで、pre が無いとコピペしてもエラーが出てしまいます。
だいたい必要なものって用意されているものですね。
