ハリウッドVFX業界就職の手引き

ハリウッドVFX業界就職の手引き
鍋潤太郎氏による、海外のVFX業界で働くための手引き。お薦めです。

2014年9月27日土曜日

プログラムを書いてみる その1

木村でございます。危うく9月無更新になるところでしたが、なんとか滑り込みました。今回から数回に渡ってプログラミングに関するお話をしたいと思います。最近私、プログラムを書く仕事が増えて参りまして、そんな関係からか知り合いからPython(プログラミング言語の1つ)に関する質問も受けるようになりました。このブログではこれまで何回かに渡ってプロダクション・パイプラインのお話をして参りましたが、この手の仕事にはプログラミングのスキルが必須です。とはいえ小さなプロダクションですと専業のプログラマーやエンジニアを雇う余裕もないため、アーティストが自らTDの仕事も担おうというケースも出てくるかと思います。これ自体は悪い事ではありませんが、これまで絵作りをしてきた人達にとってプログラミングというのはかなり敷居の高い仕事とはいえるでしょう。そこで、ここではこれからパイプラインやプログラミングに関する勉強をしようというCG屋を対象に、どんなプログラミング言語をどうやって勉強すべきなのか、ということについてお話ししたいと思います。つまりプログラムの書き方そのものについてお教えしようという訳ではないのでご注意ください。そういった事には既にしかるべき教育を受けた方が解説された有益なサイトがいくつもありますので、後ほどそういったサイトに関してもご紹介したいと思います。

プログラミング言語の種類

まずどんなプログラミング言語を学ぶべきか、という事ですが、巷には大きく分けて2種類のプログラミング言語があります。まずこの辺のお話から入りましょう。

コンパイル系


ある種のプログラムは人間が書いたコードをコンパイラと呼ばれるプログラムを使って別の形式に変換するものがあります。このプロセスをコンパイルと呼び、C/C++、Pascal、FORTRANといった言語がそれにあたります。このタイプのプログラムは多くの場合、後にご説明するスクリプト系の言語よりも実行速度が速い、というメリットがあります。プログラムがバイナリと呼ばれる、コンピュータが最も解釈しやすい形式になるため、この形式のファイル自体がOS上で実行可能です。また、このタイプのプログラムは難読性が高い、という特徴も備えています。バイナリ形式は人間には判読がほとんど不可能なため(自分には判読できる、という方がいましたらお知らせください。一杯奢ります)、商用のソフトウェアなど、内部の知的財産を守りたい場合にはこのバイナリ形式にすると、完全ではありませんがプログラムの盗用などを防ぐのに役立ちます。

スクリプト系


スクリプト系は人間が書いたコードがそのまま実行されるタイプのプログラムで、プログラムを解釈して実行する別のプログラム(インタープリタ)が必要ことから、インタープリタ系言語、などと呼ばれる事もあります。このタイプの言語の代表格はPython、Java、Perl、Rubyなどがあり、アプリケーション固有の組み込み言語、CG業界で言いますとAutodeskのMayaの組み込み言語であるMELや、3ds MaxのMax Scriptなどもこれに含まれると言っていいでしょう。この手のプログラムは書いたら即座に実行できるという手軽さが何と言っても利点です。実行するプログラム自体がソースコードですので、動作の仕組みが知りたくなったらテキスト・エディタなどで開いてみれば一目瞭然ですから、プログラムの勉強もしやすいと言えるでしょう。その一方でコンパイル系のところで触れた難読性が低くなるため、商用ソフトウェアとして配布するには不向きです。また、速度が求められるようなエリアでもコンパイル系に比べると劣る、という欠点もあります。

ちなみに、話をわかりやすくするためプログラミング言語をコンパイル系とスクリプト系に分けましたが、実際にはスクリプト言語のような手軽さを持ちながら、コードを自動的にコンパイルしてプログラムを半実行形式に変換する言語も存在します(Java、Pythonなど)が、ここではあまり深く考えずに、おおざっぱな分類として捉えて下さい。ではこれらの言語のうちCG屋が学ぶべきなのはどれか、という事ですが、まずコンパイル系はC++がほぼ唯一の選択肢と言っていいでしょう。コンパイル系の言語はプラグインなどを書くのにほぼ必須の言語であり、私の知る限りユーザーにプラグインを書かせるためにSDK(開発キット)を提供しているCGのアプリケーションのほとんどがC++でこれを行う事を要求しています。最近は他言語で出来るものも出てきましたが、C++の重要性は依然として変わりません。

インタープリタ系では最初にも触れたPythonがほぼ業界のデファクト・スタンダードとなっています。Pythonはそのインタープリタをアプリケーション内に埋め込む事も可能であることから、AutodeskのMaya、Side EffectsのHoudini、The FoundryのNukeやMariなどがアプリケーション内で使うプログラミング言語としてPythonをサポートしており、特にMayaはプラグインの開発にもPythonを用いる事が出来るようになっています。

ではC++とPythonではどちらを先に学ぶべきでしょうか。私は教育者ではありませんので学術的な立場からどちらを選ぶべき、とは言えませんが、これからCGの制作現場でパイプラインを支えていこう、という考えでプログラミングを学ぶのであれば、Pythonをまず最初にとるべきでしょう。通常プロダクション・パイプラインを支えるために書かれるプログラムは1つ1つは規模が小さいが、それがたくさん集まってユーザーの仕事を支える、というものです。この手の仕事のほぼ半数以上はスクリプト系の言語で書かれたプログラムで十分事足りますし、実際多くのプロダクションがそうしています。

スクリプト系の言語には他にJavaやRubyといった優れたプログラミング言語がありますが、趣味でプログラミングを学ぶのでもない限り、これらの言語はお勧めしません。理由は簡単で、こうした言語はCG業界ではほとんど使われていないからです。重要なのは我々が頻繁に使うアプリケーションやツールをどうやって結びつけ、効率よく仕事をこなすか、という事にある訳ですから、どのプログラミング言語が優れているか、といった議論にわざわざ参加する必要はない、というのが私の考えです。ただし、今どんな言語が注目されており、自分たちの業界で使われそうか、という事に関しては常に目を光らせておいた方がいいでしょう。スクリプト系の言語は組み込みの機能がコンパイル系よりも豊富な分、トレンドが移ろいやすいものです。私が今から十ウン年前ハワイで映画を作っていた頃、パイプラインTDが学ぶべき言語はPerlと相場が決まっていました。今日、Perlをプロダクションの現場で使っているスタジオはどのくらいあるでしょう。少なくともハリウッド映画のVFXの現場では皆無に近いのではないかと思います。あまりにもPerlが使われなくなってしまったため、過去のレガシー・ツールをメンテナンスするためだけにPerlの使えるTDを探さなければならないはめに陥ったプロダクションもあるほどです。

Perlがこの業界で衰退した理由は私にははっきりわかりませんが、それはあまり重要ではありません。大事なのは、プログラミングに関するエッセンスを理解しておき、常に業界で使われている標準的な言語で仕事が出来るようにしておく、という事です。そして今のところ、それはPythonということになります。

次回は実際にPythonがどんな言語なのか、そしてこの業界におけるこの言語特有の問題についてお話ししたいと思います。




0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。