Flame 2027.1から、新しく「Pixel Expression」ノードが追加されました。
Pixel Expressionは、RGBやMatteなどの値を使い、数式でピクセル単位の処理を作成できるノードです。
今回は、Premultiplied素材にGainを適用し、Premultiplied / Unpremultipliedによる処理の違いを確認します。
Matte付きの素材にカラー調整を行ったとき、「半透明部分の濃度や合成結果が、なんとなく変わった?」と感じたことはないでしょうか。
実際の数式と合成結果から確認してみます。
Premultipliedとは
Premultipliedとは、RGBにあらかじめMatte(Alpha)の値が掛けられている状態です。
例えば、
RGB = 1.0
Matte = 0.5
の場合、PremultipliedされたRGBは、
Premultiplied RGB = 元のRGB × Matte
1.0 × 0.5 = 0.5
となります。
つまり、半透明部分ではMatteの値に応じてRGBも小さくなっているということです。
今回のGain処理を理解するポイントになります。
Pixel ExpressionからGainを確認
Premultiplied素材に対して、Pixel ExpressionでGainを適用します。
Red : r1 * gain
Green : g1 * gain
Blue : b1 * gain
Matte : m1
RGBにそのままGainを掛けます。Matteは変更せず、そのまま出力します。



通常のPremultiplied素材をCompノード(Input ControlsはPremultiplied)でブレンド。



Pixel ExpressionのVariablesにGainを追加し、値を調整できるようにしています。



Compノード(Input ControlsはPremultiplied)でブレンド。


Difference Matteから確認。
Pixel Expression Gainを1.5に変更


VariablesからGainを1.5に変更します。



Compノード(Input ControlsはPremultiplied)でブレンド。



RGBは明るくなりますが、半透明部分のブレンド状態に大きな変化はありません。
UnpremultipliedしてからGainを適用
次に、UnpremultipliedしてからGainを適用してみます。
Unpremultipliedは、PremultipliedされたRGBをMatteで割り、元のRGBに戻す処理です。
Unpremultiplied RGB = Premultiplied RGB / Matte
Pixel Expressionでは、Matteが0の場合の0除算を避けるため、
Red : r1 / max(m1, 0.0001)
Green : g1 / max(m1, 0.0001)
Blue : b1 / max(m1, 0.0001)
Matte : m1
とします。
Matteが0.0001より大きい場合は、そのままMatteの値が使われます。



「RGBチャンネルを、それぞれmax(m1, 0.0001)で割ります。Gainは1.0。





Compノード(Input ControlsはUnpremultiplied)でブレンド。


Pixel Expressionを追加していないCompノード(Premultiplied)と同じ結果になります。
Unpremultiplied RGBにGainを掛ける
Red : (r1 / max(m1, 0.0001)) * gain
Green : (g1 / max(m1, 0.0001)) * gain
Blue : (b1 / max(m1, 0.0001)) * gain
Matte : m1
Unpremultiplied RGBにGainを掛けます。



Variables Gain : 1.5



Compノード(Input ControlsはUnpremultiplied)でブレンド。


Pixel Expressionを追加していないCompノードの前にMaster Gradeノードを追加し、Gain : 1.5に設定。



Compノード(Input ControlsはPremultiplied)でブレンド。


Difference Matteから確認。
Premultipliedに戻す
Gain処理後のUnpremultiplied RGBにMatteを掛けることで、元のPremultipliedの状態に戻すことができます。
Premultiplied RGB
↓
Unpremultiplied RGB
↓
Gain 1.5
↓
Unpremultiplied RGB * Matte = Premultiplied RGB
この一連の処理では、Gainは単純な乗算のため、PremultipliedのままGainを掛けた場合と結果は同じになります。
Red : ((r1 / max(m1, 0.0001)) * gain) * m1
Green : ((g1 / max(m1, 0.0001)) * gain) * m1
Blue : ((b1 / max(m1, 0.0001)) * gain) * m1
Matte : m1



Gainを掛けたあと、Matteを掛けます。



Compノード(Input ControlsはPremultiplied)でブレンド。


Difference Matteから確認。
まとめ
Gainでは、Premultipliedのまま処理した場合と、Unpremultipliedしてから処理した場合で最終結果は一致しました。
次回は、同じ処理をGammaで確認します。