İçeriğe geç
TREN
Atlıhan Harita

LCC for UE Kullanım Kılavuzu · API Başvurusu

ULCC2Component: LCC2 İşlem Hattı Bileşeni

Bölüm 25.4 / 26Kılavuz sürümü v3.5.0Türkçe

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ülLCC4UnrealRuntime
HeaderLCC2Component.h
Üst sınıfULCCComponentBase
TutanALCC2Actor, 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

ÖzellikTürVarsayılanMenzilAçıklama
SHBandsint3231~3Kü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
bSyncLoadAtRuntimebooltrue—Tek dosyalı formatların, paketlenmiş yapılarda BeginPlay sırasında eşzamanlı yüklenip yüklenmeyeceği
LightingScalefloat0.00~1Sahne aydınlatması uygulanmadan önce özgün 3DGS renginin parlaklığı
AlphaThresholdfloat0.50.01~0.99Medyan derinlik kararı için birikimli opaklık eşiği, gelişmiş bir ayardır
NormalModeELCC2NormalGenerationModeFixed—Normal oluşturma modu; 3DGS'nin sahne ışığına nasıl tepki vereceğini belirler
FixedNormalFVector(0, 0, 1)—Fixed modunda tüm 3DGS için ortak olan dünya normali
NormalPoleFVector(1, 0, 1)—Hemispherical modunda yüzey yönelimi
NormalHemiSpreadfloat0.50~4Hemispherical 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 (FLCC2MetaInfo tü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ğer false" olarak yeniden yazılır; bu, FRenderInfo varsayı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.

ParametreTürAçıklama
InSHBandsint32Bant 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 LightMode değeri Lit iken anlamlıdır; Unlit modunda etkisi yoktur.
  • BlueprintReadWrite özelliğidir, doğrudan atanır ve Setter fonksiyonu yoktur.
  • Interp olarak 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 nedenle NormalMode değeri ile bu fonksiyonun döndürdüğü değer farklı olabilir.
  • Arayüz mesajları için kullanın. Kullanıcı ProxyMesh modunu seçtiği halde fiilen Fixed modu ç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

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:

XGRIDS Türkiye

Kurulumda ve Sahada Yanınızdayız

Atlıhan Harita; cihaz kurulumu, firmware güncellemesi, yazılım kullanımı ve saha uygulamalarında eğitim ve teknik destek verir. Sorunuzu iletin, uzmanımız size dönsün.

+90 216 546 0804