cg 勉強でうちのBlogが引っかかってるようなので

私が思う 働く前に、勉強しておいたほうがいいことをちょろっと書いてみます。

【CG 勉強】なのに「どこが?」と思うかもしれませんけど(ソースは学生時代の私)
仕事としてCGをやる上ではいずれどこかでぶつかる(できないと、大きな壁になる)ものだと思うので参考にしてみてください。

続きを読む

mayaPython __file__ とsys.argv[0]

CGのテクニカル屋志望日記っぽく、Pythonで書いてて気になったことを自分のメモをかねて記事UP

pythonで、自分自身のパスを書く場合、

__file__
または
sys.argv[0]
で、書くことができます(同じ内容が帰ってくる)が、MayaPythonの場合__file__は、ファイル自身のパスを。sys.arvg[0]は、Mayaの maya.exeのパスを返してくる という違いがあるようです。やや注意が必要。

あと、この__file__の『自分自身』のパスを というのが、実体なのか実行している.pyなのか気になったので確認したところ、
パッケージ内の関数に__file__があれば、そのパッケージの.pyのフルパス
パッケージ内のクラスの中、クラスのメンバ関数内に__file__があれば、そのクラスの.pyのフルパス
が帰ってきます。基本 __file__ が書かれている .py のパスが呼び出されるようです。

あくまでも、自分自身(.pyファイルの)パスが帰ってくるため、MayaのScriptEditorで print __file__ をやっても、「そんなもんねーよ!」と怒られます。

そんなこんなでPythonとMayaPythonで帰ってくるものが違うので気をつけましょう。

Maya Python環境をつくろう

MayaでのスクリプトはMel一択だった私ですが、Melの制限 とくに変数の自由度の無さと、関数の戻り値とかの制限の多さに いい加減嫌になってきたので、完全Python化に乗り出しました。

といっても、自社コマンドがMelだと 色々とすり合わせが出来なくて歯がゆい事になってたので
もう、いっそのこと1からPythonで作り直したほうがよくね?
にいたり、1日2時間ぐらいづつかけて ちまちまコマンド書き換えしていくことにしました。
本当は1ヶ月ぐらいそれに集中したいところではありますが、プロダクションワークやら他の書き仕事もあり 時間ができたときにまとめてやる なんぞ、永遠に来ないのはアタリマエのこと。
一応、そのまま翻訳して 一対一でコマンドつくろうかとも思ったのですが、それだとあまり意味が無いので
再設計して、整理して使えるように整備する なおかつ、プログラムにとっつきにくいひとでも手が出せるように整備する…までやろうと思います。
もともと、人が作ったものをただ使っていることに 非常にもどかしさとむず痒さがあったので それをなんとかするいいきっかけなのかなと思います。
人のつくったフレームを 自分なりに再構築するっていうのは、武者修行としては最適です。
終わる頃には、私自身のスキルの階段を 何個か登れるんじゃないかなぁとおもいますが 果たしてどうなるのやら。

珍しく、サイトのPython記事にまとめを書いてみました。
何番煎じだよwwwwな記事ですいません。はい。
http://flame-blaze.net/reincarnation/MELandPython/pythonMemo/pg204.html

AE Scriptを触ってみた

ネットワークドライブでAE作業をすると死ぬほど重くて作業にならないので、バックアップアプリでローカルにコピーして フッテージの読み先をスクリプトで切り替えるようにしてみました。

JavaScript自体はあまり触ったことはないのですが、文法的にはPHPとかPythonとそう違いはなさそうなので何とかなりそう。
が、唯一手間取ったのが、ファイルパスのパスを変えるときのドライブレターの記述方法が
プロジェクトの一覧のファイルパスではS:~のような表示方法になっているものの
スクリプト上でのパスは /s/~ のようになっている事。
いくら正規表現で ^S:/ とか ^S: とか S:/ とか S: とかやっても通らなくてかなり調べるのに時間を食ってしまいました。

あとそれに合わせて Launch Padを導入。
ダウンロードさきは ここ

これでだいぶAEの作業効率も上がりそうです。

やっぱり私の場合、AEの作業をするにしてもスクリプト利用は必須ですね。

プログラムのお約束事

プログラムの良い書き方、悪い書き方を例を踏まえつついろいろ教えてもらったので、自分なりにまとめてみます。

その壱
コードを直すときに、同じ内容のものを複数直さなければいけないコードは書くべからず
その弐
コンパイラが見つけられないようなエラーを起こすようなコードは書くべからず
その参
データ構造は完結に見やすく書くべし
その四
パラメーターが増減する可能性がある部分は、配列で定義すべし
その五
無駄な変数定義はするべからず
その六
マクロと関数を利用して、極力同じ処理をべた書きしないように書くべし

プログラムを書いて、何とか動いた!ヤッター レベルの私にはまだまだ気の遠くなるぐらい覚えること 試してみることがあるわけですが、
最低限、 『人が見てわかりやすいソースコード』 『無駄のない構造』 に気をつけて
アルゴリズムの中のバグではないところでの 無駄なバグを引き起こさないコードの書き方ができるように一日も早くならないとなと思いました。

PythonやらMelのようなスクリプト言語だと、メモリ管理やら構造やらを強く意識しなくてもなんとかなってしまうのですが、C++やらを使うと 同じ意識だと手ひどいやけどを負ってしまいそうです。
本来ならPythonとかでも意識しないといけないことなのですけどね。

まだまだ勉強することが山済み…がんばります。

mayaのPython勉強

仕事でまたしばらくセットアップやらをやることになったので、せっかくだから作業につかう補助スクリプトをパイソンで書いてみようと本体の構造考えつつ書き始めてみました。

とりあえず、大雑把なことは前にも書いた気がするのだけどいくつかメモ書き。
1 PythonのMayaモジュールインポート
import maya.cmds as maya
maya.cmds.ls とか全部打つのは長いので変更。
from maya.cmds as * とかでもいいのかなぁ どうなんだろ。

2 melのオプションは
maya.ls(sl=True,fl=True)
のように、
=True で設定する。

あたりを気にしつつ書けばだいたいできたけど、どうもクセが強くてなれるまでに時間がかかりそう。
pythonの文法自体は問題にはならないんだけどね。

そのへんのクセをつかんでしまうと、もともとメインスクリプトとして利用しているだけあって、melよりはるかに便利。

あるていどMayaPythonになれたら、今度はビルダーとかMaxPythonとか手を出してみよう
その前にAdobeのAEのJavaScriptだろうけど。