物理ベース特徴線レンダリング
これはレイトレ合宿8アドベントカレンダーの7月10日の記事です。
ついにレイトレ合宿が再始動とのことでPBR過激派の皆様お元気でしたでしょうか。 トゥーンシェーディング滅ぶべし。 (※参加者はそんな人ばかりではありません)
そんな中のSIGGAPH Asia 2021、なんと物理ベースのラインのレンダリング手法なるものが現れていました。
ラインなんて錯覚だぞ、気は確かか、経口補水液持ってこようか、と言いたくなりますがちゃんとした論文です。
PBRとNPRの友好のきっかけになるかもしれない手法、早速見てみましょう。
概要
Physically-based Feature Line Rendering
件の論文はこちらです。 レイトレでラインを描く手法がまとめられていて入門にも良さそうです。 英語の論文が怖く無い人はこんな記事読んでないで原本を読んだ方が早くて正確でしょう。
スライドの動画も分かりやすいです。 英語の動画が怖く無い人は(ry
というわけで大雑把に言うと、この手法の肝はラインになると判定した経路を光源に到達したことにするというものです。それによって通常のパストーシングに無理なく組み込めるという寸法です。
前知識
まずはラインについてです。 Feature Lineという言い方をしていますが、要は特徴が変化した場所に引かれるラインです。 例を挙げると、
- オブジェクトの輪郭
- 角度が急に変化する場所(角や折り目)
- 異なるマテリアルの境目
と言ったようにさまざまなものが考えられます。 このような部分をどうにかして検出して、そこにに線の色を乗せるのがラインをレンダリングするということです。
そしてラインを検出する方法は大きく3つに分けられます。
- オブジェクトベースの手法
- スクリーンベースの手法
- レイベースの手法
この3つです。
オブジェクトベースの手法はオブジェクトのジオメトリからラインを検出するものです。 クオリティの高いラインを描画できますが、ジオメトリの複雑さに比例して処理時間が鰻登りになる傾向があります。
スクリーンベースの手法は画像フィルター的なアプローチでラインを検出するものです。 処理の時間はレンダリング解像度に依存するので、複雑なシーンでもリーズナブルに適用できます。 一方で解像度に依存した情報量しか扱えないのでクオリティに限界があります。
そしてレイベースの手法はスクリーン上でレイを投げてそのピクセルがラインになるか判定することでラインを検出するものです。 レイを投げるのは解像度単位で、扱う情報はオブジェクト単位という両者の良いとこ取りができそうな手法です。
そしてこの手法はレイベースの手法になります。
レイベースの手法
レイを使ったラインの検出は割と単純な仕組みです。
- まずはレンダリング用のレイを飛ばします。
- 次にそのレイの周囲にスクリーンスペースでラインの幅になる半径に検査用のレイを飛ばします。
- 検査用のレイがレンダリング用のレイと違う特徴を持っているものに到達したら、そのピクセルはラインの一部であるとします。
図はPhysically-based Feature Line Renderingから引用したものです。
検査のために比較する特徴は、いくつかを組み合わせるとより良い結果が得られます。この論文では下のものを利用したそうです。
- メッシュID
- アルベド
- 法線
- 深度
アルベドや深度は差の絶対値が閾値を超えたら、法線はなす角度が閾値を超えたらラインとして検出されるように設定されています。
パスベースの手法
せっかくレイでラインを検出するならレイトレと組み合わせて、反射した先のラインが描けたりしないかと考えるのは自然なことでしょう。
そこでレイベースの手法を拡張して反射した先まで考慮する、パスベースの手法を考えます。
とはいえこれについてはSIGGRAPH Asia 2018で発表された Production ray tracing of feature lines ですで実現されています。 Solid Angleの人が著者なのでArnoldのエッジはこちらの手法がベースなのでしょう。
ただこちらの手法では完全鏡面ではない、荒い鏡面では見栄えが良い結果にならないそうです。 というのも結局パスでラインを検出していても、最終的にポストプロセスでラインを乗せるように扱っているためです。
しかしモダンなレンダラーと組み合わせるなら荒い鏡面や被写界深度、さらには色収差などでも良い感じにラインが出てくれたら最高です。
それを実現するためにこの手法がとった方法が、光源に到達したことにする、というものです。
図はPhysically-based Feature Line Renderingから引用。
これもまあ見たままです。 言われてみれば単純なアイデアなのですが、これで無理なくパストレーシングに組み込むことができます。 つまりパストレーシングで享受できる物理ベースのエフェクトが勝手についてくるということです!
未来へ向けて
さてこちらが実装です、と言えれば格好いいのですが諸事情によりそんなものはありません。 実装についても詳しく書かれているので興味が湧いた人はこんなところを読んでいないで(ry
レイトレ合宿でラインレンダリングは第2回でuimacさんがやっていたくらいな気がするので独自色を出すのにちょうど良いかもしれません。
この論文は最後に、今のままではパストレでしか使えないから双方向パストレなどで使えるようにできると良いとか、拡散面のような反射の範囲が広いものではラインの検査に使うレイのキャッシュが役に立たないのでどうにかならないか、などと結構意欲的なことが書いてあります。
まだ初歩的なものなのでしょうが、これこそが安直なトゥーンシェーディングを葬り去る PBRとNPRの架け橋になってくれる小さな一歩になるのかもしれません。
未来はレイとフォトンに溢れていることでしょう。