32bitComposite

PBRやLWFの使用により32bitでのコンポジットを行う機会が増えてきましたので、AfterEffectsでの使用を中心に検証を行った結果をまとめました。

〇32bitは他とどう違うのか?

AEでは8bits、16bits、32bitsと3種類の深度を選択できます。
これはそれぞれのチャンネルの諧調の数をどこまで持つかということで
たとえば8bitsなら2Λ8=256色の諧調を持つことができます。
この諧調数が多ければ表現できる色域も広くなりマッハバンドなども解消することができます。

通常なら16bitsで十分な色数なのですが、32bitsでは0-1以外の値を保持することが可能になります。
この利点を使用する為に32bitsモードでコンポジットを行う事が多いです。

〇0-1以外の値とは何か?

コンポジットでは明るさなどの変更を行いますが0-1以外の値を保持している場合とそうではない場合にどのような違いが現れるでしょうか?

以下の図の様に、0-1以外の値を保持している場合(32bits)とそうではない場合(16bit)でカラーバーを作成しエフェクトのかかり方を比較していきます。
32bitのバーでは右端2つが1.0と2.0という値になっていますが目視では違いがわかりません。
※16bitsでは2.0という値を維持できないので右端の実際の値は1.0になっています。

次に露出で+0.5オフセットをかけました。
こちらも見た目では違いはわかりませんが16bitsでは1.0以上の値を保持できないために1を超える値はすべて1.0となりますが32bitsでは値を保持しています。

さらに露出の-0.5オフセットを追加でかけました。
露出でプラス0.5してから、マイナス0.5したので数値的に変化は無いはずでが、16bitsと32bitsでは以下のように違いが出てきます。

これは16bitsの場合1.0を超えた場合はすべて1.0にして超過分を失ってしまい
その上でマイナス0.5の処理を行うためこのような結果になってしまいます。

コンポジットでは処理を行うほど諧調が飛びやすくなりますが
32bitsコンポジットで行うことで回避することが可能になります。
もちろん16bitsでもちゃんと考えて処理を行えば同様の結果にすることが出来ますが。

〇32bitsコンポジットとの比較

前述通り、32bitsコンポジットでは0-1以外の値を保持できるのですが
その事によりさまざまな違いが現れますのでそれを比較してみます。

・合成

1以上の値を持つ画像で合成を行う際の比較です。
まずはhdr形式の画像を各ビットで比較した画像ですがここでの違いはわかりません

ここに煙の画像を乗せて見ます。
32bitsでは最初の画像では飛んでいて見えませんでしたが煙で暗くなり太陽が出現しました。
一方16bitsでは最初の時点で1以上の値がカットされているため一部で諧調が死んでいます。

・モーションブラー、レンズブラー

ブラーにより値が平均化されるのですが1以上の値を持っている部分は明るさを維持できます。
16bitsでは1.0が最大なのでそのままでは暗くなってしまいます。

〇32bitでの注意点

32bitsコンポジットを行うことにより表現の幅が広がりますが
扱う情報も増えるため注意しなければいけない点も増えてしまいます。
いくつかの注意点をまとめました。

・値の保持を気にする。

32bitsコンポジットでは0-1以外の値の保持が利点ですが32bitsに
非対応エフェクトをそのまま使うと0-1以外の値が削除されてしまいます。

まず、そのままの値を確認します。
32bitsモードでhdr形式の画像なので1.0以上の値を保持しています。

次にオフセットエフェクト(16bits)を適用します。
一見変化が無いように見えますが値を確認してみると1.0以上の値はすべて1になってしまっています。

これでは32bitsでコンポしている意味が無いので32bits非対応エフェクトを使用する場合はUtility>HDR_Companderエフェクトを使用し0-1の範囲に変換してエフェクトをかけその後に再びエフェクトを適用し元の範囲に値に拡張して対応します。

最初のHDR_Companderで0-30の値を0-1に圧縮し、
最後のHDR_Companderで拡張し、値を元に戻しています。
※Gainの値以上の値はカットされるので画像内の最大値を指定するようにします。

・高輝度の単色に注意する

下記画像の様に一つのチャンネルだけに高い値が入る場合、32bitだと白く(発光して?)見えますがそれはあくまで32bit上だけで遊技機などの最終出力がPNG(16bit,8bit)とかの場合は出力時に見え方が変わってしまう場合がありますので注意が必要です。
※作業画面で確認するにはレベルエフェクトを使用したクリッピングで出力結果を見ることができます。

・加算処理

32bitモードではマイナスの値(ネガティブ値)も保持できる為、「加算=明るくなる」とは限らない。
もし16bitモードの様な加算処理をしたければネガティブ値のクリッピングで対応できます。

・加算とスクリーン

スクリーン処理は計算式的に0-1以外の値の場合、16bitモードとは違う挙動になる場合があります。
たとえばFLGrowの場合はscreenモードだとネガティブ値が発生し以下の様な結果になります。
場合によってはNanピクセルの発生原因にもなるので特別な意図が無い場合はscreenを避けた方がいいかもしれません。

・ブラー処理

前頁のモーションブラーの項でも触れましたが16bitモードと32bitモードではブラーの掛かり方が違います。
高輝度の場合は以下画像の左の様にボケ幅が固く見えます。これはこれで正しいのですがボケ幅の見え方を調整したい場合もあると思いますので、その場合の対処方法の一例です。
・レベルでクリッピング
クリッピングすればボケ幅を制御できますがクリップ値以上の階調は消えてしまうのでやりすぎは禁物です。
・HDRハイライト圧縮
階調をある程度保ちつつ高輝度部分を圧縮します。0-1範囲もある程度圧縮されるのがデメリットです。

・NaNピクセルに注意する

他の記事で詳しく解説しますが32bitsでコンポジットするとNaNピクセルというピクセルエラーが発生する場合があります。
このNaNピクセルが大量にある状態で編集するとAEが落ちる不具合が発生するので対処が必要です。


この記事が気に入ったらサポートをしてみませんか?