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

LCC for UE Kullanım Kılavuzu

3DGS Sahnesinde Yürüme: Çarpışma Desteği

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

LCC4Unreal dinamik çarpışma verisi yüklemeyi destekler. Böylece karakterler 3DGS dünyasında serbestçe hareket edebilir ve etkileşime girebilir.

Ön Koşullar

Çarpışma, veriyle birlikte gelen çarpışma dosyasına dayanır. Gereksinimler biçime göre değişir:

FormatÇarpışma verisiDestek
.lccVeri dizininde collision.lci, eski sürümlerde collision.binDesteklenir
.lcc2Veri dizinindeki data/mesh/ klasöründe bulunan .ply dosyalarıDesteklenir
.sog / .spz / .plyYerel olarak yok; Pro sürüm bunu Gaussian'lardan türetebilirDesteklenir (Pro sürüm)

.lcc ve .lcc2 için eklenti, veriyle birlikte gelen çarpışma dosyasını collision.lci → collision.bin → data/mesh/*.ply sırasıyla kontrol eder. Hiçbiri yoksa uyarı yazdırır ve çarpışmayı devre dışı bırakır.

Tek dosyalı biçimler (.sog / .spz / .ply) kendi çarpışma verisini içermez. Pro sürüm, Gaussian'lardan otomatik olarak çarpışma mesh'i türetebilir; bkz. Tek Dosyalı Modeller için Otomatik Çarpışma Üretimi. Ücretsiz sürümde çarpışmayı kendiniz oluşturmanız gerekir.

Veriyi yükledikten sonra, mevcut veride kullanılabilir çarpışma verisi olup olmadığını doğrulamak için HaveValidCollisionData() işlevini kullanın.

Not: collision.lci dosyası LCC Studio v1.6.1 veya üstünden dışa aktarım gerektirir. Önceki sürümlerle dışa aktarılan veriler collision.bin kullanır.

Yükleme Mekanizması

Çarpışma verisi, görüntüleme verisi gibi uzamsal parçalar halinde saklanır. Eklenti tüm çarpışmayı tek seferde yüklemez. Yalnızca kameranın çevresindeki belirli bir aralıkta bulunan parçaları yükler ve kamera hareket ettikçe bunları dinamik olarak değiştirir.

Camera position changes
      │
      ▼
Compute the set of collision chunks that should be loaded in range
      │
      ▼
Compare with the previous set ── same ──▶ skip, do nothing
      │ different
      ▼
Load the new chunks → hand them to the physics system for baking → generate collision bodies

Birkaç uygulama noktası:

  • Yükleme aralığı Max Load Collision Distance(m) ile belirlenir. Bu mesafenin ötesindeki alanlarda çarpışma yoktur
  • İlk yükleme eşzamanlıdır. Bu, çarpışma hazır olmadan karakterin zemine düşmesini önler. Sonraki tüm güncellemeler eşzamansızdır ve ana iş parçacığını engellemez
  • Güncellemeler sınırlandırılır. Kamera sürekli hareket ederken çarpışma her karede yeniden oluşturulmaz
  • Görünür parça kümesi değişmediğinde güncellemeler atlanır. Yerinde yapılan küçük hareketler yeniden oluşturmayı tetiklemez
  • Hesaplama için yalnızca ana kamera kullanılır. SceneCapture çarpışma yüklemesine katılmaz

Avantajlar

  • Bellek kullanımı toplam veri boyutuna değil, yalnızca yükleme aralığına bağlıdır. Bu nedenle çarpışma büyük sahnelerde de çalışır
  • Fizik sisteminin işlemesi gereken çarpışma gövdesi sayısı kontrol altında kalır ve sahne büyüdükçe fiziği yavaşlatmaz

Maliyetler ve Çözümler

SorunNedenÇözüm
Karakter oyun başlar başlamaz zemine düşüyorÇarpışma henüz oluşturulmadıPlayerStart noktasını biraz yükseltin veya karakter hareketini yalnızca çarpışma hazır olduktan sonra etkinleştirin
Karakter uzaktan 3DGS sahne aralığına girerken takılma oluyorKarakter, çarpışma yükleme aralığının dışında doğdu. Girişte ilk eşzamanlı yükleme tetiklenirDoğma noktasını çarpışma yükleme aralığı içine yerleştirin veya tüm çarpışmayı tek seferde yükleyin
Uzakta çarpışma olmadığından line trace işlemleri isabet etmiyorYükleme aralığının ötesindeki alanlarda çarpışma gövdesi yokturMax Load Collision Distance(m) değerini artırın veya çarpışmaya dayanmayan bir kontrol yöntemine geçin
Işınlanma veya hızlı hareketten sonra kısa süre çarpışma yokYeni alanın çarpışma parçaları hâlâ yükleniyorTüm çarpışmayı tek seferde yükleyin
Hareket sırasında takılma oluyor ve Update Collision maliyeti yüksekÇarpışma parçaları sık sık değiştiriliyor ve yeniden pişiriliyorYükleme aralığını azaltın veya çarpışmanın gerçekten gerekli olduğunu doğrulayın
Navigasyonla birlikte kullanıldığında navigasyon mesh'i sürekli yeniden oluşuyorÇarpışma değişiklikleri NavMesh güncellemelerini tetiklerHedef alanın tek seferde yüklenmesi için yükleme aralığını artırın ve Static pişirme kullanın; bkz. Navigasyon Sistemi Desteği

Tüm Çarpışmayı Tek Seferde Yükleme

Yukarıdaki maliyetlerin çoğu, çalışma zamanında parçaların değiştirilmesinden kaynaklanır. Sahne boyutu sınırlıysa ve bellek yeterliyse, Max Load Collision Distance(m) değerini tüm sahneyi kapsayacak kadar yükseltin. Böylece veri yüklenirken tüm çarpışma tek seferde oluşturulur.

Bu durumda çarpışma parçalarının çalışma zamanında değiştirilmesi ortadan kalkar ve önceki sorunların hiçbiri yaşanmaz: zemine düşme, ışınlanmadan sonra çarpışmanın olmaması, hareket sırasında takılma ve navigasyonun tekrar tekrar yeniden oluşturulması. Navigasyon sistemini kullanırken bu yöntem özellikle önerilir.

Bedeli, başlangıçta daha uzun yükleme süresi ve tüm sahnenin çarpışmasına eşit sabit bir bellek kullanımıdır. Uygulanabilir olup olmadığını değerlendirmek için stat xgrids içindeki Collision Data Usage değerini kontrol edin ve tam yüklemeden sonraki bellek kullanımının kabul edilebilir olduğunu doğrulayın.

Etkinleştirme

LCCComponent->SetLCCCollisionEnable(true);

Ya da Ayrıntılar panelinde bEnableCollision seçeneğini işaretleyin.

LCC Çarpışmasını Ayrıntılar Panelinde Etkinleştirme

LCC Çarpışmasını Ayrıntılar Panelinde Etkinleştirme

Bir LCC Sahnesinde Karakterin Dinamik Çarpışması

Doğrulama

Çarpışmanın etkin olup olmadığını gözlemlemek için görünüm modu ayarlarını kullanın ve oyuncu çarpışmasını veya görünürlük çarpışmasını seçin.

Çarpışma gövdelerini görünüm modunda gösterme

Çarpışma Gövdelerini Oyuncu Çarpışması veya Görünürlük Çarpışması Moduyla Doğrulama

ÖzellikAçıklama
bEnableCollisionÇarpışmayı etkinleştirir
CollisionLoadMaxDistanceÇarpışma verisinin maksimum yükleme mesafesi (varsayılan olarak 300 metre)
Çarpışma etkinleştirme ve maksimum yükleme mesafesi özellikleri

Çarpışma Etkinleştirme Durumunu ve Maksimum Yükleme Mesafesini Yapılandırma

Tek Dosyalı Modeller için Otomatik Çarpışma Üretimi

Bir Pro sürüm özelliğidir. Tek dosyalı modeller (.ply / .spz / .sog) kendi çarpışma verisini içermez. Eklenti, çarpışma mesh'ini Gaussian'ların kendisinden türetir, modelin yanına <name>.collision.ply olarak önbelleğe alır, ardından mevcut PLY çarpışma yolu üzerinden yükleyip yeniden kullanır.

Bu bir Pro sürüm özelliğidir ve yalnızca bir App Key kaydedildikten sonra üretim yapar; bkz. Sürümler ve Lisanslama. Lisans yoksa çarpışma mesh'i üretilmez ve çarpışmayı Otomatik Üretim Olmadan Manuel Yöntem bölümünde açıklandığı gibi kendiniz oluşturmanız gerekir.

Adımlar

  1. LCC Actor panelinde bEnableCollision seçeneğini işaretleyin.
  2. Tek dosyalı bir model yükleyin (.ply / .spz / .sog).
  3. İlk yükleme Generating durumuna girer ve çarpışma mesh'i anında oluşturulur. Bu işlem veri boyutuna bağlı olarak birkaç saniye ile birkaç dakika arasında sürer. İşlem bitince durum Loaded olur ve <name>.collision.ply dosyası modelin yanına yazılır.
  4. Aynı model sonraki yüklemede önbellek dosyası varsa doğrudan Loaded durumuna geçer ve oluşturma adımı atlanır.
Tek dosyalı modelin ilk yüklemede çarpışma mesh'i oluşturması

Çarpışma etkinken tek dosyalı bir model ilk kez yüklendiğinde, çarpışma mesh'i oluşturulurken sağ alt köşede bir bildirim görünür

Oluşturma ve çarpışma durumu GetCollisionState() ile sorgulanabilir veya OnCollisionStateChanged olayı dinlenerek izlenebilir. Değerler için ULCCComponentBase - Durum Sorgusu bölümüne bakın.

İpucu: Çalışma anında oluşturmayı önlemek için oluşturulan <name>.collision.ply dosyasını modelle birlikte dağıtın veya paketleyin. Çalışma anında önbellek algılanır algılanmaz doğrudan yeniden kullanılır.

İpucu: Paketlenmiş bir oyunda çarpışma oluşturulurken yerleşik bir arayüz bildirimi yoktur. Oyuncuya "çarpışma oluşturuluyor" bilgisini vermek için OnCollisionStateChanged olayının Generating durumunu dinleyin ve bildirimi kendiniz gösterin.

İpucu: Başarısız bir oluşturma işlemi Failed durumuna geçer. Ayrıntılı neden Output Log içinde yer alır. Çarpışmayı kapatıp yeniden açmak işlemi tekrar dener. Oluşturma sürecini yeniden test etmek için önce modelin yanındaki .collision.ply önbellek dosyasını silin.

Otomatik Üretim Olmadan Manuel Yaklaşım

Çarpışma şeklini tamamen kontrol etmek veya verinin çıkarıma uygun olmadığı durumlarda otomatik üretimi kapalı tutabilir ve çarpışmayı sahnede kendiniz oluşturabilirsiniz:

  • Blocking Volume: Zemin, duvar ve engellemesi gereken diğer alanları oluşturmak için motorun engelleme hacimlerini kullanın. Düzenli şekillere uygundur ve en düşük maliyetli seçenektir
  • Yaklaşık mesh: 3DGS şekliyle eşleşen bir mesh yerleştirin ve çarpışmasını etkinleştirin. Karmaşık şekilli sahnelere uygundur. Bu mesh, çarpışma ön ayarı block olarak değiştirilerek proxy mesh yeniden kullanılabilir

Her iki manuel yaklaşım da LCC çarpışma yükleme mekanizmasını içermez. Bu nedenle CollisionLoadMaxDistance değerinden etkilenmez ve kamera hareket ettikçe devreye girip çıkmaz.

Çarpışma Bölgelerini Kırpma

Çarpışma, kırpma hacimleri ve kesit düzlemleri ile birlikte kırpılabilir. Böylece çarpışma aralığı görüntülenen sahneyle eşleşir. Kırpma hacmi varsayılan olarak yalnızca görüntülemeyi etkiler: kırpılan alan görüntüden kaybolur ancak çarpışma kalır ve karakter görünmez bir duvara çarpar. Clip Collision etkinleştirildiğinde kırpılan bölgedeki çarpışma da kaldırılır.

Adımlar

  1. LCC Actor üzerinde Sahne Düzenleme bölümünde anlatıldığı gibi bir kırpma hacmi veya kesit düzlemi ekleyip yapılandırın ve görüntülenen sahnenin beklendiği gibi kırpıldığını doğrulayın.
  2. LCC Actor panelinde Enable Collision (bEnableCollision) seçeneğini işaretleyin.
  3. Panelde Clip Collision seçeneğini işaretleyin. Çarpışma bu durumda kırpma hacmiyle kırpılır ve kırpılan alanda çarpışma gövdesi oluşturulmaz.

Aşağıdaki görüntülerde, Clip Collision etkinleştirilmeden önce ve sonra çarpışma tel kafesini karşılaştırmak için görünürlük çarpışma görünüm modu kullanılmıştır. Kapalıyken çarpışma tüm alanı kapsar:

Clip Collision kapalıyken çarpışma tel kafesi eksiksizdir

Clip Collision işaretli değil: çarpışma tel kafesi tüm alanı kapsıyor

Açıkken kırpma hacmi içindeki çarpışma da görüntüleme ile tutarlı biçimde kırpılır:

Clip Collision açıkken kırpılan bölgedeki çarpışma kaldırılır

Clip Collision işaretli: kırpılan bölgedeki çarpışma da kırpılıyor

İpucu: Clip Collision için önce çarpışmanın etkinleştirilmesi gerekir. Ayrıca tek dosyalı modeller için otomatik oluşturulan çarpışmaya da uygulanır.

Çarpışma Durumu Sorgusu ve Olaylar

Geçerli çarpışma durumunu sorgulayabilir veya çarpışma durumu değişikliklerini dinleyebilirsiniz. Bu, "karakteri yalnızca çarpışma hazır olduğunda oluştur" veya "oluşturma sırasında ilerlemeyi göster" gibi mantıklar için kullanışlıdır:

  • GetCollisionState() geçerli durumu döndürür: NoCollision (kapalı veya model yok) / Generating (tek dosyalı model çarpışma mesh'ini oluşturuyor) / Loading (kamera yakınındaki çarpışma yükleniyor/cooking işlemi yapılıyor) / Loaded (kamera yakınındaki çarpışma hazır) / Failed (sağlanamıyor).
  • Durum değiştiğinde OnCollisionStateChanged olayı gönderilir. Böylece karakter hareketini yalnızca Loaded durumundan sonra etkinleştirebilir veya Generating sırasında bir bildirim gösterebilirsiniz.

Tüm arayüz ve kullanım kuralları için bkz. ULCCComponentBase - Durum Sorgulama.

İpucu: Loaded, kamera yakınındaki çarpışmanın hazır olduğu anlamına gelir; tüm modelin çarpışmasının olduğu anlamına gelmez. Kamera hareket ettikçe çarpışma akışla yüklenmeye devam eder. "Ayak altındaki zeminden düşmeme" için Loaded durumunu beklemek yeterlidir. Uzaktaki çarpışma için yükleme mesafesini artırın.

Notlar

  • Çarpışma etkinleştirildikten sonra çarpışma gövdelerine yönelik ışın testlerinde Unreal Engine'in kendi LineTrace işlevi kullanılabilir. Test aralığı da yükleme aralığıyla sınırlıdır
  • Çarpışma verisinin kullandığı bellek stat xgrids çıktısındaki Collision Data Usage alanında, güncelleme maliyeti Update Collision alanında görüntülenebilir. Öğelerin anlamları için Performans Parametreleri bölümüne 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