メッシュの最適化¶
Kanzi アプリケーションのパフォーマンスを向上させるには、アプリケーションが表示するメッシュの頂点データの量を減らすことができます。メッシュの頂点データの量を減らすと、kzb ファイルのサイズと実行時に必要な GPU メモリの量が減少します。
メッシュ属性の編集¶
Mesh Attributes Editor を使用して、メッシュの頂点データを変更できます。
例えば、使用しない属性を削除し、ニーズに最適なデータ型を選択するために、Mesh Attributes Editor を使用できます。
メッシュ属性を編集するには:
Library > Meshes で編集したいメッシュを右クリックし、Open Mesh Attributes Editor を選択します。
Mesh Attributes Editor では、Import テーブルが、Kanzi Studio にインポートしたメッシュの属性のセマンティック、次元数、およびデータ範囲を示しています。
Export テーブルの Mesh Attributes Editor で、これらの属性を設定して、Kanzi Studio がメッシュを kzb ファイルにエクスポートする方法を制御します。
Semantic は属性の意味を設定します。メッシュ属性のセマンティクスは、メッシュが使用するマテリアルタイプのシェーダー属性のセマンティクスと一致します。
例えば、位置、法線、接線、テクスチャ座標、または色情報のベクトルです。
ヒント
マテリアルタイプのシェーダー属性のセマンティクスを表示および編集するには、Library > Materials and Textures > Material Types でマテリアルタイプを右クリックし、Open Shader Attributes Editor を選択します。
Semantic Index は、マテリアルタイプ内の属性のインデックスを設定します。
たとえば、正しいテクスチャ座標です。
各メッシュ属性のセマンティックインデックスは、同じセマンティックを持つシェーダー属性のセマンティックインデックスと一致します。
Data Type は、属性をGPUメモリに保存し、kzbファイルにエクスポートする際に使用するデータ型を Kanzi に設定します。バーテックスキャッシュの正しいサイズの設定 を参照してください。
Dimensions は、Kanzi が属性に使用する次元の数を設定します。
Kanzi Studio は、メッシュをインポートするときにこの値を自動的に設定します。
Output Components は、Kanzi が属性をマッピングするコンポーネントを設定します。
Kanzi Studio は、メッシュをインポートするときにこの値を自動的に設定します。
Export は、Kanzi が kzb ファイルにエクスポートする属性を設定します。
使用する属性のチェックボックスを選択し、使用しない属性のチェックボックスをクリアします。
メッシュが使用しているマテリアルタイプのシェーダー属性に一致するすべての属性をエクスポートするようにしてください。
この例では、接線およびテクスチャ座標属性は、メッシュが使用するマテリアルタイプのシェーダー属性に含まれていないため、エクスポートされません。
Mesh Attributes Editor の下部にあるステータスバーには、Export テーブルで現在設定されている値で kzb ファイルをエクスポートした場合のメッシュ頂点データのサイズが表示されます。
バーテックスキャッシュの正しいサイズの設定¶
GPUには特定のサイズの頂点キャッシュがあります。キャッシュからメッシュの頂点にアクセスすることは、メモリの他の場所から頂点にアクセスするよりも桁違いに高速です。キャッシュヒットの量が最適になるように、頂点バッファ内の頂点とインデックスを並べ替えることで、特定のキャッシュサイズに対してメッシュデータを最適化できます。
たとえば 16 バイトのバーテックスキャッシュには、Position + Normal + Texcoord (XYZ * 2 + XYZ * 2 + UV * 2) を格納できますが、Position + Normal + Texcoord + Color を格納するには小さすぎます。
ターゲットハードウェアに適したバーテックスキャッシュの正しいサイズを設定するには:
ターゲットハードウェアのバーテックスキャッシュサイズを確認します。
Kanzi Studio で、Project > Properties を選択し、Binary Export のプロパティカテゴリーの Properties で設定します。
Optimize Meshes を有効にする
Optimize Meshes プロパティを有効にすると、Kanzi Studio はエクスポートされたメッシュの頂点キャッシュを、Target Vertex Cache Size プロパティで設定したサイズを使用するように設定します。
Target Vertex Cache Size をターゲットデバイスのキャッシュサイズ(バイト単位)に
Default Vertex Attribute Data Type を頂点バッファ属性に使用したいデータ型に変更します。
メッシュのバーテックスバッファには、Kanzi がバーテックスシェーダーにデータを送るために使用する一連の属性が含まれています。
例えば、Default Vertex Attribute Data Type プロパティを Half-float に設定すると、Float と比較してメッシュデータのサイズが半分になりますが、メッシュの精度も低下します。
メッシュ属性に最適なデータ型を設定する¶
メッシュを最適化するには、各メッシュ属性に対して、必要な視覚的精度を提供しつつ、最小限のスペースを占めるデータ型を設定します。Kanzi は、属性をGPUメモリに保存し、kzbファイルにエクスポートする際にデータ型を使用します。より少ないスペースを占めるデータ型を使用すると、kzbファイルのサイズと実行時に必要なGPUメモリの量が減少します。メッシュ属性のデータ型 を参照してください。
メッシュ属性に最適なデータ型を設定するには:
Library > Meshes で編集したいメッシュを右クリックし、Open Mesh Attributes Editor を選択します。
Import テーブルの Mesh Attributes Editor で、設定したいデータ型の属性に対して Data Range 列の値を確認してください。
Kanzi Studio は、メッシュ属性の異なる次元のデータ範囲を異なる色で示します。
Export テーブルの Mesh Attributes Editor で、Data Type 列のドロップダウンを使用してエクスポートデータタイプを設定します。
データ型を設定する際には、次の点に注意してください:
あなたのニーズに十分な視覚的精度を提供しつつ、最小のスペースを占有するデータ型を選択してください。
Mesh Attributes Editor の下部にあるステータスバーで、設定したデータ型を使用したメッシュ頂点データのサイズを確認でき、Preview でレンダリングの精度を視覚的に検査できます。
Data Range 列のすべての値をカバーする範囲のデータ型を選択します。メッシュ属性のデータ型 を参照してください。
例えば、属性のすべてのコンポーネントのデータ範囲が0 ... 1の場合、Data Type を 16_UNORM に設定することができ、データ範囲が-1 ... 1の場合は 16_SNORM を使用することができます。
利用可能なデータ型のリストは、ターゲットのグラフィックスAPIがサポートする内容に依存します。メッシュ属性のデータ型 を参照してください。
正規化された32ビットデータ型(32_UNORM および 32_SNORM)は、最高の精度を提供します。正規化されたデータ型はデータ範囲全体で均一な精度を提供しますが、Float および Half-float データ型は、ゼロに近い値に対して高い精度を提供し、大きな値に対しては低い精度を提供します。
この表は、異なるメッシュ属性に対してエクスポートデータタイプを選択するための推奨事項を示しています。
セマンティック (Semantic)
推奨データ型
Kanzi Engine はエクスポート前に正規化します。
位置
データ範囲に基づいて
ノーマル、タンジェント、ビタンジェント
2_10_10_10_SNORM_PACK32
X
テクスチャ座標
データ範囲に基づいて、16_UNORM / 16_SNORM / Float
カラー (Color)
データ範囲に基づいて、8_UNORM / Half-float / Float
ウェイト (Weight)
データ範囲に基づいて
マトリックスパレット
データ範囲に基づいて
メッシュ属性のデータ型¶
次の表に、Kanzi がサポートするメッシュアトリビュートのデータタイプを示します。
データタイプ (Data Type) |
ディスクリプション (Description) |
レンジ (Range) |
|---|---|---|
フロート (Float) |
単精度浮動小数点(32ビット) |
|
Half-float |
半精度浮動小数点(16ビット) |
|
8_SNORM |
8ビット符号付き正規化 |
-1.0f ... 1.0f |
8_UNORM |
8ビット符号なし正規化 |
0.0f ... 1.0f |
16_SNORM |
16ビット符号付き正規化 |
-1.0f ... 1.0f |
16_UNORM |
16ビット符号なし正規化 |
0.0f ... 1.0f |
8_SINT |
8ビット符号付き整数 |
-128 ... 127 |
8_UINT |
8ビット符号なし整数 |
0 ... 255 |
16_SINT |
16ビット符号付き整数 |
-32 768 ... 32 767 |
16_UINT |
16ビット符号なし整数 |
0 ... 65,535 |
32_SINT |
32ビット符号付き整数 |
-2 147 483 648 ... 2 147 483 647 |
32_UINT |
32ビット符号なし整数 |
0 ... 4 294 967 295 |
32_SNORM |
32ビット符号付き正規化済み |
-1.0f ... 1.0f |
32_UNORM |
32ビット符号なし正規化 |
0.0f ... 1.0f |
2_10_10_10_SNORM_PACK32 |
4コンポーネント32ビットパック化された符号付き正規化:
|
(-1, -1, -1, -1) ... (1, 1, 1, 1) |
2_10_10_10_UNORM_PACK32 |
4コンポーネント32ビットパックされた符号なし正規化:
|
(0, 0, 0, 0) ... (1, 1, 1, 1) |