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

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

SOG / SPZ / PLY Actor'ları: Tek Dosyadan 3DGS Yükleme

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

ASogActor, ASpzActor ve APlyActor Actor'ları sırasıyla .sog, .spz ve .ply formatlarına karşılık gelir ve LCC dizin yapısı olmadan tek bir 3DGS dosyası yükler. Üçü de ALCCActorBase sınıfından türetilir.

ModülLCC4UnrealRuntime
Header DosyalarıSogActor.h, SpzActor.h, PlyActor.h
Üst sınıfALCCActorBase
Dahili BileşenULCC2Component
#include "SogActor.h"
#include "SpzActor.h"
#include "PlyActor.h"

Üçü de dahili olarak sanal bir FLCC2MetaInfo oluşturarak LCC2 görüntüleme hattının tamamını yeniden kullanır. Başka bir deyişle LCC2 yetenekleri bu üç format için de aynı şekilde kullanılabilir; bunlara küresel harmonik bant kontrolü, aydınlatma normal modları, kırpma ve kesit alma ile renk ayarı dahildir. Aynı şekilde LCC2 hattının sınırlamaları da devralınır; örneğin çoklu görünüm alanı arayüzlerinin etkisi yoktur.

Desteklenen Formatlar

ActorUzantıKullanım Senaryosu
ASogActor.sogSıkıştırılmış format, küçük boyut, hızlı yükleme
ASpzActor.spzSıkıştırılmış format
APlyActor.plyYaygın nokta bulutu / 3DGS değişim formatı; çoğu eğitim aracının yerel çıktısıdır

Her formatın destek kapsamı için Giriş - Supported Formats bölümüne bakın.

LCC Dizin Formatlarıyla Karşılaştırma

.sog / .spz / .plyLCC / LCC2 dizini
Dosya organizasyonuTek dosyaMeta veri dosyası ve birkaç veri parçası
LOD seviyeleriNoneVar, mesafeye göre akış şeklinde yüklenir
Uygun ölçekKüçük ve orta ölçekli sahnelerBüyük sahneler
Çarpışma verisiNoneMümkün
Dağıtım kolaylığıYüksek, tek dosyaDizinin eksiksiz korunmasını gerektirir

Nasıl seçilir: veri küçük olduğunda, sonucu hızlıca doğrularken veya tek dosya olarak dağıtım gerektiğinde bu üç formatı kullanın. Büyük sahneler performansı kontrol etmek için LOD'a dayanır ve LCC / LCC2 dizin formatını gerektirir.

Metotlar

Üç Actor'ün tüm genel arayüzleri ALCCActorBase sınıfından devralınır; yalnızca aşağıdaki metotlar geçersiz kılınır.

SelectFile

// ASogActor
virtual void SelectFile() override;   // the dialog lists only .sog

// ASpzActor
virtual void SelectFile() override;   // the dialog lists only .spz

// APlyActor
virtual void SelectFile() override;   // the dialog lists only .ply

Dosya iletişim kutusunu açar; her biri kendi uzantısını filtreler. Details panelinde Load düğmesi olarak görünür.

Yalnızca Editor'de çalışır; paketlenmiş çalışma zamanında Load kullanın.

Load (yalnızca APlyActor tarafından geçersiz kılınır)

// APlyActor
virtual void Load(const FString& String) const override;

Bir .ply dosyası yükler. Uzantısı .ply olmayan bir yol doğrudan reddedilir ve ayrıştırma denenmez.

ASogActor ve ASpzActor, Load metodunu geçersiz kılmaz ve temel sınıf uygulamasını kullanır.

Örnekler

Tek bir .sog dosyası yükleme

#include "SogActor.h"
#include "LCC2Component.h"

void AMyLoader::LoadSogFile()
{
    ASogActor* SogActor = GetWorld()->SpawnActor<ASogActor>(
        ASogActor::StaticClass(), FVector::ZeroVector, FRotator::ZeroRotator);
    if (!SogActor)
    {
        return;
    }

    SogActor->Load(TEXT("D:/Data/scene.sog"));

    // internally a ULCC2Component, so all LCC2 capabilities are available
    ULCC2Component* Comp = Cast<ULCC2Component>(SogActor->GetLCCComponent());
    if (Comp)
    {
        Comp->SetSHBands(2);
        Comp->SetSplatScale(0.9f);
    }
}

Actor'ü uzantıya göre otomatik seçme

Her formatın kendine ait bir Actor'ü vardır ve gerçek bir projede genellikle uzantıya göre yönlendirme yapmak gerekir.

Bunun için DetermineFileFormat işlevine güvenmeyin: Yalnızca .lcc, .splats, .las ve .ply biçimlerini tanır; .lcc2, .sog ve .spz için None döndürür. Uzantıyı doğrudan denetlemek daha güvenilirdir:

#include "Tools/LCCUtilLibrary.h"
#include "LCCActor.h"
#include "LCC2Actor.h"
#include "SogActor.h"
#include "SpzActor.h"
#include "PlyActor.h"

ALCCActorBase* AMyLoader::LoadAnyFormat(const FString& Path)
{
    if (!ULCCUtilLibrary::CheckPathValid(Path))
    {
        UE_LOG(LogTemp, Error, TEXT("Path does not exist: %s"), *Path);
        return nullptr;
    }

    const FString Ext = FPaths::GetExtension(Path).ToLower();

    UClass* ActorClass = nullptr;
    if (Ext == TEXT("lcc"))       ActorClass = ALCCActor::StaticClass();
    else if (Ext == TEXT("lcc2")) ActorClass = ALCC2Actor::StaticClass();
    else if (Ext == TEXT("sog"))  ActorClass = ASogActor::StaticClass();
    else if (Ext == TEXT("spz"))  ActorClass = ASpzActor::StaticClass();
    else if (Ext == TEXT("ply"))  ActorClass = APlyActor::StaticClass();

    if (!ActorClass)
    {
        UE_LOG(LogTemp, Error, TEXT("Unsupported format: %s"), *Path);
        return nullptr;
    }

    ALCCActorBase* Actor = GetWorld()->SpawnActor<ALCCActorBase>(
        ActorClass, FVector::ZeroVector, FRotator::ZeroRotator);
    if (Actor)
    {
        Actor->Load(Path);
    }
    return Actor;
}

Blueprint'te uzantıyı doğrudan alan bir düğüm yoktur, bu nedenle bir dize denetimi kullanın:

[Custom Event: LoadAnyFormat]
        Path (String)
        │
        ▼
[Check Path Valid]
        Path = Path
        │ Return Value ──┐
        ▼                │
[Branch] ◀───────────────┘
        │ True
        ▼
[Ends With]
        Source String = Path
        In Suffix = ".sog"
        Search Case = Ignore Case
        │ Return Value ──┐
        ▼                │
[Branch] ◀───────────────┘
        │ True
        ▼
[Spawn Actor from Class]
        Class = SogActor
        │ Return Value ──┐
        ▼                │
[Load] ◀─────────────────┘
        Target = (Return Value)
        String = Path

(the False branch keeps checking ".spz", ".ply", ".lcc2", ".lcc" with Ends With)

Notlar

  • Bu üç biçimde LOD seviyesi yoktur. Yükleme, tek seviyeli ve tek düğümlü bir ağaç oluşturur (toplam seviye sayısı 1, alt düğümü olmayan kök düğüm). Bu nedenle StartLevel, EndLevel ve LevelFactor gibi LOD parametreleri okunmaya devam eder, ancak seçilecek seviye bulunmadığından etkisi olmaz. Performans esas olarak MaxSplatNum ve SplatScale ile kontrol edilir.
  • Bu üç biçim çarpışma verisi içermez. Alternatifler için Çarpışma - Alternatives for Single-file Formats sayfasına bakın.
  • Büyük bir dosya tek seferde tamamen yüklenir ve video belleği kullanımı sabit kalır, görünüme göre değişmez. Yükleme sınırı ve hesaplanma biçimi için Görüntüleme - Loading Limits of Single-file Formats sayfasına bakın.
  • Üçünün Ayrıntılar panelinde bSyncLoadAtRuntime seçeneği görünür (varsayılan olarak etkindir). Bu seçenek, paketlenmiş bir derlemenin BeginPlay sırasında eşzamanlı yükleme yapıp yapmayacağını belirler. Bkz. ULCC2Component.
  • LCC2 görüntüleme hattını kullandıkları için temel sınıftaki çoklu görüntü alanı arayüzleri bunlara uygulanmaz.
  • Üçü de oluşturulurken Component üzerindeki bUseMipFilter değerini false yapar (temel sınıfta varsayılan değer true'dur) ve Actor dönüşünü (0, 0, 90) olarak ayarlar.
  • .ply biçiminin birkaç alt biçimi vardır ve eklenti, 3DGS özelliklerini taşıyan türü destekler. Normal geometri mesh'i içeren bir .ply dosyasının yüklenmesi başarısız olur.

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