Octreeは、キューブワールドのチャンクを均等に分割することに集中するのに本当に役立ちます。彼らが演じる秘訣は、オクトリーの枝に立方体を送り続けると、これらを自動的に断片に分割し、後で近接ベースで抽出できるようにすることです(つまり、Chunk01(128,0,0)Chunk02(256,0,0) )など。)
キューブを八分木に格納するときに、それらの「タイプ」(それらを説明するマテリアルまたはある種の列挙型)も定義します。これを行うことで、Octreeがこれらの立方体を隣人(つまり、草、石、砂など)になった場合にグループ化することもできます。これにより、octreeアルゴリズムは、これらを1倍大きい正方形/長方形のプリミティブに折りたたむ/凝縮する方法に関するインテリジェンスの一部を処理できるようになり、キューブ数を減らすことができます。
結局のところ、キューブワールドへのアプローチは2つあります。最初のアプローチは、エンドユーザーに一度にワールドを1xキューブにしたと信じてもらいたいのですが、実際にはメッシュ/頂点カウントをマージしてサーフェスのチャンクとしてのその錯覚は、実際には1倍の大きなメッシュであり、数百の立方体ではありません。ユーザーがキューブを操作したとき(つまり、削除/追加)にのみ、メッシュを再計算して複数のキューブの錯覚を実現します。しかし、すぐにそれを巨大な統合メッシュに交換します。
octreeを実行し、チャンクを単一のメッシュ形式に統合したら(頂点の配列をGPUバッファーにフィードすることにより)、octreeの外部でカリングの周りに追加の作業を行う必要があります。これを行う方法はたくさんあります。ボリュームカリング(レイトレーシング)は通常、私が最も推奨している方法ですが、これはもっとうまくできると思います。
ここでの私の例では:https ://vimeo.com/71330826基本的に異なるアプローチをとっています。カメラの中心点がどこにあるかがわかっていて、カメラが向いている方向も追跡しているので、基本的にこれを近接フォーカスとして使用します。問題のチャンクがカメラの後ろにある場合、それらを破棄して、GPUの負荷を減らします。
また、各「チャンク」の顔はまだ外側に表示されていることに注意してください。各チャンクの内側は作成されませんが、各チャンクが独自のワークロードを処理している場合は、実際のチャンクの「壁」をレンダリングします。カメラの下...ユーザーのZ深度とカメラの境界も追跡することで後で修正しました