Hata giderme

GMod'da cubemap'ler: mor-siyah yansımaları düzelt

GMod haritanda mor-siyah ya da yanlış yansımalar mı var? env_cubemap nasıl yerleştirilir, LDR ve HDR için cubemap nasıl oluşturulur, paketlerken nasıl korunur.

Mor-siyah damalı ya da yanlış yansımalar, yansıtıcı materyaller uygun cubemap'leri bulamadığında ortaya çıkar. Cubemap'ler ya hiç oluşturulmamıştır, ya iki ışıklandırma modundan yalnızca biri için oluşturulmuştur ya da BSP'de yapılan bir değişiklikten sonra kaybolmuştur. env_cubemap entity'lerini yerleştir, haritayı oyunda yükle ve buildcubemaps komutunu LDR ve HDR için ayrı ayrı çalıştır. Ardından haritayı yeniden yükle.

Cubemap nedir ve neden eksik olabilir

Bir cubemap, sabit bir noktadan çekilmiş altı çevre görüntüsünden oluşur. Yansıtıcı bileşeni olan materyaller onu önceden hesaplanmış bir yansıma olarak kullanır. Gerçek zamanlı bir ayna değildir. Derleme sırasında VBSP, yansıtıcı her brush yüzeyine bir env_cubemap atar; varsayılan olarak en yakındakini. Modeller ise kendilerine en yakın olanı kullanır.

Derleme yalnızca yer tutucular oluşturur. Asıl görüntüleri sonradan oyunda çekersin ve motor bunları BSP'nin pakfile'ına yazar. Bu yapılana kadar yüzeyler yedek olarak gökyüzünü yansıtır. İç mekânlarda bu fazla parlak ve çoğu zaman mavimsi görünür. Bu yedek de bulunamazsa yansımada mor-siyah dama deseni belirir. Cubemap'ler iki moddan yalnızca biri için varsa, Valve Developer Community'ye göre diğer modda yansımalar fazla parlak ya da boş görünür.

Bunun eksik materyallerle bir ilgisi yoktur. Yüzeyin kendisi doğru şekilde kaplanmıştır, bozuk olan yalnızca yansımadır. Gerçek pembe-siyah yüzeyler ve ERROR modelleri için eksik texture'ları ve ERROR modellerini düzeltme yazısına bak.

env_cubemap'i doğru yerleştirme

  • Her oda ya da ışık atmosferi için bir tane. Kendi ışıklandırması ya da duvar rengi olan her alan en az bir env_cubemap gerektirir. Uzun koridorlarda, özellikle de geçişlerde, birden fazla yerleştirirsin.
  • Göz hizasında. Yansıma, oyuncunun gördüğüyle örtüşmelidir. O yüzden entity'yi zeminden yaklaşık baş yüksekliğine koy.
  • Duvarlardan uzakta. Bir brush'ın içindeki ya da duvara yapışık bir env_cubemap işe yaramaz bir görüntü çeker.
  • Yüzeyleri bilinçli ata. "Brush faces" özelliğiyle tam olarak bu cubemap'i hangi yüzeylerin kullanacağını belirlersin. Bu, yansıtıcı zeminlerde ve camda işe yarar.
  • Abartma. Her cubemap BSP'nin boyutunu artırır, HDR haritalarda buna ikinci modun görüntüleri de eklenir. Dar bir alanda çok sayıda entity görünür bir kazanç sağlamaz.

Bir yüzeyin ne kadar güçlü yansıttığını materyali belirler. Işığın ve HDR'nin temelleri Source Engine'de ışıklandırma yazısında ele alınıyor.

Cubemap oluşturma: LDR ve HDR ayrı ayrı

İki ön koşul var: BSP son derlemeden gelmelidir ve garrysmod/maps klasöründe normal, yazılabilir bir dosya olarak durmalıdır. Yazılabilir olmayan bir BSP için motorun kendi konsol mesajı vardır (is not writable). Yalnızca bir addon arşivinin içinde bulunan bir harita da bu türden normal bir dosya değildir.

Harita HDR ile derlendiyse iki tura ihtiyacın var:

  1. Oyunu başlat ve haritayı yükle.
  2. mat_specular 0 yaz. Bu, mevcut hatalı yansımaların yeni görüntülere girmesini önler.
  3. mat_hdr_level 0 yaz ve haritayı yeniden yükle, örneğin map <mapname> ile.
  4. buildcubemaps yaz ve işlem bitene kadar bekle. Görüntü kısa süreliğine tüm çekim konumları arasında atlar.
  5. mat_hdr_level 2 yaz ve haritayı tekrar yükle. HDR turu için Valve Developer Community ayrıca building_cubemaps 1 komutunu önerir; bu, pozlamayı tüm görüntülerde aynı tutar.
  6. Bir kez daha buildcubemaps yaz.
  7. mat_specular 1 değerini geri ayarla, haritayı yeniden yükle ve yansımaları kontrol et.

HDR'siz bir harita için tek tur yeterlidir. O zaman 5. ve 6. adımlar atlanır.

Bilinen tuzaklar

BelirtiNedenÇözüm
Oluşturduktan sonra her şey aynı görünüyorHarita yeniden yüklenmediHaritayı yeniden yükle ya da oyunu yeniden başlat
Yansımalar bir modda doğru, diğerinde fazla parlak ya da boşCubemap'ler yalnızca LDR ya da yalnızca HDR için oluşturulduEksik turu çalıştır
BSP yeniden adlandırıldıktan sonra modellerde, prop'larda ve silahlarda cubemap yansıması görünmüyorMotor bunlar için cubemap'leri pakfile içinde BSP dosyasının adını taşıyan bir klasörde arar; brush yüzeyleri yansımalarını korurNihai adla derle ve orada oluştur
İç mekân yüzeyleri gökyüzünü yansıtıyorCubemap'ler hiç oluşturulmadı ya da yeni bir derleme onları sildiHer son derlemeden sonra yeniden oluştur
Yansıma başka bir odanın renklerini gösteriyorYüzey duvarın arkasındaki bir env_cubemap kullanıyorOdaya ayrı bir entity koy ya da yüzeyleri ata
buildcubemaps çalışıyor ama hiçbir şey kalmıyorBSP salt okunur ya da garrysmod/maps klasöründe normal bir dosya olarak durmuyorYazma korumasını kaldır ve BSP'yi garrysmod/maps klasörüne koy
Yeni yansımaların içinde yer tutucu ya da eski yansımalar görünüyorOluşturma sırasında yansımalar hâlâ açıktımat_specular 0 ile yeniden oluştur

Paketledikten sonra nelere dikkat etmeli

Cubemap'ler BSP'nin pakfile'ında dosya olarak, materials/maps/ altındaki, haritanın adını taşıyan bir klasörde saklanır. Bundan üç kural çıkar.

Her yeni derleme onları siler. VBSP, BSP'yi sıfırdan yazar. Bu yüzden cubemap'leri her zaman en sonda, her son derlemeden sonra da yeniden oluşturursun.

Ad nihai olmalı. Cubemap'leri oluşturmadan önce nihai dosya adına karar ver. Valve Developer Community'ye göre BSP'yi sonradan yeniden adlandırmak modellerdeki, prop'lardaki ve silahlardaki cubemap'leri bozar, çünkü motor bunları BSP dosyasının adını taşıyan bir klasörde arar. Haritanın brush yüzeyleri bundan etkilenmez.

BSP'deki her düzenlemeden sonra kontrol et. Cubemap'leri ancak son derlemeden sonra oluştur ve BSP'yi en sonda sıkıştır, çünkü Valve Developer Community'ye göre sıkıştırılmış bir BSP'de buildcubemaps oyunu çökertir. Özel içeriği cubemap'lerden önce mi sonra mı paketlediğin, sonradan kontrol etmek kadar önemli değildir. Pakfile'ı yeniden yazan her araç kayıtları değiştirebilir. O yüzden bitmiş dosyayı oyunda bir kez daha yükle ve yansımaları her iki modda da kontrol et.

Map Scanner, pakfile içine gömülü Lua ve asset dosyalarını listeler. Ancak yansımaların gerçekten doğru olup olmadığı yalnızca oyunda görülebilir. Bu yüzden yansımalara bir göz atmak, yayın öncesi harita kontrolünün bir parçasıdır.

Sık sorulan sorular

Haritamdaki yansımalar neden mor-siyah?

Yansıtıcı materyaller uygun bir cubemap bulamıyor. Tipik bir neden, bir aracın pakfile'dan sildiği cubemap'lerdir; bu durumda yedek bile bulunamaz. Oluşturma işleminden sonra yeniden adlandırılmış bir BSP ise farklı bir durumdur: Valve Developer Community'ye göre o zaman modeller, prop'lar ve silahlar cubemap yansımalarını kaybeder, brush yüzeyleri ise kendi yansımalarını korur. Cubemap'leri nihai harita adı altında LDR ve HDR için yeniden oluştur.

Her derlemeden sonra cubemap'leri yeniden oluşturmak zorunda mıyım?

Evet. Her derleme, çekilmiş cubemap'leri olmayan yeni bir BSP üretir. Çalışırken bunu atlayabilirsin ama yayından önce zorunludur.

Bir haritanın kaç env_cubemap entity'sine ihtiyacı var?

Her odanın ve belirgin biçimde farklı her ışık atmosferinin kendine ait bir tane olmasına yetecek kadar. Sabit bir sayı yoktur. Daha fazla entity daha büyük bir dosya demektir, bu yüzden idareli ve bilinçli kullanmak karşılığını verir.

Oyuncu olarak mor-siyah yansımalara karşı ne yapabilirim?

Başkasının haritasındaki cubemap'leri onaramazsın. mat_specular 0 yansımaları kapatır, böylece dama deseni de kaybolur. Temiz çözüm, haritanın düzeltilmiş bir sürümüdür.