目次/第07章
「照り」「ぬれ」「粉っぽさ」を数値で言う
physically based rendering — 物理ベースの質感
- PBR では、質感を粗さ・金属度・透けなどの数値の組で表します。
- 食べ物でいちばん効くのは粗さと、上に乗った透明な膜(クリアコート)です。
- 「おいしそう」は、たいてい膜の艶と光の通りの2つで決まります。
同じ形の団子でも、艶があれば茹でたて、粉をふいていれば時間が経っている。 その差を、絵ではなく数値で言えるようにしたのが PBR です。 色(アルベド)とは別に、次のような数値を面ごとに持たせます。
| 数値 | 意味 | この14本での使いどころ |
|---|---|---|
| roughness | 表面のざらつき。0 で鏡、1 で完全につや消し | ほぼ全部。焼けた所とそうでない所で必ず変える |
| metallic | 金属かどうか。食べ物はふつう 0 | 秋刀魚の銀でも 0.22 までしか上げない |
| clearCoat | 上に乗った透明な膜。ワックスや水の膜 | たれ・ソース・米の水膜・チョコの艶 |
| subSurface | 光が中に入って散る。厚みで色が変わる | 団子・赤身・大根おろし・米 |
| sheen | 布のような、縁がふわっと光る反射 | かつお節・大根おろし・衣 |
| iridescence | 薄い膜の干渉で出る虹色 | 秋刀魚の銀(構造色) |
実験 — 粗さ・膜・透けを動かす
粗さを 0.05 まで下げると、どの料理もプラスチックの成型品になります。
食べ物の艶は「鋭い」のではなく「広くにじむ」ものです。
立体はドラッグで回せます(触ると自動回転は止まります。ダブルクリックで戻ります)。
艶の見え方は角度でまるで変わるので、回しながら決めてください。
粗さは、一様であってはいけない
いちばんよくある失敗が、粗さを1つの数値で決めてしまうことです。 たこ焼き.js のコメントにこうあります。 「均一な鏡面はプラスチックの成型品。乾きかけた縁はざらつき、たまりだけが鏡になる」。 ソースの艶にムラを入れて初めてソースに見える。 だから粗さは1つの数値ではなく、06章で作った1枚の画像として持たせます。
クリアコートは、掛け算で効く
クリアコートは「下地の上に透明な膜を1枚のせる」機能です。 強さ(intensity)と、その膜自体の粗さ(roughness)を別々に持ちます。 ここで初心者が必ずはまるのが、強さを上げると下地まで一緒に明るくなることです。 膜が反射した光と、下地から返ってきた光が足し算されるためで、 黒いチョコレートに強い膜をかけると、真っ黒なのに白く光る妙なものになります。
粗さ 0.055 は車の塗装の値です。 ご飯.js に、米粒の水膜をこの値にしたときの記録が残っています。 「この鋭さだと1粒に1つ小さな鏡ができ、白い錠剤が並んでいるように見える。 炊飯米の水膜はもっと広くにじんだ照りになる」。実測ではなく見え方で決めています。
metallic を上げてはいけません。 秋刀魚の銀色は色素ではなく、グアニンの結晶による構造色(薄膜干渉)です。 metallic を上げると「魚の形をしたスプーン」になります。 焼き魚(サンマ).js は metallic を 0.42 から 0.22 に落とし、 代わりに iridescence(虹彩)を使うように直した経緯が書かれています。
- 「チョコ」を選び、粗さを 0.03 にして、食べ物に見えるかどうか判定する。
- 「団子」で透けを 0 にすると何に見えるか、言葉にしてみる(石膏か消しゴム)。
- 膜の強さを上げたとき、下地の色が変わって見えるかどうか確かめる。
- 焼き魚(サンマ).js で iridescence を検索し、なぜ metallic ではないのか読む。