株式会社デジタル・フロンティア-Digital Frontier

Header

Main

  • TOP
  • DF TALK
  • whatIsから始めよう。デザイナー時代に経験した私のMEL学習法

whatIsから始めよう。デザイナー時代に経験した私のMEL学習法

2014/5/12

Tag: ,,,

みなさんこんにちは。
目の痒みや鼻水に悩まされ続けた花粉が漸く落ち着いてきてやっと調子が出てきた野澤です。
今年の花粉は去年の半分だから軽いとかいう噂を聞いていたのですが、そんなことなくて例年通りの苦しさでしたね。
テレビで花粉の出ない杉が発見されたというニュースを見たのですが、世界中の杉がそれに入れ替わる事を願ってやみません。

そんな事は、さておき2014年度がスタートしましたね。
弊社にもフレッシュな社員が15名入社しました。
私がDFに入ってキャリアをスタートさせたのは13年前ですのでずいぶん昔の事です。
フレッシュな若者の勢いに負けないようにこちらも頑張っていきたいと思います。

ところで、先日ボーンデジタルさん主催で「DFTALK SPECIAL LIVE2014」というセミナーをやらせていただきました。
おかげ様で多数の方に来て頂き、無事大役を勤めさせて頂くことが出来ました。
そのセミナーの中で来場者の方にDF TALKに関するアンケートを取らせて頂きました。
そちらの結果を少し紹介しつつ、アンケートの中にもあった
デザイナーからTDへ転向するにはどんな訓練をすればいいのか」を紹介させて頂こうと思います。

Q1.あなたが興味を持っている分野は以下の内どれですか?(複数可)

  • パイプライン                          x22
  • セットアップ                          x16
  • シミュレーション                       x16
  • アニメーション                        x13
  • モデリング                          x12
  • レンダリング                         x12
  • コンポジット                          x9
  • モーションキャプチャー                    x9
  • 群衆シミュレーション                     x7
  • エフェクト                           x5
  • ライティング                          x5
  • スクリプティング , 効率化 , ツール開発 , 補助ツール    x1

Q2. DFTALKに期待するものを以下の中から一つ選択してください

  • 作業効率改善につながるヒント                x16
  • 技術向上につながるヒント                   x8
  • 初心者向けテクニカルhowto                 x3
  • DFツールの紹介と配布                     x1
  • 各種ソフトの新機能レビュー                  x0
  • 作品のメイキング紹介                      x0
  • テクニカル以外の様々な情報                 x0

Q3. 記事の題材に取り上げてほしいソフト名を記入してください

  • Maya                    x21
  • 3dsmax                   x5
  • MotionBuilder                x6
  • AfterEffects                 x4
  • Houdini(Engine)               x2
  • Softimage                  x1
  • Deadline                  x1
  • Shotgun                   x1
  • Perforce                   x1
  • Unity                    x1
  • Katana                    x1
  • Blender                   x1
  • Nuke                     x1
  • RealFlow                   x1
  • Excel                    x1
  • Zbrush                    x1
  • Bifrost                   x1
  • Fabric Engine                x1

Q4. 記事のテーマに取り上げて欲しいものがあれば記入してください

  • 初心者からのNumpy
  • アセット管理、データ管理の方法について
  • トゥーンシェーディング
  • Mayaプラグイン
  • Pymel
  • 開発環境改善
  • プロジェクト&アセットマネジメント
  • 各種クロスシミュレーションの比較や使用事例など
  • ワークフローの効率化話や苦労話など
  • ローカルとワールドでどれだけ計算量が変わるか
  • アーティストからの意見をどの様にツールにフィードバックするか
  • 日本とアメリカの差をなくす為には、どうしたら良いか
  • Maya Python API
  • デザイナーからTDへ転向するにはどんな訓練をすればいいのか
  • 群集シミュレーションについて
  • パイプライン
  • ツールを作る上での心構え、テクニカルチーム内での分担作業や連携
  • パイプラインワークフロー
  • データ管理
  • OpenMayaやC++などでのプラグイン・ツール開発手法
  • 数学基礎(行列・ベクトル等)
  • 広く書いてほしい
  • モーションキャプチャーに関しての記事が読みたい
  • 仕事のワークフロー
  • 仕事内での工夫、気づいたこと
  • TDチーム創出するまでの苦労、運営してからの苦労
  • 苦労した点から得た気づき・学び・ノウハウ
  • 実践的なRiggingテクニックや等身の違うキャラクターへのリギング
  • フェイスリグ
  • 効率化とコミュニケーション
  • リギング
  • MAYAのリグに関して
  • 社内での技術共有の方法などをお聞きしたいです。
  • テクニカルなリグの組み立て方
  • mel等のプログラミングによるシミュレーション
  • motion builderを用いたスカートや髪の自然な揺れのアニメーション
  • 作ってよかったベスト3!
  • どうやって社長にテクニカルディレクターの必要性を認めさせるか

今回のセミナーに来ていただいた方が技術系の方が多かったせいもあり、
やはりテクニカル寄りに偏った結果が出ている様に思います。
ただ、最近DF TALKの内容が難しくなってしまっている傾向にあるので、
もう少しデザイナーの方よりの内容も増やしていきたいなと思っています。

デザイナーからTDへ転向するにはどんな訓練をすればいいのか

それでは、今回のアンケートの中にもあった「デザイナーからTDへ転向するにはどんな訓練をすればいいのか」についてお話しましょう。
僕は、コンピュータの経験は殆どない状態でCGスクールに入ったので、専門的な知識は全くありませんでした。
それがなぜ今こうしてテクニカルディレクターをしていられるか。
僕がDFに入社した時はゼネラリストのCGデザイナーでした。
モデリング、セットアップ、アニメーション、エフェクトなど何でもやっていました。
そんな中で、CG作業の中で気付くと何度も同じ作業を繰り返している事に、嫌気が差しました。
元々超めんどくさがりの性格なのでこれはもっと効率よく出来るはずだと常々思っていました。
当時、MELスクリプトというMayaのスクリプト言語やpluginを無料配布しているhighend3dというサイトがありました。
(現在もcreativeCrashと名を変えて存続しています。)
まだ自分で書くことは出来ないけども、人が作ったスクリプトをダウンロードして使えるかどうかを調べる事で何とか作業効率を上げられないかと考えました。

そこで、毎日必ずそのサイトにアクセスし、新しいスクリプトが投稿されていたら必ずダウンロードし、実行してみる所までを自分へのノルマとして課しました。
それは、休みの日でMayaが使えない時も自分の家でダウンロードし、ソースコードを眺めるという感じでとにかく1日も休まずに続けました。
それを続けていく内に、スクリプトの目的とそれを実行しているであろう箇所をソースコードの中から捜し当てられそうな気がしてきました。
また、人によって書き方の癖がある事や、意味は分からないけど何かをreturnしている事など何となくプログラムの作法の様なものが分かった気がしました。

そこで、今度はどんな物でもいいから一日に一つMELスクリプトを必ず書くという新しいノルマを自分に課しました。
初めて書いたスクリプトは、単純なrenamerか何かだったと思います。
僕のプログラム学習法は、人のコードをとにかくたくさん見て真似するという事です。
その時にすごく役に立ったのが、whatIsというコマンドです。
これをMayaの中で実行すると、そのコマンドはどのスクリプトの中で宣言されている物なのかを返してくれます。

まず、ScriptEditorのHistoryの中にあるEcho All Commandsという所にチェックを入れます。
(これを常にOnにしておくと無駄に多くの結果をprintしてしまうので必要な時だけOnにすることをお勧めします)

次に、スクリプトに反映したい作業を自分の手でやってみます。
Echo All CommandsをOnにした時とOffにした時で出てくる結果が違っていると思います。
例えば、panelMenuの中からshow > Noneを実行してみてください。
Echo All CommandsをOffにしていると何もprintされませんが、Onの時は以下をprintします。

updateShowMenu MayaWindow|formLayout1|viewPanes|modelPanel4|menu30 modelPanel4 "modelPanel4" "Playblast Display";
modelEditor -e -allObjects 0 modelPanel4;
updateShowMenu MayaWindow|formLayout1|viewPanes|modelPanel4|menu30|menuItem1138 modelPanel4 "modelPanel4" "Playblast Display";
updateModelPanelBar MayaWindow|formLayout1|viewPanes|modelPanel4|modelPanel4|modelPanel4;

これをみて中で何をしているのか推察します。
1行目でmenuを更新しているのかな?
2行目でメニューの項目を編集しているのかな?
3行目でmenuを更新しているのかな?
4行目でmodelPanelBarを更新しているのかな?

何となくこんな感じが分かるかと思います。
そして、mayaWindowから始まるやたらと長いのは何なんだ?と思います。
これは、恐らく変更したいmenu等の絶対的な名前なんじゃないか?
そんな感じで中で何をやっているのか想像がついた所で、登場するのがwhatIsコマンドです。
気になる言葉は、Mayaに「それ何?」と質問してみましょう。

whatIs updateShowMenu;

// Result: Mel procedure found in: E:/Program Files/Autodesk/Maya2014/scripts/others/createModelPanelMenu.mel

whatIs modelEditor;

// Result: Command //

whatIs updateModelPanelBar;

// Result: Mel procedure found in: E:/Program Files/Autodesk/Maya2014/scripts/others/updateModelPanelBar.mel //

こうして、4行の中で使っているコマンドを調べてみます。
それぞれで戻り値がありますが、
// Result: Mel procedure found in: E:/Program Files/Alias/Maya2014/scripts/others/createModelPanelMenu.mel
この様に、このmelファイルの中にあるよと教えてくれる場合と、
それは、Mayaに最初からあるCommandだよと教えてくれる場合があります。

Commandだよと返ってきたら、MayaのOnlineヘルプのテクニカルドキュメント> MELコマンド
に行ってそのコマンドを調べてみてください。
詳しい説明が日本語で書いてあります。
ファイルのありかを示している時は、そのファイルをテキストエディタで開いてみましょう。
目的のコマンドがどこで宣言されているのかを探すのがとっても簡単です。
こうして、自分が作りたいスクリプトは何を参考にして書けばいいかを探りながら、
プログラムの作法の勉強も一緒にしてしまうと上達が早いと思います。
それと、僕がMELの勉強をしていた当時は、こちらの本にお世話になりました。

プログラムを学ぶには、兎にも角にもコードに対する拒否反応を無くす事が第一だと思います。
それと、エラーメッセージを恐れない事も大事です(笑
あと、書いたスクリプトは自分だけで使わず周りの人にどんどん押しつけて使わせるといいと思います。
そうする事で羞恥心が薄れるのと同時に、周りの人がどんな物を求めているのかが分かると思います。

プログラムを勉強するのにPythonから始めた方がいいのか?とよく聞かれますが、僕はどちらでも大丈夫だと思います。
ですが、whatIsで返してくる物はmelなのでmelの書き方は覚えておいて損はないと思いますよ。
ただ、最近はPythonの参考書も多いし情報も多くなって来てるのでPythonから覚えるのもありかも知れませんが・・・。

こんな感じの積み重ねで数年経った後に、デザイナーよりも圧倒的にTDの方が現場に不足している事を感じ、こっちに転向する事を決心しました。
次回のエントリーでは、TDの考え方やどの様なツールがデザイナーに受け入れられやすいかなど紹介していく予定です。
皆さんの参考になれば幸いです。

最後に、おまけとしてさっきのPanelMenuのShow > None/Allを現在フォーカスしているViewに対して切り替えるMELスクリプトを紹介して締めたいと思います。

showAllNoneOnCurrentView(0)

でNoneに

showAllNoneOnCurrentView(1)

でAllにします。

global proc showAllNoneOnCurrentView(int $value)
{
    //現在フォーカスしているPanelを得る
    string $currentPanel = `getPanel -withFocus`;
    //上で得たPanelのタイプを調べる
    string $panelType = `getPanel -to $currentPanel`;
    $showStats = `modelEditor -q -allObjects $currentPanel`;
    //PanelTypeがmodelPanelであれば下記を実行する。
    if ($panelType ==  "modelPanel") 
    {
        modelEditor -e -allObjects $value $currentPanel;
    }
}

showAllNoneOnCurrentView(1)

最後までお付き合い頂きありがとうございました。
※免責事項※
本記事内で公開している全ての手法の有用性、安全性について、当方は一切の保証を与えるものではありません。
これらの手法を使用したことによって引き起こる直接的、間接的な損害に対し、当方は一切責任を負うものではありません。
自己責任でご活用ください

Pocket

コメント

コメントはありません

コメントフォーム

コメントは承認制ですので、即時に反映されません。ご了承ください。

*