.xmp ファイルから 手元に残る一枚まで。
プリセットは一度だけ読み取られてパラメーターの集合になり、ファインダー用に 3D ルックアップテーブルへ焼き込まれ、シャッターを切ると非圧縮のセンサー画像に対して浮動小数点のフル精度で走り直します。Rust で書かれた一つの実装が両方の経路を動かしており、だからプレビューと写真が一致します。
最終更新:
一枚の写真がたどる道
ファイルを読む
.xmp プリセットは XML です。Camera Raw の属性がすべて一つのパラメーター集合へ取り出されます。ホワイトバランスと露光量、階調とトーンカーブ、HSL、カラーグレーディング、ディテール、効果、そしてマスクがあればマスクも。エンジンが知らない属性はエラー扱いにせず無視するので、より新しい Lightroom が書き出したプリセットも、理解できるものすべてを伴って読み込まれます。
プリセットがパイプラインになる
そのパラメーターは順序の決まった処理の並びになります。ホワイトバランスと露光量、次に階調とトーンカーブ、次に色、そして空間的な処理 — 明瞭度、かすみの除去、シャープ、マスク、周辺光量、グレイン。順序は固定です。同じ調整でも順番が変われば同じ写真にはならないからです。
ファインダーにはテーブルを渡す
画素そのものの色だけで決まるもの — トーンカーブ、HSL、カラーグレーディング、ポイントカラー — は、プリセットを切り替えた時点で一度だけ 3D ルックアップテーブルへ焼き込まれます。以後 GPU はそのテーブルを毎フレームに追加コストなしで当てるだけで、これがライブ映像に追随できる理由です。
シャッターは本物を走らせる
シャッターを切ると、同じパイプラインが非圧縮のセンサー画像全体に対して浮動小数点で走り直します。テーブルの補間は一切入りません。ハレーションとグレインは両方の経路で同一のコードを使うので、ファインダーで見た質感がそのまま得られます。
元のカットは残る
手を加えていないコピーが仕上がり写真の隣に既定で保存され、RAW モードでは無加工のセンサーデータが独立した ProRAW の DNG として書き出されます。ルックの適用はファイルを一つ削除すれば取り消せます。断りなく焼き込まれることはありません。
プレビューと写真が一致する理由
ライブフィルターを備えたカメラの多くは、プレビュー用のコードとファイル用のコードが別々で、両者はずれていきます。「フラットに撮って後で仕上げろ」という定番の助言はここから来ています。
ここでは両方の経路が、同じパラメーターで同じ Rust 実装を呼びます。プレビューが引き換えにしているのは精度と速度だけ — 画素ごとの計算ではなく格子上でサンプリングしたテーブル、それだけです。どの処理がどの順でどの値で行われるかは共通です。
ルックアップテーブルに入らないもの
ルックアップテーブルは色を色へ対応づけるものなので、画素だけで決まる調整しか持てません。周囲の画素を見る必要があるものはすべて空間的な処理です — 明瞭度、かすみの除去、シャープ、ノイズ除去、周辺光量、マスク、グレイン。これらは両方の経路でそれぞれ独立したパスとして走ります。
マスクを複数持つプリセットがマスクのないものよりファインダーで重いのも同じ理由です。マスク一つにつき毎フレーム全画面の GPU パスが何度か走るのに対し、その色の処理はテーブルに無料で畳み込まれていました。
推測ではなく Lightroom に合わせ込む
HSL の彩度と輝度の演算子は、式を推測して作り直すのではなく Lightroom 自身の出力に合わせ込んであります。Lightroom で作られたプリセットは、作者が置いたとおりの位置に着地します。
本当に未実装の項目については、似たものを代わりに当てるのではなく、ニュートラルとして描画し、そのことを伝えられるようにしてあります。プリセットは誰かが意図して選んだ数値の集合です。黙って別の数値を描くのは、何も描かないより悪いことです。
端末から何も出ない
サーバーはありません。読み取りも描画も撮影も書き出しも、すべて端末の中で完結し、写真はそのままライブラリに書き込まれます。
プリセットを取り込むために Google Drive や OneDrive にサインインした場合、そのトークンは iOS のキーチェーンに保存され、.xmp ファイルを読むためだけに使われます。