以下の内容はhttps://hanecci.hatenadiary.org/entry/20170408/p14より取得しました。
概要
- まず, 「ゲーム向けの標準的な物理ベースシェーディング(PBS)の実運用時の良し悪し」については実際に手を動かしているゲーム開発者(プログラマ, アーティスト)なら既にわかっているかと思います.
- 一方で Twitter のタイムラインを見ていたときに, ゲーム向けの標準的な物理ベースシェーディング(PBS)について「物理的に正しい」と勘違いしている人がいそうということがわかりました.
- そういうのは普段だったら面倒なので適当にスルーしているのですが(汗), たまたまゲーム業界に影響力がありそうな人が言っていて「これはあんまり良くないなぁ...」と思いました.
- あと 「物理的に正しい」という言い方だと, 妙に「万能で制限がないようなイメージ」もあるかと思います. ( その抽象的な言葉で思考が停止することがあるのも良くないと思っています. )
- ということで, ちょっとここに個人的な意見を書いてみようかと思いました.
結論
- ゲーム向けの標準的な物理ベースシェーディング(PBS)について「物理的には正しい(異論は認めないよ)」は言い過ぎで、「物理を意識しながら, ゲーム向けに簡略化したモデル・近似計算」ぐらいだと正直, 思っています.
- シェーダで現段階の近似だらけの式を実装している際に, 「これは物理的に正しい」と言い切ることについてはかなり後ろめたさを感じます.
- そのため,「それがうまく当てはまる特定の質感」が自然に見えるだけで, できる表現に制限があります. なので, 万能の武器では全くないです.
具体的な実装例について
- 今回の話をする上で ある程度具体性が必要かと思うので, この記事での「ゲーム向けに標準的な PBS」ではわかりやすく UE4.15 や Unity 5.6 での実装を前提に話します.
- もしソースコードが気にある方は下から取得して下さい.
- ※ またこの記事ではオフラインのレンダラーの場合については話の対象外にさせていただきます.
理由
- ではゲーム向けの標準的な物理ベースシェーディング(PBS)の「制限」や「物理的に正しいは言い過ぎ」の理由をいくつか挙げておこうかと思います.
- まず, ゲーム向け PBS では反射モデルを ディフューズ反射(Lambert or Disney Diffuse)とスペキュラ反射( Cook-Torrance )に分離して計算しています. 世の中の物質の反射はこの 2 つの反射モデルの分離で綺麗に表せるわけではありません.
- 物体の表面を細かいマイクロファセットと近似するスペキュラモデルで表現できるものって, 限定的だと思いませんか ?
- 表面化散乱, 異方性反射, 透過や屈折といった現象が起こる場合, ゲーム向けの標準的な PBS だけでは表現できないものが多数あります.
- 具体的には 肌 SSS, 目, 髪, 布, 磨いた金属, 葉や植物の SSS, ラメなど
- これへの対策方法の 1 つとして, UE4.15 だと Fake SSS や 肌用のシェーダ(PreIntegrated Skin, Separable Subsurface Scattering)や 髪・目・布用の特殊シェーダがあるのだと思います.
- 「物理的に正しい」ラフネスの値って, 一意に決まらないと思います. というのは ゲーム向け PBS だとラフネスはスペキュラ反射のクックトランスへの入力パラメータで, マイクロファセットの分布関数 D(h) が GGX であることを前提していて, そもそも世の中のスペキュラ反射がすべて綺麗にこの式で表せるわけではないからです.
- メタリックを使う場合に, 典型的な実装だとスペキュラカラーを求める際に非金属では (0.04, 0.04, 0.04)とベースカラーとの線形補間をメタリックで行ってその結果をスペキュラカラーにして, フレネル反射の近似計算の F_0 として計算します. これって物理的に正しいのでしょうか? 正しくないですよね.
- AO マップをディフューズシェーディングやスペキュラシェーディングの結果に対して素で乗算しているケースがあります. しかも, AO の計算方法やパラメータ自体もツールによってばらばらだと思います. ( レイの本数や長さなど)
- というか, AO 自体 半球方向の遮蔽率をスカラー値で表したものなので, それを指向性タイプの punctual light のシェーディング時にそのまま乗算している時点で物理的に正しくないです.
- あとライティングの話になると, UE4 や Unity 5.6 だと 直接光のシェーディングはいまだに punctual light がメインで, エリアライト対応についてはリアルタイム向けの近似計算でしかないです.
- こういうことを挙げた結果を見ると, 「ゲーム向けの標準的な物理ベースシェーディング(PBS)」が物理的に正しいと言い切ることや, それで全ての質感が表現できるという考え方はおこがましいと思いませんか?
最後に
- 繰り返しになりますが「ゲーム向けの標準的な物理ベースシェーディング(PBS)」について物理的に正しいは言い過ぎで, 物理に基づいているけどまだまだ表現に制限があるぐらいのニュアンスだと思います.
- もしかしたら この記事自体 PBS 批判のように聞こえるかもしれませんが, 僕自身, ゲーム向けの標準的な物理ベースシェーディング(PBS)が嫌いなわけではなくて, かなり好きです.
- 特に SIGGRAPH の Physically based shading のコースのおかげで, 技術が進化してゲームでのシェーディングの表現力は飛躍的に良くなったと思います.
- しかし, それを「物理的に正しい」と勘違いして, 過剰評価することについては強い違和感を感じています.
以上の内容はhttps://hanecci.hatenadiary.org/entry/20170408/p14より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます
不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14