Tiled ラスタライズ:LCC2 のもう 1 つのラスタライズのパス
LCC2 パイプラインには 2 種類のラスタライズの方式があり、Actor の Rasterizer プロパティで選択する。既定の Pipeline はエンジン自身のレンダリングパイプラインを使い、Tiled はプラグインが実装したタイル単位の compute のパスを使う。
Tiled は現時点では実験的機能であり、Pro 版に属する。App Key を登録して初めて有効になる。エディションとライセンス を参照する。
密度の高いシーンではフレームレートが明らかに向上するが、その効果は画面の内容とボトルネックの位置によって変わる。効果がわずかなシーンもあり、まったく変化しないシーンもある。有効にした後は 効果があるかを判断する の方法で実測して結果を確認する。常に速くなると思い込まないこと。
注:ここでいう「タイル」は画面ピクセルのタイルを指す。レンダリング にあるカメラの可視性でノードを読み込む「分割レンダリング」とは別のものである。前者はすでにビデオメモリにあるデータをどう描画するかを決め、後者はデータがどうビデオメモリに入るかを決める。両者は互いに独立しており、同時に有効にできる。
2 つのラスタライズ方式の違い
| Pipeline(既定) | Tiled | |
|---|---|---|
| ラスタライズ | エンジンのレンダリングパイプラインに委ね、splat ごとにクアッドへ展開してエンジンがピクセルを塗る | プラグイン独自の compute dispatch。可視 splat をまず画面のタイルに振り分け、タイル単位でシェーディングして合成する |
| ソート | すべての可視 splat に対するグローバルソートを 1 回行う | 画面のタイルごとのセグメントソート。各セグメントはそのタイルに入る splat のみをソートする |
| 成熟度 | 長く使われてきた既定のパス | 実験的機能 |
| ライセンス | 無償版で使用できる | Pro 版 |
効果は 2 か所から生まれる。ソートの範囲がグローバルから画面のタイル 1 つに狭まること、そしてピクセルが実際にそれを覆うタイルの中でのみ処理されるため、重なりのある領域での無駄なフィルが減ることである。
したがって効果は画面の内容と結びついている。splat の密度が高く画面上の重なりが多い場合は明らかであり、画面が疎な場合、あるいはフレームレートのボトルネックがそもそもソートとピクセルフィルにない場合は、観測できる変化がない。
見え方はどちらの方式でも同一である。Rasterizer の切り替えに他のパラメーターの変更は不要で、データの読み込み、LOD、クリッピングボリューム、ライティング、カラー設定には影響しない。
有効にする方法
Actor の Details パネルの XGrids カテゴリーで Rasterizer を Tiled に設定する。このプロパティは Render Mode の直後にあり、Render Mode が 3DGS のときのみ表示される。
Blueprint または C++ からセッターを呼ぶ。
LCC2Component->SetRasterizer(ELCC2Rasterizer::Tiled);
ゲッターは 2 つあり、用途が異なる。
| メソッド | 返す値 |
|---|---|
GetRasterizer() | パネルに保存されている選択 |
GetEffectiveRasterizer() | ライセンスの判定を適用した後、実際に効いているラスタライズ |
レンダリングのパスが本当に Tiled を通っているかを確認するには GetEffectiveRasterizer() を使う。
効果があるかを判断する
効果が保証されないため、切り替えの前後で実測する。方法は パフォーマンス最適化ガイド と同じである。
- テスト条件を固定する。同じ視点またはカメラ経路、同じ解像度と Screen Percentage、それ以外のパラメーターはすべて変更しない。
- 先にウォームアップを一度走らせ、初回のシェーダーコンパイルと初回のディスク読み取りを数値に混ぜ込まない。
Pipelineの状態でstat unitの GPU フレーム時間を記録し、基準値にする。Rasterizerだけを変更し、同じ視点をもう一度測る。- 代表的な視点をいくつか繰り返して測る。特に splat の密度がもっとも高く重なりがもっとも多い画面を測る。
GPU フレーム時間が下がらない場合、現在のボトルネックはこのパスが対象とする範囲の外にある。Pipeline のままにして、パフォーマンス最適化ガイドで本当のボトルネックの特定を続ける。
適用範囲
| 項目 | 説明 |
|---|---|
| パイプライン | LCC2 パイプラインのみ。ALCCActor(.lcc)にはこのプロパティがない |
| 形式 | .lcc2 / .sog / .spz / .ply のいずれでも使用できる |
| レンダリングモード | 3DGS モードのみ。点群モードはこのプロパティを無視し、常に Pipeline を使う |
| エンジンと RHI | プラグイン自体と同じ対応範囲。D3D12 と Vulkan のどちらでも使用できる |
| 複数ビュー | VR のステレオレンダリング、nDisplay、分割画面、SceneCapture のいずれにも対応する |
ライセンスがない場合の動作
App Key を登録していない状態で Rasterizer を Tiled に設定しても、エラーにはならず読み込みが失敗することもない。レンダリングのパスが自動的に Pipeline にフォールバックする。パネルに保存された選択は上書きされないため、ライセンスを登録すればそのまま有効になり、設定し直す必要はない。
Tiled が本当に使われているかを見分けるには GetEffectiveRasterizer() の戻り値を読む。フォールバック時は Pipeline を返し、GetRasterizer() は依然として Tiled を返す。
注:パッケージ化してリリースする前にライセンスが有効であることを確認する。無効な場合、パッケージ出力物は無償版の動作に従い Pipeline を使う。
Pipeline のままにする場面
- 点群レンダリングモードを使っている場合。このプロパティは効かないので設定する必要がない。
.lccデータを読み込んでいる場合。LCC パイプラインにはこのパスがない。- 無償版のプロジェクト。
Tiledに設定してもフォールバックするので、既定のままのほうが分かりやすい。 - 実測してフレーム時間が改善しない場合。
- プロジェクトが納品検証の段階に入っている場合。実験的機能のパスは避けたほうがよい。
Tiled はレンダリング段階のコストを下げるものであり、読み込みとトラバースの処理を減らすものではない。ボトルネックがデータの読み込み側にある場合は、パフォーマンス最適化ガイド で先に読み込みと LOD に対処する。