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

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

ULCCComponent: LCC İşlem Hattı Bileşeni

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

ULCCComponentBase sınıfından türeyen, LCC1 işlem hattına özgü bileşen. Temel sınıf yeteneklerine ek olarak splat konumlarına dayalı ışın testleri ve dikiş kesme özelliği sunar.

ModülLCC4UnrealRuntime
HeaderLCCComponent.h
Üst sınıfULCCComponentBase
TutanALCCActor
#include "LCCComponent.h"

Örneği alın:

ULCCComponent* Comp = Cast<ULCCComponent>(LCCActor->GetLCCComponent());

Özellikler

ÖzellikTürVarsayılanAçıklama
bEnableSeamCuttingboolfalseDikiş kesmeyi elle etkinleştirir, bkz. Dikiş Kesme. LCC dosya sürümü 5.0 ve üzerinde elle etkinleştirmeye gerek yoktur; otomatik olarak etkinleşir
LCCPerformanceFLCCRenderInfo—LCC1'e özgü performans parametreleri, aşağıdaki tabloya bakın

MetaInfo (FLCCMetaInfo türünde) korumalı bir üyedir; C++ tarafında dışarıdan erişilemez ve yalnızca Blueprint'te görünür (Details panelinde salt okunur). C++'ta temel alanları okumak için temel sınıftaki GetMetaInfo() işlevini kullanın.

LCCPerformance

Bu da bir onay kutusu ve bir değer biçimindedir; onay kutusu kapalıyken proje ayarlarındaki varsayılan değer kullanılır.

AlanTürVarsayılanOnay KutusuAçıklama
SortFactorfloat1bCanSetSortFactorSıralama sıklığı ölçek çarpanı, 0,2 ile 5 arasında, bkz. Sort Factor
bAddExtraPreNodesbooltruebEnableExtraPreNodesEk ön yükleme düğümleri ekler, bkz. Add Extra Preload Nodes
ULCCComponent* Comp = Cast<ULCCComponent>(LCCActor->GetLCCComponent());
if (Comp)
{
    // sort less often to save performance
    Comp->LCCPerformance.bCanSetSortFactor = true;
    Comp->LCCPerformance.SortFactor = 2.0f;

    // head turns are fast in VR, add preload nodes
    Comp->LCCPerformance.bEnableExtraPreNodes = true;
    Comp->LCCPerformance.bAddExtraPreNodes = true;
}

Metotlar

GetUseSeamCut

bool GetUseSeamCut() const;

Shader'da dikiş kesmenin etkin olup olmadığını belirtir. Şu koşullardan biri sağlandığında true döndürür: LCC dosya sürümü 5.0 veya üzeridir ya da bEnableSeamCutting elle etkinleştirilmiştir. Yalnızca C++.

Çoklu Görüntü Alanı

Çoklu görüntü alanı arayüzleri (SetPlayerLoadMode, SetPlayerRenderMode, SetSceneCaptureLoadMode, SetSceneCaptureRenderMode, ModifyPlayerTransform, CancelModifyPlayerTransform) ULCCComponentBase temel sınıfında bildirilmiştir ve hem LCC1 hem de LCC2 işlem hatları tarafından 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.

Raycast

⚠️ Bu arayüz grubu yeterince test edilmemiştir ve beklendiği gibi çalışmayabilir. Üretimde bunun yerine "çarpışmayı etkinleştir ve motor ışın testini kullan" yaklaşımını tercih edin: önce çarpışma verisini SetLCCCollisionEnable ile yükleyin, ardından LineTraceByChannel gibi motor arayüzleriyle test edin. Ayrıntılar için Çarpışma bölümüne bakın.

LCC1, splat konumlarını hedefleyen dört ışın testi işlevi sunar. Test hedefi doğrudan nokta bulutu verisidir ve çarpışma dosyası gerekmez.

Dört işlev, iki boyutta farklılaşan iki gruba ayrılır:

Tek İsabetÇoklu İsabet
Varsayılan Yarıçap (10 cm)LineTraceSingleLineTraceMulti
Özel YarıçapLineTraceSingleWithRadiusLineTraceMultiWithRadius

Dördünün ortak hata ayıklama parametreleri:

ParametreTürAçıklama
Startconst FVector&Işın başlangıcı, dünya koordinatlarında
Endconst FVector&Işın bitişi, dünya koordinatlarında
bDrawDebugLineboolHata ayıklama çizgisinin çizilip çizilmeyeceği
DurationfloatHata ayıklama çizgisinin süresi, saniye cinsinden
ThicknessfloatHata ayıklama çizgisinin kalınlığı

Not: Bu dört işlev C++ tarafında protected olarak tanımlıdır ve Blueprint tarafında doğrudan düğüm olarak çağrılabilir. C++ içinde bunları ULCCComponent alt sınıfında kullanın veya motorun sunduğu ışın testlerine geçin.

Öneri

Çarpışma gövdelerini ve motor ışın testlerini tercih edin. v0.6.0 sürümünden itibaren veri bir çarpışma dosyası içeriyorsa ve çarpışma etkinse LineTraceByChannel eksiksiz bir FHitResult döndürür (normal, malzeme, isabet alan bileşen ve daha fazlası). Motorun fizik, yapay zekâ ve gezinme sistemleriyle sorunsuz çalışır ve bu yol kapsamlı biçimde doğrulanmıştır.

Buradaki özel arayüzler yalnızca aşağıdaki durumlarda düşünülmeye değerdir ve kendi başınıza kapsamlı test yapmanızı gerektirir:

  • Verinin çarpışma dosyası yoktur ve çarpışmalı veriye geçmek mümkün değildir.
  • İsabet noktasının düğüm bilgisi gerekir (FLCCSplat::NodeVector, X, Y ve Level değerlerini verir).

LineTraceSingle

UFUNCTION(BlueprintCallable, Category = "XGrids|Raycast")
bool LineTraceSingle(const FVector& Start, const FVector& End, FLCCSplat& OutHit,
                     bool bDrawDebugLine, float Duration, float Thickness) const;

Tek ışın testi; en yakın isabet noktasını döndürür. Test yarıçapı 10 cm olarak sabittir.

ParametreTürAçıklama
OutHitFLCCSplat&İsabet bilgisini çıktı olarak verir; dünya konumu Location ve düğüm bilgisi NodeVector içerir

bool döndürür: isabet olduğunda true.

// inside a subclass of ULCCComponent
void UMyLCCComponent::PickFromCamera(const FVector& CamLocation, const FVector& CamForward)
{
    const FVector Start = CamLocation;
    const FVector End = Start + CamForward * 10000.f;

    FLCCSplat Hit;
    if (LineTraceSingle(Start, End, Hit, true, 2.0f, 2.0f))
    {
        UE_LOG(LogTemp, Log, TEXT("Hit at %s, node %s"),
            *Hit.Location.ToString(), *Hit.NodeVector.ToString());
    }
}

Metin olarak Blueprint, fare tıklamasıyla seçim:

[Input Action: Pick]
        │ Pressed
        ▼
[Get Player Camera Manager] ──▶ [Get Camera Location]  → Start
                            └─▶ [Get Actor Forward Vector]
                                        │
                                        ▼
                                [Multiply] (× 10000)
                                        │
                                        ▼
                                [Add] (Start + previous step) → End
        │
        ▼
[Line Trace Single]
        Target = (LCC Component)
        Start = Start
        End = End
        Draw Debug Line = true
        Duration = 2.0
        Thickness = 2.0
        │ Return Value ──┐
        ▼                │
[Branch] ◀───────────────┘
        │ True
        ▼
[Break LCCSplat]  ← wired to Out Hit
        Location → used to place a marker

LineTraceSingleWithRadius

UFUNCTION(BlueprintCallable, Category = "XGrids|Raycast")
bool LineTraceSingleWithRadius(const FVector& Start, const FVector& End, float Radius,
                               FLCCSplat& OutHit, bool bDrawDebugLine,
                               float Duration, float Thickness) const;

Test yarıçapı ayarlanabilen tek ışın testi.

ParametreTürAçıklama
RadiusfloatTest yarıçapı, santimetre cinsinden

Kullanım notları:

  • Nokta bulutu kesiklidir ve çok küçük bir yarıçap noktalar arasındaki boşluklardan kolayca geçer. Bu nedenle doğrudan bir nesneye nişan alsanız bile hiçbir şeye isabet etmeyebilir. Bu durumda yarıçapı artırın.
  • Daha büyük bir yarıçap isabeti kolaylaştırır ancak hassasiyeti düşürür; döndürülen nokta asıl hedeflenen konumdan sapabilir.
  • Seyrek veride 20~50 cm ile başlayın; yoğun veride 5~10 cm yeterlidir.
FLCCSplat Hit;
// large radius for a sparse point cloud, raising the hit rate
if (LineTraceSingleWithRadius(Start, End, 30.0f, Hit, false, 0.f, 0.f))
{
    SpawnMarkerAt(Hit.Location);
}

LineTraceMulti

UFUNCTION(BlueprintCallable, Category = "XGrids|Raycast")
bool LineTraceMulti(const FVector& Start, const FVector& End,
                    bool bDrawDebugLine, float Duration, float Thickness,
                    TArray<FLCCSplat>& OutHits) const;

Çoklu ışın testi; yol boyunca tüm isabet noktalarını döndürür. Test yarıçapı 10 cm olarak sabittir.

ParametreTürAçıklama
OutHitsTArray<FLCCSplat>&Tüm isabet noktalarının çıktısı

Kullanım notları:

  • Delip geçen testlerde kullanın; örneğin bir çizginin kaç katmanlı yapıdan geçtiğini ölçmek veya kesit analizi yapmak için.
  • İsabet noktası sayısı yüksek olabilir; bu yüzden her karede çağırmaktan kaçının.
TArray<FLCCSplat> Hits;
if (LineTraceMulti(Start, End, true, 3.0f, 1.0f, Hits))
{
    UE_LOG(LogTemp, Log, TEXT("Passed through %d splats"), Hits.Num());

    for (const FLCCSplat& Hit : Hits)
    {
        DrawDebugPoint(GetWorld(), Hit.Location, 8.f, FColor::Yellow, false, 3.f);
    }
}

LineTraceMultiWithRadius

UFUNCTION(BlueprintCallable, Category = "XGrids|Raycast")
bool LineTraceMultiWithRadius(const FVector& Start, const FVector& End, float Radius,
                              bool bDrawDebugLine, float Duration, float Thickness,
                              TArray<FLCCSplat>& OutHits) const;

Test yarıçapı ayarlanabilen çoklu ışın testi. Parametrelerin anlamı yukarıdakiyle aynıdır.

Daha büyük bir yarıçap isabet noktası sayısını belirgin biçimde artırır. Bu durum, silindirik bir aralıktaki nokta yoğunluğunu tahmin etmek gibi istatistiksel ihtiyaçlara uygundur.

FLCCSplat

USTRUCT(BlueprintType)
struct FLCCSplat
{
    FVector Location;         // world coordinates of the hit point
    FLCCVector NodeVector;    // node the hit point belongs to
};

FLCCVector yapısının X, Y ve Level alanları, düğümün octree içindeki yerini belirler. Level, o noktada o anda yüklü olan ayrıntı düzeyini yansıtır; bakılan verinin ince mi yoksa kaba mı olduğunu gösterir.

Alanların tamamı için Yapılar bölümüne bakın.

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