ULCC2Component : Component de la pipeline LCC2
Component propre à la pipeline LCC2, qui hérite de ULCCComponentBase. Il fournit en plus le contrôle du nombre de bandes d'harmoniques sphériques, le système de normales d'éclairage et le contrôle du seuil de profondeur.
| Module | LCC4UnrealRuntime |
| En-tête | LCC2Component.h |
| Classe parente | ULCCComponentBase |
| Détenu par | ALCC2Actor, ASogActor, ASpzActor, APlyActor |
#include "LCC2Component.h"
Obtenir l'instance :
ULCC2Component* Comp = Cast<ULCC2Component>(LCC2Actor->GetLCCComponent());
Ce Component sert quatre formats de données à la fois : répertoire LCC2, .sog, .spz et .ply. Les trois derniers réutilisent la même pipeline de rendu en construisant des métadonnées virtuelles, le Component obtenu est donc toujours un ULCC2Component.
Note : les interfaces de viewports multiples de la classe de base (
SetPlayerLoadMode,SetPlayerRenderMode,SetSceneCaptureLoadMode,SetSceneCaptureRenderMode,ModifyPlayerTransform,CancelModifyPlayerTransform) ne s'appliquent pas à la pipeline LCC2 ; les appeler ne provoque pas d'erreur, mais ne donne pas le résultat attendu. Voir ULCCComponent pour le détail.
Propriétés
| Propriété | Type | Défaut | Plage | Description |
|---|---|---|---|---|
SHBands | int32 | 3 | 1~3 | Nombre de bandes d'harmoniques sphériques. Par défaut, le nombre stocké dans les données, qui est aussi la limite supérieure |
bSyncLoadAtRuntime | bool | true | — | Indique si les formats à fichier unique sont chargés de façon synchrone pendant BeginPlay dans une build packagée |
LightingScale | float | 0.0 | 0~1 | Luminosité de la couleur d'origine du 3DGS avant l'intervention de l'éclairage de scène |
AlphaThreshold | float | 0.5 | 0,01~0,99 | Seuil d'opacité cumulée pour la détermination de la profondeur médiane, élément avancé |
NormalMode | ELCC2NormalGenerationMode | Fixed | — | Mode de génération des normales, qui détermine la réponse du 3DGS à la lumière de la scène |
FixedNormal | FVector | (0, 0, 1) | — | Normale monde partagée par tout le 3DGS en mode Fixed |
NormalPole | FVector | (1, 0, 1) | — | Orientation de la surface en mode Hemispherical |
NormalHemiSpread | float | 0.5 | 0~4 | Intensité de la variation lumineuse en mode Hemispherical |
Les propriétés liées aux normales portent EditConditionHides : le panneau Details n'affiche que celles utilisées par le NormalMode courant.
bSyncLoadAtRuntime n'a de sens que pour les formats à fichier unique (.ply / .spz / .sog), il n'apparaît donc que dans le panneau Details de ces trois Actors. Activé, l'exécution packagée bloque le thread de jeu jusqu'à ce que les données soient prêtes, ce qui évite un écran noir au démarrage ; désactivé, l'image apparaît immédiatement et les données se complètent en arrière-plan. Dans l'éditeur, le chargement est toujours asynchrone et n'est pas influencé par cette valeur. Voir Démarrage rapide - Chargement au démarrage des formats à fichier unique.
Deux autres différences avec la classe de base :
MetaInfo(de typeFLCC2MetaInfo) est un membre privé, inaccessible de l'extérieur côté C++ et visible uniquement depuis Blueprint (lecture seule dans le panneau Details). En C++, utiliser GetMetaInfo2 pour obtenir les champs complets.- À la construction, le réglage de chargement complet de
Performanceest réécrit en « interrupteur activé, valeurfalse», soit l'inverse de la valeur par défaut deFRenderInfo. Autrement dit, LCC2 n'emprunte pas le chargement complet par défaut ; l'activer explicitement au besoin.
Harmoniques sphériques
SetSHBands / GetSHBands
UFUNCTION(BlueprintCallable, Category = "XGrids")
void SetSHBands(int32 InSHBands);
UFUNCTION(BlueprintPure, Category = "XGrids")
int32 GetSHBands() const;
Définit le nombre de bandes d'harmoniques sphériques participant au calcul, plage 1~3. Effectif pour tous les formats rendus par ce Component, à savoir LCC2, SOG, SPZ et PLY.
| Paramètre | Type | Description |
|---|---|---|
InSHBands | int32 | Nombre de bandes ; 1 est le plus économe, 3 le plus complet. Dépasser le nombre réellement stocké dans les données est sans effet |
Points d'utilisation :
- La valeur par défaut provient des données chargées et constitue aussi la limite supérieure. Régler 3 alors que les données n'en stockent que 2 n'apporte rien de plus.
- Comparé à une désactivation complète des harmoniques sphériques avec
SetUseShcoef(false), réduire le nombre de bandes est un compromis plus fin. - L'effet suppose que
bUseShcoefest activé et que le mode de rendu est 3DGS, sinon cette valeur n'entre pas dans le calcul. - Le compromis entre qualité d'image et coût est décrit dans Réglages visuels - Bandes SH.
ULCC2Component* Comp = Cast<ULCC2Component>(Actor->GetLCCComponent());
if (Comp)
{
// Drop to 2 bands on mid-range devices
Comp->SetSHBands(2);
}
Écriture d'une configuration par palier :
void ConfigureSH(ULCC2Component* Comp, EQualityTier Tier)
{
if (!Comp || !Comp->CanSetShcoef())
{
return; // the data itself has no spherical harmonics, nothing to do
}
switch (Tier)
{
case EQualityTier::High:
Comp->SetUseShcoef(true);
Comp->SetSHBands(3);
break;
case EQualityTier::Medium:
Comp->SetUseShcoef(true);
Comp->SetSHBands(2);
break;
case EQualityTier::Low:
Comp->SetUseShcoef(false); // turn it off entirely
break;
}
}
Éclairage
LightingScale
UPROPERTY(Interp, EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting",
meta = (UIMin = "0.0", UIMax = "1.0", ClampMin = "0.0", ClampMax = "1.0"))
float LightingScale = 0.0f;
Luminosité de la couleur de base du 3DGS avant l'intervention de l'éclairage de scène, plage 0~1, valeur par défaut 0. La valeur 0 signifie que tout est piloté par l'éclairage de scène, la valeur 1 que la luminosité d'origine est intégralement conservée.
L'influence des valeurs et la manière de les régler figurent dans Normales et éclairage - LCC2 Lighting Scale.
Points d'utilisation :
- N'a de sens que lorsque
LightModevautLit; sans effet enUnlit. - C'est une propriété
BlueprintReadWrite: l'affectation directe suffit, il n'y a pas de fonction setter. - Portant
Interp, elle accepte des clés dans Sequencer pour un cycle jour/nuit.
Comp->SetLightMode(ELightMode::Lit);
Comp->LightingScale = 0.3f; // keep 30% of the original brightness, leave the rest to scene light
NormalMode
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting")
ELCC2NormalGenerationMode NormalMode = ELCC2NormalGenerationMode::Fixed;
Contrôle la manière dont la surface du 3DGS répond à l'éclairage de scène. Les données 3DGS n'ont pas de normales géométriques propres : les trois premiers modes construisent des normales par approximation, seul ProxyMesh fournit de vraies normales.
La comparaison des quatre modes, leurs cas d'usage et la méthode de réglage figurent dans Normales et éclairage, et la définition des valeurs dans Enums.
// Fixed mode, normal pointing up
Comp->NormalMode = ELCC2NormalGenerationMode::Fixed;
Comp->FixedNormal = FVector(0.0, 0.0, 1.0);
// Hemispherical mode, adjust the sweep direction and the contrast of the lighting
Comp->NormalMode = ELCC2NormalGenerationMode::Hemispherical;
Comp->NormalPole = FVector(1.0, 0.0, 1.0);
Comp->NormalHemiSpread = 1.2f;
FixedNormal
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting",
meta = (EditCondition = "NormalMode == ELCC2NormalGenerationMode::Fixed", EditConditionHides))
FVector FixedNormal = FVector(0.0, 0.0, 1.0);
Propre au mode Fixed. Normale en espace monde partagée par tout le 3DGS, orientée vers le haut par défaut. Aucune normalisation nécessaire.
Points d'utilisation :
- Une normale unique pour l'ensemble signifie une luminosité unique pour l'ensemble, égale à
dot(normale, direction de la lumière). - Lorsque la lumière arrive par l'arrière de la normale, l'ensemble s'assombrit, voire devient tout noir. En extérieur, avec une normale vers le haut et une source lumineuse en hauteur, cela ne pose généralement pas de problème.
- Si le sujet de la scène est un mur, orienter la normale dans le sens du mur est plus cohérent.
NormalPole
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting",
meta = (EditCondition = "NormalMode == ELCC2NormalGenerationMode::Hemispherical", EditConditionHides))
FVector NormalPole = FVector(1.0, 0.0, 1.0);
Propre au mode Hemispherical. Direction vers laquelle la surface est considérée comme orientée ; elle détermine la manière dont la limite entre zones claires et sombres se déplace sur le 3DGS quand la lumière directionnelle tourne. Aucune normalisation nécessaire.
Méthode de réglage : placer d'abord la lumière directionnelle, puis ajuster ce vecteur en observant si l'orientation de la ligne de séparation correspond à l'attendu.
NormalHemiSpread
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting",
meta = (UIMin = "0.0", UIMax = "4.0", ClampMin = "0.0",
EditCondition = "NormalMode == ELCC2NormalGenerationMode::Hemispherical", EditConditionHides))
float NormalHemiSpread = 0.5f;
Propre au mode Hemispherical. Intensité de la variation lumineuse sur la surface, plage 0~4, valeur par défaut 0,5.
Plus la valeur est faible, plus la répartition est plate et uniforme ; plus elle est élevée, plus le contraste entre zone éclairée et zone d'ombre est marqué.
AlphaThreshold
UPROPERTY(Interp, EditAnywhere, BlueprintReadWrite, Category = "XGrids", AdvancedDisplay,
meta = (UIMin = "0.01", UIMax = "0.99", ClampMin = "0.01", ClampMax = "0.99"))
float AlphaThreshold = 0.5f;
Seuil d'opacité cumulée pour la détermination de la profondeur médiane, plage 0,01~0,99, valeur par défaut 0,5. C'est un élément avancé.
L'opacité est cumulée du proche vers le lointain ; lorsque le cumul atteint ce seuil, la profondeur courante est retenue comme profondeur représentative du pixel. Une valeur faible rapproche la profondeur du côté de la caméra, une valeur élevée l'éloigne.
Cela influence les relations d'occlusion entre le 3DGS et les maillages classiques, la projection des ombres et le post-traitement. La valeur par défaut convient à la plupart des cas ; la description des valeurs figure dans Réglages visuels - Seuil de profondeur.
GetEffectiveNormalGenerationMode
UFUNCTION(BlueprintPure, Category = "XGrids")
ELCC2NormalGenerationMode GetEffectiveNormalGenerationMode() const;
Renvoie le mode de normales réellement effectif après vérification de la licence.
Valeur de retour : la valeur d'origine de NormalMode si la licence est présente ; Fixed si ProxyMesh, soumis à licence, a été choisi sans licence.
Points d'utilisation :
- La propriété
NormalModestockée n'est pas modifiée, le rendu emprunte simplement le mode dégradé. LireNormalModeet lire cette fonction peut donc donner des résultats différents. - L'utiliser pour les messages de l'interface. Si l'utilisateur a choisi
ProxyMeshalors queFixedest réellement appliqué, l'interface doit le signaler.
const ELCC2NormalGenerationMode Requested = Comp->NormalMode;
const ELCC2NormalGenerationMode Effective = Comp->GetEffectiveNormalGenerationMode();
if (Requested != Effective)
{
UE_LOG(LogTemp, Warning,
TEXT("ProxyMesh mode requires a license, fell back to Fixed"));
}
Blueprint sous forme de texte :
[Get Effective Normal Generation Mode]
Target = (LCC2 Component)
│ Return Value ──┐
▼ │
[Equal (Enum)] ◀─────────┘
A = (Return Value)
B = Proxy Mesh
│
▼
[Branch]
│ False
▼
[Print String] In String = "ProxyMesh requires a license, fell back to Fixed"
Autres méthodes
GetMetaInfo2
FLCC2MetaInfo GetMetaInfo2();
Renvoie les métadonnées complètes de LCC2. Disponible en C++ uniquement.
Par rapport au GetMetaInfo() de la classe de base, elle apporte en plus le chemin de travail, le type de source de données, le nombre de bandes d'harmoniques sphériques, le nœud racine de l'octree, la liste des fichiers et d'autres champs. La description des champs figure dans Structs.
GetLccVersion
virtual ELCCVersion GetLccVersion() const override;
Renvoie toujours ELCCVersion::LCC2.
Voir aussi
- Normales et éclairage : description complète des modes de normales et de la luminosité d'éclairage
- Réglages visuels : valeurs des bandes SH, du seuil de profondeur et d'autres paramètres
- ULCCComponentBase : interfaces générales de rendu et de performance
- ALCC2ProxyMesh : l'Actor associé au mode de normales
ProxyMesh - Actors SOG / SPZ / PLY : ces trois formats utilisent aussi ce Component
- Enums : valeurs du mode de normales