holodepth

Babylon.js · Motor & sahne

Kamera sistemi: bakış modeli ve aktif görüntüleme

Holodepth'te Three.js tarafında perspektif projeksiyon, görüntü matrisi ve kamera–nesne hiyerarşisi ayrı başlıklarda işlenir; burada aynı matematiği satır satır çözmüyoruz. Babylon.js sayfasında odak, sahne içinde görüntülemenin nasıl yönetildiği: hangi kameranın geçerli olduğu, hazır kamera "rig"lerinin motor tarafından nasıl taşındığı ve pratikte nerelerde takılındığı.

Kısa bir çerçeve: Three.js'te sıkça kamerayı sahneye ekleyip matrisleri kendiniz düşünürsünüz; Babylon.js'te ise çoğu üretim akışı aktif kamera + seçilmiş kamera tipi + giriş bağlama üçlüsü etrafında döner. Amaç, kullanıcıyı sıkmadan motor deneyimini netleştirmek.

Özet: kamera kararlarının üç katmanı

Katman Soru Babylon.js'te tipik karşılık
Kim çizer? Bu turda iz düşümü hangi bakıştan yapılır? scene.activeCamera (veya çoklu görünüm senaryolarında geçiş).
Nasıl bakılır? Orbital mi, birinci şahıs mı, sabit mi? ArcRotateCamera, UniversalCamera, FreeCamera gibi hazır sınıflar.
Görüş alanı Yakın/uzak kesim ve alan genişliği güvenli mi? FOV, minZ / maxZ; sahne ölçeğine göre ayar.

Aktif kamera: sahne hangi gözle çizilir?

Babylon.js'te bir sahnenin ekrana yansıması, içerik listesinden çok hangi kameranın seçili olduğu ile belirlenir. Bu yüzden "kamera yönetimi" yalnız üretim pozu değil, ürün akışı meselesidir: örneğin düzenleyici önizleme ile yayın görünümü arasında geçiş, aynı sahneyi farklı bakışlarla sunmak anlamına gelir — tek sahne, çok kullanım.

Sahne düzeyinde aktif kamera fikri, Sahne yönetimi sayfasında işaretlediğimiz atmosfer ve ortam kararlarıyla birlikte düşünülmelidir; kamera değişince kesme düzlemleri ve görünür alan da değişir. Küçük bir köşe durumu: birden fazla kamera düğümü varken "listedeki ilk" ile "aktif" aynı şey değildir; aktif olan, render yolunun bağlı olduğu bakıştır.

Hazır rig'ler: motorun taşıdığı kamera tipleri

Üç boyutlu editörlerde alışıldık "orbit", WASD ile gezinme veya serbest uçuş gibi davranışlar, sıfırdan quaternion yazmak yerine motorun sağladığı kamera sınıflarıyla modellenir. Örneğin hedef etrafında dönen bir bakış için yaygın seçim ArcRotateCamera; klavye–fare–dokunmayı tek pakette düşünüyorsanız UniversalCamera sık anılır. Bu isimleri ezberlemekten çok, her birinin giriş sözleşmesini (hangi eksende döner, zoom nasıl yorumlanır) ürününüze uyup uymadığını seçmek önemlidir.

  • ArcRotateCamera: ürün vitrinleri ve sahne incelemesi; hedef noktası etrafında mesafe ve açı yönetimi.
  • UniversalCamera: birinci şahıs veya karma girişle gezinme ihtiyacı; tek tip kontrol yüzeyi arayan projeler.
  • FreeCamera: daha hafif/soyut kontrol ihtiyacı veya özelleştirilmiş giriş katmanlarıyla birleştirme.

Hangi sınıfı seçerseniz seçin, pratikte iki adım birlikte gider: kamerayı oluşturmak ve kullanıcı girdisini çizim yüzeyine bağlamak (attach control). Bu bağlama, döngüden önce bir kez yapılır; sonra motor ve sahne karesi ilerler ( Render loop).

// Örnek omurga: ArcRotate + aktif kamera + kontrol bağlama
// İsimler ve parametreler sahne ölçeğinize göre ayarlanır.

const camera = new BABYLON.ArcRotateCamera(
  "cam",
  Math.PI / 2,
  Math.PI / 4,
  10,
  BABYLON.Vector3.Zero(),
  scene
);
camera.attachControl(canvas, true);
scene.activeCamera = camera;

Bakış ve projeksiyon: matematik değil, pratik ayar

Perspektif matrisinin iç yapısını burada yeniden üretmiyoruz; Holodepth'te matris ve clip uzayı konuları WebGL / Three.js hatlarında yer alır. Üretimde asıl sık karşılaşılan sorular şunlardır: nesneler kameraya çok mu yakın kayboluyor (yakın kesim), uzakta beklenmedik şekilde kesiliyor mu (uzak kesim / derinlik hassasiyeti), alan çok mu dar veya geniş (FOV). Bu üçü, kullanıcıya "kırık sahne" hissini veren başlıca ayar başlıklarıdır.

Küçük içerik ölçeğinde (örneğin bir ürün masası) yakın kesimi gereğinden büyük bırakmak, zeminin model içinden kaybolmasına yol açar; geniş açık dünya sahnelerinde ise uzak kesimi dar tutmak sis benzeri kesilmelere yol açabilir. Ayarları sabit sabit ezberlemek yerine, sahne birim ölçeğine göre düşünmek daha güvenilirdir.

Çoklu kamera ve küçük görüntüler

Aynı motor içinde birden fazla görünüm (örneğin ana görünüm + mini harita) için tipik desen, birden fazla kamera ve uygun görünüm alanı (viewport) düzenidir. Burada yönetim ipucu: her bakışın kendi kesim ve giriş kuralları olabilir; kullanıcıya hangi alanın etkileşim aldığını netleştirmek gerekir — aksi halde fare olayı yanlış kameraya gider. Katmanlı görünürlük için Sahne · katmanlar ile birlikte düşünün.

Geçiş ve tutarlılık: tek sahne, çok bakış

Aktif kamerayı değiştirmek teknik olarak tek atama gibi görünür; ürün olarak ise geçişin neden yapıldığını kullanıcıya hissettirmek gerekir: keskin sıçrama mı, yumuşatılmış ara poz mu? İkinci seçenekte animasyon veya sürtünmeli takip devreye girer — bu da kamera konumunu döngü içinde güncelleme ihtiyacı doğurur ( delta zaman).

Tutarlılığın bir diğer yüzü: fizik veya seçim sistemi hangi uzayda çalışıyorsa, kamera değişince beklenmedik çarpışma sonuçları oluşmaması için bu sistemlerin referans çerçevesini gözden geçirmek gerekir. Kamera sayfasının derinliği burada biter; detaylı fizik için ilgili Babylon modülüne geçilir.

Three.js ile üst üste okuma

Çakışmayı önleyen çerçeve

Three.js tarafında kamera çoğu zaman nesne olarak öğretilir; projeksiyon matrisi ve manuel kontrol katmanları kurarsınız. Babylon.js tarafında ise motor, hazır davranış paketleri ve aktif kamera disiplini ile aynı problemi daha az tökezlemeyle çözmenize yardım eder — bu, matematiği iptal etmez, tekrarını azaltır. İki Holodepth hattı birbirini dışlamaz: biri temeli öğretir, diğeri üretim hızını konuşur.

Bu klasörde sıradaki başlık

Kamera bakışı hazır olduktan sonra motorun yaşam döngüsü ve döngü sözleşmesi için Motor yaşam döngüsü sayfasına geçebilirsiniz. Önceki adım: Asset loading.