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

LCC for Unity Kullanım Kılavuzu · Özellik Geliştirme Kılavuzu

LCC ve LCC2 Veri Formatı Uyumluluğu Geliştirme Kılavuzu

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

LCC2 veri formatı daha iyi veri sıkıştırma ve LOD mekanizmaları sunar. Mevcut LCC formatı zamanla LCC2 ile değiştirilecek ve mevcut LCC SDK'nın (v1.x) bakımı kademeli olarak sona erecektir. Eski ve yeni veri formatları birbirinden çok farklı olduğu için yeni LCC SDK (v2.x), LCC formatıyla geriye dönük uyumlu değildir. Veri uyumluluğu aşağıdaki iki yöntemle sağlanabilir:

  1. Resmi dönüştürücünün (LccConverter) exe/dll dosyasını kullanarak LCC veri formatını LCC2'ye dönüştürün, ardından SDK'da kullanın;
  2. LCC ve LCC2 veri formatı uyumluluğunu uygulama katmanında gerçekleştirin.

Bu kılavuz esas olarak veri formatı uyumluluğunun uygulama katmanında gerçekleştirilmesine ilişkin akışı ve adımları açıklar. Bu yöntemde iki SDK sürümü aynı Unity projesine birlikte aktarılır; görüntüleme ve işleme için veri formatına göre uygun sürüm otomatik olarak seçilir.

Adım 1: Unity Sürümü ve Proje Ayarları

Unity sürümü ve proje ayarları, SDK'nın tek başına kullanıldığı durumla aynıdır; ek yapılandırma gerekmez. Bkz. PC Hızlı Başlangıç Kılavuzu ve Proje Ayarları Optimizasyon Kılavuzu.

Adım 2: İki SDK Sürümünü İçe Aktarma

Unity UPM ile SDK v1.4.8 ve üzeri (v1.4.32 önerilir) ile SDK v2.0.1 ve üzeri sürümlerini içe aktarın. İçe aktarma sonrasında v1.x sürümü Legacy olarak görüntülenir. İki SDK sürümü birbirini etkilemeden birlikte bulunabilir.

Not:

Adım 3: Sahneyi Yapılandırma

Sahnede LCCController adında boş bir nesne oluşturun ve bu nesneye hem LCCManager_Legacy hem de LCCManager bileşenlerini ekleyin.

LCCManager_Legacy ve LCCManager bileşenlerini LCCController nesnesine ekleyin

LCCManager_Legacy ve LCCManager bileşenlerinin ikisini de LCCController nesnesine ekleyin

Not:

LCCController GameObject'inin Transform ayarları (Rotation.x = -90, Scale.x = -1) nesneyi LCC veri koordinat sistemiyle hizalar. Koordinat sistemi hizalaması hakkında ayrıntılar için Unity SDK'ya Giriş sayfasındaki "LCC Veri Koordinat Sistemi" bölümüne bakın.

Adım 4: MultiSDKController Betiğini Yazma

MultiSDKController.cs adında yeni bir C# betiği oluşturun ve aşağıdaki kodu ekleyin:

using LCCCore;
using LCCCore_Legacy;
using System.IO;
using UnityEngine;

public class MultiSDKController : MonoBehaviour
{
    public LCCManager_Legacy m_managerLegacy;          // for LCC SDK v1.4.8 and earlier
    public LCCManager m_manager;                       // for LCC SDK v2.0.0 and later
    public string m_FilePath;                          // LCC file path
    private LCCCore_Legacy.Renderer m_rendererLegacy;  // for LCC SDK v1.4.8 and earlier
    private LCCCore.Renderer m_renderer;               // for LCC SDK v2.0.0 and later
    private DataType m_dataType;                       // data type, used to determine which SDK to use

    void Start()
    {
        string extension = Path.GetExtension(m_FilePath);
        if (extension == ".lcc")
        {
            m_manager.Enable = false; // disable the v2.0.0+ manager
            m_dataType = DataType.LCC;
            m_rendererLegacy = m_managerLegacy.GetRender(this.transform);
            m_rendererLegacy.Load(m_FilePath, LCCCore_Legacy.PlatformType.PC, onLoadCallback);
        }
        else if (extension == ".lcc2")
        {
            m_managerLegacy.Enable = false; // disable the v1.4.8 and earlier manager
            m_dataType = DataType.LCC2;
            m_renderer = m_manager.GetRender(this.transform);
            m_renderer.Load(m_FilePath, LCCCore.PlatformType.PC, onLoadCallback);
        }
    }

    private void onLoadCallback()
    {
        Debug.Log("data loaded !!!");
    }

    // Method call example: determine which SDK renderer to operate on by data type
    public void onRenderPointClick()
    {
        if (m_dataType == DataType.LCC)
            m_rendererLegacy.SwitchRenderMode(LCCCore_Legacy.RenderMode.PointCloud);
        else if (m_dataType == DataType.LCC2)
            m_renderer.SwitchRenderMode(LCCCore.RenderMode.PointCloud);
    }

    void OnDestroy()
    {
        if (m_dataType == DataType.LCC)
            m_rendererLegacy?.Dispose();
        else if (m_dataType == DataType.LCC2)
            m_renderer?.Dispose();
    }

    public enum DataType { LCC, LCC2 }
}

Not:

  • Betik dosyasının adı sınıf adıyla eşleşmelidir (MultiSDKController.cs dosyası class MultiSDKController sınıfına karşılık gelir); aksi halde betik bir GameObject'e eklenemez.
  • İki sürümün ad alanları farklıdır (LCCCore ve LCCCore_Legacy). Renderer, PlatformType ve RenderMode gibi aynı ada sahip türleri kullanırken bunları ayırt etmek için başlarına ad alanını eklemeniz gerekir.
  • Örnek, veri formatını dosya uzantısına (.lcc / .lcc2) göre belirler ve uygun SDK sürümünü seçer.

Adım 5: Betiği Ekleme ve Özellikleri Ayarlama

  1. MultiSDKController.cs betiğini sahnedeki LCCController nesnesine de ekleyin.
  2. Inspector penceresinde LCCManager ve LCCManager_Legacy bileşenlerini betiğin ilgili özelliklerine sürükleyin.
  3. Betiğin File Path özelliğine LCC / LCC2 dosya yolunu girin.
MultiSDKController betiğini ekleyin ve özelliklerini ayarlayın

MultiSDKController betiğini ekleyin ve Inspector'da özelliklerini ayarlayın

Kodu çalıştırdığınızda LCC veri formatına göre ilgili SDK sürümü görüntüleme için otomatik olarak kullanılır ve veri formatı uyumluluğu sağlanır.

Temel Adımlar

LCC ve LCC2 veri formatı uyumluluğunu uygulama katmanında gerçekleştirmenin temel adımları:

  1. Hem v1.x (Legacy) hem de v2.x SDK sürümlerini UPM ile içe aktarın; ikisi birlikte bulunabilir.
  2. LCCManager_Legacy ve LCCManager yönetici bileşenlerinin ikisini de aynı nesneye ekleyin.
  3. Veri formatına (dosya uzantısı .lcc / .lcc2) göre ilgili sürümün yöneticisini seçerek bir renderer oluşturun ve veriyi yükleyin.
  4. Hangi sürümün kullanılacağı belirlendikten sonra diğer sürümün yöneticisini devre dışı bırakın (Manager.Enable = false).
  5. Veriyi değiştirirken veya yok ederken, görüntülenen mevcut veriyi Renderer.Dispose() ile bellekten kaldırın.

Veri Formatı Uyumluluğu Notları

  • LCC ve LCC2 aynı anda görüntülenemez. Bu nedenle veriyi değiştirirken önce görüntülenen mevcut veriyi bellekten kaldırmanız (Renderer.Dispose() çağırmanız) gerekir; aksi halde bellek ve video belleği sızıntısı oluşabilir.
  • Kullanılmayan Manager'ı devre dışı bırakın. Hangi SDK sürümünü kullanacağınızı belirledikten sonra diğer SDK sürümünün Manager nesnesini devre dışı bırakmanız (Manager.Enable = false) en iyisidir. Aksi halde gereksiz bir performans yükü oluşabilir.
  • API arayüzleri tutarlıdır, ancak doğru Renderer'ı çağırmanız gerekir. İki SDK sürümünün API arayüzleri birebir aynıdır (v2.x içinde birçok API Manager sınıfına taşınmıştır; API kılavuzuna bakın). Ancak doğru sürümün Renderer'ını (m_rendererLegacy veya m_renderer) çağırdığınızdan emin olmalısınız. Ayrıca v2.0.0 ve sonraki sürümler renk ayarını ve kırpma verisi kaydetmeyi artık desteklemez. Bazı diğer API'ler de kullanımdan kaldırılmıştır; lütfen ilgili sürümün geliştirici belgelerini kontrol edin.

Bu çözüm esas olarak iki SDK sürümünün manager ve renderer API'lerini kapsar. Aşağıda örnek olarak v2.x (LCCCore) kullanılmıştır; v1.x (LCCCore_Legacy) aynı arayüze sahiptir, yalnızca ad alanı farklıdır.

LCCManager.Enable

// Property
public bool Enable { get; set; }

Manager'ın etkinleştirme anahtarı. false olarak ayarlandığında ilgili SDK sürümünün manager'ı devre dışı kalır. Böylece diğer sürümle aynı anda çalışmaktan kaynaklanan gereksiz performans yükü önlenir.

Kullanım örneği:

// When using LCC2 data, disable the Legacy manager
m_managerLegacy.Enable = false;

Notlar:

  • Kullanılacak sürümü belirledikten sonra diğer sürümün manager'ını devre dışı bırakmanız önerilir.

GetRender

// Return value: Renderer → render instance, null on failure
public Renderer GetRender(Transform _transform)

Bir görüntüleme örneği oluşturur ve belirtilen Transform'a bağlar.

ParametreTürAçıklama
_transformTransformGörüntüleme örneğinin bağlandığı Transform

Kullanım örneği:

m_renderer = m_manager.GetRender(this.transform);

Notlar:

  • Görüntüleyicinin veri biçimiyle uyumlu olması için ilgili sürümün manager'ı üzerinden oluşturulmalıdır.

Renderer.Dispose

// Return value: void
public void Dispose()

Görüntüleme örneğini yok eder; tüm GPU kaynaklarını ve belleği serbest bırakır. Örnek yok edildikten sonra tekrar kullanılamaz.

Kullanım örneği:

m_renderer?.Dispose();

Notlar:

  • Veriyi değiştirmeden önce mevcut veriyi mutlaka kaldırmalısınız. Aksi halde bellek ve video belleği sızıntısı oluşabilir.
  • Çağrıldıktan sonra Manager'a referansı kaldırması için otomatik olarak bildirim gönderir.
  • Nesne yok edilirken (OnDestroy) çağrılması önerilir.

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