Skip to content

Tarayıcıda açık dünya inşa etmek, bölüm 30: Duvarlara saygı duyan bir kamera

Oleg Sidorkin, Cinevva CTO'su ve Kurucu Ortağı

Burada yeni misiniz? Seri rehberini kullanın. Rehber, prototip denemesinin ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.

Bölüm 29, herhangi bir gövdeyi yönetebilen tek bir denetleyici sunmuştu. Artık gövde doğru hareket ediyor. Yürüyor, kayıyor, yüzüyor, süzülüyor, mağaralara tırmanıyor ve çıkıntıların altından eğilerek geçiyor. Sorun, onu neyin izlediği. Yirmi dokuz bölüm boyunca kamera, oyuncuyu takip eden standart bir yörünge düzeneğiydi ve utanç verici durumlardan kaçınmak için yalnızca tek bir akıllıca şey yapıyordu: düz zeminin altına kayamasın diye ufkun altına eğilmeyi reddediyordu. Bu sınırlama, asıl sorunu ele veriyor. Kamera, dünya geometrisinin gerçekte nerede olduğunu bilmiyordu; bu yüzden içinden geçmeye karşı tek savunma, bunun en olası olduğu açıları yasaklamaktı. Bir tepeye yaklaştığınızda kamera tepenin içinde kalıyordu. Bölüm 7'deki marching cubes mağaralarından birine girdiğinizde bir kayanın iç yüzeyine bakıyordunuz. Bölüm 16'daki üretim araçlarıyla bir ev inşa edip odanın içinde durduğunuzda kamera duvarın dışında süzülerek dış cephe kaplamasına bakıyordu. Bu bölüm, kameranın da gövdenin zaten gösterdiği geometri hassasiyetine sahip olmasını sağlıyor.

Sorunun biçimi ve çözümün biçimi

Üçüncü şahıs kamerasının bir zor, bir düzine de kolay görevi vardır. Kolay olanlar takip, yumuşatma ve yörünge girdisidir; bunlara zaten sahiptik. Zor olanı ise akademik literatürün görünürlük kısıtı dediği şeydir. Herkesin atıfta bulunduğu Christie ve Olivier imzalı Camera Control in Computer Graphics araştırması, tüm alanı bunun etrafında çerçeveler: dünyaya saygı gösterirken özneyi kadrajda ve engelsiz tutmak. Çalışma zamanında bu, her karede sorulan ve aldatıcı derecede basit görünen bir soruya indirgenir. Oyuncu dönme noktasıdır. Kullanıcı, kamerayı döndürmüş ve yakınlaştırarak oyuncunun arkasında belirli bir mesafede istenen kamera konumuna getirmiştir. Kamera, katı bir şeye saplanmadan önce bu çizgi boyunca gerçekte ne kadar geride durabilir? Bu soruyu dürüstçe yanıtladığınızda kamera tepenin önüne çekilir, bir köşeye doğru geri giderken bom boyunca içeri kayar ve mağara tavanını delip geçmek yerine orada durur.

Bunu çözen kalıp eski ve kendini kanıtlamıştır. Unreal buna yay kolu der, Godot bir SpringArm3D düğümü sunar, Unity'nin Cinemachine'i ise bunu üçüncü şahıs takip düzeneği ile engel giderici bir uzantı arasında paylaştırır. Fikir her zaman aynıdır. Kamerayı, dönme noktasına sabitlenmiş bir bomun ucuna asın. Yol açıkken istenen uzunlukta tutun, araya bir şey girdiğinde dönme noktasına doğru geri çekin ve yol yeniden açıldığında yay etkisiyle tekrar dışarı uzatın. Metroid Prime'ın kamera lideri tarafından yazılan Mark Haigh-Hutchinson'ın Real-Time Cameras kitabı, bunun basit bir sürümünü oyuncıların midesini bulandıran bir şeye dönüştüren hata biçimlerine bölümler ayırır. Bu kalıbı alıp tek oturuşta okunabilecek kadar küçük olan kendi sürümümüzü public/world/src/camera-rig.mjs içinde oluşturduk.

duvardönme noktası (oyuncunun başı)istenen (kullanıcı yakınlaştırması)kamera + prob yarıçapı rℓ (sınırlandırılmış)
Bom, bir engel araya girene kadar kamerayı kullanıcının istediği yakınlaştırma mesafesinde tutar; ardından aynı çizgi boyunca geri çekilerek yakın düzlemin yüzeyi delmesi yerine prob küresinin yüzeye dayanmasını sağlar.

Yalnızca kendi uzunlığını yöneten bir bom

Düzeneği küçük tutan tasarım kuralını Bölüm 29'daki denetleyici çalışmasından ödünç aldık: tek bir şeyi tamamen yönet ve geri kalanını reddet. Düzenek, bomun uzunluğunu ve yalnızca bunu yönetiyor. Yatay dönüş, dikey dönüş, yörünge sönümlemesi, dokunma ve tekerlek hareketleri; bunların tamamı, zaten iyi çözümler sunan ve yeniden yazmak istemediğimiz OrbitControls'da kalıyor. Dolayısıyla bu düzenek bir kamera denetleyicisi değil. Yörünge hesaplamalarından sonra çalışan ve tam olarak tek bir sayıyı, dönme noktası ile kamera arasındaki mesafeyi düzelten bir son işlem.

Bu karar düzenli görünüyor ve OrbitControls'un düşünme biçimi nedeniyle daha en başta neredeyse her şeyi bozuyordu. Her güncellemenin başında kameranın mevcut konumunu okur ve yörünge yarıçapını bundan türetir. Bu normalde görünmezdir. Ancak düzeneğimiz bir duvardan kaçınmak için kamerayı kısalttığı anda, sonraki karede OrbitControls bu kısaltılmış konumu okur, kullanıcının yakınlaştırmış olması gerektiği sonucuna varır ve kısaltmayı kullanıcının istediği yakınlaştırmaya işler. Birkaç kare sonra kamera oyuncunun başına çöker ve bir daha dışarı çıkmaz. Çözüm, yörünge güncellemesini çevreleyen iki çağrıdan ibaret ve tüm entegrasyon da bu. OrbitControls çalışmadan önce beforeControls(), kamerayı önceki karenin tam, kısaltılmamış mesafesine geri getirir; böylece yörünge hesaplaması her zaman kullanıcının gerçek yakınlaştırma değerini okur. OrbitControls çalıştıktan sonra afterControls(dt), yörüngesi yeni hesaplanmış bu istenen konumu okur, çarpışmayı çözer, uzunluğu sönümler ve kamerayı gerçekten görüntü oluşturması gereken yere yazar. Kullanıcının niyeti ile çarpışma düzeltmesi hiçbir zaman birbirine karışmaz ve ileri-geri hareket, düzenek kurulmadan önceki kadar duyarlı kalır. Düzenek için yazdığımız başsız test tam olarak bunu sabitler: bomu altmış kare boyunca bir duvara doğru sürün, duvarı kaldırın; uzunluk çarpışma mesafesinde takılı kalmak yerine yay etkisiyle kullanıcının on metrelik tam yakınlaştırmasına geri döner.

Tek sözleşme, her tür çarpıştırıcı

Düzenek, dünyanın neyden yapıldığını asla sormaz. Çarpıştırıcı, yalnızca probe metoduna sahip bir nesnedir. Düzenek ona bir ışın, azami mesafe ve kameranın prob yarıçapını verir; karşılığında kamera o çarpıştırıcı tarafından engellenmeden önce gidebileceği en uzak mesafeyi belirten tek bir sayı alır. Düzenek kayıtlı tüm çarpıştırıcıları sorgular ve en yakın çarpmayı seçer. Sözleşmenin tamamı bundan ibaret ve karakter denetleyicisinin hareket sistemini takılabilir davranışlara dönüştürürken yaptığı hamlenin aynısı. Arazi, nesneler ve bina kabukları aynı probe arayüzünün arkasından sisteme bağlanır; düzenek ise bunların hiçbirinden haberdar olmaz. Yeni bir engel türü eklemek, kamerayı düzenlemek değil, bir listeye çarpıştırıcı eklemektir.

Sözleşmedeki bir ayrıntı sağladığı faydayı fazlasıyla karşılıyor: prob yarıçapı. Dönme noktasından kameraya ince bir ışın göndermiyoruz; kameranın yakın düzlemini içine alacak kadar büyük bir küre gönderiyoruz. Tek bir ışın kamera merkezini duvarda durdurur, ancak yakın düzlemin bir genişliği vardır; dolayısıyla merkez ışını bir çarpma bildirmeden önce düzlemin köşeleri çoktan duvara gömülmüş olur. Işın yerine küçük bir küre süpürmek, yayımlanmış her uygulamanın yaptığı şeydir. Unreal bunu prob boyutu olarak sunar ve ekranın kenarlarından duvarın arkasını gösteren bir kamera ile yüzeye temizce dayanan bir kamera arasındaki farkı yaratır.

Bu yarıçapı tahmin etmiyor, hesaplıyoruz. Yakın düzlemin kameradan en uzak noktası köşelerinden biridir ve bu noktaya olan mesafe doğrudan projeksiyondan çıkar. Yakın düzlem n ve dikey görüş alanı θ olduğunda yarı yükseklik h=ntan(θ/2), yarı genişlik w=hen-boy oranı olur ve köşe şu mesafede bulunur:

rnear=n2+w2+h2

Prob yarıçapı, bu köşe mesafesinin küçük bir güvenlik payıyla çarpılmasıyla elde edilir. Ayrıca çok dar bir görüş hacminde makul bir asgari değerin altına asla düşmemesi için sabit bir alt sınır kullanılır. Görüş alanı, en-boy oranı veya yakın düzlem her değiştiğinde yarıçap yeniden hesaplanır; böylece pencerenin yeniden boyutlandırılması ya da projeksiyonu etkileyen bir yakınlaştırma, probu koruması gereken köşeleri kapsayamayacak kadar küçük bırakamaz.

Mağaralardan haberdar olan çarpıştırıcı

Arazi çarpıştırıcısında işler ilginçleşiyor, çünkü motorumuzdaki arazi bir yükseklik haritası değil. Bölüm 7'den beri bir işaretli mesafe alanı kullanıyoruz: uzaydaki herhangi bir noktanın en yakın katı yüzeye ne kadar uzak olduğunu ve kayanın içinde mi dışında mı bulunduğunu döndüren bir fonksiyon. Pozitif hava, negatif kaya anlamına geliyor. İşte bu tek gerçek, kameramızın bir yükseklik haritası kamerasının yapısal olarak yapamayacağı bir şeyi yapabilmesini sağlıyor. Yükseklik haritası, belirli bir x ve z konumundaki zemin yüksekliğini bilir. Tavan diye bir kavramı yoktur, çünkü herhangi bir noktanın üzerinde her zaman yalnızca tek bir yüzey bulunur. Bu nedenle bir yükseklik haritası kamerası bir tepenin içine girmenizi engelleyebilir, ancak dönme noktasının üzerinde asılı duran bir çıkıntı kenarı ya da mağara tavanı hakkında hiçbir fikri yoktur ve her ikisinin de içinden geçer. Mesafe alanı, üç boyuttaki her yüzeyden haberdardır; dolayısıyla kamerayı yamaca çarpınca durduran aynı prob, tek bir özel durum gerektirmeden mağara tavanında da durdurur.

mağarakatı kayaoyuncuyükseklik haritası: içinden geçer ✗SDF: tavanda durur ✓
Yükseklik haritası her sütunda tek bir yüzey sakladığı için oyuncunun üzerindeki kaya katmanını asla göremez ve bomun tavanı delip geçmesine izin verir. Mesafe alanı bu katmanın içinde negatiftir; dolayısıyla prob onunla temas eder ve kamera mağara tavanının hemen altında kalır.

Probu alan boyunca ilerletmenin bir adı ve arkasında bir makalesi var. John Hart'ın 1996 tarihli Sphere Tracing çalışması, bir ışını mesafe alanı üzerinde ilerletmenin standart yöntemidir. İşin püf noktası, alanın size yalnızca bir şeye çarpıp çarpmadığınızı söylememesi, aynı zamanda hiçbir şeye çarpmadan ilerleyebileceğiniz güvenli mesafeyi de bildirmesidir. Böylece küçük, sabit adımlarla sürünmek yerine alanı örnekler, bildirdiği boşluk kadar ileri gider ve bunu tekrarlarsınız; açık havada uzun adımlar, bir yüzeye yaklaşırken ise kısa ve dikkatli adımlar atarsınız. Yine de arazimizin bizi zorladığı bir nokta var. Gerçek bir mesafe alanı, en yakın yüzeye olan gerçek Öklid mesafesini bildirir ve bu boşluk kadar tam bir adım atmak her zaman güvenlidir. Ancak arazinin oyulmuş vokseller yerine hâlâ bir yükseklik haritası olduğu yerlerde, düşük maliyetle örnekleyebildiğimiz alan gerçek mesafe değil, dikey açıklıktır; yani zemine dümdüz aşağı yöndeki boşluktur. Eğimli bir yüzeyde bu değer, kameranın gerçekte ne kadar hareket edebileceğini olduğundan fazla gösterir; çünkü en yakın kaya doğrudan aşağıda değil, yandadır. Gerçek mesafe, gradyanla birlikte büyüyen 1+h2 çarpanı kadar daha küçüktür; dolayısıyla bildirilen boşluğa göre ayarlanan bir adım hedefi aşabilir ve bir sırtın temizce üzerinden atlayabilir. Çözüm, eksik gevşetmedir: bildirilen boşluğun tamamı yerine yalnızca bir bölümü kadar ilerlemek. Bu, yaklaşık altmış derecelik eğimlere kadar güvenli kalır ve gerçek mesafeli voksel bölgelerinde birkaç ek örnek dışında hiçbir maliyet oluşturmaz. Bunu bir minimum adım uzunluğuyla eşleştiriyoruz; böylece bir ya da iki hücre kalınlığındaki mağara duvarı tek adımda aşılmaz. Daha sıkı bir üst sınır da yürüyüşü düşük maliyetli tutar. Küre sonunda yüzeye değdiğinde kısa bir ikili arama temas noktasını hassaslaştırır; ardından kamera kendi yarıçapı kadar geri çekilip orada durur.

Matematiksel olarak bom, pivot p noktasından birim yön d boyunca uzanan r(t)=p+td ışınıdır ve yürüyüş, alanın temasa kadar bildirdiği boşluğun eksik gevşetilmiş bir bölümüyle, iki uçtan da sınırlandırılarak ilerler:

tn+1=tn+clamp(λ(Φ(r(tn))r),smin,smax)

Burada Φ, havada pozitif ve kayada negatif olan işaretli mesafedir; r prob yarıçapıdır; λ(0,1], yükseklik haritası alanının mesafeyi fazla bildirmesi nedeniyle yürüyüşün bir eğimin üzerinden atlamasını önleyen eksik gevşetme katsayısıdır; smin,smax ise ince bir duvarın atlanmasını ve yürüyüşün gereğinden uzun sürmesini önleyen adım sınırlarıdır. Temas, Φ(r(t))r koşulunu sağlayan ilk t değeridir; yani kürenin yüzeyi kayaya ulaşmıştır. Kamera da bu yay uzunluğundan kendi yarıçapı çıkarılmış konumda tutulur.

Çarpışma sistemi güvenlik ağı olarak bir yöntem daha taşır: iç içe geçmeyi giderme. Çarpışma, kamerayı baştan katıların dışında tutmalıdır; ancak birkaç durum bunu aşabilir: bomun içinden başlayacağı kadar ince bir duvarın iki yanında kalan bir pivot, kamera kayanın içindeyken arazi araçlarıyla yeni oyulmuş bir mağara ya da kameranın çevresine bırakılmış bir yapı parçası. Bu durumlarda çarpışma sistemi, kameranın kareyi katının içinde, yani Φ(c)<r olduğu yerde bitirip bitirmediğini denetler. Öyleyse alanın gradyanını okur; Φ kayadan uzaklaştıkça büyüdüğü için bu gradyan doğrudan açık havaya işaret eder. Ardından kamerayı bu doğrultuda dışarı çıkarır:

cc+(rΦ(c))Φ(c)Φ(c)

Bu işlemin birkaç yinelemesi r-eş yüzeyine yakınsar. Böylece bir şekillendirme aracı kameranın altındaki zemini oyduğunda görüntü kararmak yerine bir sonraki karede toparlanır.

İçeri sıçramak, dışarı yumuşakça açılmak ve çit direklerinde irkilmemek

Her karede doğrudan çarpışma mesafesine sıçrayan bir bom, hiç bom olmamasından daha kötüdür. Çünkü dünya, kameranın yalnızca tek kareliğine arkasından geçtiği ince nesnelerle doludur: bir çit direği, bir lamba, bir ağaç gövdesi. Her birinden kaçmak için ileri atılıp ardından geri sıçrayan bir kamera mide bulandırır. Haigh-Hutchinson'ın kitabı ile Itay Keren'in çok sevilen kamera hareketi konuşması aynı sezgide buluşur: kamera, tehdit ve tehlikelere onlardan uzaklaşırken gevşediğinden daha hızlı tepki vermelidir. Bu yüzden sönümleme bilinçli olarak asimetriktir. Bir engelleyici belirdiğinde ve bomun kısalması gerektiğinde kamera neredeyse anında içeri sıçrar; çünkü tek karelik kırpılma çirkindir ve oyuncu hızlı bir geri çekilmeyi tolere eder. Engel kalkıp bom uzamak istediğindeyse kamera yavaşça dışarı açılır ve bunu ancak kesintisiz açıklığın kısa bir bekleme süresi boyunca korunmasından sonra yapar. İrkilme hareketini ortadan kaldıran histerezis işte bu beklemedir. Kamerayı ince bir direğin yanından hızla çevirirseniz direk, yavaş uzamayı tetikleyecek kadar uzun süre görüşten çıkmaz; böylece kamera sanki direk orada değilmiş gibi yumuşakça yanından geçer. Gözün istediği tam olarak budur. Cinemachine de aynı fikri, çarpışmaya girerken ve çarpışmadan çıkarken kullanılan ayrı sönümleme değerleri olarak sunar. Sistemi bir yaydan çok kamera operatörü gibi hissettiren kısım bu asimetridir.

Kodda bu, değişimin işaretine göre hızı değiştiren tek satırlık üstel yumuşatmadır. mevcut bom uzunluğu, a çarpışmanın bu karede izin verdiği uzunluk ve Δt kare süresi ise

+(a)(1ekΔt),k={kinakouta>,kinkout

olur ve dışarı yumuşakça açılma dalı yalnızca açıklık τ bekleme süresi boyunca korunduktan sonra çalışır. 1ekΔt biçimi yalnızca düzenli göründüğü için önemli değildir. Tepki zaman sabitini kare hızından bağımsız olarak 1/k değerine sabitler; böylece kamera saniyede 30 ve 144 karede aynı hissi verir. Oysa basit sabit karışım +α(a) hızlı bir makinede daha çabuk sıçrar, yavaş bir makinede ise hantallaşırdı.

Son davranış, bu bölümün çıkış noktası olan dar iç mekânlar içindir. Bom, kamera oyuncunun hemen üzerine gelecek kadar kısaldığında oyuncunun kendi avatarını gizler ve görüntüyü birinci şahıs görünümüne yakın bir konuma taşırız. Breath of the Wild dar bir tapınakta bunu yapar ve üçüncü şahıs oyunlarının çoğu köşelerde bu çözüme başvurur; çünkü alternatifi, duvara sıkışıp bir kafanın arkasına bakan kullanışsız bir kameradır. Kamera düzeneği bunun için tek bir bayrak sunar; dünya döngüsü de bu bayrağı okuyup yerel avatarın görünürlüğünü açıp kapatır. Bom uzunluğu bir metrenin altına düştüğünde fiilen birinci şahıs görünümündesinizdir, duvarlara saygı gösterilir ve yeterli alan bulunan bir odaya geri adım attığınız anda avatar yeniden belirir, bom da uzar.

Sırada ne bağlanacak?

Arazi çarpışma sistemi bugün kullanıma giriyor ve işin zor yarısı da bu; çünkü arazi her yerde, mesafe alanı ise sorgulaması zahmetli olan kısım. İçerik üretimi denemelerindeki dekor nesneleri ve yapı kabukları kolay yarıdır; sözleşme de şimdiden onları bekliyor. İkinci bir çarpışma sistemi olan ışın izleme çarpışma sistemi, pivottan kameraya doğru bir ağ listesi üzerinde ışın gönderir ve en yakın çarpmayı arazi çarpışma sistemiyle aynı biçimde bildirir. Ucuz sürüm tek bir ışın gönderir; dekor nesnesi sayısı artana kadar bu yeterlidir. Sonraki geliştirme, bu ışını Garrett Johnson'ın bir ağı sınırlayıcı hacim hiyerarşisiyle sarmalayan ve böylece uzamsal sorguların kaba kuvvet yerine logaritmik zamanda çalışmasını sağlayan three-mesh-bvh kütüphanesini kullanarak süpürülen bir küreyle değiştirmektir. Her iki durumda da kamera düzeneği değişmez. Daha uzun bir çarpışma sistemi listesini sorgular ve en yakın çarpmayı seçer. Önce sözleşmeyi, sonra çarpışma sistemlerini inşa etmemizin bütün amacı budur.

Bu bölümde başvurulan teknolojiler

Tek bir değere sahip olan bom. Kamera düzeneği, OrbitControls'ün yerine geçen bir sistem değil, onun üzerinde çalışan bir son işlemdir. Bomun uzunluğunu yönetir; sapma, eğim, yakınlaştırma ve hareket girdilerini ise zaten güvendiğimiz yörünge denetleyicisine bırakır. Entegrasyon, iki kuşatıcı çağrıdan oluşur: beforeControls(), önceki karenin tam mesafesini geri yükler; böylece yörünge hesabı, çarpışma nedeniyle oluşan kısalmayı yakınlaşma sanmak yerine kullanıcının gerçek yakınlaştırma değerini okur. afterControls(dt) ise çarpışmayı çözümler ve ekranda gösterilecek konumu yazar. Bu ikili olmadan kamera birkaç kare içinde oyuncunun üzerine çöker.

Takılıp çıkarılabilir bir çarpışma sistemi sözleşmesi. Çarpışma sistemi, “sen engellemeden önce kamera pivottan bu ışın boyunca ne kadar ilerleyebilir?” sorusunu yanıtlayan bir probe içeren herhangi bir nesnedir. Kamera düzeneği her çarpışma sistemini sorgular ve engelin arazi, dekor nesnesi ya da duvar olmasına aldırmadan en yakın çarpmayı seçer. Bu, hareket için takılıp çıkarılabilir karakter denetleyicisinin kullandığı, tek bir şeyi yönetme disiplininin aynısıdır. Prob ince bir ışın değil, yakın düzlemi kapsayacak boyuttaki süpürülen bir küredir; böylece görüş hacminin köşeleri, merkez ışının gözden kaçıracağı bir yüzeyi asla kırpmaz. Yarıçapı projeksiyondan türetilir: yakın düzlemin bir köşesine olan n2+w2+h2 mesafesi bir güvenlik payıyla çarpılır ve görüş alanı, en-boy oranı ya da yakın düzlem her değiştiğinde yeniden hesaplanır.

Çıkıntılara ve mağaralara uyan işaretli mesafe arazi probu. Arazi bir yükseklik haritası değil, işaretli mesafe alanı olduğundan, kamerayı yamaçta durduran prob mağara tavanında da durdurur; yükseklik haritası ışın testinin yapısal olarak göremeyeceği durum budur. Yürüyüş, Hart tarzı küre izlemeyle yapılır: alanın bildirdiği boşluğun eksik gevşetilmiş bir bölümü kadar ilerler ve iki uçtan da sınırlandırılır. Bunun nedeni, yükseklik haritası bölgelerinin gerçek mesafe yerine dikey açıklığı bildirmesi ve kameranın bir eğimde ne kadar hareket edebileceğini olduğundan fazla göstermesidir; tam bir adım bir sırtın üzerinden atlardı. Gradyan güdümlü iç içe geçme giderme geçişi ise kameranın altındaki zemin şekillendirildiğinde görüntüyü toparlayan güvenlik ağıdır.

Bekleme zamanlayıcılı asimetrik sönümleme. Bir engelleyici belirdiğinde bom hızla içeri sıçrar, engel kalktığında ise yalnızca kısa bir kesintisiz açıklık süresinden sonra yavaşça dışarı açılır. Böylece bir çit direğinin yanından hızla geçmek kameranın ileri atılmasına yol açmaz. Bom belirli bir çökme eşiğinin altına indiğinde düzenek birinci şahıs görünümüne yakın olunduğunu işaretler ve dünya döngüsü yerel avatarı gizler. Bu, dar iç mekânlarda duvara gömülmüş bir kamera yerine kullanılan standart geri dönüş çözümüdür.

Kaynaklar

Kamera denetiminin bir görünürlük kısıtı olarak çerçevelenmesi Marc Christie ve Patrick Olivier'nin Bilgisayar Grafiklerinde Kamera Denetimi çalışmasından gelir (Computer Graphics Forum, 2008). Mesafe alanı yürüyüşü John C. Hart'ın Küre İzleme: Örtük Yüzeylerin Kenar Yumuşatmalı Işın İzlemesi İçin Geometrik Bir Yöntem çalışmasına dayanır (The Visual Computer, 1996). Yaylı kol örüntüsü ve prob küresi çarpışması Epic'in Yaylı Kol Bileşeni ile Unity'nin Cinemachine Engel Gidericisi ve Üçüncü Şahıs Takibi belgelerinde açıklanır. Hareket ve sönümleme sezgisi Mark Haigh-Hutchinson'ın Gerçek Zamanlı Kameralar kitabından (Morgan Kaufmann, 2009) ve Itay Keren'in Geri Kaydırma: Yandan Kaydırmalı Oyunlarda Kameraların Kuramı ve Uygulaması konuşmasından gelir (GDC 2015). Ağ çarpışma sisteminin geliştirme yolu Garrett Johnson'ın three-mesh-bvh kütüphanesidir.


30 bölümün 30. bölümü. Önceki: Bölüm 29 - Tek denetleyici, her gövde Seri rehberi: /tr/blog/2026-02-25-open-world-browser-series-guide