2020年2月19日水曜日

深度









 上が従来の塗りつぶし、下が新しい方法の塗りつぶし。暗いほうがスクリーンの画像で、オレンジの方はデプスマップを画像化したもの。

 従来は、ポリゴン1枚の頂点3個の平均値を、ポリゴン全体の深度として使っていたので、深度マップが離散的な感じになっている。
 新しい方式ではスクリーン1ピクセルごとにポリゴンの深さを計算しているので、深度マップはかなりなめらか。
 処理速度は、新しいほうが遅い。深度を従来の方式に戻してもあまり早くならないので、やはりベクトル演算周りがネックになってそう。とはいえ、それほど高負荷な作業をしてるつもりもないんだよなぁ。
 もう少し改善の余地があるので、もうちょっと頑張ってみる。


 デプス深度を見れば一目瞭然だけど、画面を見る限りにおいては、レンダリング品質は大差なさそう。ポリ数増やすときれいになるんだけどね。処理遅くなるし、そもそもポリ増やせば簡易方式でもある程度は見た目も改善するし。

 最適化してないから遅い説もあるけど、というかそれが最有力だけど、わりと苦労して実装した割には、性能でなくてちょっとガッカリ。
 最初にやっつけで作った「怪しいところforループで虱潰しに確認する」方式がかなり高性能。1ポリゴンが小さい分、ループ数も少ないので、さほどリソース食ってないのかもしれない。
 それに、新しい方式は、垂直方向はforで、水平方向はベクトル演算でポリの左右端を求めてその範囲をforで回す、というような処理だから、1ポリゴンあたりの面積が小さい場合は、ほとんどメリットが生まれてこない。総当り方式でもかなりヒット率は良さそうなので、ミスヒット対策はあまり生きてこない。
 とりあえず、新しい方式の浮動小数点演算を減らす処理の追加を試して、だめなら早々に見切りをつけよう。
 別のアルゴリズムも思いついたので、そっちも試して見る予定。

// で、軌道伝搬はいつ手を出すんだい???

0 件のコメント:

コメントを投稿