目次/第12章
焼き色は、形と相関している
browning — 焼き色は飾りではない
- 焼き色を無関係なノイズで塗ると、「焼けた」ではなく「汚れた」ように見えます。
- 実物は、鉄板に当たった凸部が濃く、折り込みの溝は淡い。形と結びついています。
- だから形とテクスチャは、同じ種・同じ場から作らなければいけません。
第I部の11章は、野菜編とほとんど同じ話でした。ここからが料理の本題です。 14本のサンプルのうち、9本には火が通っています。 そして「火が通っている」の見た目は、ほぼすべて焼き色で決まります。
焼き色を作るのは簡単に見えます。茶色のノイズを表面に乗せればよさそうです。 ところが、それをやると失敗します。たこ焼き.js のコメントに、こうあります。
理由は物理的です。焼き色(メイラード反応)は、熱が伝わったところで進みます。 熱源に近い出っぱりから焦げ、へこみには熱が回りません。 だから焼き色の分布は、形のでこぼこの写しになります。 形と関係ないムラを乗せると、脳は「焼けた」ではなく「別のものが付着している」と読みます。
実験 — 焼き色を、形と結びつける / 切り離す
でこぼこの量は3つのモードで同じです。変えているのは「焼き色を何から決めるか」だけ。
それでも、無関係なノイズにした瞬間に、焼けたようには見えなくなります。
立体はドラッグで回せます(触ると自動回転は止まります。ダブルクリックで戻ります)。
上から覗くと、焼き色が折り込みの尾根に沿っているかどうかがはっきりします。
同じ種から、形とテクスチャの両方を作る
相関させるには、実装上の工夫が要ります。テクスチャを描くのはテクスチャの担当、 形を作るのは形の担当、と分けてしまうと、この2つはもう結びつきません。
たこ焼き.js は、「柄」という単位を導入して解決しています。 柄の種をひとつ決めると、そこから生地の折り込みの場と、その場から作った焼き色が 両方出てくる。8個のたこ焼きには4種類の柄を割り当て、 大きさ・向き・傾きだけを個体ごとに変えます。
// 6. Pattern : 形状 + テクスチャ(4種のアトラス) // 同じ patternSeed から、でこぼこの場と焼き色の両方を作る const field = foldField(patternSeed); // 折り込みの高さの場 const tex = bakeCrust(patternSeed, field); // その場から焼き色を焼く // 【対策】全個体ぶんのテクスチャを焼くと 1024² × 3枚 × 8個 で数十秒。 // 4柄だけ焼いて 2x2 のアトラスにまとめ、UV で切り替える
焼き色は「全面を覆ってはいけない」
もうひとつの落とし穴が、焼けている面積です。 焼き魚(サンマ).js の修正記録の第1項目がこれです。
焼き目は「点在する丸い斑」であって、全体のグラデーションではありません。 焦げの面積を1割減らすだけで、料理は一気に実物に近づきます。 クッキーも同じで、縁・高いところ・底が濃く、型押しの凹部は熱が回らないので白く残る。 ここが逆だと一気に嘘になります。
割れ目の中は、周囲より明るい
クッキーやトーストの割れ目を、暗い線で描くと焦げた溝になります。 実物の割れ目は、焼けたあとに生地が広がって裂けた跡なので、 中は焼けていない生地が露出しています。つまり周囲より明るい。 焼き色を「形から決める」という原則を守ると、これも自然に出ます。 割れ目は熱源から見て奥まっているからです。
焼き色は、色だけでなく粗さも変えます。 焦げた部分は炭化して光りません。ウィンナー.js には 「炭化した黒い点だけが局所的に粗い(そこだけ光らない)」とあります。 色の画像だけ焼き分けて ORM を一様にすると、 焦げているのにてかてか光る、という気持ちの悪いものができます。
油の膜は、焼き色の上に乗ります。 たこ焼きの高台は「油でぬれて明るい」(crustWet)。 焼き色を計算したあと、そのうえに濡れの層を掛けるという順番が要ります。
- 3つのモードを切り替え、どれが「焼けている」に見えるか判定する。
- 「形と相関させる」のまま、でこぼこを 0 にすると何が起きるか確かめる。
- 焼き加減を 1.0 にして、全面が焦げると料理に見えなくなることを確かめる。
- クッキー.js で「割れ目」を検索し、なぜ明るいのか読む。