ULCCComponentBase sınıfından türeyen, LCC2 işlem hattına özel bileşendir. Küresel harmonikler bandı denetimi, aydınlatma normali sistemi ve derinlik eşiği denetimi ekler.
| Modül | LCC4UnrealRuntime |
| Header | LCC2Component.h |
| Üst sınıf | ULCCComponentBase |
| Tutan | ALCC2Actor, ASogActor, ASpzActor, APlyActor |
#include "LCC2Component.h"
Örneği alın:
ULCC2Component* Comp = Cast<ULCC2Component>(LCC2Actor->GetLCCComponent());
Bu bileşen dört veri formatına birden hizmet eder: LCC2 dizini, .sog, .spz ve .ply. Son üç format sanal meta veri oluşturarak aynı görüntüleme işlem hattını kullanır; bu nedenle elde edilen Component her zaman ULCC2Component olur.
Not: Temel sınıftaki çoklu görüntü alanı arayüzleri (
SetPlayerLoadMode,SetPlayerRenderMode,SetSceneCaptureLoadMode,SetSceneCaptureRenderMode,ModifyPlayerTransform,CancelModifyPlayerTransform) hem LCC1 hem de LCC2 işlem hattında desteklenir. Kullanım senaryoları ve adımlar için En İyi Uygulamalar - Kamera Başına Bağımsız Görüntüleme bölümüne bakın.
Özellikler
| Özellik | Tür | Varsayılan | Menzil | Açıklama |
|---|---|---|---|---|
SHBands | int32 | 3 | 1~3 | Küresel harmonikler bandları. Varsayılan değer, verinin içinde saklanan bant sayısıdır ve bu aynı zamanda üst sınırdır |
bSyncLoadAtRuntime | bool | true | — | Tek dosyalı formatların, paketlenmiş yapılarda BeginPlay sırasında eşzamanlı yüklenip yüklenmeyeceği |
LightingScale | float | 0.0 | 0~1 | Sahne aydınlatması uygulanmadan önce özgün 3DGS renginin parlaklığı |
AlphaThreshold | float | 0.5 | 0.01~0.99 | Medyan derinlik kararı için birikimli opaklık eşiği, gelişmiş bir ayardır |
NormalMode | ELCC2NormalGenerationMode | Fixed | — | Normal oluşturma modu; 3DGS'nin sahne ışığına nasıl tepki vereceğini belirler |
FixedNormal | FVector | (0, 0, 1) | — | Fixed modunda tüm 3DGS için ortak olan dünya normali |
NormalPole | FVector | (1, 0, 1) | — | Hemispherical modunda yüzey yönelimi |
NormalHemiSpread | float | 0.5 | 0~4 | Hemispherical modunda gölgelendirme değişiminin şiddeti |
Normal özellikleri EditConditionHides taşır; bu yüzden Details paneli yalnızca geçerli NormalMode değerinin kullandığı öğeleri gösterir.
bSyncLoadAtRuntime yalnızca tek dosyalı formatlar (.ply / .spz / .sog) için önemlidir; bu yüzden yalnızca bu üç Actor'ın Details panelinde görünür. Etkinleştirildiğinde paketlenmiş bir yapı, veri hazır olana kadar oyun iş parçacığını bekletir ve bu sayede başlangıçta siyah ekran görülmez. Devre dışıyken görüntü hemen açılır ve veri sonradan dolar. Düzenleyicide yükleme her zaman eşzamansızdır ve bu değerden etkilenmez. Bkz. Hızlı Başlangıç - Tek Dosyalı Formatların Başlangıçta Yüklenmesi.
Temel sınıftan iki fark daha vardır:
MetaInfo(FLCC2MetaInfotüründe) özel bir üyedir; C++ tarafında dışarıdan erişilemez ve yalnızca Blueprint'te görünür (Details panelinde salt okunur). C++ içinde tüm alanları okumak için GetMetaInfo2 kullanın.- Oluşturma sırasında
Performanceöğesinin tam yükleme ayarı "onay kutusu etkin, değerfalse" olarak yeniden yazılır; bu,FRenderInfovarsayılanının tersidir. Başka bir deyişle LCC2 varsayılan olarak tam yükleme görüntülemesini kullanmaz ve gerektiğinde açıkça etkinleştirilmelidir.
Küresel Harmonikler
SetSHBands / GetSHBands
UFUNCTION(BlueprintCallable, Category = "XGrids")
void SetSHBands(int32 InSHBands);
UFUNCTION(BlueprintPure, Category = "XGrids")
int32 GetSHBands() const;
Hesaplamaya katılacak küresel harmonikler bandı sayısını 1 ile 3 arasında ayarlar. Bu bileşenin görüntülediği LCC2, SOG, SPZ ve PLY dahil tüm formatlar için geçerlidir.
| Parametre | Tür | Açıklama |
|---|---|---|
InSHBands | int32 | Bant sayısı; 1 en ekonomik, 3 en eksiksiz olandır. Verinin sakladığından büyük değerlerin etkisi olmaz |
Kullanım notları:
- Varsayılan değer yüklenen veriden gelir ve aynı zamanda üst sınırdır. Yalnızca 2 bant saklayan veride 3 ayarlamak hiçbir şey katmaz.
SetUseShcoef(false)ile küresel harmonikleri tamamen kapatmaya kıyasla, bant sayısını düşürmek daha hassas bir denge sunar.bUseShcoefözelliğinin etkin olmasını ve görüntüleme modunun 3DGS olmasını gerektirir; aksi halde değer hesaplamaya katılmaz.- Kalite ile maliyet arasındaki denge için Görsel Ayarlar - SH Bands bölümüne bakın.
ULCC2Component* Comp = Cast<ULCC2Component>(Actor->GetLCCComponent());
if (Comp)
{
// drop to 2 bands on mid-range devices
Comp->SetSHBands(2);
}
Kalite seviyesine göre yapılandırma:
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;
}
}
Aydınlatma
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;
3DGS'in sahne aydınlatması uygulanmadan önceki temel renk parlaklığıdır. Değer 0 ile 1 arasındadır, varsayılan değer 0'dır. 0 tamamen sahne aydınlatmasıyla belirlenir anlamına gelir, 1 ise özgün parlaklığın tamamının korunduğunu gösterir.
Değerin etkisi ve ayarlanma yöntemi için Normaller ve Işıklandırma - LCC2 Lighting Scale bölümüne bakın.
Kullanım notları:
- Yalnızca
LightModedeğeriLitiken anlamlıdır;Unlitmodunda etkisi yoktur. BlueprintReadWriteözelliğidir, doğrudan atanır ve Setter fonksiyonu yoktur.Interpolarak işaretlenmiştir; bu nedenle gece-gündüz geçişleri için Sequencer içinde anahtar karelerle animasyon yapılabilir.
Comp->SetLightMode(ELightMode::Lit);
Comp->LightingScale = 0.3f; // keep 30% of the original brightness, the rest from scene light
NormalMode
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting")
ELCC2NormalGenerationMode NormalMode = ELCC2NormalGenerationMode::Fixed;
3DGS yüzeyinin sahne aydınlatmasına nasıl yanıt vereceğini belirler. 3DGS verisinin kendisinde geometrik normaller yoktur ve ilk üç mod normalleri yaklaşık değerlerle oluşturur; gerçek normalleri yalnızca ProxyMesh sağlar.
Dört modun karşılaştırması, kullanım senaryoları ve ayarlanma yöntemi için Normaller ve Işıklandırma bölümüne, değer tanımları için Enum'lar bölümüne bakın.
// Fixed mode, normal pointing up
Comp->NormalMode = ELCC2NormalGenerationMode::Fixed;
Comp->FixedNormal = FVector(0.0, 0.0, 1.0);
// Hemispherical mode, adjusting the direction the light sweeps and the contrast
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);
Yalnızca Fixed modu için geçerlidir. Tüm 3DGS tarafından paylaşılan dünya uzayı normalidir ve varsayılan olarak yukarı bakar. Normalleştirme gerekmez.
Kullanım notları:
- Her şey tek bir normali paylaştığında her şeyin parlaklığı tek bir değer olur ve bu değer
dot(normal, light direction)değerine eşittir. - Normalin arkasından gelen ışık her şeyi karartır, hatta siyaha çevirebilir. Normalin yukarı baktığı ve ışık kaynağının yukarıda olduğu bir dış mekan sahnesinde bu genellikle sorun olmaz.
- Sahnenin ana öznesi bir duvar olduğunda normali duvarın yönüne ayarlamak daha uygundur.
NormalPole
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting",
meta = (EditCondition = "NormalMode == ELCC2NormalGenerationMode::Hemispherical", EditConditionHides))
FVector NormalPole = FVector(1.0, 0.0, 1.0);
Yalnızca Hemispherical modu için geçerlidir. Yüzeyin baktığı kabul edilen yöndür; yönlü ışık döndükçe gölgeleme sınırının 3DGS üzerinde nasıl hareket edeceğini belirler. Normalleştirme gerekmez.
Ayarlama yöntemi: önce yönlü ışığı yerleştirin, ardından bu vektörü ayarlayın ve gölgeleme sınırının yönünün beklentilerle uyumlu olup olmadığını izleyin.
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;
Yalnızca Hemispherical modu için geçerlidir. Yüzey boyunca gölgeleme değişiminin şiddetidir. Değer 0 ile 4 arasındadır, varsayılan değer 0,5'tir.
Daha küçük bir değer gölgelemeyi daha düz ve homojen yapar; daha büyük bir değer aydınlık ve gölgeli alanlar arasındaki kontrastı artırır.
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;
Medyan derinlik kararı için biriken opaklık eşiğidir. Değer 0,01 ile 0,99 arasındadır, varsayılan değer 0,5'tir. Gelişmiş bir öğedir.
Opaklık yakından uzağa doğru birikir ve biriken değer bu eşiğe ulaştığında geçerli derinlik o pikselin temsili derinliği olarak kaydedilir. Daha küçük bir değer derinliği kameraya yakın tarafa, daha büyük bir değer uzak tarafa kaydırır.
3DGS ile geleneksel mesh'ler arasındaki örtüşmeyi, gölge oluşturmayı ve son işlemi etkiler. Varsayılan değer çoğu durum için uygundur; değerlerin açıklaması için Görsel Ayarlar - Depth Threshold bölümüne bakın.
GetEffectiveNormalGenerationMode
UFUNCTION(BlueprintPure, Category = "XGrids")
ELCC2NormalGenerationMode GetEffectiveNormalGenerationMode() const;
Lisans doğrulamasından sonra fiilen geçerli olan normal modunu döndürür.
Dönüş değeri: lisanslıysa NormalMode özelliğinin özgün değeri; lisansa bağlı ProxyMesh modu lisans olmadan seçildiğinde Fixed.
Kullanım notları:
- Saklanan
NormalModeözelliği değiştirilmez; yalnızca görüntüleme düşürülen modu izler. Bu nedenleNormalModedeğeri ile bu fonksiyonun döndürdüğü değer farklı olabilir. - Arayüz mesajları için kullanın. Kullanıcı
ProxyMeshmodunu seçtiği halde fiilenFixedmodu çalışıyorsa arayüz bunu belirtmelidir.
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"));
}
Metin olarak Blueprint:
[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"
Diğer Metotlar
GetMetaInfo2
FLCC2MetaInfo GetMetaInfo2();
LCC2 meta verilerinin tamamını döndürür. Yalnızca C++ için geçerlidir.
Temel sınıftaki GetMetaInfo() ile karşılaştırıldığında çalışma yolu, veri kaynağı türü, küresel harmonik bantları, octree kök düğümü, dosya listesi ve daha fazlasını ekler. Alanlar için Struct'lar bölümüne bakın.
GetLccVersion
virtual ELCCVersion GetLccVersion() const override;
Her zaman ELCCVersion::LCC2 değerini döndürür.
Ayrıca Bakın
- Normaller ve Işıklandırma: normal modlarının ve aydınlatma ölçeğinin tam açıklaması
- Görsel Ayarlar: SH bantları, derinlik eşiği ve diğer parametrelerin değerleri
- ULCCComponentBase: ortak görüntüleme ve performans arayüzleri
- ALCC2ProxyMesh:
ProxyMeshnormal modunun eşlik eden Actor'ü - SOG / SPZ / PLY Actor'ları: bu üç format da bu bileşeni kullanır
- Enum'lar: normal modu değerleri
Bu bölüm XGRIDS'in resmî kullanım kılavuzundan Türkçeye çevrildi; ekran görüntüleri ve arayüz adları özgün haliyle İngilizcedir. İngilizce aslı (yeni sekmede açılır) · Güncelleme:

