Hata giderme

Harita leak hatasını düzeltme: Hammer'da derlerken "leaked" mesajı

Harita leak hatasını düzelt: VBSP'nin "leaked" mesajı ne demek, pointfile ile açıklığı nasıl bulursun ve haritayı saran dev bir skybox neden çözüm değil.

**** leaked **** mesajı, haritanın iç kısmının dışarıdaki boşluğa (void) karşı kapalı olmadığı anlamına gelir: bir entity'den dışarıya giden bir yol vardır. Hammer'da Map → Load Pointfile ile pointfile'ı yükle, kırmızı çizgiyi açıklığa kadar takip et ve açıklığı katı bir world brush ile kapat.

Harita geometrisinde leak nedir

VBSP'nin neyin içeride, neyin dışarıda olduğunu bilmesi gerekir. Bunu anlamak için araç, entity'lerden başlayarak haritayı kavramsal olarak havayla doldurur. Bu dolgunun ulaştığı her yer iç mekân sayılır. Geri kalanı boşluktur ve atılır. Dolgu boşluğa ulaşırsa artık net bir iç taraf kalmaz ve log'da şuna benzer bir şey görünür:

**** leaked ****
Entity info_player_start (128.00 -64.00 32.00) leaked!

Orada adı geçen entity, kendisi haritanın dışında durmuyorsa çoğu zaman sorunun nedeni değildir. Yalnızca VBSP'nin dışarı çıkan yolu bulduğu başlangıç noktasıdır.

Sonuçları bu tek satırın çok ötesine geçer. VBSP portal dosyası yazmaz, dolayısıyla VVIS görünürlüğü hesaplayamaz. Görünürlük verisi olmadan VRAD yalnızca doğrudan ışıkla çalışır. Harita çoğu zaman yine de açılır, ama kötü çalışır ve yanlış ışıklandırılır. Üç aracın birbirine nasıl bağlı olduğu VBSP, VVIS ve VRAD yazısında anlatılıyor.

Leak'i bulma: pointfile'ı yükle ve kırmızı çizgiyi takip et

  1. Haritayı derle. Leak varsa VBSP, VMF'nin yanına .lin uzantılı bir dosya oluşturur. Bu dosya pointfile'dır.
  2. Hammer'da Map → Load Pointfile'ı seç ve önerilen dosyayı onayla.
  3. 2D görünümlerde ve 3D görünümde kırmızı bir çizgi belirir. Çizgi log'daki entity'den başlar ve boşlukta biter.
  4. Çizgiyi 3D görünümde, dış kabuğu deldiği yere kadar takip et. Açıklık oradadır.
  5. Açıklığı kapat, Map → Unload Pointfile ile çizgiyi kaldır ve yeniden derle.

VBSP her seferinde yalnızca tek bir yol bildirir. Haritada birden fazla açık nokta varsa, mesaj kaybolana kadar işlemi tekrarla. View → Go to Coordinates ile log'daki koordinatlara doğrudan atlayabilirsin.

Tipik nedenler

NedenNasıl anlaşılırÇözüm
İki brush arasında aralıkÇizgi dar bir yarıktan geçer, çoğunlukla köşelerde ya da eğik duvarlardaBrush'ları tam kapanana kadar grid'e hizala
Dış duvar func_detail ya da başka bir brush entityÇizgi, kapalı görünen bir duvarın tam içinden geçerBrush'ı seç ve Ctrl+Shift+W ile yeniden world geometrisine taşı
Dış sınır olarak displacementÇizgi araziden aşağıya ya da yana doğru çıkarArkasına tools/toolsnodraw kaplı katı bir world brush koy
Harita dışında entityLog, koordinatları boşlukta olan bir entity'yi gösterirEntity'yi sil ya da haritanın içine taşı
Bozuk brushMap → Check for Problems (Alt+P) geçersiz bir solid bildirirBrush'ı onar ya da yeniden oluştur

İki nokta kolayca gözden kaçar. Birincisi, bir haritayı yalnızca world brush'lar kapatır. func_detail, func_brush ya da bir kapı gibi bir entity'ye bağlı olan her şey, VBSP'nin o noktadan geçmesine izin verir. Aynısı displacement'lar ve modeller için de geçerlidir. İkincisi, bir entity için belirleyici olan origin noktasıdır. Bir prop haritanın içinde tamamen görünür dururken origin'i duvarın arkasında, boşlukta olabilir.

Haritanın etrafına dev bir skybox koymak neden çözüm değil

Tüm haritayı saran büyük, içi boş bir kutu mesajı ortadan kaldırır, çünkü dışarı çıkan yol artık kutunun duvarında biter. Asıl sorun ise yerinde durur ve başka bir biçimde geri döner:

  • Harita ile kutu arasındaki tüm alan iç mekân sayılır. VBSP bu alanı visleaf'lere böler ve VVIS bunların her birini işlemek zorunda kalır. Derleme süresi ciddi biçimde artar.
  • VBSP normalde boşluğa bakan her yüzeyi kaldırır. Kutu varken geometrinin dış yüzleri ve arka yüzeyleri yerinde kalır, ışıklandırılır ve oyunda çizilir.
  • Görünürlük hesabı çok daha az işe yarar, çünkü normalde birbirinden ayrı olacak alanlar dıştaki boş alan üzerinden birbirini görebilir. Kare hızı düşer.

Bu yüzden skybox brush'larını yalnızca gökyüzünün gerçekten göründüğü yerlere koy ve haritaya yakın tut.

Leak'leri baştan önlemek

  • Dış kabuğu grid üzerinde basit ve büyük world brush'lardan kur. Detaylar bunun önüne func_detail olarak gelir.
  • Her displacement'ın altına ve arkasına tools/toolsnodraw kaplı katı bir brush koy.
  • Sık sık derle. Bir değişikliğin hemen ardından ortaya çıkan leak'in yeri çabucak daraltılır.
  • Büyük haritalarda cordon aracıyla yalnızca bir bölümü derle ve bölgeyi daralt.

Log'da leak dışında başka mesajlar da varsa, bunlar çoğu zaman zincirleme hatalardır. Compile log'unu Map Scanner aracına yapıştırabilirsin. Araç, VBSP, VVIS ve VRAD log'larında temel nedenleri, zincirleme hataları ve uygun çözümleri tespit eder. Tek tek mesajlara hata veritabanında da bakabilirsin. Bir log'u kendi başına nasıl okuyacağını compile log okuma yazısı gösteriyor.

Sık sorulan sorular

Derleme sırasında "leaked" ne anlama gelir?

Haritanın içi katı world brush'larla tamamen çevrelenmemiştir. VBSP bir entity'den boşluğa giden bir yol bulmuştur. Durum böyle kaldıkça görünürlük verisi ve eksiksiz ışıklandırma olmaz.

Hammer'da pointfile'ı nerede bulurum?

Map menüsünde, Load Pointfile altında. .lin uzantılı dosya VMF'nle aynı klasörde durur ve aynı adı taşır. Yalnızca VBSP gerçekten bir leak bulduğunda oluşturulur.

Leak'i olan bir haritayı yine de oynayabilir miyim?

Çoğu zaman evet, ama pek anlamı yok. Görünürlük verisi olmadan motor gereğinden çok daha fazlasını çizer ve ışıklandırma yalnızca doğrudan ışıktan oluşur. Leak'i olan bir harita yayınlanmaya uygun değildir.

func_detail haritayı kapatır mı?

Hayır. func_detail bir brush entity'dir ve harita kapatılırken dikkate alınmaz. Haritayı dışarıya karşı kapatan duvarlar, zeminler ve tavanlar normal world brush olmak zorundadır.