質感・ライティング

異方性反射

Anisotropic Reflection

方向によって伸びる金属のハイライトを作る。

5 / 10

インタラクティブデモ

デモを準備しています…

異方性反射

ドラッグで視点を回転、Ctrl(⌘)+ スクロールでズーム。タッチ操作は 2 本指です。

ひとことで

表面の細かな筋が一方向にそろっていると、その方向には滑らか、直角な方向には粗い、という方向によって違う粗さを持ちます。すると、ハイライトは筋と直角の向きに細長く伸びます。これが異方性反射です。ヘアライン加工の金属、鍋の底、CD の表面、髪の毛、サテンの布などに見られます。

ゲームでの使いどころ

  • 金属の加工表現:ヘアライン加工の家電・腕時計・車の内装、旋盤で削った部品、鍋やフライパンの底(同心円状の筋)。
  • 髪の毛:髪の毛の長さ方向に伸びたハイライト(天使の輪)。キャラクターの髪の表現に欠かせません(多くは Kajiya-Kay などの髪専用モデルで表現)。
  • 布:サテン、シルク、ベルベットの光沢。
  • SF 的な質感:武器や機械の金属パネルに筋の向きを変えて配置し、光の当たり方で模様が浮かび上がるデザイン。

しくみ

GGX の粗さ α\alpha を、接線方向 αt\alpha_t と従法線方向 αb\alpha_b の 2 つに分けます。

D(h)=1π αt αb ((h⋅t)2αt2+(h⋅b)2αb2+(h⋅n)2)2D(\mathbf{h}) = \frac{1}{\pi\,\alpha_t\,\alpha_b\,\left(\dfrac{(\mathbf{h}\cdot\mathbf{t})^2}{\alpha_t^2} + \dfrac{(\mathbf{h}\cdot\mathbf{b})^2}{\alpha_b^2} + (\mathbf{h}\cdot\mathbf{n})^2\right)^2}
  • 筋の方向(接線)の粗さを小さく、直角な方向の粗さを大きくすると、ハイライトは直角な方向に伸びます。
  • 異方性の強さ aa から αt=α(1+a)\alpha_t = \alpha(1 + a)、αb=α(1−a)\alpha_b = \alpha(1 - a) のように 2 つの粗さを作るのが一般的です(three.js、Unreal など)。

筋の向きの指定:筋の方向は、表面の接線の向きで決まります。場所ごとに筋の向きを変えたいときは、法線マップと同じ接空間で方向を書いた画像(異方性マップ・方向マップ)を使います。デモの円盤では、円周方向(同心円)・放射方向・一方向の 3 種類の方向マップを切り替えています。

実装のポイント

  • 接線の品質が重要:異方性のハイライトは接線の向きに強く依存します。UV の向きがばらばらだと、ハイライトがちぐはぐな方向に伸びます。
  • 環境反射も伸ばす:点光源のハイライトだけでなく、環境マップの映り込みも方向に伸ばさないと、質感がちぐはぐになります。近似として、反射ベクトルを筋と直角な方向に曲げて環境マップを読む方法がよく使われます。
  • 髪は専用モデルで:髪の毛は、筋の方向(毛の向き)に沿った 2 つのハイライト(白い主ハイライトと色付きの 2 次ハイライト)を持つので、Kajiya-Kay や Marschner のモデルを使うのが一般的です。

つまずきやすい点

  • UV の継ぎ目:方向マップや接線が UV の継ぎ目で不連続になると、ハイライトが途切れます。
  • 強すぎる異方性:強さを最大にすると、ハイライトが極端に細い線になり、ちらつきやすくなります。
  • 中心の特異点:同心円状の方向マップでは、中心で向きが定まらず、ハイライトが乱れます(デモの円盤の中心)。現実の鍋底でも中心は特殊な見た目になります。

デモで試すこと

  1. 円盤(同心円状の筋)では、2 つの点光源のハイライトが放射状の帯になって回ります。鍋底や時計の文字盤でおなじみの見た目です。
  2. 「円盤の筋の向き」を放射方向にすると、ハイライトは同心円状の弧になります。筋と直角な方向に伸びることが分かります。
  3. 手前の棒は、筋が長さ方向にそろった金属棒です。ハイライトが棒の周りを回る方向に伸びています。
  4. 「異方性の強さ」を 0 にすると、右の等方性の球と同じ、丸いハイライトになります。

参考資料

Filament Material System ↗

分野全体の資料で、この項目を直接扱っているとは限りません。