Unity を検索

取り上げているトピック
シェア

Unity 5.3のスタンダードシェーダーでは、私たちは論理ライト、つまりポイントライトやディレクショナルライト、およびイメージベースドライティングのBRDF(双方向反射率分布関数)をGGXに切り替えました。さらに、私たちはキューブマップの実装を完全に見直し、より正確でノイズのない結果をより少ない処理時間で実現しました。(処理時間の改善は5.4で導入されています)GGXと正規化フォン(Normalized Phong)のもっとも特徴的な違いは微小面の分布様式(microfacet distribution profile)で、次のグラフでみられるように以前にくらべてより高く狭いスパイクとそれに続くよりなだらかな変化を実現しています。

GGXと正規化フォンのグラフ。

この変更で、GGX方式による最終的なライティングは下記に見えるようにより明るいハイライトとそれに続く円光(halo)がよりリアルな質感を与えるようになりました。 [caption id="" align="alignnone" width="1024"]

GGXと従来方式の正規化フォンによるライティングの比較。[/caption]

業界互換で比較可能なマテリアル

学術上は物理ベースのBRDF(双方向反射率分布関数)はラフネス(粗さ, roughness) を微小面分布関数のコントロール用変数として使います。学問におけるラフネスはルートとして定義されており、直角なスロープを描くようになっています。よくある誤解に、CGにおいて設定されるラフネスは学問におけるそれと同じだと思うことがあるのですが、実際にはそうではありません。学問におけるラフネスがテクスチャーマップやスライダーに使われないのは「くもり度合い(blur levels)」が均等に分布されておらず、作業がとてもし辛い上にテクスチャーマップの限られたビット数での精度を活かせないという両方の理由があるためです。混乱をさけるため、Unityではスムーズネス(なめらかさ, smoothness) をラフネスのマップの代わりに使います。このスムーズネスは(1-smoothness)^2という式を使って学問におけるラフネスにシェーダー内で変換されます。分布的にはこれはBurley’s roughnessと同等ですが、もっとも粗い(曇った)面を0.0、完全な鏡面反射を1.0にマッピングします。わたしたちはこの方が直感的なことに気がつきました。

標準化された分布の重要性は他のツールで制作したコンテンツをUnityにインポートしたときに近い結果を得られるようにできる点にあります。ほとんどの今日日のCGペイントツールはスムーズネスによる設定をサポートしています。一点明確にしておくと、これは完全な一致を保証しているわけではありません。とはいえ、ディフューズ、スペキュラの明るさ、および全体的なスペキュラの曇り度合いの比例具合は近しくなるはずです。下記のUnityとSubstance Painterの比較イメージはAllegorithmicのWes McDermottさんが提供してくれました。

こちらで見られるように、ビジュアルはとても似通っています。WesさんとAllegorithmicには、本件のコラボレーションと協力的なイテレーションでとてもお世話になったことを改めてここにお礼申し上げます。もし本件についてより深い興味のある方は彼らのPBRとUnity 5についての動画セミナーをチェックすることをお勧めします。

Unity 5.4での改善

Unity 5.4ではキューブマップの畳み込み速度を改善することと、イメージベースドライティング(IBL)で非常にクリーンなビジュアルを得られることに注力しました。下記はUnity 5.4での球のライティングとピクセルあたり50000のレイを使用した伝統的なパストレーサーでの比較イメージです。

こちらで見られるように右側の伝統的なパストレーサーではピクセルあたり50000のレイを用いても大量のノイズが出てしまいます。この理由は基本的なパストレーサー(BRDFインポータンス・サンプリング)が、太陽が物理的に相応な強度で存在するような強い特異点を持つ環境マップではうまく機能しないためです。Unity 5.4はこの問題に対応しており、またオフラインでのキューブマップの畳み込み処理はUnity5.2に比べて約2倍の速度で動作します。

2016年1月25日 カテゴリ: テクノロジー | 3 分 で読めます
取り上げているトピック