LoginSignup
0
0

More than 1 year has passed since last update.

100万点を表示してみる(点群表示機能を自作してみる その3)

Last updated at Posted at 2023-03-12

「点群表示機能を自作してみる」のその3です。
100万点を表示するところまでやります。GPU力押し(というほどでもない普通のコード)です。現在のハードでどこまで可能そうなのかを見積もります。

出来上がり図

GitHub 以下のリビジョンを参照してください。

Revision: a735360988386ab09e39e5643b69be274f8888c5
Message:
added dense point cloud model.
modified to show duration time to draw view.

image.png

説明

高々100万点は余裕でGPUにのるサイズですので、初期化時にバーテックスバッファを作り描画させます。 それでもパフォーマンス的にはぎりぎりのようでした。
技術的には前回からの差異はありません。

描画パフォーマンス

1フレームごとの描画時間を画面に表示できるようにし、適当に操作して描画時間を観察するという程度の確認です。
今後のためにバーテックスバッファを可変にした場合も比べてみます。

点数 点サイズ 頂点バッファ 描画時間[ms/frame]
100万点 0.001 固定 40~60
100万点 0.001 可変 40~60
100万点 0.1 固定 70~100
100万点 0.1 可変 70~100
1000万点 0.001 固定 150~220

どうも負荷の高い処理は、出力バッファのマージ的な処理のようです。

  • 点のサイズを大きくすると遅くなる様子。
  • 点が全て画面の外に出ると 0ms で描画される。(GetTickCount() を使っているので 15ms 以下と解釈できる。)

バーテックスバッファの固定・可変は D3D11_BUFFER_DESC hBufferDesc を以下のように変更します。

可変の場合
		hBufferDesc.Usage = D3D11_USAGE_DYNAMIC;
		hBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
固定の場合
		hBufferDesc.Usage = D3D11_USAGE_DEFAULT;
		hBufferDesc.CPUAccessFlags = 0;

但しこの設定により速度的な違いは生じませんね。そういうものか。

PointListSampleModel::OnCreateBuffer() の nZ を10にすると1000万点になります。(以下のようなモデルになります。100万点の板10枚。)
image.png

速度的には20fps程度あるとまあまあレスポンスが良い感じがする。 10fps だとやや苦しい。 ということで以後1フレームで描画できる点数の目安として100万点と考えることにします。 (10億点の1000分の1。)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0