This is the documentation for Enlighten.

7.9.1. IClusteringOutput によるデバッグ

IClusteringOutput オブジェクトには以下が含まれています。

  • リーフ クラスタをレンダリングするために使用されるメッシュ データ
  • 各ダスター ポイントの位置と法線
  • アルゴリズムを作成するために使用される内部データ

注目すべきアイテムは最初の 2 つ、クラスタ メッシュとダスター ポイントです。

データのロード

通常、実行時には単に新しい IClusteringOutput オブジェクトを作成し、データをシリアル化して入れます。

IClusteringOutput* clustering = LoadInterface<IClusteringOutput>("<myfilename>");

LoadInterface ヘルパー関数を使用していない場合、Create を呼び出し、自分で Load します。

クラスタ メッシュ

各リーフ メッシュには 1 つの GeoTriangleList があります。それぞれの三角は、単に 3 つの頂点の位置です。レンダリングのための適切な形式への変換は、実装での課題です。

ダスター ポイント

それぞれのクラスタには、ダスター ポイントの位置と法線のリストもあります。これらのインデックスは、radCore のダスターに対応しています。

サンプル コード

以下のコードは data オブジェクトに三角の頂点を入力し、各クラスタにクラスタ入力ライティングのカラーを入力します。この視覚化は非常に便利なものであり、入力ライティングがどのようにシステムに適用されているかが分かります。単にクラスタを確認したい場合、ダスター ライティングを抽出する代わりにランダムなカラーを使用します。

s32 litPoints   = Enlighten::GetNumberOfPointsInInputWorkspace(workspace);
s32 litClusters = Enlighten::GetNumberOfClustersInInputWorkspace(workspace);
 
GEO_ASSERT(clustering->GetNumLeafClusters() == litClusters);
 
Enlighten::InputWorkspaceDebugPoint debugPoint;
s32 duster = 0;
for (s32 n=0; n<clustering->GetNumLeafClusters(); n++)
{
    // 三角の位置データをコピーします
    data.ClusterTriangles[n] = clustering->GetClusterMesh(n);
 
    // 三角のカラー データを抽出します
    Enlighten::GetInputWorkspaceLitDebugPoint(workspace, &debugPoint, duster, lightingBuffer);
    data.ClusterColours[n] = VConstruct(
        debugPoint.m_LightValue[0],         // クラスタ n 用の赤
        debugPoint.m_LightValue[1],         // クラスタ n 用の緑
        debugPoint.m_LightValue[2],         // クラスタ n 用の青
        1.0f);
 
    s32 dusterCount = clustering->GetDusterPoints(n)->GetSize();
    duster += dusterCount;
}
GEO_ASSERT(duster == litPoints);

クラスタ内のすべてのダスターは同じ入力ライティングを持つため、読み込む必要があるものはクラスタごとに 1 つだけであることに注意してください。次に、クラスタ内のダスター数に応じてシステム全体のダスター インデックスを増分します。