Three.js · Kamera
Optik göz ve dijital perspektif
3D dünyada kamera, sadece bir "bakış açısı" değil; uzaydaki veriyi topluca yakalayan ve onu iki boyutlu bir düzleme aktaran optik bir dönüştürücüdür. Dijital bir sahneyi anlamak için önce ışığın bir mercekten nasıl geçtiğini anlamak gerekir.
Fiziksel kameranın anatomisi
Gerçek dünyada bir kamera, ışığı toplayıp bir sensöre (veya filme) odaklayan karmaşık bir mekanizmadır:
- Mercek (lens): Işığın kırılma açısını belirler. Merceğin eğimi ne kadar fazlaysa, görüş alanı (FOV) o kadar genişler.
- Netlik (focus): Işığın sensör üzerinde tek bir noktada kesişmesidir. Eğer ışık sensörün önünde veya arkasında kesişirse "bulanıklık" (bokeh) oluşur.
- Zoom (optik vs. dijital):
- Optik zoom: Merceklerin fiziksel olarak hareket ederek odak uzaklığını değiştirmesidir; görüntü kalitesi bozulmaz.
- Dijital zoom: Görüntünün merkezini kırpıp büyütmektir; pikselleşmeye neden olur.
Three.js ve bilgisayar grafiğinde kamera
Kamera sahneyi değiştirmez; yalnızca hangi kısmın ekrana yansıtılacağını belirler.
Yazılım dünyasında bir kamera nesnesi, fiziksel bir "cam" içermez. Koordinatları ekrana taşımak için projection matrix (perspektif veya ortografik iz düşürme) ile birlikte view matrix kullanılır. View matrix, kameranın sahnedeki konumunu ve baktığı yönü temsil eder; projection + view birlikte, dünya uzayından clip uzayına giden dönüşümün çekirdeğini oluşturur — pratikte tam görüntüleme sisteminin bu iki parçasıdır. Uzaydaki noktaların iki boyutlu düzleme indirgenmesi genel olarak da projection (iz düşürme) diye anılır.
- Sanal göz: Dijital kamera, uzaydaki (x, y, z) noktalarını alır ve onları ekranınızdaki (x, y) piksel koordinatlarına iz düşürür; bu süreçte view ve projection matrisleri birlikte çalışır.
- Three.js'te kamera da bir
Object3Dyapısıdr: Bu nedenleposition,rotationvelookAtgibi özelliklerle sahne içinde konumlandırılır ve yönlendirilir. Hiyerarşi ve transform düzeni için Object3D & sahne hiyerarşisi sayfasına bak. - Sensör yerine frustum: Gerçek kameraların aksine, dijital kameralar sadece frustum adı verilen kesik bir piramit hacminin içini "görür". Bu hacmin dışı kalan geometri çoğu gerçek zamanlı hattta çizilmez; bu tür optimizasyona frustum culling denir ve GPU yükünü korumaya yardımcı olur.
Gerçek kamera vs. sanal kamera: farklar
Dijital kameralar kusursuzdur, ancak bu kusursuzluk bazen "yapay" görünmelerine neden olur:
| Özellik | Gerçek kamera | Sanal (Three.js) kamera |
|---|---|---|
| Bozulma (distortion) | Mercek kenarlarında doğal bükülmeler oluşur. | Matematiksel olarak mükemmeldir; bozulma için ekstra shader gerekir. |
| Derinlik (depth of field) | Arka plan kendiliğinden bulanıklaşır. | Her yer jilet gibi nettir; bulanıklık (post-processing) ile eklenir. |
| Işık patlaması (lens flare) | Işığın mercek içinde sekmesiyle oluşur. | Bir yapay efekttir, elle eklenmelidir. |
| Odak uzaklığı | Mercek değiştikçe fiziksel olarak değişir. | Sadece FOV değerini değiştirmek yeterlidir. |
Teknik kavramlar: zoom ve netlik
- FOV (görüş alanı): Kameranın ne kadar geniş bir "açıyla" gördüğüdür. FOV düştükçe objeler yakınlaşır; bu dijital bir zoom etkisidir.
- Aspect ratio (en–boy oranı): Görüntünün basık veya uzamış görünmemesi için ekranın genişlik / yükseklik oranıdır.
- Near & far (kırpma düzlemleri): Gerçek dünyada bir kamera sonsuzu görebilir (yıldızlar gibi). Sanal dünyada ise renderer'ın kafası karışmasın diye bir "başlangıç" ve "bitiş" sınırı çizmek zorundayız.
Holodepth notu: Neden her şey net?
Gerçek hayatta gözümüz tek bir noktaya odaklanır. Three.js kamerasında varsayılan olarak her şey (yakın veya uzak) aynı netliktedir. Bu, bilgisayarın pikselleri çizerken derinlik farkı gözetmeksizin hepsini aynı netlik algoritmasıyla işlemesinden kaynaklanır. Eğer "sinematik" bir hava istiyorsan, depth of field (alan derinliği) efektlerini öğrenmen gerekecektir.
Görselleştirme için bir soru
Mete, bu dökümantasyonda kameraları görselleştirmek için şu yöntemleri kullanacağız:
- Işın çizgileri: Kameranın odak noktasından objeye giden çizgiler.
- Frustum diyagramı: Kameranın gördüğü o piramit şeklindeki hacmi üç boyutlu olarak gösteren grafikler.
- Lens karşılaştırması: Aynı sahnenin 35 mm (doğal) ve 18 mm (geniş açı) ile nasıl değiştiğini gösteren yan yana görseller.