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

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

Yansıtmalı Çıkartma Geliştirme Kılavuzu

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

Özelliklere Genel Bakış

Çıkartma yansıtma (Decal Projector), 2B bir görüntüyü slayt projektörü gibi 3DGS nokta bulutu yüzeyine yansıtır. Projektör, dünya uzayında sabit bir perspektif görüş hacmidir; görüş hacmi içindeki nokta bulutu çıkartma rengiyle kaplanır, görüş hacmi dışındaki nokta bulutu etkilenmez. Çıkartma, tüm 3DGS sahnesinde tutarlı bir gölgelendirme etkisi oluşturan küresel bir gölgelendirme durumudur.

Temel yansıtmanın üzerine isteğe bağlı olarak oklüzyon ayıklama etkinleştirilebilir. Varsayılan olarak çıkartma röntgen benzeri çalışır: 3DGS'nin kendisinde yüzey kavramı bulunmadığından çıkartma, ön nesnelerin gizlediği arka yüzlere sızar ve tüm 3DGS sahnesinin içinden geçer. Oklüzyon ayıklama etkinleştirildiğinde yalnızca projektöre bakan ön yüzey renklendirilir; gizlenen arka yüzler ve gizlenen sahneler artık renklendirilmez. Bu, gerçekçi bir slayt projektörü etkisi oluşturur.

Not:

Çıkartma ve oklüzyon ayıklama yalnızca PC / Mac (URP işlem hattı) üzerinde etkili olur. İlgili arayüzlerin mobil veya VR platformlarında çağrılması SDK tarafından yok sayılır ve bir uyarı günlüğü yazdırılır. İş tarafında platform denetimi yapmanız gerekmez, ancak bu platformlarda etkiyi görmeyi beklemeyin.

Adım 1: Sahneyi ve GameObject'leri Oluşturma

Unity'de yepyeni bir sahne oluşturun. Unity varsayılan olarak Main Camera ve Directional Light oluşturur.

Main Camera Ayarlama

Hierarchy penceresinde Main Camera nesnesini seçin ve özelliklerini Inspector penceresinde aşağıda gösterildiği gibi ayarlayın.

Main Camera özelliklerini ayarlama

Main Camera özelliklerini ayarlama

LCCManager Oluşturma

Hierarchy penceresinde boş bir alana sağ tıklayın, açılan menüden Create Empty seçeneğini seçerek boş bir GameObject oluşturun, adını LCCManager yapın, Transform değerini normalleştirin ve Add Component ile bu nesneye LCCManager betiğini ekleyin.

LCCManager GameObject'ini oluşturun ve LCCManager betiğini ekleyin

LCCManager GameObject'ini oluşturun ve LCCManager betiğini ekleyin

LCCRenderer Oluşturma

Hierarchy penceresinde boş bir alana sağ tıklayın, Create Empty seçeneğini seçerek boş bir GameObject oluşturun, adını LCCRenderer yapın ve Transform değerlerini Rotation.x = -90 ve Scale.x = -1 olarak ayarlayın.

LCCRenderer Oluşturma ve Transform Ayarlama

LCCRenderer oluşturma ve Transform ayarı (Rotation.x = -90, Scale.x = -1)

Not:

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

Projektör Oluşturma

Hierarchy penceresinde boş bir alana sağ tıklayın ve Create Empty seçeneğini seçerek Projector adlı boş bir GameObject oluşturun. Bu boş nesne, Transform bileşeniyle projektörün konumunu ve yönünü kontrol etmek için oluşturulur. Nesneyi betik koduyla ilişkilendirdikten sonra projektör özelliklerini çalışma zamanında ayarlayabilirsiniz. Projektör, +Z yönü boyunca projeksiyon yapar ve özellikleri ihtiyaca göre ayarlanabilir.

Projektör olarak kullanılacak boş Projector GameObject'i oluşturun

Projektör olarak Projector boş GameObject'ini oluşturun (+Z projeksiyon yönüdür)

2. Adım: Render Feature Ekleme

  1. Unity menü çubuğunda File → Project Settings seçeneğini seçin, soldan Graphics sekmesini açın ve geçerli Default Render Pipeline Asset değerini doğrulayın. Bu örnekte URP (Universal Render Pipeline Asset) kullanılmaktadır.
Graphics ayarlarında Default Render Pipeline Asset değerini doğrulayın

Graphics ayarlarında Default Render Pipeline Asset değerini doğrulayın

  1. Bu Asset'e tıklayın, Project penceresinde ilgili asset dosyasını bulun ve ona bağlı Renderer öğesini belirleyin (bu örnekte URP_Renderer.asset).
  2. İlgili Renderer varlık dosyasını seçin, Inspector penceresinde Add Renderer Feature öğesine tıklayın ve Decal Depth Feature öğesini ekleyin.
URP Renderer'a Decal Depth Feature ekleme

URP Renderer'a Decal Depth Feature ekleme

Not:

Decal Depth Feature, örtme ayıklaması için ön koşuldur. Yalnızca temel projeksiyonu (X-ray decal) kullanıyorsanız bu özelliği eklemeniz gerekmez. Ancak örtme ayıklamasını etkinleştirmek için önce bu Feature'ı URP Renderer Asset içine kaydetmelisiniz. Aksi takdirde örtme derinlik haritası oluşturulmaz ve örtme etkili olmaz.

Adım 3: Betiği Yazma

Decal.cs adlı yeni bir C# betiği oluşturun. Aşağıdaki tam kod, entegratör bakış açısını simüle eder ve decal ile ilgili 7 yöntemin tamamını kapsar (temel projeksiyon için 5, örtme ayıklaması için 2). Kod doğrudan projenize kopyalanabilir.

using LCCCore;
using UnityEngine;

/// <summary>
/// Decal projection — minimal developer usage example.
///
/// This script simulates an "integrator script": it only calls LCCManager public APIs and does not touch SDK internals.
/// Covers all 7 decal APIs:
///   Base projection (5): SetDecalEnabled / SetDecalTexture / SetDecalProjection / SetDecalOpacity / SetDecalEdgeFade
///   Occlusion culling (2): SetDecalOcclusion / SetDecalOcclusionSettings
///
/// Usage steps:
///   1) Create an empty GameObject and attach this script;
///   2) In the Inspector, drag the LCCManager in the scene to m_manager;
///   3) Set m_filePath to a valid LCC scene path;
///   4) Drag the image to project into m_decalTexture (recommend enabling Read/Write in its import settings);
///   5) Drag an empty object into m_projector as the projector (leave empty to use this object); its +Z axis is the projection direction;
///   6) Play. After the scene finishes loading, the decal turns on automatically; drag the projector to see the decal on the point cloud in real time.
///
/// Platform note: decal and occlusion culling only take effect on PC/Mac (URP). Calls on mobile/VR are ignored by the SDK and logged as warnings.
/// </summary>
public class Decal : MonoBehaviour
{
    [Header("Required")]
    [Tooltip("The LCCManager instance in the scene")]
    public LCCManager m_manager;
    [Tooltip("A valid LCC scene path")]
    public string m_filePath;
    [Tooltip("The decal image to project. RGB=color, A=decal's own mask")]
    public Texture2D m_decalTexture;

    [Header("Projector (projects along +Z)")]
    [Tooltip("Projector pose. Leave empty to use this object's transform")]
    public Transform m_projector;
    [Range(1f, 179f)] public float m_fov = 60f;
    [Tooltip("Projection aspect ratio; <=0 uses the decal image's aspect ratio automatically")]
    public float m_aspect = 0f;
    public float m_near = 0.1f;
    public float m_far = 100f;

    [Header("Decal Appearance")]
    [Range(0f, 1f)] public float m_opacity = 1.0f;
    [Range(0f, 0.5f)][Tooltip("Edge fade width (UV ratio). 0 = hard edge")]
    public float m_edgeFade = 0.1f;
    [Tooltip("Refresh projection every frame, so you can drag the projector / tweak parameters at runtime")]
    public bool m_updateEveryFrame = true;

    [Header("Occlusion Culling (PC/Mac only)")]
    [Tooltip("When on, back-facing/occluded points behind front geometry are no longer colored by the decal (slide-projector effect); when off it is X-ray")]
    public bool m_occlusion = false;
    [Range(0f, 1f)][Tooltip("Opacity threshold: only splats with opacity >= this value contribute to the depth map, filtering out floaters/foggy points. 0 = all participate")]
    public float m_occlusionCutoff = 0f;
    [Range(0f, 0.5f)][Tooltip("Relative depth tolerance. Too small -> near-surface self-occlusion; too large -> leaked X-ray coloring. Default 0.05")]
    public float m_occlusionBias = 0.05f;
    [Range(0, 16)][Tooltip("Square footprint radius cap (px), the main knob for removing X-ray bleed-through. 0 = single texel, default 2")]
    public int m_occlusionFootprint = 2;
    [Tooltip("Depth map resolution (px, power of two 256~4096). Lower it to fill grazing-angle holes. Default 1024")]
    public int m_occlusionResolution = 1024;

    // -- Runtime state --
    private bool m_loaded;
    private bool m_lastOcclusion;
    private float m_lastCutoff = float.NaN;
    private float m_lastBias = float.NaN;
    private int m_lastFootprint = -1;
    private int m_lastResolution = -1;

    void Start()
    {
        if (m_manager == null || string.IsNullOrEmpty(m_filePath))
        {
            Debug.LogError("[DecalDemo] m_manager or m_filePath is not assigned.");
            enabled = false;
            return;
        }

        // 1) Initialize the render pipeline to PC single-scene editor mode
        m_manager.SetPlatformType(PlatformType.PC);
        m_manager.SwitchRenderPass(ActiveRenderMode.SingleRender);
        m_manager.SetEditorMode(true);

        // 2) Load the point cloud scene, then enable the decal after completion (decal is a global state; setting it after the scene is ready is safest)
        var renderer = m_manager.GetRender(this.transform);
        Debug.Log($"[DecalDemo] Start loading: {m_filePath}");
        renderer.Load(m_filePath,
            _ => { /* progress callback, unused in the example */ },
            OnSceneLoaded);
    }

    private void OnSceneLoaded()
    {
        Debug.Log("[DecalDemo] Load complete, enabling decal projection.");

        // -- Base projection: 5 APIs --
        m_manager.SetDecalTexture(m_decalTexture);   // decal content
        m_manager.SetDecalOpacity(m_opacity);        // overall opacity
        m_manager.SetDecalEdgeFade(m_edgeFade);      // edge fade
        ApplyProjection();                           // projector pose (internally calls SetDecalProjection)
        m_manager.SetDecalEnabled(true);             // enable decal (_DECAL keyword)

        // -- Occlusion culling: 2 APIs -- must be after ApplyProjection (the depth map needs a valid projector VP)
        m_manager.SetDecalOcclusionSettings(BuildOcclusionSettings());
        m_manager.SetDecalOcclusion(m_occlusion);
        CacheOcclusionState();

        m_loaded = true;
    }

    /// <summary>
    /// For demonstration only. In real projects, for better performance you do not need to call
    /// SetDecalProjection / SetDecalOpacity / SetDecalEdgeFade every frame in Update();
    /// only call the corresponding API when the parameter changes.
    /// </summary>
    void Update()
    {
        if (!m_loaded) return;

        // toggle occlusion at runtime
        if (m_occlusion != m_lastOcclusion)
        {
            m_manager.SetDecalOcclusion(m_occlusion);
            m_lastOcclusion = m_occlusion;
        }

        // any occlusion quality parameter changed -> push the struct once
        if (!Mathf.Approximately(m_occlusionCutoff, m_lastCutoff) ||
            !Mathf.Approximately(m_occlusionBias, m_lastBias) ||
            m_occlusionFootprint != m_lastFootprint ||
            m_occlusionResolution != m_lastResolution)
        {
            m_manager.SetDecalOcclusionSettings(BuildOcclusionSettings());
            CacheOcclusionState();
        }

        // refresh projector / appearance every frame for convenient real-time debugging
        if (!m_updateEveryFrame) return;
        m_manager.SetDecalOpacity(m_opacity);
        m_manager.SetDecalEdgeFade(m_edgeFade);
        ApplyProjection();
    }

    /// <summary>Build the projection matrix from the current projector pose and perspective parameters.</summary>
    private void ApplyProjection()
    {
        Transform p = m_projector != null ? m_projector : this.transform;
        float aspect = m_aspect > 0f
            ? m_aspect
            : (m_decalTexture != null ? (float)m_decalTexture.width / m_decalTexture.height : 1f);
        m_manager.SetDecalProjection(p.position, p.rotation, m_fov, aspect, m_near, m_far);
    }

    /// <summary>Collect the 4 occlusion parameters into a struct.</summary>
    private DecalOcclusionSettings BuildOcclusionSettings()
    {
        return new DecalOcclusionSettings
        {
            opacityCutoff  = m_occlusionCutoff,
            depthBias      = m_occlusionBias,
            footprintMaxPx = m_occlusionFootprint,
            resolution     = m_occlusionResolution,
        };
    }

    private void CacheOcclusionState()
    {
        m_lastOcclusion  = m_occlusion;
        m_lastCutoff     = m_occlusionCutoff;
        m_lastBias       = m_occlusionBias;
        m_lastFootprint  = m_occlusionFootprint;
        m_lastResolution = m_occlusionResolution;
    }

    // -- Convenient debug entry points (Inspector right-click) --
    [ContextMenu("Decal On")]  private void DecalOn()  { m_manager?.SetDecalEnabled(true); }
    [ContextMenu("Decal Off")] private void DecalOff() { m_manager?.SetDecalEnabled(false); }
    [ContextMenu("Occlusion On")]  private void OcclusionOn()  { m_occlusion = true;  m_manager?.SetDecalOcclusion(true);  m_lastOcclusion = true; }
    [ContextMenu("Occlusion Off")] private void OcclusionOff() { m_occlusion = false; m_manager?.SetDecalOcclusion(false); m_lastOcclusion = false; }
}

Not:

Decal, genel bir gölgeleme durumudur ve LCC sahnesinin yüklenmesi tamamlandıktan sonra (yani onComplete geri çağrısında) ayarlanmalıdır.

Örnekte SetDecalTexture / SetDecalProjection / SetDecalEnabled çağrıları, nokta bulutu hazır olmadan ayarlanmasın diye Load tamamlanma geri çağrısına (OnSceneLoaded) yerleştirilmiştir.

Örtme ayıklamasıyla ilgili SetDecalOcclusionSettings / SetDecalOcclusion çağrıları, ApplyProjection (yani SetDecalProjection) çağrısından sonra yapılmalıdır. Çünkü örtme derinlik haritası için geçerli bir projektör görünüm-projeksiyon matrisi gerekir.

Adım 4: Betiği Ekleme ve Özellikleri Yapılandırma

  1. Decal.cs betiğini Hierarchy penceresindeki LCCRenderer GameObject'ine ekleyin.
  2. Inspector penceresinde LCCManager GameObject'ini betiğin Manager özelliğine sürükleyin.
  3. Projector GameObject'ini betiğin Projector özelliğine sürükleyin.
  4. Betiğin File Path özelliğine LCC dosya yolunu girin ve decal doku görüntüsünü Decal Texture özelliğine sürükleyin.
  5. Diğer özellik parametreleri ihtiyaca göre ayarlanabilir. Her özelliğin anlamı aşağıdaki tabloda gösterilmiştir.
Decal betiğinin Inspector özellik ayarları

Decal betiğinin Inspector özellik ayarları

AlanAnlamıVarsayılan değer
ManagerSahnedeki LCCManager örneğiGerekli
File PathGeçerli bir LCC sahne yoluGerekli
Decal TextureProjeksiyonu yapılacak decal görüntüsü; RGB renktir, A ise decal'in kendi maskesidirGerekli
ProjectorProjektör konumu ve yönü; +Z projeksiyon yönüdür. Boş bırakılırsa bu nesnenin Transform bileşeni kullanılırBoş
FovProjektörün perspektif görüş alanı60
AspectProjeksiyon en-boy oranı. 0 veya daha küçükse decal görüntüsünün en-boy oranından otomatik hesaplanır0 (otomatik)
Near / FarProjektör frustum'unun yakın / uzak kırpma düzlemleri0.1 / 100
OpaklıkDecal'in genel opaklığı1
Edge FadeKenar solma genişliği (UV oranı); 0 sert kenar demektir0.1
Update Every FrameProjeksiyonu her karede yeniler; projektörü sürüklemek veya parametreleri çalışma zamanında değiştirmek için kolaylık sağlarİşaretli
OcclusionÖrtme ayıklamasının etkinleştirilip etkinleştirilmeyeceğiKapalı
Occlusion CutoffOpaklık eşiği; yalnızca opaklığı bu değerden düşük olmayan splat'ler derinlik haritasına katkıda bulunur0
Occlusion BiasGöreli derinlik toleransı0.05
Occlusion FootprintKare ayak izi yarıçap sınırı (px); X-ray sızıntısını gidermek için ana ayardır2
Occlusion ResolutionÖrtme derinlik haritası çözünürlüğü (px, ikinin kuvveti, 256~4096)1024

Adım 5: Çalıştırma ve Sonucu Gözlemleme

Unity'de Play düğmesine tıklayın. Sahne yüklendikten sonra decal otomatik olarak açılır. Update Every Frame işaretliyken çalışma zamanında Scene görünümünde projektör nesnesini doğrudan sürükleyebilir ve decal'in 3DGS yüzeyinde gerçek zamanlı olarak hareket ettiğini görebilirsiniz. Opacity ve Edge Fade gibi parametrelerde yapılan değişiklikler de anında etkili olur. Betik bileşeninin sağ tık menüsü ayrıca dört kısayol sunar: Decal On/Off ve Occlusion On/Off. Bunlarla açma/kapama etkisini ayrı ayrı kolayca doğrulayabilirsiniz.

Çalıştırıldıktan sonra 3DGS yüzeyine yansıtılan decal (temel projeksiyon)

Çalıştırma sonrasında 3DGS yüzeyine yansıtılan decal (temel projeksiyon, X-ray geçirgenliği)

Oklüzyon kırpma etkinleştirildikten sonra yalnızca projektöre bakan ön yüzey renklendirilir

Örtme ayıklaması etkinleştirildikten sonra yalnızca projektöre bakan ön yüzey renklendirilir (slayt projektörü etkisi)

Sık Sorulan Sorular: Uyumluluk Modunu Devre Dışı Bırakma

Unity Console penceresi hata bildiriyorsa ve decal etkisi görünmüyorsa uyumluluk modunu devre dışı bırakın: Edit → Project Settings → Graphics yolundan ayar panelini açın, URP sekmesini seçin ve Render Graph → Compatibility Mode (Render Graph Disabled) öğesinin yanındaki onay kutusunu işaretlemeyin.

Render Graph uyumluluk modunu işaretlemeyin

Render Graph uyumluluk modunu işaretlemeyin (Render Graph Disabled)

Örtme Ayıklaması ve Ayarlama

Örtme ayıklaması, projektör kurulduktan sonra etkinleştirilmelidir. Örnekte, sahne yükleme tamamlandığında çağrılan geri çağrıda önce SetDecalProjection, ardından SetDecalOcclusionSettings ve SetDecalOcclusion çağrılır. Bu sayede örtme derinlik haritası geçerli bir projektör görünüm-projeksiyon matrisi alır. Çalışma zamanında Inspector'daki Occlusion onay kutusunu açtığınızda, içinden geçen blokların ayıklandığını ve yalnızca projektöre bakan ön yüzeyin korunduğunu görürsünüz.

Ön koşul:

Örtme ayıklamasını etkinleştirmeden önce Decal Depth Feature, URP Renderer Asset içine kaydedilmiş olmalıdır (bu projede URP_Renderer.asset içine alt varlık olarak yazılmıştır). Kaydedilmezse örtme derinlik haritası oluşturulmaz ve örtme etkili olmaz.

Örtme kalitesi dört parametreyle kontrol edilir ve parametreler bir struct aracılığıyla tek seferde iletilir. Dördü birbirinden bağımsızdır. Aşağıdaki tabloya göre ayarlayın:

ParametreEtkiVarsayılanAyarlama önerisi
opacityCutoffHavada asılı / sisli splat'leri filtreler; böylece örtme yüzeyini öne çekmezler0Ön planda bloklu gürültü görülürse orta düzeyde artırın. Çok büyük değer renklendirilmeyen alanlara yol açar
depthBiasNokta bulutu yüzey kalınlığını mesafeye göre sönümleyen göreli derinlik toleransı0.05Yakın yüzeyde kendi kendine örtme gürültüsü görülürse artırın. İnce örtücüler sızıntı yapıyorsa azaltın
footprintMaxPxÖn yüzeyin yakın derinliği, seyrek boşlukları dünya ölçeğinde doldurur; X-ray sızıntısını gidermek için ana ayardır2İçinden geçen bloklar kalıyorsa artırın. Konturlar aşırı örtülüyorsa azaltın; 0 tek bir texel demektir
resolutionÖrtme derinlik haritası çözünürlüğü1024Sıyırma açılı yüzeylerde renklendirilmeyen büyük küçük blok kümeleri görülürse düşürün (ör. 512 / 256). Bunun bedeli, örtme sınırlarının biraz daha pürüzlü olmasıdır

Temel Adımlar

Projeksiyon decal'ini uygulamanın temel adımları:

  1. Sahnede projektör olarak kullanılacak Projector boş nesnesini oluşturun. Projeksiyon yönü +Z eksenidir.
  2. Örtme ayıklaması gerekiyorsa Decal Depth Feature öğesinin URP Renderer'a eklendiğinden emin olun.
  3. LCC sahnesinin yüklenmesi tamamlandıktan sonra decal dokusunu, görünümünü ve projektör konumunu sırayla ayarlayın, ardından decal'i etkinleştirin (SetDecalEnabled(true)).
  4. Oklüzyon kırpma metotları SetDecalOcclusionSettings / SetDecalOcclusion, SetDecalProjection çağrısından sonra çağrılmalıdır.

Aşağıdaki metotların tümü LCCManager facade sınıfında bulunur ve yalnızca PC / Mac'te (URP işlem hattı) etkilidir; mobil / VR üzerindeki çağrılar yok sayılır ve bir uyarı yazdırılır.

SetDecalEnabled

// Return value: void
public void SetDecalEnabled(bool enable)

Decal projeksiyonunu açar veya kapatır. Etkinleştirildiğinde, önbellekteki opaklık / kenar solma parametreleri GPU'ya gönderilir ve _DECAL shader anahtar sözcüğü etkinleştirilir. Decal, dünyaya sabit global bir durumdur ve tüm kameralar için aynıdır. İçeriği ve projektör konumunu ayarlamak için ayrıca SetDecalTexture ve SetDecalProjection metotlarını çağırmanız gerekir.

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

Kullanım örneği:

m_manager.SetDecalEnabled(true);
m_manager.SetDecalTexture(decalTex);
m_manager.SetDecalProjection(projectorPos, projectorRot, 60f, 1.778f, 0.1f, 20f);

Notlar:

  • Devre dışı bırakıldığında yalnızca _DECAL anahtar sözcüğü kapatılır; önbellekteki doku / parametreler temizlenmez.

SetDecalTexture

// Return value: void
public void SetDecalTexture(Texture2D tex)

Decal dokusunu ayarlar. RGB rengi, A ise decal'in kendi maskesini temsil eder; bu maske global opaklık ve kenar solma ile çarpılır.

ParametreTürAçıklama
texTexture2DDecal dokusu

Kullanım örneği:

m_manager.SetDecalTexture(logoTex);

Notlar:

  • null geçirmek, global doku referansını temizler.

SetDecalProjection

// Return value: void
public void SetDecalProjection(Vector3 pos, Quaternion rot, float fov, float aspect, float near, float far)

Decal projektörünün konumunu ve perspektif parametrelerini ayarlar. Projektör, ileri (+Z) yönü boyunca projeksiyon yapar ve görüş piramidinin içinde kalan noktalar decal ile kaplanır.

ParametreTürAçıklama
posVector3Projektörün dünya konumu
rotQuaternionProjektör yönelimi
fovfloatDikey görüş açısı (derece), [1, 179] aralığına sınırlandırılır
aspectfloatEn-boy oranı, en az 1e-4
nearfloatYakın kırpma düzlemi, en az 1e-3
farfloatUzak kırpma düzlemi, en az near + 1e-3

Kullanım örneği:

m_manager.SetDecalProjection(new Vector3(0, 10, 0), Quaternion.Euler(90, 0, 0), 60f, 1.778f, 0.1f, 20f);

Notlar:

  • SetDecalOcclusion(true) zaten etkinse, bu metot yeni VP / view değerlerini eşzamanlı olarak Decal Depth Feature bileşenine iletir.

SetDecalOpacity

// Return value: void
public void SetDecalOpacity(float opacity)

Decal'in genel opaklığını ayarlar, değeri hemen GPU'ya gönderir ve SetDecalEnabled(true) bir sonraki çağrıldığında yeniden kullanılmak üzere önbelleğe alır.

ParametreTürAçıklama
opacityfloatDecal genel opaklığı, aralık: [0, 1]

Kullanım örneği:

m_manager.SetDecalOpacity(0.8f);

Notlar:

  • Aralık [0, 1]; aralık dışındaki değerler otomatik olarak sınırlandırılır.

SetDecalEdgeFade

// Return value: void
public void SetDecalEdgeFade(float edgeFade)

Decal kenar solma genişliğini ayarlar. 0 sert kenardır; değer büyüdükçe kenar geçişi yumuşar.

ParametreTürAçıklama
edgeFadefloatKenar solma genişliği, UV uzayında bir oran, aralık: [0, 0.5)

Kullanım örneği:

m_manager.SetDecalEdgeFade(0.1f);

Notlar:

  • Aralık: [0, 0.5); aralık dışındaki değerler otomatik olarak sınırlandırılır.

SetDecalOcclusion

// Return value: void
public void SetDecalOcclusion(bool enable)

Projektör derinlik haritasına dayalı decal oklüzyon kırpmasını açar veya kapatır. Bu özellik, gölge özelliğinden bağımsızdır ve ayrı olarak açılıp kapatılır. Etkinleştirmeden önce projektörü ayarlamak için SetDecalProjection çağrılmış olmalıdır; aksi halde derinlik haritasında geçerli bir VP bulunmaz.

ParametreTürAçıklama
enableboolDecal örtülme ayıklamasının etkinleştirilip etkinleştirilmeyeceği

Kullanım örneği:

m_manager.SetDecalOcclusion(true);

Notlar:

  • Yalnızca URP'de desteklenir (Built-in işlem hattındaki çağrılar işlem yapmaz ve bir günlük kaydı yazdırır).
  • Decal Depth Feature bileşeninin URP Renderer Asset içine kaydedilmiş olması gerekir.
  • SetDecalOcclusionSettings ile yapılandırılan kalite parametrelerine bağlıdır.

SetDecalOcclusionSettings

// Return value: void
public void SetDecalOcclusionSettings(DecalOcclusionSettings settings)

Tüm decal oklüzyon kırpma kalite parametrelerini tek seferde ayarlar (dört öğenin anlamları için aşağıdaki yapıya ve "Oklüzyon Kırpma ve Ayarlama" tablosuna bakın).

ParametreTürAçıklama
settingsDecalOcclusionSettingsÖrtülme ayıklama kalite parametreleri

Kullanım örneği:

m_manager.SetDecalOcclusionSettings(DecalOcclusionSettings.Default);
m_manager.SetDecalOcclusionSettings(new DecalOcclusionSettings {
    opacityCutoff = 0.1f,
    depthBias = 0.05f,
    footprintMaxPx = 2,
    resolution = 1024
});

Notlar:

  • İstenilen zamanda ayarlanabilir; parametreler hemen GPU'ya ve Decal Depth Feature bileşenine gönderilir.
  • resolution değerinin değiştirilmesi, derinlik haritası RT'sinin yeniden oluşturulmasını tetikler.

DecalOcclusionSettings

public struct DecalOcclusionSettings {
    public float opacityCutoff;   // [0,1] minimum opacity for a splat to participate in the depth map, default 0 (all participate)
    public float depthBias;       // relative depth tolerance ratio, default 0.05
    public int   footprintMaxPx;  // square footprint radius cap (px), 0~16, default 2
    public int   resolution;      // depth map resolution (px, power of two, 256~4096), default 1024

    public static DecalOcclusionSettings Default { get; } // cutoff=0, bias=0.05, footprint=2, resolution=1024
}

SetDecalOcclusionSettings() tarafından kullanılır; varsayılan değere DecalOcclusionSettings.Default üzerinden ulaşılabilir.

AlanAnlamıVarsayılan
opacityCutofffloat, [0,1], opaklık eşiği; derinlik haritasına yalnızca opaklığı bu değerden düşük olmayan splat'ler katılır0
depthBiasfloat, göreli derinlik toleransı0.05
footprintMaxPxint, 0~16, kare ayak izi yarıçapı üst sınırı (px)2
resolutionint, ikinin kuvveti 256~4096, örtme derinlik haritası çözünürlüğü1024

Notlar

  • Yalnızca PC / Mac'te etkilidir. Mobil ve VR platformlarında decal ile ilgili arayüzlere yapılan çağrılar yok sayılır ve bir uyarı yazdırılır. Uygulama tarafında platform denetimi yapmanız gerekmez; ancak bu platformlarda etkiyi görmeyi beklemeyin.
  • Decal'i sahne yüklemesi tamamlandıktan sonra ayarlamanız önerilir. Decal, global bir gölgelendirme durumudur; örnekte SetDecalTexture / SetDecalProjection / SetDecalEnabled çağrıları, nokta bulutu hazır olmadan ayarlanmasın diye Load tamamlanma geri çağrısına yerleştirilmiştir.
  • Oklüzyon kırpma iki ön koşula bağlıdır. Birincisi, URP Renderer Asset içine Decal Depth Feature kaydedilmiş olmalıdır; ikincisi, projektörü ayarlamak için SetDecalProjection çağrılmış olmalıdır. İkisinden biri eksikse oklüzyon çalışmaz.
  • Statik projeksiyonun ek maliyeti neredeyse sıfırdır. Oklüzyon derinlik haritası yalnızca projektör konumu veya nokta bulutu değiştiğinde yeniden hesaplanır; projektör sabitken kare başına ek hesaplama yapılmaz.

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