Mapping ve Hammer

Hammer için 3D skybox rehberi: sky_camera ile kurulum

Hammer'da 3D skybox nasıl yapılır: sky_camera ile 1/16 ölçek, ana haritayla düzgün hizalama, uyumlu sis ve en sık yapılan hatalar.

3D skybox, haritanın içinde yer alan ve uzaktaki çevreyi 1/16 ölçekte barındıran küçük, kapalı bir odadır. Motor onu sky_camera entity'sinin konumundan render eder ve sonucu, ana haritada tools/toolsskybox texture'ının göründüğü her yerde gösterir. Böylece dağlar, şehir silüeti ya da deniz gerçek boyutta var olmadan harita çok daha büyük görünür.

3D skybox nasıl çalışır

Motor önce normal 2D gökyüzünü, ardından 3D skybox'ı, en son da asıl haritayı bunların üzerine çizer. Skybox'ın içindeki kamera oyuncuyla birlikte hareket eder ama mesafenin yalnızca on altıda biri kadar. Bu sayede sen yürüdükçe manzara inandırıcı biçimde kayar.

Bundan iki kural çıkar:

  • sky_camera konumu, ana haritanın origin'ine, yani 0 0 0 koordinatına karşılık gelir. Bütün hizalama buna bağlıdır.
  • Oyuncular skybox'a asla girmez. Ulaşılabilir olması gereken her şeyin yeri ana haritadır.

Adım adım kurulum

  1. Planla: Nelerin yalnızca dekor olduğuna karar ver: sıradağlar, uzaktaki bina dizileri, su kütleleri, orman.
  2. Referans oluştur: Ana haritanın kaba hatlarını basit brush'lar olarak kopyala, örneğin zemin kenarlarını ve dış duvarları. Ayrıca tam 0 0 0 origin'ine küçük bir işaret brush'ı koy ve onu da kopyaya dahil et.
  3. Ölçekle: Kopyanın tamamını seç ve Tools → Transform (Ctrl+M) ile 0.0625 katsayısıyla ölçekle. Bu 1/16'ya eşittir.
  4. Taşı: Küçültülmüş referansı ana haritadan uzakta boş bir yere taşı.
  5. Kamerayı yerleştir: sky_camera entity'sini tam işaret brush'ının üzerine koy. Entity'deki ölçek değerini varsayılan 16'da bırak.
  6. Dekoru kur: Minyatür referansın çevresine uzak manzarayı oluştur, örneğin displacement'lar, basit brush'lar ve birkaç modelle.
  7. Kapat: Skybox odasını tools/toolsskybox kullanan brush'larla tamamen çevrele. Diğer her oda gibi sızdırmaz olmak zorundadır.
  8. Referansı kaldır: Ana haritanın minyatür kopyasını sil ya da gizli bir VisGroup'a taşı. Gizli nesneler derlenmez.
  9. Ana haritayı hazırla: Uzağın görünmesi gereken her yerde yüzeylerin tools/toolsskybox kullanması gerekir. tools/toolsnodraw ile skybox görünmez kalır.
  10. Test et: Haritayı derle ve geçişleri oyunda kontrol et. r_3dsky 0 ve r_3dsky 1, karşılaştırma yapabilmen için 3D skybox'ı kapatıp açar.

Ölçeği ve hizalamayı kontrol etme

Skybox'taki bir birim, ana haritadaki 16 birime eşittir. Oyunda 2048 birim yüksekliğinde görünmesi gereken bir dağ, skybox'ta bu yüzden 128 birim yüksekliğindedir. Bunun sonuçları var:

  • İnce detay mümkün değildir. Küçük bir grid ve kaba şekillerle çalış.
  • Skybox'taki bir birimlik kayma, oyunda 16 birimlik kaymaya dönüşür. Dekoru ve sky_camera entity'sini her zaman yalnızca birlikte taşı.
  • Modeller otomatik olarak küçültülmez. Skybox'lar için küçük ölçekte yapılmış modelleri kullan. Normal bir model on altı kat büyük görünür.

Hizalamayı ana haritayla skybox'ın buluştuğu yerde kontrol et, örneğin bir yol ya da arazi kenarı boyunca. Yükseklik ve yön uyuyorsa kamera doğru yerdedir.

Sisi ve ışığı uyumlu hale getirme

sky_camera entity'sinin kendi sis ayarları vardır. Ana harita ise genellikle bir env_fog_controller kullanır. İkisi birbirine uymuyorsa geçişte sert bir kenar görürsün.

  • Her iki entity'de de aynı sis rengini kullan.
  • Başlangıç ve bitiş mesafesi için env_fog_controller ile aynı değerlerden başla, oyunda bir testten sonra ince ayar yap.
  • 3D skybox'ın arkasında durmaya devam eden 2D gökyüzü texture'ının ufkuna uyan bir sis rengi seç.

Sis, dekordaki düşük detay seviyesini de gizler. light_environment güneşi skybox odasını da aydınlatır, çünkü oda aynı gökyüzünü kullanır. Ölçek yüzünden gölgeler orada çabucak kaba görünür. Source Engine'de ışıklandırma yazısı konuyu daha derinlemesine ele alıyor.

Performansı gözden kaçırmama

Source SDK koduna göre 3D skybox, yalnızca bir gökyüzü yüzeyi ekrana girdiğinde değil, oyuncunun bulunduğu yerden gökyüzü görülebildiği sürece ana haritaya ek olarak render edilir. Açık haritalarda bu neredeyse her zaman böyledir.

  • Geometriyi basit, odayı da dekorun izin verdiği kadar küçük tut.
  • Az sayıda basit model kullan ve uzaktan kimsenin seçemeyeceği şeyleri çıkar.
  • Source SDK koduna göre 3D skybox, kendine ait yansıma ve kırılma olmadan tek bir geçişte çizilir; bu yüzden gerçek zamanlı yansımalı su orada ana haritadaki gibi çalışmaz. $forcecheap 1 içeren ucuz bir su materyali güvenli tercihtir.

Daha fazla seçenek GMod harita performansını optimize etme yazısında.

Sık yapılan hatalar

BelirtiNedenÇözüm
3D skybox görünmüyorsky_camera yok ya da ana harita kenarlarında tools/toolsskybox kullanmıyorEntity'yi yerleştir, texture'ları kontrol et, r_3dsky değerine bak
Dekor havada duruyor ya da yana kaymışsky_camera ölçeklenmiş origin'in üzerinde değil ya da katsayı yanlışHizalamayı referans ve işaret brush'ıyla tekrarla
Skybox eklendikten sonra leakSkybox odası sızdırmaz değilOdayı world brush'larla tamamen kapat
Ufukta sert kenarsky_camera ile env_fog_controller sis ayarları farklıRengi ve mesafeleri eşitle
Uzaktaki modeller devasaSkybox sürümü yerine normal model kullanılmışKüçük bir model kullan
Minyatür manzara ana haritada görünüyorSkybox odası ana haritaya değiyor ya da ona açıkOdayı uzaklaştır ve ayrı olarak kapat

Skybox'ı ekledikten sonra VBSP bir leak bildirirse compile log leak'in izinin sürüldüğü entity'yi adıyla gösterir. Bu, örneğin sky_camera entity'sinin kendisi olabilir. Boşluğu nasıl bulacağın harita leak hatasını düzeltme yazısında anlatılıyor. Map Scanner, VBSP, VVIS ve VRAD log'larında asıl nedenleri, zincirleme hataları ve bunlara uygun çözümleri tespit eder.

Sık sorulan sorular

3D skybox hangi ölçeği kullanır?

Varsayılan 1/16'dır. 16 değeri sky_camera içinde kayıtlıdır ve değiştirilmeden kalmalıdır, çünkü mevcut skybox modelleri bu ölçeğe göre yapılmıştır. Referansını Hammer'da 0.0625 katsayısıyla ölçekle.

Skybox odasını nereye koymalıyım?

Ana haritadan uzakta boş bir yere. Oda ana haritaya değmemeli ve kendi başına sızdırmaz olmalıdır. Editörde nerede durduğu önemli değildir, önemli olan yalnızca sky_camera entity'sinin dekora göre konumudur.

3D skybox çok performans harcar mı?

Bu, içeriğine bağlıdır. Displacement'lardan ve birkaç modelden oluşan basit bir dekor neredeyse hiç fark yaratmaz. Çok sayıda model, karmaşık materyaller ya da geniş su yüzeyleri onu pahalı hale getirir.

3D skybox'ı oyunda neden göremiyorum?

Çoğunlukla sky_camera eksiktir ya da ana haritanın yüzeyleri tools/toolsskybox kullanmıyordur. Ayrıca r_3dsky değerinin 1 olduğunu kontrol et.