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

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

Renderer: Görüntüleme Örneği

Bölüm 16.2 / 17Kılavuz sürümü v2.3.0Türkçe

Tek bir 3DGS sahnesinin veri yüklenmesinden ve görüntüleme kontrolünden sorumlu bir LCC görüntüleme örneğidir. LCCManager.GetRender() ile oluşturulur ve doğrudan örneklenemez.

Ad AlanıLCCCore

Özellikler

ÖzellikTürErişimAçıklama
TransformTransformSalt okunurGörüntüleme örneğinin bağlı olduğu Transform bileşeni
IsEnableboolSalt okunurGörüntüleme örneğinin etkin olup olmadığı; varsayılan değer true
IsRenderAllboolSalt okunurLOD0 verisinin tamamının görüntülenip görüntülenmediği (akış / LOD gezinme moduna karşıt); varsayılan değer false

Metotlar

Yöntemler amaçlarına göre gruplandırılmıştır:

Veri Yükleme ve Yaşam Döngüsü

Load

public void Load(string _filePath, Action<float> _onProgress, Action _onComplete, Action<string> _onError = null)

Bir 3DGS veri dosyasını yükler. .lcc2 (yerel dosya veya HTTP uzaktan) ile yerel formatlar olan .ply / .sog / .spz / .splat / .ksplat (yalnızca yerel dosyalar) desteklenir.

ParametreTürAçıklama
_filePathstringVeri dosyası yolu (yerel yol veya HTTP URL)
_onProgressAction<float>Yükleme ilerleme geri çağrısı, null olabilir
_onCompleteActionYükleme tamamlandı geri çağrısı, null olabilir
_onErrorAction<string>Yükleme hatası geri çağrısı (isteğe bağlı); parametre olarak hata açıklamasını alır

Notlar:

  • _onComplete geri çağrısı, veri GPU'ya gerçekten yerleştikten sonra tetiklenir.
  • Gölge alımı ve efekt tetikleme gibi işlemler _onComplete geri çağrısı içinde çağrılmalıdır.
  • Yerel formatlar her zaman SingleRender tam yükleme yolunu kullanır (LOD parçalama yoktur); ilerleme _onProgress ile, hatalar _onError ile bildirilir.
  • MultiRender modu HTTP veri kaynaklarına veya yerel formatlara izin vermez.
  • HTTP yalnızca .lcc2 dosyasını destekler; yerel formatlar yalnızca yerel yollarla ve yalnızca SingleRender modunda kullanılabilir.
  • SetPlatformType() / SwitchRenderPass() / SetMainCamera() ve benzeri ön koşullar önce tamamlanmalıdır.
  • Load() yöntemini yeniden çağırmadan önce Unload() veya Dispose() çağırmanız gerekir; yükleme sürerken Load() çağrılırsa istek reddedilir ve _onError tetiklenir.

Örnek:

renderer.Load("D:/data/scene.lcc2",
    p => Debug.Log($"Loading {p:P0}"),
    () => {
        Debug.Log("Load complete");
        lccManager.SetShadowReceive(true);
    });

Unload

public void Unload()

Şu anda yüklü olan veriyi serbest bırakır ve örneği "oluşturuldu ancak yüklenmedi" durumuna döndürür; örneğin yönetici kaydı korunur. Aynı Renderer örneği, Load → Unload → Load döngüsü tekrarlanarak yeniden kullanılabilir.

Notlar:

  • Dispose() yönteminden farkı: yönetici kaydı kaldırılmaz ve örnek yeniden kullanılabilir.
  • Unload() sonrasında IsEnable değeri false olur; Load() yeniden çağrıldığında tüm veri durumu sıfırlanır.
  • Yalnızca veri yüklemesi tamamlandığında çalışır; veri yüklenmemişse veya örnek zaten Dispose() edilmişse hemen geri döner.

Örnek:

renderer.Unload();
renderer.Load(newFilePath, null, () => Debug.Log("Reloaded"));

Dispose

public void Dispose()

Görüntüleme örneğini yok eder ve tüm GPU kaynaklarını ve belleği serbest bırakır. Örnek yok edildikten sonra kullanılamaz ve tüm genel yöntemler otomatik olarak etkisiz hale gelir.

Notlar:

  • Çağrıdan sonra LCCManager'a başvuruyu kaldırması için otomatik olarak bildirim gönderilir.

Örnek:

renderer.Dispose();
renderer = null;

Çalışma Zamanı Kontrolü ve Sorgular

SetEnable

public void SetEnable(bool _enable)

Görüntüleme örneğinin etkinlik durumunu ayarlar. Devre dışı bırakıldığında görüntülemeye ve LOD seçimine katılmaz.

ParametreTürAçıklama
_enableboolEtkinleştirilip etkinleştirilmeyeceği

Notlar:

  • Kaynakları serbest bırakmaz ve istendiği zaman yeniden etkinleştirilebilir.

Örnek:

renderer.SetEnable(false); // Hide
renderer.SetEnable(true);  // Show

SetAlpha

public void SetAlpha(float alpha)

Geçerli Renderer'ın bağımsız opaklığını ayarlar. LCCManager.SetAlpha() yönteminin işlem düzeyindeki genel alfa değerinden farklı olarak, bu API yalnızca geçerli Renderer'ı etkiler. Nihai alfa = splat kapsama oranı × LCCManager genel alfa değeri × bu Renderer'ın alfa değeri.

ParametreTürAçıklama
alphafloatGeçerli Renderer'ın bağımsız opaklığı, aralık [0, 1]; aşıldığında otomatik olarak sınırlandırılır

Notlar:

  • Yalnızca MultiRender / RenderCore yolunda (PC / Mac) etkilidir; bu yolda her splat bir renderID taşır ve gölgelendirici, Renderer başına alfa dizisini renderID ile indeksler.
  • FullRender / Mobile yolunda renderID bulunmadığından bu API orada işlem yapmaz (değer önbelleğe alınır ve daha sonra RenderCore yoluna geçildiğinde otomatik olarak uygulanır).

Örnek:

renderer.SetAlpha(0.5f);

SetRenderAll

public void SetRenderAll(bool _renderAll)

Tam görüntüleme modunun kullanılıp kullanılmayacağını ayarlar (LOD0 verisi tamamen görüntülenir). Bir sonraki Load() çağrısında etkili olur ve şu anda yüklü olan veri kümesini etkilemez.

ParametreTürAçıklama
_renderAllboolTam görüntüleme yapılıp yapılmayacağı

Notlar:

  • Yalnızca PC / Mac platformlarında desteklenir; mobil / VR üzerinde etkisi yoktur.
  • Geçerli durumu IsRenderAll özelliği ile sorgulayın.

Örnek:

renderer.SetRenderAll(true);
renderer.Load(filePath, null, () => Debug.Log("Full loaded"));

SetColliderEnable

// Return value: bool, true=set successfully, false=the data has no collider or the instance is inactive
public bool SetColliderEnable(bool _enable)

Çarpışma özelliğini açar veya kapatır. Etkinleştirildiğinde IntersectsSphere() / IntersectsCapsule() ve RaycastMesh() kullanılabilir hale gelir.

ParametreTürAçıklama
_enableboolCollider'ın etkinleştirilip etkinleştirilmeyeceği

Notlar:

  • Veri bir Collider düğümü içermelidir, aksi halde false döndürülür.
  • Renderer etkin olmalıdır.

Örnek:

bool ok = renderer.SetColliderEnable(true);
if (!ok) Debug.LogWarning("Data does not contain a collider");

SetEnvironment

public void SetEnvironment(bool _env)

Ortam verisi görüntülemeyi açar veya kapatır. Ortam verisi, uzak görünümleri doldurmak için kullanılan düşük hassasiyetli bir arka plan nokta bulutudur.

ParametreTürAçıklama
_envboolOrtam verisinin görüntülenip görüntülenmeyeceği

Notlar:

  • Veri, ortam düğümlerini içermelidir.
  • Ortam verisi, ana verinin LOD sisteminden bağımsızdır.

Örnek:

renderer.SetEnvironment(true);

GetBounds

public void GetBounds(out Vector3 max, out Vector3 min)

Görüntülenen verinin eksene hizalı sınır kutusunu (dünya koordinatları) alır.

ParametreTürAçıklama
maxout Vector3Sınır kutusunun maksimum noktası (dünya koordinatları)
minout Vector3Sınır kutusunun minimum noktası (dünya koordinatları)

Notlar:

  • Veri tamamen yüklenmediğinde Vector3.zero döndürür.
  • Kamera konumlandırma ve görüş açısı hesaplamaları için kullanılabilir.

Örnek:

renderer.GetBounds(out Vector3 max, out Vector3 min);
Vector3 center = (max + min) / 2f;
Vector3 size = max - min;

GetSourceType

// Return value: SourceType
public SourceType GetSourceType()

Yüklenen verinin kaynak türünü alır; bkz. SourceType.

Notlar:

  • Veri yüklenmediğinde SourceType.None döndürür.

GetDataType

// Return value: DataType
public DataType GetDataType()

Yüklenen verinin biçim türünü alır; bkz. DataType.

Notlar:

  • Veri yüklenmediğinde DataType.None döndürür.

GetMeta (Dosya Yolundan)

// Return value: bool, true=read successfully
public bool GetMeta(string _filePath, out SplatMeta _metaData)

Belirtilen dosya yolundaki 3DGS verisinin meta verilerini, veriyi tamamen yüklemeden okur.

ParametreTürAçıklama
_filePathstringVeri dosyası yolu
_metaDataout SplatMetaÇıktı olarak metaveri

Notlar:

  • Yerel yolları ve HTTP URL'lerini destekler.
  • Yalnızca dosya başlığındaki meta verileri okur; nokta bulutu verisini yüklemez.
  • Yol boşsa veya dosya mevcut değilse false döndürür.

Örnek:

if (renderer.GetMeta(filePath, out SplatMeta meta))
{
    Debug.Log(meta.source);
    Debug.Log(meta.dataType);
}

GetMeta (Yüklenen Veriden)

// Return value: bool, true=read successfully
public bool GetMeta(out SplatMeta _metaData)

Şu anda yüklü olan verinin meta verilerini alır. Veri yüklemesi tamamlanmadıysa dosya yolundan okumayı dener.

ParametreTürAçıklama
_metaDataout SplatMetaÇıktı olarak metaveri

Örnek:

if (renderer.GetMeta(out SplatMeta meta))
{
    Debug.Log(meta.source);
}

GetMeshBlockInfos

// Return value: List<LCCMeshBlockInfo>, collision Mesh block metadata; null when there is no Mesh or it is unavailable
public List<LCCMeshBlockInfo> GetMeshBlockInfos()

Tüm çarpışma Mesh bloklarının meta verilerini döndürür (id, dünya / yerel sınır kutusu, köşe sayısı, yüzey sayısı). Sıfır G/Ç, sıfır ayrıştırma; yalnızca bellekte hazır bulunan meta verileri okur. Bkz. LCCMeshBlockInfo.

Notlar:

  • Yalnızca PC / Mac platformu ve yerel veri kaynağı için geçerlidir; ana iş parçacığında çağrılmalıdır.
  • Tipik kullanım: önce her bloğun dünya sınır kutusunu almak için kullanın, gerekli id'leri seçin, ardından yalnızca bu blokları okumak için GetMeshes(ids) çağırın.
  • Yerel biçimlerde (PLY / SOG / SPZ / splat / ksplat) Mesh bulunmaz ve null döndürülür (normal durumdur, günlük kaydı oluşturulmaz).

Örnek:

var infos = renderer.GetMeshBlockInfos();
foreach (var info in infos)
{
    Debug.Log($"{info.id}: verts={info.vertexCount}, faces={info.faceCount}");
}

GetMeshes

// Return value: List<LCCMeshBlock>, all collision Mesh geometry data; null when unavailable
public List<LCCMeshBlock> GetMeshes()

Tüm çarpışma Mesh bloklarının geometri verilerini (köşeler + üçgen indeksleri, yerel koordinatlarda) eşzamanlı olarak döndürür. Bu ağır bir işlemdir (eşzamanlı disk okuma + ayrıştırma + bellek ayırma); bu nedenle bir kez çağırıp sonucu kendiniz önbelleğe alın, asla her karede çağırmayın. Bkz. LCCMeshBlock.

Notlar:

  • Yalnızca PC / Mac platformu ve yerel veri kaynağı için geçerlidir; ana iş parçacığında çağrılmalıdır.
  • Büyük sahnelerde, yönetilen belleğin bir anda büyük miktarda ayrılmasını önlemek için id'leri seçmek üzere GetMeshBlockInfos() ve ardından GetMeshes(ids) kullanın.
  • Tek bir blok 65535'ten fazla köşe içerebilir; bu nedenle Mesh oluşturulmadan önce mesh.indexFormat = IndexFormat.UInt32 ayarlanmalıdır.

Örnek:

var meshes = renderer.GetMeshes();
foreach (var block in meshes)
{
    // block.vertices / block.triangles are in the object's local coordinate system
}

GetMeshes (id'ye Göre)

// Return value: List<LCCMeshBlock>, collision Mesh geometry data of the specified ids; null when there is no hit
public List<LCCMeshBlock> GetMeshes(IEnumerable<string> _ids)

Belirtilen id'lere ait çarpışma Mesh bloğu geometri verilerini (yerel koordinatlarda) eşzamanlı olarak döndürür. id'ler GetMeshBlockInfos() tarafından sağlanır.

ParametreTürAçıklama
_idsIEnumerable<string>Hedef blok id'lerinin kümesi (GetMeshBlockInfos() tarafından sağlanır)

Notlar:

  • Bilinmeyen id'ler uyarı verilerek atlanır; yinelenen id'ler tekilleştirilir (tekrarlı disk okuması yapılmaz); dönüş sırası, id'lerin (tekilleştirmeden sonraki) tarama sırasıdır.
  • Girdi null veya boşsa ya da eşleşme yoksa uyarı verir ve null döndürür.
  • Diğer kısıtlar GetMeshes() ile aynıdır.

Örnek:

var ids = new List<string> { "block-0", "block-3" };
var meshes = renderer.GetMeshes(ids);

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