XGRIDSDocumentation
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Lixel CyberColor

    • LCC Studio

      • Prise en main
      • Version et mises à jour
      • Téléchargement et installation
      • Aperçu de l’interface et navigation
      • Avant la reconstruction
      • Reconstruction du modèle
      • Reconstruction d’un modèle unique
      • Fusion cartographique
      • Fusion aérienne-terrestre
      • Reconstruction aérienne
      • Mes modèles
      • Autres fonctionnalités
      • Paramètres et compte
      • Convertisseur
      • Reconstruction vidéo
      • Questions fréquentes
    • LCC Scene Editor

      • Version et mises à jour
      • Compte et connexion
      • Présentation du produit et accueil
      • Interface de l’éditeur
      • Modes de navigation de scène
      • Fichier
      • Paramètres
      • Opérations d’édition
      • Fenêtre
      • Barre d’outils globale
      • Ressources et propriétés
      • Barre d’outils gauche
      • Points de vue
      • Portail
      • Skybox
      • Annotations
      • Mesure
      • Parcours
      • Rapport de scène
      • 3D Layout
      • Mini-carte
      • Mode Prévisualisation, Viewer
      • Aide
      • FAQ
      • Point d’apparition
    • LCC Model Editor

      • Version et mises à jour
      • Guide de l’utilisateur
      • Aperçu et interface
      • Opérations sur les fichiers
      • Sélecteurs
      • Modification des modèles
      • Mesure
      • Réglage des couleurs
      • Gestion des ressources
      • Paramètres et aide
      • Questions fréquentes
  • Plugin & SDK

    • Unreal

      • Introduction
      • Démarrage rapide - Windows
      • Démarrage rapide - Linux
      • Démarrage rapide - Quest3
      • Éditions et licences
      • Rendu
      • Rastérisation Tiled (expérimental)
      • Réglages visuels
      • Normales et éclairage
      • Édition de scène
      • Paramètres de performance
      • Guide d'optimisation des performances
      • Intégration avec les plugins tiers et moteur
      • Maillage proxy
      • Animation de chargement
      • Collision
      • Prise en charge du système de navigation
      • Prise en charge de l'eau à couche unique
      • Localisation
      • Questions fréquentes
      • Dépannage
      • Journaux et diagnostics
      • Nous contacter
      • Bonnes pratiques

        • Rééclairer un 3DGS avec un maillage LixelStudio
      • Référence API

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • Actors SOG / SPZ / PLY
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ALCCLoadVolume
        • ULCCUtilLibrary
        • Enums
        • Structs
      • Journal des modifications

        • v3.4.0
        • v3.3.1
        • v3.0.0
        • v2.2.1
        • v1.0.0
        • v0.9.0
        • v0.8.0
        • v0.7.1
        • v0.6.1
        • v0.5.2
        • v0.4.1
        • v0.4.0
        • v0.3.0
        • v0.0.5
        • v0.0.4
        • v0.0.3
        • v0.0.2
        • v0.0.1

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.

ModuleLCC4UnrealRuntime
En-têteLCC2Component.h
Classe parenteULCCComponentBase
Détenu parALCC2Actor, 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éTypeDéfautPlageDescription
SHBandsint3231~3Nombre de bandes d'harmoniques sphériques. Par défaut, le nombre stocké dans les données, qui est aussi la limite supérieure
bSyncLoadAtRuntimebooltrue—Indique si les formats à fichier unique sont chargés de façon synchrone pendant BeginPlay dans une build packagée
LightingScalefloat0.00~1Luminosité de la couleur d'origine du 3DGS avant l'intervention de l'éclairage de scène
AlphaThresholdfloat0.50,01~0,99Seuil d'opacité cumulée pour la détermination de la profondeur médiane, élément avancé
NormalModeELCC2NormalGenerationModeFixed—Mode de génération des normales, qui détermine la réponse du 3DGS à la lumière de la scène
FixedNormalFVector(0, 0, 1)—Normale monde partagée par tout le 3DGS en mode Fixed
NormalPoleFVector(1, 0, 1)—Orientation de la surface en mode Hemispherical
NormalHemiSpreadfloat0.50~4Intensité 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 type FLCC2MetaInfo) 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 Performance est réécrit en « interrupteur activé, valeur false », soit l'inverse de la valeur par défaut de FRenderInfo. 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ètreTypeDescription
InSHBandsint32Nombre 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 bUseShcoef est 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 LightMode vaut Lit ; sans effet en Unlit.
  • 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é NormalMode stockée n'est pas modifiée, le rendu emprunte simplement le mode dégradé. Lire NormalMode et lire cette fonction peut donc donner des résultats différents.
  • L'utiliser pour les messages de l'interface. Si l'utilisateur a choisi ProxyMesh alors que Fixed est 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
Précédent
ULCCComponent
Suivant
Actors SOG / SPZ / PLY