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ül | LCC4UnrealRuntime |
| Header | LCCComponent.h |
| Üst sınıf | ULCCComponentBase |
| Tutan | ALCCActor |
#include "LCCComponent.h"
Örneği alın:
ULCCComponent* Comp = Cast<ULCCComponent>(LCCActor->GetLCCComponent());
Özellikler
| Özellik | Tür | Varsayılan | Açıklama |
|---|---|---|---|
bEnableSeamCutting | bool | false | Dikiş 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 |
LCCPerformance | FLCCRenderInfo | — | 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.
| Alan | Tür | Varsayılan | Onay Kutusu | Açıklama |
|---|---|---|---|---|
SortFactor | float | 1 | bCanSetSortFactor | Sıralama sıklığı ölçek çarpanı, 0,2 ile 5 arasında, bkz. Sort Factor |
bAddExtraPreNodes | bool | true | bEnableExtraPreNodes | Ek ö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
LineTraceByChannelgibi 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) | LineTraceSingle | LineTraceMulti |
| Özel Yarıçap | LineTraceSingleWithRadius | LineTraceMultiWithRadius |
Dördünün ortak hata ayıklama parametreleri:
| Parametre | Tür | Açıklama |
|---|---|---|
Start | const FVector& | Işın başlangıcı, dünya koordinatlarında |
End | const FVector& | Işın bitişi, dünya koordinatlarında |
bDrawDebugLine | bool | Hata ayıklama çizgisinin çizilip çizilmeyeceği |
Duration | float | Hata ayıklama çizgisinin süresi, saniye cinsinden |
Thickness | float | Hata ayıklama çizgisinin kalınlığı |
Not: Bu dört işlev C++ tarafında
protectedolarak tanımlıdır ve Blueprint tarafında doğrudan düğüm olarak çağrılabilir. C++ içinde bunlarıULCCComponentalt 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.
| Parametre | Tür | Açıklama |
|---|---|---|
OutHit | FLCCSplat& | İ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.
| Parametre | Tür | Açıklama |
|---|---|---|
Radius | float | Test 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.
| Parametre | Tür | Açıklama |
|---|---|---|
OutHits | TArray<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
- ULCCComponentBase: ortak görüntüleme ve performans arayüzleri
- ULCC2Component: LCC2 işlem hattının eşleşen bileşeni
- Yapılar:
FLCCSplat,FLCCVectorveFLCCRenderInfoalanları
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:

