リアルタイムレンダリングにおけるPtex手法について

CEDEC 2014でお話させて頂いた、リアルタイムPtex手法に関してです。

発表時のSlides
http://goo.gl/wtQgjJ
(アニメーションが入っているので、PPTを読める人はDLしてご覧ください。読めない人はGoogle Slidesで再生してご覧いただければ、殆どのアニメーションシーケンスは正しく再生されると思います。どうしてもPDFが欲しい人は、Cloud Convertを使ってみてください。)

基本は、上記の資料を参照していただければと思います。以下はプレゼン時にあまり触れなかった話題についてです。

Bindlessの速度

Binless化した場合でも実行速度に差が無いという話をしましたが、その根拠となる部分のスライドは実はHideしていました。
Slide Deckには残っているので23ページあたりを参照していただければと思います。BindされたSamplerに対して、動的Indexでアクセスするコードを書くと、Bindlessとほぼ等価なコードが出力されるようです。従って、実行性能はほぼ等価となるはずです。
もうひとつBindlessのトピックとして挙げられるのは、Ptexの全てのテクスチャをTex2DArrayではなく、Tex2Dで保持し、Bindless化してアクセスする方法です。こちらは速度の低下が顕著でした。
もうひとつ試したコードでは、Tex2DArrayひとつ辺りの配列長の上限を意図的に短く(<10)にして、多数のArrayを用いた場合の速度の傾向を調べました。こちらは、ある一定以下のTex2DArrayの数では、速度の低下は殆ど観測されなかったのですが、とある値を境目に速度の低下が顕著に現れました。おそらくですが、GPU内で、同時にスケジューリングされるTexture Samplingの中で、使用できるSamplerの数(=アクセスできるTextureの数)に上限があるのかもしれません。これを上回ると、同時にSamplingをスケジューリングすることが出来なくなり、速度低下を招くのでは無いかと思われます。

Transition Quadについて

Transition Quadが無い状態では、アーティストのオーサリングがかなり限定された状況となり、プロダクションにおける実用には堪えないと思います。逆に、これを導入できれば、処理速度はさておき、ポリゴンにおけるリアルタイムPtexも実用化の目処が立つと思われます。
導入に際して必要となりそうな処理は、スライドに記述した通りですが、実際に、このようなアセットをレンダリングしたわけではないので、どのようなアーティファクトが出るのかは未知数です。機会があれば、レンダリングし、調べてみたいと思います。その際はここでレポートできればと思います。

Avoiding Texture Seams by Discarding Filter Taps

この手法は、かなりアグレッシブに、RT Ptexの処理を省略しています。まず、Anisotropic Samplingと非常に相性が悪いので、Ptexによってもたらされる高品位なTextureingに関して、妥協していると言えると思います。また、Mag Filterが動作する条件でも、品質を維持できないので、低品位なTextureingでも弱点を露呈します。従って、Seamで起きるアーティファクトに関してある程度妥協できると仮定し、残る利点である、オーサリングの簡便さと、メモリ使用量の最適化という項目が生かせる場合に有用であると考えられると思います。モバイル系のレンダリングなどで使えるかもしれませんが、こちらも日々急速にパフォーマンスレンジを向上させており、要求は高まる一方なので、この技術が日の目を見る確率は低いといわざるを得ません。
唯一可能性を感じるのは、自動生成などで動的にポリゴンを配置するケースです。本手法は隣接Quad情報を必要としないので、適当にPolygonを並べ変えても、本手法は適用可能です。