ALCCClippingVolume:3DGS のクリッピングボリューム
クリッピングボリュームの Actor で、ボックス形またはスフィア形のボリュームで LCC シーンの一部を切り取る。
| モジュール | LCC4UnrealRuntime |
| ヘッダーファイル | Tools/LCCClippingVolume.h |
| 親クラス | AVolume |
| パネルでの表示名 | LCC Clipping Volume |
#include "Tools/LCCClippingVolume.h"
使用手順、デモの効果、プロパティパネルの説明は シーン編集 - クリッピングボリューム を参照する。このページではインターフェースのみを挙げる。
Properties
| プロパティ | 型 | 説明 |
|---|---|---|
bEnabled | bool | クリッピングに参加するか |
Mode | EClipType | Inside はボリュームの内側を切り取り、Outside はボリュームの外側を切り取る |
VolumeType | EClipVolumeType | Box はボックス形、Sphere はスフィア形 |
値の意味は EClipType と EClipVolumeType を参照する。
3 つのプロパティにはいずれも Setter がなく、直接代入すればよい。実行時にプロパティやトランスフォームを変更しても次のフレームで自動的に反映され、レンダリング側に手動で通知する必要はない。
Methods
SetUpdateComponent / Refresh(廃止)
UFUNCTION(BlueprintCallable, Category = "XGrids", meta = (DeprecatedFunction))
void SetUpdateComponent(ULCCComponentBase* Component);
UFUNCTION(BlueprintCallable, Category = "XGrids", meta = (DeprecatedFunction))
void Refresh();
どちらのメソッドも廃止され、実装は空の処理である。呼び出しても効果はなく、エラーにもならない。
クリッピングのデータは毎フレーム読み取られるようになったため、プロパティとトランスフォームの変更は次のフレームで画面に反映される。旧バージョンのように先に SetUpdateComponent でバインドし、変更後に Refresh() を呼ぶという流れは不要である。
既存のコードにある呼び出しはそのまま削除できる。ブループリントではこの 2 つのノードに廃止の警告が表示され、対応方法はノードを削除することである。
実行時に作成する
#include "Tools/LCCClippingVolume.h"
#include "LCCComponentBase.h"
ALCCClippingVolume* AMyTool::CreateBoxClip(
ULCCComponentBase* Component, const FVector& Location, const FVector& Extent)
{
ALCCClippingVolume* Volume = GetWorld()->SpawnActor<ALCCClippingVolume>(
ALCCClippingVolume::StaticClass(), Location, FRotator::ZeroRotator);
if (!Volume)
{
return nullptr;
}
Volume->VolumeType = EClipVolumeType::Box;
Volume->Mode = EClipType::Inside;
Volume->bEnabled = true;
// AVolume のサイズはスケールで制御する
Volume->SetActorScale3D(Extent / 100.0f);
Component->AddClippingVolume(Volume);
return Volume;
}
クリッピングの効果を一時的に切り替えるときは配列に追加や削除をせず、bEnabled を直接変更するほうが軽い。
for (ALCCClippingVolume* Volume : MyVolumes)
{
if (Volume)
{
Volume->bEnabled = bEnable;
}
}
実行時にクリッピングボリュームを移動してアニメーションを作る場合は、トランスフォームを変えるだけでよい。
// クリッピングボリュームをシーン内で動かす
FVector Loc = ClipVolume->GetActorLocation();
Loc.X += 200.0f * DeltaTime;
ClipVolume->SetActorLocation(Loc);
Blueprint のノードは シーン編集 - Blueprint のメソッド を参照する。
Notes
- クリッピングはレンダリングにのみ影響し、コリジョンには影響しない。切り取られた領域も引き続きレイキャストで当たり、キャラクターを遮る。
- 複数のクリッピングボリュームが同時に作用する場合はそれぞれ独立に判定され、効果が重なる。
InsideとOutsideが混在すると予期しない結果になりやすい。 - 同時に有効になるクリッピングボリュームの数には上限があり、未ライセンスの場合は 50 個である。 超えた分はレンダリングに参加せず、警告を出力する。クリッピングボリュームと断面プレーンはこの枠を共有する。ライセンスの説明は エディションとライセンス を参照する。
- クリッピングボリュームを破棄してもレンダリングの更新が 1 回トリガーされるだけで、Component の
ClippingVolumes配列から要素は削除されない。配列には無効なポインターが残る(レンダリング時に自動的にスキップされる)。配列をきれいに保ちたい場合は、破棄する前にRemoveClippingVolumeを呼ぶ。
See Also
- シーン編集:完全な使用説明
- ALCCSectionPlane:プレーンで切断する
- ULCCComponentBase:
AddClippingVolumeとRemoveClippingVolume