Pages

2009年5月27日水曜日

AEでの色空間(若干修正)

先日の内容に早速ミスを発見したので突っ込まれないうちに修正。現状特にレスは無いので実害は無いと信じたいですが、ご迷惑をお掛けした方がいらしたら御免なさい。m(_ _)m 以後ちゃんと検証します。まあ、ある程度の見切り発車は差し引いてごらん下さい(言い訳~)。

で、修正点ですが。
HSB⇒RGBでS(彩度)が0の時RGBが[0,0,0]となっていたのを[v,v,v](v=明度)にしました。計算式が良く分からなくても、彩度が0なら後は色を決めるのは明るさだけってのは明白でしたね。ちゃんと自分の書いていること読み返さないとなあ。

まだ問題点が残っておりまして、若干正確性に欠けるようです。8bit,16bit共に1%以下の誤差ですが、気になるものは気になる。恐らく小数点以下の処理あたりが原因ではないかと思うのですが。ど~~しようかしら。

そうこうしている内に、上記関数を内包する、「アニメ撮影下準備自動化スクリプト」がだいぶ形になってきました。ウチの作業環境に特化した非常にローカル色の強いものですが、その分はまった時の効果は大きいです。需要があるか分かりませんが、今後、現状思い描いている作業システムなぞご紹介出来れば、と考えています。
それでは。
(´・ω・`)ノシ

2009年5月23日土曜日

AfterEffectsでの色空間

コーディング中にちょっと躓いたのでメモ。[※修正版@090527]

AEではスクリプトによって平面を作る際に"addSolid"というメソッドを使いますが、ここで色を指定するやり方が良く分かっていませんでした。

スクリプトガイドによると、
”app.project.item( index).layers.addSolid(color, name, width, height, pixelAspect, duration)”
となっており、”color”に関しては、
”The color of the solid, an array of four floating-point values, [R, G, B, A], in the range [0.0..1.0].”
とされています。
つまり、RGBを各0~1で設定してやらんといけない訳ですね。

見慣れた0~255でないのは、プロジェクトの色深度が16bit,32bitの場合もあるから、というのは理解できます(実際、アニメ撮影業界はそろそろ16bitが標準となっているのではないでしょうか)。

が、通常のGUIで平面を作成する際のパラメータは、相変わらずHSBと各色深度分のRGB(8bitなら256階調)のままです。
ん~~、何か分かりにくい。

という訳で、色深度が幾つだろうがパラメータが変わらないHSBをベースに、0~1のRGBへコンバートする関数をチャラっと組んでみました。(参考:http://en.wikipedia.org/wiki/HSL_and_HSV)

//-----------------------------------
function convHsvToRgb(h,s,v){
s=s/100;
v=v/100;
var Hi=Math.floor((h/60))%6;
var f=(h/60)-Math.floor(h/60);
var p=v*(1-s);
var q=v*(1-f*s);
var t=v*(1-(1-f)*s);
var r;
var g;
var b;

if(s!=0){
switch(Hi){
case 0:r=v, g=t, b=p; break;
case 1:r=q, g=v, b=p; break;
case 2:r=p, g=v, b=t; break;
case 3:r=p, g=q, b=v; break;
case 4:r=t, g=p, b=v; break;
case 5:r=v, g=p, b=q; break;
default:r=v, g=v, b=v;
}
}else{r=v;g=v;b=v;
}
var result = [r, g, b];
return result;
}
//-----------------------------------
AEのGUIでの表示がSVとも0-100%なので、頭で除算してあります。
それ以外はほとんどWEB上の参考文献のまま・・・

この関数に平面設定時のHSB情報を渡してやると、そのままの色のRGB(0-1)値に変換できるはずです。
後は、
”app.project.item( index).layers.addSolid(convHsvToRgb(h,s,v), name, width, height, pixelAspect, duration)”
とでもしてやれば一件落着?

何でこんなことをやっているかというと、アニメ撮影時、シーン毎に設定された色平面を自動処理的に作成したいからです。
これが出来ないと、夏の決戦を生き残れない予感・・・

付け焼刃の対応ですのであちこち綻びがあるかと思います。
上記の関数に関しても、何かお気づきの点あればご指摘下さい。

2009年5月10日日曜日

びびった・・・

Terraon様白石運送様にて先日のスクリプトを紹介して頂く。
( ゚д゚)

(つд⊂)ゴシゴシ

(;゚д゚)

このAAを我が身で味わうことになるとは思いませんでした。
いやあ、びっくり。
まだまだふつつつか者ですが、今後とも宜しくお願い致します。


さて本題。
Terraon様のツッコミにもありましたが、コンポジット作業時にAfterEffectsのプロジェクト作業内容を確認せずに監視先に回してしまうことは確かにリスキーです。
作業途中の非常に重いデータで監視用のマシンやレンダー先に無駄な負担をかける心配もあります。
うちはどうしているかというと・・・実は作業者の判断に任せているという・・・
安全を期するならばセーフティーネット込みのワークフローを構築すべきですね。

また、Terraon様が示唆されているように、プロジェクトの保存と同時に監視用のデータを作成する方が効率的かつ安全な場合が多いかと思われます。
僕が現在作成中のスクリプトでは、こちらの方式を取るつもりです。こちらも後々公開できれば。

WSH(Windows Scripting Host)自体はwindowsユーザーならすぐに使える上、VBScript,JScriptと言語も豊富、ネット上にも情報が満載なので、非常にお勧めです。あまりうちの業界で使われている例を見ませんが。(MacならAppleScriptに当たるのでしょうか)
OS標準なのでAE以外との橋渡しにも使えますし、使い方によっては化けるのではないでしょうか。そして誰か良いスクリプトを見つけた、書いたら是非教えて下さい。

ちなみに拙スクリプトですが、例えば"SendTo"に入れておくと、AEP(複数)選択→右クリックから「送る」で監視用データ作成へと持って行けたりします。地味に便利。


とにもかくにも。
ご紹介、ご指摘ありがとうございました。
またぼちぼち小ネタをご紹介していきたいと思います。
(´・ω・`)ノシ