2011-10-12 12 views
5

最近ボクセルエンジンの開発を開始しました。私が必要とするのは、テクスチャのないカラフルなボクセルだけですが、非常に大量(ミニクラフトよりもはるかに小さい)です。そして、そのシーンを非常に速く描く方法が問題です。私はc#/ xnaを使用していますが、これは私の意見ではこの場合はあまり重要ではありませんが、一般的なケースについて話しましょう。これら二つのゲームを見てください:ボクセルエンジンと最適化

  1. http://www.youtube.com/watch?v=EKdRri5jSMs
  2. http://www.youtube.com/watch?v=in0bavLJ8KQ

特に私は、ビデオ番号2は、彼らが達成どのように(私はGFXカードがちょうど×64 192×192で窒息開始)偉大な最適化手法を表して考えますこの?

私がどうなるかをエンジンに持っている:

  • 多く、多くのボクセルをテクスチャなし

    • カラフルボクセルが、影付き、512×512×128は、ビデオ#2のような何かを達成するために最低限言います
    • 影(滑らかな陰影が大きくなりますが、これは必要ではない)
    • オプション:(ボクセル構造の近くに点灯フライング火の玉、から例えば)動的照明
    • フレームレート最低40 FPS
    • カメラ自由の3つ(X軸移動、Z軸に移動、Y軸方向に移動する)、いかなるカメラ回転が
    • は最終的に任意の特徴は、深さとすることができる必要はありませんを有します

      • はボクセル構造体の内部に存在する目に見えないボクセル(カバー FRを削除:私はすでに知っているどのような最適化フィールド(それは甘い^^なります)

    他のボクセルによるOM 6つの方向)

    • ボクセルの目に見えない顔を削除する - 私たちは、垂直カットして、画面 を分割する場合は、左のボクセルと右のボクセルが表示されますので、カメラは、何の回転を持っていないし、常にTPPのゲームのように前方斜めに見えるので、わずか3面
    • 代わりに3次元配列の辞書内のボクセルを保つ - サイズのアレイ512×512×128を介してジャンプする 許容不可能であるミリ秒を要する - しかし辞書INT:INTがパック 3D位置がはるかに高速で説明した色
    • 使用インスタンス化適用可能な場合
    • 閉塞?誰かが私に上または記載されている既存の最適化を改善するためにどのようにヒントを与える場合、私は非常に感謝するでしょう(これを行う方法?)
    • スペース分割/ octtree(それは良いアイデアです?)

新しい改善のアイデアを共有することができます。ありがとう

+2

両方のビデオにローテーションをサポートしていないエンジンがあることに注意してください。また、2番目のビデオは、ボクセルオブジェクトではなく、フォーカスが外れているオブジェクトのためにおそらくビルボードを使用しています。 – Skizz

答えて

8

1)Voxatronは、GPUではなくソフトウェアレンダラーを使用します。あなたはこのブログの記事のコメントを読めば、あなたはそれについていくつかの詳細を読むことができます:

http://www.lexaloffle.com/bbs/?tid=201

を私は詳細に自分自身を見ていないので、あなたはそれよりもはるかに多くを伝えることはできません。

2)私は決して3Dドットゲームヒーローをプレイしたことはありませんが、私はそれがボクセルをまったく使っているとは思わないでしょう。キューブが追加または削除されることはありません。ほとんどの場合、それは素敵なテクスチャが適用された静的なポリゴンメッシュです。

自分で実装する場合は、キューブをレンダリングして世界を描画しないでください。これは非常に遅いためです。その代わりに、ボリュームを処理して、固体ボクセルと空のボクセルの交点にあるメッシュを生成する必要があります。ボリュームを適切なサイズの領域(32x32x32など)に分割し、それぞれにメッシュを生成します。

私はあなたが役に立つかもしれないこの本の記事を書いています。それは実際に滑らかなボクセルテレーンについてですが、多くの値段が適用されます。

あなたはここで、Googleの本にそれを読むことができます。http://books.google.com/books?id=WNfD2u8nIlIC&lpg=PR1&dq=game%20engine%20gems&pg=PA39#v=onepage&q&f=false

をそして、あなたはここに関連するソースコードを見つけることができます。http://www.thermite3d.org

2

あなたはXNAを使用しているので、あなただけの望ましい効果を得るためにインスタンス化を使用することができます。 http://www.float4x4.net/index.php/2010/06/hardware-instancing-in-xna/ http://roecode.wordpress.com/2008/03/17/xna-framework-gameengine-development-part-19-hardware-instancing-pc-only/

基本的なコンセプトは、インスタンス化されます。この機能を反復データとvaのいくらかの量を指定できます単一のDrawIndexedPrimitiveコールでデータを送信します。あなたの場合、インスタンスストリームは単一のソリッドボックスになり、もう一方のストリームは変換とカラー情報になります。