Manuals
Manuals




This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English

クリッピング

GUI ノード(GUI node)は、ほかのノードの描画方法を制御するマスクである クリッピング(clipping) ノードとして使用できます。このマニュアルでは、この機能の仕組みを説明します。

クリッピングノードの作成

ボックスノード(box node)、テキストノード(text node)、円や扇形を表示するパイノード(pie node)は、クリッピングに使用できます。クリッピングノードを作成するには、GUI にノードを追加してから、次のプロパティを適切に設定します。

Clipping Mode
クリッピングに使用するモードです。
  • None は、クリッピングを行わずにノードを描画します。
  • Stencil は、ノードが現在のステンシルマスク(stencil mask)に書き込むようにします。
Clipping Visible
チェックを入れると、ノードの内容を描画します。
Clipping Inverted
チェックを入れると、ノードの形状を反転したものをマスクに書き込みます。

次に、クリッピングしたいノードをクリッピングノードの子として追加します。

クリッピングの作成

ステンシルマスク

クリッピングは、ノードが ステンシルバッファー(stencil buffer) に書き込むことで機能します。このバッファーにはクリッピングマスク、つまりピクセルを描画するかどうかをグラフィックスカードに伝える情報が格納されます。

  • 親がクリッピングノードではなく、クリッピングモードが Stencil に設定されたノードは、ステンシルバッファーに格納される新しいクリッピングマスクに自身の形状(または反転した形状)を書き込みます。
  • クリッピングノードの親もクリッピングノードの場合は、代わりに親のクリッピングマスクをクリッピングします。子のクリッピングノードは現在のクリッピングマスクを 拡張 することはできず、さらにクリッピングすることしかできません。
  • クリッピングノードの子で、自身はクリッピングノードではないノードは、親の階層が作成したクリッピングマスクを使用して描画されます。

クリッピングの階層

ここでは、3つのノードが階層構造に設定されています。

  • 六角形と正方形は、どちらもステンシルクリッピングノードです。
  • 六角形が新しいクリッピングマスクを作成し、正方形がそれをさらにクリッピングします。
  • 円形のノードは通常のパイノードなので、親のクリッピングノードが作成したクリッピングマスクを使用して描画されます。

この階層では、通常のクリッピングノードと反転したクリッピングノードの組み合わせが4通りあります。緑色の領域は円の描画される部分を示しています。残りの部分はマスクされます。

ステンシルマスク

ステンシルの制限

  • ステンシルクリッピングノードの総数は256を超えることはできません。
  • 子の ステンシル ノードをネストできる深さは最大8階層です。(ステンシルクリッピングを使用するノードのみを数えます。)
  • 同じ親を持つステンシルノードの最大数は127です。ステンシル階層を1段下がるごとに、上限は半分になります。
  • 反転したノードはコストが高くなります。反転したクリッピングノードは最大8つまでで、1つ追加するごとに、反転していないクリッピングノードの最大数が半分になります。
  • ステンシルは、ノードの ジオメトリ からステンシルマスクを描画します(テクスチャからではありません)。Inverted clipper プロパティを設定すると、マスクを反転できます。

レイヤー

レイヤー(layer)は、ノードの描画順序(およびバッチ処理)を制御するために使用できます。レイヤーとクリッピングノードを併用すると、通常のレイヤー順は上書きされます。レイヤー順は常にクリッピング順より優先されます。レイヤーの割り当てをクリッピングノードと組み合わせた場合、クリッピングが有効な親ノードが子よりも上位のレイヤーに属していると、クリッピングが順不同で行われる可能性があります。レイヤーが割り当てられていない子は引き続き階層に従い、親の後に描画およびクリッピングされます。

クリッピングノードとその階層は、レイヤーが割り当てられている場合は最初に描画され、レイヤーが割り当てられていない場合は通常の順序で描画されます。

レイヤーとクリッピング

この例では、クリッピングノードの「Donut BG」と「BG」が、どちらも同じレイヤー1を使用しています。この2つの間の描画順序は階層内の順序に従うため、「Donut BG」が「BG」より先に描画されます。一方、子ノードの「Donut Shadow」は、レイヤー順が上位のレイヤー2に割り当てられているため、両方のクリッピングノードの後に描画されます。この場合、描画順序は次のようになります。

  • Donut BG
  • BG
  • BG Frame
  • Donut Shadow

このように、「Donut Shadow」オブジェクトは、一方のクリッピングノードの子でしかないにもかかわらず、レイヤー順によって両方のクリッピングノードでクリッピングされます。