ALCCLoadVolume : volume de chargement
Hérite de AVolume, affiché dans le panneau sous le nom LCC Load Volume.
La différence essentielle avec un volume de découpe ou un plan de coupe tient à l'étape à laquelle il agit : la découpe et la coupe ne modifient que le résultat final du rendu, les données étant chargées et envoyées en mémoire vidéo comme d'habitude ; le volume de chargement agit pendant le traversal des nœuds, et les nœuds rejetés ne sont jamais lus. C'est donc le seul des trois qui réduise le volume chargé et l'occupation de la mémoire vidéo.
| En-tête | Tools/LCCLoadVolume.h |
| Classe de base | AVolume |
| Blueprint | Blueprintable / BlueprintType |
| Licence | Fonctionnalité de l'édition Pro, sans effet sans licence |
Un même volume de chargement peut agir simultanément sur plusieurs LCC Actors de la scène.
Propriétés
| Propriété | Type | Description |
|---|---|---|
bEnabled | bool | Activation |
Mode | ELoadRegion | Inside (ne charger que l'intérieur) ou Outside (exclure l'intérieur) |
VolumeType | ELoadVolumeType | Box (boîte) ou Sphere (sphère) |
La signification des valeurs figure dans ELoadRegion et ELoadVolumeType.
Aucune des trois propriétés n'a de Setter, il suffit de les affecter directement. Le filtrage s'applique au moment du chargement, une modification impose donc de recharger les données.
Précision de la bordure
Le test se fait par nœud et non par splat, la bordure est donc plus grossière que celle d'un volume de découpe : un nœud proche du bord est entièrement écarté dès qu'il ne satisfait pas la condition.
Les deux modes utilisent des tests différents :
| Mode | Condition | Comportement de la bordure |
|---|---|---|
Inside | Un nœud n'est chargé que s'il se situe entièrement dans le volume | L'étendue réellement conservée est légèrement plus petite que le volume |
Outside | Un nœud est exclu dès qu'il chevauche le volume | L'étendue réellement exclue est légèrement plus grande que le volume |
Les deux côtés sont volontairement conservateurs, afin de garantir la stabilité lors des changements de LOD. Dans un octree, la boîte englobante d'un nœud enfant se trouve toujours à l'intérieur de celle de son parent, et le LOD passe de l'enfant au parent lorsque la caméra s'éloigne. Si Inside utilisait un test d'intersection, le nœud parent serait chargé du fait d'un chevauchement partiel, ramenant des zones que les enfants avaient déjà exclues : visuellement, un bloc de contenu apparaîtrait brusquement en s'éloignant. Avec un test d'inclusion, Outside présenterait le problème symétrique.
Quand une bordure précise est nécessaire, superposer un volume de découpe sur la même transformation : le volume de chargement réduit le volume chargé et le volume de découpe affine le bord.
Création à l'exécution
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); // must be configured before loading
L'ordre est important : le filtrage a lieu pendant le chargement, donc ajouter ou retirer un volume de chargement ou modifier une propriété après Load() ne change rien aux données déjà chargées ; un rechargement est nécessaire.
// Reload after changing the filtered range
Volume->SetActorLocation(NewLocation);
Component->Refresh(); // internally UnLoad then Load
Refresh() coûte autant qu'un rechargement complet, voir ALCCActorBase::Refresh.
Choisir entre ce volume et un volume de découpe
| Besoin | Lequel utiliser |
|---|---|
| Extraire une petite partie d'une grande scène en économisant la mémoire vidéo et le temps de chargement | Volume de chargement |
| Percer des ouvertures, ouvrir une enveloppe, avec une bordure précise | Volume de découpe |
| Économiser la mémoire vidéo et obtenir une bordure précise | Superposer les deux, avec la même transformation |
| Activer et désactiver fréquemment l'effet à l'exécution | Volume de découpe (modifier bEnabled prend effet à l'image suivante, sans rechargement) |
Voir aussi
- ALCCClippingVolume : volume de découpe
- ALCCSectionPlane : plan de coupe
- AddLoadVolume : les méthodes d'ajout et de retrait côté Component
- Édition de scène - Volumes de chargement : étapes d'utilisation et illustrations
- Éditions et licences : périmètre de la licence