日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2009年5月15日金曜日

Melスクリプト習得ステップ (2)

能力レベルを分類するだけでは、何の使い道もない。

それぞれのレベルでは、何に重点を置いて勉強するのが習得への近道なのか?
それがわかって初めてレベル分けした事が意味を持ってくる。

--------------------
<全レベル共通事項>

自然言語の習得においては、ボキャブラリを増やすことはどのレベルにおいてもとても重要だが、
これはMelスクリプトにも言える。

Melにおいては、習得したコマンドやフラグの数、アルゴリズムの数を増やすことがそれに当たる。

Melにおけるボキャブラリを増やすには、まずそれまで知らなかったコマンドに出会うきっかけが必要な事もある。
知らなかったコマンドに出会う、きっかけを作る方法は以下のような物がある。
1)ヘルプを読む。
2)入門書やビデオを見る。
3)チュートリアルを見る。
4)他人のスクリプトを読む
5)その他

Melスクリプトの勉強に行き詰まったときや、何をしていいかわからないならこれが回答だ。

上記のいずれかを行って、そこで見つけたコマンドを詳しくヘルプで調べたり、使ってみると良い。
それでボキャブラリが増えることになる。
それは、将来そのコマンドを経験したというだけで、行き詰まった状況を解決するカギになることがある。


またすべてのコマンドをフラグまで、正確に記憶する必要はない、
それが出来る人は、止めはしないが、出来ないからと言って自分はMelに向いていないと思う必要はない。

基本的なことであれば、頻繁に使うので、同じ文法エラーを何度も直しているうちに、繰り返し間違うことが嫌になり、同じ間違いをしないように注意するようになり、覚えてしまう。

それにヘルプを見れば、そこに書いてある。

いついかなる環境でもヘルプが読める状況にしておく。
これはもう一つの重要事項だが、ヘルプを見る習慣は付けた方がよい。
最初はわからなくても、何度も読む努力を続け、そこに書いてあることが少しづつでも理解できるようになることがとても大切だ。


--------------------
<注意点>
そのレベルにおける学習方法にこだわらず、自分の興味を最優先することのほうが、人によってはモチベーションを維持するのに役に立つこともあるということを付け加えておきたい。

レベル4、5においては自分がそのレベルに達していないので学習において何が効果的なのかは推測なので、(おそらく)と書いてある。

もうひとつ付け加えておくが、これはあくまで自分のために現在の知識と経験でまとめた物であり、自分にとって効果的だったと思えることは、書いておいたが、全ての人に効果があるとは限らない。


--------------------
<各レベルの詳細とその段階での学習姿勢>

0)コマンドを単体でも使えない。
まったくの初心者でどのようなコマンドがあるのかもしらない。

もしくは、スクリプトエディターなどからコマンドを入力してもエラーになってしまうレベル。
そのコマンドを正確に知らないか、ミスタイプ。
なぜエラーになるのかわからず、ストレス大。
もし自分のレベルをあげたいなら、根気よくヘルプとにらめっこしてミスタイプに気をつけるか、
よく知っている人に助けてもらうとよい。

スクリプトエディターでMayaのGUIを操作したときにどのようなコマンドが実行されるのかを見たり、
それをシェルフに登録して再利用するのも勉強になる。

この段階では、コマンドを正確に知ることやミスタイプしないようにこだわらないほうがいいかも。
スクリプティングを続けていれば少しづつコマンドを覚え、ミスタイプもしなくなる。

それよりも、より多くのコマンドとその動作を確認し、自分でコマンドを使ってみることのほうが有益。
変数や条件文といったことにはまだ手を出さない方が良いかもしれない。

とにかく、エラーにめげず、数多くのコマンドを試してみること。

一つでもいいので、エラー無くコマンドを実行できるようになることがこの段階での大きな自信になる。

フロー制御や、変数には意識を払わないこと。
単体のコマンドを使ってみて、その動作を確認し、Mayaをコマンドで動かしたという経験を重視すること。
それがモチベーションを高め、自信につながってくる。



--------------------
1)コマンドを単体なら使える。
いくつかのコマンドを知っている。
知っているコマンドについては、何も見ないでエラー無く入力できる。
フラグを使うこともあるが、変数や条件文などは使えない。

たまに必要な情報をヘルプで見ることもある。

そろそろより上位の勉強の準備が整いつつある段階。

ヘルプをよく読んで知識の幅を広げること。
試したことのないコマンドのフラグを試してみたりすることも有益。

変数について(配列やベクトルではない)は勉強を初めても良いかもしれない。

フロー制御や、変数には意識を払わないこと。
それらを使えるレベルにはまだない。

ボキャブラリーを増やし、単体のコマンドを使う経験を増やすことを重視する。

スクリプトエディターでMayaの動作を確認し、それらをシェルフに登録し、自分の作業に使えるように加工するのもよい。

一行だけではなく、複数のコマンドをならべて実行できるように頑張ってみるといい。

単体のコマンドを並べただけではあまり多くのことは出来ないことに気がついたらもう、次のレベルだ。



--------------------
2)コマンドを並べて、簡単なスクリプトを作れる
単体のコマンドを順番に実行することができるスクリプトを作れる。
この段階の初期では、変数やフロー制御は使えない。

知っているコマンドの数も増えている。

スクリプトエディターでMayaの動作を確認したり
一部を変更してシェルフに登録するのは、勉強になるだろう。

たくさんのコマンドを見たり、自分で試してみることは下のレベルと同じで、継続した方がよい。

変数の勉強を始めるのがよい。
ただし混乱を避けるために、配列やベクトルは、もう少し後のほうがよい。

次は、配列やベクトルの勉強ではない。

比較演算子を勉強する。
論理演算子は後回しでも良い(と思う...)。
まず、プログラミングにおける比較演算子の重要性と、その働きを理解することが大切。
個々の演算子働きを記憶することは理解ではない。
プログラミングにおける比較演算子の位置づけと、その重要性を「理」「解」「す」「る」ことが何倍も重要。
理解できたら、その次に個々の比較演算子の働きを勉強すればよい。


次にやることはif文、比較演算子の理解が不可欠、変数も理解しておいた方がよい。
自分はfor文から始めたのだが、おそらくif文から始めた方が楽。
勉強すると言うほどやることもなく。
比較演算子を理解していれば、すぐに使えるようになる。
このときも、変数を意識して使うようにすれば練習になる。

ヘルプにはif-elsなども書かれているが、余計なことはこの段階で勉強すると混乱の元になるので手を出さない方がよい。
「?:演算子」などは、使うことがあまりない。もっと上級レベルでも使わないかもしれない。

次にfor文。これにも比較演算子と変数の理解が必要。
類似したものにwhile文や、for-inやdo..whileなどがあるが、それらはもう少し上のレベルになってから。
今は混乱を避けるために手をださないこと。

for文は難しくはないが、エラー無く使えるようになるまでは繰り返し練習すること。

基本的なfor ($i=0; $i > 5; $i=$i+1) { } といった形式が間違いなく使えるようにすることが第一。

それができるようになったら、「初期値、条件、再設定式」の3つをいろいろな状況で使えるように練習するのも、効果的。
そういったドリルのような物があると便利が良いのだが...。


配列やベクトルは、基本的なfor文が終わってから、使い始める方が混乱は少ないが絶対ダメとは言わない。
コマンドによっては、どうしても必要な事があるので、そのときは一時的に使用することも必要だろう。

一時的に使用しただけなら、for文を習得した後に必ず「変数」と「配列」、「ベクトル」の違いについてじっくり腰をすえて考え、明確に理解した方がよい。

上記を終えたら、すでに次のレベルになっている。

もしこのステップで躓くようなら、上記の学習のどこかで理解していないことがある可能性が大。
変数の概念を勉強し直したり、ひょっとしたらコンピュータの歴史とか、そういったことを勉強した方がいいかもしれない。
インターネットにはそういった読み物がたくさんある。
たまには脱線して、コンピュータがどういったものかを一歩踏み込んで調べてみるのもの良いだろう。

理屈でわかっているが、どこかピンときていないという状況かもしれない。
もしくは、構文に振り回され、プログラミングのおもしろさを味わえないのかもしれない。

どうしてもおもしろさよりも苦しさを味わっていて、Melの学習を続けるのが嫌になってきているなら、
モチベーションを高めるために、プログラミングの楽しさを経験したほうがよいかもしれない。

自分の場合は、Melの学習を止めて、日本語プログラミング言語をやってみることで、プログラミングのt楽しさを少しだが味わうことができた。

プログラミングを日本語で行うのは奇妙な感じがするが、プログラミングの楽しさを手軽に感じる事ができる。プログラミングとはこんなにも簡単なことだったのかと感じさせられた。

構文も簡単なので、それほど振り回されずに習えるので、アルゴリズムを考えること(これがプログラミングの楽しさ。)に集中できる。

また他の言語にも共通する基本的な事柄、変数や、制御文などは存在する。しかし英語とは全く異なる日本語での表記なので、後でMelに戻るときにも混乱は少ない。
その概念だけを理解するのに役に立つ。

本格的にやらなくても楽しさを感じるためにチュートリアルをやってみるだけでもよい。
何より、簡単にプログラミングできる経験は、自分がプログラミング言語には向いていないという苦手意識を少しでも克服するのに役に立つだろう。

試してみたことがあるのはTTSneoだが、
他にプロデルなでしこひまわりといった日本語プログラミング言語があるので、チュートリアルを見て自分に合っている物を選べばよい。




--------------------
3)コマンド以外のスクリプトに必要な要素(変数、フロー制御など)を使ってスクリプトを作れる。

ただのコマンドの羅列から、スクリプティングと呼べるものができるようになったレベル。
スクリプティングで言えば初級レベルから中級レベル初期までの間。

まだ、うまくいかずストレスを感じることも多いがスクリプティングのおもしろさを感じることも増えてくる。
簡単な物であれば、より実践的なスクリプトも作れるようになる。

この段階は、実作業における適用・応用を考え続けるようにする。
スクリプトに必要な知識を習得するだけでなく、自分の注意力や思考力を鍛えることにも意識をむけていく必要がある。

勉強するときは、たえず実作業で、どう役立てるかを考えること。
●作業のどの部分をスクリプトで簡単にできるか?
●この作業をスクリプトで行うとすればどうすれば実現できるか?
●こういった表現をするにはどうすればよいのか?
●そのためにはどんなコマンドが使えるのか?
●今の自分のレベルでは出来ないスクリプトでも、その一部なら出来るかもしれない。

これは一例だが、こういったことを絶えず考えるようにするのは良い練習になる。

より多くのコマンドの存在を知り、それを自分のスクリプトの中で使えるようになること。
アルゴリズムの習得を意識する。

そのためには他人のスクリプトを解析すること。
ヘルプで個々のコマンドの働きを正確に理解すること。

同じ結果を出せるスクリプトを異なるアルゴリズムで作ってみるのも練習になる。

if-else, for-in, while, switch など、ここまでで勉強していないことで将来役に立ちそうな物を習得するようにする。
便利でも、あまり一般的に使用されないコマンドは、使わない方がいいだろう。
ただ、他の人が使っている場合、そのスクリプトを解読するのに役立つので知っておくことはプラスにはなる。

このレベルになれば、ヘルプを読むのにもなれたころだし未知のコマンドに突き当たっても、臆することなく、なんとかそれを解読することができるようになったころ。
ヘルプを一通り読んだことがなければ、最初から最後まで通して読んでおくのもよいだろう。




--------------------
4)サブルーチン的な要素をもった複雑なフローを持つスクリプトを作れる。

アルゴリズムを理解し、何かを実現するために整然と考える事が出来るようになったレベル。
Melを整理して記述することができる。

オンラインヘルプの、Melスクリプトの項目はほとんどできるようになっていると思われる。
テクニカルドキュメントの項目のMelスクリプトでコマンドを一つ一つ勉強し直していくとよいかもしれない。


(おそらく)
より多くのアルゴリズムや表現方法を習得するため、自分が感銘を受けたスクリプトなど、
他人の書いたスクリプトを解析することが役に立つだろう。

Pythonなど他の言語も習い始めると、Melと他言語の違いがよくわかり、利点、欠点がはっきりしてくる。
またPythonはMaya内でも使えるので、次の言語として勉強することはプラスになる。




--------------------
5)一つのことに対して、複数のアルゴリズムを知っており、実践に役立てることができる。
実践に即したスクリプトが書ける段階。
その状況に応じて適切なアルゴリズムを使い、より効果的で早くスクリプトが書けるようになる。
Melで出来ること出来ないことを知っている。
またMelで行うよりもC言語などの他の言語のほうが効果的に目的を達成できることなどを識別できる。


(おそらく)
この段階では、より高度なプログラミングの知識を勉強することが効果的ではないかと思う。
Melという範疇にとらわれず、3DCGという幅広い領域での考え方、プログラミングを勉強するといい。

C言語などAPIの領域に踏み込むことができる言語を学習することで、それは達成出来るだろう。

これにより、より柔軟な考え方ができるようになり、将来的にC言語を習得すれば
プラグインを作って、Melを拡張することもできるようになる。
必要な部品は自分で調達出来るレベルだ。

 

0 件のコメント:

コメントを投稿