最近ボクセルエンジンの開発を始めました。私が必要とするのは、テクスチャのないカラフルなボクセルだけですが、非常に大量 (Minecraft よりもはるかに小さい) です。問題は、シーンを非常に高速に描画する方法です。私はc#/xnaを使用していますが、これは私の意見ではあまり重要ではありません。一般的なケースについて話しましょう。次の 2 つのゲームを見てください。
特にビデオ番号 2 は優れた最適化方法を表していると思います (私の gfx カードは 192 x 192 x 64 で窒息し始めます) どうやってこれを達成するのですか?
私がエンジンに持っているもの:
- テクスチャのないカラフルなボクセル
- 多くの、多くのボクセル、ビデオ #2 のようなものを達成するために最小 512 x 512 x 128 と言う
- 影 (滑らかな影は素晴らしいですが、これは必須ではありません)
- オプション: 動的照明 (たとえば、ボクセル構造の近くで光る火の玉が飛んでいる場合)
- フレームレート 最低 40 FPS
- カメラには 3 つの自由度 (x 軸で移動、y 軸で移動、z 軸で移動) があり、カメラの回転は必要ありません。
- 最後に、オプション機能は被写界深度かもしれません (それは甘いでしょう ^^ )
私がすでに知っている最適化:
- ボクセル構造内に存在する目に見えないボクセルを削除します (他のボクセルによって 6 方向が覆われています)。
- ボクセルの見えない面を削除 - カメラには回転がなく、TPP ゲームのように常に斜め前を向いているため、画面を垂直カットで分割すると、左のボクセルと右のボクセルに 3 つの面しか表示されません
- ボクセルを 3 次元配列ではなく Dictionary に保持します - サイズ 512 x 512 x 128 の配列をジャンプするには許容できないミリ秒かかります - しかし、int がパックされた 3D 位置を記述する辞書 int:color ははるかに高速です
- 該当する場合はインスタンス化を使用する
- 閉塞?(これを行う方法?)
- 空間分割 / octtree (それは良い考えですか?)
誰かが上記の既存の最適化を改善する方法を教えてくれたり、新しい改善のアイデアを共有したりできれば、とても感謝しています。ありがとう