ALCCLoadVolume: volume di caricamento
Deriva da AVolume e nel pannello è mostrato come LCC Load Volume.
La differenza fondamentale rispetto a un volume di taglio o a un piano di sezione è la fase in cui agisce: taglio e sezionamento cambiano solo il risultato finale del rendering, mentre i dati vengono comunque caricati e caricati in memoria video; un volume di caricamento agisce durante l'attraversamento dei nodi e i nodi scartati non vengono letti affatto. È quindi l'unico dei tre che riduce la quantità di caricamento e l'uso di memoria video.
| Header | Tools/LCCLoadVolume.h |
| Classe base | AVolume |
| Blueprint | Blueprintable / BlueprintType |
| Licenza | Funzionalità dell'edizione Pro; senza licenza non ha effetto |
Un solo volume di caricamento può agire contemporaneamente su più Actor LCC nella scena.
Properties
| Proprietà | Tipo | Descrizione |
|---|---|---|
bEnabled | bool | Se è abilitato |
Mode | ELoadRegion | Inside (carica solo ciò che è interno) oppure Outside (esclude ciò che è interno) |
VolumeType | ELoadVolumeType | Box (box) oppure Sphere (sfera) |
Per il significato dei valori vedere ELoadRegion e ELoadVolumeType.
Nessuna delle tre proprietà ha un setter: si assegnano direttamente. Il filtro agisce al momento del caricamento, quindi dopo una modifica i dati vanno ricaricati.
Precisione del bordo
Il test lavora per nodo e non per splat, quindi il bordo è più grossolano di quello di un volume di taglio: un nodo al bordo viene scartato per intero appena non soddisfa la condizione.
Le due modalità usano test diversi:
| Modalità | Condizione | Comportamento al bordo |
|---|---|---|
Inside | Un nodo viene caricato solo se ricade interamente nel volume | L'intervallo conservato è un po' più piccolo del volume |
Outside | Un nodo viene escluso appena si sovrappone al volume | L'intervallo escluso è un po' più grande del volume |
Entrambi i lati sono volutamente conservativi per mantenere stabile il cambio di LOD. In un octree i bound di un nodo figlio si trovano sempre all'interno di quelli del padre, e il LOD passa dal figlio al padre quando la telecamera si allontana. Se Inside usasse un test di intersezione, il padre verrebbe caricato perché si sovrappone parzialmente, riportando regioni che i figli avevano già escluso: visivamente, un blocco di contenuto che compare all'improvviso allontanandosi. Outside avrebbe il problema simmetrico con un test di contenimento.
Quando serve un bordo preciso, sovrapporre un volume di taglio con la stessa trasformazione: il volume di caricamento riduce la quantità di caricamento e quello di taglio rifinisce il bordo.
Creazione a runtime
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); // va configurato prima del caricamento
L'ordine è importante: il filtro avviene durante il caricamento, quindi aggiungere o rimuovere un volume di caricamento o cambiare una proprietà dopo Load() non modifica i dati già caricati; serve ricaricare.
// Ricaricare dopo aver cambiato l'intervallo filtrato
Volume->SetActorLocation(NewLocation);
Component->Refresh(); // internamente UnLoad e poi Load
Refresh() costa quanto un ricaricamento completo, vedere ALCCActorBase::Refresh.
Scelta tra questo e un volume di taglio
| Esigenza | Quale usare |
|---|---|
| Prendere una piccola parte di una scena grande risparmiando memoria video e tempo di caricamento | Volume di caricamento |
| Aprire fori o tagliare un guscio, dove conta un bordo preciso | Volume di taglio |
| Risparmiare memoria video e avere anche un bordo preciso | Sovrapporre entrambi con la stessa trasformazione |
| Alternare l'effetto frequentemente a runtime | Volume di taglio (cambiare bEnabled ha effetto dal frame successivo, senza ricaricare) |
See Also
- ALCCClippingVolume: volume di taglio
- ALCCSectionPlane: piano di sezione
- AddLoadVolume: le interfacce di aggiunta e rimozione lato Component
- Modifica della scena - Volumi di caricamento: procedura e immagini
- Edizioni e licenze: ambito della licenza