« Spectre/Meltdown脆弱性について考えてみる | トップページ | 低遅延リアルタイムGPUのFPGA実装 »

2018年1月27日 (土)

ZeroPath-GPUのシャドウマッピングを考えてみる

ZeroPath-GPUのFPGA実装の方はコツコツと検討中です。実装はまだ掛かりそうなので机上の空論を少し書いてみたいと思います。

目論見どおりいけば最大ポリゴン数Nを増やすと O(N・log N) のオーダーで回路消費が増えるというレベルに収まるはずです(ほんとかな?、一応、判別式回路がO(N)で増え、最小値探索がO(N log N)の見込みです。 あれ?支配項は最小値探索?)

まあ、フレームメモリが不要なのと低遅延なところにメリットを見出そうとしているのですが可能性としてこのやり方でどこまでやれるのかということで、その1つとしてシャドウマッピングを考え中です。

従来型GPUでシャドウマッピングをやる場合は、一旦光源視点でZマップを作り、次にカメラ視点で、レンダリングを行います。

これはZバッファを見ながら上書きを繰り返していくので、描画段階でまだ演算対象となっていない他のポリゴンが視点や光源に対して手前に来ない保証が無いのでこうせざるを得ないのであり、その為、シャドウアクネなどの課題が常に付きまといます。

今回は走査順にピクセル単位で絵を作っていく為に、すべてのポリゴンの演算を並行して行わけなので、ピクセル描画の段階で一括してデータを揃えるため、マルチパスの演算を行わずにレイトレーシングのようにピクセル誤差無くシャドウマッピングが出来きないものかと考えているわけです。

ポリゴンが描画点と光源間に存在するか否かの判定をポリゴン数だけある回路で並列に求めればいいはずなのですが、コンパクトなうまいロジックを思いつけずに悩んでいる次第です。

ピクセル位置で比較演算が終わるまで不定なのはZ座標だけですので、描画時に確定したZ座標に対して即座に該当ポリゴン領域が光源間の領域にあるかどうか判定できる判別式がインクリメンタルに求まればラスタライザと同じような機構でやれそうな気もします。

理屈としては光源とポリゴンのエッジとを通る平面の式を判別式とすればいいはずなのですが、厄介そうなのがラスタライズする物理座標はカメラからみた投影変換の絡んだ座標なので、除算的な補正が必須な気もしています。うーん、悩ましい。

回路サイズ2倍程度で実現できればこれはこれで面白そうなのですが...

まずはどこかで理屈が正しいか、シミュレーション実験できればとは思うのですが、なかなか先は長そうです。

(追記:2018/02/03)
ピクセルに関しての情報だけは常に一括で揃うのはいろいろ美味しそうな気がします。
いわゆる Deferred Rendering だと、沢山のバッファを吐き出さないといけない演算が可能になります。
アンチエイリアシングや異方向性みたいなことも実はその場で(Zソートを待たずに)、最終法線ベクトルやエッジ向きが確定できるのでいろいろ有利な気もします。
「トランジスタ数で最大ポリゴン数が制約される」以外のことに関しては、この方式で出来なくなる従来技法はほとんど無いのではないかと想像しています。

(追記:2018/02/14)
 マルチパスレンダリングとかの定義で言うと、1パスすらなくでいきなり出力を始めるので、ZeroPathにタイトルを変えました。

« Spectre/Meltdown脆弱性について考えてみる | トップページ | 低遅延リアルタイムGPUのFPGA実装 »

FPGA」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: ZeroPath-GPUのシャドウマッピングを考えてみる:

« Spectre/Meltdown脆弱性について考えてみる | トップページ | 低遅延リアルタイムGPUのFPGA実装 »