ULCC2Component: Component del pipeline LCC2
Component específico del pipeline LCC2, que hereda ULCCComponentBase. Añade el control de las bandas de armónicos esféricos, un sistema de normales de iluminación y el control del umbral de profundidad.
| Módulo | LCC4UnrealRuntime |
| Cabecera | LCC2Component.h |
| Clase padre | ULCCComponentBase |
| Contenido en | ALCC2Actor, ASogActor, ASpzActor, APlyActor |
#include "LCC2Component.h"
Obtener la instancia:
ULCC2Component* Comp = Cast<ULCC2Component>(LCC2Actor->GetLCCComponent());
Este componente sirve a cuatro formatos de datos a la vez: el directorio LCC2, .sog, .spz y .ply. Los tres últimos reutilizan el mismo pipeline de renderizado construyendo metadatos virtuales, así que el Component obtenido es siempre ULCC2Component.
Nota: las interfaces de varios viewports de la clase base (
SetPlayerLoadMode,SetPlayerRenderMode,SetSceneCaptureLoadMode,SetSceneCaptureRenderMode,ModifyPlayerTransform,CancelModifyPlayerTransform) no se aplican al pipeline LCC2; las llamadas no generan ningún error pero no producen el resultado esperado. Consultar ULCCComponent para más detalles.
Propiedades
| Propiedad | Tipo | Valor predeterminado | Rango | Descripción |
|---|---|---|---|---|
SHBands | int32 | 3 | 1~3 | Bandas de armónicos esféricos. Su valor predeterminado es el número de bandas almacenado en los datos, que también es el límite superior |
LightingScale | float | 0.0 | 0~1 | Brillo del color 3DGS original antes de aplicar la iluminación de la escena |
AlphaThreshold | float | 0.5 | 0.01~0.99 | Umbral de opacidad acumulada para la decisión de la profundidad mediana, un elemento avanzado |
NormalMode | ELCC2NormalGenerationMode | Fixed | — | Modo de generación de normales, que decide cómo responde el 3DGS a la luz de la escena |
FixedNormal | FVector | (0, 0, 1) | — | Normal en espacio de mundo compartida por todo el 3DGS en el modo Fixed |
NormalPole | FVector | (1, 0, 1) | — | Orientación de la superficie en el modo Hemispherical |
NormalHemiSpread | float | 0.5 | 0~4 | Intensidad de la variación del sombreado en el modo Hemispherical |
Las propiedades de normales llevan EditConditionHides, así que el panel Details solo muestra los elementos que usa el NormalMode actual.
Dos diferencias más respecto a la clase base:
MetaInfo(de tipoFLCC2MetaInfo) es un miembro privado, no accesible desde fuera en el lado de C++ y solo visible para Blueprint (solo lectura en el panel Details). En C++ usar GetMetaInfo2 para leer los campos completos.- La construcción reescribe el ajuste de carga completa de
Performancea «casilla activada, valorfalse», lo contrario del valor predeterminado deFRenderInfo. En otras palabras, LCC2 no usa el renderizado de carga completa por defecto y hay que activarlo explícitamente cuando se necesite.
Armónicos esféricos
SetSHBands / GetSHBands
UFUNCTION(BlueprintCallable, Category = "XGrids")
void SetSHBands(int32 InSHBands);
UFUNCTION(BlueprintPure, Category = "XGrids")
int32 GetSHBands() const;
Establece cuántas bandas de armónicos esféricos participan en el cálculo, de 1 a 3. Se aplica a todos los formatos que renderiza este componente, incluidos LCC2, SOG, SPZ y PLY.
| Parámetro | Tipo | Descripción |
|---|---|---|
InSHBands | int32 | Número de bandas, 1 es el más económico, 3 el más completo. Los valores que superan lo que almacenan los datos no tienen efecto |
Notas de uso:
- El valor predeterminado proviene de los datos cargados y es también el límite superior. Establecer 3 en datos que solo almacenan 2 bandas no aporta nada.
- Comparado con desactivar los armónicos esféricos por completo mediante
SetUseShcoef(false), reducir el número de bandas es un compromiso más fino. - Requiere que
bUseShcoefesté activado y que el modo de renderizado sea 3DGS; de lo contrario el valor no participa en el cálculo. - Para el compromiso entre calidad y coste, consultar Ajustes visuales - SH Bands.
ULCC2Component* Comp = Cast<ULCC2Component>(Actor->GetLCCComponent());
if (Comp)
{
// bajar a 2 bandas en dispositivos de gama media
Comp->SetSHBands(2);
}
Configuración por nivel de calidad:
void ConfigureSH(ULCC2Component* Comp, EQualityTier Tier)
{
if (!Comp || !Comp->CanSetShcoef())
{
return; // los propios datos no tienen armónicos esféricos, no hay nada que hacer
}
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); // desactivarlos por completo
break;
}
}
Iluminación
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;
Brillo del color base del 3DGS antes de aplicar la iluminación de la escena, de 0 a 1, valor predeterminado 0. 0 significa completamente gobernado por la iluminación de la escena, 1 significa que se conserva todo el brillo original.
Para el efecto del valor y cómo ajustarlo, consultar Normales e iluminación - LCC2 Lighting Scale.
Notas de uso:
- Solo tiene sentido mientras
LightModeesLit; no surte efecto enUnlit. - Es una propiedad
BlueprintReadWrite, que se asigna directamente, sin función Setter. - Está marcada como
Interp, así que se puede animar con keyframes en Sequencer para ciclos de día y noche.
Comp->SetLightMode(ELightMode::Lit);
Comp->LightingScale = 0.3f; // conservar el 30 % del brillo original, el resto de la luz de la escena
NormalMode
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting")
ELCC2NormalGenerationMode NormalMode = ELCC2NormalGenerationMode::Fixed;
Controla cómo responde la superficie del 3DGS a la iluminación de la escena. Los propios datos 3DGS no tienen normales geométricas, y los tres primeros modos construyen las normales por aproximación; solo ProxyMesh aporta normales reales.
Para una comparación de los cuatro modos, sus casos de uso y cómo ajustarlos, consultar Normales e iluminación; para las definiciones de los valores, consultar Enumeraciones.
// modo Fixed, normal apuntando hacia arriba
Comp->NormalMode = ELCC2NormalGenerationMode::Fixed;
Comp->FixedNormal = FVector(0.0, 0.0, 1.0);
// modo Hemispherical, ajustando la dirección en que barre la luz y el contraste
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);
Solo en el modo Fixed. Normal en espacio de mundo compartida por todo el 3DGS, que apunta hacia arriba por defecto. No es necesario normalizarla.
Notas de uso:
- Una única normal compartida por todo significa que el brillo de todo es un único valor, igual a
dot(normal, dirección de la luz). - La luz que llega por detrás de la normal oscurece todo, posiblemente hasta el negro. En una escena de exterior con la normal apuntando hacia arriba y la fuente de luz por encima, esto normalmente no es un problema.
- Cuando el asunto principal de la escena es una pared, establecer la normal según la orientación de la pared es más razonable.
NormalPole
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting",
meta = (EditCondition = "NormalMode == ELCC2NormalGenerationMode::Hemispherical", EditConditionHides))
FVector NormalPole = FVector(1.0, 0.0, 1.0);
Solo en el modo Hemispherical. La dirección hacia la que se considera que mira la superficie, que decide cómo se desplaza el límite del sombreado sobre el 3DGS a medida que la luz direccional rota. No es necesario normalizarla.
Cómo ajustarla: colocar primero la luz direccional y después ajustar este vector observando si la dirección del límite del sombreado coincide con lo esperado.
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;
Solo en el modo Hemispherical. Intensidad de la variación del sombreado a lo largo de la superficie, de 0 a 4, valor predeterminado 0.5.
Un valor menor hace el sombreado más plano y uniforme; un valor mayor hace más fuerte el contraste entre las zonas iluminadas y las sombreadas.
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;
Umbral de opacidad acumulada para la decisión de la profundidad mediana, de 0.01 a 0.99, valor predeterminado 0.5. Un elemento avanzado.
La opacidad se acumula de cerca a lejos y, cuando el valor acumulado alcanza este umbral, la profundidad actual se registra como la profundidad representativa de ese píxel. Un valor menor sesga la profundidad hacia el lado de la cámara, un valor mayor hacia el lado lejano.
Afecta a la oclusión entre el 3DGS y los meshes tradicionales, a la proyección de sombras y al posprocesado. El valor predeterminado se adapta a la mayoría de los casos; para una descripción de los valores, consultar Ajustes visuales - Depth Threshold.
GetEffectiveNormalGenerationMode
UFUNCTION(BlueprintPure, Category = "XGrids")
ELCC2NormalGenerationMode GetEffectiveNormalGenerationMode() const;
Devuelve el modo de normales realmente en efecto después de la validación de la licencia.
Valor de retorno: el valor original de NormalMode cuando hay licencia; Fixed cuando se selecciona ProxyMesh, restringido por licencia, sin tener una.
Notas de uso:
- La propiedad
NormalModealmacenada no se modifica; solo el renderizado sigue el modo degradado. Por tanto, leerNormalModey leer esta función pueden discrepar. - Usarlo para los mensajes de la interfaz. Cuando el usuario seleccionó
ProxyMeshpero lo que se ejecuta realmente esFixed, la interfaz debería indicarlo.
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 como texto:
[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"
Otros métodos
GetMetaInfo2
FLCC2MetaInfo GetMetaInfo2();
Devuelve los metadatos completos de LCC2. Solo C++.
Comparado con GetMetaInfo() de la clase base, añade la ruta de trabajo, el tipo de origen de los datos, las bandas de armónicos esféricos, el nodo raíz del octree, la lista de archivos y más. Para los campos, consultar Structs.
GetLccVersion
virtual ELCCVersion GetLccVersion() const override;
Devuelve siempre ELCCVersion::LCC2.
Véase también
- Normales e iluminación: descripción completa de los modos de normales y de la escala de iluminación
- Ajustes visuales: valores de las bandas SH, del umbral de profundidad y de otros parámetros
- ULCCComponentBase: interfaces comunes de renderizado y rendimiento
- ALCC2ProxyMesh: el Actor que acompaña al modo de normales
ProxyMesh - Actors SOG / SPZ / PLY: estos tres formatos también usan este componente
- Enumeraciones: valores del modo de normales