3D BSPベースのグラフィックエンジンに関するアドバイスが必要[終了]


8

古いゲーム形式用にOpenGL BSPビューアをコーディングしました。Quake 3のファイル形式とよく似ています。グラフィックエンジンの開発に興味があるので、現在の技術を使って見ながら開発していきたいです。だから私はあなたに目を向け、何に焦点を当てるかの方向性についての主題の専門家。これをできるだけ速くしたいと思います。古いファイル形式が非常に単純でポリゴンが少ないことを考えると、それは実行できるはずです。ここに私の質問があります:

  1. 照明a。頂点ライティングを学ぶのは理にかなっていますか、それとも代わりにピクセル単位のライティングを実装する必要がありますか?b .OpenGLには8つの光制限があることを知っています。シェーダーを通して、環境光と残りのコンピューターにそのうちの1つだけを現実的に使用する必要がありますか?そうでない場合、どうすればよいですか?

  2. ソート/カリングa。レンダリングするサーフェスをソートするために最も一般的に使用されるアルゴリズムは何ですか。複雑さは本当に問題ではありません。現在使用されているものと、目に見えるものだけを実際にレンダリングする方法を学びたいです。ペインターのアルゴリズムのように記述された多くのアルゴリズムを見てきましたが、BSPベースのジオメトリにとって何が最も理にかなっているのか疑問に思っています。b。アルファマスクのテクスチャがある場合、並べ替えにはこのプロセスとの何らかの関係があると言われました。3Dスペースで正しくレンダリングできるようにするにはどうすればよいですか?

  3. グラフィックパイプラインa。VBO経由でジオメトリデータを送信する必要がありますか?これは今日使用されている標準ですか?b。200〜300の可能性がある複数の「リージョン」がある場合、200〜300のチャンクを送信せずにGPUに送信するためのより良い方法を見つける必要があります。それらを1つに結合し、それぞれに関連付けられた参照を保持する必要があります。

BSPベースのレンダリングおよびそのような性質に関するその他のヒントはありますか?

また、間違っていた場合は訂正してください。私は、無知で気づかれずに修正されて少し恥ずかしくなる人です。

お時間をいただきありがとうございます。本当に感謝しています。


シーンのすべての三角形をBSPに入れる予定はありますか?また、アニメートされたキャラクターや動くオブジェクトなどの動的な三角形も入れますか?動的オブジェクトに関しては、BSPはあまり良くありません。
Maik Semder、2011

現時点で完全なコメントをする時間はありませんが、icculus.org / twilight / darkplaces / technotes.htmlをチェックし、irc.anynet.orgの#darkplacesにアクセスして、LordHavoc / othersに質問してください。 。
user_123abc '25

回答:


1

あなたが言っているように- 現在のテクノロジーに興味があるなら:

1)ライティング:ピクセル単位のライティング。現在の世代のレンダリングを確認したい場合は、頂点シェーダーとピクセルシェーダーの作成を確認します。そのような単純な。それらはほとんど無制限の柔軟性を提供し、適切に学習し始めれば、固定機能パイプラインよりも使用が難しくありません。OpenGLの8ライト制限は、昔ながらの固定機能パイプラインセットアップにのみ適用されます。その道を行くのではなく、OpenGL Coreについて学び、古い日​​付のglBegin / glEndのことをすべて忘れてください。

2)並べ替え/カリング:はじめに:透明にする必要がある場合のみ並べ替えます。視錐台の外側にあるカリングオブジェクトのみ。

3)OpenGLを使用している場合は、VBOとVAOを使用します。

-

Unasked:昔ながらのBSP形式のビューアを作成している場合(私はould Valve / IDエンジンに何か疑わしいですか?)あらゆる種類の最適化(カリング/ bsp)なしでレベル全体の描画を回避できるはずです。 )まったく、それでも最新のハードウェアで完全なフレームレートを得る;)

OpenGLのヒント:OpenGL Superbible 5th Editionを入手してください。これにより、最新のOpenGLの実行方法がわかり、後で古くなっていることが判明することで頭が混乱することはありません。


-3

1.a頂点ごとのライティングは、ピクセルごとのライティングよりも簡単です(頂点ごとのライティングはOpenGLに組み込まれており、ピクセルごとのライティングにはカスタムシェーダーが必要です)。

1.b 8つのライトがある場合は、それらを使用してください!ただし、どのライトが表示されるかを計算する必要があります。

3.a VBOSを使用します。glBegin / glEndは絶対に使用しないでください(表示リストを使用する場合を除きますが、状況によってはVBOがより良いソリューションです)。

3.bプログラムがまだ開発中であっても、パフォーマンスについて心配する必要はありません。特に今日のハードウェアでは。だから、あなたの200〜300チャンクを送ってください。

BSPマップが他の質問に役立つほどよくわかりません。


3
3.bの場合は-1。すべてに誤って適用される「パフォーマンスについて心配しない」というマントラは嫌いです。開発時間の50%を2%速く実行するために費やさないように、それはその場所を持っています。ただし、大規模なシステムを設計する場合は、効率的な計画を立てることが重要です。200から300のチャンクでGPUに送信されるデータは、すべてが1つのチャンクとして送信された場合よりも、CPUとGPUの作業を不必要に難しくする可能性があります。
AttackingHobo

@AttackingHobo +1
ジョナサンコネル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.