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

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

Struct'lar: Struct Türü Referansı

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

LCC4UnrealRuntime modülünün sunduğu struct türleri.

ModülLCC4UnrealRuntime
HeaderCore/LCCStructure.h
#include "Core/LCCStructure.h"

BlueprintType olarak işaretlenen struct'lar, Blueprint'te Break / Make düğümleriyle ayrılabilir ve birleştirilebilir.

Performans

FRenderInfo

Ortak performans parametreleri. ULCCComponentBase::Performance tarafından kullanılır.

Bu struct'ın tasarım özelliği, her değerin bir etkinleştirme onay kutusuyla birlikte gelmesidir. Onay kutusu kapalıyken eklentinin yerleşik varsayılan değeri kullanılır; girilen değer yalnızca onay kutusu açıldığında geçerli olur. Component üzerindeki ilgili Setter, onay kutusunu otomatik olarak true yapar.

AlanTürVarsayılanİlgili onay kutusuAçıklama
MaxDistanceuint32300bDistanceLimitMaksimum görüntüleme mesafesi (metre)
MaxSplatNumuint323000bMaxSplatNumLimitKare başına maksimum splat sayısı (on bin birimi), üst sınır 10000
LevelFactorfloat1bCanSetLevelFactorLOD mesafe ölçek faktörü, 0,01 ile 20 arasında
PreloadDistanceuint32200bPreloadDistanceLimitÖn yükleme mesafesi. Gerçek değer MaxDistance + 35 olur
StartLeveluint320bCanSetStartLevelBaşlangıç seviyesi (Start Level), 0 ile 20 arasında
EndLeveluint3220bCanSetEndLevelBitiş seviyesi (End Level), 0 ile 20 arasında
CollisionLoadMaxDistanceuint32300bCollisionDistanceLimitMaksimum çarpışma yükleme mesafesi (metre)
bUseFullLoadbooltruebCanSetUseFullLoadKüçük sahneler için tam yükleme anahtarı. ULCC2Component oluşturulduğunda onay kutusu etkin, değer false olarak yeniden yazılır
FullLoadSplatNumuint321500bCanSetFullLoadNumTam yükleme eşiği (on bin birimi)

Yardımcı metotlar:

bool HasMaxDistanceLimit() const;      // whether a distance limit exists
bool HasMaxNumLimit() const;           // whether a count limit exists
bool NeedPreload() const;              // whether preloading is needed
uint32 GetMaxDistance() const;         // effective maximum distance
uint32 GetMaxSplatNum() const;         // effective maximum count
float GetLevelFactor() const;          // effective LOD factor
uint32 GetStartLevel() const;          // effective start Level
uint32 GetEndLevel() const;            // effective end Level
uint32 GetMaxCollisionDistance() const;
uint32 GetPreloadDistance() const;     // returns GetMaxDistance() + 35
bool GetIfUseFullLoad(uint32 SplatNum) const;   // whether the given count uses full load
void Reset();                          // resets the value fields only, not the enable checkboxes

Kolayca düşülebilecek iki hata:

  • Reset() yalnızca değer alanlarını (mesafe, sayı, Level, katsayı) sıfırlar; hiçbir b* etkinleştirme onay kutusunu sıfırlamaz, ayrıca bUseFullLoad ve FullLoadSplatNum değerlerini de sıfırlamaz.
  • FRenderInfo::GetPreloadDistance(), GetMaxDistance() + 35 değerini döndürür. Component üzerindeki aynı adlı işlev ULCCComponentBase::GetPreloadDistance() ise ham alan değerini döndürür. İki sonuç birbirinden farklıdır.

Getter'lar etkin değeri döndürür: onay kutusu kapalıyken daha önce girilen değeri değil, yerleşik varsayılan değeri döndürürler. Bu durum kolayca karıştırılır; alanı doğrudan okumak ile Getter'ı çağırmak farklı sonuç verebilir.

Kullanım notları:

  • Component üzerindeki Setter ile değiştirmek en kolay yoldur ve onay kutusunu elle ayarlamayı gerektirmez.
  • Struct alanlarını doğrudan değiştirirken onay kutusunu da true yapmayı unutmayın; aksi halde hiçbir değişiklik etki etmez.
// recommended: use the Setter, the checkbox is handled automatically
Component->SetMaxDistance(200);

// changing the field directly requires setting the checkbox yourself
Component->Performance.bDistanceLimit = true;
Component->Performance.MaxDistance = 200;

FLCCRenderInfo

LCC1'e özgü performans parametreleri. ULCCComponent::LCCPerformance tarafından kullanılır.

AlanTürVarsayılanİlgili onay kutusuAçıklama
SortFactorfloat1bCanSetSortFactorSıralama sıklığı ölçek faktörü, 0,2 ile 5 arasında. Büyük değer, daha az sıralama ve daha iyi performans anlamına gelir
bAddExtraPreNodesboolBir makro tarafından belirlenirbEnableExtraPreNodesEk ön yükleme düğümleri ekler ve görünümü hızlı çevirirken ekran kenarında oluşan boşlukları azaltır

Yardımcı metotlar:

float GetSortFactor() const;
bool GetIfAddExtraPreNodes() const;
void Reset();

İlgili sayfa: ULCCComponent

Metadata

FMetaInfoBase

Metadata temel struct'ı. Hem FLCCMetaInfo hem de FLCC2MetaInfo tarafından miras alınır. ULCCComponentBase::GetMetaInfo işlevinin dönüş türüdür.

AlanTürAçıklama
NameFStringVeri adı
VersionFStringVeri sürümü dizesi
DescriptionFStringAçıklama
SourceFStringSource
DataTypeFStringVeri türü
FileTypeFStringDosya türü, EFileType ile eşleşir
OffsetTArray<float>Koordinat ofseti, 3 eleman
ShiftTArray<float>Öteleme miktarı
Epsgint32EPSG koordinat sistemi numarası; 0'dan büyük olması coğrafi koordinat bilgisinin bulunduğunu gösterir
ScaleTArray<int>Ölçek, 3 eleman
GUIDFStringVerinin benzersiz tanımlayıcısı
TotalLevelintToplam Level sayısı
TotalSplatsintToplam splat sayısı
SplatsTArray<int>Her Level için splat sayısı

Yardımcı metotlar:

bool IsValid() const;              // whether the metadata is valid
void Reset();
bool IsRTK() const;                // whether RTK geographic information is present
FVector GetOffset() const;         // offset as FVector, returns a zero vector with a warning when fewer than 3 elements
FVector3f GetScale();              // note: not const, and does not check the element count
EFileType GetFileType() const;     // file type enum
float GetVersion() const;          // version as float
uint32 GetLevel0SplatNum() const;  // splat count of Level 0, in units of ten thousand

GetScale() ve GetOffset() dayanıklılık açısından farklıdır: GetOffset() eleman sayısını denetler ve 3'ten az eleman varsa uyarı vererek sıfır vektör döndürür. GetScale() ise ilk üç elemana doğrudan erişir ve Scale 3'ten az eleman içerdiğinde sınır dışına taşar.

IsRTK(), Epsg > 0 koşuluna ve sıfırdan farklı bir ofsete bakarak karar verir; yalnızca veriye bakar. CanUseGeoPlace() ile eşdeğer değildir; çünkü bu işlev ayrıca bEnableGeoPlace değerinin etkin olmasını ve jeoreferanslama sisteminin oluşturulmuş olmasını gerektirir.

Kullanım notları:

  • Yükleme tamamlandıktan sonra okuyun; veri hazır değilken alanların tümü sıfır değerindedir.
  • TotalSplats, verinin toplam miktarıdır. ULCCComponentBase::GetSplatNumber() tam olarak bu alanı döndürür, dolayısıyla ikisi aynı değerdir.
if (Component->CheckIfLoaded())
{
    const FMetaInfoBase Meta = Component->GetMetaInfo();

    UE_LOG(LogTemp, Log, TEXT("Name: %s"), *Meta.Name);
    UE_LOG(LogTemp, Log, TEXT("Levels: %d, total splats: %d"),
        Meta.TotalLevel, Meta.TotalSplats);
    UE_LOG(LogTemp, Log, TEXT("Level 0 splats: %u (ten thousand)"),
        Meta.GetLevel0SplatNum());
    UE_LOG(LogTemp, Log, TEXT("Has SH: %s"),
        Meta.GetFileType() == EFileType::Quality ? TEXT("yes") : TEXT("no"));

    if (Meta.IsRTK())
    {
        UE_LOG(LogTemp, Log, TEXT("EPSG: %d, offset: %s"),
            Meta.Epsg, *Meta.GetOffset().ToString());
    }
}

Metin olarak Blueprint:

[Get Meta Info]
        Target = (LCC Component)
        │ Return Value ──┐
        ▼                │
[Break FMetaInfoBase] ◀──┘
        Name → [Print String]
        Total Splats → [Print String]
        Total Level → [Print String]

FLCCMetaInfo

FMetaInfoBase sınıfından türeyen eksiksiz LCC1 meta verileri.

Ek alanTürAçıklama
CellLengthXfloatX ekseni boyunca ızgara boyutu
CellLengthYfloatY ekseni boyunca ızgara boyutu
AttributesTArray<FBoundingBoxInfoWithName>Her özniteliğin sınırlayıcı kutusu, ada göre dizinlenir
IndexDataSizeintDizin verisi boyutu
EncodingFStringKodlama yöntemi
BoundingBoxFBoundingBoxInfoGenel sınırlayıcı kutu

IsValid() koşulu temel sınıfa göre daha katıdır: TotalLevel, TotalSplats, CellLengthX, CellLengthY ve IndexDataSize değerlerinin hepsi 0'dan büyük olmalıdır.

Sınırlayıcı kutu yöntemleri (hepsi FBox döndürür, yalnızca C++):

FVector2f GetCellLength() const;
int32 GetXNum() const;                    // grid count along X
int32 GetYNum() const;                    // grid count along Y
FBox GetVisibleBoundingBox() const;       // visible bounding box
FBox GetScaleBox() const;
FBox GetEnvironmentScaleBox() const;
FBox GetEnvironmentVisibleBox() const;
FBox GetShcoef() const;                   // value range of the spherical harmonics
FBox GetEnvShcoef() const;
FBox GetNormal() const;
FBox GetEnvNormal() const;
FBox GetColor() const;
FVector2f GetOpacity() const;

FLCC2MetaInfo

FMetaInfoBase sınıfından türeyen eksiksiz LCC2 meta verileri. ULCC2Component::GetMetaInfo2 yönteminin dönüş türüdür.

Ek alanTürAçıklama
WorkPathFStringLCC2 dizininin yolu
SplatTypeEDataSourceTypeVeri kaynağı biçimi: SOG / SPZ / PLY
SHBandsint32Bu ağaçtaki en yüksek küresel harmonik bandı; 0 hiç olmadığını gösterir, değerler 1/2/3
EnvNameint32Ortam dosyası dizini; -1 hiç olmadığını gösterir
RootFTreeNodeOctree kök düğümü
FilesTArray<FString>Splat veri dosyalarının listesi
MeshFilesTArray<FString>Mesh dosyalarının listesi
BVHFilesTArray<FString>BVH dosyalarının listesi

IsValid() koşulu, Files listesinin boş olmamasıdır.

Yardımcı yöntem:

FBox GetBounds() const;    // bounding box of the root node, already converted to centimeters

SHBands hakkında: Küresel harmonik yuvalarının adımını belirler, bu nedenle aynı küresel harmonik arabelleği içindeki tüm veri kaynaklarının bu değerde uyuşması gerekir. Farklı bant sayılarını karıştıran bir ağaçta en geniş değer kullanılır. Tek dosyalı biçimlerde (.sog / .spz / .ply) tam bant sayısı kod çözücü başlığından okunur; LCC2'de dosya başına bant kavramı yoktur ve bunu FileType belirler: Portable küresel harmonik içermez, Quality ise 3 bant içerir.

Durumlar

ULCCComponentBase durum değişikliği olayları tarafından kullanılan, Core/LCCEventTypes.h dosyasında tanımlı yapılar. Alanlar yalnızca eklenir, hiç değiştirilmez; mevcut alanlar özgün anlamını korur.

FLCCLoadStateChange

Tek bir yükleme durumu değişikliği. OnLoadStateChanged olayıyla iletilir.

AlanTürAçıklama
OldStateELCCLoadStateDeğişiklikten önceki durum
NewStateELCCLoadStateDeğişiklikten sonraki durum

FLCCCollisionStateChange

Tek bir çarpışma durumu değişikliği. OnCollisionStateChanged olayıyla iletilir.

AlanTürAçıklama
OldStateELCCCollisionStateDeğişiklikten önceki durum
NewStateELCCCollisionStateDeğişiklikten sonraki durum

FLCCLoadAnimationStateChange

Tek bir animasyon durumu değişikliği. OnLoadAnimationStateChanged olayıyla iletilir.

AlanTürAçıklama
OldStateELCCLoadAnimationStateDeğişiklikten önceki durum
NewStateELCCLoadAnimationStateDeğişiklikten sonraki durum

FLCCLoadFailure

Tek bir yükleme hatası. OnLoadFailed olayıyla iletilir.

AlanTürAçıklama
ErrorELCCLoadErrorHata nedeni; değerler için bkz. ELCCLoadError
PathFStringYükleme için istenen yol; Content içindeyse göreli yoldur
MessageFStringGünlükler ve tanılama için okunabilir İngilizce açıklama; ayrıştırma için kullanılmaz

Durum sabitlerinin değerleri için bkz. Enum'lar - States.

Işın Testi Sonucu

FLCCSplat

Bir ışın testinin isabet sonucu. ULCCComponent bileşeninin ışın testi işlevlerinde kullanılır.

AlanTürAçıklama
LocationFVectorİsabet noktasının dünya koordinatları
NodeVectorFLCCVectorİsabet noktasının düğüm bilgisi
FLCCSplat Hit;
if (LineTraceSingle(Start, End, Hit, false, 0.f, 0.f))
{
    // hit position
    const FVector HitPos = Hit.Location;
    // detail level currently loaded at that spot
    const int32 Level = Hit.NodeVector.Level;
}

İlgili sayfa: ULCCComponent ışın testleri

FLCCVector

Octree içinde bir düğümü konumlandıran düğüm koordinatları.

AlanTürAçıklama
Xint32Düğümün X dizini
Yint32Düğümün Y dizini
Levelint32Düğümün ait olduğu seviye

Parametreli kurucu ve kopya kurucu üç alanı da negatif olmayan değerlere sınırlar; ancak doğrudan atama (varsayılan oluşturmadan sonra alanlara yazmak veya operator= kullanmak) sınırlama yapmaz.

Yardımcı metotlar:

FString ToString() const;     // format is "X:%i,Y:%i,Level:%i"
void Reset();
static double Dist2D(const FLCCVector& A, const FLCCVector& B);

Eşitlik karşılaştırması yalnızca X, Y ve Level alanlarına bakar; dahili kamera bilgisini ve diğer çalışma zamanı alanlarını dikkate almaz.

Level, şu anda görünen verinin ince mi yoksa kaba mı olduğunu gösterir; değer küçüldükçe veri incelir.

Sınırlayıcı Kutu

FBoundingBoxInfo

Sınırlayıcı kutu bilgisi.

AlanTürAçıklama
MinTArray<float>En küçük noktanın koordinatları
MaxTArray<float>En büyük noktanın koordinatları

FBoundingBoxInfoWithName

Adlandırılmış sınırlayıcı kutu; meta verilerdeki öznitelik listesinde kullanılır.

AlanTürAçıklama
NameFStringÖznitelik adı
BoundingBoxInfoFBoundingBoxInfoSınırlayıcı kutu

Eşitlik karşılaştırması yalnızca Name alanına bakar.

SOG Meta Verileri

Bu yapı grubu bir .sog dosyasının meta verilerini tanımlar ve ULCCUtilLibrary sınıfının SOG ayrıştırma işlevleri tarafından çıktı olarak verilir.

FLCC2SogMeta

Ana SOG meta veri yapısı.

AlanTürAçıklama
Versionint32Biçim sürümü
Countint32Splat sayısı
bAntialiasboolKenar yumuşatmanın etkin olup olmadığı
InstancesFLCC2SogInstancesÖrnek dosyalarının listesi
MeansFLCC2SogMeansEn küçük ve en büyük değerleri ile dosya listesini içeren konum verisi
ScalesFLCC2SogScales256 girişli kod çizelgesi ve dosya listesini içeren ölçek verisi
QuatsFLCC2SogQuatsDöndürme verisinin dosya listesi
SemanticsFLCC2SogSemanticsAnlamsal verinin dosya listesi
Sh0FLCC2SogSh0256 girişli kod çizelgesi ve dosya listesini içeren, bant 0 küresel harmonikleri
ShNFLCC2SogShNBant sayısı, kod çizelgesi, sayı ve dosya listesini içeren yüksek dereceli küresel harmonikler

Yardımcı yöntem:

bool HasShN() const;    // whether high-order spherical harmonics are present, equivalent to ShN.Files being non-empty

Kullanım notları:

  • Görüntüleme verilerini yüklemeden ParseSogMetaFromFile ile okuyabilirsiniz; maliyeti çok düşüktür.
  • Yüklemeden önce nokta sayısını ve küresel harmonik durumunu gösterir, böylece kalite yapılandırması önceden belirlenebilir.
FLCC2SogMeta Meta;
if (ULCCUtilLibrary::ParseSogMetaFromFile(Path, Meta))
{
    UE_LOG(LogTemp, Log, TEXT("Version: %d, count: %d, high-order SH: %s"),
        Meta.Version, Meta.Count, Meta.HasShN() ? TEXT("yes") : TEXT("no"));
}

FLCC2SogShN

Yüksek dereceli küresel harmonik verisi.

AlanTürAçıklama
Bandsint32Küresel Harmonik Bantları
Countint32Sayı
FilesTArray<FString>Dosya Listesi
CodebookTStaticArray<float, 256>Niceleme kod defteri, Blueprint tarafından görülemez

Yardımcı yöntem: bool HasShN() const.

FLCC2SogImageData

SOG görüntü verisi.

AlanTürAçıklama
PixelDataTArray<uint8>Piksel verisi, RGBA formatı, piksel başına 4 bayt
Widthint32Genişlik
Heightint32Yükseklik

Diğer Alt Yapılar

Aşağıdaki yapılar yalnızca bir dosya listesi içerir; bazıları ayrıca niceleme kod defteri içerir:

YapıAlanlar
FLCC2SogInstancesFiles
FLCC2SogSemanticsFiles
FLCC2SogQuatsFiles
FLCC2SogMeansMins, Maxs, Files
FLCC2SogScalesCodebook (256 giriş), Files
FLCC2SogSh0Codebook (256 giriş), Files

Codebook, TStaticArray<float, 256> türündedir, UPROPERTY değildir ve Blueprint'te görünmez.

Octree Düğümleri

Bu yapı grubu LCC2 octree'yi tanımlar. Düşük seviyeli veridir; olağan geliştirme sırasında doğrudan değiştirmeniz gerekmez.

FTreeNode

Octree düğümü.

AlanTürAçıklama
IdFStringDüğüm tanımlayıcısı
XMin / YMin / ZMindoubleAABB'nin minimum noktası
XMax / YMax / ZMaxdoubleAABB'nin maksimum noktası
ChildNumint32Alt düğüm sayısı
ChildrenTArray<FTreeNode>Alt düğümler dizisi, UPROPERTY değildir
DataFTreeNodeDataDüğüm verisi

Yardımcı yöntem:

void ClearIterative();

Tüm düğümleri genişlik öncelikli toplar ve ters sırada temizler; çok derin bir ağaçta özyinelemeli yıkımdan kaynaklanan yığın taşmasını önler. Elle tutulan bir FTreeNode kapsam dışına çıkmadan önce çağırın.

FTreeNodeData

Düğüm veri kapsayıcısı; her veri türünün mevcut olup olmadığını boolean değerlerle işaretler.

AlanTürAçıklama
bHas3DGSbool3DGS verisi var mı
_3DGSFTreeNodeData3DGS3DGS verisi
bHasMeshboolMesh verisi var mı
MeshFTreeNodeDataMeshMesh verisi
bHasBVHboolBVH verisi var mı
BVHFTreeNodeDataBVHBVH verisi

FTreeNodeData3DGS

AlanTürAçıklama
Nameint32Dosya indeksi
Startint32Başlangıç ofseti
Countint32Sayı

FTreeNodeDataMesh

AlanTürAçıklama
Nameint32Dosya indeksi
Vertexint32Köşe sayısı
Faceint32Yüz sayısı

FTreeNodeDataBVH

AlanTürAçıklama
Nameint32Dosya indeksi

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