フィルムルックの作り方:実写写真からシミュレーションを解く
Chobial の標準フィルムは、目分量で適当に作られたものでも、ネットで拾った LUT でもありません。すべて実写写真から数学的に解き明かされたものです。富士フイルムのカメラで撮影した1枚の RAW ファイルを、カメラ内で「ニュートラル」と「フィルムシミュレーション」の2通りに現像し、その差異を CIELAB 空間で測色・モデル化しました。手法の概要は明快ですが、本稿の大部分は、その過程でいかに様々な失敗に直面したかについての記録です。
この手法は2026年9月に富士フイルム X-T30 III を使って確立され、以下の数値はその検証時のものです。その後、大半のフィルムは X100VI による31カットの実写フレームを用いて同様に再解析されています。
1. ペアとなる画像を取得する
基本方針は極めてシンプルです。ひとつのシーンを撮影し、同じカメラ内で「ニュートラル」と「ルック適用」の2通りに現像して、その差分を解く。
ここで極めて重要な単語が 現像 です。富士フイルムのカメラはカメラ内で RAF ファイルを再現像できるため、まず RAW で撮影し、同じ1つのファイルを繰り返し現像しました。ニュートラルの基準として初期設定の Provia で1回、そして各シミュレーションもすべて初期設定で現像します。カラーは 0、ハイライトとシャドウのトーンも 0、粒子オフ、カラークロームオフ、ホワイトバランスのシフトもなし。同じセンサーデータ、同じ露出、同じホワイトバランス。変わるのはルックだけです。カメラの前で過ごす10分間は、屋外での100枚の撮影に勝ります。あらゆる交絡因子を一瞬で排除できるからです。
初期設定を保つことは決定的に重要です。レシピのハイライトトーンが −1 のまま残っていれば、シミュレーションに加えてそのレシピまで測定してしまい、レシピがフィルムに焼き込まれてしまいます。私たちのフィルムのうち4つ(Gold 風、Kodachrome 風、Ektachrome 風、そして Classic Negative レシピから取った Chobial Vintage)は、標準シミュレーションではなく意図的にレシピから解析しました。これは偶発的なミスではなく、明確な設計判断です。
フレームとファイルの照合は、ファイル名ではなくピクセルを比較して行いました。4方向の回転に対応した小さな輝度シグネチャを照合しています。ファイル名は嘘をつきますが、ピクセルは嘘をつきません。
2. 何を撮影すべきか:これがすべての限界を決める
ある日の夕方にカフェや公園で撮影した5枚の写真がカバーしていたのは、 33×33×33 のカラーキューブ全体のわずか 5.8% でした。全ピクセルの2/3は CIELAB の彩度(C*)が 8 未満、つまりほぼ無彩色(グレー)でした。シアン、バイオレット、マゼンタに至っては、それぞれ 0.12%、0.03%、0.01% しか含まれていませんでした。背後に実データが存在しないパラメータは、隣接するパラメータに都合の良いデタラメな値を勝手にとってしまいます。初期のフィッティングでは、マゼンタがほとんど存在しない画像から「マゼンタの色相を58度回転させる」という解が平然と導き出されました。
教訓: カラーチャートを撮影すること。 24色のカラーチェッカー1枚のほうが、先ほどの日常風景5枚の合計よりもはるかに多くの有効な色を含んでおり、実写シーンで抜け落ちがちな色相を完璧に網羅しています。それが難しい場合でも、日光の下で高彩度な青空、赤色の物体、シアン、植物の緑、人間の肌、白いパッチを意識的にフレーム内に収める必要があります。
3. 独自のニュートラルではなく、カメラ自身のニュートラルを基準にする
誰もが思いつく素朴なアプローチは、RAW ファイルを自分たちのニュートラル現像パイプラインで現像し、そこから富士フイルムのシミュレーションに至る差分を解くことでしょう。しかしそれでは2つの異なるものを同時に測定してしまいます。目的のシミュレーションと、「私たちの RAW 現像と富士フイルムの RAW 現像とのあらゆる差異」です。後者の差異は実在しますが、それはそのカメラ固有のものです。それをフィルムに持ち込んでしまうと、まったく異なるニュートラル基準を持つ iPhone に対して、富士フイルムのセンサー補正を押し付けることになってしまいます。
問題は明白に現れました。自前の現像を基準にして Provia を解いたところ、彩度スケール 0.98、色相回転は最大 17 度という結果になりました。ニュートラル同士がケンカしている状態です。そしてすべてのシミュレーションがその歪みを抱え込みました。代わりにカメラ自身が現像した「Provia から目的シミュレーションへ」の差分を解くように改めたところ、その問題は一掃され、シミュレーション全体の平均誤差は一気に 3.7〜5.2 ΔE から 1.3〜3.5 ΔE へと激減しました。
ここにはタダでできる検証テストもあります。「Provia に対する Provia」を解かせるのです。答えは必ず ΔE 0.000、彩度 1.0000、回転 0.00 にならなければなりません。事前に正解が分かっている唯一のケースであり、実際にこれを実行したことでコード内の深刻なバグを発見できました。
4. フィルムモデルの構造
フィルムの色は、アプリが実際に処理を適用するのと同じ順序で、段階的にフィッティングされます。まずカーブ、その次にカラーです。
まずはグレーからカーブを決定する
マスターカーブ、レッドカーブ、ブルーカーブは、ほぼ無彩色のピクセル(C* が 8 未満)から読み取ります。これはフレーム全体の半分以上を占め、特定の色相では数百サンプルしかないのに対して1つのビンあたり数万のサンプルが存在するため、最も高精度に測定できる領域です。
カーブはフィルムの全体的なトーンと、グレーに乗る色かぶり(ティント)を担います。この「グレーへの色かぶり」は想像以上に重要です。彩度のスケーリングによって色を動かすカラーモデルは、グレーには手出しできません。グレーには彩度がないため、ゼロに何を掛けてもゼロだからです。開発初期、私たちの Chrome 系フィルムと Negative 系フィルムが酷似して見えていたのはまさにこれが原因でした。画面の大半を占める無彩色領域に何も適用されておらず、そここそが富士フイルムが各シミュレーションの個性を色濃く注ぎ込んでいる場所だったのです。
知っておくべき重大なバグ: 最初のバージョンでは、ピクセルの輝度レベル(グレーの明るさ)に基づいて各チャンネルをビン分割していました。しかし「ほぼ無彩色」のピクセルは完全な無彩色ではありません。各ビンの中央値となる R、G、B は、そのピクセル集団がたまたま持っていた色かぶりを含んでおり、カーブはその色かぶりを自分自身の上に二重に適用してしまいました。Provia 対 Provia を解かせると、0 ではなく ΔE 1.4 が返ってきたのです。各チャンネルをそれぞれの値に基づいてビン分割するように修正したところ(チャンネルにカーブを適用する本来の動作と同じです)、恒等変換で厳密に 0 が返るようになりました。
もうひとつの罠:マスターカーブが最初に処理を行ってその結果を渡すため、レッドとブルーのカーブは元の入力値ではなく「マスターカーブの出力値」を基準に定義しなければなりません。
カーブを通した上で、カラーをフィッティングする
目標画像からカーブの効果を逆算して取り除き、残った差分に対してカラー処理層をフィッティングします。カーブと並列にカラーをフィッティングしてしまうと、カーブが色に与えた影響を二重にカウントしてしまいます。Classic Negative では、カメラがブルーを +11 度回転させているのに対して、モデルが +24 度の回転を要求する破綻が生じました。
カラー層は意図的にシンプルに抑えています。色相環に沿って補間される色相ごとの彩度スケールと色相回転、それに3つのトーン項だけです。各要素がパラメータに対して線形になるように設計されているため、フィッティングは3つの最小二乗法問題を解くだけで厳密に完了します。信用できないブラックボックスの最適化アルゴリズムは使っていません。
どちらの側にも、恒等変換へと引き戻すリッジ正則化(ペナルティ)が必要です。証拠となるピクセルが存在しない色相は、「何もしない」という解に落ち着くべきだからです。トーン項には別の理由で正則化が必要です。中間調コントラスト項、トウ(シャドウ側の寝具)、ショルダー(ハイライト側の寝具)は極めて高い共線性を持ち、ペナルティがないと「コントラスト 2.2」を「シャドウ持ち上げ +59」で打ち消し合うような無意味な解に暴走してしまいます。
モノクロは別個の解析
白黒フィルムはチャンネルミキサーとトーンカーブで構成されます。イエローやレッドのフィルターが変える「チャンネルの混合比」は、各色相がどれほど明るいグレーに変換されるかで決まります。この情報は完成したグレー画像からは消え去っています。しかしペアのもう一方にあるカラー画像には残っているため、カラー情報と突き合わせることで重み付けを探索できます。
モノクロのトーンは3つのパラメータ程度では表現しきれません。モノクロフィルムにおいては、トーン そのもの がフィルムの命です。階調の1/3にまで及ぶ長いトウ(暗部のなだらかな立ち上がり)は、単純な3項モデルでは平均化されて消えてしまいます。既知の5点カーブから作った合成ペアで実験したところ、3項モデルはチャンネルの重みを小数点以下4桁まで正確に復元したものの、トーンで 1.94 L* の誤差を出しました。フルカーブでフィッティングしたところ、誤差は 0.16 に収まりました。
5. 結果をどう評価するか
実写ピクセル全体での ΔE こそが唯一の指標です。 空の青、肌の色、木の葉の緑といった、少数の「記憶色」サンプルだけで判断してはなりません。3つの人工的なサンプル点は、2/3が無彩色に近い実際のピクセル分布を代弁できません。それどころか、フィルムが正しく改善されたまさにそのピクセルについて「以前より悪化した」と誤判定してしまいます。私たちの Negative 系フィルムは、実写の3つのサンプル点でのスコアが悪化した一方で、画像全体の平均 ΔE は 3.67 から 1.47 へと劇的に向上しました。
誤差は彩度帯ごとに分解して確認します。全体としては改善していても、高彩度な色で悪化している変化は見逃してはなりません。Negative の再構築では3つの彩度帯すべてで改善が見られたため、自信を持って製品に搭載することができました:
| 彩度帯 | 改善前(ΔE) | 改善後(ΔE) |
|---|---|---|
| ニュートラル付近 | 2.93 | 0.88 |
| 穏やかな色 | 4.09 | 1.65 |
| 高彩度 | 5.78 | 3.64 |
ターゲットとの比較だけでなく、フィルム同士の距離を測る。 Negative の再構築が始まったきっかけは、「Chrome と Negative の見分けがつかない」というフィードバックでした。これを確認するには、カメラ実機が2つのシミュレーションの間に設けている距離(私たちのテスト画像では 2.2〜5.0 ΔE)と、自分たちのモデル間の距離を比較します。個々のフィルムがターゲットに対してある程度合っているように見えても、2つのフィルムの差異が潰れて同じ色になってしまうことがあるのです。
データが薄い領域をクロスチェックする。 Adobe のカメラマッチングプロファイルは実機から一段離れたものですが、測定は可能です。Classic Negative において、Adobe のプロファイルは「暖色から寒色へと入れ替わる輝度」(私たちの 47 に対し L* 46)、「ハイライトの色相」(私たちの 44.6° に対し 44°)、そして約 2:1 の暖色対寒色比率という点で私たちの実測値と見事に一致しました。ネット上に公開されているフィルムシミュレーションに関する文章は、ほとんどが定性的な印象論の受け売りです。実測されるまでは単なる言い伝えとして扱いましょう。Classic Negative でよく言われる「マゼンタのハイライト」は、グレー上で測定すると色相 44° のアンバー(琥珀色)でした。
6. アプリへの実装基準
私たちが遵守しているいくつかの規律:
- 誤差を明記する。 各フィルムのソースコード注記には、測定された ΔE と写真表現としての振る舞いが記載されています。フィッティングが不十分な場合は、テストの許容範囲をこっそり広げるのではなく、その事実をありのまま記録します。Gold 風フィルムの誤差は 3.54 ΔE であり、シミュレーションではなくカメラの「レシピ」から解析したものである旨が明記されています。
- 名称に他社の商標を使用しない。 フィルム名は、元になった銘柄ではなく、その描写や用途に基づいて命名されています(Chobial Chrome、Chobial Negative、Chobial Portrait など)。
- データ構造のサイズを意識する。 フィルムは QR コードとして共有できる必要があり、パラメータはその容量に収まらなければなりません。カーブの追加によりコードのサイズは約69バイトから約128バイトに増えましたが、QR コードとして十分にコンパクトです。色相回転の範囲は ±32 度で保持されるため、58 度を要求するような異常な解はそもそも共有フォーマットに収まりません。
Chobial で結果を体験する
こうして生み出されたのが、Chobial Standard から Chobial B&W に至る標準搭載フィルムです。その描写を確かめるには:
- カメラに標準フィルムを装填します。ファインダーにリアルタイムで表示され、長押しするとフィルムなしの素の光景を確認できます。
- 既存の写真を開き、エディタの フィルム ツールでフィルムを切り替えます。写真は毎回 RAW から再現像されます(もう一度現像する)。
- 比較 を長押しして素の現像を確認するか、タップしてスライダーを表示します。
- 微調整したい場合は、それをベースに新規フィルムを作成します: フィルム › + › 新規フィルム › ベース。標準フィルムは保護されていますが、複製したフィルムは自由に編集できます(フィルムを自作する)。
7. 今後の課題と技術的限界
- 限界を決めているのはモデルの表現力ではなく、色の網羅性です。 8色相×輝度3段階のグリッドを導入しても、Negative の ΔE は 3.47 から 2.81 に微減しただけで、シャドウでブルーを −38.5°、ハイライトで +35.1° 回転させるという極端な解が出ました。これは単に画像内のノイズに過学習しただけです。3D LUT もパラメータが多いだけで同じ罠に陥ります。キューブの1/20だけ正確で、残りは無変換。カラーチャートの撮影が不可欠です。
- 彩度は色相のみに依存して変化します。 シャドウとハイライトで色のシフト方向が異なるようなフィルムは、現在のモデルでは近似にとどまります。私たちの Gold 風フィルムの肌色はカメラ実機から 27 度ズレており、現在のモデル構造ではこれ以上追い込めません。輝度依存の項を追加する実験では改善が見られたものの(Nostalgia が 2.89 から 2.28 へ)、共有フィルムのデータフォーマットを変更するほどの決定打ではありませんでした。
- 2台のカメラ間では、発色特性と露出測光の癖を完全には分離できません。 私たちのニュートラルは、かつて暖色系において富士フイルムより約6度黄色く転んでいました。現在は日中および室内で並べて撮影した iPhone 17 Pro Max の21カットを基に X100VI の Provia に校正されており、ホワイトバランスは各カメラが独自に決定するためグレーはニュートラルに保たれます。しかし基準露出は X100VI の測光と iPhone の測光の突き合わせに依存しており、Provia の特性というより富士フイルムの測光アルゴリズムの癖が一部混ざっている可能性があります。これを完全に切り分けるには、さらに多くのカメラで検証するか、全フレームにグレーカードを写し込むしかありません。
- ベーストーンはタングステン光下のカフェの2シーンから解かれました。 両方のシーンでシャドウの誤差は 0.11 L* に抑え込まれました。先述のキャリブレーションにより、現在はその先で Provia が要求するあらゆるトーンが反映されています。
これらの手法によって作られたフィルムは、カメラの出力を100%完全にコピーしたものではありません。しかし、どこがどのように異なっているかを正確に把握し、数値として書き記すことができるフィルムです。それは、目分量で「なんとなくそれっぽく」調整したルックとは決定的に異なります。フィルムのカラー段階は .cube LUT として書き出して他のソフトで検証することもでき(iPhone で LUT を作成する)、粒状感についても実測に基づく独自のカーブを採用しています。これについては デジタルの粒状感が偽物に見える理由 で解説しています。
Fujifilm、Provia、Classic Chrome、Classic Negative は富士フイルム株式会社の商標です。Kodak、Gold、Kodachrome、Ektachrome は Eastman Kodak Company の商標です。Chobial はこれらとは関係ありません。
よくある質問
写真からフィルムシミュレーションを測定して再現できますか?
条件を厳密に揃えれば可能です。1枚の RAW ファイルをカメラ内で「ニュートラル」と「目的のシミュレーション」の2通りに現像し、その差異を解析することでルックを抽出できます。異なる日に撮った適当な写真では、露出、ホワイトバランス、被写体の違いがルックと混ざり合ってしまいます。
フィルムシミュレーションの LUT をそのまま使わないのはなぜですか?
数枚の写真から測定した LUT は、写真に含まれていた色については正確ですが、カラーキューブの残りの大部分については何も知りません。私たちの実写フレームは 33 点キューブのわずか 5.8% しかカバーしていませんでした。意味のある少数のパラメータで構成された数理モデルのほうが、数万点を持つ LUT よりも破綻がはるかに穏やかです。
Chobial のフィルムは富士フイルムのシミュレーションと同一ですか?
いいえ。富士フイルムのカメラの描写を測定・解析し、それを iPhone の RAW 現像パイプラインに適用した私たち独自のフィルムです。測定したカットでは極めて近い結果が得られていますが、差が出る領域についても包み隠さず公開しています。
同じ方法で自分だけのフィルムを作れますか?
アプリ内に自動測定ツールはありませんが、同じ種類のコントロール(カーブ、カラーミキサー、スプリットトーン)を使って手動でフィルムを構築できます。フィルムを自作するを参照してください。