Cycles でカーペイントシェーダーを作る

f:id:lunar0:20200409025022p:plain

ダウンロード:Github

概要

Blender 標準のレンダラ Cycles でカーペイントシェーダを作ってみた.最近のカーペイントは,たとえば Mazda 3 の赤などで顕著なように,角度がつくと色が濃くなると同時に,混入されたフレークがきらきらと光るものが多い.これを再現するシェーダは Cycles にはないが,ノードを組合せてそれっぽく作ることができる.

リミテーション.このシェーダでは,以下のようなものが再現できない.

  • 複数層にわたるフレークやペイントの層.
  • フレークの重なり.
  • フレーク自体の高度なシェーディング.

より高度なシェーダとして,たとえば商用レンダラの Arnold にはフレーク専用の機能がある.Arnoldも自動机の刑か……

考えるモデル

f:id:lunar0:20200409032059j:plain
今回考えたモデルにおける光の経路

図のようなモデルを考える.簡単のため,フレーク2枚以上に関係する光は考えない.また,透明顔料の厚みを 1 とした.

  • A:クリアコートの反射
  • B:フレークで反射されて返ってくる光.この光につく色は,フレークの反射色 × 距離 2d*arccosθ 分の透明顔料による吸収
  • C:フレークを透過し,底面で反射されて返ってくる光.この光につく色は,フレークの透過色 × 距離 2*arccosθ 分の透明顔料による吸収 × 底面の色
  • D:底面で反射されて返ってくる光.この光につく色は,距離 2*arccosθ 分の透明顔料による吸収 × 底面の色

実際は顔料は完全に透明ではないので,クリアコート以外の計算結果を拡散反射とブレンドすることで不透明性をシミュレートしたことにする.

パラメターの設定

実際に使うときにはいくつかパラメターを追加したほうが便利なので,以下のものを設定できるようにした.煩雑になるので,太字以外は Input ノードを繋げていない.

  • 透明顔料
    • 透明顔料の色 (Transparent Pigment Color)
    • 底面の色 (Base Color)
    • 底面の粗さ (Base Roughness)
  • フレーク
    • フレークの反射色 (Flake Color)
    • フレークの粗さ(Flake Roughness)
    • フレーク基材の透過色((実際に透過する色は (白-反射色) * 透過色 になる)) (Flake Transmission Factor)
    • フレークのサイズ (Scale)
    • フレークの分布する深さ範囲 0.0-1.0 (Flake Depth Min, Max)
    • フレーク色のランダムさ (Flake Random Color, Saturation)
    • フレークの密度 (Density)
    • フレーク法線のランダムさ(左下の Mix ノードを参照)

f:id:lunar0:20200409033056p:plain
ノード構成