私は楽しみのために独自のゲームエンジンを開発しています(利益ではありません)。あるスレッドでレンダリングし、別のスレッドでシーングラフを更新します(速度など)。レンダリングの時間になると、レンダリングスレッドは可視ノードを新しい線形バッファーに追加し、それらをトラバースします。
より詳細には、シーングラフはトリプルバッファリングされています。シーングラフの各ノードには、相対および絶対変換マトリックス(4x4)の3つのコピーがあります。任意の時点で、1つのコピーはシーングラフスレッドによって書き込まれ、1つのコピーはレンダラーによって読み取られ、3つ目のコピーは存在します。これにより、レンダリング中の何かへの書き込みや、半分更新されたシーングラフのレンダリングが防止されます。どういうわけか、ユーザーが更新スレッドと競合しないように作業するために、各マトリックスの4番目のコピーも取得しました。これは、常に同期する必要を回避することでうまく機能するようです。
しかし、これは混乱です。
これらは、システムの私の最終的な目標です。
- レンダリングとシーングラフの更新は別々のスレッドにとどまります。
- これらのスレッドが互いに待機する必要がある量を最小限にします。
- 更新スレッドによって途中で更新されたシーンをレンダリングしないでください。これは、カメラが高速で移動していて、更新の前後にレンダリングされることがある場合に特に顕著です。
- メモリ使用量の削減。ノードごとに行列が多すぎます。また、マトリックスでの浮動小数点ドリフトの増加により、位置/回転/スケールのベクトルへの移動を検討しています。
- 数万のノードを処理する機能。現在のシステムはこれをかなりうまくやっています。
また、Bullet(物理エンジン)とネットワークを将来的に組み込むことを望んでいますが、どちらもあまり考えていません。
より良いシーングラフを達成するためのいくつかのアプローチは何ですか?