前回は、Flame2027.1で追加されたPixel Expressionを使って、Premultiplied / Unpremultipliedの違いや、
Gain / Gammaを適用した場合の結果を確認しました。

次回はその流れから、「Tone AdjustmentGLSLシェーダー)」を取り上げる予定でした。

ただ、Pixel Expressionは、Flame2027.1の新機能なので、そのままPixel Expressionの話だけを続けてしまうと、
2026以前の環境では実際に試すことができません。

そこで、少し寄り道して、Pixel Expressionで確認したPremultiplied / Unpremultipliedの処理を、
GLSLシェーダーとして再現できないか試してみることにしました。

そのために作成したのが、Premultiplied Adjustです。

Premultiplied RGBとMatteを別々に入力し、

  • Premultiplied RGB
  • Unpremultiplied RGB
  • Re-Premultiplied RGB

状態を切り替えて確認できます。

さらにGain / Gammaを、Premultipliedの状態で直接適用した場合と、一度Unpremultiplyしてから適用した場合で
比較できるようにしました。

特にGammaでは、この処理順による違いが半透明部分やエッジにはっきり現れます。

Pixel Expression(2027.1)で確認したGain / Gamma

Gainは単純な乗算なので、Premultiplied RGBへ直接適用した場合と、UnpremultiplyしてからGainを適用し、
再度Premultiplyした場合で、最終的な結果はほぼ一致しました。

一方、Gammaは非線形処理のため、Premultiplied RGBへ直接適用した場合と、
Unpremultiplyしてから適用した場合では結果が異なります。

特にMatteが1.0未満となる半透明部分やエッジで、その違いが現れました。

Premultiplied Adjust GLSLシェーダー概要

Premultiplied Adjustは、Premultiplied RGBとMatteの関係を確認しながら、
Unpremultiply / Re-Premultiplyの処理を切り替えて比較するためのシェーダーです。

基本的な処理の流れは、次のようになります。

Premultiplied Adjustでは、この処理の各段階をView Modeで切り替えて確認できます。

View Mode内容
Premultiplied入力されたPremultiplied RGBをそのまま確認
Unpremultiplied RGB – DisplayRGB ÷ Matte : Unpremultiplied RGBそのものを表示して確認
Unpremultiplied RGB – CompRGB ÷ Matte : 入力Matteを保持してCompへ出力
Re-PremultipliedUnpremultiplied RGBにMatteを掛け直して出力
  • – Display : Unpremultiplied RGBそのものを確認するため、Out Matteを1.0に固定しています。
  • – Comp : 入力Matteを保持し、そのまま合成に使用できる状態で出力します。

これらの基本的なView Modeに加えて、Gain / Gammaを適用したモードも用意しています。

Gainを確認

View Mode : Premultiplied + Gain

Master Gradeから、Gainを1.5に設定。

Premultiplied Adjustメインメニューから、Gainを1.5に設定して、View Modeから、Premultiplied + Gainを選択。

Gain / Gammaの処理結果を確認する場合は、View Modeから「+ Gain」または「+ Gamma」
モードを選択します。

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

Difference Matteから確認。

View Mode : Unpremultiplied + Gain – Display

View Modeから、Unpremultiplied + Gain – Displayを選択。

Unpremultiplied RGBそのものを確認することが目的なので、Out Matte = 1.0で出力します。

View Mode : Unpremultiplied + Gain – Comp

View Modeから、Unpremultiplied + Gain – Compを選択。

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

元のMatteを保持してComp。

View Mode : Re-Premultiplied + Gain

View Modeから、Re-Premultiplied + Gainを選択。

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

シェーダー内でMatteを再度掛けてComp。

Unpremultiplied + Gain – Compでは、Unpremultiplied RGBとMatteをCompノードへ渡し、
入力をUnpremultipliedとして合成しています。

Re-Premultiplied + Gainでは、シェーダー内部でMatteを掛け直してから、
Premultiplied RGBとして合成しています。

両者はほぼ同じ結果になりますが、今回の検証ではエッジ部分にわずかな違いを確認しました。

続いて、Gammaでも同じ処理方法によって結果がどのように変わるのか確認します。

Gammaで確認

まず、Premultiplied RGBへ直接Gammaを適用した結果を確認します。

Master Gradeから、Gammaを2.0に設定。

Premultiplied Adjustメインメニューから、Gammaを0.5に設定して、View Modeから、Premultiplied + Gammaを選択。

Premultiplied RGBに対して比較するMasterGradeのGammaを2.0、
Premultiplied Adjustでは、Gammaを0.5に設定します。
これはGamma値の扱いが逆数の関係になるためです。

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

Difference Matteから確認。処理の違いにより、エッジ部分にわずかな差が確認できます。

次に、一度Unpremultiplyし、Unpremultiplied RGBにGammaを適用したあと、
Matteを掛け直してRe-Premultiplyした結果と比較します。

View Modeから、Re-Premultiplied + Gammaを選択。

Differenceで比較すると、半透明部分を中心に差が確認できます。

まとめ

これまでPremultiplied / Unpremultipliedについては、処理の考え方として理解していても、
実際のRGBがどのような状態になるか、視覚的に確認することは、なかなかできませんでした。

今回、Premultiplied Adjustを作成したことで、

  • Premultiplied RGB
  • Unpremultiplied RGB
  • Re-Premultiplied RGB

View Modeから切り替え、それぞれの状態を実際の画像として確認できるようになりました。

またGain / Gammaを適用することで、Premultipliedの状態で処理する場合と、一度Unpremultiplyしてから処理する場合の違いも比較できました。

特にGammaでは、同じように見える処理でも、どの状態のRGBに対して処理するかによって、半透明部分やエッジの結果が変わることを視覚的に確認できます。

Premultiplied / Unpremultipliedは普段あまり意識することのない処理ですが、
今回の検証で、その違いを実際の画像として確認できるようになったことが一番の収穫でした。

次回

今回作成したPremultiplied Adjustは、Premultiplied / Unpremultipliedの確認を目的としたシェーダーですが、
このシェーダーの処理をベースに、さらに機能を追加したものが「Tone Adjustment」です。

Tone AdjustmentではPremultiplied / Unpremultipliedの比較から離れ、Gamma / Pivotに加えて、
Black / White側の調整やRange変換など、実際の画作りに使うための機能を追加しています。

次回は、このTone Adjustment(GLSLシェーダー)について確認していきます。

今回使用したPremultiplied Adjust v1.0は、以下からダウンロードできます。

対応バージョンやインストール方法、使用上の注意については、ZIPファイルに含まれるREADMEおよびInstallation Guideを確認してください。