【コラム】

3Dグラフィックス・マニアックス

61 表面下散乱によるスキンシェーダ(5)~表面下散乱とスキンシェーダ(3)

61/99

結局、陰影処理を行うのは顔モデルの表面のポリゴン上のピクセルだけなので、そこで、ある点に入射した光が、その周辺に対してどのような拡散光となって帰ってくるのかを調べてみる。

これは、一本の光のビームを皮膚に対して垂直に照射したときに照射点から半径rではどんな色の光がどのくらいの明るさになっているかを求めて計測する。この結果を特に「反射率拡散プロファイル」(RDP:Reflectance Diffusion Profile)と呼ぶ。

皮膚に照射した一本の光ビームが皮膚下でどのように散乱して出てくるのかをその分布を測定する

実際の計測の様子。全方位に同じ結果が得られると仮定しているため計測器は一次元(線分)状センサとなっている。「Analysis of Human Faces using a Measurement-Based Skin Reflectance Model」(Tim Weyrich,SIGGRAPH 2006)より

下の図は「反射率拡散プロファイル」(RDP:Reflectance Diffusion Profile)をグラフ化したものだ。縦軸が反射率(出射光の輝度)、横軸が光を照射した位置からの距離を表す。つまり遠くに行けば行くほど赤が強く残ることを意味している。ここでは特に光の赤R,青B,緑Gで半径距離と反射率との関係が全く異なっているという点について注目しておきたい。

「反射率拡散プロファイル」(RDP:Reflectance Diffusion Profile)をグラフ化したもの

RDPを二次元平面上に可視化したもの

フィルタ径の異なる複数回のガウスブラーの結果で複数層による光散乱を近似実装

全ての表皮上のピクセルがこのRDPに従って皮下散乱して帰ってくると仮定してやれば、複雑な皮下散乱をこれで簡易実装できるのではないか。

しかし、この理屈がうまく行くのは、その表皮面ピクセルに対して垂直に光を照射したときだけだ。しかし、もし、この条件が使えるならば、皮下散乱は全表皮ピクセルに対して、このRDPに従ったボカしを実行すればいい。

表皮面に対しての垂直に入っていく光というのは、厳密には求められないが、それでもほとんどは脂質層を抜けてきた拡散光のことということができる。これはつまり、拡散反射の陰影処理を行って普通に画像テクスチャマッピングをした結果と仮定できる。

そしてRDPに従ったボカしは、各顔面上のピクセルに対して均等に行う必要がある。このボカしを実行するためには、ちょっと変わったプロセスをとる。

ピクセル陰影処理(実際のレンダリング)の計算はちゃんとした3D実空間で行うが、その出力(描き出し)は、その3Dモデルの皮を切り開いて2Dの紙に貼り付けたような座標系に対して行うのだ。立体を紙に転写するような……イメージ的には魚拓、あるいは地球の地図のような感じだ。

拡散反射計算と画像テクスチャリングは3D空間上で行うが、レンダリング結果をこのように3Dモデルを切り開いたような2D空間上で行う

これを、今度は2D座標系(テクスチャ座標系)で、前出のRDPに従う形でボカしてやるのだ。これでまだ細かい問題は残るが表皮は皮下散乱した陰影結果へと近づく。

テクスチャ座標系で平面としてRDPに従ってボカしてやる

このままではただの魚拓画像なので、今度はこれを3Dモデルにちゃんとテクスチャマッピングし直してやる。これで皮下散乱したライティングの終了した顔モデルの完成となる。 ただし、ただぼかすだけは不十分で、そのブラーのさせ方には工夫が要る。

なぜならば前段で取りあげたRDPをもう一度見てもらうと分かるが、散乱の仕方が光のRGBの各成分によって異なるためだ。そのため、各ボカし半径ごとに、RGBの各成分が異なる減退率でボカし、それらを全て合成してやる必要があるのだ。

NVIDIAの実装ではボカし処理はガウスボカし(ガウスフィルタ)を採用し、ガウスフィルタの特性を活用して左右と上下に2回に分けて実行する方法を採用している。さらに、そのブラーの際には各RGBごとに重みを付けて、なおかつブラーの半径を変えて、合計6回行っている。これが前回の「複数層」の概念の再現に相当するわけだ。

テクスチャ座標系でのブラーの概念図。ガウスぼかし(ガウスフィルタ)は左右と上下に2回に分けて実装できるのが特徴で、GPU向きの処理といえる(ここの映像の結果はあくまで概念説明のための例で、実際のブラーの結果とは違う)

異なるブラー半径ごとに異なるRGBごとの重みをつけてガウブラーを6回行っている。この表は前出のRDPに従うように生成されたガウスフィルタのフィルタ径ごとのRGB重み係数。上段が中心部に相当し、下段にいくほど外周。外周ほど赤成分が強く残る前出のRDPがこの表からも確認できる

6回分の異なるフィルタ径でボカした結果。左端が最も狭く、右端が最も広い。左端が前出の表の最上段の重み係数でブラーしたもの、右端が表の最下段の重み係数でブラーしたものになる

ブラー無しのオリジナルと6枚分のブラー結果を全て合成したもの

皮下散乱ブラーによって生成された複数のブラー結果はリニア合成される。この合成結果が皮下散乱成分であり、これもう一度3Dモデルに対して、最初に求めた脂質層での反射の結果(KS BRDF+フレネル反射)と一緒にテクスチャマッピングを適用すれば完成となる。(続く)

ここまでのプロセスのフロー図。左下のストレッチ補正については後述

(トライゼット西川善司)

61/99

インデックス

連載目次
第99回 3D立体視の解体新書 - 立体視という知覚(4)~単眼立体視と両眼立体視の有効範囲の考察
第98回 3D立体視の解体新書 - 立体視という知覚(3)~両眼立体視
第97回 3D立体視の解体新書 - 立体視という知覚(2)~単眼立体視(2)
第96回 3D立体視の解体新書 - 立体視という知覚(1)~単眼立体視(1)
第95回 人工知性でコンテンツを生成するプロシージャル技術(19)
第94回 人工知性でコンテンツを生成するプロシージャル技術(18)
第93回 人工知性でコンテンツを生成するプロシージャル技術(17)
第92回 人工知性でコンテンツを生成するプロシージャル技術(16)
第91回 人工知性でコンテンツを生成するプロシージャル技術(15)
第90回 人工知性でコンテンツを生成するプロシージャル技術(14)
第89回 人工知性でコンテンツを生成するプロシージャル技術(13)
第88回 人工知性でコンテンツを生成するプロシージャル技術(12)
第87回 人工知性でコンテンツを生成するプロシージャル技術(11)
第86回 人工知性でコンテンツを生成するプロシージャル技術(10)
第85回 人工知性でコンテンツを生成するプロシージャル技術(9)
第84回 人工知性でコンテンツを生成するプロシージャル技術(8)
第83回 人工知性でコンテンツを生成するプロシージャル技術(7)
第82回 人工知性でコンテンツを生成するプロシージャル技術(6)
第81回 人工知性でコンテンツを生成するプロシージャル技術(5)
第80回 人工知性でコンテンツを生成するプロシージャル技術(4)
第79回 人工知性でコンテンツを生成するプロシージャル技術(3)
第78回 人工知性でコンテンツを生成するプロシージャル技術(2)
第77回 人工知性でコンテンツを生成するプロシージャル技術(1)
第76回 3Dモデルの変形までが可能な動的PRT(5)~SH Exp演算の大胆な近似による高速化
第75回 3Dモデルの変形までが可能な動的PRT(4)~SH Log演算とSH Log次元における遮蔽の統合
第74回 3Dモデルの変形までが可能な動的PRT(3)~帯域調和関数(Zonal Harmonics)の導入
第73回 3Dモデルの変形までが可能な動的PRT(2)~SH LogとSH Expとは?
第72回 3Dモデルの変形までが可能な動的PRT(1)~3Dモデルの変形に対応した動的PRT技術の台頭
第71回 限定条件付き動的PRT(2)~PSF技法におけるライティング
第70回 限定条件付き動的PRT(1)~動的PRT第一段階PSF技法とは?
第69回 事前計算放射輝度伝搬(PRT)~PRTの基本。静的PRT(4)
第68回 事前計算放射輝度伝搬(PRT)~PRTの基本。静的PRT(3)
第67回 事前計算放射輝度伝搬(PRT)~PRTの基本。静的PRT(2)
第66回 事前計算放射輝度伝搬(PRT)~PRTの基本。静的PRT(1)
第65回 事前計算放射輝度伝搬(PRT)~PRTとは?
第64回 表面下散乱によるスキンシェーダ(8)~表面下散乱とスキンシェーダ(6)
第63回 表面下散乱によるスキンシェーダ(7)~表面下散乱とスキンシェーダ(5)
第62回 表面下散乱によるスキンシェーダ(6)~表面下散乱とスキンシェーダ(4)
第61回 表面下散乱によるスキンシェーダ(5)~表面下散乱とスキンシェーダ(3)
第60回 表面下散乱によるスキンシェーダ(4)~表面下散乱とスキンシェーダ(2)
第59回 表面下散乱によるスキンシェーダ(3)~表面下散乱とスキンシェーダ(1)
第58回 表面下散乱によるスキンシェーダ(2)~ハーフライフ2で採用の疑似ラジオシティライティング(2)
第57回 表面下散乱によるスキンシェーダ(1)~ハーフライフ2で採用の疑似ラジオシティライティング(1)
第56回 水面の表現(5)~大きな波
第55回 水面の表現(4)~水面のライティング(2)
第54回 水面の表現(3)~水面のライティング(1)
第53回 水面の表現(2)~動的なさざ波
第52回 水面の表現(1)~水面表現の歴史
第51回 HDRレンダリング(11)~トーンマッピング
第50回 HDRレンダリング(10)~HDRブルーム/グレア処理
第49回 HDRレンダリング(9)~HDRテクスチャ
第48回 HDRレンダリング(8)~HDRレンダーターゲット
第47回 HDRレンダリング(7)~HDRレンダリングのプロセス
第46回 HDRレンダリング(6)~HDRレンダリングの歴史と動向(2)
第45回 HDRレンダリング(5)~HDRレンダリングの歴史と動向(1)
第44回 HDRレンダリング(4)~HDRレンダリングの第三の効能
第43回 HDRレンダリング(3)~HDRレンダリングの第二の効能
第42回 HDRレンダリング(2)~HDRレンダリングの第一の効能
第41回 HDRレンダリング(1)~HDRレンダリングとは?
第40回 ジオメトリシェーダ(11)~ジオメトリシェーダを活用した新表現(7)
第39回 ジオメトリシェーダ(10)~ジオメトリシェーダを活用した新表現(6)
第38回 ジオメトリシェーダ(9)~ジオメトリシェーダを活用した新表現(5)
第37回 ジオメトリシェーダ(8)~ジオメトリシェーダを活用した新表現(4)
第36回 ジオメトリシェーダ(7)~ジオメトリシェーダを活用した新表現(3)
第35回 ジオメトリシェーダ(6)~ジオメトリシェーダを活用した新表現(2)
第34回 ジオメトリシェーダ(5)~ジオメトリシェーダを活用した新表現(1)
第33回 ジオメトリシェーダ(4)~ジオメトリシェーダのアクセラレーション的活用(4)
第32回 ジオメトリシェーダ(3)~ジオメトリシェーダのアクセラレーション的活用(3)
第31回 ジオメトリシェーダ(2)~ジオメトリシェーダのアクセラレーション的活用(2)
第30回 ジオメトリシェーダ(1)~ジオメトリシェーダのアクセラレーション的活用・ステンシルシャドウボリューム技法の影生成を加速する
第29回 影の生成(10)~改良型デプスシャドウ技法(5)
第28回 影の生成(9)~改良型デプスシャドウ技法(4)
第27回 影の生成(8)~改良型デプスシャドウ技法(3)
第26回 影の生成(7)~改良型デプスシャドウ技法(2)
第25回 影の生成(6)~改良型デプスシャドウ技法(1)
第24回 影の生成(5)~デプスシャドウ技法
第23回 影の生成(4)~ステンシルシャドウボリューム技法(2)
第22回 影の生成(3)~ステンシルシャドウボリューム技法(1)
第21回 影の生成(2)~投射テクスチャマッピング技法
第20回 影の生成(1)~3Dグラフィックスにおける2つのカゲの存在
第19回 バンプマッピングの先にあるもの(3)~セルフシャドウ付き視差遮蔽マッピング
第18回 バンプマッピングの先にあるもの(2)~視差遮蔽マッピング
第17回 バンプマッピングの先にあるもの(1)~視差マッピング
第16回 微細凹凸表現の基本形「法線マップ」(3)
第15回 微細凹凸表現の基本形「法線マップ」(2)
第14回 微細凹凸表現の基本形「法線マップ」(1)
第13回 3Dグラフィックスの概念とレンダリングパイプライン(5)
第12回 3Dグラフィックスの概念とレンダリングパイプライン(4)
第11回 3Dグラフィックスの概念とレンダリングパイプライン(3)
第10回 3Dグラフィックスの概念とレンダリングパイプライン(2)
第9回 3Dグラフィックスの概念とレンダリングパイプライン(1)
第8回 GPUとシェーダ技術の基礎知識(8)
第7回 GPUとシェーダ技術の基礎知識(7)
第6回 GPUとシェーダ技術の基礎知識(6)
第5回 GPUとシェーダ技術の基礎知識(5)
第4回 GPUとシェーダ技術の基礎知識(4)
第3回 GPUとシェーダ技術の基礎知識(3)
第2回 GPUとシェーダ技術の基礎知識(2)
第1回 GPUとシェーダ技術の基礎知識(1)

もっと見る

関連キーワード

人気記事

一覧

新着記事