カラコレの可逆性と32Bit浮動小数点数(フロート)

要するに映像に何らかの加工しても、後に別の加工によって、加工以前の状態に戻すことが可能だというのが「可逆性」です。

補足:以前にこの記事を別のタイトルで一瞬だけ公開したのですが、その際には32Bit浮動小数点数(フロート)がカラコレの可逆性に関わっていると書きましたが、おそらく間違いである、というご指摘を受けたので取り下げました。その後DaVinciに詳しい方を紹介いただき、話を聞いたところ以下の内容を教えて頂きました。どうやらビット深度で固定された諧調数でしか表せなかった明るさの種類(8Bitだと0から255)を、黒0白1として、0以下も1以上も数学的に計算処理・記録を行えるようにしたものがフロート、つまり32Bit浮動小数点数ということです。 白よりも明るい白や黒よりも暗い黒をほぼ無制限に正しく記録して保管することが出来るため、HDRの制作において非常に有用だそうです。個人的には、可逆性について32Bit浮動小数点数が関わっているというのは間違いでは無かったということが分かったのですが、話が複雑そうなので、今回の制作ノートは僕が理解している範囲で可逆性の例だけをお見せすることにします。

補足2:32Bit浮動小数点数については、以下のリンク先の記事を参考にさせて頂きました。今まで読んだ記事の中で最も分かりやすかったです。ご紹介くださったTさん、ありがとうございました!英語の記事だとこのリンクが読みやすいですよ。またDaVinci Resolveユーザーの方はFacebookのグループ「DRUG-J」に是非参加されると良いかと思います。常に最新のアップデートが更新されているので、とても勉強になります。


参照:分かる!リニアワークフローのコンポジット
大体本文の後半にて32Bit浮動小数点数の話になります。

実際に見てみましょう!

具体的に

コントラストを上げたり下げたりしてレンジの外に出た情報はクリッピングした様に思われます。しかしDaVinci Resolveでは、32bit浮動小数点数によって、0よりも暗いシャドウや1よりも明るいハイライトの情報を失うこと無く計算処理し、記録することが出来るのです。

これは素材を取り込んだだけのタイムラインです。

1つ目のノードのクロマカーブを極端に変形させてクリップさせても…

最初のカーブと打ち消しあう様なカーブを2つ目のノードで作ってあげると、元通りになります。

(ウェーブフォームも全く同じです)

要するにカラコレで一度白飛びしたり黒つぶれした部分を、次のノードのエフェクトを使って、白飛びしたり黒つぶれする以前の画像の状態へと戻すことが出来るということです。32bit浮動小数点数を使って出来ることです。

気を付けること

これには気をつけないといけない点が1点あります。それはLUTの使用です。LUTノードを使用した際、輝度レンジの外に出ていったハイライトやシャドウの情報は、その後のノードでどのように工夫しても取り戻せないものになってしまいます。

3D LUTもカーブと同じように、数学的に考えることが出来るためレンジの範囲の中であれば、1度入力したLUTと真逆のことをするLUTを次のノードにかけると元通りの画像に戻ります。(今回は説明するためだけに、VFX IOのLINEAR TO REC709と同じくVFX IOのREC709 TO LINEARを使いました)

1つ目のノードにLINEAR TO REC709をかけます。

2つ目のノードに逆のREC709 TO LINEARをかけます。

画像は元通りになりました。

LUTの適用する前後を並べて比べても、見た目は同じです。

次にLUTを無効にした状態にして、LUTのノードの前後に新しく二つのノードを作ります。

そして冒頭でしたように、極端なカーブをお互いが打ち消しあうように、1つ目のノードと4つ目のノードに適用します。

LUTも32Bit浮動小数点数のように0(黒)以下も1(白)以上のデータを正しく記録・保存することに適応していれば、LUTを有効にしても何も変化が起こらないはずですが…?

LUTを有効にすると、

極端なカーブでクリップしていた画像にLUTを適用することで、その時点でクリップした輝度情報は完全に失われてしまい、4つ目のノードで元に戻そうとしても、必要なレンジの外の輝度情報は全く無くないために復元されませんでした。

これがLUTがレンジの外の情報を記録させるようにデザインされていないためだからだと思います。LUTはたぶん、10Bitのビット深度にも対応出来るものがありますが、あくまで黒から白までの数値を変化させる規格でデザインされたため、32Bit浮動小数点数の計算処理の方法が適応されないのだと思います。せっかくの32bit浮動小数点数もLUTを使った時にレンジの外に出てしまった情報は、後から救出することが出来ません。つまりLUTは32bit浮動小数点数のメリットを奪ってしまうのです。

ノードツリーを組む際の工夫

ノードツリーを組む際に出来る工夫の一つとして、LUTの前後にノードを持つことをオススメします。

LUTで失われたハイライトやシャドウの情報を取り戻したい場合は、LUTの前のノードでハイライトやシャドウを調整することで、LUTによって失われた情報を救出することが出来ます。そしてLUTノードよりも後ろのノードを使って更に細かいセカンダリーカラーコレクションをするのが良いと思います。

最近は出来る限りLOGやRAWで撮影したものを、LUTである程度補正した状態からカラコレを始める場合が多くなっていますが、その際にはノードツリーを組む際の注意点としては覚えておいて損は無いと思います。

疑問

じゃあAdobeのPremiereやAfterEffectのカラコレも32Bit浮動小数点を使えば可逆的にカラコレが出来るはず!実際に出来るものもあります。Premiereの場合、シーケンス設定の中の「Maximum Bit Depth」をクリックしておくと、32Bit浮動小数点数が適用されるようです。

ただし、これには制限があり、エフェクトコーナーで32Bitのマークが付いているエフェクトしか32Bit浮動小数点数(フロート)に対応していないようなので、かなり色々な制限がありそうです。またノード式では無く、レイヤー式を使ったDaVinciとは違う計算処理方法の違いも影響していそうです。また学んだら書きます。

After EffectになるともっとVFXよりの話になるので、随分さらに広い知識が必要になるようですが、リニアワークフローの際には32Bit浮動小数点数が非常に役に立つようです。さらに詳しくは以下のサイトでとても丁寧が非常に丁寧に説明してくれています。

サイトウヒロシさんというAfter Effectのプロの方のブログです。
AfterEffectsでのリニア合成のお話(1) (全部で3話あります)

上記のサイトで紹介されている別サイトの記事も以下に添付しておきます。
fieldjamのDesignVizエッセンス ‐ 第1回:リニアワークフローについて<その1>

以上、僕の知っているDaVinciのカラコレ可逆性についてでした。また他にも利点がある場合は、ご教授宜しくお願いいたします。

6クリップする
クリップしておくと
あとからいつでも
見返したりできます。

    コメント

    • まだコメントはありません