切断面
切断面は、仮想的な平面の片方のピクセルをクリップし、メッシュの内部を表示する視覚機能です。 下の図は、効果を示しています。 左側には元のメッシュ、右側にはメッシュの内側が表示されています。
CutPlaneComponent
CutPlaneComponent を作成して、シーンに切断面を追加します。 平面の位置と向きは、コンポーネントの所有者エンティティによって決まります。
void CreateCutPlane(RenderingSession session, Entity ownerEntity)
{
CutPlaneComponent cutPlane = (CutPlaneComponent)session.Connection.CreateComponent(ObjectType.CutPlaneComponent, ownerEntity);
cutPlane.Normal = Axis.X; // normal points along the positive x-axis of the owner object's orientation
cutPlane.FadeColor = new Color4Ub(255, 0, 0, 128); // fade to 50% red
cutPlane.FadeLength = 0.05f; // gradient width: 5cm
}
void CreateCutPlane(ApiHandle<RenderingSession> session, ApiHandle<Entity> ownerEntity)
{
ApiHandle<CutPlaneComponent> cutPlane = session->Connection()->CreateComponent(ObjectType::CutPlaneComponent, ownerEntity)->as<CutPlaneComponent>();;
cutPlane->SetNormal(Axis::X); // normal points along the positive x-axis of the owner object's orientation
Color4Ub fadeColor;
fadeColor.channels = { 255, 0, 0, 128 }; // fade to 50% red
cutPlane->SetFadeColor(fadeColor);
cutPlane->SetFadeLength(0.05f); // gradient width: 5cm
}
CutPlaneComponent のプロパティ
次のプロパティは、切断面コンポーネントで公開されます。
Enabled
: コンポーネントを無効にすることで、切断面を一時的にオフにすることができます。 無効化された切断面は、レンダリング オーバーヘッドを発生させず、グローバルな切断面の制限にもカウントされません。Normal
: 面法線として使用される方向 (+X、-X、+Y、-Y、+Z、-Z) を指定します。 この方向は、所有者のエンティティの向きに対して相対的です。 正確に配置するため、所有者エンティティを移動および回転します。FadeColor
とFadeLength
では、FadeColor のアルファ値が 0 以外の場合、切断面に近いピクセルは、FadeColor の RGB 部分の色へフェードします。 アルファ チャネルの強度によって、フェードの色に完全にフェードするか、部分的にフェードするかが決まります。 このフェードが行われる距離は、FadeLength によって定義されます。
ObjectFilterMask
: 切断面の影響を受けるジオメトリを決定するフィルター ビットマスク。 詳細については、次の段落を参照してください。
選択的切断面
特定のジオメトリにのみ影響するように、個々の切断面を構成することができます。 次の図は、この設定が実際にどのように見えるかを示しています。
フィルター処理は、切断面側のビット マスクとジオメトリに設定されている 2 番目のビット マスク間の論理ビット マスク比較を通じて行われます。 マスク間の論理 AND
演算の結果がゼロでない場合、切断面はジオメトリに影響します。
- 切断面コンポーネントのビット マスクは、その
ObjectFilterMask
プロパティを介して設定されます - ジオメトリのサブ階層のビット マスクは、HierarchicalStateOverrideComponent を介して設定されます。
例 :
切断面フィルター マスク | ジオメトリ フィルター マスク | 論理 AND の結果 |
切断面はジオメトリに影響するか |
---|---|---|---|
(0000 0001) == 1 | (0000 0001) == 1 | (0000 0001) == 1 | はい |
(1111 0000) == 240 | (0001 0001) == 17 | (0001 0000) == 16 | はい |
(0000 0001) == 1 | (0000 0010) == 2 | (0000 0000) == 0 | いいえ |
(0000 0011) == 3 | (0000 1000) == 8 | (0000 0000) == 0 | いいえ |
ヒント
切断面の ObjectFilterMask
を 0 に設定すると、論理 AND
の結果が null 以外になることはないため、どのジオメトリにも影響しません。 レンダリング システムでは、そもそもこのようなプレーンは考慮されないため、個々の切断面を無効にするには、これが簡単な方法です。 このような切断面は、8 個というアクティブなプレーンの制限にもカウントされません。
制限事項
- Azure Remote Rendering では、最大 8 個のアクティブな切断面がサポートされています。 さらに多くの切断面のコンポーネントを作成することもできますが、より多くを同時に有効にしようとすると、アクティブ化が無視されます。 シーンに影響を与えるコンポーネントを切り替えたい場合は、最初に他のプレーンを無効にします。
- 切断面は純粋に単なる視覚機能であり、空間クエリの結果には影響しません。 切り開かれたメッシュにレイ キャストする場合は、射線の開始点を、切断面上に配置するように調整します。 このようにすることで、射線を表示されている部分にのみ当てることができます。
パフォーマンスに関する考慮事項
アクティブな各切断面により、レンダリング中にわずかなコストが発生します。 不要になった切断面は、無効化または削除します。