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_camerakonumu, 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
- Planla: Nelerin yalnızca dekor olduğuna karar ver: sıradağlar, uzaktaki bina dizileri, su kütleleri, orman.
- 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.
- Ö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. - Taşı: Küçültülmüş referansı ana haritadan uzakta boş bir yere taşı.
- Kamerayı yerleştir:
sky_cameraentity'sini tam işaret brush'ının üzerine koy. Entity'deki ölçek değerini varsayılan 16'da bırak. - Dekoru kur: Minyatür referansın çevresine uzak manzarayı oluştur, örneğin displacement'lar, basit brush'lar ve birkaç modelle.
- Kapat: Skybox odasını
tools/toolsskyboxkullanan brush'larla tamamen çevrele. Diğer her oda gibi sızdırmaz olmak zorundadır. - Referansı kaldır: Ana haritanın minyatür kopyasını sil ya da gizli bir VisGroup'a taşı. Gizli nesneler derlenmez.
- Ana haritayı hazırla: Uzağın görünmesi gereken her yerde yüzeylerin
tools/toolsskyboxkullanması gerekir.tools/toolsnodrawile skybox görünmez kalır. - Test et: Haritayı derle ve geçişleri oyunda kontrol et.
r_3dsky 0ver_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_cameraentity'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_controllerile 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 1iç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
| Belirti | Neden | Çözüm |
|---|---|---|
| 3D skybox görünmüyor | sky_camera yok ya da ana harita kenarlarında tools/toolsskybox kullanmıyor | Entity'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 leak | Skybox odası sızdırmaz değil | Odayı world brush'larla tamamen kapat |
| Ufukta sert kenar | sky_camera ile env_fog_controller sis ayarları farklı | Rengi ve mesafeleri eşitle |
| Uzaktaki modeller devasa | Skybox sürümü yerine normal model kullanılmış | Küçük bir model kullan |
| Minyatür manzara ana haritada görünüyor | Skybox odası ana haritaya değiyor ya da ona açık | Odayı 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.