ALCCLoadVolume: Load-Volumen
Leitet von AVolume ab, im Panel angezeigt als LCC Load Volume.
Der entscheidende Unterschied zu einem Clipping-Volumen oder einer Schnittebene ist die Phase, in der es greift: Clipping und Schneiden ändern nur das Endergebnis des Renderings, während die Daten wie üblich geladen und in den Grafikspeicher hochgeladen werden; ein Load-Volumen greift während der Node-Traversierung, und abgewiesene Nodes werden gar nicht gelesen. Es ist damit das einzige der drei, das Ladevolumen und Grafikspeicherbedarf senkt.
| Header | Tools/LCCLoadVolume.h |
| Basisklasse | AVolume |
| Blueprint | Blueprintable / BlueprintType |
| Lizenz | Funktion der Pro Edition; ohne Lizenz ohne Wirkung |
Ein Load-Volumen kann gleichzeitig auf mehrere LCC-Actors in der Szene wirken.
Properties
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
bEnabled | bool | Ob es aktiviert ist |
Mode | ELoadRegion | Inside (nur laden, was innen liegt) oder Outside (ausschließen, was innen liegt) |
VolumeType | ELoadVolumeType | Box oder Sphere |
Zur Bedeutung der Werte siehe ELoadRegion und ELoadVolumeType.
Keine der drei Eigenschaften hat einen Setter; sie werden direkt zugewiesen. Das Filtern greift beim Laden, nach einer Änderung müssen die Daten daher neu geladen werden.
Genauigkeit der Grenze
Der Test arbeitet pro Node und nicht pro Splat, die Grenze ist daher grober als bei einem Clipping-Volumen: Ein Randnode fällt vollständig weg, sobald er die Bedingung nicht erfüllt.
Die beiden Modi verwenden unterschiedliche Tests:
| Modus | Bedingung | Verhalten an der Grenze |
|---|---|---|
Inside | Ein Node wird nur geladen, wenn er vollständig im Volumen liegt | Der behaltene Bereich ist etwas kleiner als das Volumen |
Outside | Ein Node wird ausgeschlossen, sobald er das Volumen überlappt | Der ausgeschlossene Bereich ist etwas größer als das Volumen |
Beide Seiten sind bewusst konservativ, um das LOD-Umschalten stabil zu halten. In einem Octree liegen die Bounds eines Kind-Nodes immer innerhalb der des Elternteils, und die LOD wechselt vom Kind zum Elternteil, wenn sich die Kamera entfernt. Würde Inside einen Schnittmengentest verwenden, würde der Elternteil wegen der teilweisen Überlappung geladen und brächte Regionen zurück, die die Kinder bereits ausgeschlossen hatten — sichtbar als ein Block Inhalt, der beim Herauszoomen plötzlich auftaucht. Outside hätte mit einem Enthaltenseinstest das symmetrische Problem.
Wird eine exakte Grenze gebraucht, ein Clipping-Volumen mit derselben Transformation darüberlegen: Das Load-Volumen senkt das Ladevolumen, das Clipping-Volumen trimmt den Rand.
Erstellen zur Laufzeit
ALCCLoadVolume* Volume = GetWorld()->SpawnActor<ALCCLoadVolume>(
ALCCLoadVolume::StaticClass(), Location, FRotator::ZeroRotator);
Volume->VolumeType = ELoadVolumeType::Box;
Volume->Mode = ELoadRegion::Inside;
Volume->bEnabled = true;
Volume->SetActorScale3D(FVector(20.0f, 20.0f, 10.0f));
Component->AddLoadVolume(Volume);
Component->Load(Path); // muss vor dem Laden konfiguriert sein
Die Reihenfolge ist wichtig: Das Filtern geschieht während des Ladens, ein Hinzufügen oder Entfernen eines Load-Volumens oder eine Eigenschaftsänderung nach Load() verändert die bereits geladenen Daten nicht; ein erneutes Laden ist nötig.
// Nach Änderung des gefilterten Bereichs neu laden
Volume->SetActorLocation(NewLocation);
Component->Refresh(); // intern UnLoad, dann Load
Refresh() kostet so viel wie ein vollständiges erneutes Laden, siehe ALCCActorBase::Refresh.
Wahl zwischen diesem und einem Clipping-Volumen
| Bedarf | Was verwenden |
|---|---|
| Nur einen kleinen Teil einer großen Szene nutzen und Grafikspeicher sowie Ladezeit sparen | Load-Volumen |
| Löcher schneiden oder eine Hülle öffnen, wo eine exakte Grenze zählt | Clipping-Volumen |
| Grafikspeicher sparen und exakte Grenze | Beide mit derselben Transformation übereinanderlegen |
| Den Effekt zur Laufzeit häufig umschalten | Clipping-Volumen (bEnabled wirkt im nächsten Frame, ohne erneutes Laden) |
See Also
- ALCCClippingVolume: Clipping-Volumen
- ALCCSectionPlane: Schnittebene
- AddLoadVolume: die Hinzufügen- und Entfernen-Schnittstellen auf Component-Seite
- Szenenbearbeitung - Load-Volumen: Schritte und Abbildungen
- Editionen und Lizenzierung: Lizenzumfang