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

Header

Main

  • TOP
  • DF TALK
  • 徒然なるままに #2 [AfterEffects: 16bitモードでexrの範囲外の値を取ってくる方法]

徒然なるままに #2 [AfterEffects: 16bitモードでexrの範囲外の値を取ってくる方法]

2013/10/28

Tag: ,,

こんにちはー。開発室のひらく[@horonig]です。
今回ちょっと力を抜いて、簡単なtipsを紹介します。

AfterEffects: 16bitモードでexrの[0.0-1.0]範囲外の値を取ってくる方法

■イントロ

皆さんはAfterEffectsで32bitモードって使ったことありますか?
僕が言うのもなんですが、やたら重いんです。

なので弊社ではまだまだ16bitモードでのリニアワークフロー(但し[0.0-1.0]範囲内)が基本です。
ごく稀に、尺の短い仕事で32bitモードを使う事もありますが、本当に稀です。
以下に、弊社での基本設定を晒しておきますね。こんな感じで設定しています。

[DFでの基本設定 (AfterEffectsプロジェクト設定)]

そして「16bitモード 32bitモード 比較表」を作ってみました。
みなさんご存じの事ばかりかとは思いますが、念のため・・。
(間違ってたらこっそり教えて下さいw)

○[AfterEffects] 16bitモード 32bitモード 比較表

16bitモード 32bitモード
pixel値の種類と範囲 int [0 ~ 32768] float [-∞ ~ ∞] ※1
exrなどのfloat素材 [0.0-1.0]でclampされる [0.0-1.0]でclampされない
Blurのかかり具合 汚い(情報欠損により暗く落ち込む) 綺麗(高輝度部分がしっかりボケる)
処理スピード ぼちぼち 重い
対応エフェクト 対応 一部未対応のエフェクトあり

※1 正確には∞(無限大)ではなく、floatとしての最大値と最小値がありますがここでは割愛します

というわけで、全てのコンプを32bitモードにすることは処理速度の問題で難しいのです。
ですがやはり、一部だけ32bitモードにしたい場合が多々あります。
そのひとつが、exr素材の[0.0-1.0]範囲外の値を使いたい場合です。

8bitモードだと[0.0-1.0]が[0-255]に(clamp&)マッピングされ, 16bitモードだと[0.0-1.0]が[0-32768]の範囲に(clamp&)マッピングされます。exrはfloatで値が持てるので、ほとんどの素材が[0.0-1.0]範囲外の値を持っているのにも関わらず、絶対的にクランプされて[0-255]か[0-32768]に収まってしまいます。

と言う事は、16bitモードで背景素材とかの露出を正確にはいじれない、という事になります。
なので、このテクニックが重要になってくるのです。

 

■16bitモードで範囲外の値を取ってくる方法

ここで登場するのが [EXtractoR] というエフェクトです。
みなさん使ってますか?[EXtractoR]。

CS5.5以上だと既に入ってるかもしれません。(その辺の詳細は忘れました・・)
もし入っていない場合は、以下からダウンロードして入れておいて下さい。
http://www.fnordware.com/OpenEXR/

今回、DFの屋上で撮影された以下の様なHDR素材(フォーマットはexr)で試してみます。

これを16bitモードのAfterEffectsにぶっこみ、「露出」エフェクトをで露出を二段階下げてみましょう。
値としては[-2.0]を入れる事になります。

すると、以下の様な結果になるはずです。

(ノ∀`)アチャーって感じの結果になりましたかね。なりますよね。
いくら情報が無いところを取ってこようとしても取って来れないのです。これが16bitモードで起こる問題です。
32768(32bitモードで言うと1.0)より上の値がないため、沈んだ色になってしまうんですね。

では今度は、exrレイヤに[EXtractoR]を適用し、以下のように設定してみて下さい。

するとどうでしょう!32bitモードで露出を二段階下げた時と同じ結果が!!

ちなみに、「露出を一段階上げるとエネルギー量(光量)は倍になる」ので、今回の「露出を二段階下げる」という操作を表現するには「光量を1/4(半分の半分)にする」必要があります。つまり、「EXtractoRで[0.0-4.0]を[0.0-1.0]にマッピングする」という操作をすれば良いのです。(一段階下げるの場合は[0.0-2.0]を[0.0-1.0]にマッピングする)

 
○段階別比較

【16bitモード】[露出] -1.0 【32bitモード】[露出] -1.0 【16bitモード】[EXtractoR] 0.0-2.0
【16bitモード】[露出] -2.0 【32bitモード】[露出] -2.0 【16bitモード】[EXtractoR] 0.0-4.0
【16bitモード】[露出] -3.0 【32bitモード】[露出] -3.0 【16bitモード】[EXtractoR] 0.0-8.0

若干の誤差はあるものの、ほぼ同じ画となりました。

というか、蓋を開けたらなんとも簡単な方法でしたね。
でも意外と盲点じゃないですか?
僕も思いつきでやったら出来ちゃった、くらいの感じでしたし。

 

■制限

今回の方法はexrフォーマットの素材にしか効きません。
hdrフォーマットの素材には効かないのでご注意ください。([EXtractoR]はexr専用のプラグインなので)

あと、[EXtractoR]は結構重いエフェクトなので、使いすぎるとaepがどんどん重くなっていきますw
その辺は気をつけながら使用して下さい。

 

■そもそもなぜ 16bit なのに [0-32768] なのか

ちょっと数字に強い人だと「あれ?」って思うかもしれませんが、AEもPSも16bitモードの上限がなぜか「32768」になっています。16bitって言うくらいなら本当は「65535」じゃねーの?って思われるかもしれませんが、その理由がAdobeのサイトで説明されています。

Photoshop CS の [情報] パレットに表示される 16 bit の値は、各チャンネルで最大「32768」です。これは、 0 ~ 32767 までを 15 bit ( 2 の 15乗 = 32768 )として、その値に「1」を追加し 16 bit として扱っています。15 bit + 1 の値にすることで、画像処理の際に使用されるミッドポイントと呼ばれる中間点が整数となり、Photoshop における演算の精度、スピードを向上させています。

[adobe] Photoshop CS の情報パレットを 16bit 表示にする方法 より抜粋

最初知った時は「なるほどね~」って思いました。これ知ってるだけで、ちょっと賢くなった気がしませんか?(笑)

 

■甘味紹介 #2 [大人のきのこの山でもやろうかと思ったけど・・]

今回はクリカンの準備等々で忙しかったため、甘味紹介は割愛します!
甘味ファンの皆様、大変申し訳ございません (;´Д`)

…ではまた!!

Pocket

コメント

コメントはありません

コメントフォーム

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

*