弊社アニメーション室におけるAE活用術 ~スクリプトのおまけもあるよ~
2014/10/13
Tag: AfterEffects,javascript,script,workflow
ごあいさつ C:。ミ
はじめましてorおひさしぶりです。TD班のタコこと吉岡です。
主にadobe製品周りのツール作成や、最近はnukeのツール作成などを行なっています。
今回は前回のFXチームリーダー小宮のツール紹介に続いて
実際にアニメーション室で使用してる内製AEツールの紹介を行ないたいと思います。
えー、アニメーターなのにAE?コンポジットでもやるの?とお思いでしょうが読んで頂けると幸いです。
アニメーション室のワークフローで使用されてるAEツールについて。
現在アニメーション室で使用されてるAEツールはaepの構築作業に使われているものがメインとなります。
ここで言われているaepの構築とは、アニメーターさんたちがアニマティクス作業を終え、
チェックに出す際に作業者名や日付、フレーム数などが記述されたmovを出力する際に使用します。
また、アニマティクス作業時に作成されたaepはアニメーション作業でも使用され、
アニメーション作業が終了すると今度はエフェクトを乗せる為にFX室に渡されるということもあり
出来ることならヒューマンエラーを避けたいですよね、ということでスクリプトで半自動化を行なっています。
それにAEの構築作業は作業のフローとして現在必要な事とは言え、本来のアニメーターの仕事ではないので
なるべく触れる時間を少なくしたいというのもあります。
実際使用されてるツール
アニメーション室用AEツール群について。
実際にアニメーション室で使用されてるAEツールがこちらです。
手作業で行なうにはめんどくさい作業を自動で行なうツール群です。
実際の動作と説明を動画にまとめてみたのでご覧ください。
ツールリリース時に実際あったトラブルシュートたち
例外の予測(ここ直して欲しいって来るに決まってるよなアー(‘A`) っていうやつ)
「すいませーん、動かないんですけどー」ということはありますよね(‘A`)ウゥ
そういう場合、たいてい私の予想したフローとはちょっと違うぞって使われ方をしてる事が多々あります、
いやまぁ私の気が利かないだけなんですが、今まであった例外を書いておきます。
作成の際にここら辺に留意して丁寧に作成しておくと他のツールに流用できたりしてよいかと思います。
命名規則の例外
参考にしてくださいって頂いたaepの名前がprojectName_S001_v01.aepだったが
動かないと相談を受けて見に行ったaepの名前がprojectName_S001A_v01.aepだったり
長尺のシーンのためprojectName_S001C001-C025_v01.aepとprojectName_S001C026-035_v01.aepと分割してaepを作成していたとか。
シーン名取得の際に正規表現使うとかしとくと良かったのにね。
それ前のプロジェクトのヤツやんけ
動かないよといわれて見に行ったら前のプロジェクトで使用していたツールだったり。
プロジェクトごとに異なるであろう、fpsとか保存先のディレクトリとかフォーマットとか
最初に変数群で定義してしまって対応しやすくするとか
プロジェクトごとで変わる所をまとめて$.evalFile()使用して外部参照する形にするとかすればよかったのにね。
とは言え前回のプロジェクトで使用してもらってたやつを今回も使ってもらえるのは嬉しいですね。
ちゃんと不満がないかヒアリングに伺おう
トラブルではないのだけど、基本アーティストは忙しいので自分から不満を伝えてくれることは稀なので
自分から聞きに行かないと順調に動いているのかエラー吐いて放置されてるのか分からないものと思ったほう良いですね。
作成したツールが全く使用されてないのは泣けます。しかも自分側のエラーの問題だったり。
ぐぅの音も出ないですね。そりゃ動かないなら使わないです。
【おまけ】adobe製品スクリプト作成の際に覚えておくと便利なアレコレ。
知ってる人からしてみたら些細なことでも知らない人がいるのかもしれないし書いておこう、そうしよう。
それが自分のblogの二番煎じのネタでも書いておこう
プロパティメソッド一覧取得に便利なのとか
これ、プロパティ&メソッド一覧取得に便利です。
一番先頭の変数名Objにプロパティ&メソッドを一覧取得したいオブジェクト名を入れて実行してみてください。
ExtendScriptToolkit内のjavascriptコンソール内にプロパティメソッド一覧が表示されるかと思います。
また、指定されたオブジェクトのクラス名も表示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | var Obj = app.project.activeItem //Get properties $.writeln( "-=-=-properties-=-=-" ) var Props = Obj.reflect.properties; for ( var i = 0; i < Props.length; i++) { $.writeln(Props[i].name ) } //Get Methods $.writeln( "-=-=-methods-=-=-" ) var Methods= Obj.reflect.methods; for ( var i = 0; i < Methods.length; i++) { $.writeln(Methods[i].name ) } //Get objectName $.writeln( "-=-=-name-=-=-" ) var Name = Obj.reflect.name $.writeln(Name) |
dollerオブジェクトの使い道。環境変数の値の取得の仕方とか言語環境の取得とか。
環境変数の値からユーザー名やtempフォルダの置き場所を取得します。
これでフォルダ構成などにユーザー名が絡んでいないときでもこれで作業者の名前を取得したり
作業者名をcomp内にテキストレイヤーで反映させたり、エクセルに書き込んだりとか出来ます。
tempフォルダというのは一時保存用のフォルダみたいなやつです。
「スクリプト実行時にbatを作成するけど処理終了時には削除する予定」とかそういうファイルの置き場所に使用します。
これらは既に環境変数の値として設定されているので、そこから取得することが可能です。
1 2 3 4 5 6 7 8 | // ユーザー名の取得 $.getenv( "USERNAME" ) //tempフォルダのパスの取得 $.getenv( "TEMP" ) //言語環境。アラート文の切り替えの際に使用したり $.locale //マシンの言語環境が日本語だったらja_JPと返ってきます |
プロトタイプを使用してのプロジェクト設定の管理とか。
プロジェクトを跨いで使用できそうなツールの場合、別口でプロジェクトの設定を書いたjsxファイルを用意しておくと便利です。
たとえばこんな感じで。
1 2 3 4 5 6 7 8 9 10 11 12 | //proj_setting.jsx function proj() {} proj.prototype.name = "Tako_vs_Mongoose" proj.prototype.id = "TM" proj.prototype.fps = 30 proj.prototype.mayaVer =2014 proj.prototype.aeVer = "CC" proj.prototype.height =1080 proj.prototype.width = 1920 proj.prototype.serverDir = "write_server_path" var proj = new proj(); |
そして処理を行なうjsxファイルの一番最初に$.evalFile()を使用して上記で作成したproj_setting.jsxを呼び出します。
1 2 3 | $.evalFile( "PATHPATHPATH/proj_setting.jsx" ) //proj_setting.jsxで使用してるプロジェクト名が返ってきます。 $.writeln( "this project is:" +proj.name) |
proj_setting.jsxをプロジェクトごとに用意して、プロジェクト用のディレクトリごとに配置するなどすれば
プロジェクトを跨いで使用する際、
$.evalFile()で参照してるパスを書き換えるだけで中身は書き換えずに使用することが可能です。
まとめ
駆け足となってしまいましたがいかがでしたでしょうか、
コンポジット作業はnukeで行なうという会社が増えてきたかと思いますが
アニメーターさんやコンポジット作業を主として行なわないセクションではAEはまだまだ現役かと思います。
おまけの項目で書いたスクリプトはIllustratorやphotoshopでも使用できるので是非活用ください。
長々とお付き合い戴きありがとうございました C:。ミ
※免責事項※
本記事内で公開している全ての手法の有用性、安全性について、当方は一切の保証を与えるものではありません。
これらの手法を実施したことによって引き起こる直接的、間接的な損害に対し、当方は一切責任を負うものではありません。
自己責任でご使用ください
コメント
コメントフォーム