クリッピング(コンピューターグラフィックス)
クリッピングは 、コンピューターグラフィックスのコンテキストでは、定義済みの関心領域内でレンダリング操作を選択的に有効または無効にする方法です。数学的には、建設的な幾何学の用語を使用してクリッピングを説明できます。レンダリングアルゴリズムは、クリップ領域とシーンモデルの交差部分にのみピクセルを描画します。ビューボリュームの外側の線とサーフェス(別名錐台)は削除されます。
通常、クリップ領域は、レンダリングのパフォーマンスを向上させるために指定されます。適切に選択されたクリップにより、レンダラーは、ユーザーが見ることができないピクセルに関連する計算をスキップすることにより、時間とエネルギーを節約できます。描画されるピクセルは、クリップ領域内にあると言われます。描画されないピクセルは、クリップ領域の外側にあります。より非公式には、描画されないピクセルは「クリップ」と呼ばれます。
2Dグラフィックスでのクリッピング
2次元グラフィックスでは、ウィンドウまたはフレームの境界内にのみピクセルが描画されるようにクリップ領域を定義できます。クリップ領域を使用して、美的または芸術的な目的でピクセルレンダリングを選択的に制御することもできます。多くの実装では、最終的なクリップ領域は、1つ以上のアプリケーション定義のシェイプとシステムハードウェアの制約の複合(または交差)です。
一例のアプリケーションでは、画像編集プログラムを検討します。ユーザーアプリケーションは、画像をビューポートにレンダリングできます。ユーザーが画像の小さい部分を表示するためにズームおよびスクロールするとき、アプリケーションは、ビューポートの外側のピクセルがレンダリングされないようにクリップ境界を設定できます。さらに、GUIウィジェット、オーバーレイ、およびその他のウィンドウまたはフレームにより、元の画像の一部のピクセルが不明瞭になる場合があります。この意味で、クリップ領域は、システム定義の「ユーザークリップ」と、システムのソフトウェアおよびハードウェアの実装によって実施される「デバイスクリップ」の複合体です。アプリケーションソフトウェアは、このクリップ情報を利用して、計算時間、エネルギー、メモリを節約し、見えないピクセルに関連する作業を回避できます。
3Dグラフィックスでのクリッピング
3次元グラフィックスでは、クリッピングの用語を使用して、多くの関連機能を説明できます。通常、「クリッピング」とは、長方形の形状で機能する平面内の操作を指し、「カリング」とは、シーンモデル要素を選択的に処理するより一般的な方法を指します。この用語は厳密ではなく、正確な使用法は多くのソース間で異なります。
シーンモデル要素には、ジオメトリプリミティブが含まれます。ポイントまたは頂点。線分またはエッジ;ポリゴンまたは面;曲線、スプライン、サーフェス、さらにはテキストなどのより抽象的なモデルオブジェクト。複雑なシーンモデルでは、ビューポート内の可視性(錐台カリング)などの理由で、個々の要素が選択的に無効(クリッピング)にされる場合があります。方向(背面カリング)、他のシーンまたはモデル要素による隠蔽(オクルージョンカリング、深度または「z」クリッピング)。このようなクリッピングを効率的に検出および実行するための高度なアルゴリズムが存在します。多くの最適化されたクリッピング方法は、グラフィックスプロセッシングユニット(GPU)によって提供される特定のハードウェアアクセラレーションロジックに依存しています。
クリッピングの概念は、抽象代数幾何学の方法を使用して、より高い次元に拡張できます。
ニアクリッピング
頂点の投影と2Dクリッピングに加えて、3Dプリミティブを正しくラスタライズするにはニアクリッピングが必要です。これは、頂点が目の後ろに投影された可能性があるためです。ニアクリッピングにより、使用されるすべての頂点に有効な2D座標が確保されます。 far-clippingとともに、depth-buffer値のオーバーフローを防ぐのにも役立ちます。ビデオゲームの初期のテクスチャマッピングハードウェア(順方向テクスチャマッピングを使用)の一部は、クリッピングとUV座標に関連する問題を抱えていました。
オクルージョンクリッピング(Zまたは深度クリッピング)
3Dコンピュータグラフィックスでは、「Z」はしばしばビューポートの原点を中心とする座標系の深さ軸を指します。「Z」は「深度」と同じ意味で使用され、概念的には「仮想スクリーンへの」距離に対応します。したがって、この座標系では、「X」および「Y」は、ユーザーの画面またはビューポートに配置された従来のデカルト座標系を指します。このビューポートは、視錐台のジオメトリによって定義され、視野をパラメータ化します。
Zクリッピング、または深度クリッピングは、画面に対する深度に基づいて特定のシーンオブジェクトを選択的にレンダリングする手法を指します。ほとんどのグラフィックツールキットを使用すると、プログラマは「近い」および「遠い」クリップの深さを指定でき、これらの2つのプレーン間のオブジェクトの部分のみが表示されます。創造的なアプリケーションプログラマは、このメソッドを使用して、シーン内の3Dオブジェクトの内部の視覚化をレンダリングできます。たとえば、医療画像アプリケーションでは、この手法を使用して人体の内部の臓器をレンダリングできます。ビデオゲームプログラマは、クリッピング情報を使用してゲームロジックを高速化できます。たとえば、他のゲームエンティティを遮る高い壁や建物は、GPUの時間を節約できます。GPUの時間は、そうでなければシーンの後部のアイテムの変換とテクスチャリングに費やされるでしょう。緊密に統合されたソフトウェアプログラムは、この同じ情報を使用して、プレーヤーに見えないオブジェクトのゲームロジックを最適化することにより、CPU時間を節約できます。
ビデオゲームでのクリッピングの重要性
優れたクリッピング戦略は、ゲームのフレームレートと視覚的品質を最大化するために、ビデオゲームの開発において重要です。毎年高速なGPUチップにもかかわらず、特に今日一般的な複数のテクスチャとシェーディングパスでは、ポリゴンの変換、テクスチャ、およびシェーディングに計算コストがかかります。したがって、ゲーム開発者は、各ビデオフレームを描画できるポリゴンの特定の「予算」内に住む必要があります。
ゲームの視覚的品質を最大化するために、開発者はハードウェアの制限ではなく、審美的な選択によりポリゴンの予算を決定することを好みます。そのため、パフォーマンスを節約する、またはグラフィックパイプラインアクセラレーションを活用する最適化により、プレーヤーのエクスペリエンスが向上します。
クリッピングの最適化は、現在のシーンのレンダリングを高速化し、ハードウェアの能力内でレンダラー時間とメモリの使用を節約できます。プログラマーは巧妙なヒューリスティックを考案してクリッパーを高速化します。ラインキャスティングまたはレイトレーシングを使用して、カメラの視野内にないポリゴンを100%の精度で判断することは計算上不可能な場合があるためです。 octree、R *ツリー、境界ボリューム階層などの空間認識データ構造を使用して、シーンをレンダリング領域と非レンダリング領域に分割できます(必要に応じてレンダラーがツリーノード全体を拒否または受け入れることができます)。
シーンに反射面が含まれている場合、視点のジオメトリに基づくオクルージョンの最適化によりアーティファクトが発生する場合があります。一般的な手法である反射マッピングでは、オプションとして、メインビュー錐台の視点から既存のオクルージョン推定値を使用できます。または、パフォーマンスが許せば、新しいオクルージョンマップを別のカメラ位置から計算できます。
歴史的な理由から、一部のビデオゲームでは、オクルージョンテストと同じロジックとハードウェアアクセラレーションを使用した衝突検出の最適化が使用されていました。結果として、非専門家は衝突検出を指すために「クリップ」という用語(およびその反意語「ノークリップ」)を誤って使用しました。
アルゴリズム
- ラインクリッピングアルゴリズム :
- コーエン・サザーランド
- リャンバルスキー
- 高速クリッピング
- サイラス・ベック
- ニコル・リー・ニコル
- スカラ
- O(lg N)アルゴリズム
- ポリゴンクリッピングアルゴリズム :
- グライナー・ホルマン
- サザーランド–ホジマン
- ワイラー–アサートン
- ヴァッティ
- レンダリング方法
- 画家のアルゴリズム