<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Cinevva Blog</title>
        <link>https://app.cinevva.com</link>
        <description>Ürün güncellemeleri, üretici notları ve denemeler.</description>
        <lastBuildDate>Sat, 15 Aug 2026 21:31:50 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright 2024-present Cinevva</copyright>
        <item>
            <title><![CDATA[Doğruluk kontrolü notu: "Eskizden videoya ve oynanabilir 3D'ye"]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-03-04-sketch-to-animated-3d-character-factcheck-note</link>
            <guid>https://app.cinevva.com/tr/blog/2026-03-04-sketch-to-animated-3d-character-factcheck-note</guid>
            <pubDate>Sat, 15 Aug 2026 21:16:53 GMT</pubDate>
            <content:encoded><![CDATA[<h1 id="dogruluk-kontrolu-notu-eskizden-videoya-ve-oynanabilir-3d-ye" tabindex="-1">Doğruluk kontrolü notu: &quot;Eskizden videoya ve oynanabilir 3D'ye&quot; <a class="header-anchor" href="#dogruluk-kontrolu-notu-eskizden-videoya-ve-oynanabilir-3d-ye" aria-label="Permalink to &quot;Doğruluk kontrolü notu: &quot;Eskizden videoya ve oynanabilir 3D'ye&quot;&quot;"></a></h1>
<p><strong>Kime:</strong> Oleg Sidorkin<br>
<strong>Konu:</strong> <a href="https://app.cinevva.com/blog/2026-03-04-sketch-to-animated-3d-character" target="_blank" rel="noreferrer">app.cinevva.com/blog/2026-03-04-sketch-to-animated-3d-character</a><br>
<strong>Karşılaştırılan kaynak:</strong> cinevva-site deposu (pazarlama sitesi + worker)</p>
<hr>
<h2 id="dogrulandı-✓" tabindex="-1">Doğrulandı ✓ <a class="header-anchor" href="#dogrulandı-✓" aria-label="Permalink to &quot;Doğrulandı ✓&quot;"></a></h2>
<ul>
<li><strong>Araç adları</strong> (Image Generator, Video Generator, 3D Model Generator) ve <strong>bağlantı</strong> <code>/tr/tools/hunyuan3d</code> kod tabanıyla eşleşiyor.</li>
<li><strong>Yazar</strong> (Oleg Sidorkin, CTO) bilgisi doğru.</li>
<li><strong>Video iş akışı:</strong> Başlangıç ve bitiş kareleri arasında geçiş, 9:16, 3–15 saniyelik süre ve storyboard modu destekleniyor.</li>
<li><strong>3D işlem hattı:</strong> Hunyuan3D ve &quot;3D Model Generator&quot; adları doğru; otomatik rigleme (Tripo) ve &quot;GLB yükle → riglenmiş model + animasyon kütüphanesi&quot; ifadeleri uygulamayla eşleşiyor.</li>
<li><strong>Cinevva Engine</strong> ve &quot;2026'nın başlarındaki durumu yansıtır&quot; ifadeleri doğru.</li>
</ul>
<hr>
<h2 id="duzeltilmesi-gerekiyor" tabindex="-1">Düzeltilmesi gerekiyor <a class="header-anchor" href="#duzeltilmesi-gerekiyor" aria-label="Permalink to &quot;Düzeltilmesi gerekiyor&quot;"></a></h2>
<p><strong>&quot;Seedance 1.5 Pro&quot;</strong> — Bu depoda video özelliği Seedance 1.5 Pro ile değil, <strong>Kling 3.0 Pro</strong> (fal.ai) ile uygulanmıştır:</p>
<ul>
<li><code>worker/src/genai/fal-video.ts</code>, <code>fal-ai/kling-video/v3/pro/...</code> kullanıyor</li>
<li><code>worker/src/index.ts</code>, maliyeti <code>model: 'kling-3.0-pro'</code> olarak takip ediyor</li>
<li><code>tools/video.md</code> şöyle diyor: &quot;Metin veya görsellerden <strong>Kling 3.0 Pro</strong> kullanarak kısa yapay zekâ videoları oluşturun&quot;</li>
</ul>
<p>API/ürün adı &quot;seedance&quot; (ör. <code>/genai/seedance/generate</code>), ancak altyapıda kullanılan model Kling 3.0 Pro'dur. Seedance 1.5 Pro farklı bir modeldir (ByteDance). Herkese açık kaynaklarda Seedance 1.5 Pro genellikle yaklaşık 10 saniyeyle sınırlı gösterilirken burada Kling için 15 saniye destekleniyor.</p>
<p><strong>Öneri:</strong> Pazarlama sitesi ve dokümantasyonla tutarlı olması için makalede video modelini <strong>&quot;Kling 3.0 Pro&quot;</strong> (veya örneğin &quot;Video Generator (Kling 3.0 Pro)&quot;) olarak adlandırın. Uygulamanın arka ucu gerçekten Seedance 1.5 Pro kullanıyorsa uygulama metnini ve <code>tools/video.md</code> dosyasını aynı modeli açıklayacak şekilde uyumlu hâle getirin.</p>
<hr>
<h2 id="depoda-dogrulanamayanlar" tabindex="-1">Depoda doğrulanamayanlar <a class="header-anchor" href="#depoda-dogrulanamayanlar" aria-label="Permalink to &quot;Depoda doğrulanamayanlar&quot;"></a></h2>
<p>Cubcoats, Kali the Kitty, Mimi Chao ve bunlarla ilgili ticari iddialar harici bilgilerdir; kontrol edilmemiştir.</p>
]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Spike kaynak kodu görüntüleyici]]></title>
            <link>https://app.cinevva.com/tr/blog/spike-source</link>
            <guid>https://app.cinevva.com/tr/blog/spike-source</guid>
            <pubDate>Sat, 15 Aug 2026 21:16:53 GMT</pubDate>
            <description><![CDATA[Açık dünya tarayıcı serisindeki herhangi bir spike'ın kaynak kodunu görüntüleyin.]]></description>
            <content:encoded><![CDATA[<h1 id="olusturucuda-acılıyor" tabindex="-1">Oluşturucuda açılıyor… <a class="header-anchor" href="#olusturucuda-acılıyor" aria-label="Permalink to &quot;Oluşturucuda açılıyor…&quot;"></a></h1>
<p v-if="spikeId">
  Oyun Oluşturucu'daki <strong>{{ spikeId }} spike'ına</strong> yönlendiriliyorsunuz.
  Yönlendirilmezseniz <a :href="`/create#spike-${spikeId}`">buradan açın</a>.
</p>
<p v-else>
  <a href="/tr/create">Oyun Oluşturucu'yu açın</a>.
</p>
<p style="margin-top:1rem">
  <a href="/tr/blog/2026-02-25-open-world-browser-series-guide">← Seri rehberine dön</a>
</p>
]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Hayır diyen bir çalışma zamanını simüle etmek: tarayıcıyı WeChat gibi davranacak şekilde nasıl korumalı alana alıyoruz]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-07-19-sandboxing-wechat-strict-mode</link>
            <guid>https://app.cinevva.com/tr/blog/2026-07-19-sandboxing-wechat-strict-mode</guid>
            <pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Yapay zekâlı oyun oluşturucumuz artık WeChat'e taşınabilir oyunlar üretiyor, ancak istemdeki bir kural yalnızca öneridir. Bu nedenle önizlemeye katı modda çalışan bir korumalı alan ekledik: WeChat'in hata vereceği yerlerde tarayıcının da hata vermesini sağlayan ve ihlalleri doğrudan yapay zekânın kendi hata ayıklama döngüsüne aktaran bir betik. İşte tasarımı, engelleme listesi ve bize en çok şey öğreten dört istisna.]]></description>
            <content:encoded><![CDATA[<h1 id="hayır-diyen-bir-calısma-zamanını-simule-etmek-tarayıcıyı-wechat-gibi-davranacak-sekilde-nasıl-korumalı-alana-alıyoruz" tabindex="-1">Hayır diyen bir çalışma zamanını simüle etmek: tarayıcıyı WeChat gibi davranacak şekilde nasıl korumalı alana alıyoruz <a class="header-anchor" href="#hayır-diyen-bir-calısma-zamanını-simule-etmek-tarayıcıyı-wechat-gibi-davranacak-sekilde-nasıl-korumalı-alana-alıyoruz" aria-label="Permalink to &quot;Hayır diyen bir çalışma zamanını simüle etmek: tarayıcıyı WeChat gibi davranacak şekilde nasıl korumalı alana alıyoruz&quot;"></a></h1>
<p><em>Cinevva CTO'su ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<img src="https://cdn.cinevva.com/blog/wechat-strict-sandbox-hero.jpg" alt="Şeffaf bir cam kubbenin içindeki küçük bir 3D oyun sahnesi ve camın dışında süzülen, üzerleri çarpıyla işaretlenmiş araç simgeleri" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Yakın zamanda Game Creator'a bir <a href="/tr/news/2026-07-19-wechat-mini-game-mode.html">WeChat mini oyun modu</a> ekledik: Yapay zekâ tarafından üretilen oyunları, web platformunun WeChat çalışma zamanına taşındığında çalışmaya devam eden alt kümesi içinde tutan bir derleme profili. Profil, bir dizi üretim kuralından oluşuyor. DOM tabanlı kullanıcı arayüzü yok, Pointer Lock yok, yalnızca mp3 ses, dinamik kod yok. Model bu kurallara, modellerin kurallara uyduğu şekilde uyuyor; yani genellikle.</p>
<p>Her ihlal tarayıcıda görünmezken dışa aktarımdan sonra ölümcül oluyorsa &quot;genellikle&quot; yeterli değildir. HTML sağlık çubuğu olan bir oyun önizlememizde kusursuz çalışır, ancak WeChat mini oyunlarında hiç DOM bulunmadığı için WeChat'te boş ekran üretir. Bu nedenle söz konusu kuralları öneriden fiziğe dönüştüren şeyi geliştirdik: Tarayıcının, WeChat'in yapamadığı şeyleri yapmayı reddetmesini sağlayan katı modda bir korumalı alan. Bu yazı, onun nasıl çalıştığını anlatıyor.</p>
<h2 id="temel-karar-varlıgı-degil-yoklugu-simule-etmek" tabindex="-1">Temel karar: varlığı değil, yokluğu simüle etmek <a class="header-anchor" href="#temel-karar-varlıgı-degil-yoklugu-simule-etmek" aria-label="Permalink to &quot;Temel karar: varlığı değil, yokluğu simüle etmek&quot;"></a></h2>
<p>Bariz yaklaşım WeChat'i taklit etmek olurdu: <code>wx.createCanvas</code>, <code>wx.onTouchStart</code>, <code>wx.setStorageSync</code> işlevlerini uygulamak ve oyunları taklit edilen <code>wx.*</code> yüzeyinde çalıştırmak. Biz bunun tersini yaptık ve bunun nedeni dışa aktarma işlem hattımızın yapısı.</p>
<p>WeChat modundaki oyunlar hâlâ tarayıcı API'lerine göre yazılıyor. Paketleme sırasında bir adaptör (topluluk standardı weapp-adapter yaklaşımı) bu tarayıcı API'lerini <code>wx.*</code> üzerine eşliyor. Bu, oyunlarımızın hiçbir zaman doğrudan <code>wx.*</code> çağırmadığı anlamına geliyor; dolayısıyla bir <code>wx</code> emülatörü, var olmayan kod yollarını test ederdi. Bir taşıma işlemini asıl bozan şey, tarayıcıda <code>wx.*</code> bulunmaması değildir. Üretim sırasında sessizce kullanılan, WeChat'te karşılığı olmayan tarayıcı API'lerinin <em>varlığıdır</em>. <code>document.createElement('div')</code>. <code>requestPointerLock()</code>. IndexedDB. Chrome'da sorunsuz çözülen ancak WeChat iOS'ta hiçbir zaman çözülmeyecek bir <code>.ogg</code> dosyası.</p>
<p>Bu nedenle korumalı alan yokluğu simüle ediyor. WeChat'te bulunmayan her şey önizlemede kaldırılıyor, engelleniyor veya işaretleniyor; böylece oyun daha ilk karesinden itibaren iki platformun kesişim kümesi içinde geliştiriliyor.</p>
<h2 id="nerede-calısıyor-zaten-mevcut-olan-bir-service-worker" tabindex="-1">Nerede çalışıyor: zaten mevcut olan bir service worker <a class="header-anchor" href="#nerede-calısıyor-zaten-mevcut-olan-bir-service-worker" aria-label="Permalink to &quot;Nerede çalışıyor: zaten mevcut olan bir service worker&quot;"></a></h2>
<p>Editör önizlememizin alışılmadık sunum yolu, bunu neredeyse bedavaya getirdi. Editördeki oyunlar ağ üzerinden sunulmuyor. Bir service worker, <code>/game/*</code> isteklerini yakalayıp dosyaları IndexedDB'den sunuyor; önizleme iframe'inin ağ gidiş dönüşü olmadan anında yeniden yüklenmesini sağlayan da bu. Bu worker zaten her oyun sayfasına iki sanal dosya enjekte ediyor: konsol çıktısını ve çökmeleri editöre ileten bir hata yakalama betiği ile canlı sahne inceleyicisi.</p>
<p>Korumalı alan, üçüncü sanal dosya olan <code>_wechat-strict.js</code>; yakalama betiğinden hemen sonra ve herhangi bir oyun kodu çalışmadan önce sayfanın <code>&lt;head&gt;</code> bölümüne enjekte ediliyor. Sıralama iki açıdan kritik. <code>console.error</code> çağrılarının önceden yakalanıp editöre akabilmesi için yakalama betiğinden sonra, engellerin ilk oyun kodu satırı çalıştırıldığında devrede olması için de oyun modüllerinden önce çalışmalı.</p>
<p>Etkinleştirme tek satırlık bir numaraya dayanıyor. Oluşturucudaki WeChat anahtarı <code>localStorage</code> içinde saklanıyor ve önizleme iframe'i editörle aynı origin'i kullandığından test düzeneği bayrağı doğrudan okuyabiliyor:</p>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">try</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">  if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (localStorage.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">getItem</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'cinevva-gc-profile'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">!==</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> 'wechat-minigame'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">} </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">catch</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (e) { </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; }</span></span></code></pre>
</div><p>WeChat dışındaki her oyun için betik yalnızca tek bir dize karşılaştırması yapıp erkenden çıkıyor. Derleme bayrağı yok, sunucu gidiş dönüşü yok, service worker ile eşitlenecek durum yok.</p>
<h2 id="engelleme-listesi-ve-iki-katmanlı-sınıflandırma" tabindex="-1">Engelleme listesi ve iki katmanlı sınıflandırma <a class="header-anchor" href="#engelleme-listesi-ve-iki-katmanlı-sınıflandırma" aria-label="Permalink to &quot;Engelleme listesi ve iki katmanlı sınıflandırma&quot;"></a></h2>
<p>Her ihlal aynı tepkiyi hak etmiyor; bu nedenle test düzeneği iki katmanı birbirinden ayırıyor. WeChat'te <em>hiç bulunmayan</em> API'ler hata fırlatıyor; çünkü dışa aktarımdan sonra olan da bu ve üretim sırasında yaşanan bir çökme, inceleme sırasında yaşanacak çökmenin dürüst bir önizlemesidir. <em>Var olup daha sonra bozulan</em> şeyler ise davranışları değiştirilmeden yüksek sesli konsol hataları olarak işaretleniyor; çünkü bunları engellemek, oyunun gerçek durumunu üzerinde çalışan kişiden gizlerdi.</p>
<p>Hata fırlatma katmanı: Hem <code>createElement</code> hem de <code>createElementNS</code> üzerinden herhangi bir HTML kullanıcı arayüzü öğesi oluşturmak (Three.js kendi canvas'ını NS varyantıyla oluşturduğu için her iki yolun da aynı kapıdan geçmesi gerekiyor), <code>eval</code>, <code>new Function</code>, <code>requestPointerLock</code> ve service worker kaydı. Fırlatılan her hata, mesajında çözümü de taşıyor:</p>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">throw</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> violate</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"document.createElement('"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> +</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> tag </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "') — WeChat mini oyunlarında DOM bulunmaz. "</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> +</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  "Kullanıcı arayüzünü canvas üzerine çizin (ekran dışı 2D canvas -> ekran uzayında bir dörtgen üzerinde THREE.CanvasTexture) "</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> +</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">  "ve dokunma isabet testini kendiniz yapın."</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span></code></pre>
</div><p>İşaretleme katmanı: <code>indexedDB</code> okuma (tam WeChat'teki gibi <code>undefined</code> döndürür ve ayrıca <code>localStorage</code> kullanımını öneren bir hata verir), WeChat iOS'un çözemediği herhangi bir biçimdeki sesler (üç yerde kontrol edilir: <code>Audio</code> kurucusu, medya öğesi prototipindeki <code>src</code> ayarlayıcısı ve getirilen URL'ler), oyunun kendi origin'i veya varlık CDN'imiz dışındaki herhangi bir origin'e yapılan ağ istekleri (WeChat'te bunlar beyaz listeye alınmış, ICP kaydı yapılmış bir alan adı gerektirir) ve Tone.js'in herhangi bir şekilde ortaya çıkması.</p>
<p>Ayrıca sayfa yerleştikten kısa süre sonra çalışan bir yükleme sonrası denetim de var: <code>&lt;body&gt;</code> içinde gezinir ve dinamik oluşturma yerine oyunun kendi işaretlemesiyle gelen tüm HTML öğelerini bildirir. Statik HUD'lar bir <code>createElement</code> kapısından kaçabildiği için yalnızca kapı yeterli değildir.</p>
<p>Her rapor mesaj bazında yinelenen kayıtları kaldırıyor ve oturum başına elli raporla sınırlandırılıyor. Her karede bir div oluşturan ters çevrilmiş döngü hatası, sinyali boğan bir hata seli değil, tek bir hata üretiyor.</p>
<h2 id="bize-en-cok-sey-ogreten-dort-istisna" tabindex="-1">Bize en çok şey öğreten dört istisna <a class="header-anchor" href="#bize-en-cok-sey-ogreten-dort-istisna" aria-label="Permalink to &quot;Bize en çok şey öğreten dört istisna&quot;"></a></h2>
<p>Korumalı alan oluşturmak çoğunlukla neyin <em>engellenmeyeceğine</em> karar vermektir ve eklediğimiz her istisna, geliştirme sırasında kendi araçlarımızın bozulmasından doğdu.</p>
<p><strong>Hata ayıklayıcımız eval üzerinde çalışıyor.</strong> Yapay zekânın çalışan oyunu incelemek için kullandığı <code>execute_js</code> aracı, kodu <code>eval</code> çağıran yakalama betiğinin mesaj işleyicisi üzerinden değerlendiriyor. <code>eval</code> işlevini safça engellemek, yapay zekânın kendi gözlerini kör ederdi. Çözüm: Test düzeneği, engellemeden önce gerçek işlevi numaralandırılamayan bir özellikte saklıyor ve yakalama betiğinin işleyicisi gerektiğinde buna geri dönüyor:</p>
<div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">Object.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">defineProperty</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(window, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'__cinevvaRealEval'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, { value: window.eval, enumerable: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> });</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">window.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">eval</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> function</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> () { </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">throw</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> violate</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'WeChat mini oyunlarında eval() yasaktır.'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">); };</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// capture script, at message time:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">returnValue </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (window.__cinevvaRealEval </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">||</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> eval)(e.data.code);</span></span></code></pre>
</div><p><code>eval</code> kullanmaya çalışan oyun kodu yine duruyor. Hata ayıklayıcı ise çalışmaya devam ediyor.</p>
<p><strong>Kaydedici de öğeler oluşturuyor.</strong> Reel kaydedicimiz, iframe'in kendi <code>document.createElement</code> işleviyle oluşturulan bir <code>&lt;script&gt;</code> olarak oyun iframe'ine enjekte ediliyor ve tamamlanan videoları sentetik bir <code>&lt;a&gt;</code> tıklaması aracılığıyla indiriyor. Bu etiketleri engellemek, kayıt özelliğini yalnızca ve tam olarak WeChat modunda bozardı. Bu nedenle <code>script</code> etiketine izin veriliyor ve <code>a</code> hata fırlatmadan uyarı veriyor. Gerçek bir bağlantıyla yayımlanan oyun yine işaretleniyor, araçlar da çalışmaya devam ediyor.</p>
<p><strong>Klavye olayları kalıyor.</strong> Yapay zekâ, tuş basımlarını taklit eden ve oyun durumunun nasıl değiştiğini geri okuyan bir araçla kontrolleri doğruluyor. Telefonu simüle etmek için klavye girişini bastırmak, ters çevrilmiş kamera hatalarını yakalayan kontrol doğrulama döngüsünü yok ederdi. Önceliğin dokunmatik kontrollerde olması korumalı alan tarafından değil, üretim kuralları ve profilin kontrol şeması tarafından zorunlu tutuluyor.</p>
<p><strong>WebGL2 kalıyor ve nedeni aşağıda kendine ait bir bölümü hak ediyor.</strong> Engelleme listesinin taslağı, profilin talep ettiği &quot;WebGL1 uyumlu&quot; işlemeyi zorlamak için <code>getContext('webgl2')</code> çağrısını engelliyordu. Ancak Three.js <a href="https://github.com/mrdoob/three.js/releases/tag/r163" target="_blank" rel="noreferrer">r163 sürümünde WebGL1 desteğini tamamen kaldırdı</a> ve biz r181 sürümünü sabitliyoruz: WebGL2'yi engellemek bu moddaki her 3D oyunu boş ekrana dönüştürürdü. Profilin işleme kuralı tutarsızdı ve platforma dair güncelliğini yitirmiş bir zihinsel modele göre yazılmıştı. Korumalı alan denetimi, korumalı alanın kendi teknik şartnamesini denetlemiş oldu ve bu ipin ucunu çekmek bizi önemli bir yere götürdü.</p>
<h2 id="webgl2-sorusunun-dogru-yanıtı" tabindex="-1">WebGL2 sorusunun doğru yanıtı <a class="header-anchor" href="#webgl2-sorusunun-dogru-yanıtı" aria-label="Permalink to &quot;WebGL2 sorusunun doğru yanıtı&quot;"></a></h2>
<p>Bağlam oluşturma işlemini olduğu gibi bırakmak, bariz bir devam sorusu doğurdu: Motorumuz WebGL2 gerektiriyorsa oyunlar yalnızca WebGL1'e sahip WeChat cihazlarında bozulur mu? Bu sorunun peşine düşmek, platformun minimum işleme kapasitesi hakkında şimdiye kadarki en net tabloyu ortaya çıkardı; kaynaklarıyla birlikte durum şöyle.</p>
<p>Android'de WeChat'in mini oyun çalışma zamanı, güncel herhangi bir temel kitaplıkta WebGL2 sunuyor ve alttaki GLES3 donanımı fiilen evrensel durumda. Asıl mesele iOS. WeChat'in <a href="https://wechat-miniprogram.github.io/minigame-unity-webgl-transform/Design/WebGL2.html" target="_blank" rel="noreferrer">WebGL2 desteğine</a> ve <a href="https://developers.weixin.qq.com/minigame/dev/guide/performance/perf-high-performance-plus.html" target="_blank" rel="noreferrer">yüksek performans+ moduna</a> ilişkin kendi mühendislik belgeleri, iPhone'da WebGL2'nin yalnızca güncel bir WeChat istemcisi (8.0.45 ve üzeri, iOS 14'te daha yüksek) ve fiilen iOS 15.5 veya üzerini gerektiren yüksek performans+ çalışma zamanında düzgün biçimde kullanılabildiğini açıkça belirtiyor. Tencent'in kendi tanımına göre düz yüksek performans modu WebGL2'yi &quot;daha fazla sorunla&quot; çalıştırıyor ve normal iOS çalışma zamanında WebGL2 hiç bulunmuyor.</p>
<p>Asıl tehlikeli olan, hatanın ortaya çıkış biçimi. Desteklenmeyen ortamlarda <code>getContext('webgl2')</code>, null yerine truthy ama bozuk bir bağlam döndürebiliyor; geliştiriciler <a href="https://developers.weixin.qq.com/community/develop/doc/000aee72868a381d6c261686651c00" target="_blank" rel="noreferrer">Tencent'ten doğrudan düzeltmesini istediği</a> bir davranış bu. Dönüş değerine güvenen bir oyun burada temiz biçimde hata vermiyor. Bozuk grafikler veya sessiz bir siyah ekran oluşturuyor.</p>
<p>Bunu üç katmanda ele alıyoruz. Korumalı alan, kendi motorumuzla çatışacağı için WebGL2 bağlam oluşturma işlemini olduğu gibi bırakıyor. Üretim profili artık her oyunda bir açılış kapısı bulunmasını şart koşuyor: Renderer oluşturma işlemi try/catch içine alınıyor, ardından işlevsel bir kontrol yapılıyor (<code>typeof gl.createVertexArray === 'function'</code>; yalancı bir bağlamda bulunmayacak, yalnızca WebGL2'ye özgü bir özellik) ve başarısızlık durumunda boş ekran yerine canvas üzerine çizilmiş, kullanıcı dostu bir &quot;lütfen WeChat'i güncelleyin&quot; mesajı gösteriliyor. Bu, Unity'den dönüştürülen mini oyunların kullandığı kalıbın aynısı; bu yüzden gerçek dünyada siyah ekranlar yerine yükseltme istemleri görüyorsunuz. Dışa aktarıcı hazır olduğunda da yetenekli yolun varsayılan olması için <code>game.json</code> içinde yüksek performans+ modunu sabitleyecek.</p>
<p>WebGL2 taban çizgisinin kitle üzerindeki maliyeti nedir? Yaklaşık olarak iOS 15.5'in altındaki veya 8.0.45'ten eski WeChat istemcilerini kullanan kullanıcılar; 2026'da düşük tek haneli yüzdeler, ancak eski cihazlarda yoğunlaşıyor ve bu bazı oyun türleri için diğerlerinden daha önemli. Gerçek dağıtım verileri bir gün bu uzun kuyruğun peşinden gitmeye değdiğini gösterirse ucuz bir kaçış yolunu hazır tutuyoruz: WeChat profilini WebGL1'i destekleyen son sürüm olan three r162'ye sabitlemek. Profil oyunları yalnızca kararlı temel API'lere dokunduğu için sürüm düşürmek, veriler gerektirene kadar bilinçli olarak kullanılmadan bekletilen tek satırlık bir import map değişikliğinden ibaret.</p>
<h2 id="model-ile-donguyu-kapatmak" tabindex="-1">Model ile döngüyü kapatmak <a class="header-anchor" href="#model-ile-donguyu-kapatmak" aria-label="Permalink to &quot;Model ile döngüyü kapatmak&quot;"></a></h2>
<p>Yapay zekâ öncelikli bir ürün için bunu geliştirmeye değer kılan kısım şu. Her derlemeden sonra oluşturucunun ajanı, oyunun konsolunu okuyan ve açılışın tamamlanmasını bekleyen bir aracı çağırıyor. Yakalama betiği <code>console.error</code> çıktılarını bu akışa iletiyor. Dolayısıyla bir <code>[wechat-strict]</code> ihlali, insanın kaydırıp geçebileceği bir uyarı değildir. Modelin bir derlemenin tamamlandığını ilan etmeden önce zaten kontrol ettiği kanala, aynı tur içinde ve çözümü mesajda açıkça yazılmış hâlde ulaşır.</p>
<p>Üretim profili son boşluğu tek bir talimatla kapatıyor: Her <code>[wechat-strict]</code> mesajını derlemeyi bozan bir hata olarak ele al, nedenini düzelt ve test düzeneğini hiçbir zaman tespit etmeye veya atlatmaya çalışma. Yalnızca korumalı alan kapalıyken çalışan bir oyun, dışa aktarımdan sonra başarısız olacak bir oyundur ve modele tam olarak bu söylenir.</p>
<p>Korumalı alan böylece muğlak bir uyumluluk sorununu (&quot;model on dört kuralın tümüne uydu mu?&quot;), sistemin zaten iyi olduğu hata ayıklama döngüsüne (&quot;konsolda bir hata var, düzelt&quot;) dönüştürüyor.</p>
<h2 id="tarayıcının-simule-edemeyecekleri" tabindex="-1">Tarayıcının simüle edemeyecekleri <a class="header-anchor" href="#tarayıcının-simule-edemeyecekleri" aria-label="Permalink to &quot;Tarayıcının simüle edemeyecekleri&quot;"></a></h2>
<p>Dürüstlük bölümü. Bu korumalı alan, tahminimize göre bir taşıma işlemini bozan sorunların büyük çoğunluğunu oluşturan API yüzeyi ihlallerini yakalıyor. Şunları yakalayamaz: gerçek bir telefondaki performans, iOS'un JavaScript'i JIT olmadan çalıştırması, WeChat'in WebGL uygulamasına özgü tuhaflıklar veya dosya uzantılarının ötesindeki codec davranışı farkları. Bunlar gerçek çalışma zamanını gerektiriyor.</p>
<p>Bu nedenle korumalı alan üç halkanın ilki. İkinci halka, dışa aktarıcımız WeChat DevTools projeleri üretmeye başladığında, DevTools CLI ve miniprogram-automator aracılığıyla başsız olarak yönetilen resmî simülatör olacak: Dışa aktarılan paketi başlat, ilk karenin işlendiğini doğrula, bir dokunma işlemini betikle. Üçüncü halka ise önizleme QR kodları ve fiziksel telefonlarda uzaktan hata ayıklamadan oluşan resmî cihaz yolu; başka hiçbir şeyin ortaya çıkaramadığı gerçekler burada yaşar. Her halka öncekinden daha yavaş ve gerçeğe daha yakındır; her birinin görevi, bir sonrakine gitme ihtiyacını azaltmaktır.</p>
<p>Modu denemek isterseniz <a href="/tr/create.html">Game Creator</a> içindeki &quot;WeChat mini oyun modu&quot; anahtarını kullanabilirsiniz. Tüm bunların pazar ve mevzuat bağlamı için <a href="/tr/blog/2026-07-19-wechat-mini-games-guide-for-developers-outside-china.html">WeChat'in yarım milyar oyuncusuna ulaşma saha rehberimize</a> göz atın.</p>
<h2 id="kaynaklar" tabindex="-1">Kaynaklar <a class="header-anchor" href="#kaynaklar" aria-label="Permalink to &quot;Kaynaklar&quot;"></a></h2>
<ul>
<li><a href="https://developers.weixin.qq.com/minigame/dev/guide/runtime/js-support.html" target="_blank" rel="noreferrer">WeChat resmî belgeleri: Mini oyunlarda JavaScript desteği</a></li>
<li><a href="https://developers.weixin.qq.com/minigame/en/dev/guide/best-practice/adapter.html" target="_blank" rel="noreferrer">WeChat resmî belgeleri: Adaptör katmanı</a></li>
<li><a href="https://developers.weixin.qq.com/minigame/dev/guide/performance/perf-high-performance-plus.html" target="_blank" rel="noreferrer">WeChat resmî belgeleri: Yüksek performans+ modu</a></li>
<li><a href="https://wechat-miniprogram.github.io/minigame-unity-webgl-transform/Design/WebGL2.html" target="_blank" rel="noreferrer">WeChat mühendislik belgeleri: Mini oyunlarda WebGL2 işleme desteği</a></li>
<li><a href="https://github.com/wechat-miniprogram/minigame-unity-webgl-transform/blob/main/Design/iOSOptimization.md" target="_blank" rel="noreferrer">WeChat mühendislik belgeleri: iOS yüksek performans ve yüksek performans+ modları</a></li>
<li><a href="https://developers.weixin.qq.com/community/develop/doc/000aee72868a381d6c261686651c00" target="_blank" rel="noreferrer">WeChat geliştirici topluluğu: Bozuk webgl2 bağlamları null döndürmelidir</a></li>
<li><a href="https://developers.weixin.qq.com/miniprogram/en/dev/devtools/auto/" target="_blank" rel="noreferrer">WeChat resmî belgeleri: miniprogram-automator</a></li>
<li><a href="https://github.com/mrdoob/three.js/releases/tag/r163" target="_blank" rel="noreferrer">Three.js r163 sürüm notları (WebGL1 desteği kaldırıldı)</a></li>
</ul>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/wechat-strict-sandbox-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[WeChat mini oyunları: doğrudan yayınlayamayacağınız en büyük anında oyun pazarı]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-07-19-wechat-mini-games-guide-for-developers-outside-china</link>
            <guid>https://app.cinevva.com/tr/blog/2026-07-19-wechat-mini-games-guide-for-developers-outside-china</guid>
            <pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Aylık 500 milyon oyuncu, bir yılda ikiye katlanarak 5,6 milyar dolara ulaşan bir pazar ve web oyununuzun yalnızca bir URL ile erişemeyeceği bir platform. WeChat mini oyunlarının gerçekte ne olduğu, Çin dışındaki bir geliştirici olarak karşılaşacağınız düzenlemeler, lisans gerektirmeyen tek para kazanma yolu ve Cinevva'nın yeni mini oyun modunun bu tabloya nasıl uyduğu.]]></description>
            <content:encoded><![CDATA[<h1 id="wechat-mini-oyunları-dogrudan-yayınlayamayacagınız-en-buyuk-anında-oyun-pazarı" tabindex="-1">WeChat mini oyunları: doğrudan yayınlayamayacağınız en büyük anında oyun pazarı <a class="header-anchor" href="#wechat-mini-oyunları-dogrudan-yayınlayamayacagınız-en-buyuk-anında-oyun-pazarı" aria-label="Permalink to &quot;WeChat mini oyunları: doğrudan yayınlayamayacağınız en büyük anında oyun pazarı&quot;"></a></h1>
<p><em><a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<img src="https://cdn.cinevva.com/blog/wechat-mini-games-market-hero.jpg" alt="Onay mührü bulunan bir kapının önünde duran mini oyunu gösteren bir akıllı telefon; yanında damgalı bir belge ve madeni paralar" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Web oyunları geliştiriyorsanız, mobil desteğiniz ne kadar iyi olursa olsun oyunlarınızın erişemeyeceği, aylık yarım milyar oyuncuya sahip bir pazar var. Bu pazar WeChat'in içinde yer alıyor, geçen yıl geliri neredeyse ikiye katlandı ve buraya girmek hem teknik bir portlama sürecini hem de Batılı geliştiricilerin çoğunun hiç duymadığı düzenleyici bir süreci gerektiriyor.</p>
<p>Buna yönelik çözümümüzün ilk parçasını kısa süre önce kullanıma sunduk: Cinevva Game Creator'da deneysel bir <a href="/tr/news/2026-07-19-wechat-mini-game-mode.html">WeChat mini oyun modu</a>. Bu yazıda konuyu daha ayrıntılı ele alıyoruz: platformun gerçekte ne olduğunu, kuralların neler olduğunu ve Çin dışındaki bir geliştirici için gerçekçi bir yolun nasıl göründüğünü anlatıyoruz.</p>
<h2 id="kucumsenmesi-kolay-rakamlarla-pazar" tabindex="-1">Küçümsenmesi kolay rakamlarla pazar <a class="header-anchor" href="#kucumsenmesi-kolay-rakamlarla-pazar" aria-label="Permalink to &quot;Küçümsenmesi kolay rakamlarla pazar&quot;"></a></h2>
<p>WeChat, 1,4 milyarı aşan toplam aylık aktif kullanıcı tabanıyla Çin'in varsayılan iletişim uygulamasıdır. Mini oyunlar, dokunup anında oynanan deneyimler olarak uygulamanın içinde yer alır: kurulum veya uygulama mağazası gerekmez; bir sohbet mesajından, aramadan ya da paylaşımdan başlatılırlar. Tencent, 2025'te mini oyun platformunun aylık 500 milyon aktif kullanıcıyı aştığını, bir milyardan fazla kayıtlı oyuncuya ve yaklaşık 500.000 geliştiriciye ulaştığını duyurdu.</p>
<p>Ortada ciddi bir gelir de var. Çin'in mini oyun pazarı 2024'te yıllık %99 artışla 39,8 milyar yuan, yani yaklaşık 5,6 milyar dolar gelir elde etti. Bunun yaklaşık %69'u uygulama içi satın alımlardan, %31'i ise reklamlardan geldi. Bu dağılımı aklınızda tutun; çünkü reklam payı yabancı geliştiriciler açısından son derece önemli.</p>
<p>Ölçek açısından bakıldığında, yalnızca bir yıllık mini oyun geliri; Poki, CrazyGames ve itch.io gibi platformların üzerinde yer aldığı küresel web oyunları pazarının tamamıyla karşılaştırılabilir düzeyde. Bu, niş bir alan değil. Kendi kuralları olan paralel bir evren.</p>
<h2 id="web-oyununuzu-neden-oylece-portlayamazsınız" tabindex="-1">Web oyununuzu neden öylece portlayamazsınız? <a class="header-anchor" href="#web-oyununuzu-neden-oylece-portlayamazsınız" aria-label="Permalink to &quot;Web oyununuzu neden öylece portlayamazsınız?&quot;"></a></h2>
<p>Bir WeChat mini oyunu, web oyununa benzer ve JavaScript ile yazılır. Bu nedenle doğal varsayım, portlama işinin bir hafta sonunda tamamlanabileceğidir. Öyle değildir ve bunun nedenleri yapısaldır.</p>
<p>Mini oyunlar tarayıcıda çalışmaz. Size bir canvas, WebGL ve bir dizi <code>wx.*</code> API'si sağlayan WeChat'in kendi çalışma zamanı ortamında çalışırlar. DOM ve CSS yoktur. Oyununuzdaki her düğmenin, can göstergesinin, menünün ve iletişim kutusunun canvas üzerine çizilmesi ve tıklama/dokunma algılamasının kendi kodunuz tarafından yapılması gerekir. Oyununuzun kullanıcı arayüzü HTML ise bu arayüz WeChat'te mevcut değildir.</p>
<p>Girdi modeli de farklıdır. Pointer Lock ve fare yoktur; bu nedenle masaüstü tarzı bir FPS kamerası, sürükleyerek bakma kontrolüne dönüştürülmelidir. Birincil cihazda klavye de yoktur. Oyununuz yalnızca dokunmatik kontrollerle tamamen oynanamıyorsa oynanabilir değildir.</p>
<p>Ana paket için 4 MB, alt paketlerle birlikte toplamda 20 MB sınırı vardır ve oyununuzun çalıştırdığı her şeyin incelenen paketin içinde bulunması gerekir. Bu da bizi tüm platformu şekillendiren kurala getiriyor: WeChat, dinamik olarak çalıştırılan kodu yasaklar. <code>eval</code>, <code>new Function</code>, çalışma zamanında JavaScript indirme yoktur ve Tencent, bu kısıtlamayı aşmak için JS yorumlayıcıları yerleştiren uygulamaları aktif olarak reddeder. Her oyun, kapalı ve incelenmiş bir yapıttır.</p>
<p>Bu son kural nedeniyle, bizim ya da başka birinin web oyunlarını WeChat'e aktaran bir “portal uygulaması” hiçbir zaman olmayacak. Her oyun, bağımsız bir mini oyun olarak ayrı ayrı incelemeden geçer. Bu alanda size yardımcı olmak isteyen herhangi bir aracın temiz, kendi kendine yeten ve yalnızca canvas kullanan paketler üretmenize yardımcı olması gerekir. Yeni modumuzu bu tasarım kısıtı etrafında geliştirdik.</p>
<h2 id="duzenleyici-gerceklik" tabindex="-1">Düzenleyici gerçeklik <a class="header-anchor" href="#duzenleyici-gerceklik" aria-label="Permalink to &quot;Düzenleyici gerçeklik&quot;"></a></h2>
<p>Şimdi kodla hiçbir ilgisi olmayan kısma geçelim. Çin, oyunları yayımlanmış medya olarak düzenler ve gereklilikler katmanlar hâlinde birikir. Bunların hiçbiri gizli değil, ancak Çin dışında neredeyse hiç kimse bunları açıkça anlatmıyor. Dolayısıyla gereklilikler şöyle:</p>
<p><strong>ICP kaydı.</strong> 2023'ün sonlarından bu yana her mini program ve mini oyun, ICP kaydını tamamlamak zorunda (WeChat platformu üzerinden Çin makamlarına yapılan bir kayıt). Bu süreç genellikle bir ila üç hafta sürer.</p>
<p><strong>Her oyun için telif hakkı kanıtı.</strong> Her oyun için ya yazılım telif hakkı kaydı ya da daha hızlı alınabilen elektronik telif hakkı sertifikası gerekir. Elektronik yöntem, oyun başına yaklaşık on ila on beş gün sürer. Çok sayıda küçük oyun yayımlamayı planlıyorsanız bunun her oyun için ayrı bir maliyet oluşturduğunu hesaba katmanız gerekir.</p>
<p><strong>Ücret alıyorsanız banhao.</strong> Uygulama içi satın alım içeren her oyun, Ulusal Basın ve Yayın İdaresi'nden, yaygın adıyla banhao olarak bilinen bir oyun yayın lisansı almalıdır. Yabancı bir geliştirici açısından bu süreci iki gerçek tanımlar. Birincisi, yalnızca Çinli bir şirket başvurabilir. İkincisi, ithal oyunlar ayrı ve daha yavaş bir onay sürecinden geçer; bu süreç işlediğinde tarihsel olarak altı ila sekiz ay sürmüştür. Uygulamada Çin dışındaki bir geliştirici, para kazandıran bir oyunu ancak başvuruyu yapan, lisansı elinde bulunduran ve oyunu işleten lisanslı bir yerel yayıncı aracılığıyla yayımlayabilir.</p>
<p><strong>Reklamlı ücretsiz oyun istisnası.</strong> Hiçbir türde ödeme içermeyen ücretsiz bir oyun için banhao gerekmez. Oyun yine de WeChat'in kendi reklam bileşenleri aracılığıyla gelir elde edebilir. Unutmayın: reklamlar, 2024'teki mini oyun gelirlerinin %31'ini, yani 1,7 milyar dolardan fazlasını oluşturdu. Bu, küçük bir geliştiricinin Çinli bir kurumsal ortak olmadan ilerleyebileceği tek yoldur ve pazarın uzun kuyruğundaki oyunların büyük bir bölümü tam olarak bu şekilde faaliyet gösterir.</p>
<p>Dürüstçe özetlemek gerekirse: ücretsiz ve reklam destekli bir mini oyun yayımlamak, haftalarla ölçülen bir evrak sürecidir. Para kazandıran bir oyun yayımlamak ise dikkatle seçmeniz gereken bir ortakla birlikte aylarla ölçülen bir iş geliştirme projesidir.</p>
<h2 id="cinevva-nın-mini-oyun-modu-bu-konuda-ne-yapıyor" tabindex="-1">Cinevva'nın mini oyun modu bu konuda ne yapıyor? <a class="header-anchor" href="#cinevva-nın-mini-oyun-modu-bu-konuda-ne-yapıyor" aria-label="Permalink to &quot;Cinevva'nın mini oyun modu bu konuda ne yapıyor?&quot;"></a></h2>
<p>Evrak işlemlerinizi sizin yerinize yapamayız. Ancak daha ilk istemden itibaren oyunun kendisinin hiçbir zaman engel oluşturmamasını sağlayabiliriz.</p>
<p>WeChat mini oyun modu açıkken Game Creator, taşınabilir alt kümenin sınırları içinde oyun oluşturur: HTML yerine canvas üzerinde çizilen kullanıcı arayüzü; pointer lock yerine sürükleyerek bakma özelliğine sahip, dokunmatik öncelikli kontroller; gerçek WebGL2 desteğinin bulunmadığı durumlarda uygun bir yedek ekran sunan ve orta segment telefonlara göre bütçelenmiş render işlemi; yalnızca mp3 seslerini destekleyen katı bir varlık bütçesi; dinamik import ve çalışma zamanında kod yükleme olmaması; ayrıca WeChat'in depolama API'sine eşlenen kayıtlar. Oyun, diğer tüm Cinevva oyunları gibi tarayıcıda çalışmaya devam eder; böylece oyunu normal şekilde oluşturabilir, test edebilir ve paylaşabilirsiniz. Tek fark, portlama işleminden sağ çıkabilecek alt kümenin sınırları içinde kalmasıdır.</p>
<p>Bu oyunlardan birinden, WeChat DevTools'ta doğrudan açılmaya hazır bir proje üreten dışa aktarma aracı üzerinde çalışmalar devam ediyor. Sıralamayı bilinçli olarak bu şekilde yaptık. Bir dışa aktarma aracı kodunuzu paketleyebilir, ancak HTML ile hazırlanmış bir HUD'ı ortadan kaldıramaz veya yalnızca fareyle çalışan kontrolleri yeniden tasarlayamaz. Taşınabilirlik, oyunun nasıl oluşturulduğuna bağlı bir özelliktir; bu nedenle önce modu geliştirdik.</p>
<p><a href="/tr/guides/wechat-mini-game-engines.html">Mini oyun motorları rehberimizi</a> veya <a href="/tr/guides/publish-wechat-douyin-mini-games.html">WeChat ve Douyin için yayınlama kılavuzunu</a> okuduysanız burada üretim sürecine uygulanan yaklaşımı biliyorsunuzdur: en ucuz portlama, hiç yapmak zorunda kalmadığınızdır.</p>
<h2 id="cin-dısındaki-bir-gelistirici-icin-gercekci-bir-yol-haritası" tabindex="-1">Çin dışındaki bir geliştirici için gerçekçi bir yol haritası <a class="header-anchor" href="#cin-dısındaki-bir-gelistirici-icin-gercekci-bir-yol-haritası" aria-label="Permalink to &quot;Çin dışındaki bir geliştirici için gerçekçi bir yol haritası&quot;"></a></h2>
<p>İlk oyun için bizim gerçekten yapacağımız şey şu olurdu: küçük ve kısa oturumlu bir oyun geliştirmek. Çünkü platform bunları ödüllendiriyor; başarılı oyunlar destansı maceralar değil, oyuncuya “bir tur daha” dedirten oyunlardır. Dikey ekranı ve yalnızca dokunmatik kontrolleri önceliklendirerek tasarım yapın. Oyunu reklamlı ve ücretsiz olarak yayımlayın; böylece Çinli oyuncuların oyununuzu isteyip istemediğini öğrenirken banhao sürecinin dışında kalırsınız. ICP kaydını ve elektronik telif hakkı sertifikasını kendiniz halledin; bunlar zahmetlidir ancak yönetilebilir. Yalnızca oyun oyuncuları elde tutabildiğini kanıtladığında ve gerçek bir uygulama içi satın alım potansiyeli gördüğünüzde, elinizde verilerle yayıncı görüşmelerine başlayın. Çünkü oyununuz zaten bir kitleye sahipse yayıncıyla yapılacak müzakere çok farklı ilerler.</p>
<p>Yeni mod, tam olarak bu stratejiyi desteklemek için geliştirildi: aday oyunları üretmenin maliyetini neredeyse sıfıra indirmek ve böylece düzenleyici harcamalar başlamadan önce neyin işe yaradığını keşfedebilmenizi sağlamak.</p>
<p>Bu pazara girmeyi planlıyorsanız mod henüz şekillenme aşamasındayken sizden gerçekten haber almak isteriz. <a href="/tr/contact.html">Bizimle iletişime geçin</a> veya <a href="/tr/create.html">Game Creator'da</a> oyun geliştirmeye başlayın.</p>
<h2 id="kaynaklar" tabindex="-1">Kaynaklar <a class="header-anchor" href="#kaynaklar" aria-label="Permalink to &quot;Kaynaklar&quot;"></a></h2>
<ul>
<li><a href="https://www.pocketgamer.biz/wechat-mini-games-crosses-500m-monthly-active-users-as-tencent-shifts-focus-to-retention/" target="_blank" rel="noreferrer">PocketGamer.biz: WeChat Mini Games aylık 500 milyon aktif kullanıcıyı aştı</a></li>
<li><a href="https://www.ichongqing.info/2025/07/02/wechat-mini-games-hits-1b-users-becomes-global-magnet-for-game-developers/" target="_blank" rel="noreferrer">iChongqing: WeChat Mini Games 1 milyar kullanıcıya ulaştı</a></li>
<li><a href="https://www.oreateai.com/blog/2025-wechat-mini-game-ecosystem-development-report-indepth-analysis-of-market-trends-and-typical-cases/7f0b62beb192f52409ae047d0bbae184" target="_blank" rel="noreferrer">Oreate: 2025 WeChat mini oyun ekosistemi gelişim raporu (2024 pazar verileri)</a></li>
<li><a href="https://developers.weixin.qq.com/minigame/dev/guide/runtime/js-support.html" target="_blank" rel="noreferrer">Resmî WeChat belgeleri: JavaScript desteği ve dinamik kod yasağı</a></li>
<li><a href="https://developers.weixin.qq.com/minigame/en/dev/guide/best-practice/adapter.html" target="_blank" rel="noreferrer">Resmî WeChat belgeleri: tarayıcı tarzı kod için uyarlama katmanı</a></li>
<li><a href="https://nikopartners.com/game-regulations-in-china-everything-you-need-to-know/" target="_blank" rel="noreferrer">Niko Partners: Çin'deki oyun düzenlemeleri</a></li>
<li><a href="https://clearlaunch.dev/regulations/china-game-approval" target="_blank" rel="noreferrer">ClearLaunch: Çin'de oyun onayı (banhao) gereklilikleri ve yaptırımlar</a></li>
<li><a href="https://appinchina.co/blog/the-complete-guide-to-wechat-mini-games/" target="_blank" rel="noreferrer">AppInChina: kapsamlı WeChat mini oyunları rehberi</a></li>
</ul>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/wechat-mini-games-market-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Rekor kârlar, rekor işten çıkarmalar: oyun geliştiriciler 2026'da gerçekte nasıl yeniden işe alınıyor?]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-07-02-game-industry-layoffs-getting-rehired</link>
            <guid>https://app.cinevva.com/tr/blog/2026-07-02-game-industry-layoffs-getting-rehired</guid>
            <pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Oyun sektörü geçen yıl 195,6 milyar dolar kazandı ama yine de çalışanlarının üçte birini işten çıkardı. İşten çıkarmalara, iş piyasasının neden bu kadar acımasız hâle geldiğine ve insanları gerçekten yeniden işe döndüren tek şeye dair dürüst veriler burada.]]></description>
            <content:encoded><![CDATA[<h1 id="rekor-karlar-rekor-isten-cıkarmalar-oyun-gelistiriciler-2026-da-gercekte-nasıl-yeniden-ise-alınıyor" tabindex="-1">Rekor kârlar, rekor işten çıkarmalar: oyun geliştiriciler 2026'da gerçekte nasıl yeniden işe alınıyor? <a class="header-anchor" href="#rekor-karlar-rekor-isten-cıkarmalar-oyun-gelistiriciler-2026-da-gercekte-nasıl-yeniden-ise-alınıyor" aria-label="Permalink to &quot;Rekor kârlar, rekor işten çıkarmalar: oyun geliştiriciler 2026'da gerçekte nasıl yeniden işe alınıyor?&quot;"></a></h1>
<p><em><a href="/tr/about.html">Mariana Muntean</a>, Cinevva CEO'su</em></p>
<p>Oyun sektörü 2025'te yaklaşık <strong>195,6 milyar dolar</strong> kazandı. Şimdiye kadarki en iyi yılıydı. Aynı dönemde yaklaşık <strong>her üç geliştiriciden biri işini kaybetti</strong>.</p>
<p>Bu iki cümleyi tekrar okuyun. Bir arada var olmamaları gerekirdi ama geldiğimiz nokta bu. Son iki yılda işten çıkarıldıysanız, bu hesabın bir durgunluk gibi hissettirmediğini zaten biliyorsunuz. Daha çok, denize düşen sizken size teknenin gayet iyi olduğunun söylenmesine benziyor.</p>
<p>Ben de bağımsız bir geliştiriciydim. Arkadaşlarımın on sekiz ay içinde üç kez “iş arıyor” rozetini paylaştığını gördüm. Dolayısıyla bu, kenardan ortaya atılmış iddialı bir yorum değil. Gerçekte ne olduğuna, ardından da şu anda iş arıyorsanız en önemli olan kısma bakalım: İnsanların gerçekten yeniden işe alınmasını sağlayan şey ne?</p>
<h2 id="rakamlar-hissedilenden-de-kotu" tabindex="-1">Rakamlar, hissedilenden de kötü <a class="header-anchor" href="#rakamlar-hissedilenden-de-kotu" aria-label="Permalink to &quot;Rakamlar, hissedilenden de kötü&quot;"></a></h2>
<p>İşten çıkarma dalgası 2022'de başladı ve aslında hiç durmadı. Bu, kötü geçen tek bir çeyrek değil. Dört yıllık yapısal bir yeniden yapılanma.</p>
<table tabindex="0">
<thead>
<tr>
<th>Yıl</th>
<th>Oyun sektöründe kaybedilen işler</th>
</tr>
</thead>
<tbody>
<tr>
<td>2022</td>
<td>~8.500</td>
</tr>
<tr>
<td>2023</td>
<td>~10.500</td>
</tr>
<tr>
<td>2024</td>
<td>~14.600 (zirve)</td>
</tr>
<tr>
<td>2025</td>
<td>~9.200</td>
</tr>
<tr>
<td>2026</td>
<td>2025'in üzerinde seyrediyor, tahmin ~11.580</td>
</tr>
</tbody>
</table>
<p>Hangi takip kaynağına güvendiğinize bağlı olarak bu dönem boyunca yaklaşık <strong>44.000 ila 55.000 iş ortadan kalktı</strong> (<a href="https://en.wikipedia.org/wiki/2022%E2%80%932026_video_game_industry_layoffs" target="_blank" rel="noreferrer">Wikipedia</a>, <a href="https://gamesbeat.com/global-gamings-workforce-grew-0-6-in-4-years-but-north-americas-shrank-11-5-amir-satvat/" target="_blank" rel="noreferrer">GamesBeat</a>). GDC'nin 2.300'den fazla profesyonelle yaptığı ankete dayanan 2026 Oyun Sektörünün Durumu raporu, <strong>dünya genelindeki geliştiricilerin %28'inin son iki yılda işini kaybettiğini, ABD'de ise bu oranın %33 olduğunu</strong> ortaya koydu (<a href="https://www.gamesindustry.biz/gdc-survey-reveals-layoffs-up-6-36-of-industry-using-ai-and-overwhelming-support-for-unionisation-in-the-us" target="_blank" rel="noreferrer">GamesIndustry.biz</a>). Katılımcıların yarısı, mevcut ya da en son çalıştıkları işverenin son on iki ay içinde işten çıkarma yaptığını söyledi.</p>
<p>En ağır darbeyi Kuzey Amerika aldı. Bu sektörün düzenli bir nüfus sayımına en yakın kaynağı olan Amir Satvat'ın iş gücü takibi, küresel çalışan sayısı neredeyse hiç değişmezken bölgesel iş gücünün küçüldüğünü gösteriyor. <strong>Kuzey Amerika'daki oyun sektörü çalışanlarının yaklaşık %19'u bu durumdan etkilendi</strong> (<a href="https://gamesbeat.com/global-gamings-workforce-grew-0-6-in-4-years-but-north-americas-shrank-11-5-amir-satvat/" target="_blank" rel="noreferrer">GamesBeat</a>).</p>
<p>İşe alımlar “toparlanmış” olsa bile iş aramanın neden imkânsız gibi hissettirdiğini açıklayan istatistik şu: Satvat, bu dönem boyunca yaklaşık <strong>288.000 kişinin oyun sektöründe iş aradığını</strong> tahmin ediyor. Yeni mezunlar, işten çıkarılmış deneyimli çalışanlar ve kariyer değiştirenler; hepsi aynı sınırlı sayıdaki ilana başvuruyor. Artık bir iş ilanına özgeçmiş gönderdiğinizde bir düzine insanla yarışmıyorsunuz. Bir stadyum dolusu insanla yarışıyorsunuz.</p>
<h2 id="rekor-bir-yıl-neden-yine-de-isten-cıkarmalarla-sonuclandı" tabindex="-1">Rekor bir yıl neden yine de işten çıkarmalarla sonuçlandı? <a class="header-anchor" href="#rekor-bir-yıl-neden-yine-de-isten-cıkarmalarla-sonuclandı" aria-label="Permalink to &quot;Rekor bir yıl neden yine de işten çıkarmalarla sonuçlandı?&quot;"></a></h2>
<p>Gelir ortadan kaybolmadı. Belirli ellerde yoğunlaştı. Giderek azalan sayıdaki dev canlı servis oyunu, gelirin orantısız ölçüde büyük bir bölümünü alıyor; bu da daha az yeni yatırım, daha az yeni ekip ve eskiden yetenekleri bünyesine katan orta ölçekli projelerin daha az olması anlamına geliyor. Oyun sektöründeki özel yatırımlar 2025'te yarıdan fazla düştü (<a href="https://respawn.outlookindia.com/gaming/gaming-news/record-profits-record-layoffs-inside-gamings-2026-paradox" target="_blank" rel="noreferrer">Outlook Respawn</a>). Stüdyolar da her zamanki gibi karşılık verdi: Projeleri iptal ettiler, bütçeleri kıstılar ve işleri yüklenicilere devrettiler.</p>
<p>Yani kâr da gerçek, acı da gerçek ve ikisi de aynı nedene işaret ediyor. Gelen kutunuzu sürekli yenileyen kişi sizken bu pek teselli sayılmaz ama size yararlı bir şey söylüyor. Bu piyasa, 2021'e geri dönmeyi beklemiyor. Yeniden işe alınan insanlar da bunu beklemiyor. İşe alımların artık gerçekte nasıl yürüdüğüne uyum sağlıyorlar.</p>
<h2 id="is-piyasasının-bir-ozgunluk-sorunu-var" tabindex="-1">İş piyasasının bir özgünlük sorunu var <a class="header-anchor" href="#is-piyasasının-bir-ozgunluk-sorunu-var" aria-label="Permalink to &quot;İş piyasasının bir özgünlük sorunu var&quot;"></a></h2>
<p>Bugün adayları değerlendiren herhangi biriyle konuşun, aynı şikâyeti duyarsınız. Başvuruların altında eziliyorlar. İş ilanları birkaç saat içinde yüzlerce başvuru alıyor ve bunların çoğu aynı kişi tarafından yazılmış gibi görünüyor; çünkü bir bakıma aynı araç tarafından yazıldılar.</p>
<p>İşe alım uzmanları TechRound'a, asıl zorluğun yapay zekâ kullanımını tespit etmek olmadığını; “iyi optimize edilmiş, bağlamdan yoksun içerik” selinin pozisyonu gerçekten anlayan kişiyi bulmayı neredeyse imkânsız hâle getirdiğini söyledi (<a href="https://techround.co.uk/news/linkedin-ai-slop-content-recruitment-process/" target="_blank" rel="noreferrer">TechRound</a>). LinkedIn de artık genel geçer, yapay zekâ tarafından yazılmış içerikleri vakaların yaklaşık %94'ünde tespit ettiğini ve bunların erişimini sessizce sınırladığını söylüyor (<a href="https://techround.co.uk/news/linkedin-ai-slop-content-recruitment-process/" target="_blank" rel="noreferrer">TechRound</a>).</p>
<p>Buna tersinden bakınca, tüm bu yazının en iyi haberi ortaya çıkıyor. Her şey birbirinin aynısı gibi duyulduğunda, somut olmak bir süper güçtür. Birbirinin aynı cilalı içeriklerle dolu bir akışta gerçek işini ve gerçek düşünce sürecini gösteren kişi yalnızca öne çıkmaz. Gürültünün içindeki tek sinyal hâline gelir.</p>
<h2 id="kanıt-her-seferinde-ciladan-ustundur" tabindex="-1">Kanıt, her seferinde ciladan üstündür <a class="header-anchor" href="#kanıt-her-seferinde-ciladan-ustundur" aria-label="Permalink to &quot;Kanıt, her seferinde ciladan üstündür&quot;"></a></h2>
<p>Özellikle oyun sektöründeki roller için fark yaratan şey daha şık bir PDF değil. Birinin bizzat deneyimleyebileceği kanıttır. 12 yıllık bir işe alım uzmanı bunu açıkça ifade etti: Oynanabilir bir yapı veya demo videosu, başvurunuzdaki neredeyse her şeyden daha fazla katkı sağlar.</p>
<p>Değişim tam olarak bu. Bir özgeçmiş, işe alım uzmanına tasarımdan anladığınızı söyler. Oynanabilir kısa bir bölüm ise bunu 30 ila 90 saniye içinde hissetmesini sağlar. Çalışan bir mekaniği, özgeçmişteki bir maddeyi taklit edebildiğiniz gibi taklit edemezsiniz. İçinde yürünebilen bir seviyeyi, çalışan bir gölgelendiriciyi, gerçekten hareket eden bir iskelet sistemini veya gerçek bir sahneye eşlenmiş etkileşimli bir ses ipucunu taklit edemezsiniz. Etkileşim, ayrıntılı incelemeye dayanabilen bir kanıttır; çünkü arkasında her kararını savunabilen bir kişi vardır.</p>
<p>İşe alım uzmanlarının aslında sınadığı şey de bu son kısımdır. Yapay zekâyla şişirilmiş portföyleri yakalamak için kullandıkları yöntem basit: Çıktıyı değil, süreci sorun. Bir vaka çalışması oluşturan kişi, metinde ne yazdığını anlatabilir ama arkasındaki kararları açıklayamaz. Bu nedenle 2026'nın en güçlü portföylerinin hepsi aynı dört unsuru taşıyor:</p>
<table tabindex="0">
<thead>
<tr>
<th>Katman</th>
<th>Yanıtladığı soru</th>
</tr>
</thead>
<tbody>
<tr>
<td>Bağlam</td>
<td>Proje özeti, platform ve gerçek kısıtlamalar (bütçe, teslim tarihi, teknik sınırlar)</td>
</tr>
<tr>
<td>Katkı</td>
<td>Ekibin yaptıklarına karşılık kişisel olarak nelerin sorumluluğunu üstlendiğiniz</td>
</tr>
<tr>
<td>Kararlar</td>
<td>Yaptığınız tercihler ve neleri koruduğunuz, değiştirdiğiniz ve reddettiğiniz</td>
</tr>
<tr>
<td>Sonuç</td>
<td>Tanımadığınız birinin kontrol edebileceği, ölçülebilir ve doğrulanabilir sonuçlar</td>
</tr>
</tbody>
</table>
<p>“Koruduğunuz, değiştirdiğiniz ve reddettiğiniz” kısmı çoğu insanın atladığı, fakat zevkinizi kanıtlayan bölümdür. Zevk, taklit edilmesi en zor şeydir ve bir stüdyonun satın aldığı şey de tam olarak budur: Olası görünen on fikir arasından doğru olanı seçebilen biri. “Çok şey öğrendim” şeklindeki sonuç bölümünü atlayın. Verdiğiniz kararı ve bunun oyuncuya neden daha iyi hizmet ettiğini gösterin.</p>
<h2 id="yapay-zeka-hakkında-birkac-soz-cunku-bu-sektor-ofkelenme-hakkını-kazandı" tabindex="-1">Yapay zekâ hakkında birkaç söz; çünkü bu sektör öfkelenme hakkını kazandı <a class="header-anchor" href="#yapay-zeka-hakkında-birkac-soz-cunku-bu-sektor-ofkelenme-hakkını-kazandı" aria-label="Permalink to &quot;Yapay zekâ hakkında birkaç söz; çünkü bu sektör öfkelenme hakkını kazandı&quot;"></a></h2>
<p>Yapay zekâ araçları kullanan bir platform yönetiyorum ve bu gerilim yokmuş gibi davranmayacağım. Aynı GDC anketi, <strong>üretken yapay zekânın sektör üzerinde olumsuz etkisi olduğunu düşünen geliştiricilerin oranının iki yıl önceki %18'den bugün %52'ye çıktığını</strong> ve en güçlü karşı çıkışın sanatçılardan, yazarlardan ve programcılardan geldiğini ortaya koydu (<a href="https://www.gamesindustry.biz/gdc-survey-reveals-layoffs-up-6-36-of-industry-using-ai-and-overwhelming-support-for-unionisation-in-the-us" target="_blank" rel="noreferrer">GamesIndustry.biz</a>). İşten yeni çıkarıldıysanız ve size eski işinizin bir bölümünü bir modelin yapabileceği söylendiyse, “portföyün için yapay zekâ kullan” demek tavsiye değil, hakarettir.</p>
<p>O yüzden açıkça söyleyeceğim. Hiç kimse, işe alım uzmanına bir makinenin ürettiği ve kendisinin açıklayamadığı bir şey sunarak işe alınmaz. İş size ait olmalı. Kararlarınız, zanaatınız, sorumluluğunuz. Bir projenin herhangi bir aşamasında araç kullandıysanız bunu söyleyin ve onun üzerine kendi muhakemenizi gösterin: Neyi korudunuz, neyi attınız, verdiğiniz karar oyuncu için neden daha iyiydi? İşe alım yöneticileri, aracın arkasına saklanan kişiye değil, araca yönlendirilmesi gereken bir stajyer gibi davranan kişiye güvenir. Süreciniz konusunda dürüst olmak profesyonellik olarak algılanır ve profesyonellik çoğu zaman yalnızca “yayımlamadan önce sonuçlarını düşündüm” demektir.</p>
<h2 id="kanıtı-nereye-koymalı" tabindex="-1">Kanıtı nereye koymalı? <a class="header-anchor" href="#kanıtı-nereye-koymalı" aria-label="Permalink to &quot;Kanıtı nereye koymalı?&quot;"></a></h2>
<p>Bu konuşmaların çoğu LinkedIn'de başladığı için pratik bir öneri: Akış, dış bağlantıların erişimini ciddi biçimde düşürür ama profilinizdeki Öne Çıkanlar bölümü bunu yapmaz. Bağlantıyı herhangi bir ceza olmadan temiz bir önizleme kartına dönüştüren tek yer burasıdır ve işe alım uzmanlarının ilk baktığı, profilinizin en üst kısmında bulunur. En iyi çalışmanız ilk sırada olacak şekilde üç ila beş öğeyi sabitleyin ve çoğu insanın bunlara telefondan baktığını unutmayın. İlk sıraya, birinin saniyeler içinde açıp deneyimleyebileceği öğeyi koyun.</p>
<p>Hızlı ve dürüst olun. İki saniyeden kısa sürede yüklenen ve tek bir net fikir gösteren demo; takılan veya 404 hatası veren iddialı bir projeden daha iyidir. Bir öğleden sonra otuz portföy inceleyen işe alım uzmanları beklemez ve bozuk bir bağlantı, özensiz bir alışkanlığın göstergesi olarak algılanır.</p>
<h2 id="bunu-neden-onemsiyoruz" tabindex="-1">Bunu neden önemsiyoruz? <a class="header-anchor" href="#bunu-neden-onemsiyoruz" aria-label="Permalink to &quot;Bunu neden önemsiyoruz?&quot;"></a></h2>
<p>Cinevva'da tarayıcı tabanlı, anında oynanabilen oyunlar geliştiriyoruz. Bu da ürettiklerimizin çoğunun, modern bir portföyün tam olarak ihtiyaç duyduğu şey olmasını sağlıyor: İşe alım uzmanının tek bir bağlantı üzerinden, indirmeden ve kurmadan açıp oynayabileceği gerçek çalışmalar. Bu sorunu yakından takip ediyoruz çünkü bundan etkilenen insanlar bizim insanlarımız. İşten çıkarıldıysanız becerileriniz yok olmadı. Piyasa daha gürültülü hâle geldi ve kendinizi kanıtlama biçiminiz değişti.</p>
<p>Eski soru “nerede çalıştın?” idi. Yeni soruysa “bana oynayabileceğim bir şey göster ve onu neden bu şekilde geliştirdiğini anlat.” İkinci soruyu yanıltmak daha zordur ve işi gerçekten yapabilen insanlar için daha iyidir. Eğer siz de onlardan biriyseniz bu piyasa acımasızdır ama kapalı değildir. Güvenebileceği bir kanıt bekliyor.</p>
<hr>
<h2 id="kaynaklar" tabindex="-1">Kaynaklar <a class="header-anchor" href="#kaynaklar" aria-label="Permalink to &quot;Kaynaklar&quot;"></a></h2>
<ul>
<li><a href="https://www.gamesindustry.biz/gdc-survey-reveals-layoffs-up-6-36-of-industry-using-ai-and-overwhelming-support-for-unionisation-in-the-us" target="_blank" rel="noreferrer">GDC 2026 Oyun Sektörünün Durumu: işten çıkarmalar, yapay zekâ ve sendikalaşma</a></li>
<li><a href="https://gamesbeat.com/global-gamings-workforce-grew-0-6-in-4-years-but-north-americas-shrank-11-5-amir-satvat/" target="_blank" rel="noreferrer">GamesBeat: Küresel oyun sektörü iş gücü 4 yılda %0,6 büyürken Kuzey Amerika küçüldü</a></li>
<li><a href="https://en.wikipedia.org/wiki/2022%E2%80%932026_video_game_industry_layoffs" target="_blank" rel="noreferrer">Wikipedia: 2022–2026 video oyunu sektöründeki işten çıkarmalar</a></li>
<li><a href="https://respawn.outlookindia.com/gaming/gaming-news/record-profits-record-layoffs-inside-gamings-2026-paradox" target="_blank" rel="noreferrer">Outlook Respawn: Rekor kârlar, rekor işten çıkarmalar</a></li>
<li><a href="https://www.gamedeveloper.com/business/industry-layoffs-are-seemingly-slowing-but-the-damage-has-already-been-done" target="_blank" rel="noreferrer">Game Developer: İşten çıkarmalar yavaşlıyor ama hasar çoktan oluştu</a></li>
<li><a href="https://techround.co.uk/news/linkedin-ai-slop-content-recruitment-process/" target="_blank" rel="noreferrer">TechRound: LinkedIn, yapay zekâ içeriklerinin istilasıyla karşı karşıya</a></li>
</ul>
<hr>
<p><strong>İlgili içerikler:</strong></p>
<ul>
<li><a href="/tr/blog/2026-01-18-skills-over-degrees.html">İş piyasası dönüşüyor: diplomalardan becerilere</a></li>
<li><a href="/tr/blog/2026-01-18-ai-controversy-and-post-ai-economy.html">Oyunlar için yapay zekâ tartışmaları, güven ve yapay zekâ sonrası ekonomi</a></li>
<li><a href="/tr/blog/2026-02-10-the-intuitive-mind.html">Yapay zekâ çağında sezgisel zihin</a></li>
</ul>
]]></content:encoded>
            <enclosure url="https://app.cinevva.com/img/blog/skills-over-degrees.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Şimdi Oynayabileceğiniz En İyi Ücretsiz Tarayıcı Oyunları (İndirme Gerektirmez)]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-06-30-best-free-browser-games-no-download</link>
            <guid>https://app.cinevva.com/tr/blog/2026-06-30-best-free-browser-games-no-download</guid>
            <pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[İndirmeden veya kurmadan anında oynayabileceğiniz en iyi tarayıcı oyunlarından özenle seçilmiş bir liste. Bulmaca, roguelike, hikâye ve ritim türlerinde en yüksek puanlı bağımsız oyunlar.]]></description>
            <content:encoded><![CDATA[<h1 id="simdi-oynayabileceginiz-en-iyi-ucretsiz-tarayıcı-oyunları-indirme-gerektirmez" tabindex="-1">Şimdi Oynayabileceğiniz En İyi Ücretsiz Tarayıcı Oyunları (İndirme Gerektirmez) <a class="header-anchor" href="#simdi-oynayabileceginiz-en-iyi-ucretsiz-tarayıcı-oyunları-indirme-gerektirmez" aria-label="Permalink to &quot;Şimdi Oynayabileceğiniz En İyi Ücretsiz Tarayıcı Oyunları (İndirme Gerektirmez)&quot;"></a></h1>
<p><em>Cinevva CEO'su <a href="/tr/about.html">Mariana Muntean</a> tarafından</em></p>
<p>Tamam, itch.io'da koca bir haftayı tüketmeyi kesinlikle planlamamıştık. Hızlı bir araştırma olarak başlayan şey... on ikinci saat civarında saymayı bıraktığımız bir sürece dönüştü. Amacımız, hemen oynayabileceğiniz oyunları bulmaktı — indirme yok, arka planda ağır ağır çalışan kurulum programları yok. Tıklıyorsunuz ve oyundasınız. Bu kadar.</p>
<p>İşte seçtiklerimiz.</p>
<h2 id="en-yuksek-puanlı-etkilesimli-deneyimler" tabindex="-1">En Yüksek Puanlı Etkileşimli Deneyimler <a class="header-anchor" href="#en-yuksek-puanlı-etkilesimli-deneyimler" aria-label="Permalink to &quot;En Yüksek Puanlı Etkileşimli Deneyimler&quot;"></a></h2>
<div class="showcase-card">
<img src="/img/showcases/anxiety.png" alt="Adventures With Anxiety ekran görüntüsü" loading="lazy">
<p><strong>Adventures With Anxiety!</strong> — Etkileşimli Hikâye
6.500'den fazla değerlendirmede 4,9 ortalama. Sizi kaygıyla yüzleşmeye zorlayan bir şeyin bu kadar çok hayranı olması çılgınca, değil mi? İyi anlamda rahatsız edici — aklınızdan çıkmayan türden. <a href="https://ncase.itch.io/anxiety" target="_blank" rel="noreferrer">Buradan oynayın</a></p>
</div>
<div class="showcase-card">
<img src="/img/showcases/wbwwb.png" alt="We Become What We Behold ekran görüntüsü" loading="lazy">
<p><strong>We Become What We Behold</strong> — Toplumsal Eleştiri
7.600 değerlendirmede 4,8/5. Bitirmesi on dakika. Üzerine düşünmeyi bırakması günler sürüyor. <a href="https://ncase.itch.io/wbwwb" target="_blank" rel="noreferrer">Buradan oynayın</a></p>
</div>
<div class="showcase-card">
<img src="/img/showcases/six-cats-under.png" alt="Six Cats Under ekran görüntüsü" loading="lazy">
<p><strong>Six Cats Under</strong> — Bulmaca Macera
Sıcacık ve zekice. Görseller burada işin büyük kısmını üstleniyor ve bu da oyunun lehine işliyor. 6.400'den fazla kişiden 4,8/5. <a href="https://teambeanloop.itch.io/six-cats-under" target="_blank" rel="noreferrer">Buradan oynayın</a></p>
</div>
<div class="showcase-card">
<img src="/img/showcases/friday-night-funkin.gif" alt="Friday Night Funkin ekran görüntüsü" loading="lazy">
<p><strong>Friday Night Funkin'</strong> — Ritim Oyunu
Artık bu oyun her yerde. 11.700'den fazla değerlendirme, 4,7/5. <a href="https://ninja-muffin24.itch.io/funkin" target="_blank" rel="noreferrer">Buradan oynayın</a></p>
</div>
<div class="showcase-card">
<img src="/img/showcases/sort-the-court.png" alt="Sort the Court ekran görüntüsü" loading="lazy">
<p><strong>Sort the Court!</strong> — Krallık Simülasyonu
Tek göreviniz evet ya da hayır demek. Kulağa pek bir şeymiş gibi gelmiyor. Sonra siz hâlâ küçücük bir krallığı yönetirken iki saat ortadan kayboluyor. <a href="https://graebor.itch.io/sort-the-court" target="_blank" rel="noreferrer">Buradan oynayın</a></p>
</div>
<div class="showcase-card">
<img src="/img/showcases/dragonsweeper.png" alt="Dragonsweeper ekran görüntüsü" loading="lazy">
<p><strong>Dragonsweeper</strong> — Bulmaca Roguelike
Mayın Tarlası'nı alın ve RPG sistemleriyle harmanlayın. 4,9/5 — bu gerçekten de listedeki en iyi oyun olabilir. <a href="https://danielben.itch.io/dragonsweeper" target="_blank" rel="noreferrer">Buradan oynayın</a></p>
</div>
<h2 id="roguelike-ve-strateji-tarayıcıda-oynanabilir" tabindex="-1">Roguelike ve Strateji (Tarayıcıda Oynanabilir) <a class="header-anchor" href="#roguelike-ve-strateji-tarayıcıda-oynanabilir" aria-label="Permalink to &quot;Roguelike ve Strateji (Tarayıcıda Oynanabilir)&quot;"></a></h2>
<div class="showcase-card">
<img src="/img/showcases/backpack-hero.png" alt="Backpack Hero ekran görüntüsü" loading="lazy">
<p><strong>Backpack Hero</strong> — Envanter Roguelike
Tarayıcı sürümü tamamen ücretsiz. Ücretli sürüm daha fazla içerik ekliyor ama ücretsiz web sürümü tek başına da gayet yeterli. <a href="https://thejaspel.itch.io/backpack-hero" target="_blank" rel="noreferrer">Buradan oynayın</a></p>
</div>
<div class="showcase-card">
<img src="/img/showcases/vampire-survivors.png" alt="Vampire Survivors ekran görüntüsü" loading="lazy">
<p><strong>Vampire Survivors</strong> — Bullet Heaven
Yalnızca demo — tek bölüm, yedi karakter. Yine de bu oyunun neden herkesin boş zamanını yuttuğunu anlamaya yetiyor. <a href="https://poncle.itch.io/vampire-survivors" target="_blank" rel="noreferrer">Buradan oynayın</a></p>
</div>
<div class="showcase-card">
<img src="/img/showcases/dome-romantik.gif" alt="Dome Romantik ekran görüntüsü" loading="lazy">
<p><strong>Dome Romantik</strong> — Madencilik ve Savunma
Bir game jam projesi olarak başladı. Dome Keeper'a dönüştü. Sonra devasa bir başarıya ulaştı. Orijinal prototip hâlâ çok iyi. <a href="https://bippinbits.itch.io/dome-romantik" target="_blank" rel="noreferrer">Buradan oynayın</a></p>
</div>
<h2 id="neden-ozellikle-bunlar" tabindex="-1">Neden Özellikle Bunlar? <a class="header-anchor" href="#neden-ozellikle-bunlar" aria-label="Permalink to &quot;Neden Özellikle Bunlar?&quot;"></a></h2>
<p>Her bağlantıyı tek tek test ettik. Şöyle bir göz atıp geçmedik — gerçekten oturup bu oyunları oynadık. Sorunsuz yükleniyorlar. Tarayıcı kaynaklı gariplikler yok. Binlerce değerlendirme, indirme düğmesine hiç dokunmadan tıklayıp doğrudan oyuna giren insanlardan geldi. “Hmm, ilginçmiş” düşüncesinden gerçekten oynamaya uzanan bu sıfır sürtünmeli yol mu? Çoğu insan bunun ne kadar büyük bir fark yarattığını hafife alıyor.</p>
<h2 id="daha-fazla-web-oyununa-goz-atın" tabindex="-1">Daha Fazla Web Oyununa Göz Atın <a class="header-anchor" href="#daha-fazla-web-oyununa-goz-atın" aria-label="Permalink to &quot;Daha Fazla Web Oyununa Göz Atın&quot;"></a></h2>
<p>Hâlâ daha fazlasını mı istiyorsunuz?</p>
<ul>
<li><a href="https://itch.io/games/top-rated/html5" target="_blank" rel="noreferrer">itch.io'daki en yüksek puanlı HTML5 oyunları</a></li>
<li><a href="https://itch.io/games/top-rated/genre-platformer/html5" target="_blank" rel="noreferrer">En iyi HTML5 platform oyunları</a></li>
<li><a href="https://itch.io/games/top-rated/html5/year-2024" target="_blank" rel="noreferrer">2024-2025 döneminden oyunlar</a></li>
</ul>
<h2 id="dikkate-deger-bagımsız-oyunlar-indirme-gerekir" tabindex="-1">Dikkate Değer Bağımsız Oyunlar (İndirme Gerekir) <a class="header-anchor" href="#dikkate-deger-bagımsız-oyunlar-indirme-gerekir" aria-label="Permalink to &quot;Dikkate Değer Bağımsız Oyunlar (İndirme Gerekir)&quot;"></a></h2>
<p>Bazı harika oyunlar tarayıcınızda çalışmıyor. Bunlar, fazladan zahmete değer:</p>
<div class="showcase-card">
<img src="/img/showcases/slice-dice.png" alt="Slice & Dice ekran görüntüsü" loading="lazy">
<p><strong>Slice &amp; Dice</strong> — Zar Roguelike
Windows, Mac ve Android'de çalışıyor. <a href="https://tann.itch.io/slice-dice" target="_blank" rel="noreferrer">itch.io'dan edinin</a></p>
</div>
<div class="showcase-card">
<img src="/img/showcases/stacklands.png" alt="Stacklands ekran görüntüsü" loading="lazy">
<p><strong>Stacklands</strong> — Kartlarla Köy Kurma
Windows ve Mac. <a href="https://sokpop.itch.io/stacklands" target="_blank" rel="noreferrer">itch.io'dan edinin</a></p>
</div>
<div class="showcase-card">
<img src="/img/showcases/luck-be-a-landlord.png" alt="Luck be a Landlord ekran görüntüsü" loading="lazy">
<p><strong>Luck be a Landlord</strong> — Slot Makinesi Roguelike
Kulağa geçici bir numara gibi geliyor. Ama değil. O slot makinesi görünümünün altında gerçek bir strateji var. <a href="https://trampolinetales.itch.io/luck-be-a-landlord" target="_blank" rel="noreferrer">itch.io</a></p>
</div>
<div class="showcase-card">
<img src="/img/showcases/patricks-parabox.png" alt="Patrick's Parabox ekran görüntüsü" loading="lazy">
<p><strong>Patrick's Parabox</strong> — Özyinelemeli Bulmacalar
Beyninizin ağrımasını bekleyin. Buna rağmen oyunu sevmeyi de bekleyin. <a href="https://patricktraynor.itch.io/patricks-parabox" target="_blank" rel="noreferrer">itch.io</a></p>
</div>
<div class="showcase-card">
<img src="/img/showcases/dome-keeper.jpg" alt="Dome Keeper ekran görüntüsü" loading="lazy">
<p><strong>Dome Keeper</strong> — Madencilik ve Savunma
Sözünü ettiğimiz game jam prototipinin tam sürümü. <a href="https://store.steampowered.com/app/1637320/Dome_Keeper/" target="_blank" rel="noreferrer">Steam'de bulun</a></p>
</div>
<div class="showcase-card">
<img src="/img/showcases/brotato.jpg" alt="Brotato ekran görüntüsü" loading="lazy">
<p><strong>Brotato</strong> — Arena Hayatta Kalma
<a href="https://store.steampowered.com/app/1942280/Brotato/" target="_blank" rel="noreferrer">Steam'de mevcut</a></p>
</div>
<hr>
<p>Oyun geliştiriyorsanız üzerine düşünmeniz gereken bir şey var: <strong>tarayıcı sürümleri, oyuncularla eseriniz arasındaki tüm engelleri kaldırır</strong>. Unutup gidecekleri bir indirme kuyruğu yok. Tıklayıp geçmeleri gereken bir kurulum ekranı yok. Tek tıklama ve yaptığınız oyun hakkında fikir edinmeye çoktan başladılar. Bu tür bir anındalık yeterince konuşulmuyor — ama her şeyi değiştiriyor.</p>
<p>Kendi oyununuz için de bunu ister misiniz? <a href="/tr/create.html">Cinevva oyun oluşturucu</a> ile doğrudan tarayıcıda bir oyun geliştirebilirsiniz; öne çıkardığımız oyunlar da <a href="/tr/arcade.html">topluluk Arcade'imizde</a> yerini alır.</p>
<ul>
<li><a href="/tr/creators.html">Oyun geliştiricileri için</a></li>
<li><a href="/tr/tutorials/ship-web-game-fast.html">Hızlı yüklenen bir web oyunu geliştirin</a></li>
</ul>
]]></content:encoded>
            <enclosure url="https://app.cinevva.com/img/showcases/anxiety.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[2026’da web oyun motorları: PlayCanvas, Three.js, Babylon.js ve Unity WebGL karşılaştırması]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-06-09-web-game-engines-2026-comparison</link>
            <guid>https://app.cinevva.com/tr/blog/2026-06-09-web-game-engines-2026-comparison</guid>
            <pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[2026’da tarayıcıda 3D oyun geliştirmenin başlıca yollarına dair güncel ve dürüst bir karşılaştırma: PlayCanvas (v2.20), Three.js, Babylon.js ve Unity WebGL. Her biri nedir, kimler içindir, WebGL2 ve WebGPU desteği, lisanslama ve doğru seçim nasıl yapılır?]]></description>
            <content:encoded><![CDATA[<h1 id="_2026-da-web-oyun-motorları-playcanvas-three-js-babylon-js-ve-unity-webgl-karsılastırması" tabindex="-1">2026’da web oyun motorları: PlayCanvas, Three.js, Babylon.js ve Unity WebGL karşılaştırması <a class="header-anchor" href="#_2026-da-web-oyun-motorları-playcanvas-three-js-babylon-js-ve-unity-webgl-karsılastırması" aria-label="Permalink to &quot;2026’da web oyun motorları: PlayCanvas, Three.js, Babylon.js ve Unity WebGL karşılaştırması&quot;"></a></h1>
<p><em>Cinevva CTO’su ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<img src="https://cdn.cinevva.com/blog/web-engines-2026-hero.jpg" alt="Soldaki beyaz tel kafes örgüden sağdaki işlenmiş, renkli düşük poligonlu manzaraya dönüşen bir 3D sahneyi gösteren tarayıcı penceresi" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>2026’da tarayıcıda çalışan bir 3D oyun yayımlamak istiyorsanız, önünüzde dört yaygın seçenek ve birkaç yeni alternatif var. Bunların hepsi “web oyun motorları” başlığı altında toplansa da aslında farklı sorunları çözen, gerçekten farklı araçlar. Yanlış seçim size aylar kaybettirebilir. Bu, geçimini bir web 3D motoru geliştirerek sağlayan ve kendi motorumuzu oluşturmadan önce bu seçeneklerin hepsini değerlendirmiş kişiler tarafından hazırlanmış, güncel ve doğruluğu kontrol edilmiş bir karşılaştırmadır.</p>
<p>Her seçeneğin gerçekte ne olduğunu, kimlere uygun olduğunu ve hangi alanlarda yetersiz kaldığını ele alacak, sonunda da kısa bir karar rehberi sunacağız. Belirttiğimiz sürüm numaraları Temmuz 2026 itibarıyla günceldir.</p>
<blockquote>
<p>Tüm seçenekleri mi görmek istiyorsunuz? Bu yazı, yaygın dört 3D seçeneğe odaklanıyor. Phaser, Defold ve Construct gibi 2D seçenekler de dâhil olmak üzere sıralanmış ve karşılaştırılmış 11 web motorunun tamamı için <a href="/tr/guides/web-game-engines-comparison.html">2026’nın en iyi web oyun motorları</a> rehberimize bakın.</p>
</blockquote>
<h2 id="hızlı-karsılastırma" tabindex="-1">Hızlı karşılaştırma <a class="header-anchor" href="#hızlı-karsılastırma" aria-label="Permalink to &quot;Hızlı karşılaştırma&quot;"></a></h2>
<table tabindex="0">
<thead>
<tr>
<th></th>
<th>PlayCanvas</th>
<th>Three.js</th>
<th>Babylon.js</th>
<th>Unity WebGL</th>
<th>Cinevva</th>
</tr>
</thead>
<tbody>
<tr>
<td>Nedir?</td>
<td>Tam motor + barındırılan editör</td>
<td>Render kütüphanesi</td>
<td>Tam motor + editör</td>
<td>Masaüstü motoru, web dışa aktarımı</td>
<td>Yapay zekâ odaklı dünya platformu</td>
</tr>
<tr>
<td>Mimari</td>
<td>Varlık-bileşen (ECS)</td>
<td>Sahne grafiği</td>
<td>Sahne grafiği + bileşenler</td>
<td>GameObject/bileşen</td>
<td>Sahne grafiği + yapay zekâ oluşturucu</td>
</tr>
<tr>
<td>Betik geliştirme</td>
<td>TypeScript / JavaScript</td>
<td>JavaScript (geri kalanını siz geliştirirsiniz)</td>
<td>TypeScript / JavaScript</td>
<td>C# (Wasm’e derlenir)</td>
<td>Doğal dil + kod</td>
</tr>
<tr>
<td>Render altyapısı</td>
<td>WebGL2, olgunlaşan WebGPU</td>
<td>WebGL2, gelişen WebGPU</td>
<td>WebGL2, ilerleyen WebGPU</td>
<td>WebGL2 (dışa aktarım)</td>
<td>Yalnızca WebGPU</td>
</tr>
<tr>
<td>Editör</td>
<td>Barındırılan, ticari</td>
<td>Yok</td>
<td>Web tabanlı, ücretsiz</td>
<td>Masaüstü, ticari</td>
<td>Dünya içinde, sürükleyici</td>
</tr>
<tr>
<td>Fizik</td>
<td>Ammo / entegrasyonlar</td>
<td>Kendiniz eklemelisiniz</td>
<td>Yerleşik Havok</td>
<td>Yerleşik (PhysX)</td>
<td>Özel karakter çözücüsü</td>
</tr>
<tr>
<td>Lisans</td>
<td>Motor MIT, editör tescilli</td>
<td>MIT</td>
<td>Apache 2.0</td>
<td>Tescilli</td>
<td>Tescilli</td>
</tr>
<tr>
<td>En uygun olduğu alan</td>
<td>Stüdyo tarzı tarayıcı oyunları</td>
<td>Özel 3D projeler, tam kontrol</td>
<td>Her şeyi içeren oyun geliştirme</td>
<td>Mevcut Unity oyunlarını taşıma</td>
<td>Dünya içinde yapay zekâyla oyun oluşturma</td>
</tr>
</tbody>
</table>
<p>Yazının geri kalanı bu tabloyu ayrıntılı olarak açıklıyor.</p>
<h2 id="playcanvas" tabindex="-1">PlayCanvas <a class="header-anchor" href="#playcanvas" aria-label="Permalink to &quot;PlayCanvas&quot;"></a></h2>
<p>PlayCanvas, web dünyasında Unity tarzı bir iş akışına en çok yaklaşan seçenek. Motor, MIT lisansı altında açık kaynaklıdır ve Temmuz 2026 itibarıyla v2.20.6 sürümündedir. Bir varlık-bileşen sistemi kullanır, oyun mantığını TypeScript veya JavaScript ile yazarsınız ve varlıklar, GLB üreten sunucu taraflı bir işlem hattından geçer. Gerçek ticari oyunlar PlayCanvas üzerinde çalışıyor ve büyük şirketler onu üretimde kullanıyor; Snap bunun kamuya açık örneklerinden biri.</p>
<p>PlayCanvas hakkında sıkça yanlış anlaşılan iki noktayı düzeltmekte yarar var. Birincisi, motor MIT lisanslı olsa da çoğu ekibin kullandığı barındırılan görsel editör açık kaynaklı değil, ticari bir üründür. Motoru editör olmadan ücretsiz kullanabilirsiniz ancak editör ve bulut iş akışı ücretli kısımdır. İkincisi, PlayCanvas öncelikle WebGL2’yi hedefler. Bir WebGPU yolu mevcut olsa da varsayılan render altyapısı olmaktan ziyade hâlâ olgunlaşma aşamasındadır. Bu nedenle bugün üretimde WebGPU compute shader’ları kullanmayı bekleyerek PlayCanvas’ı seçmeyin.</p>
<p>PlayCanvas’ın gerçekten önde olduğu alan, 3D Gaussian splatting’dir. Ekibin açık kaynak hâline getirdiği SuperSplat editörü ve görüntüleyicisi, büyük taramaları WebGPU tabanlı akışla sunabilmesi sayesinde splat sahnelerini yakalayıp web’de yayımlamak için mevcut en iyi araçlar arasındadır. Fotogerçekçi taranmış ortamlarla ilgileniyorsanız, bu PlayCanvas ile başlamak için güçlü bir nedendir.</p>
<p><strong>PlayCanvas’ı seçin:</strong> Tarayıcı için Unity benzeri bir editör ve yönetilen bir varlık işlem hattı istiyorsanız ve bir stüdyonun geliştireceği türden oyun yayımlıyorsanız. <strong>Başka seçeneklere bakın:</strong> Bugün WebGPU compute özelliklerine ihtiyacınız varsa veya barındırılan ticari bir editörden kaçınmak istiyorsanız.</p>
<h2 id="three-js" tabindex="-1">Three.js <a class="header-anchor" href="#three-js" aria-label="Permalink to &quot;Three.js&quot;"></a></h2>
<p>Three.js bir oyun motoru değildir. Bir render kütüphanesidir ve bu alanda açık ara en yaygın kullanılan seçenektir. Size sahne grafiği, kameralar, ışıklar, materyaller, geometri, yükleyiciler ve bir renderer sunar; sonra da burada durur. Editör, fizik sistemi veya varlık sistemi yoktur ve oyununuzu nasıl yapılandırmanız gerektiği konusunda herhangi bir yaklaşım dayatmaz. Bunları kendiniz eklersiniz ya da ekosistemden edinirsiniz.</p>
<p>Bu tercih, Three.js’in tüm hikâyesini özetliyor. Render katmanının üzerindeki her şeyi geliştirme veya bir araya getirme maliyeti karşılığında azami kontrol ve web 3D alanındaki en büyük topluluğu elde edersiniz. WebGPU renderer’ı istikrarlı biçimde gelişiyor ve bugün kullanılabilir durumda; ancak diğer seçeneklerde olduğu gibi WebGL2 yolu hâlâ olgun ve varsayılan seçenektir. Three.js, MIT lisanslıdır.</p>
<p><strong>Three.js’i seçin:</strong> Tam kontrol ve asgari bir temel istiyorsanız ve oyun sistemlerinizi bunun üzerinde geliştirecek mühendislik kapasitesine sahipseniz. <strong>Başka seçeneklere bakın:</strong> Editörün ve oyun sistemlerinin hazır sunulmasını istiyorsanız.</p>
<h2 id="babylon-js" tabindex="-1">Babylon.js <a class="header-anchor" href="#babylon-js" aria-label="Permalink to &quot;Babylon.js&quot;"></a></h2>
<p>Babylon.js, Apache 2.0 lisanslı ve Microsoft bünyesindeki bir ekip tarafından desteklenen tam kapsamlı bir motordur. Three.js’in aksine, normalde kendinizin bir araya getirmesi gereken parçalarla birlikte gelir: bir bileşen modeli, entegre Havok fizik motoru, ücretsiz web tabanlı editör ve varlık işlem hattı. WebGPU çalışmaları hızlı ilerledi ve genel amaçlı motorlar arasında en gelişmiş seçeneklerden biri hâline geldi; ancak geniş uyumluluk yolu olarak WebGL2’yi desteklemeyi de sürdürüyor. Babylon.js 9.0 (Mart 2026), her iki arka uçta kümelenmiş aydınlatma, WebGPU compute shader’ları üzerine kurulu hacimsel aydınlatma ve 3D Gaussian splat’ler için gölge desteğiyle bu üstünlüğü daha ileri taşıdı.</p>
<p>“Eksiksiz bir motor ve yerleşik fizik istiyorum, motorun kuralları içinde çalışmakta da sakınca görmüyorum” diye düşünüyorsanız Babylon güçlü bir varsayılan seçenektir ve bu alandaki en kapsamlı ücretsiz alternatif olduğu söylenebilir.</p>
<p><strong>Babylon.js’i seçin:</strong> Her şeyin hazır gelmesini, yerleşik fizik sistemini ve ücretsiz bir editörü istiyorsanız. <strong>Başka seçeneklere bakın:</strong> Çok küçük bir bağımlılık boyutu istiyorsanız veya özellikle Unity tarzı, barındırılan bir iş akışı arıyorsanız.</p>
<h2 id="unity-webgl" tabindex="-1">Unity WebGL <a class="header-anchor" href="#unity-webgl" aria-label="Permalink to &quot;Unity WebGL&quot;"></a></h2>
<p>Unity WebGL bir web motoru değil, dışa aktarım hedefidir. Unity masaüstü editöründe C# ile geliştirme yapar, ardından projenizi WebAssembly aracılığıyla tarayıcıda çalışan bir WebGL paketine derlersiniz. Bu durum, Unity WebGL’yi belirli bir senaryo için bariz seçenek hâline getiriyor: Hâlihazırda bir Unity oyununuz var ve bunun tarayıcı sürümünü oluşturmak istiyorsunuz.</p>
<p>Ancak web öncelikli bir proje için ciddi maliyetleri vardır. Çalışma zamanı ve indirme boyutu yüksektir, başlatma süresi yerel bir web motorundan daha uzundur ve mobil tarayıcı performansı bilinen bir sorundur. Unity tescilli bir yazılımdır ve WebGL çıktısı WebGL2’yi hedefler. Unity 6’da deneysel bir WebGPU arka ucu bulunuyor ancak varsayılan olarak kapalıdır ve üretime hazır değildir.</p>
<p><strong>Unity WebGL’yi seçin:</strong> Tarayıcıya taşımak istediğiniz mevcut bir Unity projeniz varsa veya ekibiniz zaten tamamen Unity ile çalışıyorsa. <strong>Başka seçeneklere bakın:</strong> Orta segment telefonlarda anında yükleme kesin bir gereksinimse ya da sıfırdan, web öncelikli bir proje başlatıyorsanız.</p>
<h2 id="yapay-zeka-odaklı-ve-dunya-ici-uretim-bu-tabloya-nasıl-uyuyor" tabindex="-1">Yapay zekâ odaklı ve dünya içi üretim bu tabloya nasıl uyuyor? <a class="header-anchor" href="#yapay-zeka-odaklı-ve-dunya-ici-uretim-bu-tabloya-nasıl-uyuyor" aria-label="Permalink to &quot;Yapay zekâ odaklı ve dünya içi üretim bu tabloya nasıl uyuyor?&quot;"></a></h2>
<p>Yukarıdaki seçeneklerin tamamı aynı varsayıma dayanıyor: Bir geliştirici oyunu masa başında, bir editörde oluşturur ve bir çalışma zamanı olarak yayımlar. Bu varsayım çoğu proje için doğrudur ve sizin projenizi de tanımlıyorsa yukarıdaki dört seçenekten birini tercih edin.</p>
<p>Ancak artık tek seçeneğin bu olmadığını bilmekte yarar var; çünkü farklı bir kategori ortaya çıkıyor. Biz, oyunların doğrudan dünyanın içinden oluşturulduğu, yalnızca WebGPU kullanan bir dünya platformu olan Cinevva’yı geliştiriyoruz. Bir editör açmak yerine, mekânda duran bir avatar olarak ne istediğinizi tarif ediyorsunuz; yapay zekâ oluşturucu da siz oradayken bunu araziye, nesnelere ve davranışlara dönüştürüyor. Üretim ve oyun aynı oturum içinde gerçekleşiyor. Altyapıda bu yaklaşım, compute shader tabanlı araziyle yalnızca WebGPU kullanmayı, genel amaçlı bir fizik motoru yerine özel bir karakter çözücüsü geliştirmeyi ve bir animasyon ile yeniden hedefleme sistemi oluşturmayı gerektirdi. Bunları <a href="/tr/blog/2026-06-08-why-we-built-our-own-webgpu-engine.html">neden kendi WebGPU motorumuzu geliştirdik</a> yazımızda anlattık.</p>
<p>Bu, PlayCanvas veya Babylon’ın yerini alacak bir seçenek değildir. Belirli bir oyun geliştiren bir yazılımcıysanız doğru araçlar onlardır. Cinevva ise motor geliştiricisi olmayan kişilerin, tarif ederek oynanabilir alanlar oluşturup paylaşabilmesi gibi farklı bir hedef içindir. Burada bundan bahsediyoruz çünkü “Hangi web oyun motorunu kullanmalıyım?” sorusunun giderek yaygınlaşan beşinci bir yanıtı var ve bu yanıt aslında bir motor değil.</p>
<h2 id="tam-ozellik-matrisi" tabindex="-1">Tam özellik matrisi <a class="header-anchor" href="#tam-ozellik-matrisi" aria-label="Permalink to &quot;Tam özellik matrisi&quot;"></a></h2>
<p>Yukarıdaki hızlı tablo ana hatları sunuyor. Aşağıdaki ayrıntılı sürüm ise alt sistemlere göre gruplandırılmıştır. Tabloyu nasıl okuyacağınıza dair birkaç açık not düşelim. “Kendiniz eklemelisiniz”, motorun ilgili özelliği hazır sunmadığı ancak ekosistemden veya kendi kodunuzla ekleyebileceğiniz anlamına gelir. Bu özellikle, tasarım gereği bir render kütüphanesi olan Three.js için önemlidir; dolayısıyla oradaki “Kendiniz eklemelisiniz” ifadeleri bir eksiklik değil, yaklaşımın özelliğidir. Unity için “Yalnızca dışa aktarım”, özelliğin masaüstü editöründe bulunduğu ve web’e özgü olmak yerine WebGL derlemesine dâhil edildiği anlamına gelir. Rakiplere ait hücreler, 2026 ortası itibarıyla kutudan çıktığı hâliyle sunulan özellikleri ve iyi belgelenmiş davranışları yansıtır. Cinevva hücreleri yayımlanmış derlememizde çalışan özellikleri gösterir; “planlanıyor” ifadesi ise tasarlanmış ancak henüz geliştirilmemiş özellikleri belirtir.</p>
<h3 id="render" tabindex="-1">Render <a class="header-anchor" href="#render" aria-label="Permalink to &quot;Render&quot;"></a></h3>
<table tabindex="0">
<thead>
<tr>
<th>Özellik</th>
<th>Cinevva</th>
<th>PlayCanvas</th>
<th>Three.js</th>
<th>Babylon.js</th>
<th>Unity WebGL</th>
</tr>
</thead>
<tbody>
<tr>
<td>Birincil renderer</td>
<td>Yalnızca WebGPU</td>
<td>WebGL2 (WebGPU beta)</td>
<td>WebGL2 (WebGPU gelişiyor)</td>
<td>WebGL2 (WebGPU gelişmiş)</td>
<td>WebGL2 (dışa aktarım)</td>
</tr>
<tr>
<td>Üretimde compute shader’ları</td>
<td>Evet (temel bağımlılık)</td>
<td>Beta</td>
<td>WebGPU aracılığıyla</td>
<td>Evet (WebGPU)</td>
<td>Yalnızca dışa aktarım, sınırlı</td>
</tr>
<tr>
<td>Shader geliştirme</td>
<td>TSL düğümleri + compute</td>
<td>Shader parçaları / GLSL</td>
<td>GLSL + düğüm (TSL)</td>
<td>Düğüm materyali / GLSL / WGSL</td>
<td>ShaderLab / HLSL</td>
</tr>
<tr>
<td>Kümelenmiş / forward+ aydınlatma</td>
<td>Evet (froxel)</td>
<td>Evet</td>
<td>Kendiniz eklemelisiniz</td>
<td>Evet</td>
<td>Evet</td>
</tr>
<tr>
<td>Hacimsel bulutlar ve hava durumu</td>
<td>Evet</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kısmi</td>
<td>Kendiniz eklemelisiniz</td>
</tr>
<tr>
<td>3D Gaussian splatting araçları</td>
<td>Planlanıyor</td>
<td>Evet (SuperSplat, öncü)</td>
<td>Topluluk</td>
<td>Evet</td>
<td>Eklentiler</td>
</tr>
</tbody>
</table>
<h3 id="dunya-ve-arazi" tabindex="-1">Dünya ve arazi <a class="header-anchor" href="#dunya-ve-arazi" aria-label="Permalink to &quot;Dünya ve arazi&quot;"></a></h3>
<table tabindex="0">
<thead>
<tr>
<th>Özellik</th>
<th>Cinevva</th>
<th>PlayCanvas</th>
<th>Three.js</th>
<th>Babylon.js</th>
<th>Unity WebGL</th>
</tr>
</thead>
<tbody>
<tr>
<td>Yerleşik büyük dünya akışı</td>
<td>Evet (64 m parçalar)</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kendiniz eklemelisiniz</td>
<td>Yalnızca dışa aktarım</td>
</tr>
<tr>
<td>Arazi sistemi</td>
<td>Hibrit yükseklik haritası + marching cubes/SDF</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kendiniz eklemelisiniz</td>
<td>Uzantı</td>
<td>Yerleşik (masaüstü)</td>
</tr>
<tr>
<td>Çalışma zamanında arazi şekillendirme</td>
<td>Evet (GPU)</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kendiniz eklemelisiniz</td>
<td>Hayır (düzenleme sırasında)</td>
</tr>
<tr>
<td>Mağaralar ve çıkıntılar (gerçek 3D topoloji)</td>
<td>Evet (marching cubes)</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kendiniz eklemelisiniz</td>
</tr>
<tr>
<td>GPU örneklemeli bitki örtüsü ve çimen</td>
<td>Evet</td>
<td>Evet</td>
<td>Kendiniz eklemelisiniz</td>
<td>Evet</td>
<td>Evet</td>
</tr>
</tbody>
</table>
<h3 id="fizik-ve-karakter" tabindex="-1">Fizik ve karakter <a class="header-anchor" href="#fizik-ve-karakter" aria-label="Permalink to &quot;Fizik ve karakter&quot;"></a></h3>
<table tabindex="0">
<thead>
<tr>
<th>Özellik</th>
<th>Cinevva</th>
<th>PlayCanvas</th>
<th>Three.js</th>
<th>Babylon.js</th>
<th>Unity WebGL</th>
</tr>
</thead>
<tbody>
<tr>
<td>Fizik motoru</td>
<td>Özel kinematik çözücü</td>
<td>Ammo entegrasyonu</td>
<td>Kendiniz eklemelisiniz (Rapier/Cannon/Ammo)</td>
<td>Yerleşik Havok</td>
<td>Yerleşik PhysX</td>
</tr>
<tr>
<td>Katı cisim dinamikleri</td>
<td>Hayır (tasarım gereği)</td>
<td>Evet</td>
<td>Kendiniz eklemelisiniz</td>
<td>Evet</td>
<td>Evet</td>
</tr>
<tr>
<td>Karakter kontrolcüsü</td>
<td>Evet (çok modlu FSM)</td>
<td>Şablonlar / Ammo</td>
<td>Kendiniz eklemelisiniz</td>
<td>Evet</td>
<td>Yerleşik</td>
</tr>
<tr>
<td>Araziyle entegre çarpışma (SDF)</td>
<td>Evet</td>
<td>Hayır</td>
<td>Kendiniz eklemelisiniz</td>
<td>Hayır</td>
<td>Hayır</td>
</tr>
</tbody>
</table>
<h3 id="animasyon" tabindex="-1">Animasyon <a class="header-anchor" href="#animasyon" aria-label="Permalink to &quot;Animasyon&quot;"></a></h3>
<table tabindex="0">
<thead>
<tr>
<th>Özellik</th>
<th>Cinevva</th>
<th>PlayCanvas</th>
<th>Three.js</th>
<th>Babylon.js</th>
<th>Unity WebGL</th>
</tr>
</thead>
<tbody>
<tr>
<td>İskelet animasyonu</td>
<td>Evet</td>
<td>Evet</td>
<td>Evet</td>
<td>Evet</td>
<td>Evet</td>
</tr>
<tr>
<td>Harmanlama / durum makinesi</td>
<td>Evet (çözümleyici FSM)</td>
<td>Evet (animasyon durum grafiği)</td>
<td>Mikser (harmanlamayı kendiniz eklemelisiniz)</td>
<td>Evet</td>
<td>Evet (Mecanim)</td>
</tr>
<tr>
<td>İskelet yeniden hedefleme</td>
<td>Evet (işlem hattı)</td>
<td>Sınırlı</td>
<td>Topluluk</td>
<td>Kısmi</td>
<td>Evet (insansı)</td>
</tr>
<tr>
<td>Ters kinematik</td>
<td>Planlanıyor</td>
<td>Sınırlı</td>
<td>Topluluk</td>
<td>Evet</td>
<td>Evet</td>
</tr>
</tbody>
</table>
<h3 id="cok-oyunculu-sistemler-ve-arka-uc" tabindex="-1">Çok oyunculu sistemler ve arka uç <a class="header-anchor" href="#cok-oyunculu-sistemler-ve-arka-uc" aria-label="Permalink to &quot;Çok oyunculu sistemler ve arka uç&quot;"></a></h3>
<table tabindex="0">
<thead>
<tr>
<th>Özellik</th>
<th>Cinevva</th>
<th>PlayCanvas</th>
<th>Three.js</th>
<th>Babylon.js</th>
<th>Unity WebGL</th>
</tr>
</thead>
<tbody>
<tr>
<td>Yerleşik çok oyunculu sistem</td>
<td>Evet (uçta yetkili)</td>
<td>Kendiniz eklemelisiniz (Photon/Colyseus)</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kendiniz eklemelisiniz (Netcode, web’e özgü değil)</td>
</tr>
<tr>
<td>Kalıcı paylaşımlı dünya</td>
<td>Evet (parça başına Durable Objects)</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kendiniz eklemelisiniz</td>
</tr>
<tr>
<td>Uzamsal sesli sohbet</td>
<td>Evet (WebRTC + HRTF)</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kendiniz eklemelisiniz</td>
<td>Kendiniz eklemelisiniz</td>
</tr>
</tbody>
</table>
<h3 id="uretim-ve-gelistirme" tabindex="-1">Üretim ve geliştirme <a class="header-anchor" href="#uretim-ve-gelistirme" aria-label="Permalink to &quot;Üretim ve geliştirme&quot;"></a></h3>
<table tabindex="0">
<thead>
<tr>
<th>Özellik</th>
<th>Cinevva</th>
<th>PlayCanvas</th>
<th>Three.js</th>
<th>Babylon.js</th>
<th>Unity WebGL</th>
</tr>
</thead>
<tbody>
<tr>
<td>Editör</td>
<td>Dünya içinde, sürükleyici</td>
<td>Barındırılan masaüstü tarzı (ticari)</td>
<td>Yok (asgari)</td>
<td>Web tabanlı (ücretsiz)</td>
<td>Masaüstü (ticari)</td>
</tr>
<tr>
<td>Dünya içinde, bedenlenmiş üretim</td>
<td>Evet</td>
<td>Hayır</td>
<td>Hayır</td>
<td>Hayır</td>
<td>Hayır</td>
</tr>
<tr>
<td>Doğal dil / yapay zekâyla üretim</td>
<td>Evet (yapay zekâ oluşturucu)</td>
<td>Hayır</td>
<td>Hayır</td>
<td>Hayır</td>
<td>Hayır</td>
</tr>
<tr>
<td>Betik geliştirme</td>
<td>Doğal dil + JS</td>
<td>TypeScript / JS</td>
<td>JavaScript</td>
<td>TypeScript / JS</td>
<td>C#</td>
</tr>
</tbody>
</table>
<h3 id="varlıklar-ve-dagıtım" tabindex="-1">Varlıklar ve dağıtım <a class="header-anchor" href="#varlıklar-ve-dagıtım" aria-label="Permalink to &quot;Varlıklar ve dağıtım&quot;"></a></h3>
<table tabindex="0">
<thead>
<tr>
<th>Özellik</th>
<th>Cinevva</th>
<th>PlayCanvas</th>
<th>Three.js</th>
<th>Babylon.js</th>
<th>Unity WebGL</th>
</tr>
</thead>
<tbody>
<tr>
<td>Sunucu taraflı varlık işlem hattı</td>
<td>Evet (GLB + LOD + KTX2 + Draco)</td>
<td>Evet (GLB)</td>
<td>Yalnızca yükleyiciler</td>
<td>İçe aktarma araçları</td>
<td>Evet</td>
</tr>
<tr>
<td>Yerleşik yapay zekâ varlık üretimi</td>
<td>Evet (3D, görsel, ses, müzik)</td>
<td>Hayır</td>
<td>Hayır</td>
<td>Hayır</td>
<td>Hayır</td>
</tr>
<tr>
<td>Birleşik varlık araması</td>
<td>Evet (on bir sağlayıcı)</td>
<td>Varlık mağazası</td>
<td>Hayır</td>
<td>Hayır</td>
<td>Varlık mağazası</td>
</tr>
<tr>
<td>Tarayıcıda, kurulum gerektirmeden çalışma</td>
<td>Evet</td>
<td>Evet</td>
<td>Evet</td>
<td>Evet</td>
<td>Evet (ağır)</td>
</tr>
<tr>
<td>Motor lisansı</td>
<td>Tescilli platform</td>
<td>Motor MIT, editör tescilli</td>
<td>MIT</td>
<td>Apache 2.0</td>
<td>Tescilli</td>
</tr>
</tbody>
</table>
<p>Matristeki örüntü asıl hikâyeyi anlatıyor. Genel amaçlı motorlar güçlerini yatay olarak dağıtıyor: Her biri çoğu işi yeterince iyi yaparken dünyayı, arka ucu ve üretim akışını size bırakıyor. Cinevva ise dikey olarak yoğunlaşıyor: Daha az işi üstleniyor ancak renderer’dan, içinden üretim yaptığınız paylaşımlı dünyaya kadar tüm süreci sahipleniyor. Bu yaklaşımların hiçbiri soyut olarak diğerinden daha iyi değil. Farklı sorulara yanıt veriyorlar.</p>
<h2 id="nasıl-secim-yapılır" tabindex="-1">Nasıl seçim yapılır? <a class="header-anchor" href="#nasıl-secim-yapılır" aria-label="Permalink to &quot;Nasıl seçim yapılır?&quot;"></a></h2>
<p>Aracı bir özellik kontrol listesine göre değil, içinde bulunduğunuz duruma göre seçin.
Zaten bir Unity oyununuz varsa Unity WebGL ile dışa aktarın ve dosya boyutunu kabullenin. Tarayıcı oyunları için editör odaklı bir iş akışı isteyen bir stüdyoysanız PlayCanvas kullanın. Fizik desteği dâhil, tamamen ücretsiz bir motor istiyorsanız Babylon.js kullanın. Tam kontrol istiyorsanız ve yalın bir render motoru üzerine geliştirme yapabilecek ekibiniz varsa Three.js kullanın. Amacınız tek bir oyun geliştirmek değil de insanların bir şeyleri tarif ederek ortak bir dünyada içerik oluşturmasını ve oynamasını sağlamaksa, bu bizim çalıştığımız kategori; <a href="/tr/">Cinevva'yı deneyebilirsiniz</a>.</p>
<p>Hangisini seçerseniz seçin, karar vermeden önce gerçek prototiplerle değerlendirme yapın. Bunların her biri gerçek bir oyunun altından kalkabilir ve geliştirme sürecinin ortasında geçiş yapmanın bedeli, oyunu yayınlamak için harcamadığınız aylardır.</p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/web-engines-2026-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[PlayCanvas'ı çatallamak yerine neden kendi WebGPU motorumuzu geliştirdik]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-06-08-why-we-built-our-own-webgpu-engine</link>
            <guid>https://app.cinevva.com/tr/blog/2026-06-08-why-we-built-our-own-webgpu-engine</guid>
            <pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Three.js, Babylon.js, PlayCanvas, Unity WebGL: Kendi işleyicimizi yazmadan önce hepsini değerlendirdik. Her birinin güçlü olduğu alanlar, bizi hazır çözümlerden uzaklaştıran dört karar ve bizim yaptığımızı kesinlikle yapmamanız gereken durumlar.]]></description>
            <content:encoded><![CDATA[<h1 id="playcanvas-ı-catallamak-yerine-neden-kendi-webgpu-motorumuzu-gelistirdik" tabindex="-1">PlayCanvas'ı çatallamak yerine neden kendi WebGPU motorumuzu geliştirdik <a class="header-anchor" href="#playcanvas-ı-catallamak-yerine-neden-kendi-webgpu-motorumuzu-gelistirdik" aria-label="Permalink to &quot;PlayCanvas'ı çatallamak yerine neden kendi WebGPU motorumuzu geliştirdik&quot;"></a></h1>
<p><em>Cinevva CTO'su ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<img src="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" alt="Cinevva'nın WebGPU motoruyla işlenen stilize, düşük poligonlu bir dünya: inişli çıkışlı tepeler, bir uçuruma oyulmuş mağara, kıvrılarak akan nehir ve altın saatte bir patikada adım atarken görülen avatar" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Cinevva World'e bakan teknik bilgili herkes beş dakika içinde aynı soruyu soruyor. Küçük bir ekipsiniz. Olgun web 3D motorları zaten var. Neden PlayCanvas veya Babylon'ı temel alıp daha hızlı yayınlamak yerine kendi işleyicinizi, karakter fiziğinizi ve animasyon sisteminizi yazdınız?</p>
<p>Bu makul bir soru ve buna verilecek yanlış cevap “burada icat edilmedi” sendromudur. Biz gerekli araştırmayı yaptık. Karar vermeden önce mevcut motorları çalıştırdık, kaynak kodlarını okuduk ve ikisinin üzerinde deneme sürümleri geliştirdik. Bu yazı, söz konusu kararın dürüst anlatımıdır: hazır seçeneklerin gerçekten iyi olduğu alanlar, ihtiyaçlarımızın kendi çözümümüzü geliştirmeyi haklı çıkaracak kadar ayrıştığı dört nokta ve bizi örnek almak yerine bu seçeneklerden birini tercih etmeniz gereken durumlar. Geliştirme sürecinin kendisini uzun soluklu <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">tarayıcıda açık dünya mühendisliği serisinde</a> belgeledik; dolayısıyla aşağıdaki bir iddiayı destekleyen çalışma günlüğü varsa ona bağlantı vereceğim.</p>
<h2 id="gercekten-degerlendirdigimiz-secenekler" tabindex="-1">Gerçekten değerlendirdiğimiz seçenekler <a class="header-anchor" href="#gercekten-degerlendirdigimiz-secenekler" aria-label="Permalink to &quot;Gerçekten değerlendirdiğimiz seçenekler&quot;"></a></h2>
<p>Dört farklı şeye “web oyun motoru” deniyor ve bunların hepsi aynı türde değil.</p>
<p><strong>Three.js</strong> bir oyun motoru değil, işleme kütüphanesidir. Size bir sahne grafiği, materyaller, yükleyiciler ve işleyici sunar, ardından yolunuzdan çekilir. Editörü, fizik sistemi veya varlık sistemi yoktur ve oyununuzun nasıl yapılandırılması gerektiği konusunda herhangi bir yaklaşım dayatmaz. Hem cazibesi hem de bedeli budur. İşleyicinin üzerindeki her şeyi kendiniz geliştirirsiniz ama hiçbir şey de size karşı koymaz. MIT lisanslıdır, bu alandaki en büyük ekosisteme sahiptir ve gece saat 02.00'de sıra dışı bir gölgelendirici hatasıyla karşılaştığınızda forumda sizi bekleyen bir cevap vardır.</p>
<p><strong>Babylon.js</strong>, sahne grafiği, fizik entegrasyonu (Havok), varlık işlem hattı ve web editörü içeren tam kapsamlı bir motordur. MIT lisanslıdır, Microsoft bünyesindeki bir ekip tarafından desteklenir ve WebGPU çalışmaları hızla ilerlemektedir. Her şeyin hazır gelmesini istiyorsanız ve motorun yapısı içinde çalışmaktan memnunsanız güçlü bir varsayılan tercihtir.</p>
<p><strong>PlayCanvas</strong>, “web için Unity” tanımına en çok yaklaşan çözümdür. Bu yazının yazıldığı sırada motor, 5 Haziran 2026'da yayınlanan v2.19.6 sürümündedir ve motorun kendisi MIT kapsamında açık kaynaklıdır. Ancak çoğu kişinin gerçekten kullandığı şey barındırılan görsel editördür ve bu editör açık kaynaklı değil, ticari bir üründür. PlayCanvas bir varlık-bileşen sistemi kullanır; TypeScript veya JavaScript ile betik yazarsınız, varlıklar sunucu tarafındaki bir GLB işlem hattından geçer ve bununla gerçek ticari oyunlar yayınlanmıştır (örneğin Snap, üretim çalışmalarında PlayCanvas kullanıyor). İşleyicisi WebGL2 üzerinde çalışır; WebGPU yolu ise varsayılan olmak yerine hâlâ olgunlaşma aşamasındadır. Bu son ayrıntı göründüğünden daha önemli ve ona birazdan geri döneceğim.</p>
<p><strong>Unity WebGL</strong> aslında bir web motoru değildir. Bir dışa aktarma hedefidir. Oyunu Unity masaüstü editöründe geliştirip bir WebGL paketi olarak derlersiniz. Zaten bir Unity oyununuz varsa ve onu tarayıcıya taşımak istiyorsanız doğru araçtır. Ancak “orta sınıf bir telefonda, bir sekmede anında yüklenmesi” kesin bir gereksinimse yanlış araçtır; çünkü çalışma zamanı ve indirme boyutu da beraberinde gelir.</p>
<p>Bunların herhangi biri normal bir web oyunu için makul bir temel olabilir. Bizimki normal bir web oyunu değildi.</p>
<h2 id="birinci-karar-webgpu-bizim-icin-bitis-cizgisi-degil-alt-sınır" tabindex="-1">Birinci karar: WebGPU bizim için bitiş çizgisi değil, alt sınır <a class="header-anchor" href="#birinci-karar-webgpu-bizim-icin-bitis-cizgisi-degil-alt-sınır" aria-label="Permalink to &quot;Birinci karar: WebGPU bizim için bitiş çizgisi değil, alt sınır&quot;"></a></h2>
<p>Bizi tüm hazır çözümlerden uzaklaştıran ayrım şu: Bizim için WebGPU, zamanla geçeceğimiz bir özellik değil, bir gereksinim.</p>
<p>Arazi sistemimiz statik bir yükseklik haritasından ibaret değil. Akışla yüklenen bir yükseklik haritası alanı ile işaretli uzaklık alanıyla desteklenen marching cubes parçalarının hibritinden oluşuyor; böylece dünyada gerçek mağaralar ve çıkıntılar bulunabiliyor, içerik üreticileri de araziyi canlı olarak şekillendirebiliyor. Şekillendirme fırçaları, bitki örtüsü dağıtımı ve arazi ağ oluşturma işlemlerinin tümü hesaplama gölgelendiricileri olarak çalışıyor. Hesaplamayı kaldırdığınızda dünya daha düşük kalitede çalışmıyor; hiç çalışmıyor.</p>
<p>Bu, genel amaçlı motorların bugün bulunduğu noktanın tam tersi. Bu motorların WebGPU desteği, WebGL2 öncelikli bir işleyici üzerine aşamalı iyileştirme olarak tasarlanıyor ve bunu desteklemeyen tarayıcılar için bir geri dönüş yolu bulunuyor. Özellikle PlayCanvas, WebGL2 önceliklidir ve WebGPU hâlâ beta aşamasındadır. Bu onlar için doğru karardır; çünkü görevleri mümkün olan en geniş oyun yelpazesini, mümkün olan en geniş cihaz yelpazesinde çalıştırmaktır. Bizim görevimiz daha dar ve daha derin olduğu için tersini yaptık: 13. denemede yalnızca WebGPU'ya geçtik ve bir daha arkamıza bakmadık. WebGPU'suz tarayıcılarda kalite düşürülmüyor; bu tarayıcılar desteklenmiyor. Bunu, WebGL2 geri dönüşü tek bir yapılandırma seçeneği uzağındaymış gibi davranmak yerine erişim oranı olarak takip ediyoruz. Çünkü öyle değil. Böyle bir geri dönüş, arazi ve bitki örtüsü aşamalarımızın kısmen yeniden yazılmasını gerektirirdi.</p>
<p>WebGL2 öncelikli bir motorun üzerine inşa etmek, ya her hesaplama özelliğinde motorun geri dönüş varsayımlarıyla mücadele etmek ya da sonsuza kadar iki işleme yolu sürdürmek anlamına gelecekti. İşleyicinin bize ait olması, hesaplamayı temel kabul etmemizi sağladı.</p>
<h2 id="ikinci-karar-fizik-motoru-degil-karakter-cozucusu" tabindex="-1">İkinci karar: fizik motoru değil, karakter çözücüsü <a class="header-anchor" href="#ikinci-karar-fizik-motoru-degil-karakter-cozucusu" aria-label="Permalink to &quot;İkinci karar: fizik motoru değil, karakter çözücüsü&quot;"></a></h2>
<p>Ders kitaplarındaki standart yaklaşım, bir fizik motorunu projeye eklemektir. Bunu denedik. İlk denemelerden biri Rapier'ın bir worker içinde çalışmasını doğruladı ve gayet iyi hissettirdi.</p>
<p>Yine de kendi çözümümüzü yazdık ve yayınlanan sürümün hiçbir yerinde Rapier, Cannon veya Ammo yok. Bunun nedeni kapsam. Katı cisimlere, eklemlere, ragdoll sistemlerine veya kısıt çözücüsüne ihtiyacımız yok. Bir kapsülün arazi üzerinde doğru hareket etmesine ihtiyacımız var; ayrıca yürüme, kayma, süzülme, tırmanma ve yüzme sistemlerinin “yere basıyor muyum, hangi yüzeydeyim ve hangi açıdayım?” sorusuna verilen tek bir ortak cevapta uzlaşması gerekiyor. Genel amaçlı bir fizik motoru bunu kolaylaştırmak yerine zorlaştırıyor; çünkü bu hareket modları sonunda motorun dahili yayları ve sönümleyicileriyle mücadele ediyor.</p>
<p>Bu nedenle karakter denetleyicimiz <a href="/tr/blog/2026-05-15-open-world-browser-part-29-pluggable-character.html">takılıp çıkarılabilir, çok kanallı bir durum makinesi</a>. Her mod, o karede denetimi isteyip istemediğini belirten ve kazanırsa hızı ve bakış yönünü yazan küçük bir birimdir. Üç kanalda önceliğe göre hakemlik yaparlar: önce kaynak, ardından duruş, sonra hareket. Hepsi aynı arazi sorgusunu okur. Çarpışma, parçaya bağlı olarak yükseklik haritasına veya işaretli uzaklık alanına karşı yapılan bir kapsül yoklamasıdır.</p>
<p>En çok gurur duyduğum ayrıntı pek gösterişli değil. Zemin algılama sistemi, SDF gradyanına güvenmek yerine ayaklarınızın altındaki dikey sütunda bulunan her yüzeyi tarıyor ve kapsül hizasında veya altında bulunan en yüksek yüzeyi seçiyor. Bir çıkıntının kenarında, yan yöndeki en yakın yüzey uçurum duvarıdır. Bu nedenle gradyan tabanlı normal, “zemin” ile “duvar” arasında gidip gelir ve hayalet kaymalar yaşanır. Sütun sorgusu, bir çıkıntının üzerinde durmayı sıkıcı hâle getiriyor ki istediğiniz şey de tam olarak budur. Hazır bir yükseklik alanı çarpıştırıcısı bunu bize kendiliğinden sunamazdı, çünkü öncelikle arazimizi göremez. Arazi, bizim formatımızda GPU üzerinde yaşar. Her düzenlemede alanın tamamını harici motorun çarpıştırıcı formatına kopyalamadan hiçbir harici motor bununla çarpışma hesabı yapamaz.</p>
<h2 id="ucuncu-karar-iskeletler-arasında-tasınabilen-animasyon" tabindex="-1">Üçüncü karar: iskeletler arasında taşınabilen animasyon <a class="header-anchor" href="#ucuncu-karar-iskeletler-arasında-tasınabilen-animasyon" aria-label="Permalink to &quot;Üçüncü karar: iskeletler arasında taşınabilen animasyon&quot;"></a></h2>
<p>Avatarlar Synty POLYGON iskeletini kullanıyor ve hareket kliplerimiz geniş bir açık animasyon kütüphanesinden geliyor. İskelet ve klipler aynı kemik adlarını paylaştığı için yaygın durumda çalışma zamanında yeniden hedefleme gerekmiyor; izler doğrudan ada göre bağlanıyor. Karakter işlem hattının tamamını <a href="/tr/blog/2026-05-10-open-world-browser-part-25-universal-characters.html">evrensel karakterler</a> yazısında anlattık.</p>
<p>Asıl ilginç çalışma, bunların eşleşmediği durumda başlıyor. Bir iskeleti diğerine eşleyen bir yeniden hedefleme geçişi geliştirdik ve bunu doğru yapmak üç özel sorunu çözmemizi gerektirdi. Önce bağlama pozlarını hizalarsınız; çünkü A pozu ile T pozu arasındaki fark, her ekleme fark ettirmeden yaklaşık otuz derece ekler. Kök hareketini ve adım uzunluğunu iki ayrı oranla ölçeklersiniz: dikey eksen için kalçadan zemine olan mesafe, yatay eksen içinse genel vücut oranı. Ayrıca yeniden hedeflenmiş klipleri sabit bir örnekleme hızında kaynaklarıyla karşılaştırarak test edersiniz; böylece gerilemeler oyuncudan önce ortaya çıkar. Bu işlem hattı, her klibi elle düzeltmeden yeni animasyon kaynakları ve nihayetinde içerik üreticilerinin sağladığı karakterler ekleyebilmemizi sağlıyor.</p>
<p>Bunun üzerinde, her karede hareket durumuna göre doğru klip ailesini seçen bir animasyon durum makinesi bulunuyor: hıza göre sıçrama çeşidi, darbenin şiddetine göre iniş, hızın arazi gradyanıyla skaler çarpımından eğim yönü, dururken ay yürüyüşü yapmamanız için ayak fazına uygun duruşlar ve bir duvara çarpmanın yürüme ile düşme arasında gidip gelmenize yol açmaması için yüz milisaniyelik gecikme filtresi. Bunların hiçbiri sıra dışı değil, ancak ancak bu katmana sahip olduğunuzda elde edebileceğiniz türden ayrıntılar.</p>
<h2 id="dorduncu-karar-hicbir-motorun-sunmadıgı-bolum" tabindex="-1">Dördüncü karar: hiçbir motorun sunmadığı bölüm <a class="header-anchor" href="#dorduncu-karar-hicbir-motorun-sunmadıgı-bolum" aria-label="Permalink to &quot;Dördüncü karar: hiçbir motorun sunmadığı bölüm&quot;"></a></h2>
<p>Diğer üç karar dünyanın nasıl çalıştığıyla ilgili. Bu karar ise ürünün ne olduğuyla ilgili ve PlayCanvas karşılaştırmasının nihayetinde neden bir kategori hatası olduğunu açıklıyor.</p>
<p>PlayCanvas, Babylon, Unity ve elle geliştirilmiş bir Three.js uygulamasının tümü aynı modeli varsayar: Oyununuzu bir masa başında, 2D editörde, dünyaya dışarıdan bakarak geliştirirsiniz; ardından oynat düğmesine basıp ayrı bir çalışma zamanı yayınlarsınız. Motor içi düzenleme özelliklerinde bile bir iş istasyonunun başında oturur ve baktığınız sahneyi değiştirirsiniz.</p>
<p>Cinevva World bunu tersine çeviriyor. Dünyanın içinden, oyuncularınızın duracağı alanın aynısında duran bir avatar olarak; istediğiniz şeyi tarif edip ortaya çıkışını izleyerek üretim yaparsınız. Üretim ve oyun, bir çalışma zamanına bağlanan geliştirme adımı değil, kesintisiz tek bir oturumdur. Buna en yakın örnekler web 3D motorları değil; Roblox, Rec Room ve Horizon Worlds'tür. Üstelik onlar bile üretimin büyük bölümünü masa başında tutar. Fareyle kullanılan bir editör olmadan bunu uygulanabilir kılan şey, “buraya fenerlerle aydınlatılmış bir iskele yerleştir” ifadesini geometriye ve yerleşime dönüştüren yapay zekâ destekli oluşturucudur.</p>
<p>Bunu genel amaçlı bir motora sonradan ekleyemezsiniz; çünkü bu bir işleme özelliği değildir. Arazinin çalışma zamanında nasıl düzenlenebildiğinden ağ sisteminin her nesneyi yakında duran bir kişinin az önce yaptığı bir şey olarak ele almasına kadar tüm teknoloji yığınının temel varsayımıdır.</p>
<h2 id="bizim-yaptıgımızı-ne-zaman-yapmamalısınız" tabindex="-1">Bizim yaptığımızı ne zaman yapmamalısınız? <a class="header-anchor" href="#bizim-yaptıgımızı-ne-zaman-yapmamalısınız" aria-label="Permalink to &quot;Bizim yaptığımızı ne zaman yapmamalısınız?&quot;"></a></h2>
<p>“Kendi motorumuzu geliştirdik” türündeki yazıların genellikle atladığı bölüm şudur: Bu çeyrekte bir tarayıcı oyunu yayınlamak istiyorsanız bizi örnek almayın. Unity tarzı bir editör ve yönetilen bir işlem hattı istiyorsanız PlayCanvas kullanın. Fizik sistemi dâhil tam kapsamlı bir motor istiyorsanız ve onun yapısı içinde çalışmaktan memnunsanız Babylon kullanın. En yüksek denetimi, en az dayatmayla istiyorsanız ve bunun üzerindeki katmanları geliştirecek ekibiniz varsa Three.js kullanın. Zaten bir Unity oyununuz varsa onu taşıyın.</p>
<p>Kendi işleyicinizi, fizik sisteminizi ve animasyon sisteminizi yazmak yalnızca ürününüzün temel fikri hazır çözümlerle bağdaşmıyorsa; geliştirdiğiniz şey bir motor üzerinde çalışan oyun değil, bir motordan oluşan bir mekânsa doğru karardır. Bizim durumumuzda bu doğruydu. Muhtemelen sizin durumunuzda doğru değil ve bunda bir sorun yok. Dürüst bir değerlendirme yapmanın amacı, ilk kod satırını yazmadan önce hangi durumda olduğunuzu bilmektir.</p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Boş bir dünya hüzünlü bir dünyadır: ayakta kalan veya yok olan her içerik üretici platformunun bize öğretebilecekleri]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-06-06-how-creator-worlds-live-or-die</link>
            <guid>https://app.cinevva.com/tr/blog/2026-06-06-how-creator-worlds-live-or-die</guid>
            <pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Paylaşımlı bir 3D dünyada tek bir cümleden bütün binalar inşa eden bir yapay zekâ geliştirdik. Bunu herkese açmadan önce, bulabildiğimiz tüm benzer platformların çıkışlarını inceledik. Mezarlık devasa, hayatta kalanlar az ve aralarındaki çizgi, abartılı söylemlerin kabul ettiğinden çok daha keskin. İşte hikâyeler, rakamlar ve bizim neleri farklı yaptığımız.]]></description>
            <content:encoded><![CDATA[<h1 id="bos-bir-dunya-huzunlu-bir-dunyadır-ayakta-kalan-veya-yok-olan-her-icerik-uretici-platformunun-bize-ogretebilecekleri" tabindex="-1">Boş bir dünya hüzünlü bir dünyadır: ayakta kalan veya yok olan her içerik üretici platformunun bize öğretebilecekleri <a class="header-anchor" href="#bos-bir-dunya-huzunlu-bir-dunyadır-ayakta-kalan-veya-yok-olan-her-icerik-uretici-platformunun-bize-ogretebilecekleri" aria-label="Permalink to &quot;Boş bir dünya hüzünlü bir dünyadır: ayakta kalan veya yok olan her içerik üretici platformunun bize öğretebilecekleri&quot;"></a></h1>
<p><em><a href="/tr/about.html">Oleg Sidorkin</a>, CTO ve Cinevva Kurucu Ortağı</em></p>
<figure style="margin:1.5rem 0">
<img src="/img/blog/ai-builder-hero.webp" alt="Cinevva'nın Yapay Zekâ Oluşturucusu, sohbet isteminden iki katlı bir ev inşa ediyor" style="width:100%;border-radius:10px">
<figcaption style="color:#9aa7b4;font-size:0.85rem;margin-top:0.5rem">Yapay Zekâ Oluşturucumuz. Biri "ikinci katı inşa et" yazdı; yapay zekâ döşemeyi yerleştirdi, duvarları yükseltti ve sırada merdivenlerle çatıyı yapmayı önerdi. Üstelik bunların hepsi, başka insanların içine girip dolaşabildiği bir dünyanın içinde gerçekleşti.</figcaption>
</figure>
<p>Artık dünyalar üretebiliyoruz ve bir demo videosundan söz etmiyorum. Yukarıdaki görsel bizim editörümüz. Biri sohbet kutusuna &quot;ikinci katı inşa et&quot; yazdı ve yapay zekânın döşemeyi yerleştirmesini, ön, yan ve arka duvarları yükseltmesini, ardından merdivenler ve çatıyla devam etmeyi önermesini izledi. Dekorlar veya dokular değil; başka insanların içine girip dolaşabildiği bir dünyaya yerleştirilen bütün yapılar. İşlem hattımız parçaları da üretiyor: 3D modeller, müzik, ses ve materyaller.</p>
<p>Dolayısıyla Cinevva World'ü halka açmaya çok yakınız. Bunu yapmadan önce gidip ölüm ilanlarını okudum.</p>
<p>Çünkü geliştirdiğimiz şeyle ilgili rahatsız edici gerçek şu: On beş yıldır çok zeki ve çok iyi finanse edilmiş ekipler, paylaşımlı yaratıcı dünyaları işler hâle getirmeye çalışıyor. Bunlardan birkaçı insanlığın bugüne kadar inşa ettiği en büyük şeylerden bazılarına dönüştü. Çoğu ise öldü. Bu iki sonuç arasındaki fark yetenek değil, para da değil; çünkü ölenlerden bazılarında bizim sahip olabileceğimizden çok daha fazlası vardı. Farkı yaratan, neredeyse hiç kimsenin ilk denemede doğru veremediği az sayıdaki karar. Benim bulduklarım bunlar.</p>
<h2 id="mezarlık" tabindex="-1">Mezarlık <a class="header-anchor" href="#mezarlık" aria-label="Permalink to &quot;Mezarlık&quot;"></a></h2>
<p>Başarısızlıklarla başlayalım; çünkü onlar başarı hikâyelerinden daha dürüsttür. Kazananlar geçmişlerini derli toplu bir anlatıya dönüştürerek yeniden yazar. Kaybedenlerin şirket içi yazışmaları sızar.</p>
<h3 id="meta-horizon-worlds-simdiye-kadar-insa-edilmis-en-pahalı-bos-oda" tabindex="-1">Meta Horizon Worlds: şimdiye kadar inşa edilmiş en pahalı boş oda <a class="header-anchor" href="#meta-horizon-worlds-simdiye-kadar-insa-edilmis-en-pahalı-bos-oda" aria-label="Permalink to &quot;Meta Horizon Worlds: şimdiye kadar inşa edilmiş en pahalı boş oda&quot;"></a></h3>
<p>Meta, metaverse iddiasına onlarca milyar dolar harcadı. Reality Labs, 2026'nın başlarında açıklanan tek bir çeyrekte <a href="https://www.cnbc.com/2026/03/18/meta-horizon-worlds-metaverse-vr.html" target="_blank" rel="noreferrer">$6,02 milyar faaliyet zararı</a> bildirdi ve yıllardır her çeyrekte milyarlarca dolar kaybediyordu. Amiral gemisi Horizon Worlds'tü. İşte bu paranın karşılığında alınanlar.</p>
<figure style="margin:1.5rem 0">
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:10px">
<iframe src="https://www.youtube-nocookie.com/embed/mNbz7-ejnZw" title="Horizon Worlds - Resmî Fragman" loading="lazy" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%"></iframe>
</div>
<figcaption style="color:#9aa7b4;font-size:0.85rem;margin-top:0.5rem">Meta'nın Horizon Worlds'ü, resmî fragman. Meta'nın milyarlar harcadığı platform, mobil uygulama olarak hayatta kalabilmek için Haziran 2026'da VR desteğini sonlandırıyor.</figcaption>
</figure>
<p><a href="https://fortune.com/2022/10/07/metas-horizon-world-quality-poor-not-even-employees-using-says-metaverse-vp-leaked-memo/amp/" target="_blank" rel="noreferrer">Fortune</a> ve <a href="https://ryanschultz.com/2022/10/07/leaked-internal-memos-from-meta-detail-problems-with-horizon-worlds-and-horizon-workrooms/" target="_blank" rel="noreferrer">Ryan Schultz</a> tarafından haberleştirilen sızdırılmış bir şirket içi yazışma, içerik üreticilerinin oluşturduğu dünyaların yalnızca yaklaşık yüzde 9'unun 50 veya daha fazla kişi tarafından ziyaret edildiğini ortaya koydu. Ezici çoğunluğu, kendi üreticisi dışında hiç ziyaretçi almadı. Bir yazışma, etkileşim sorununu bu alandaki her kurucunun bedenine dövme yaptırması gereken bir cümleyle özetliyordu: <a href="https://kotaku.com/meta-facebook-horizon-worlds-vr-mark-zuckerberg-1849669048" target="_blank" rel="noreferrer">&quot;Boş bir dünya hüzünlü bir dünyadır.&quot;</a> Aktif kullanıcılarla anket yapmak isteyen araştırmacılar yalnızca 514 kişi bulabildi; çünkü oyuncu kitlesi bu kadar küçüktü.</p>
<p>Kullanıcı tutma rakamları daha da kötüydü. Sızdırılan veriler, kullanıcıların <a href="https://mixed-news.com/en/horizon-worlds-leak-only-1-in-10-users-return-web-launch-coming/" target="_blank" rel="noreferrer">yalnızca yaklaşık 10'da 1'inin geri döndüğünü</a> gösteriyordu. Meta, 2022 için belirlediği aylık 500.000 kullanıcı hedefini sessizce 200.000'e indirdi; buna rağmen platformun eş zamanlı kullanıcı sayısı VRChat'ten ve hatta 2003 yapımı bir oyun olan Second Life'tan daha düşüktü. Şirket içi deneme panoları, Meta'nın kendi çalışanlarının bile platformu kullanmadığını gösteriyordu. Bunun üzerine yönetim, yöneticileri haftalık girişlerden sorumlu tutmaya başladı. Bir başkan yardımcısı ekibi yılın geri kalanı boyunca &quot;kalite karantinasına&quot; aldı ve ürün-pazar uyumunu bulamamış bir ürün üzerinde çalıştıklarını yazılı olarak kabul etti.</p>
<p>Meta, Mart 2026'da <a href="https://www.cnbc.com/2026/03/18/meta-horizon-worlds-metaverse-vr.html" target="_blank" rel="noreferrer">VR desteğini tamamen sonlandıracağını duyurdu</a> ve Horizon Worlds'ü neredeyse yalnızca mobil bir uygulamaya, yani başlığı olmayan insanlar için kendi ifadeleriyle Roblox gibi işleyen bir giriş noktasına dönüştürdü. Şimdiye kadar inşa edilmiş en pahalı metaverse, hayatını ilk günden olması gereken şeye dönüşmeye çalışarak noktaladı.</p>
<p>Buradan çıkarılacak ders, öyle olsa bile, &quot;VR için çok erkendi&quot; değil. Ders şu: Hiçbir sermaye miktarı boş bir dünyayı dolduramaz. İçerik yoğunluğu, pazarlama bütçesiyle satın alabileceğiniz bir şey değildir. Dünyalar boşsa insanlar gider; insanlar gidince de dünyalar boş kalır. Bu döngü Meta'yı canlı canlı yedi.</p>
<h3 id="decentraland-ve-the-sandbox-milyar-dolarlık-hayalet-kasabalar" tabindex="-1">Decentraland ve The Sandbox: milyar dolarlık hayalet kasabalar <a class="header-anchor" href="#decentraland-ve-the-sandbox-milyar-dolarlık-hayalet-kasabalar" aria-label="Permalink to &quot;Decentraland ve The Sandbox: milyar dolarlık hayalet kasabalar&quot;"></a></h3>
<p>Ekim 2022'de tek bir veri noktası kripto dünyasını ateşe verdi. <a href="https://www.coindesk.com/web3/2022/10/07/its-lonely-in-the-metaverse-decentralands-38-daily-active-users-in-a-13b-ecosystem" target="_blank" rel="noreferrer">DappRadar'ın bildirdiğine göre</a> Decentraland'in günlük 38 aktif kullanıcısı vardı. The Sandbox'ın ise 522. O sırada bu projelerin her biri yaklaşık 1,3 milyar dolarlık piyasa değerine sahipti.</p>
<figure style="margin:1.5rem 0">
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:10px">
<iframe src="https://www.youtube-nocookie.com/embed/Zg5vcdEeLOA" title="The Sandbox Resmî Tanıtım Videosu" loading="lazy" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%"></iframe>
</div>
<figcaption style="color:#9aa7b4;font-size:0.85rem;margin-top:0.5rem">The Sandbox, resmî tanıtım videosu. Günlük kullanıcı sayıları yüzlerle birkaç bin arasında değişirken hem onun hem de Decentraland'in değerlemesi yaklaşık 1,3 milyar dolardı.</figcaption>
</figure>
<p>Projeler buna itiraz etti ve işin ayrıntısı aslında alay konusu olmalarından daha önemli. 38 rakamı, giriş yapıp blokzincirle hiç etkileşime girmeden dolaşanları değil, yalnızca bir gün içinde zincir üzerinde işlem yapan benzersiz cüzdanları, yani DappRadar'ın &quot;ödeme yapanlar&quot; dediği kişileri sayıyordu. Decentraland ise <a href="https://blockworks.com/news/metaverse-platforms-set-the-record-straight-about-daily-active-users" target="_blank" rel="noreferrer">aylık 56.697 giriş yapan kullanıcısı</a> olduğunu ve diğer tahminlere göre günlük kullanıcı sayısının yaklaşık 8.000'e ulaştığını açıkladı. The Sandbox, 14. gün kullanıcı tutma oranının yüzde 40 olduğu bir alfa sezonunda günlük 39.000 kullanıcıya sahip olduğunu öne sürdü.</p>
<p>Ancak bu fark üzerinde bir an durun; çünkü bu makaledeki en önemli rakam bu. En iyimser rakamları kabul etsek bile, en fazla birkaç bin günlük kullanıcının üzerinde duran milyar dolarlık değerlemelerle karşı karşıyayız. Karşılaştırmak gerekirse araştırma, blokzincir kullanmayan Roblox'un aynı dönemde <a href="https://blockworks.com/news/metaverse-platforms-set-the-record-straight-about-daily-active-users" target="_blank" rel="noreferrer">günlük 52 milyon aktif kullanıcıya, ancak aylık yalnızca 11,3 milyon ödeme yapan kullanıcıya sahip olduğunu</a> ortaya koydu. Ücretsiz sanal dünyalardaki çoğu insan nadiren işlem yapar veya hiç yapmaz. Bu iki yönlü bir durum. Günlük 38 aktif kullanıcı üzerinden yapılan alayın haksız olduğu anlamına geliyor; ama aynı zamanda milyar dolarlık değerlemenin de bir hayal olduğu anlamına geliyor. İkisi de yanlış şeyi ölçüyordu. Değerleme token spekülasyonunu ölçüyordu. Alay konusu olan rakam ise cüzdan işlemlerini. Hiçbiri insanların eğlenip eğlenmediğini ölçmüyordu.</p>
<p>Bu, gösteriş metrikleri tuzağının en saf hâlidir. Kayıtlı hesaplar, token piyasa değeri, toplam adreslenebilir pazar, basındaki görünürlük: Bunların hiçbiri size dünyanızın canlı olup olmadığını söylemez. Bunu gösteren yegâne rakamlar, kaç kişinin geri geldiği ve bir şeyler üreten insanların üretmeye devam edip etmediğidir.</p>
<h3 id="dreams-kimsenin-icinde-kalamadıgı-en-guzel-arac" tabindex="-1">Dreams: kimsenin içinde kalamadığı en güzel araç <a class="header-anchor" href="#dreams-kimsenin-icinde-kalamadıgı-en-guzel-arac" aria-label="Permalink to &quot;Dreams: kimsenin içinde kalamadığı en güzel araç&quot;"></a></h3>
<p>LittleBigPlanet'ın arkasındaki stüdyo Media Molecule, yaklaşık on yılını o kadar kapsamlı bir üretim aracı olan Dreams'i geliştirmeye harcadı ki insanlar onun içinde oynanabilir oyunlar, animasyon kısa filmleri ve müzik albümleri yaptı. Eleştirmenler ona bayıldı. Stüdyo, <a href="https://www.pushsquare.com/news/2023/07/dreams-live-service-ending-as-media-molecule-couldnt-find-a-sustainable-path" target="_blank" rel="noreferrer">Eylül 2023'te canlı hizmeti sonlandırdı</a> ve sürdürülebilir bir iş modeli bulamadığını açıkça belirtti.</p>
<figure style="margin:1.5rem 0">
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:10px">
<iframe src="https://www.youtube-nocookie.com/embed/2ltgkcoQzow" title="Dreams | Çıkış Tarihi Fragmanı | PS4" loading="lazy" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%"></iframe>
</div>
<figcaption style="color:#9aa7b4;font-size:0.85rem;margin-top:0.5rem">Media Molecule tarafından geliştirilen Dreams. İnsanların bayıldığı, ancak içerik üreticilerinin tek kuruş bile kazanamadığı bir üretim aracı; canlı hizmeti 2023'te sona erdi.</figcaption>
</figure>
<p>Bu başarısızlık değerlendirmesi, kendi kendine açılan yaralardan oluşan bir kontrol listesi ve bunu büyük bir saygıyla söylüyorum; çünkü biz de bunların her birini yapabiliriz. Dreams <a href="https://www.pushsquare.com/news/2023/07/dreams-live-service-ending-as-media-molecule-couldnt-find-a-sustainable-path" target="_blank" rel="noreferrer">içerik üreticilerinin çalışmalarından para kazanmasına hiçbir zaman izin vermedi</a>. Vadedilen oyun içi mağaza hiçbir zaman yayınlanmadı. Kozmetikler, savaş bileti, hiçbir şey yoktu. Bir aracı platforma dönüştürebilecek türden ciddi içerik üreticilerinin, karşılığında hiçbir kazanç ihtimali yokken yıllarını yatırmak için bir nedeni yoktu. Yalnızca PS4'te çıktı; PC sürümü ve çıkışta yerel PS5 sürümü yoktu. Bu da ulaşabileceği kitleyi ciddi biçimde sınırladı. Kurucu ortak <a href="https://icon-era.com/threads/media-molecule-co-founders-biggest-regret-with-dreams-was-not-focusing-on-multiplayer-understands-new-ip-is-more-of-a-game-than-a-creative-tool.11724/" target="_blank" rel="noreferrer">Mark Healey daha sonra en büyük pişmanlığının çok oyunculu deneyime odaklanmamak olduğunu söyledi</a>; ayrıca ekip, yarattıkları şeyin bir üretim aracından ziyade oyun olarak daha iyi işlediğini anladı.</p>
<p>Bu son kısmı tekrar okuyun. Dünyanın en yetenekli kullanıcı üretimli içerik stüdyosu, olup bittikten sonra, bu şeyin önce oyun, sonra araç olması gerektiği sonucuna vardı. Bu, çalışmanın tamamındaki en önemli cümle ve buna geri döneceğiz.</p>
<h3 id="mezarlıgın-geri-kalanı" tabindex="-1">Mezarlığın geri kalanı <a class="header-anchor" href="#mezarlıgın-geri-kalanı" aria-label="Permalink to &quot;Mezarlığın geri kalanı&quot;"></a></h3>
<p>Aynı kalıp acımasız bir tutarlılıkla tekrarlanıyor.</p>
<p>Ortak çalışmaya dayalı bir kullanıcı üretimli içerik platformu olan <a href="https://www.gamedeveloper.com/business/crayta-to-shut-down-after-launch-platform-stadia-bites-the-dust" target="_blank" rel="noreferrer">Crayta</a>, Mart 2023'te kapandı ve kullanıcılar ürettikleri her şeyi kaybetti. Geliştiricisi 2021'de Meta tarafından satın alınmıştı ama platform yine de kapatıldı. Doğrudan neden şuydu: Google Stadia'da çıkmıştı ve Stadia ölünce Crayta da onunla birlikte öldü. Platform bağımlılığı, kendi başınıza doğrulttuğunuz dolu bir silahtır.</p>
<figure style="margin:1.5rem 0">
<img src="https://cdn.cinevva.com/blog/lived-or-died-crayta.webp" alt="Ortak çalışmaya dayalı oyun geliştirme platformu Crayta" loading="lazy" style="width:100%;border-radius:10px">
<figcaption style="color:#9aa7b4;font-size:0.85rem;margin-top:0.5rem">Crayta, Google Stadia'da çıktı. Stadia 2023'te kapatılınca Crayta da onunla birlikte gitti ve içerik üreticileri yaptıkları her şeyi kaybetti. Fragmandan bir kare.</figcaption>
</figure>
<p>Microsoft'un kullanıcı üretimli oyun geliştirme aracı Project Spark, yıllar önce aynı gidişatla kapandı: güçlü bir araç, ancak kalmaya devam eden yeterince insan yoktu. Linden Lab'in Second Life'ın VR halefi olarak geliştirdiği Sansar, kitle bulamayınca satıldı. Second Life'ın kurucusu Philip Rosedale'in ikinci metaverse şirketi High Fidelity ise sanal dünyalardan tamamen uzaklaşarak yön değiştirdi.</p>
<figure style="margin:1.5rem 0">
<img src="https://cdn.cinevva.com/blog/lived-or-died-secondlife.webp" alt="Linden Lab'in kullanıcılar tarafından oluşturulan sanal dünyası Second Life" loading="lazy" style="width:100%;border-radius:10px">
<figcaption style="color:#9aa7b4;font-size:0.85rem;margin-top:0.5rem">Linden Lab'in 2003 tarihli dünyası Second Life, yirmi yılı aşkın sürenin ardından hâlâ çalışıyor. Kendi VR halefleri Sansar ile Philip Rosedale'in High Fidelity'si ise başarısız oldu. Fragmandan bir kare.</figcaption>
</figure>
<p>Şu anda gerçekleştiği için görmezden gelemeyeceğiniz başka bir işaret de Rec Room'un, hiçbir zaman kalıcı kârlılığa ulaşamadığını belirterek <a href="https://www.uploadvr.com/vrchat-statement-after-rec-room-and-horizon-worlds-fold/" target="_blank" rel="noreferrer">1 Haziran 2026 itibarıyla kapanacağını duyurmasıdır</a>.</p>
<p>Metaverse inşa eden metaverse şirketlerinin kurucuları kendi metaverse'lerinde bile kalamadı. Zor kısmın render almak olduğunu düşünen herkes bundan dehşete kapılmalı.</p>
<figure style="margin:1.5rem 0">
<img src="https://cdn.cinevva.com/blog/lived-or-died-recroom.webp" alt="Platformlar arası sosyal kullanıcı üretimli içerik dünyası Rec Room" loading="lazy" style="width:100%;border-radius:10px">
<figcaption style="color:#9aa7b4;font-size:0.85rem;margin-top:0.5rem">En büyük sosyal üretim dünyalarından biri olan Rec Room, toplamda 150 milyondan fazla oyuncuya ulaştı; buna rağmen bu erişimi sürdürülebilir bir işe dönüştüremedi ve 1 Haziran 2026'da kapandı. Fragmandan bir kare.</figcaption>
</figure>
<h2 id="hayatta-kalanlar-ve-onları-gercekte-neyin-kurtardıgı" tabindex="-1">Hayatta kalanlar ve onları gerçekte neyin kurtardığı <a class="header-anchor" href="#hayatta-kalanlar-ve-onları-gercekte-neyin-kurtardıgı" aria-label="Permalink to &quot;Hayatta kalanlar ve onları gerçekte neyin kurtardığı&quot;"></a></h2>
<p>Şimdi de hayatta kalanlar. Öğretici olan şu ki hiçbiri beklediğiniz şekilde kazanmadı; hatta birkaçı, başarısız olanların uyduğu kuralları çiğnemesine rağmen kazandı.</p>
<h3 id="roblox-on-iki-yılda-gelen-bir-gecelik-basarı" tabindex="-1">Roblox: on iki yılda gelen bir gecelik başarı <a class="header-anchor" href="#roblox-on-iki-yılda-gelen-bir-gecelik-basarı" aria-label="Permalink to &quot;Roblox: on iki yılda gelen bir gecelik başarı&quot;"></a></h3>
<p>Herkes model olarak Roblox'u gösteriyor. Gerçekte yaşananları ise neredeyse hiç kimse kopyalamıyor, çünkü gerçekte yaşanan şey on iki yıl boyunca başarısız görünmekti.</p>
<figure style="margin:1.5rem 0">
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:10px">
<iframe src="https://www.youtube-nocookie.com/embed/LTnMKjXEnMY" title="ROBLOX - Oyun Fragmanı" loading="lazy" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%"></iframe>
</div>
<figcaption style="color:#9aa7b4;font-size:0.85rem;margin-top:0.5rem">Roblox. 2006'da yaklaşık 100 kişiyi çekti ve üstel büyümeye ulaşması on iki yıl sürdü; tüm bunları da topluluğun oyunları geliştirmesine izin vererek başardı.</figcaption>
</figure>
<p>Roblox'un 2006 betası, <a href="https://www.howtheygrow.co/p/how-roblox-grows" target="_blank" rel="noreferrer">eşzamanlı oyuncu sayısı 30 ila 40 arasında zirve yaparken yaklaşık 100 teknoloji meraklısını çekti</a>. Ardından on yılı aşkın süre boyunca ağır ağır ilerledi. 2016'nın başlarında 9 milyon olan kullanıcı sayısı, 2019'da 90 milyona, 2023'te ise 214 milyona ulaştı. Kurucu David Baszucki, Minecraft 2009'da hızla yükselip kendisini geride bıraktığında bile kullanıcı üretimi içerik vizyonundan sapmayı reddetti. Bunu bilinçli biçimde ağır ağır olgunlaşan bir süreç olarak gördü ve fark yaratan tek hamle, oyunları şirket içinde geliştirmek yerine topluluğun tüm oyunları geliştirmesine izin verme kararıydı. Bu, içerik maliyetini ortadan kaldırdı ve her içerik üreticisini bir büyüme motoruna dönüştürdü.</p>
<p>Ancak ezbere taklit edenlerin gözden kaçırdığı kısım şu; bu yüzden ikinci bir kaynağı hep açık tutuyorum. Matthew Ball'un <a href="https://www.matthewball.co/all/roblox2024" target="_blank" rel="noreferrer">2024 tarihli ayrıntılı incelemesi</a>, Roblox'un devasa ölçekte bile yaklaşık yüzde eksi 38 faaliyet marjıyla çok ağır zarar ettiğini, herhangi bir ayda kullanıcıların yalnızca yüzde 6'sının oyun içi para birimini satın aldığını ve kullanıcı başına gelirin konsol platformlarının çok altında kaldığını gösteriyor. Roblox dünyanın en büyük oyunu ama hâlâ para kazanmakta zorlanıyor. Çark gerçekten işliyor, fakat ekonomisi zorlu. Bir içerik üretici platformunun para basma ruhsatı olduğunu söyleyen herkes size bir şey satmaya çalışıyordur.</p>
<p>Yine de daha derin ders, bu kullanıcı sayılarında apaçık ortada duruyor. Roblox'un yüz milyonlarca kullanıcısının ezici çoğunluğu hiçbir şey geliştirmiyor. Başkalarının yaptığı on milyonlarca oyundan oluşan bir kataloğu <em>oynamaya</em> geliyorlar. Bu kataloğun büyümesi için on yıl ve geliştiricilere ödeme yapan bir ekonomi gerekti. Roblox, insanların tesadüfen oynadığı bir geliştirme aracı değil. İnsanların oynamaya geldiği ve küçük bir kısmının tesadüfen içerik geliştirdiği bir yer. Bu sıralama her şey demek.</p>
<h3 id="minecraft-bos-kalması-mumkun-olmayan-dunya" tabindex="-1">Minecraft: boş kalması mümkün olmayan dünya <a class="header-anchor" href="#minecraft-bos-kalması-mumkun-olmayan-dunya" aria-label="Permalink to &quot;Minecraft: boş kalması mümkün olmayan dünya&quot;"></a></h3>
<p>Minecraft hiçbir zaman boş dünya sorunu yaşamadı ve nedenini anlamak meselenin tamamını çözmek demek.</p>
<figure style="margin:1.5rem 0">
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:10px">
<iframe src="https://www.youtube-nocookie.com/embed/MmB9b5njVbA" title="Resmî Minecraft Fragmanı" loading="lazy" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%"></iframe>
</div>
<figcaption style="color:#9aa7b4;font-size:0.85rem;margin-top:0.5rem">Minecraft'ın resmî fragmanı. Prosedürel hayatta kalma sistemi sayesinde dünya hiçbir zaman boş değildi ve oynanmaya değer olmak için kullanıcı içeriğine hiç ihtiyaç duymadı.</figcaption>
</figure>
<p>Minecraft, prosedürel üretime sahip bir hayatta kalma oyunu olarak çıktı. Dünya sonsuza dek kendi kendini kuruyor ve daha ilk dakikada ne yapacağınızı düşünerek boş bir tuvale bakmıyorsunuz. Gece çöküyor ve bir şey sizi öldürecek; bu yüzden kazmaya başlıyorsunuz. Oyun, sıfır başka kullanıcı ve sıfır kullanıcı üretimi içerikle tek bir kişi için sonsuza dek eğlenceli; çünkü prosedürel üretici tükenmez bir içerik makinesi. Modlar, sunucular, özel haritalar ve tüm yaratıcı ekosistem, zaten kendini sattırabilen bir oyunun <em>üzerinde</em> büyüdü. Yaratıcı mod, milyonlarca kişi hayatta kalma moduna çoktan bağlandıktan sonra geldi. Gerisini kulaktan kulağa yayılma ve YouTube halletti.</p>
<p>Minecraft, soğuk başlangıç sorununu hiç yaşamayarak çözdü. Hile kodu bu ve biz de onu ödünç alacağız.</p>
<h3 id="tarayıcı-oyunları-rekabet-ustunlugunun-tamamı-olarak-dagıtım" tabindex="-1">Tarayıcı oyunları: rekabet üstünlüğünün tamamı olarak dağıtım <a class="header-anchor" href="#tarayıcı-oyunları-rekabet-ustunlugunun-tamamı-olarak-dagıtım" aria-label="Permalink to &quot;Tarayıcı oyunları: rekabet üstünlüğünün tamamı olarak dağıtım&quot;"></a></h3>
<p>Bir de gerçek dağıtım mekanizmamıza en yakın tür var: indirme gerektirmeyen tarayıcı oyunları.</p>
<figure style="margin:1.5rem 0">
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:10px">
<iframe src="https://www.youtube-nocookie.com/embed/oznO3GGzu2s" title="Krunker.io fragmanı" loading="lazy" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%"></iframe>
</div>
<figcaption style="color:#9aa7b4;font-size:0.85rem;margin-top:0.5rem">Krunker, .io geleneğinde bir tarayıcı FPS'si. Türün tüm rekabet üstünlüğü dağıtımda yatıyor: indirmeden tam bir oyunu açan tek bir bağlantı.</figcaption>
</figure>
<p><a href="https://news.viverse.com/post/what-are-io-games" target="_blank" rel="noreferrer">Agar.io, 2015'teki çıkışından sonraki birkaç hafta içinde günde yaklaşık 5 milyon oyuncuya ulaştı</a>. Slither.io, 68 milyon mobil indirmeye ve tarayıcıda 67 milyon oynanmaya ulaştı. Araştırma bunun nedenini açıkça söylüyor: <a href="https://news.viverse.com/post/what-are-io-games" target="_blank" rel="noreferrer">&quot;.io türünün rekabet üstünlüğü oyun mekaniği değil, dağıtımın kendisidir.&quot;</a> Bir bağlantıya tıklıyorsunuz ve oynamaya başlıyorsunuz. Kurulum yok, hesap yok, uygulama mağazası yok. <a href="https://medium.com/the-megacool-blog/9-growth-hacks-from-viral-hit-game-agar-io-7d8f71f70a0c" target="_blank" rel="noreferrer">Agar.io'ya başlamak için tek tıklama yeterliydi</a>: bir ad yazın, oyna düğmesine basın ve içeridesiniz. TikTok'ta videoların yayıldığı gibi sohbet uygulamalarında yayıldı.</p>
<p>Fakat bu hediyenin içinde bizim tarafımızı da kesen bir bıçak var. İndirme olmaması, bağlılık da olmaması demek. Birini içeri sokan aynı pürüzsüzlük onu dışarı da çıkarıyor; çünkü bir sekmeyi kapatmanın hiçbir bedeli yok. Tarayıcıda viral yayılma gerçek, fakat varsayılan olarak yüzeysel. .io oyunları, ilk on saniyede anında ve açıkça eğlenceli olarak bunun üstesinden geldi. Ölen tarayıcı dünyalarına girmek zahmetsizdi ama vardığınızda kalmanız için hiçbir neden sunmuyorlardı.</p>
<h3 id="among-us-figma-townscaper-vrchat-kazanmanın-dort-yolu-daha" tabindex="-1">Among Us, Figma, Townscaper, VRChat: kazanmanın dört yolu daha <a class="header-anchor" href="#among-us-figma-townscaper-vrchat-kazanmanın-dort-yolu-daha" aria-label="Permalink to &quot;Among Us, Figma, Townscaper, VRChat: kazanmanın dört yolu daha&quot;"></a></h3>
<p>Dört kısa örnek daha; çünkü her biri farklı bir kaldıracı ayrıştırıyor.</p>
<p><a href="https://www.esports.net/news/how-among-us-blew-up-online-two-years-after-release/" target="_blank" rel="noreferrer">Among Us</a> 2018'de çıktı ve iki yıl boyunca ticari açıdan hiçbir varlık gösteremedi. Geliştiriciler oyunu neredeyse terk ediyordu. Ardından Eylül 2020'de <a href="https://howtomarketagame.com/2020/09/14/among-us-the-4-lessons-of-their-viral-success/" target="_blank" rel="noreferrer">giderek daha büyük yayıncılardan oluşan bir zincir</a> oyunu keşfetti; bu süreç saatler süren bir Sodapoppin yayınıyla zirveye ulaştı ve oyun küresel bir fenomene dönüştü. İlk can suyu, itch.io ana sayfasında öne çıkarılmaktan ve satışlarının yarısını oluşturan Koreli bir kitleden geldi. Ders: Yeterince uzun süre ayakta kalıp keşfedilebilirseniz büyük çıkış, lansmandan yıllar sonra ve hiç planlamadığınız bir kanaldan gelebilir.</p>
<figure style="margin:1.5rem 0">
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:10px">
<iframe src="https://www.youtube-nocookie.com/embed/NSJ4cESNQfE" title="Among Us Steam Çıkış Fragmanı" loading="lazy" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%"></iframe>
</div>
<figcaption style="color:#9aa7b4;font-size:0.85rem;margin-top:0.5rem">Among Us. Bir yayıncı zinciri onu 2020'de küresel bir fenomene dönüştürmeden önce iki yıl boyunca neredeyse hiç fark edilmeden bekledi.</figcaption>
</figure>
<p><a href="https://review.firstround.com/the-5-phases-of-figmas-community-led-growth-from-stealth-to-enterprise/" target="_blank" rel="noreferrer">Figma</a> yaklaşık üç yıl gizli geliştirme sürecinde kaldı, ücretsiz olarak kullanıma sunuldu ve ücret almaya başlamadan önce iki yıl daha bekledi. Aktivasyon anı çok oyunculu kullanımdı: bir tasarımcının aynı dosyayı başka birinin de düzenlediğini hissettiği o an. Asıl önemli kısım da şu. Figma'nın ücretsiz katmanı başlangıçta sizi 2 ortak çalışanla sınırlıyordu; bu da ürünü sattıran o büyülü anı boğuyordu. İnsanların bu deneyimi gerçekten yaşayabilmesi için ortak çalışan sayısını sınırsız hâle getirerek sorunu çözdüler. Twitter'daki tasarım alanı kanaat önderlerini doğrudan hedefleyerek topluluğun ilk tohumlarını attılar. Ders: Aydınlanma anınızı bulun, ardından yeni kullanıcıyla o an arasındaki tüm engelleri kaldırın.</p>
<figure style="margin:1.5rem 0">
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:10px">
<iframe src="https://www.youtube-nocookie.com/embed/n5gJgkO2Dg0" title="Figma ürün lansmanı açılış konuşması" loading="lazy" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%"></iframe>
</div>
<figcaption style="color:#9aa7b4;font-size:0.85rem;margin-top:0.5rem">Figma. Aktivasyon anı çok oyunculu kullanımdı; bu yüzden ürünü sattıran büyünün önünü kesen ücretsiz katmandaki ortak çalışan sınırını kaldırdı.</figcaption>
</figure>
<p><a href="https://www.gamedeveloper.com/game-platforms/how-townscaper-works-a-story-four-games-in-the-making" target="_blank" rel="noreferrer">Townscaper</a>, ekran görüntülerinin gücüyle başarıya ulaşan küçük bir yaratıcı oyuncaktı. Geliştiricisi, geliştirme sürecinde yalnızca kısa videolar paylaşarak Twitter takipçi sayısının yaklaşık 20.000'den 90.000'e yükseldiğini gördü ve bunu oyunun başarılı olacağına dair erken bir işaret olarak yorumladı. Ders: Ürününüz güzelse ve siz daha piyasaya bile sürmeden insanlar onu kendiliğinden paylaşıyorsa, bu alabileceğiniz en gerçek doğrulamadır.</p>
<figure style="margin:1.5rem 0">
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:10px">
<iframe src="https://www.youtube-nocookie.com/embed/hqq25n6cQqo" title="Townscaper Çıkış Fragmanı" loading="lazy" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%"></iframe>
</div>
<figcaption style="color:#9aa7b4;font-size:0.85rem;margin-top:0.5rem">Townscaper'ın çıkış fragmanı. Amaçları olmayan, insanların kendiliğinden paylaştığı ekran görüntülerinin gücüyle yayılan yaratıcı bir oyuncak.</figcaption>
</figure>
<p>Ayrıca Meta'nın milyarlarıyla Rec Room'un aynı aylarda çöktüğü dönemde <a href="https://www.uploadvr.com/vrchat-statement-after-rec-room-and-horizon-worlds-fold/" target="_blank" rel="noreferrer">VRChat</a>, yaklaşık 160.000 eşzamanlı kullanıcıyla rekor kırdı. Topluluk odaklı, içerik üretici odaklı ve çevresinde ölen ürünler kadar güçlü bir finansmana uzaktan yakından sahip değil. VRChat, ayakta kalmasını sermayeden çok topluluk sadakatine ve yaratıcılığa borçlu olduğunu söylüyor. Hayatta kalanın kendi ağzından ders şu: bağlılık gösteren içerik üreticilerinin tutkusu paradan daha uzun ömürlüdür.</p>
<h2 id="hayatta-kalanlarla-olenleri-gercekte-ayıran-sey" tabindex="-1">Hayatta kalanlarla ölenleri gerçekte ayıran şey <a class="header-anchor" href="#hayatta-kalanlarla-olenleri-gercekte-ayıran-sey" aria-label="Permalink to &quot;Hayatta kalanlarla ölenleri gerçekte ayıran şey&quot;"></a></h2>
<p>Hikâyeleri yan yana koyduğunuzda örüntü son derece açık.</p>
<table tabindex="0">
<thead>
<tr>
<th>Platform</th>
<th>Neye bel bağladı</th>
<th>Sonunda nereye vardı</th>
<th>Ders</th>
</tr>
</thead>
<tbody>
<tr>
<td>Minecraft</td>
<td>Tek oyuncu için bile eğlenceli prosedürel hayatta kalma</td>
<td>Tüm zamanların en çok satan oyunu, 350 milyondan fazla kopya</td>
<td>Dünyanız asla boş kalmasın</td>
</tr>
<tr>
<td>Roblox</td>
<td>Topluluk tarafından geliştirilen oyunlar ve içerik üretici ödemeleri</td>
<td>On iki yılda günlük 80 milyondan fazla kullanıcı</td>
<td>Önce oynanacak bir yer, sonra bir araç olun</td>
</tr>
<tr>
<td>.io oyunları</td>
<td>Tek tıklamayla, indirmeden tarayıcıda oynama</td>
<td>Birkaç haftada milyonlarca oyuncu</td>
<td>Rekabet üstünlüğü dağıtımdır, bağlılıksa yüzeyseldir</td>
</tr>
<tr>
<td>Figma</td>
<td>Ücretsiz katman, gerçek zamanlı çok oyunculu kullanım</td>
<td>Yaklaşık 20 milyar dolarlık satın alma teklifi</td>
<td>Aydınlanma anına giden tüm engelleri kaldırın</td>
</tr>
<tr>
<td>Among Us</td>
<td>Ucuz bir sosyal oyun ve sabır</td>
<td>İki yıl gecikmeyle 3,8 milyon eşzamanlı kullanıcı</td>
<td>Bulunacak kadar uzun süre ayakta kalın</td>
</tr>
<tr>
<td>Townscaper</td>
<td>Ekran görüntüsü paylaşmaya değer güzel bir oyuncak</td>
<td>Yaklaşık 380 bin satış, organik yayılma</td>
<td>Kendiliğinden paylaşım en gerçek sinyaldir</td>
</tr>
<tr>
<td>VRChat</td>
<td>Topluluk ve içerik üretici enerjisi</td>
<td>2026'da yaklaşık 160 bin eşzamanlı kullanıcı</td>
<td>Tutku sermayeden daha uzun ömürlüdür</td>
</tr>
<tr>
<td>Horizon Worlds</td>
<td>Milyarlarca dolarlık sermaye, önce VR yaklaşımı</td>
<td>VR 2026'da kapatıldı, yaklaşık her 10 kişiden 1'i geri döndü</td>
<td>Para boş bir dünyayı dolduramaz</td>
</tr>
<tr>
<td>Decentraland / Sandbox</td>
<td>Oyundan önce token ekonomisi</td>
<td>Yaklaşık 1,3 milyar dolarlık değerlemeler, günlük yüzlerce kullanıcı</td>
<td>Değerleme, kitle demek değildir</td>
</tr>
<tr>
<td>Dreams</td>
<td>Derinlikli bir araç, ekonomi yok, çok oyunculu yok</td>
<td>Canlı hizmet 2023'te sona erdi</td>
<td>İçerik üreticilerine ödeme yapın, çok oyunculu modu çıkarın, oyun olun</td>
</tr>
<tr>
<td>Crayta</td>
<td>Stadia üzerinde yaşayan bir UGC platformu</td>
<td>2023'te Stadia ile birlikte kapandı</td>
<td>Sizi dışarı atabilecek bir platformun üzerine asla ürün kurmayın</td>
</tr>
<tr>
<td>Project Spark / Sansar</td>
<td>Güçlü araçlar, geri dönmek için neden yok</td>
<td>Kapatıldı veya başka yöne çevrildi</td>
<td>Oyunu olmayan bir araç günlük alışkanlık yaratamaz</td>
</tr>
</tbody>
</table>
<p>Yaratıcı dünyaları öldüren şey boş odadır. Horizon Worlds, Decentraland, Dreams, Crayta, Project Spark ve Sansar'ın hepsi aynı şekilde öldü: yeterince insan yok, yeterince içerik yok, geri dönmek için yeterince neden yok; üstelik bunların hepsi birbirini besleyen bir döngünün içinde. Soğuk başlangıç sorunu asıl bölüm sonu canavarıdır. Geri kalan her şey eğitim bölümüdür.</p>
<p>Onları kurtaran şeyse kalabalık gelmeden önce var olmak için bir nedene sahip olmaktır. Minecraft'ın prosedürel hayatta kalma sistemi vardı. Roblox'un sabırla filizlendirilmiş on yıllık oyun birikimi vardı. .io oyunları ilk on saniyede eğlence sunuyordu. Hayatta kalanların her biri, katalogları boşken bile zaman ayırmaya değerdi. Kaybedenlerin her biri ise başkalarının ziyaret edilmeye değer hâle getirmesini bekleyen güzel birer kaptı. Bu, Dreams'in itirafının genelleştirilmiş hâli: önce bir oyun, sonra bir platform geliştirin. Platform ikinci perdedir. Onu, önce insanların sırf kendisi için kullandığı bir şey olarak hak edersiniz.
Hayatta kalmayı gerçekten öngören metrikler, basın bülteninde yer alanlar değildir. Araştırmalar bu konuda tutarlı. Ürün-pazar uyumunun belirleyici işareti, <a href="https://newsletter.pmcurve.com/p/retention-masterclass" target="_blank" rel="noreferrer">elde tutma eğrinizin yataylaşmasıdır</a>: bir kullanıcı kohortu sonsuza dek geri gelmeye devam eder. Huninin üst kısmı ne kadar büyük olursa olsun, sıfıra inen bir eğri uyum olmadığını gösterir. Sektördeki kabaca referans değerler <a href="https://solsten.io/blog/d1-d7-d30-retention-in-gaming" target="_blank" rel="noreferrer">1. günde yüzde 40, 7. günde yüzde 20, 30. günde yüzde 10</a> elde tutmadır ve uzun vadeli sağlığı öngören değer 30. gündeki orandır. Üretici tarafı olan her şeyde ölüm noktası arz tarafıdır: başarısız pazar yerlerinin <a href="https://forkoff.xyz/blog/founder-growth/two-sided-marketplace-cold-start-2026" target="_blank" rel="noreferrer">yaklaşık yüzde 67'si talep değil, arz yüzünden çöker</a>. Üreticileri elde tutmak hayati göstergedir. Kayıtlı hesaplar ve değerlemeler ise gösteriş metrikleridir.</p>
<p>Bu hikâyelerden çıkarılabilecek birkaç ders daha var. Üreticilerinizin para kazanmasını sağlayın, yoksa onları kaybedersiniz; çünkü Dreams, yetenekli insanların hiçbir getirisi olmadan yıllarını harcamayacağını kanıtladı. Media Molecule'ün kendi pişmanlığının da gösterdiği gibi, çok oyunculu deneyim genellikle bir özellik değil, asıl meseledir. Crayta'nın gösterdiği üzere, evinizi sizi kapı dışarı edebilecek bir platformun üzerine asla kurmayın. İndirme gerektirmemek de iki ucu keskin bir kılıçtır: var olan en iyi kullanıcı edinme kanalı ve en zayıf bağlılık aracıdır; dolayısıyla ilk altmış saniyenin iyi olması konusundaki yükün tamamı size düşer.</p>
<h2 id="tum-bunların-altında-yatan-tuzak" tabindex="-1">Tüm bunların altında yatan tuzak <a class="header-anchor" href="#tum-bunların-altında-yatan-tuzak" aria-label="Permalink to &quot;Tüm bunların altında yatan tuzak&quot;"></a></h2>
<p>Bir katman daha var ve bu, tam da içinde bulunduğumuz ana özgü; çünkü artık yok olup gidenlerin hiç sahip olmadığı bir aracımız var. Yapay zekâyla dünyalar üretebiliyoruz. Bu da haftalardır zihnimde evirip çevirdiğim bir paradoks doğuruyor.</p>
<p>Eğer işin içinde yapay zekâ varsa her dünya benzersiz, her kişi için sıfırdan üretilmiş ve ona göre ayarlanmış olmamalı mı? Ama herkesin dünyası benzersizse, paylaşılan bir an paylaşılan bir mekân gerektirdiğine göre insanlar birbirleriyle nasıl karşılaşacak? Dünya zaten ortak olmak zorundaysa neden gerçek bir stüdyo gibi elle güzel bir mekân tasarlamak yerine yapay zekâ kullanalım?</p>
<p>Bu yaklaşımların her biri sonuna kadar götürüldüğünde işe yaramayan bir yere varıyor. Yalnızca sizin için üretilmiş bir dünya, içinde kimsenin olmadığı bir dünyadır. Google'ın Genie'si tek bir cümleden oynanabilir bir ortam oluşturabiliyor ve bu ortam bir dakika sonra yok oluyor: tek oyunculu, hafızasız, komşusuz. Bu, yalnızlığa çıkan çıkmaz sokak. Ancak tek bir sabit dünyayı elle tasarlamak da çıkmaz sokak: iki kilometrekareyi elle doldurmak yüz kişilik, yıllar süren bir iştir ve bittiğinde dünya donup kalır; yüzüncü ziyaretinizde de ilk ziyaretinizdeki gibidir ve insanlar geldikçe büyüyemez.</p>
<p>Çıkış yolu, &quot;dünyayı&quot; tek bir şey olarak görmekten vazgeçmek. Dünya üç katmandan oluşur ve benzersizlik ile ortaklık birbiriyle çatışmadan farklı katmanlarda yaşayabilir. Herkesin üzerinde durduğu zemin, yüksek bir kalite standardıyla seçilip düzenlenen tek bir ortak dünya, yani buluşma yeridir. Oraya getirdiğiniz şeyler—yapay zekâyla ürettiğiniz varlıklar, yaptığınız bina—son derece benzersizdir ve bunları ortak dünyanın <em>içine</em> bırakırsınız; böylece sizin benzersizliğiniz herkesin keşfine dönüşür. Dünyadaki rotanız, aldığınız görevler ve sizi yönlendirdiği şeyler ise kendiliğinden kişiselleşir; çünkü rota, mekân değildir. Yanlış ikilem, çok oyunculu deneyimi öldüren &quot;kişiselleştirilmiş bir dünya&quot; ile onu derinleştiren &quot;ortak bir dünyada kişiselleştirilmiş bir rota&quot; arasındaydı. Biz ikincisini istiyoruz.</p>
<p>Dolayısıyla yapay zekânın görevi hiçbir zaman herkese özel bir dünya vermek değildi. Görevi, tek bir ortak dünyayı sonsuz, canlı ve içinde ilerleyen kişiye özel hissettirmek. Benzersizlik, zaman içinde orada biriken her şeyden, her üreticinin türünün tek örneği katkısından doğar. Her Minecraft sunucusu benzersizdir. Belirli bir sunucudaki herkes onu paylaşır. Bu bir çelişki değildir. İşin bütün sırrı budur ve bu yazının en üstündeki ekran görüntüsü—yapay zekânın, başka insanların girebildiği bir dünyada yerinde kalacak bir ev inşa etmesi—bu sırrın gerçeğe dönüşmüş hâlidir.</p>
<h2 id="cinevva-world-u-nasıl-kullanıma-acıyoruz" tabindex="-1">Cinevva World'ü nasıl kullanıma açıyoruz? <a class="header-anchor" href="#cinevva-world-u-nasıl-kullanıma-acıyoruz" aria-label="Permalink to &quot;Cinevva World'ü nasıl kullanıma açıyoruz?&quot;"></a></h2>
<p>Tüm bunların bizim açımızdan dönüştüğü şey şu. Bu bir pazarlama planı değil. Bu yazının ilk yarısında herkesi öldüren beş şeye karşı bilinçli olarak ortaya koyduğumuz beş iddia. Her birini, kanıtların onu ne ölçüde desteklediğine göre değerlendireceğim; çünkü değerlendiremeyeceğiniz bir plan, iyi ışıklandırılmış bir dilekten ibarettir.</p>
<p><strong>Birinci iddia, şirketi üzerine koyabileceğim iddia: bir platform değil, oyun çıkarıyoruz.</strong> Bu bir tercih değil; araştırmanın tamamındaki en tutarlı bulgu. Minecraft, Roblox ve Fortnite önce <em>yapması</em> eğlenceli bir şey sundu, ardından üretici katmanını bunun üzerine kurdu. Hayattaki en yetenekli üretim stüdyosu Media Molecule bile daha sonra Dreams'in önce bir oyun olması gerektiği sonucuna vardı. Dolayısıyla yeni birinin Cinevva World'de yapacağı ilk şey boş bir arsaya bakmak olmayacak. Bir hedefi olan, neredeyse hiç kimsenin çevrimiçi olmadığı bir salı günü bile orada bulunmak için sebep sunan bir oyun döngüsüne girecek. Gelen insanların çoğu oynayacak ve hiçbir şey inşa etmeyecek; bu bir başarısızlık değil, tasarımın kendisi. Roblox'un gerçek yapısı da budur: üretim yapan ince bir katmanın üzerinde oynayan yüz milyonlar. Büyüme çarkı ikinci perdedir ve ona ulaşmayı hak etmemiz gerekir. Bu iddiadan eminim, çünkü mezarlık bu deneyi çoktan yaptı.</p>
<p><strong>İkinci iddia, dürüst olmak gerekirse gerçek bir bahis: yapay zekâ, başkalarının beklerken yok olduğu arzı üretmemizi sağlıyor.</strong> Bunun neden bir garanti değil de bahis olduğunu net biçimde açıklamak istiyorum; çünkü bu araştırmadaki hiçbir platform üretken yapay zekâyla ilk ivmesini kazanmadı. Elimde kanıt değil, bir mekanizma var. Mekanizma şu: iki taraflı platformların yaklaşık üçte ikisi talep değil, arz tarafında ölür. Klasik çözüm, DoorDash'in yemekleri bizzat taşıması, Reddit ekibinin sahte kullanıcı adlarıyla paylaşım yapması ve Roblox kurucularının ilk oyunları yıllarca kendi elleriyle geliştirmesi gibi, gerçek arz oluşana kadar arzı taklit etmektir. Biz bunu, hiçbirinin sahip olmadığı bir maliyet ve hız avantajıyla üretim yoluyla yapabiliriz. Fakat beni dürüst tutan kısım—Decentraland'ın mezar taşı—şu: Decentraland üretilmiş şeylerle doluydu ama günde yaklaşık otuz kişi çekiyordu; çünkü güzel olmak, harcadığınız zamana değmekle aynı şey değildir. Bu yüzden yapay zekânın dünyayı eğlenceli hâle getireceğine bahse girmiyorum. Bunu yapamaz. Ben, yapay zekânın varlık üretimindeki darboğazı kaldıracağına ve böylece kıt insan emeğimizin her saatini insanları gerçekten elde tutan tek şeye, yani oyun döngüsüne ayırabileceğimize bahse giriyorum. Yapay zekâ tepeyi ucuza inşa eder. Biz o tepeye tırmanma sebebini elle inşa ederiz. Ayrıca sentetik başlangıç arzını <a href="https://forkoff.xyz/blog/founder-growth/two-sided-marketplace-cold-start-2026" target="_blank" rel="noreferrer">yaklaşık yüzde 30'la sınırlandırıp yaklaşık 60 gün içinde gerçek üretici içeriğine dönüştüreceğiz</a>; çünkü hiçbir zaman gerçeğe dönüşmeyen sahte arz, biri bunu fark ettiği anda güveni yok eder.</p>
<p><strong>Üçüncü iddia: kendi sonlandırma kriterlerimizi yayımlıyoruz.</strong> Gerçekçi bir planla umut dolu bir plan arasındaki fark budur. Her vakada hayatta kalmayı öngören metrik, <a href="https://newsletter.pmcurve.com/p/retention-masterclass" target="_blank" rel="noreferrer">elde tutma eğrisinin yataylaşıp yataylaşmadığı</a>, yani bir kohortun sıfıra doğru azalmak yerine geri gelmeye devam edip etmediğiydi. Bu yüzden kendimizi açıkça bu testle değerlendireceğiz. Alfa sürümünde 7. gün elde tutma oranı yataylaşmazsa, hiçbir şey inşa etmeyen oyuncular geri dönmezse, yapay zekâyla başlangıçta eklenen içerik yanından geçilip görmezden gelinirse tez yanlıştır; onu değiştirir ya da dururuz. Oyuncular ile üreticileri, iki ayrı aydınlanma anına sahip iki ayrı huni olarak takip edeceğiz; çünkü veriler bunların aynı kişi olmadığını açıkça gösteriyor. Ayrıca paranın ilk aşamadaki işi yapıyormuş gibi davranmayacağız. Elli, hatta bin kullanıcı varken bahşişler ve pazar yeri kazançları sıfıra yuvarlanır; dolayısıyla henüz kimseyi elde tutamazlar. İlk dönem elde tutma oyun döngüsünden gelir ya da hiç gelmez. Bunun tersini yapmanın faturası Dreams'tir.</p>
<p><strong>Dördüncü iddia: bilinçli olarak dar bir alanda başlıyoruz.</strong> Ağ tabanlı ürünlerle ilgili araştırmalar bu konuda hemfikir. Bir pazara değil, kendi başına canlı kalabilecek yoğunluktaki en küçük gruba, yani bir <a href="https://www.lennysnewsletter.com/p/atomic-network" target="_blank" rel="noreferrer">&quot;atomik ağa&quot;</a> açılırsınız. Facebook tek bir okulda başladı. Bizimki zaten var: 3D varlıklar, müzik ve ses üretmiş, yerleştirmeye hazır içerik stoğuna sahip Cinevva üreticileri. Aynı saatte, bir hedef ve keşfedilecek bir sınırla tek bir dünyada bulunan elli kişi, dağınık hâlde duran elli bin kayıttan çok daha yoğun ve canlıdır. Kanıtlar bu iddiayı güçlü biçimde destekliyor.</p>
<p><strong>Beşinci iddia, en zayıfı ve bunu açıkça söylüyorum: boşluğu saklamak yerine onun hakkında gerçeği anlatıyoruz.</strong> Cilalı ama sessiz bir dünya ölü görünür ve başarısız olanların hepsi bunu ortam efektleriyle örtmeye çalıştı. Biz tersini deneyeceğiz. Bu, beş hamle içinde en az kanıtlanmış olanı; bir bulgudan çok sezgiye yakın. İlk gelenler bitmemiş bir ürünü ziyaret etmiyor. Burası, <em>onlar erken geldiği için</em> boş olan bir yer ve onlar da bu yerin kurucu sakinleri; inşa ettikleri şeyler sonraki bin kişi geldiğinde hâlâ ayakta olacak.</p>
<p>Dürüstçe değerlendirilmiş plan budur. Mezarlığın güçlü biçimde desteklediği dört iddia ve ölülerin hiçbirinde bulunmayan bir araç üzerine gerçek bir bahis; üstelik onların yoksun olduğu disiplinin ta kendisiyle sınırlandırılmış durumda. Tepeyi üretebiliriz. Tepeye ilk çıkan olma hissini ya da zirveden el sallayan yabancıyı üretemeyiz. Görevimiz bu el sallamayı mümkün kılmak, bunu elde tutma eğrisinde kanıtlamak ve eğri hayır dediği anda kendimizi kandırmayı bırakmaktır.</p>
]]></content:encoded>
            <enclosure url="https://app.cinevva.com/img/blog/ai-builder-hero.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya inşa etmek, bölüm 30: Duvarlara saygı duyan bir kamera]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-06-04-open-world-browser-part-30-collision-aware-camera</link>
            <guid>https://app.cinevva.com/tr/blog/2026-06-04-open-world-browser-part-30-collision-aware-camera</guid>
            <pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Yirmi dokuz bölüm boyunca içinde yürüyebildiğiniz, yüzebildiğiniz ve yapılar inşa edebildiğiniz bir dünya kurduk; tüm bunları tepelerin ve ev duvarlarının içinden geçen bir kamera izliyordu. Bölüm 30, çarpışmaları hesaba katan bir bom ile bunu düzeltiyor: yalnızca kendi uzunlığını yöneten bir yay kolu, arazi, nesneler ve binaların aynı arayüz üzerinden kamerayı durdurmasını sağlayan takılabilir bir çarpıştırıcı sözleşmesi ve bir yükseklik haritasının asla hesaba katamadığı çıkıntılar ile mağaraları gözeten işaretli mesafe alanı probu. Üstelik bunu, zaten güvendiğimiz yörünge girdisinin tek satırını bile yeniden yazmadan OrbitControls üzerine bir son işlem olarak ekliyor.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-insa-etmek-bolum-30-duvarlara-saygı-duyan-bir-kamera" tabindex="-1">Tarayıcıda açık dünya inşa etmek, bölüm 30: Duvarlara saygı duyan bir kamera <a class="header-anchor" href="#tarayıcıda-acık-dunya-insa-etmek-bolum-30-duvarlara-saygı-duyan-bir-kamera" aria-label="Permalink to &quot;Tarayıcıda açık dünya inşa etmek, bölüm 30: Duvarlara saygı duyan bir kamera&quot;"></a></h1>
<p><em><a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberini</a> kullanın. Rehber, prototip denemesinin ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p><a href="/tr/blog/2026-05-15-open-world-browser-part-29-pluggable-character.html">Bölüm 29</a>, 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. <a href="/tr/blog/2026-02-25-open-world-browser-part-07-marching-cubes.html">Bölüm 7</a>'deki marching cubes mağaralarından birine girdiğinizde bir kayanın iç yüzeyine bakıyordunuz. <a href="/tr/blog/2026-04-28-open-world-browser-part-16-structure-and-authoring.html">Bölüm 16</a>'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.</p>
<h2 id="sorunun-bicimi-ve-cozumun-bicimi" tabindex="-1">Sorunun biçimi ve çözümün biçimi <a class="header-anchor" href="#sorunun-bicimi-ve-cozumun-bicimi" aria-label="Permalink to &quot;Sorunun biçimi ve çözümün biçimi&quot;"></a></h2>
<p>Üçü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ı <em>Camera Control in Computer Graphics</em> 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.</p>
<p>Bunu çözen kalıp eski ve kendini kanıtlamıştır. Unreal buna yay kolu der, Godot bir <code>SpringArm3D</code> 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 <em>Real-Time Cameras</em> 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ü <code>public/world/src/camera-rig.mjs</code> içinde oluşturduk.</p>
<figure style="margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12);border-radius:8px;overflow:hidden;background:#0d1117">
<svg viewBox="0 0 680 290" width="100%" role="img" aria-label="Prob küresinin duvarın içinden geçmek yerine duvara dayanması için kendi çizgisi boyunca geri çekilen yay kollu bir bom" style="display:block">
  <rect x="382" y="40" width="46" height="222" fill="#39424f" stroke="#5b6675"/>
  <text x="405" y="280" fill="#9aa7b4" font-size="13" text-anchor="middle" font-family="sans-serif">duvar</text>
  <line x1="110" y1="212" x2="600" y2="70" stroke="#9aa7b4" stroke-width="2" stroke-dasharray="6 6"/>
  <line x1="110" y1="212" x2="360" y2="140" stroke="#6ea8fe" stroke-width="3"/>
  <circle cx="110" cy="212" r="6" fill="#e6edf3"/>
  <text x="110" y="234" fill="#e6edf3" font-size="13" text-anchor="middle" font-family="sans-serif">dönme noktası (oyuncunun başı)</text>
  <circle cx="600" cy="70" r="9" fill="none" stroke="#9aa7b4" stroke-width="2"/>
  <text x="600" y="52" fill="#9aa7b4" font-size="13" text-anchor="middle" font-family="sans-serif">istenen (kullanıcı yakınlaştırması)</text>
  <circle cx="360" cy="140" r="22" fill="rgba(110,168,254,0.18)" stroke="#6ea8fe" stroke-width="2"/>
  <circle cx="360" cy="140" r="5" fill="#6ea8fe"/>
  <text x="300" y="104" fill="#6ea8fe" font-size="13" text-anchor="middle" font-family="sans-serif">kamera + prob yarıçapı r</text>
  <text x="222" y="192" fill="#6ea8fe" font-size="13" font-family="sans-serif" transform="rotate(-16 222 192)">ℓ (sınırlandırılmış)</text>
</svg>
<figcaption style="padding:0.6rem 1rem;color:#9aa7b4;font-size:0.85rem;border-top:1px solid rgba(255,255,255,0.12);font-family:sans-serif">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.</figcaption>
</figure>
<h2 id="yalnızca-kendi-uzunlıgını-yoneten-bir-bom" tabindex="-1">Yalnızca kendi uzunlığını yöneten bir bom <a class="header-anchor" href="#yalnızca-kendi-uzunlıgını-yoneten-bir-bom" aria-label="Permalink to &quot;Yalnızca kendi uzunlığını yöneten bir bom&quot;"></a></h2>
<p>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.</p>
<p>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 <code>beforeControls()</code>, 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 <code>afterControls(dt)</code>, 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.</p>
<h2 id="tek-sozlesme-her-tur-carpıstırıcı" tabindex="-1">Tek sözleşme, her tür çarpıştırıcı <a class="header-anchor" href="#tek-sozlesme-her-tur-carpıstırıcı" aria-label="Permalink to &quot;Tek sözleşme, her tür çarpıştırıcı&quot;"></a></h2>
<p>Düzenek, dünyanın neyden yapıldığını asla sormaz. Çarpıştırıcı, yalnızca <code>probe</code> 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ı <code>probe</code> 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.</p>
<p>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.</p>
<p>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 <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.025ex;" xmlns="http://www.w3.org/2000/svg" width="1.357ex" height="1.025ex" role="img" focusable="false" viewBox="0 -442 600 453" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>n</mi></math></mjx-assistive-mml></mjx-container> ve dikey görüş alanı <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.023ex;" xmlns="http://www.w3.org/2000/svg" width="1.061ex" height="1.618ex" role="img" focusable="false" viewBox="0 -705 469 715" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D703" d="M35 200Q35 302 74 415T180 610T319 704Q320 704 327 704T339 705Q393 701 423 656Q462 596 462 495Q462 380 417 261T302 66T168 -10H161Q125 -10 99 10T60 63T41 130T35 200ZM383 566Q383 668 330 668Q294 668 260 623T204 521T170 421T157 371Q206 370 254 370L351 371Q352 372 359 404T375 484T383 566ZM113 132Q113 26 166 26Q181 26 198 36T239 74T287 161T335 307L340 324H145Q145 321 136 286T120 208T113 132Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>θ</mi></math></mjx-assistive-mml></mjx-container> olduğunda yarı yükseklik <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="14.408ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 6368.2 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="210E" d="M137 683Q138 683 209 688T282 694Q294 694 294 685Q294 674 258 534Q220 386 220 383Q220 381 227 388Q288 442 357 442Q411 442 444 415T478 336Q478 285 440 178T402 50Q403 36 407 31T422 26Q450 26 474 56T513 138Q516 149 519 151T535 153Q555 153 555 145Q555 144 551 130Q535 71 500 33Q466 -10 419 -10H414Q367 -10 346 17T325 74Q325 90 361 192T398 345Q398 404 354 404H349Q266 404 205 306L198 293L164 158Q132 28 127 16Q114 -11 83 -11Q69 -11 59 -2T48 16Q48 30 121 320L195 616Q195 629 188 632T149 637H128Q122 643 122 645T124 664Q129 683 137 683Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(853.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1909.6,0)"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(2676.2,0)"><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(389,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(889,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4121.2,0)"><path data-c="2061" d="" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4121.2,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(4510.2,0)"><path data-c="1D703" d="M35 200Q35 302 74 415T180 610T319 704Q320 704 327 704T339 705Q393 701 423 656Q462 596 462 495Q462 380 417 261T302 66T168 -10H161Q125 -10 99 10T60 63T41 130T35 200ZM383 566Q383 668 330 668Q294 668 260 623T204 521T170 421T157 371Q206 370 254 370L351 371Q352 372 359 404T375 484T383 566ZM113 132Q113 26 166 26Q181 26 198 36T239 74T287 161T335 307L340 324H145Q145 321 136 286T120 208T113 132Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(4979.2,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mn" transform="translate(5479.2,0)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(5979.2,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>h</mi><mo>=</mo><mi>n</mi><mi>tan</mi><mo data-mjx-texclass="NONE">⁡</mo><mo stretchy="false">(</mo><mi>θ</mi><mrow data-mjx-texclass="ORD"><mo>/</mo></mrow><mn>2</mn><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container>, yarı genişlik <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.462ex;" xmlns="http://www.w3.org/2000/svg" width="19.776ex" height="2.032ex" role="img" focusable="false" viewBox="0 -694 8741 898" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D464" d="M580 385Q580 406 599 424T641 443Q659 443 674 425T690 368Q690 339 671 253Q656 197 644 161T609 80T554 12T482 -11Q438 -11 404 5T355 48Q354 47 352 44Q311 -11 252 -11Q226 -11 202 -5T155 14T118 53T104 116Q104 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Q21 293 29 315T52 366T96 418T161 441Q204 441 227 416T250 358Q250 340 217 250T184 111Q184 65 205 46T258 26Q301 26 334 87L339 96V119Q339 122 339 128T340 136T341 143T342 152T345 165T348 182T354 206T362 238T373 281Q402 395 406 404Q419 431 449 431Q468 431 475 421T483 402Q483 389 454 274T422 142Q420 131 420 107V100Q420 85 423 71T442 42T487 26Q558 26 600 148Q609 171 620 213T632 273Q632 306 619 325T593 357T580 385Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(993.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(2049.6,0)"><path data-c="210E" d="M137 683Q138 683 209 688T282 694Q294 694 294 685Q294 674 258 534Q220 386 220 383Q220 381 227 388Q288 442 357 442Q411 442 444 415T478 336Q478 285 440 178T402 50Q403 36 407 31T422 26Q450 26 474 56T513 138Q516 149 519 151T535 153Q555 153 555 145Q555 144 551 130Q535 71 500 33Q466 -10 419 -10H414Q367 -10 346 17T325 74Q325 90 361 192T398 345Q398 404 354 404H349Q266 404 205 306L198 293L164 158Q132 28 127 16Q114 -11 83 -11Q69 -11 59 -2T48 16Q48 30 121 320L195 616Q195 629 188 632T149 637H128Q122 643 122 645T124 664Q129 683 137 683Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2847.8,0)"><path data-c="22C5" d="M78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(3348,0)"><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(444,0)" style="stroke-width: 3;"/><path data-c="2D" d="M11 179V252H277V179H11Z" transform="translate(1000,0)" style="stroke-width: 3;"/><path data-c="62" d="M307 -11Q234 -11 168 55L158 37Q156 34 153 28T147 17T143 10L138 1L118 0H98V298Q98 599 97 603Q94 622 83 628T38 637H20V660Q20 683 22 683L32 684Q42 685 61 686T98 688Q115 689 135 690T165 693T176 694H179V543Q179 391 180 391L183 394Q186 397 192 401T207 411T228 421T254 431T286 439T323 442Q401 442 461 379T522 216Q522 115 458 52T307 -11ZM182 98Q182 97 187 90T196 79T206 67T218 55T233 44T250 35T271 29T295 26Q330 26 363 46T412 113Q424 148 424 212Q424 287 412 323Q385 405 300 405Q270 405 239 390T188 347L182 339V98Z" transform="translate(1333,0)" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(1889,0)" style="stroke-width: 3;"/><path data-c="79" d="M69 -66Q91 -66 104 -80T118 -116Q118 -134 109 -145T91 -160Q84 -163 97 -166Q104 -168 111 -168Q131 -168 148 -159T175 -138T197 -106T213 -75T225 -43L242 0L170 183Q150 233 125 297Q101 358 96 368T80 381Q79 382 78 382Q66 385 34 385H19V431H26L46 430Q65 430 88 429T122 428Q129 428 142 428T171 429T200 430T224 430L233 431H241V385H232Q183 385 185 366L286 112Q286 113 332 227L376 341V350Q376 365 366 373T348 383T334 385H331V431H337H344Q351 431 361 431T382 430T405 429T422 429Q477 429 503 431H508V385H497Q441 380 422 345Q420 343 378 235T289 9T227 -131Q180 -204 113 -204Q69 -204 44 -177T19 -116Q19 -89 35 -78T69 -66Z" transform="translate(2389,0)" style="stroke-width: 3;"/><path data-c="20" d="" transform="translate(2917,0)" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(3167,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(3667,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(4059,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(4559,0)" style="stroke-width: 3;"/><path data-c="131" d="M247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(5115,0)" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>w</mi><mo>=</mo><mi>h</mi><mo>⋅</mo><mtext>en-boy oranı</mtext></math></mjx-assistive-mml></mjx-container> olur ve köşe şu mesafede bulunur:</p>
<mjx-container tabindex="0" class="MathJax" jax="SVG" display="true" style="direction: ltr; display: block; text-align: center; margin: 1em 0; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.357ex;" xmlns="http://www.w3.org/2000/svg" width="22.335ex" height="2.878ex" role="img" focusable="false" viewBox="0 -1114.2 9872 1272" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D45F" d="M21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q161 442 183 430T214 408T225 388Q227 382 228 382T236 389Q284 441 347 441H350Q398 441 422 400Q430 381 430 363Q430 333 417 315T391 292T366 288Q346 288 334 299T322 328Q322 376 378 392Q356 405 342 405Q286 405 239 331Q229 315 224 298T190 165Q156 25 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" transform="translate(484,-150) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mtext"><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(556,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(1000,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(1500,0)" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(2149.6,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="msqrt" transform="translate(3205.4,0)"><g transform="translate(1020,0)"><g data-mml-node="msup"><g data-mml-node="mi"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(633,289) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1258.8,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msup" transform="translate(2259,0)"><g data-mml-node="mi"><path data-c="1D464" d="M580 385Q580 406 599 424T641 443Q659 443 674 425T690 368Q690 339 671 253Q656 197 644 161T609 80T554 12T482 -11Q438 -11 404 5T355 48Q354 47 352 44Q311 -11 252 -11Q226 -11 202 -5T155 14T118 53T104 116Q104 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Q21 293 29 315T52 366T96 418T161 441Q204 441 227 416T250 358Q250 340 217 250T184 111Q184 65 205 46T258 26Q301 26 334 87L339 96V119Q339 122 339 128T340 136T341 143T342 152T345 165T348 182T354 206T362 238T373 281Q402 395 406 404Q419 431 449 431Q468 431 475 421T483 402Q483 389 454 274T422 142Q420 131 420 107V100Q420 85 423 71T442 42T487 26Q558 26 600 148Q609 171 620 213T632 273Q632 306 619 325T593 357T580 385Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(749,289) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3633.8,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msup" transform="translate(4634,0)"><g data-mml-node="mi"><path data-c="210E" d="M137 683Q138 683 209 688T282 694Q294 694 294 685Q294 674 258 534Q220 386 220 383Q220 381 227 388Q288 442 357 442Q411 442 444 415T478 336Q478 285 440 178T402 50Q403 36 407 31T422 26Q450 26 474 56T513 138Q516 149 519 151T535 153Q555 153 555 145Q555 144 551 130Q535 71 500 33Q466 -10 419 -10H414Q367 -10 346 17T325 74Q325 90 361 192T398 345Q398 404 354 404H349Q266 404 205 306L198 293L164 158Q132 28 127 16Q114 -11 83 -11Q69 -11 59 -2T48 16Q48 30 121 320L195 616Q195 629 188 632T149 637H128Q122 643 122 645T124 664Q129 683 137 683Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(609,289) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(0,204.2)"><path data-c="221A" d="M263 249Q264 249 315 130T417 -108T470 -228L725 302Q981 837 982 839Q989 850 1001 850Q1008 850 1013 844T1020 832V826L741 243Q645 43 540 -176Q479 -303 469 -324T453 -348Q449 -350 436 -350L424 -349L315 -96Q206 156 205 156L171 130Q138 104 137 104L111 130L263 249Z" style="stroke-width: 3;"/></g><rect width="5646.5" height="60" x="1020" y="994.2"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="block" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; overflow: hidden; width: 100%;"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><msub><mi>r</mi><mrow data-mjx-texclass="ORD"><mtext>near</mtext></mrow></msub><mo>=</mo><msqrt><msup><mi>n</mi><mn>2</mn></msup><mo>+</mo><msup><mi>w</mi><mn>2</mn></msup><mo>+</mo><msup><mi>h</mi><mn>2</mn></msup></msqrt></math></mjx-assistive-mml></mjx-container><p>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.</p>
<h2 id="magaralardan-haberdar-olan-carpıstırıcı" tabindex="-1">Mağaralardan haberdar olan çarpıştırıcı <a class="header-anchor" href="#magaralardan-haberdar-olan-carpıstırıcı" aria-label="Permalink to &quot;Mağaralardan haberdar olan çarpıştırıcı&quot;"></a></h2>
<p>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.</p>
<figure style="margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12);border-radius:8px;overflow:hidden;background:#0d1117">
<svg viewBox="0 0 680 320" width="100%" role="img" aria-label="Bir çıkıntının altında yükseklik haritası bomun tavan kayasının içinden geçmesine izin verirken işaretli mesafe alanı onu tavanın alt yüzeyinde durduruyor" style="display:block">
  <path d="M680,320 L680,40 L250,40 L250,150 L430,150 L430,250 L250,250 L250,320 Z" fill="#39424f" stroke="#5b6675" stroke-width="1.5"/>
  <text x="340" y="205" fill="#9aa7b4" font-size="13" text-anchor="middle" font-family="sans-serif">mağara</text>
  <text x="540" y="100" fill="#5b6675" font-size="13" text-anchor="middle" font-family="sans-serif">katı kaya</text>
  <line x1="330" y1="212" x2="230" y2="60" stroke="#9aa7b4" stroke-width="2" stroke-dasharray="6 6"/>
  <line x1="290" y1="150" x2="250" y2="90" stroke="#f85149" stroke-width="4"/>
  <circle cx="330" cy="212" r="6" fill="#e6edf3"/>
  <text x="330" y="234" fill="#e6edf3" font-size="13" text-anchor="middle" font-family="sans-serif">oyuncu</text>
  <circle cx="230" cy="60" r="10" fill="none" stroke="#f85149" stroke-width="2"/>
  <text x="230" y="42" fill="#f85149" font-size="13" text-anchor="middle" font-family="sans-serif">yükseklik haritası: içinden geçer ✗</text>
  <circle cx="305" cy="170" r="9" fill="rgba(86,211,100,0.2)" stroke="#56d364" stroke-width="2"/>
  <text x="420" y="172" fill="#56d364" font-size="13" text-anchor="middle" font-family="sans-serif">SDF: tavanda durur ✓</text>
</svg>
<figcaption style="padding:0.6rem 1rem;color:#9aa7b4;font-size:0.85rem;border-top:1px solid rgba(255,255,255,0.12);font-family:sans-serif">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.</figcaption>
</figure>
<p>Probu alan boyunca ilerletmenin bir adı ve arkasında bir makalesi var. John Hart'ın 1996 tarihli <em>Sphere Tracing</em> ç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 <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.628ex;" xmlns="http://www.w3.org/2000/svg" width="12.643ex" height="2.851ex" role="img" focusable="false" viewBox="0 -982.5 5588 1260" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msqrt"><g transform="translate(1020,0)"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(722.2,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1722.4,0)"><path data-c="2016" d="M133 736Q138 750 153 750Q164 750 170 739Q172 735 172 250T170 -239Q164 -250 152 -250Q144 -250 138 -244L137 -243Q133 -241 133 -179T132 250Q132 731 133 736ZM329 739Q334 750 346 750Q353 750 361 744L362 743Q366 741 366 679T367 250T367 -178T362 -243L361 -244Q355 -250 347 -250Q335 -250 329 -239Q327 -235 327 250T329 739Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(2222.4,0)"><path data-c="2207" d="M46 676Q46 679 51 683H781Q786 679 786 676Q786 674 617 326T444 -26Q439 -33 416 -33T388 -26Q385 -22 216 326T46 676ZM697 596Q697 597 445 597T193 596Q195 591 319 336T445 80L697 596Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(3055.4,0)"><path data-c="210E" d="M137 683Q138 683 209 688T282 694Q294 694 294 685Q294 674 258 534Q220 386 220 383Q220 381 227 388Q288 442 357 442Q411 442 444 415T478 336Q478 285 440 178T402 50Q403 36 407 31T422 26Q450 26 474 56T513 138Q516 149 519 151T535 153Q555 153 555 145Q555 144 551 130Q535 71 500 33Q466 -10 419 -10H414Q367 -10 346 17T325 74Q325 90 361 192T398 345Q398 404 354 404H349Q266 404 205 306L198 293L164 158Q132 28 127 16Q114 -11 83 -11Q69 -11 59 -2T48 16Q48 30 121 320L195 616Q195 629 188 632T149 637H128Q122 643 122 645T124 664Q129 683 137 683Z" style="stroke-width: 3;"/></g><g data-mml-node="msup" transform="translate(3631.4,0)"><g data-mml-node="mo"><path data-c="2016" d="M133 736Q138 750 153 750Q164 750 170 739Q172 735 172 250T170 -239Q164 -250 152 -250Q144 -250 138 -244L137 -243Q133 -241 133 -179T132 250Q132 731 133 736ZM329 739Q334 750 346 750Q353 750 361 744L362 743Q366 741 366 679T367 250T367 -178T362 -243L361 -244Q355 -250 347 -250Q335 -250 329 -239Q327 -235 327 250T329 739Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(533,289) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(0,72.5)"><path data-c="221A" d="M263 249Q264 249 315 130T417 -108T470 -228L725 302Q981 837 982 839Q989 850 1001 850Q1008 850 1013 844T1020 832V826L741 243Q645 43 540 -176Q479 -303 469 -324T453 -348Q449 -350 436 -350L424 -349L315 -96Q206 156 205 156L171 130Q138 104 137 104L111 130L263 249Z" style="stroke-width: 3;"/></g><rect width="4568" height="60" x="1020" y="862.5"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msqrt><mn>1</mn><mo>+</mo><mo data-mjx-texclass="OPEN" fence="false" stretchy="false">‖</mo><mi mathvariant="normal">∇</mi><mi>h</mi><msup><mo data-mjx-texclass="CLOSE" fence="false" stretchy="false">‖</mo><mn>2</mn></msup></msqrt></math></mjx-assistive-mml></mjx-container> ç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.</p>
<p>Matematiksel olarak bom, pivot <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.439ex;" xmlns="http://www.w3.org/2000/svg" width="1.446ex" height="1.457ex" role="img" focusable="false" viewBox="0 -450 639 644" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D429" d="M32 442L123 446Q214 450 215 450H221V409Q222 409 229 413T251 423T284 436T328 446T382 450Q480 450 540 388T600 223Q600 128 539 61T361 -6H354Q292 -6 236 28L227 34V-132H296V-194H287Q269 -191 163 -191Q56 -191 38 -194H29V-132H98V113V284Q98 330 97 348T93 370T83 376Q69 380 42 380H29V442H32ZM457 224Q457 303 427 349T350 395Q282 395 235 352L227 345V104L233 97Q274 45 337 45Q383 45 420 86T457 224Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">p</mi></mrow></math></mjx-assistive-mml></mjx-container> noktasından birim yön <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.014ex;" xmlns="http://www.w3.org/2000/svg" width="1.446ex" height="1.584ex" role="img" focusable="false" viewBox="0 -694 639 700" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D41D" d="M351 686L442 690Q533 694 534 694H540V389Q540 327 540 253T539 163Q539 97 541 83T555 66Q569 62 596 62H609V31Q609 0 608 0Q588 0 510 -3T412 -6Q411 -6 411 16V38L401 31Q337 -6 265 -6Q159 -6 99 58T38 224Q38 265 51 303T92 375T165 429T272 449Q359 449 417 412V507V555Q417 597 415 607T402 620Q388 624 361 624H348V686H351ZM411 350Q362 399 291 399Q278 399 256 392T218 371Q195 351 189 320T182 238V221Q182 179 183 159T191 115T212 74Q241 46 288 46Q358 46 404 100L411 109V350Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">d</mi></mrow></math></mjx-assistive-mml></mjx-container> boyunca uzanan <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="13.518ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 5975 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D42B" d="M405 293T374 293T324 312T305 361Q305 378 312 394Q315 397 315 399Q305 399 294 394T266 375T238 329T222 249Q221 241 221 149V62H308V0H298Q280 3 161 3Q47 3 38 0H29V62H98V210V303Q98 353 96 363T83 376Q69 380 42 380H29V442H32L118 446Q204 450 205 450H210V414L211 378Q247 449 315 449H321Q384 449 413 422T442 360Q442 332 424 313Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(474,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(863,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1224,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1890.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(2946.6,0)"><g data-mml-node="mi"><path data-c="1D429" d="M32 442L123 446Q214 450 215 450H221V409Q222 409 229 413T251 423T284 436T328 446T382 450Q480 450 540 388T600 223Q600 128 539 61T361 -6H354Q292 -6 236 28L227 34V-132H296V-194H287Q269 -191 163 -191Q56 -191 38 -194H29V-132H98V113V284Q98 330 97 348T93 370T83 376Q69 380 42 380H29V442H32ZM457 224Q457 303 427 349T350 395Q282 395 235 352L227 345V104L233 97Q274 45 337 45Q383 45 420 86T457 224Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3807.8,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(4808,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(5169,0)"><g data-mml-node="mspace"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(5336,0)"><g data-mml-node="mi"><path data-c="1D41D" d="M351 686L442 690Q533 694 534 694H540V389Q540 327 540 253T539 163Q539 97 541 83T555 66Q569 62 596 62H609V31Q609 0 608 0Q588 0 510 -3T412 -6Q411 -6 411 16V38L401 31Q337 -6 265 -6Q159 -6 99 58T38 224Q38 265 51 303T92 375T165 429T272 449Q359 449 417 412V507V555Q417 597 415 607T402 620Q388 624 361 624H348V686H351ZM411 350Q362 399 291 399Q278 399 256 392T218 371Q195 351 189 320T182 238V221Q182 179 183 159T191 115T212 74Q241 46 288 46Q358 46 404 100L411 109V350Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">r</mi></mrow><mo stretchy="false">(</mo><mi>t</mi><mo stretchy="false">)</mo><mo>=</mo><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">p</mi></mrow><mo>+</mo><mi>t</mi><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">d</mi></mrow></math></mjx-assistive-mml></mjx-container> ışı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:</p>
<mjx-container tabindex="0" class="MathJax" jax="SVG" display="true" style="direction: ltr; display: block; text-align: center; margin: 1em 0; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.791ex;" xmlns="http://www.w3.org/2000/svg" width="46.581ex" height="2.713ex" role="img" focusable="false" viewBox="0 -849.5 20588.6 1199" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" transform="translate(394,-150) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(600,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(1378,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(2049.7,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(3105.5,0)"><g data-mml-node="mi"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(394,-150) scale(0.707)"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(4196,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(5196.2,0)"><path data-c="63" d="M370 305T349 305T313 320T297 358Q297 381 312 396Q317 401 317 402T307 404Q281 408 258 408Q209 408 178 376Q131 329 131 219Q131 137 162 90Q203 29 272 29Q313 29 338 55T374 117Q376 125 379 127T395 129H409Q415 123 415 120Q415 116 411 104T395 71T366 33T318 2T249 -11Q163 -11 99 53T34 214Q34 318 99 383T250 448T370 421T404 357Q404 334 387 320Z" style="stroke-width: 3;"/><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z" transform="translate(444,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(722,0)" style="stroke-width: 3;"/><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(1222,0)" style="stroke-width: 3;"/><path data-c="70" d="M36 -148H50Q89 -148 97 -134V-126Q97 -119 97 -107T97 -77T98 -38T98 6T98 55T98 106Q98 140 98 177T98 243T98 296T97 335T97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 61 434T98 436Q115 437 135 438T165 441T176 442H179V416L180 390L188 397Q247 441 326 441Q407 441 464 377T522 216Q522 115 457 52T310 -11Q242 -11 190 33L182 40V-45V-101Q182 -128 184 -134T195 -145Q216 -148 244 -148H260V-194H252L228 -193Q205 -192 178 -192T140 -191Q37 -191 28 -194H20V-148H36ZM424 218Q424 292 390 347T305 402Q234 402 182 337V98Q222 26 294 26Q345 26 384 80T424 218Z" transform="translate(2055,0)" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(7807.2,0)"><g data-mml-node="mspace"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(7806.9,0)"><g data-mml-node="mo" transform="translate(0 -0.5)"><path data-c="28" d="M152 251Q152 646 388 850H416Q422 844 422 841Q422 837 403 816T357 753T302 649T255 482T236 250Q236 124 255 19T301 -147T356 -251T403 -315T422 -340Q422 -343 416 -349H388Q359 -325 332 -296T271 -213T212 -97T170 56T152 251Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mi" transform="translate(8264.9,0)"><path data-c="1D706" d="M166 673Q166 685 183 694H202Q292 691 316 644Q322 629 373 486T474 207T524 67Q531 47 537 34T546 15T551 6T555 2T556 -2T550 -11H482Q457 3 450 18T399 152L354 277L340 262Q327 246 293 207T236 141Q211 112 174 69Q123 9 111 -1T83 -12Q47 -12 47 20Q47 37 61 52T199 187Q229 216 266 252T321 306L338 322Q338 323 288 462T234 612Q214 657 183 657Q166 657 166 673Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(8847.9,0)"><g data-mml-node="mspace"/></g><g data-mml-node="mo" transform="translate(9014.9,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(9403.9,0)"><path data-c="3A6" d="M312 622Q310 623 307 625T303 629T297 631T286 634T270 635T246 636T211 637H184V683H196Q220 680 361 680T526 683H538V637H511Q468 637 447 635T422 631T411 622V533L425 531Q525 519 595 466T665 342Q665 301 642 267T583 209T506 172T425 152L411 150V61Q417 55 421 53T447 48T511 46H538V0H526Q502 3 361 3T196 0H184V46H211Q231 46 245 46T270 47T286 48T297 51T303 54T307 57T312 61V150H310Q309 151 289 153T232 166T160 195Q149 201 136 210T103 238T69 284T56 342Q56 414 128 467T294 530Q309 532 310 533H312V622ZM170 342Q170 207 307 188H312V495H309Q301 495 282 491T231 469T186 423Q170 389 170 342ZM415 188Q487 199 519 236T551 342Q551 384 539 414T507 459T470 481T434 491T415 495H410V188H415Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(10125.9,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(10514.9,0)"><g data-mml-node="mi"><path data-c="1D42B" d="M405 293T374 293T324 312T305 361Q305 378 312 394Q315 397 315 399Q305 399 294 394T266 375T238 329T222 249Q221 241 221 149V62H308V0H298Q280 3 161 3Q47 3 38 0H29V62H98V210V303Q98 353 96 363T83 376Q69 380 42 380H29V442H32L118 446Q204 450 205 450H210V414L211 378Q247 449 315 449H321Q384 449 413 422T442 360Q442 332 424 313Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(10988.9,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(11377.9,0)"><g data-mml-node="mi"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(394,-150) scale(0.707)"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(12246.1,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(12635.1,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(13246.4,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(14246.6,0)"><path data-c="1D45F" d="M21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q161 442 183 430T214 408T225 388Q227 382 228 382T236 389Q284 441 347 441H350Q398 441 422 400Q430 381 430 363Q430 333 417 315T391 292T366 288Q346 288 334 299T322 328Q322 376 378 392Q356 405 342 405Q286 405 239 331Q229 315 224 298T190 165Q156 25 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(14697.6,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(15086.6,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(15364.6,0)"><g data-mml-node="mspace"/></g><g data-mml-node="msub" transform="translate(15809.3,0)"><g data-mml-node="mi"><path data-c="1D460" d="M131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" transform="translate(502,-150) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mo"><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(833,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(1111,0)" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(17540,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(17818,0)"><g data-mml-node="mspace"/></g><g data-mml-node="msub" transform="translate(18262.7,0)"><g data-mml-node="mi"><path data-c="1D460" d="M131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" transform="translate(502,-150) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mo"><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(833,0)" style="stroke-width: 3;"/><path data-c="78" d="M201 0Q189 3 102 3Q26 3 17 0H11V46H25Q48 47 67 52T96 61T121 78T139 96T160 122T180 150L226 210L168 288Q159 301 149 315T133 336T122 351T113 363T107 370T100 376T94 379T88 381T80 383Q74 383 44 385H16V431H23Q59 429 126 429Q219 429 229 431H237V385Q201 381 201 369Q201 367 211 353T239 315T268 274L272 270L297 304Q329 345 329 358Q329 364 327 369T322 376T317 380T310 384L307 385H302V431H309Q324 428 408 428Q487 428 493 431H499V385H492Q443 385 411 368Q394 360 377 341T312 257L296 236L358 151Q424 61 429 57T446 50Q464 46 499 46H516V0H510H502Q494 1 482 1T457 2T432 2T414 3Q403 3 377 3T327 1L304 0H295V46H298Q309 46 320 51T331 63Q331 65 291 120L250 175Q249 174 219 133T185 88Q181 83 181 74Q181 63 188 55T206 46Q208 46 208 23V0H201Z" transform="translate(1333,0)" style="stroke-width: 3;"/></g></g></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(20130.6,0)"><g data-mml-node="mo" transform="translate(0 -0.5)"><path data-c="29" d="M305 251Q305 -145 69 -349H56Q43 -349 39 -347T35 -338Q37 -333 60 -307T108 -239T160 -136T204 27T221 250T204 473T160 636T108 740T60 807T35 839Q35 850 50 850H56H69Q197 743 256 566Q305 425 305 251Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="block" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; overflow: hidden; width: 100%;"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><msub><mi>t</mi><mrow data-mjx-texclass="ORD"><mi>n</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>=</mo><msub><mi>t</mi><mi>n</mi></msub><mo>+</mo><mi>clamp</mi><mstyle scriptlevel="0"><mspace width="-0.167em"/></mstyle><mrow data-mjx-texclass="ORD"><mo minsize="1.2em" maxsize="1.2em">(</mo></mrow><mi>λ</mi><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mo stretchy="false">(</mo><mi mathvariant="normal">Φ</mi><mo stretchy="false">(</mo><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">r</mi></mrow><mo stretchy="false">(</mo><msub><mi>t</mi><mi>n</mi></msub><mo stretchy="false">)</mo><mo stretchy="false">)</mo><mo>−</mo><mi>r</mi><mo stretchy="false">)</mo><mo>,</mo><mstyle scriptlevel="0"><mspace width="0.278em"/></mstyle><msub><mi>s</mi><mrow data-mjx-texclass="ORD"><mo data-mjx-texclass="OP" movablelimits="true">min</mo></mrow></msub><mo>,</mo><mstyle scriptlevel="0"><mspace width="0.278em"/></mstyle><msub><mi>s</mi><mrow data-mjx-texclass="ORD"><mo data-mjx-texclass="OP" movablelimits="true">max</mo></mrow></msub><mrow data-mjx-texclass="ORD"><mo minsize="1.2em" maxsize="1.2em">)</mo></mrow></math></mjx-assistive-mml></mjx-container><p>Burada <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="1.633ex" height="1.545ex" role="img" focusable="false" viewBox="0 -683 722 683" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="3A6" d="M312 622Q310 623 307 625T303 629T297 631T286 634T270 635T246 636T211 637H184V683H196Q220 680 361 680T526 683H538V637H511Q468 637 447 635T422 631T411 622V533L425 531Q525 519 595 466T665 342Q665 301 642 267T583 209T506 172T425 152L411 150V61Q417 55 421 53T447 48T511 46H538V0H526Q502 3 361 3T196 0H184V46H211Q231 46 245 46T270 47T286 48T297 51T303 54T307 57T312 61V150H310Q309 151 289 153T232 166T160 195Q149 201 136 210T103 238T69 284T56 342Q56 414 128 467T294 530Q309 532 310 533H312V622ZM170 342Q170 207 307 188H312V495H309Q301 495 282 491T231 469T186 423Q170 389 170 342ZM415 188Q487 199 519 236T551 342Q551 384 539 414T507 459T470 481T434 491T415 495H410V188H415Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="normal">Φ</mi></math></mjx-assistive-mml></mjx-container>, havada pozitif ve kayada negatif olan işaretli mesafedir; <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.025ex;" xmlns="http://www.w3.org/2000/svg" width="1.02ex" height="1.025ex" role="img" focusable="false" viewBox="0 -442 451 453" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D45F" d="M21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q161 442 183 430T214 408T225 388Q227 382 228 382T236 389Q284 441 347 441H350Q398 441 422 400Q430 381 430 363Q430 333 417 315T391 292T366 288Q346 288 334 299T322 328Q322 376 378 392Q356 405 342 405Q286 405 239 331Q229 315 224 298T190 165Q156 25 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>r</mi></math></mjx-assistive-mml></mjx-container> prob yarıçapıdır; <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="8.862ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 3917.2 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D706" d="M166 673Q166 685 183 694H202Q292 691 316 644Q322 629 373 486T474 207T524 67Q531 47 537 34T546 15T551 6T555 2T556 -2T550 -11H482Q457 3 450 18T399 152L354 277L340 262Q327 246 293 207T236 141Q211 112 174 69Q123 9 111 -1T83 -12Q47 -12 47 20Q47 37 61 52T199 187Q229 216 266 252T321 306L338 322Q338 323 288 462T234 612Q214 657 183 657Q166 657 166 673Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(860.8,0)"><path data-c="2208" d="M84 250Q84 372 166 450T360 539Q361 539 377 539T419 540T469 540H568Q583 532 583 520Q583 511 570 501L466 500Q355 499 329 494Q280 482 242 458T183 409T147 354T129 306T124 272V270H568Q583 262 583 250T568 230H124V228Q124 207 134 177T167 112T231 48T328 7Q355 1 466 0H570Q583 -10 583 -20Q583 -32 568 -40H471Q464 -40 446 -40T417 -41Q262 -41 172 45Q84 127 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1805.6,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2194.6,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2694.6,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(3139.2,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(3639.2,0)"><path data-c="5D" d="M22 710V750H159V-250H22V-210H119V710H22Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>λ</mi><mo>∈</mo><mo stretchy="false">(</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo stretchy="false">]</mo></math></mjx-assistive-mml></mjx-container>, 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; <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.439ex;" xmlns="http://www.w3.org/2000/svg" width="9.148ex" height="1.439ex" role="img" focusable="false" viewBox="0 -442 4043.3 636" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D460" d="M131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" transform="translate(502,-150) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mo"><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(833,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(1111,0)" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(1730.7,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(2175.4,0)"><g data-mml-node="mi"><path data-c="1D460" d="M131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" transform="translate(502,-150) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mo"><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(833,0)" style="stroke-width: 3;"/><path data-c="78" d="M201 0Q189 3 102 3Q26 3 17 0H11V46H25Q48 47 67 52T96 61T121 78T139 96T160 122T180 150L226 210L168 288Q159 301 149 315T133 336T122 351T113 363T107 370T100 376T94 379T88 381T80 383Q74 383 44 385H16V431H23Q59 429 126 429Q219 429 229 431H237V385Q201 381 201 369Q201 367 211 353T239 315T268 274L272 270L297 304Q329 345 329 358Q329 364 327 369T322 376T317 380T310 384L307 385H302V431H309Q324 428 408 428Q487 428 493 431H499V385H492Q443 385 411 368Q394 360 377 341T312 257L296 236L358 151Q424 61 429 57T446 50Q464 46 499 46H516V0H510H502Q494 1 482 1T457 2T432 2T414 3Q403 3 377 3T327 1L304 0H295V46H298Q309 46 320 51T331 63Q331 65 291 120L250 175Q249 174 219 133T185 88Q181 83 181 74Q181 63 188 55T206 46Q208 46 208 23V0H201Z" transform="translate(1333,0)" style="stroke-width: 3;"/></g></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>s</mi><mrow data-mjx-texclass="ORD"><mo data-mjx-texclass="OP" movablelimits="true">min</mo></mrow></msub><mo>,</mo><msub><mi>s</mi><mrow data-mjx-texclass="ORD"><mo data-mjx-texclass="OP" movablelimits="true">max</mo></mrow></msub></math></mjx-assistive-mml></mjx-container> 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, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="11.08ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 4897.6 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="3A6" d="M312 622Q310 623 307 625T303 629T297 631T286 634T270 635T246 636T211 637H184V683H196Q220 680 361 680T526 683H538V637H511Q468 637 447 635T422 631T411 622V533L425 531Q525 519 595 466T665 342Q665 301 642 267T583 209T506 172T425 152L411 150V61Q417 55 421 53T447 48T511 46H538V0H526Q502 3 361 3T196 0H184V46H211Q231 46 245 46T270 47T286 48T297 51T303 54T307 57T312 61V150H310Q309 151 289 153T232 166T160 195Q149 201 136 210T103 238T69 284T56 342Q56 414 128 467T294 530Q309 532 310 533H312V622ZM170 342Q170 207 307 188H312V495H309Q301 495 282 491T231 469T186 423Q170 389 170 342ZM415 188Q487 199 519 236T551 342Q551 384 539 414T507 459T470 481T434 491T415 495H410V188H415Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(722,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(1111,0)"><g data-mml-node="mi"><path data-c="1D42B" d="M405 293T374 293T324 312T305 361Q305 378 312 394Q315 397 315 399Q305 399 294 394T266 375T238 329T222 249Q221 241 221 149V62H308V0H298Q280 3 161 3Q47 3 38 0H29V62H98V210V303Q98 353 96 363T83 376Q69 380 42 380H29V442H32L118 446Q204 450 205 450H210V414L211 378Q247 449 315 449H321Q384 449 413 422T442 360Q442 332 424 313Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1585,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1974,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2335,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2724,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(3390.8,0)"><path data-c="2264" d="M674 636Q682 636 688 630T694 615T687 601Q686 600 417 472L151 346L399 228Q687 92 691 87Q694 81 694 76Q694 58 676 56H670L382 192Q92 329 90 331Q83 336 83 348Q84 359 96 365Q104 369 382 500T665 634Q669 636 674 636ZM84 -118Q84 -108 99 -98H678Q694 -104 694 -118Q694 -130 679 -138H98Q84 -131 84 -118Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(4446.6,0)"><path data-c="1D45F" d="M21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q161 442 183 430T214 408T225 388Q227 382 228 382T236 389Q284 441 347 441H350Q398 441 422 400Q430 381 430 363Q430 333 417 315T391 292T366 288Q346 288 334 299T322 328Q322 376 378 392Q356 405 342 405Q286 405 239 331Q229 315 224 298T190 165Q156 25 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="normal">Φ</mi><mo stretchy="false">(</mo><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">r</mi></mrow><mo stretchy="false">(</mo><mi>t</mi><mo stretchy="false">)</mo><mo stretchy="false">)</mo><mo>≤</mo><mi>r</mi></math></mjx-assistive-mml></mjx-container> koşulunu sağlayan ilk <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.025ex;" xmlns="http://www.w3.org/2000/svg" width="0.817ex" height="1.441ex" role="img" focusable="false" viewBox="0 -626 361 637" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>t</mi></math></mjx-assistive-mml></mjx-container> 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.</p>
<p>Ç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 <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="8.587ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 3795.6 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="3A6" d="M312 622Q310 623 307 625T303 629T297 631T286 634T270 635T246 636T211 637H184V683H196Q220 680 361 680T526 683H538V637H511Q468 637 447 635T422 631T411 622V533L425 531Q525 519 595 466T665 342Q665 301 642 267T583 209T506 172T425 152L411 150V61Q417 55 421 53T447 48T511 46H538V0H526Q502 3 361 3T196 0H184V46H211Q231 46 245 46T270 47T286 48T297 51T303 54T307 57T312 61V150H310Q309 151 289 153T232 166T160 195Q149 201 136 210T103 238T69 284T56 342Q56 414 128 467T294 530Q309 532 310 533H312V622ZM170 342Q170 207 307 188H312V495H309Q301 495 282 491T231 469T186 423Q170 389 170 342ZM415 188Q487 199 519 236T551 342Q551 384 539 414T507 459T470 481T434 491T415 495H410V188H415Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(722,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(1111,0)"><g data-mml-node="mi"><path data-c="1D41C" d="M447 131H458Q478 131 478 117Q478 112 471 95T439 51T377 9Q330 -6 286 -6Q196 -6 135 35Q39 96 39 222Q39 324 101 384Q169 453 286 453Q359 453 411 431T464 353Q464 319 445 302T395 284Q360 284 343 305T325 353Q325 380 338 396H333Q317 398 295 398H292Q280 398 271 397T245 390T218 373T197 338T183 283Q182 275 182 231Q182 199 184 180T193 132T220 85T270 57Q289 50 317 50H326Q385 50 414 115Q419 127 423 129T447 131Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1622,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2288.8,0)"><path data-c="3C" d="M694 -11T694 -19T688 -33T678 -40Q671 -40 524 29T234 166L90 235Q83 240 83 250Q83 261 91 266Q664 540 678 540Q681 540 687 534T694 519T687 505Q686 504 417 376L151 250L417 124Q686 -4 687 -5Q694 -11 694 -19Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(3344.6,0)"><path data-c="1D45F" d="M21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q161 442 183 430T214 408T225 388Q227 382 228 382T236 389Q284 441 347 441H350Q398 441 422 400Q430 381 430 363Q430 333 417 315T391 292T366 288Q346 288 334 299T322 328Q322 376 378 392Q356 405 342 405Q286 405 239 331Q229 315 224 298T190 165Q156 25 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="normal">Φ</mi><mo stretchy="false">(</mo><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">c</mi></mrow><mo stretchy="false">)</mo><mo>&lt;</mo><mi>r</mi></math></mjx-assistive-mml></mjx-container> olduğu yerde bitirip bitirmediğini denetler. Öyleyse alanın gradyanını okur; <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="1.633ex" height="1.545ex" role="img" focusable="false" viewBox="0 -683 722 683" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="3A6" d="M312 622Q310 623 307 625T303 629T297 631T286 634T270 635T246 636T211 637H184V683H196Q220 680 361 680T526 683H538V637H511Q468 637 447 635T422 631T411 622V533L425 531Q525 519 595 466T665 342Q665 301 642 267T583 209T506 172T425 152L411 150V61Q417 55 421 53T447 48T511 46H538V0H526Q502 3 361 3T196 0H184V46H211Q231 46 245 46T270 47T286 48T297 51T303 54T307 57T312 61V150H310Q309 151 289 153T232 166T160 195Q149 201 136 210T103 238T69 284T56 342Q56 414 128 467T294 530Q309 532 310 533H312V622ZM170 342Q170 207 307 188H312V495H309Q301 495 282 491T231 469T186 423Q170 389 170 342ZM415 188Q487 199 519 236T551 342Q551 384 539 414T507 459T470 481T434 491T415 495H410V188H415Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="normal">Φ</mi></math></mjx-assistive-mml></mjx-container> 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:</p>
<mjx-container tabindex="0" class="MathJax" jax="SVG" display="true" style="direction: ltr; display: block; text-align: center; margin: 1em 0; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -2.172ex;" xmlns="http://www.w3.org/2000/svg" width="29.076ex" height="5.475ex" role="img" focusable="false" viewBox="0 -1460 12851.4 2420" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D41C" d="M447 131H458Q478 131 478 117Q478 112 471 95T439 51T377 9Q330 -6 286 -6Q196 -6 135 35Q39 96 39 222Q39 324 101 384Q169 453 286 453Q359 453 411 431T464 353Q464 319 445 302T395 284Q360 284 343 305T325 353Q325 380 338 396H333Q317 398 295 398H292Q280 398 271 397T245 390T218 373T197 338T183 283Q182 275 182 231Q182 199 184 180T193 132T220 85T270 57Q289 50 317 50H326Q385 50 414 115Q419 127 423 129T447 131Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(788.8,0)"><path data-c="2190" d="M944 261T944 250T929 230H165Q167 228 182 216T211 189T244 152T277 96T303 25Q308 7 308 0Q308 -11 288 -11Q281 -11 278 -11T272 -7T267 2T263 21Q245 94 195 151T73 236Q58 242 55 247Q55 254 59 257T73 264Q121 283 158 314T215 375T247 434T264 480L267 497Q269 503 270 505T275 509T288 511Q308 511 308 500Q308 493 303 475Q293 438 278 406T246 352T215 315T185 287T165 270H929Q944 261 944 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(2066.6,0)"><g data-mml-node="mi"><path data-c="1D41C" d="M447 131H458Q478 131 478 117Q478 112 471 95T439 51T377 9Q330 -6 286 -6Q196 -6 135 35Q39 96 39 222Q39 324 101 384Q169 453 286 453Q359 453 411 431T464 353Q464 319 445 302T395 284Q360 284 343 305T325 353Q325 380 338 396H333Q317 398 295 398H292Q280 398 271 397T245 390T218 373T197 338T183 283Q182 275 182 231Q182 199 184 180T193 132T220 85T270 57Q289 50 317 50H326Q385 50 414 115Q419 127 423 129T447 131Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(2799.8,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(3800,0)"><g data-mml-node="mo" transform="translate(0 -0.5)"><path data-c="28" d="M152 251Q152 646 388 850H416Q422 844 422 841Q422 837 403 816T357 753T302 649T255 482T236 250Q236 124 255 19T301 -147T356 -251T403 -315T422 -340Q422 -343 416 -349H388Q359 -325 332 -296T271 -213T212 -97T170 56T152 251Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mi" transform="translate(4258,0)"><path data-c="1D45F" d="M21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q161 442 183 430T214 408T225 388Q227 382 228 382T236 389Q284 441 347 441H350Q398 441 422 400Q430 381 430 363Q430 333 417 315T391 292T366 288Q346 288 334 299T322 328Q322 376 378 392Q356 405 342 405Q286 405 239 331Q229 315 224 298T190 165Q156 25 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4931.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(5931.4,0)"><path data-c="3A6" d="M312 622Q310 623 307 625T303 629T297 631T286 634T270 635T246 636T211 637H184V683H196Q220 680 361 680T526 683H538V637H511Q468 637 447 635T422 631T411 622V533L425 531Q525 519 595 466T665 342Q665 301 642 267T583 209T506 172T425 152L411 150V61Q417 55 421 53T447 48T511 46H538V0H526Q502 3 361 3T196 0H184V46H211Q231 46 245 46T270 47T286 48T297 51T303 54T307 57T312 61V150H310Q309 151 289 153T232 166T160 195Q149 201 136 210T103 238T69 284T56 342Q56 414 128 467T294 530Q309 532 310 533H312V622ZM170 342Q170 207 307 188H312V495H309Q301 495 282 491T231 469T186 423Q170 389 170 342ZM415 188Q487 199 519 236T551 342Q551 384 539 414T507 459T470 481T434 491T415 495H410V188H415Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(6653.4,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(7042.4,0)"><g data-mml-node="mi"><path data-c="1D41C" d="M447 131H458Q478 131 478 117Q478 112 471 95T439 51T377 9Q330 -6 286 -6Q196 -6 135 35Q39 96 39 222Q39 324 101 384Q169 453 286 453Q359 453 411 431T464 353Q464 319 445 302T395 284Q360 284 343 305T325 353Q325 380 338 396H333Q317 398 295 398H292Q280 398 271 397T245 390T218 373T197 338T183 283Q182 275 182 231Q182 199 184 180T193 132T220 85T270 57Q289 50 317 50H326Q385 50 414 115Q419 127 423 129T447 131Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(7553.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(7942.4,0)"><g data-mml-node="mo" transform="translate(0 -0.5)"><path data-c="29" d="M305 251Q305 -145 69 -349H56Q43 -349 39 -347T35 -338Q37 -333 60 -307T108 -239T160 -136T204 27T221 250T204 473T160 636T108 740T60 807T35 839Q35 850 50 850H56H69Q197 743 256 566Q305 425 305 251Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mstyle" transform="translate(8400.4,0)"><g data-mml-node="mspace"/></g><g data-mml-node="mfrac" transform="translate(8567.4,0)"><g data-mml-node="mrow" transform="translate(720,710)"><g data-mml-node="mi"><path data-c="2207" d="M46 676Q46 679 51 683H781Q786 679 786 676Q786 674 617 326T444 -26Q439 -33 416 -33T388 -26Q385 -22 216 326T46 676ZM697 596Q697 597 445 597T193 596Q195 591 319 336T445 80L697 596Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(833,0)"><path data-c="3A6" d="M312 622Q310 623 307 625T303 629T297 631T286 634T270 635T246 636T211 637H184V683H196Q220 680 361 680T526 683H538V637H511Q468 637 447 635T422 631T411 622V533L425 531Q525 519 595 466T665 342Q665 301 642 267T583 209T506 172T425 152L411 150V61Q417 55 421 53T447 48T511 46H538V0H526Q502 3 361 3T196 0H184V46H211Q231 46 245 46T270 47T286 48T297 51T303 54T307 57T312 61V150H310Q309 151 289 153T232 166T160 195Q149 201 136 210T103 238T69 284T56 342Q56 414 128 467T294 530Q309 532 310 533H312V622ZM170 342Q170 207 307 188H312V495H309Q301 495 282 491T231 469T186 423Q170 389 170 342ZM415 188Q487 199 519 236T551 342Q551 384 539 414T507 459T470 481T434 491T415 495H410V188H415Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1555,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(1944,0)"><g data-mml-node="mi"><path data-c="1D41C" d="M447 131H458Q478 131 478 117Q478 112 471 95T439 51T377 9Q330 -6 286 -6Q196 -6 135 35Q39 96 39 222Q39 324 101 384Q169 453 286 453Q359 453 411 431T464 353Q464 319 445 302T395 284Q360 284 343 305T325 353Q325 380 338 396H333Q317 398 295 398H292Q280 398 271 397T245 390T218 373T197 338T183 283Q182 275 182 231Q182 199 184 180T193 132T220 85T270 57Q289 50 317 50H326Q385 50 414 115Q419 127 423 129T447 131Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(2455,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mrow" transform="translate(220,-710)"><g data-mml-node="mo"><path data-c="2016" d="M133 736Q138 750 153 750Q164 750 170 739Q172 735 172 250T170 -239Q164 -250 152 -250Q144 -250 138 -244L137 -243Q133 -241 133 -179T132 250Q132 731 133 736ZM329 739Q334 750 346 750Q353 750 361 744L362 743Q366 741 366 679T367 250T367 -178T362 -243L361 -244Q355 -250 347 -250Q335 -250 329 -239Q327 -235 327 250T329 739Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(500,0)"><path data-c="2207" d="M46 676Q46 679 51 683H781Q786 679 786 676Q786 674 617 326T444 -26Q439 -33 416 -33T388 -26Q385 -22 216 326T46 676ZM697 596Q697 597 445 597T193 596Q195 591 319 336T445 80L697 596Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1333,0)"><path data-c="3A6" d="M312 622Q310 623 307 625T303 629T297 631T286 634T270 635T246 636T211 637H184V683H196Q220 680 361 680T526 683H538V637H511Q468 637 447 635T422 631T411 622V533L425 531Q525 519 595 466T665 342Q665 301 642 267T583 209T506 172T425 152L411 150V61Q417 55 421 53T447 48T511 46H538V0H526Q502 3 361 3T196 0H184V46H211Q231 46 245 46T270 47T286 48T297 51T303 54T307 57T312 61V150H310Q309 151 289 153T232 166T160 195Q149 201 136 210T103 238T69 284T56 342Q56 414 128 467T294 530Q309 532 310 533H312V622ZM170 342Q170 207 307 188H312V495H309Q301 495 282 491T231 469T186 423Q170 389 170 342ZM415 188Q487 199 519 236T551 342Q551 384 539 414T507 459T470 481T434 491T415 495H410V188H415Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2055,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(2444,0)"><g data-mml-node="mi"><path data-c="1D41C" d="M447 131H458Q478 131 478 117Q478 112 471 95T439 51T377 9Q330 -6 286 -6Q196 -6 135 35Q39 96 39 222Q39 324 101 384Q169 453 286 453Q359 453 411 431T464 353Q464 319 445 302T395 284Q360 284 343 305T325 353Q325 380 338 396H333Q317 398 295 398H292Q280 398 271 397T245 390T218 373T197 338T183 283Q182 275 182 231Q182 199 184 180T193 132T220 85T270 57Q289 50 317 50H326Q385 50 414 115Q419 127 423 129T447 131Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(2955,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(3344,0)"><path data-c="2016" d="M133 736Q138 750 153 750Q164 750 170 739Q172 735 172 250T170 -239Q164 -250 152 -250Q144 -250 138 -244L137 -243Q133 -241 133 -179T132 250Q132 731 133 736ZM329 739Q334 750 346 750Q353 750 361 744L362 743Q366 741 366 679T367 250T367 -178T362 -243L361 -244Q355 -250 347 -250Q335 -250 329 -239Q327 -235 327 250T329 739Z" style="stroke-width: 3;"/></g></g><rect width="4044" height="60" x="120" y="220"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="block" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; overflow: hidden; width: 100%;"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">c</mi></mrow><mo stretchy="false">←</mo><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">c</mi></mrow><mo>+</mo><mrow data-mjx-texclass="ORD"><mo minsize="1.2em" maxsize="1.2em">(</mo></mrow><mi>r</mi><mo>−</mo><mi mathvariant="normal">Φ</mi><mo stretchy="false">(</mo><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">c</mi></mrow><mo stretchy="false">)</mo><mrow data-mjx-texclass="ORD"><mo minsize="1.2em" maxsize="1.2em">)</mo></mrow><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mfrac><mrow><mi mathvariant="normal">∇</mi><mi mathvariant="normal">Φ</mi><mo stretchy="false">(</mo><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">c</mi></mrow><mo stretchy="false">)</mo></mrow><mrow><mo data-mjx-texclass="OPEN" fence="false" stretchy="false">‖</mo><mi mathvariant="normal">∇</mi><mi mathvariant="normal">Φ</mi><mo stretchy="false">(</mo><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">c</mi></mrow><mo stretchy="false">)</mo><mo data-mjx-texclass="CLOSE" fence="false" stretchy="false">‖</mo></mrow></mfrac></math></mjx-assistive-mml></mjx-container><p>Bu işlemin birkaç yinelemesi <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.025ex;" xmlns="http://www.w3.org/2000/svg" width="1.02ex" height="1.025ex" role="img" focusable="false" viewBox="0 -442 451 453" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D45F" d="M21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q161 442 183 430T214 408T225 388Q227 382 228 382T236 389Q284 441 347 441H350Q398 441 422 400Q430 381 430 363Q430 333 417 315T391 292T366 288Q346 288 334 299T322 328Q322 376 378 392Q356 405 342 405Q286 405 239 331Q229 315 224 298T190 165Q156 25 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>r</mi></math></mjx-assistive-mml></mjx-container>-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.</p>
<h2 id="iceri-sıcramak-dısarı-yumusakca-acılmak-ve-cit-direklerinde-irkilmemek" tabindex="-1">İçeri sıçramak, dışarı yumuşakça açılmak ve çit direklerinde irkilmemek <a class="header-anchor" href="#iceri-sıcramak-dısarı-yumusakca-acılmak-ve-cit-direklerinde-irkilmemek" aria-label="Permalink to &quot;İçeri sıçramak, dışarı yumuşakça açılmak ve çit direklerinde irkilmemek&quot;"></a></h2>
<p>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.</p>
<p>Kodda bu, değişimin işaretine göre hızı değiştiren tek satırlık üstel yumuşatmadır. <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.045ex;" xmlns="http://www.w3.org/2000/svg" width="0.943ex" height="1.64ex" role="img" focusable="false" viewBox="0 -705 417 725" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="2113" d="M345 104T349 104T361 95T369 80T352 59Q268 -20 206 -20Q170 -20 146 3T113 53T99 104L94 129Q94 130 79 116T48 86T28 70Q22 70 15 79T7 94Q7 98 12 103T58 147L91 179V185Q91 186 91 191T92 200Q92 282 128 400T223 612T336 705Q397 705 397 636V627Q397 453 194 233Q185 223 180 218T174 211T171 208T165 201L163 186Q159 142 159 123Q159 17 208 17Q228 17 253 30T293 56T335 94Q345 104 349 104ZM360 634Q360 655 354 661T336 668Q328 668 322 666T302 645T272 592Q252 547 229 467T192 330L179 273Q179 272 186 280T204 300T221 322Q327 453 355 590Q360 612 360 634Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>ℓ</mi></math></mjx-assistive-mml></mjx-container> mevcut bom uzunluğu, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.023ex;" xmlns="http://www.w3.org/2000/svg" width="1.197ex" height="1.02ex" role="img" focusable="false" viewBox="0 -441 529 451" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>a</mi></math></mjx-assistive-mml></mjx-container> çarpışmanın bu karede izin verdiği uzunluk ve <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.025ex;" xmlns="http://www.w3.org/2000/svg" width="2.701ex" height="1.645ex" role="img" focusable="false" viewBox="0 -716 1194 727" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="394" d="M51 0Q46 4 46 7Q46 9 215 357T388 709Q391 716 416 716Q439 716 444 709Q447 705 616 357T786 7Q786 4 781 0H51ZM507 344L384 596L137 92L383 91H630Q630 93 507 344Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(833,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="normal">Δ</mi><mi>t</mi></math></mjx-assistive-mml></mjx-container> kare süresi ise</p>
<mjx-container tabindex="0" class="MathJax" jax="SVG" display="true" style="direction: ltr; display: block; text-align: center; margin: 1em 0; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -2.149ex;" xmlns="http://www.w3.org/2000/svg" width="62.104ex" height="5.43ex" role="img" focusable="false" viewBox="0 -1450 27450 2400" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="2113" d="M345 104T349 104T361 95T369 80T352 59Q268 -20 206 -20Q170 -20 146 3T113 53T99 104L94 129Q94 130 79 116T48 86T28 70Q22 70 15 79T7 94Q7 98 12 103T58 147L91 179V185Q91 186 91 191T92 200Q92 282 128 400T223 612T336 705Q397 705 397 636V627Q397 453 194 233Q185 223 180 218T174 211T171 208T165 201L163 186Q159 142 159 123Q159 17 208 17Q228 17 253 30T293 56T335 94Q345 104 349 104ZM360 634Q360 655 354 661T336 668Q328 668 322 666T302 645T272 592Q252 547 229 467T192 330L179 273Q179 272 186 280T204 300T221 322Q327 453 355 590Q360 612 360 634Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(694.8,0)"><path data-c="2190" d="M944 261T944 250T929 230H165Q167 228 182 216T211 189T244 152T277 96T303 25Q308 7 308 0Q308 -11 288 -11Q281 -11 278 -11T272 -7T267 2T263 21Q245 94 195 151T73 236Q58 242 55 247Q55 254 59 257T73 264Q121 283 158 314T215 375T247 434T264 480L267 497Q269 503 270 505T275 509T288 511Q308 511 308 500Q308 493 303 475Q293 438 278 406T246 352T215 315T185 287T165 270H929Q944 261 944 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1972.6,0)"><path data-c="2113" d="M345 104T349 104T361 95T369 80T352 59Q268 -20 206 -20Q170 -20 146 3T113 53T99 104L94 129Q94 130 79 116T48 86T28 70Q22 70 15 79T7 94Q7 98 12 103T58 147L91 179V185Q91 186 91 191T92 200Q92 282 128 400T223 612T336 705Q397 705 397 636V627Q397 453 194 233Q185 223 180 218T174 211T171 208T165 201L163 186Q159 142 159 123Q159 17 208 17Q228 17 253 30T293 56T335 94Q345 104 349 104ZM360 634Q360 655 354 661T336 668Q328 668 322 666T302 645T272 592Q252 547 229 467T192 330L179 273Q179 272 186 280T204 300T221 322Q327 453 355 590Q360 612 360 634Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2611.8,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(3612,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(4001,0)"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4752.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(5752.4,0)"><path data-c="2113" d="M345 104T349 104T361 95T369 80T352 59Q268 -20 206 -20Q170 -20 146 3T113 53T99 104L94 129Q94 130 79 116T48 86T28 70Q22 70 15 79T7 94Q7 98 12 103T58 147L91 179V185Q91 186 91 191T92 200Q92 282 128 400T223 612T336 705Q397 705 397 636V627Q397 453 194 233Q185 223 180 218T174 211T171 208T165 201L163 186Q159 142 159 123Q159 17 208 17Q228 17 253 30T293 56T335 94Q345 104 349 104ZM360 634Q360 655 354 661T336 668Q328 668 322 666T302 645T272 592Q252 547 229 467T192 330L179 273Q179 272 186 280T204 300T221 322Q327 453 355 590Q360 612 360 634Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(6169.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(6558.4,0)"><g data-mml-node="mo" transform="translate(0 -0.5)"><path data-c="28" d="M152 251Q152 646 388 850H416Q422 844 422 841Q422 837 403 816T357 753T302 649T255 482T236 250Q236 124 255 19T301 -147T356 -251T403 -315T422 -340Q422 -343 416 -349H388Q359 -325 332 -296T271 -213T212 -97T170 56T152 251Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mn" transform="translate(7016.4,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(7738.7,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msup" transform="translate(8738.9,0)"><g data-mml-node="mi"><path data-c="1D452" d="M39 168Q39 225 58 272T107 350T174 402T244 433T307 442H310Q355 442 388 420T421 355Q421 265 310 237Q261 224 176 223Q139 223 138 221Q138 219 132 186T125 128Q125 81 146 54T209 26T302 45T394 111Q403 121 406 121Q410 121 419 112T429 98T420 82T390 55T344 24T281 -1T205 -11Q126 -11 83 42T39 168ZM373 353Q367 405 305 405Q272 405 244 391T199 357T170 316T154 280T149 261Q149 260 169 260Q282 260 327 284T373 353Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" transform="translate(499,413) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mo"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(778,0)"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(1299,0) scale(1.414)"><g data-mml-node="mspace"/></g><g data-mml-node="mi" transform="translate(1535.2,0)"><path data-c="394" d="M51 0Q46 4 46 7Q46 9 215 357T388 709Q391 716 416 716Q439 716 444 709Q447 705 616 357T786 7Q786 4 781 0H51ZM507 344L384 596L137 92L383 91H630Q630 93 507 344Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(2368.2,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(11217.7,0)"><g data-mml-node="mo" transform="translate(0 -0.5)"><path data-c="29" d="M305 251Q305 -145 69 -349H56Q43 -349 39 -347T35 -338Q37 -333 60 -307T108 -239T160 -136T204 27T221 250T204 473T160 636T108 740T60 807T35 839Q35 850 50 850H56H69Q197 743 256 566Q305 425 305 251Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(11675.7,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(11953.7,0)"><g data-mml-node="mspace"/></g><g data-mml-node="mi" transform="translate(14120.4,0)"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(14919.2,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mrow" transform="translate(15974.9,0)"><g data-mml-node="mo" transform="translate(0 -0.5)"><path data-c="7B" d="M618 -943L612 -949H582L568 -943Q472 -903 411 -841T332 -703Q327 -682 327 -653T325 -350Q324 -28 323 -18Q317 24 301 61T264 124T221 171T179 205T147 225T132 234Q130 238 130 250Q130 255 130 258T131 264T132 267T134 269T139 272T144 275Q207 308 256 367Q310 436 323 519Q324 529 325 851Q326 1124 326 1154T332 1205Q369 1358 566 1443L582 1450H612L618 1444V1429Q618 1413 616 1411L608 1406Q599 1402 585 1393T552 1372T515 1343T479 1305T449 1257T429 1200Q425 1180 425 1152T423 851Q422 579 422 549T416 498Q407 459 388 424T346 364T297 318T250 284T214 264T197 254L188 251L205 242Q290 200 345 138T416 3Q421 -18 421 -48T423 -349Q423 -397 423 -472Q424 -677 428 -694Q429 -697 429 -699Q434 -722 443 -743T465 -782T491 -816T519 -845T548 -868T574 -886T595 -899T610 -908L616 -910Q618 -912 618 -928V-943Z" style="stroke-width: 3;"/></g><g data-mml-node="mtable" transform="translate(750,0)"><g data-mml-node="mtr" transform="translate(0,700)"><g data-mml-node="mtd"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" transform="translate(554,-150) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mtext"><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(278,0)" style="stroke-width: 3;"/></g></g></g></g><g data-mml-node="mtd" transform="translate(2625.8,0)"><g data-mml-node="mi"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(806.8,0)"><path data-c="2264" d="M674 636Q682 636 688 630T694 615T687 601Q686 600 417 472L151 346L399 228Q687 92 691 87Q694 81 694 76Q694 58 676 56H670L382 192Q92 329 90 331Q83 336 83 348Q84 359 96 365Q104 369 382 500T665 634Q669 636 674 636ZM84 -118Q84 -108 99 -98H678Q694 -104 694 -118Q694 -130 679 -138H98Q84 -131 84 -118Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1862.6,0)"><path data-c="2113" d="M345 104T349 104T361 95T369 80T352 59Q268 -20 206 -20Q170 -20 146 3T113 53T99 104L94 129Q94 130 79 116T48 86T28 70Q22 70 15 79T7 94Q7 98 12 103T58 147L91 179V185Q91 186 91 191T92 200Q92 282 128 400T223 612T336 705Q397 705 397 636V627Q397 453 194 233Q185 223 180 218T174 211T171 208T165 201L163 186Q159 142 159 123Q159 17 208 17Q228 17 253 30T293 56T335 94Q345 104 349 104ZM360 634Q360 655 354 661T336 668Q328 668 322 666T302 645T272 592Q252 547 229 467T192 330L179 273Q179 272 186 280T204 300T221 322Q327 453 355 590Q360 612 360 634Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mtr" transform="translate(0,-700)"><g data-mml-node="mtd"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" transform="translate(554,-150) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mtext"><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" style="stroke-width: 3;"/><path data-c="75" d="M383 58Q327 -10 256 -10H249Q124 -10 105 89Q104 96 103 226Q102 335 102 348T96 369Q86 385 36 385H25V408Q25 431 27 431L38 432Q48 433 67 434T105 436Q122 437 142 438T172 441T184 442H187V261Q188 77 190 64Q193 49 204 40Q224 26 264 26Q290 26 311 35T343 58T363 90T375 120T379 144Q379 145 379 161T380 201T380 248V315Q380 361 370 372T320 385H302V431Q304 431 378 436T457 442H464V264Q464 84 465 81Q468 61 479 55T524 46H542V0Q540 0 467 -5T390 -11H383V58Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(1056,0)" style="stroke-width: 3;"/></g></g></g></g><g data-mml-node="mtd" transform="translate(2625.8,0)"><g data-mml-node="mi"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(806.8,0)"><path data-c="3E" d="M84 520Q84 528 88 533T96 539L99 540Q106 540 253 471T544 334L687 265Q694 260 694 250T687 235Q685 233 395 96L107 -40H101Q83 -38 83 -20Q83 -19 83 -17Q82 -10 98 -1Q117 9 248 71Q326 108 378 132L626 250L378 368Q90 504 86 509Q84 513 84 520Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1862.6,0)"><path data-c="2113" d="M345 104T349 104T361 95T369 80T352 59Q268 -20 206 -20Q170 -20 146 3T113 53T99 104L94 129Q94 130 79 116T48 86T28 70Q22 70 15 79T7 94Q7 98 12 103T58 147L91 179V185Q91 186 91 191T92 200Q92 282 128 400T223 612T336 705Q397 705 397 636V627Q397 453 194 233Q185 223 180 218T174 211T171 208T165 201L163 186Q159 142 159 123Q159 17 208 17Q228 17 253 30T293 56T335 94Q345 104 349 104ZM360 634Q360 655 354 661T336 668Q328 668 322 666T302 645T272 592Q252 547 229 467T192 330L179 273Q179 272 186 280T204 300T221 322Q327 453 355 590Q360 612 360 634Z" style="stroke-width: 3;"/></g></g></g></g><g data-mml-node="mo" transform="translate(5655.3,0) translate(0 250)"/></g><g data-mml-node="mo" transform="translate(21630.3,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(21908.3,0)"><g data-mml-node="mspace"/></g><g data-mml-node="msub" transform="translate(23074.9,0)"><g data-mml-node="mi"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" transform="translate(554,-150) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mtext"><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(278,0)" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(24546.4,0)"><path data-c="226B" d="M55 539T55 547T60 561T74 567Q81 567 207 498Q297 449 365 412Q633 265 636 261Q639 255 639 250Q639 241 626 232Q614 224 365 88Q83 -65 79 -66Q76 -67 73 -67Q65 -67 60 -61T55 -47Q55 -39 61 -33Q62 -33 95 -15T193 39T320 109L321 110H322L323 111H324L325 112L326 113H327L329 114H330L331 115H332L333 116L334 117H335L336 118H337L338 119H339L340 120L341 121H342L343 122H344L345 123H346L347 124L348 125H349L351 126H352L353 127H354L355 128L356 129H357L358 130H359L360 131H361L362 132L363 133H364L365 134H366L367 135H368L369 136H370L371 137L372 138H373L374 139H375L376 140L378 141L576 251Q63 530 62 533Q55 539 55 547ZM360 539T360 547T365 561T379 567Q386 567 512 498Q602 449 670 412Q938 265 941 261Q944 255 944 250Q944 241 931 232Q919 224 670 88Q388 -65 384 -66Q381 -67 378 -67Q370 -67 365 -61T360 -47Q360 -39 366 -33Q367 -33 400 -15T498 39T625 109L626 110H627L628 111H629L630 112L631 113H632L634 114H635L636 115H637L638 116L639 117H640L641 118H642L643 119H644L645 120L646 121H647L648 122H649L650 123H651L652 124L653 125H654L656 126H657L658 127H659L660 128L661 129H662L663 130H664L665 131H666L667 132L668 133H669L670 134H671L672 135H673L674 136H675L676 137L677 138H678L679 139H680L681 140L683 141L881 251Q368 530 367 533Q360 539 360 547Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(25824.2,0)"><g data-mml-node="mi"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" transform="translate(554,-150) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mtext"><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" style="stroke-width: 3;"/><path data-c="75" d="M383 58Q327 -10 256 -10H249Q124 -10 105 89Q104 96 103 226Q102 335 102 348T96 369Q86 385 36 385H25V408Q25 431 27 431L38 432Q48 433 67 434T105 436Q122 437 142 438T172 441T184 442H187V261Q188 77 190 64Q193 49 204 40Q224 26 264 26Q290 26 311 35T343 58T363 90T375 120T379 144Q379 145 379 161T380 201T380 248V315Q380 361 370 372T320 385H302V431Q304 431 378 436T457 442H464V264Q464 84 465 81Q468 61 479 55T524 46H542V0Q540 0 467 -5T390 -11H383V58Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(1056,0)" style="stroke-width: 3;"/></g></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="block" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; overflow: hidden; width: 100%;"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><mi>ℓ</mi><mo stretchy="false">←</mo><mi>ℓ</mi><mo>+</mo><mo stretchy="false">(</mo><mi>a</mi><mo>−</mo><mi>ℓ</mi><mo stretchy="false">)</mo><mrow data-mjx-texclass="ORD"><mo minsize="1.2em" maxsize="1.2em">(</mo></mrow><mn>1</mn><mo>−</mo><msup><mi>e</mi><mrow data-mjx-texclass="ORD"><mo>−</mo><mi>k</mi><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mi mathvariant="normal">Δ</mi><mi>t</mi></mrow></msup><mrow data-mjx-texclass="ORD"><mo minsize="1.2em" maxsize="1.2em">)</mo></mrow><mo>,</mo><mstyle scriptlevel="0"><mspace width="2em"/></mstyle><mi>k</mi><mo>=</mo><mrow data-mjx-texclass="INNER"><mo data-mjx-texclass="OPEN">{</mo><mtable columnalign="left left" columnspacing="1em" rowspacing="0.4em 0.2em"><mtr><mtd><msub><mi>k</mi><mrow data-mjx-texclass="ORD"><mtext>in</mtext></mrow></msub></mtd><mtd><mi>a</mi><mo>≤</mo><mi>ℓ</mi></mtd></mtr><mtr><mtd><msub><mi>k</mi><mrow data-mjx-texclass="ORD"><mtext>out</mtext></mrow></msub></mtd><mtd><mi>a</mi><mo>&gt;</mo><mi>ℓ</mi></mtd></mtr></mtable><mo data-mjx-texclass="CLOSE" fence="true" stretchy="true" symmetric="true"/></mrow><mo>,</mo><mstyle scriptlevel="0"><mspace width="1em"/></mstyle><msub><mi>k</mi><mrow data-mjx-texclass="ORD"><mtext>in</mtext></mrow></msub><mo>≫</mo><msub><mi>k</mi><mrow data-mjx-texclass="ORD"><mtext>out</mtext></mrow></msub></math></mjx-assistive-mml></mjx-container><p>olur ve dışarı yumuşakça açılma dalı yalnızca açıklık <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.029ex;" xmlns="http://www.w3.org/2000/svg" width="1.17ex" height="1.005ex" role="img" focusable="false" viewBox="0 -431 517 444" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D70F" d="M39 284Q18 284 18 294Q18 301 45 338T99 398Q134 425 164 429Q170 431 332 431Q492 431 497 429Q517 424 517 402Q517 388 508 376T485 360Q479 358 389 358T299 356Q298 355 283 274T251 109T233 20Q228 5 215 -4T186 -13Q153 -13 153 20V30L203 192Q214 228 227 272T248 336L254 357Q254 358 208 358Q206 358 197 358T183 359Q105 359 61 295Q56 287 53 286T39 284Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>τ</mi></math></mjx-assistive-mml></mjx-container> bekleme süresi boyunca korunduktan sonra çalışır. <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="9.505ex" height="2.152ex" role="img" focusable="false" viewBox="0 -869.3 4201.3 951.3" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(722.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msup" transform="translate(1722.4,0)"><g data-mml-node="mi"><path data-c="1D452" d="M39 168Q39 225 58 272T107 350T174 402T244 433T307 442H310Q355 442 388 420T421 355Q421 265 310 237Q261 224 176 223Q139 223 138 221Q138 219 132 186T125 128Q125 81 146 54T209 26T302 45T394 111Q403 121 406 121Q410 121 419 112T429 98T420 82T390 55T344 24T281 -1T205 -11Q126 -11 83 42T39 168ZM373 353Q367 405 305 405Q272 405 244 391T199 357T170 316T154 280T149 261Q149 260 169 260Q282 260 327 284T373 353Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" transform="translate(499,363) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mo"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(778,0)"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(1299,0) scale(1.414)"><g data-mml-node="mspace"/></g><g data-mml-node="mi" transform="translate(1535.2,0)"><path data-c="394" d="M51 0Q46 4 46 7Q46 9 215 357T388 709Q391 716 416 716Q439 716 444 709Q447 705 616 357T786 7Q786 4 781 0H51ZM507 344L384 596L137 92L383 91H630Q630 93 507 344Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(2368.2,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>1</mn><mo>−</mo><msup><mi>e</mi><mrow data-mjx-texclass="ORD"><mo>−</mo><mi>k</mi><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mi mathvariant="normal">Δ</mi><mi>t</mi></mrow></msup></math></mjx-assistive-mml></mjx-container> 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 <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="3.441ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 1521 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(500,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mi" transform="translate(1000,0)"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>1</mn><mrow data-mjx-texclass="ORD"><mo>/</mo></mrow><mi>k</mi></math></mjx-assistive-mml></mjx-container> değerine sabitler; böylece kamera saniyede 30 ve 144 karede aynı hissi verir. Oysa basit sabit karışım <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="16.286ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 7198.4 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="2113" d="M345 104T349 104T361 95T369 80T352 59Q268 -20 206 -20Q170 -20 146 3T113 53T99 104L94 129Q94 130 79 116T48 86T28 70Q22 70 15 79T7 94Q7 98 12 103T58 147L91 179V185Q91 186 91 191T92 200Q92 282 128 400T223 612T336 705Q397 705 397 636V627Q397 453 194 233Q185 223 180 218T174 211T171 208T165 201L163 186Q159 142 159 123Q159 17 208 17Q228 17 253 30T293 56T335 94Q345 104 349 104ZM360 634Q360 655 354 661T336 668Q328 668 322 666T302 645T272 592Q252 547 229 467T192 330L179 273Q179 272 186 280T204 300T221 322Q327 453 355 590Q360 612 360 634Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(694.8,0)"><path data-c="2190" d="M944 261T944 250T929 230H165Q167 228 182 216T211 189T244 152T277 96T303 25Q308 7 308 0Q308 -11 288 -11Q281 -11 278 -11T272 -7T267 2T263 21Q245 94 195 151T73 236Q58 242 55 247Q55 254 59 257T73 264Q121 283 158 314T215 375T247 434T264 480L267 497Q269 503 270 505T275 509T288 511Q308 511 308 500Q308 493 303 475Q293 438 278 406T246 352T215 315T185 287T165 270H929Q944 261 944 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1972.6,0)"><path data-c="2113" d="M345 104T349 104T361 95T369 80T352 59Q268 -20 206 -20Q170 -20 146 3T113 53T99 104L94 129Q94 130 79 116T48 86T28 70Q22 70 15 79T7 94Q7 98 12 103T58 147L91 179V185Q91 186 91 191T92 200Q92 282 128 400T223 612T336 705Q397 705 397 636V627Q397 453 194 233Q185 223 180 218T174 211T171 208T165 201L163 186Q159 142 159 123Q159 17 208 17Q228 17 253 30T293 56T335 94Q345 104 349 104ZM360 634Q360 655 354 661T336 668Q328 668 322 666T302 645T272 592Q252 547 229 467T192 330L179 273Q179 272 186 280T204 300T221 322Q327 453 355 590Q360 612 360 634Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2611.8,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(3612,0)"><path data-c="1D6FC" d="M34 156Q34 270 120 356T309 442Q379 442 421 402T478 304Q484 275 485 237V208Q534 282 560 374Q564 388 566 390T582 393Q603 393 603 385Q603 376 594 346T558 261T497 161L486 147L487 123Q489 67 495 47T514 26Q528 28 540 37T557 60Q559 67 562 68T577 70Q597 70 597 62Q597 56 591 43Q579 19 556 5T512 -10H505Q438 -10 414 62L411 69L400 61Q390 53 370 41T325 18T267 -2T203 -11Q124 -11 79 39T34 156ZM208 26Q257 26 306 47T379 90L403 112Q401 255 396 290Q382 405 304 405Q235 405 183 332Q156 292 139 224T121 120Q121 71 146 49T208 26Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4252,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(4641,0)"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(5392.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(6392.4,0)"><path data-c="2113" d="M345 104T349 104T361 95T369 80T352 59Q268 -20 206 -20Q170 -20 146 3T113 53T99 104L94 129Q94 130 79 116T48 86T28 70Q22 70 15 79T7 94Q7 98 12 103T58 147L91 179V185Q91 186 91 191T92 200Q92 282 128 400T223 612T336 705Q397 705 397 636V627Q397 453 194 233Q185 223 180 218T174 211T171 208T165 201L163 186Q159 142 159 123Q159 17 208 17Q228 17 253 30T293 56T335 94Q345 104 349 104ZM360 634Q360 655 354 661T336 668Q328 668 322 666T302 645T272 592Q252 547 229 467T192 330L179 273Q179 272 186 280T204 300T221 322Q327 453 355 590Q360 612 360 634Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(6809.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>ℓ</mi><mo stretchy="false">←</mo><mi>ℓ</mi><mo>+</mo><mi>α</mi><mo stretchy="false">(</mo><mi>a</mi><mo>−</mo><mi>ℓ</mi><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container> hızlı bir makinede daha çabuk sıçrar, yavaş bir makinede ise hantallaşırdı.</p>
<p>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. <em>Breath of the Wild</em> 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.</p>
<h2 id="sırada-ne-baglanacak" tabindex="-1">Sırada ne bağlanacak? <a class="header-anchor" href="#sırada-ne-baglanacak" aria-label="Permalink to &quot;Sırada ne bağlanacak?&quot;"></a></h2>
<p>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.</p>
<h2 id="bu-bolumde-basvurulan-teknolojiler" tabindex="-1">Bu bölümde başvurulan teknolojiler <a class="header-anchor" href="#bu-bolumde-basvurulan-teknolojiler" aria-label="Permalink to &quot;Bu bölümde başvurulan teknolojiler&quot;"></a></h2>
<p><strong>Tek bir değere sahip olan bom.</strong> 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: <code>beforeControls()</code>, ö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. <code>afterControls(dt)</code> ise çarpışmayı çözümler ve ekranda gösterilecek konumu yazar. Bu ikili olmadan kamera birkaç kare içinde oyuncunun üzerine çöker.</p>
<p><strong>Takılıp çıkarılabilir bir çarpışma sistemi sözleşmesi.</strong> Çarpışma sistemi, “sen engellemeden önce kamera pivottan bu ışın boyunca ne kadar ilerleyebilir?” sorusunu yanıtlayan bir <code>probe</code> 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 <a href="/tr/blog/2026-05-15-open-world-browser-part-29-pluggable-character.html">takılıp çıkarılabilir karakter denetleyicisinin</a> 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 <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.212ex;" xmlns="http://www.w3.org/2000/svg" width="14.705ex" height="2.398ex" role="img" focusable="false" viewBox="0 -966.5 6499.5 1060" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msqrt"><g transform="translate(853,0)"><g data-mml-node="msup"><g data-mml-node="mi"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(633,289) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1258.8,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msup" transform="translate(2259,0)"><g data-mml-node="mi"><path data-c="1D464" d="M580 385Q580 406 599 424T641 443Q659 443 674 425T690 368Q690 339 671 253Q656 197 644 161T609 80T554 12T482 -11Q438 -11 404 5T355 48Q354 47 352 44Q311 -11 252 -11Q226 -11 202 -5T155 14T118 53T104 116Q104 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Q21 293 29 315T52 366T96 418T161 441Q204 441 227 416T250 358Q250 340 217 250T184 111Q184 65 205 46T258 26Q301 26 334 87L339 96V119Q339 122 339 128T340 136T341 143T342 152T345 165T348 182T354 206T362 238T373 281Q402 395 406 404Q419 431 449 431Q468 431 475 421T483 402Q483 389 454 274T422 142Q420 131 420 107V100Q420 85 423 71T442 42T487 26Q558 26 600 148Q609 171 620 213T632 273Q632 306 619 325T593 357T580 385Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(749,289) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3633.8,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msup" transform="translate(4634,0)"><g data-mml-node="mi"><path data-c="210E" d="M137 683Q138 683 209 688T282 694Q294 694 294 685Q294 674 258 534Q220 386 220 383Q220 381 227 388Q288 442 357 442Q411 442 444 415T478 336Q478 285 440 178T402 50Q403 36 407 31T422 26Q450 26 474 56T513 138Q516 149 519 151T535 153Q555 153 555 145Q555 144 551 130Q535 71 500 33Q466 -10 419 -10H414Q367 -10 346 17T325 74Q325 90 361 192T398 345Q398 404 354 404H349Q266 404 205 306L198 293L164 158Q132 28 127 16Q114 -11 83 -11Q69 -11 59 -2T48 16Q48 30 121 320L195 616Q195 629 188 632T149 637H128Q122 643 122 645T124 664Q129 683 137 683Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(609,289) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(0,106.5)"><path data-c="221A" d="M95 178Q89 178 81 186T72 200T103 230T169 280T207 309Q209 311 212 311H213Q219 311 227 294T281 177Q300 134 312 108L397 -77Q398 -77 501 136T707 565T814 786Q820 800 834 800Q841 800 846 794T853 782V776L620 293L385 -193Q381 -200 366 -200Q357 -200 354 -197Q352 -195 256 15L160 225L144 214Q129 202 113 190T95 178Z" style="stroke-width: 3;"/></g><rect width="5646.5" height="60" x="853" y="846.5"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msqrt><msup><mi>n</mi><mn>2</mn></msup><mo>+</mo><msup><mi>w</mi><mn>2</mn></msup><mo>+</mo><msup><mi>h</mi><mn>2</mn></msup></msqrt></math></mjx-assistive-mml></mjx-container> 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.</p>
<p><strong>Çıkıntılara ve mağaralara uyan işaretli mesafe arazi probu.</strong> Arazi bir yükseklik haritası değil, <a href="/tr/blog/2026-02-25-open-world-browser-part-07-marching-cubes.html">işaretli mesafe alanı</a> 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.</p>
<p><strong>Bekleme zamanlayıcılı asimetrik sönümleme.</strong> 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.</p>
<h2 id="kaynaklar" tabindex="-1">Kaynaklar <a class="header-anchor" href="#kaynaklar" aria-label="Permalink to &quot;Kaynaklar&quot;"></a></h2>
<p>Kamera denetiminin bir görünürlük kısıtı olarak çerçevelenmesi Marc Christie ve Patrick Olivier'nin <a href="https://people.irisa.fr/Marc.Christie/Publications/2008/CON08.html" target="_blank" rel="noreferrer"><em>Bilgisayar Grafiklerinde Kamera Denetimi</em></a> çalışmasından gelir (Computer Graphics Forum, 2008). Mesafe alanı yürüyüşü John C. Hart'ın <a href="https://graphics.stanford.edu/courses/cs348b-20-spring-content/uploads/hart.pdf" target="_blank" rel="noreferrer"><em>Küre İzleme: Örtük Yüzeylerin Kenar Yumuşatmalı Işın İzlemesi İçin Geometrik Bir Yöntem</em></a> çalışmasına dayanır (The Visual Computer, 1996). Yaylı kol örüntüsü ve prob küresi çarpışması Epic'in <a href="https://dev.epicgames.com/documentation/en-us/unreal-engine/using-spring-arm-components-in-unreal-engine" target="_blank" rel="noreferrer">Yaylı Kol Bileşeni</a> ile Unity'nin <a href="https://docs.unity3d.com/Packages/com.unity.cinemachine@3.1/manual/CinemachineDeoccluder.html" target="_blank" rel="noreferrer">Cinemachine Engel Gidericisi</a> ve <a href="https://docs.unity3d.com/Packages/com.unity.cinemachine@3.1/manual/CinemachineThirdPersonFollow.html" target="_blank" rel="noreferrer">Üçüncü Şahıs Takibi</a> belgelerinde açıklanır. Hareket ve sönümleme sezgisi Mark Haigh-Hutchinson'ın <em>Gerçek Zamanlı Kameralar</em> kitabından (Morgan Kaufmann, 2009) ve Itay Keren'in <a href="https://www.gamedeveloper.com/design/scroll-back-the-theory-and-practice-of-cameras-in-side-scrollers" target="_blank" rel="noreferrer"><em>Geri Kaydırma: Yandan Kaydırmalı Oyunlarda Kameraların Kuramı ve Uygulaması</em></a> konuşmasından gelir (GDC 2015). Ağ çarpışma sisteminin geliştirme yolu Garrett Johnson'ın <a href="https://github.com/gkjohnson/three-mesh-bvh" target="_blank" rel="noreferrer">three-mesh-bvh</a> kütüphanesidir.</p>
<hr>
<p>30 bölümün 30. bölümü.
Önceki: <a href="/tr/blog/2026-05-15-open-world-browser-part-29-pluggable-character.html">Bölüm 29 - Tek denetleyici, her gövde</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tepenin arkasındaki çimleri render etme: araziye duyarlı örtülme ayıklaması]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-05-19-terrain-occlusion-culling</link>
            <guid>https://app.cinevva.com/tr/blog/2026-05-19-terrain-occlusion-culling</guid>
            <pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Tarayıcı tabanlı bir açık dünya için değerlendirilen sekiz örtülme ayıklama tekniği, arazimiz bir yükseklik haritası olduğu için kazanan yöntem ve bunları kendi sahnenizde A/B karşılaştırmasıyla denemenizi sağlayan etkileşimli bir spike.]]></description>
            <content:encoded><![CDATA[<h1 id="tepenin-arkasındaki-cimleri-render-etme-araziye-duyarlı-ortulme-ayıklaması" tabindex="-1">Tepenin arkasındaki çimleri render etme: araziye duyarlı örtülme ayıklaması <a class="header-anchor" href="#tepenin-arkasındaki-cimleri-render-etme-araziye-duyarlı-ortulme-ayıklaması" aria-label="Permalink to &quot;Tepenin arkasındaki çimleri render etme: araziye duyarlı örtülme ayıklaması&quot;"></a></h1>
<p><em>Cinevva CTO'su ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<p><a href="/tr/blog/2026-05-14-open-world-browser-part-28-grass-and-occlusion.html">28. Bölüm</a>, Spike 57'yi tanıttı ve dört ayıklama yolunun kıyaslamasını birkaç paragrafta sundu. Bu, uzun versiyonu: neden bu dört yöntemi seçtiğimiz, diğer dört yöntemin ne olduğu ve yayınlayacağımız yöntemin arkasındaki gerekçeler.</p>
<p>Kamera ile bir çayır arasında bir tepe var. Çayırı render etmeniz gerekmez. Her modern AAA motoru bunu bilir. Geçen haftaya kadar bizimki de dahil olmak üzere çoğu tarayıcı tabanlı 3D motor bunu bilmez.</p>
<p>Bu yazı; araştırmayı gerektiği gibi yapmanın, onu gerçek kod tabanımıza dayandırmanın, çalışan bir spike geliştirmenin ve teknikleri bugün WebGL, yarın WebGPU ile yayın yaptığımızı göz önünde bulundurarak <em>özellikle bize</em> ne kadar yardımcı olduklarına göre değerlendirmenin sonucu.</p>
<p>Okumaya devam etmeden önce aşağıdaki canlı spike'ı kurcalayabilirsiniz. <kbd>T</kbd>/<kbd>Y</kbd>/<kbd>U</kbd>/<kbd>I</kbd> ayıklama yolları arasında geçiş yapar, <kbd>C</kbd> kamera ön ayarları arasında dolaşır, <kbd>B</kbd> ise testin neleri çıkardığını görebilmeniz için gizlenen chunk'ları kırmızı tel kafes olarak boyar. HUD, her aşamanın kaç instance'ı elediğini gösterir.</p>
<div style="position:relative;padding-bottom:62%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.08)">
<iframe src="/tr/spikes/57-terrain-occlusion/" title="Spike 57 Arazi örtülme ayıklaması" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#1a1f2a" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/57-terrain-occlusion/" target="_blank">Spike 57'yi yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=57-terrain-occlusion">Kaynak kodunu görüntüle</a></p>
<h2 id="motorumuz-bugun-ne-yapıyor-ve-ne-yapmıyor" tabindex="-1">Motorumuz bugün ne yapıyor (ve ne yapmıyor) <a class="header-anchor" href="#motorumuz-bugun-ne-yapıyor-ve-ne-yapmıyor" aria-label="Permalink to &quot;Motorumuz bugün ne yapıyor (ve ne yapmıyor)&quot;"></a></h2>
<p>Akış tabanlı chunk yöneticimiz, oyuncunun çevresinde üç LOD kademesinde 64 metrelik chunk'lardan oluşan bir halka yükler. Her chunk, yükseklik haritasına dağıtılmış instanced ağaçlara sahiptir. <code>Chunk.updateObjectVisibility</code> içinde bulunan ayıklama mantığı basit bir mesafe kontrolüdür: 60 metre içindeki ağaçlar tam mesh olarak, 60 ile 140 metre arasındakiler billboard olarak render edilir; daha uzaktakiler ise hiç render edilmez.</p>
<p>Bu ayıklama, iki büyük israf kategorisini gözden kaçırıyor:</p>
<ol>
<li>60 metrelik diskin içinde <em>ama kameranın arkasında</em> olan her şey. Oyuncu 4 metreden fazla hareket ettiğinde instance buffer'ını yeniden sıralıyoruz, ancak görüş frustum'unu test etmiyoruz. Bu nedenle diskin ortalama yarısı, vertex dönüşümünden sonra kırpılmak üzere GPU'ya gönderiliyor.</li>
<li>60 metrelik diskin içinde <em>ama bir tepenin arkasında</em> olan her şey. Arazimizin dikey aralığı 80 metre ve çok sayıda vadisi var. Kamera bir vadideyken, ayıklama yarıçapındaki bitki örtüsünün çoğu en yakın sırt tarafından geometrik olarak gizleniyor. Yine de hepsini çiziyoruz.</li>
</ol>
<p>Bu yazı ikinci kategoriye odaklanıyor. Bu aynı zamanda AAA motorlarının, ilk bakışta tarayıcıya kolayca uyarlanamayan bir dizi akıllı yöntemle çözdüğü kategori.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0">
<iframe src="https://www.youtube.com/embed/wavnKZNSYqU" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0" allow="accelerometer;autoplay;clipboard-write;encrypted-media;gyroscope;picture-in-picture" allowfullscreen></iframe>
</div>
<p><em>Guerrilla'dan Gilbert Sanders, Horizon Zero Dawn'ın açık dünya bitki örtüsünü nasıl render ettiğini anlatıyor. Son 20 dakika ayıklama yığınına ayrılmış ve &quot;daha hızlı çizmek&quot; yerine neden &quot;daha az çizmenin&quot; üstün olduğunu gösteren usta işi bir ders niteliğinde.</em></p>
<h2 id="bizim-kullanım-senaryomuz-icin-degerlendirilen-sekiz-teknik" tabindex="-1">Bizim kullanım senaryomuz için değerlendirilen sekiz teknik <a class="header-anchor" href="#bizim-kullanım-senaryomuz-icin-degerlendirilen-sekiz-teknik" aria-label="Permalink to &quot;Bizim kullanım senaryomuz için değerlendirilen sekiz teknik&quot;"></a></h2>
<p>Modern örtülme ayıklama yığınını inceledim ve her parçayı prosedürel, yükseklik haritası tabanlı, tarayıcı içinde çalışan bir açık dünyaya ne kadar yardımcı olduğuna göre değerlendirdim. İki ölçüt kullandım: değer (sahnemiz düşünüldüğünde ne kadar israfı ortadan kaldırdığı) ve maliyet (mühendislik emeği ile yığınımızın ne kadarını değiştirmeye zorladığı). Tüm gerekçeler bu yazının arkasındaki araştırma dosyasında bulunuyor; kısa versiyonu şöyle.</p>
<p><strong>1. Instance başına frustum ayıklaması. Yüksek değer, düşük maliyet.</strong> Şu anda instanced bitki örtümüz için frustum'u hiç test etmiyoruz. Bunu eklemek herhangi bir görünümde işi yaklaşık yarıya indiriyor, yaklaşık otuz satır kod gerektiriyor ve bugün WebGL ile yayınlanabiliyor. Bu, en büyük ve en ucuz kazanım; aylar önce yapmış olmalıydık.</p>
<p><strong>2. Yükseklik haritasında ufuk ışını taraması. Yüksek değer, düşük–orta maliyet.</strong> Kameradan her aday instance'a doğru bir ışın ilerletin ve yol boyunca arazi yüksekliğini örnekleyin. Arazi herhangi bir noktada ışının üzerine çıkarsa instance örtülmüştür. Bunun düzgün çalışmasının nedeni, dünyamızın bir yükseklik haritası olması ve görünürlük problemini yatay yön boyunca 1B bir probleme indirgemesidir. Yoğun sürüm, her karede instance başına O(adım) maliyetlidir. Hızlandırılmış sürüm (bir sonraki madde) bunu O(log adım) seviyesine düşürür.</p>
<p><strong>3. Maksimum yükseklik piramidiyle hızlandırma. Yüksek değer, orta maliyet.</strong> Her texel'in kendi kapsama alanındaki maksimum arazi yüksekliğini sakladığı, yükseklik haritasının 2B bir mipmap'i. Ufuk ışını taramasının çevre düzken kaba adımlarla ilerlemesini ve yalnızca tepelerin üzerinde hassaslaşmasını sağlar. 2 numaralı yöntemi üretimde ucuz hâle getiren yapı budur.</p>
<p><strong>4. Hiyerarşik Z örtülmesi (Hi-Z / HZB). Yüksek değer, yüksek maliyet.</strong> Bir depth buffer mipmap'i oluşturun, her instance'ın sınırlarını ekran uzayına yansıtın ve doğru mip seviyesine karşı test edin. Bu, Unreal'ın Nanite'ı, Bevy'nin sanal geometrisi ve VTK'nın WebGPU portu tarafından kullanılan modern GPU tarafı standardıdır. Yalnızca arazi için değil, her şey için çalışır; ancak WebGPU, indirect draw'lar ve bir compute pass gerektirir. Binlerce ağaç değil, milyonlarca çim yaprağı render ettiğimizde karşılığını verir.</p>
<p><strong>5. İki geçişli Hi-Z (Nanite tarzı). 4 numaraya kıyasla marjinal kazanç, yüksek maliyet.</strong> Bir karelik yeniden görünür olma artefaktını önlemek için 1. geçişten sonra bu karenin derinliğini yeniden render eder. Yalnızca GPU güdümlü yolda yeterince ilerlediğimizde ve maliyet artımlı hâle geldiğinde buna değer.</p>
<p><strong>6. Yazılımsal örtülme rasterizer'ı (Frostbite/Intel MOC). Orta değer, yüksek maliyet.</strong> Büyük örtücülerin düşük çözünürlüklü depth buffer'ını CPU'da rasterize edin. Readback gecikmesi sıfırdır. Referans uygulamalar AVX/SSE C++ ile yazılmıştır; bunları WASM'a port etmek başlı başına gerçek bir projedir ve yükseklik haritası ışını taramamız, işin çok küçük bir bölümüyle aynı kazanımların çoğunu sağlar.</p>
<p><strong>7. Önceden hesaplanmış PVS. Düşük değer, yüksek maliyet.</strong> Quake döneminin statik haritaları için harikadır. Arazimiz prosedürel ve sonsuz olduğundan her türlü ön işleme chunk akışı sırasında yapılmak zorunda; bunun maliyeti de çalışma zamanında görünürlük hesaplamak kadar yüksek. Atla.</p>
<p><strong>8. Cesium tarzı ufuk ayıklaması. Bizim için değeri yok, orta maliyet.</strong> Gezegen elipsoidleri için tasarlanmıştır. Dünyamız nispeten düz ve sınırlıdır; matematik burada geçerli değildir ve ya hiçbir şey yapmaz ya da yanlış ayıklamaya yol açar. Atla.</p>
<p>Sonuç olarak: 1 ile 2+3'ü şimdi, CPU'da ve WebGL ile yapın. 4'ü WebGPU geçişi için planlayın. Geri kalanları atlayın.</p>
<h2 id="tarayıcı-arazisi-icin-yukseklik-haritası-ısını-taraması-neden-kazanıyor" tabindex="-1">Tarayıcı arazisi için yükseklik haritası ışını taraması neden kazanıyor? <a class="header-anchor" href="#tarayıcı-arazisi-icin-yukseklik-haritası-ısını-taraması-neden-kazanıyor" aria-label="Permalink to &quot;Tarayıcı arazisi için yükseklik haritası ışını taraması neden kazanıyor?&quot;"></a></h2>
<p>Herhangi bir modern render sunumundaki standart tavsiye &quot;bir Hi-Z buffer oluşturun&quot; şeklindedir. Brian Karis'in <a href="https://www.youtube.com/watch?v=eviSykqSUUw" target="_blank" rel="noreferrer">Nanite üzerine SIGGRAPH 2021 derinlemesine incelemesi</a> bu konudaki temel kaynaktır ve en az bir kez izlemelisiniz.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0">
<iframe src="https://www.youtube.com/embed/eviSykqSUUw" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0" allow="accelerometer;autoplay;clipboard-write;encrypted-media;gyroscope;picture-in-picture" allowfullscreen></iframe>
</div>
<p>Her şeyi zaten GPU güdümlü indirect draw'lardan geçiren bir motor için doğru yanıt budur. Bizimki de dahil olmak üzere çoğu tarayıcı motoru böyle bir motor değildir. CPU tarafında instance buffer'larımız, WebGL draw call'larımız var ve compute aşamamız yok. Bu yığına Hi-Z eklemek; aynı anda WebGPU'ya port etmeyi, bitki örtüsü pipeline'ını indirect draw'larla yeniden yazmayı ve depth pyramid oluşturma pass'i eklemeyi gerektirir. Fikri doğrulayan ilk kare için üç aylık iş demektir.</p>
<p>Yükseklik haritası ışını taraması CPU'da, WebGL ile ve zaten sahip olduğumuz verilerle çalışır. Dünyamızla ilgili AAA motorlarının yararlanamadığı tek bir olguyu kullanır: <strong>örtücülerimiz 1B bir yükseklik fonksiyonuyla tanımlanıyor</strong>. Bu fonksiyonu bir ışın boyunca örneklemek, iki dizi erişimi ve bir çarpma işleminden ibarettir. Hi-Z buffer'ın aynı olguyu piksel piksel keşfetmesi gerekirdi.</p>
<p>Teknik ilk olarak IEEE Visualization 2002'de &quot;Hiyerarşik Araziler için Ufuk Örtülme Ayıklaması&quot; adıyla yayımlandı (<a href="https://saksagan.ceng.metu.edu.tr/courses/ceng591/RAPORLAR/HacerYalim.pdf" target="_blank" rel="noreferrer">PDF</a>). Yirmi yıldır araç kutusunda kalmasının nedeni doğru yapıya sahip olmasıdır: arazi düzken ucuz, yalnızca gerçekten tepelerin bulunduğu yerlerde pahalı ve kolayca paralelleştirilebilir.</p>
<h2 id="cizimle-maksimum-yukseklik-piramidi" tabindex="-1">Çizimle maksimum yükseklik piramidi <a class="header-anchor" href="#cizimle-maksimum-yukseklik-piramidi" aria-label="Permalink to &quot;Çizimle maksimum yükseklik piramidi&quot;"></a></h2>
<p>Naif ışın taraması, her ışın boyunca yaklaşık 24 noktada <code>terrainHeight</code> değerini örnekler ve arazi ışını keserse erkenden sonlandırılır. Bu, binlerce ağaç için yeterlidir. Yüz binlerce çim yaprağında çöker.</p>
<p>Çözüm, her texel'in kendi kapsama alanındaki <strong>maksimum</strong> yüksekliği sakladığı bir yükseklik haritası mipmap'idir:</p>
<div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span>seviye 0 (256×256, texel başına 2.25m): 4×4 sapmalı örneğin maks. h değeri</span></span>
<span class="line"><span>seviye 1 (128×128, texel başına 4.5m):  maks(0,0), maks(1,0), maks(0,1), maks(1,1)</span></span>
<span class="line"><span>seviye 2 ( 64×64, texel başına 9.0m):  bir üst seviyede aynı indirgeme</span></span>
<span class="line"><span>...</span></span>
<span class="line"><span>seviye 8 (   1×1, texel başına 576m):  global maksimum</span></span></code></pre>
</div><p>Işın segmenti uzun ve düz olduğunda kaba bir seviyeyi örnekleyin: tek bir erişim size &quot;bu 9 metrelik karede hiçbir arazi 12 metre rakımı aşmıyor ve ışın burada 30 metrede, dolayısıyla devam et&quot; bilgisini verir. Yalnızca kaba bir texel &quot;arazi ışının üzerinde <em>olabilir</em>&quot; dediğinde bir seviye aşağı iner ve hassaslaştırırsınız. Yapının tamamı birkaç yüz KB boyutundadır ve onlarca milisaniyede oluşturulur.</p>
<p>Şematik olarak:</p>
<div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span>                                            gözden çıkan ışın</span></span>
<span class="line"><span>        göz 1.7m                          o─────────────────────►</span></span>
<span class="line"><span>              o─────────────────────────·─·─·─·─·─·──────────────</span></span>
<span class="line"><span>              │                          \                       │</span></span>
<span class="line"><span>              │   seviye 3 (dev adım)     \   seviye 0 (hassas)  │</span></span>
<span class="line"><span>              │   "8m üstü arazi yok"      \   "burada 9m tepe!" │</span></span>
<span class="line"><span>              │                              \                   │</span></span>
<span class="line"><span>        ──────┴────────────/▔▔▔\─────────────/▔▔▔▔▔\─────────────</span></span>
<span class="line"><span>                                 tepe A (8m)   tepe B (12m)</span></span>
<span class="line"><span>                                                ↑</span></span>
<span class="line"><span>                                                burada engeller</span></span></code></pre>
</div><p>A tepesinin çevresinden geçen ışın segmentinde, seviye 3 erişimi (&quot;18 metre genişliğindeki bu kutunun maksimum yüksekliği 8 metre&quot;) bize 1,7 metre rakımdaki ve birkaç metre yükselen ışının önünün açık olduğunu zaten söyler. Tek bir sorguyla 36 metrelik ilerlemeyi atlarız. B tepesi üzerinde seviye 3 &quot;buradaki maksimum 12 metre&quot; der; aşağı ineriz, seviye 0 &quot;evet, tam olarak bu texel'de 12 metre&quot; der ve instance'ı eleriz.</p>
<p>Piramit oluşturma kodu <code>height-pyramid.mjs</code>, onu kullanan ayıklama yolları ise <code>cull.mjs</code> içindedir. Her ikisini de <a href="/tr/blog/spike-source.html?spike=57-terrain-occlusion">spike kaynak tarayıcısında</a> okuyabilirsiniz.</p>
<h2 id="spike-gercekte-ne-gosteriyor" tabindex="-1">Spike gerçekte ne gösteriyor? <a class="header-anchor" href="#spike-gercekte-ne-gosteriyor" aria-label="Permalink to &quot;Spike gerçekte ne gösteriyor?&quot;"></a></h2>
<p>Yukarıdaki Spike 57'yi açın ve dört yolu deneyin:</p>
<ul>
<li><strong>T0</strong>, üretimde bugün yaptığımız şeydir. Yalnızca mesafe. C1'den (vadi tabanı) bakıldığında HUD, yaklaşık 12.000 çim yaprağının görünür olduğunu bildirir.</li>
<li><strong>T1</strong>, instance başına frustum ayıklaması ekler. Kameranın arkasında veya yanlarda kalan her şey GPU'ya ulaşmadan elendiği için görünür öğe sayısı yaklaşık yarıya düşer.</li>
<li><strong>T2</strong>, kaba kuvvet kullanan yükseklik haritası ışını taramasını ekler. C1'de sayı bir %60-80 daha azalır; çünkü alanın çoğu en yakın sırtın diğer tarafındadır. Instance başına yaklaşık 24 kez <code>terrainHeight</code> örneklediğimiz için Cull-ms sütunundaki değer yükselir.</li>
<li><strong>T3</strong>, kaba kuvvet yönteminin yerine maksimum yükseklik piramidini koyar. Görünürlük kazanımını korurken Cull-ms tekrar T1'e yakın bir seviyeye düşer. Gerçekte yayınlayacağınız yol budur.</li>
</ul>
<p>Bu örüntü, üretim motorlarında görülenlerle örtüşüyor. Acerola'nın çim render etme üzerine iki bölümlük serisi (<a href="https://www.youtube.com/watch?v=Y0Ko0kvwfgA" target="_blank" rel="noreferrer">Oyunlar Bu Kadar Çok Çimi Nasıl Render Ediyor?</a>, <a href="https://www.youtube.com/watch?v=PNvlqsXdQic" target="_blank" rel="noreferrer">Oyunumdaki Çimleri Optimize Etmek İçin Ne Yaptım?</a>), mühendislik emeğinizi shading aşamasına değil neden ayıklama aşamasına harcamanız gerektiğini anlatan YouTube'daki en anlaşılır içeriktir.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0">
<iframe src="https://www.youtube.com/embed/Y0Ko0kvwfgA" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0" allow="accelerometer;autoplay;clipboard-write;encrypted-media;gyroscope;picture-in-picture" allowfullscreen></iframe>
</div>
<h2 id="c3-kamerası-ve-tepe-ustu-basarısızlık-senaryosu" tabindex="-1">C3 kamerası ve &quot;tepe üstü&quot; başarısızlık senaryosu <a class="header-anchor" href="#c3-kamerası-ve-tepe-ustu-basarısızlık-senaryosu" aria-label="Permalink to &quot;C3 kamerası ve &quot;tepe üstü&quot; başarısızlık senaryosu&quot;"></a></h2>
<p>Spike'ın üçüncü kamera ön ayarı, kamerayı oyun alanına bakan bir tepenin üzerine yerleştirir. Ufuk ayıklamasının neredeyse hiçbir şey yapmadığı senaryo budur; çünkü kamera ile dünyanın büyük bölümü arasında arazi yoktur. HUD, T2/T3'ün görünür öğe sayısını T1'e kıyasla yalnızca %5-10 kadar azalttığını gösterir.</p>
<p>Bu bir hata değil, özelliktir. Teknik tam da durması gereken yerde çalışmayı bırakır: örtecek hiçbir şey olmadığında. Frustum ayıklaması hâlâ gerçek iş yapar, mesafe ayıklaması hâlâ bütçeyi sınırlar ve ufuk testi sorunsuzca no-op davranışına geri döner. Bunu uygularsanız no-op durumunun da ucuz olduğunu doğrulamanız gerekir. Hiçbir ışın elenmeyecek olsa bile maksimum yükseklik piramidinin önemli olmasının nedeni budur: en kaba seviye çoğu zaman &quot;hiçbir şey engellenmiyor&quot; sonucunu doğrulamaya yeter.</p>
<h2 id="sırada-neyi-yayınlayacagız" tabindex="-1">Sırada neyi yayınlayacağız? <a class="header-anchor" href="#sırada-neyi-yayınlayacagız" aria-label="Permalink to &quot;Sırada neyi yayınlayacağız?&quot;"></a></h2>
<p>Sırayla yapılması gereken üç şey var.</p>
<p>İlk olarak T1 ve T3'ü üretimdeki <code>Chunk.updateObjectVisibility</code> içine port etmek. Piramidin chunk yöneticisinde, bir üst seviyede bulunması gerekiyor; çünkü birden fazla chunk'a yayılıyor. Mevcut chunk başına batching çalışmaya devam etsin diye ayıklama <code>Chunk</code> içinde kalacak. Tahmini süre: testler dahil bir gün.
İkinci olarak, çimler hazır olduğunda aynısını onlar için de yapacağız. Mevcut prototip, 576 metrelik oyun alanına 12.000 çim yaprağı dağıtıyor; üretim sürümündeki yoğunluk bunun kabaca on katı olmalı. CPU ayıklama yolları 12.000 örneği bir milisaniyeden kısa sürede işliyor ve bunun 120.000 örnekte de geçerli kalmasını sağlayan piramit hızlandırmasıdır.</p>
<p>Üçüncü olarak, <code>THREE.WebGPURenderer</code>'a geçtiğimizde aynı döngüyü bir compute shader'a taşıyacağız. Meta veriler bir depolama tamponuna dönüşecek. Ayıklama işlemi <code>drawIndirect</code> argümanlarını yazacak. Piramit, maksimum indirgeme önceden uygulanmış bir 2D doku olarak yüklenecek. Kodun yapısı neredeyse tamamen aynı kalacak; zaten asıl amaç da bu: geçişi yeni bir algoritmaya bağlamıyoruz, hâlihazırda sahip olduğumuz bir algoritmayı daha hızlı bir çalışma ortamına taşıyoruz.</p>
<p>Guerrilla, Horizon Zero Dawn'ın prosedürel yerleştirme sistemi için bunun GPU tarafındaki sürümünü ele aldı; render işlem hattından çok veri yapıları önem taşıyor ve onlarınki de aynı yapıya sahip:</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0">
<iframe src="https://www.youtube.com/embed/ToCozpl1sYY" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0" allow="accelerometer;autoplay;clipboard-write;encrypted-media;gyroscope;picture-in-picture" allowfullscreen></iframe>
</div>
<p>Binaları ve yükseklik haritasının tanımlayamadığı yönlerde örtme yapan yoğun dekoratif nesneleri yayınladığımızda Hi-Z yine yerini hak edecek. Ancak yükseklik haritası piramidi işlem hattında kalacak, çünkü zemine yakın örnekler için Hi-Z'den kesin biçimde daha ucuzdur ve bir sırtın silüetini aşan çimler, Hi-Z'nin en kötü başa çıktığı durumlardan biridir.</p>
<h2 id="kaynaklar" tabindex="-1">Kaynaklar <a class="header-anchor" href="#kaynaklar" aria-label="Permalink to &quot;Kaynaklar&quot;"></a></h2>
<p>Önceliklendirilmiş gerekçelerin tamamı ve mimari kararlar yukarıda yer alıyor; aşağıda ise yığındaki yaklaşık görünme sıralarına göre her tekniğin temel kaynakları bulunuyor.</p>
<ul>
<li>Yalim ve Akman, <a href="https://saksagan.ceng.metu.edu.tr/courses/ceng591/RAPORLAR/HacerYalim.pdf" target="_blank" rel="noreferrer">Hiyerarşik Araziler İçin Ufuk Örtme Ayıklaması</a> (IEEE Visualization 2002, arazi ufuk ayıklamasına ilişkin özgün makale).</li>
<li>Turitzin, <a href="https://miketuritzin.com/post/hierarchical-depth-buffers/" target="_blank" rel="noreferrer">Hiyerarşik Derinlik Tamponları</a> (Hi-Z mip zincirlerinin nasıl oluşturulup sorgulandığını en açık biçimde anlatan yazı).</li>
<li>VKGuide, <a href="https://vkguide.dev/docs/gpudriven/compute_culling/" target="_blank" rel="noreferrer">Compute Tabanlı Ayıklama</a> (GPU güdümlü ayıklama işlem hattı için referans; WebGPU'ya taşıma işlemi mekaniktir).</li>
<li>Kruskonja, <a href="https://medium.com/@mil_kru/two-pass-occlusion-culling-4100edcad501" target="_blank" rel="noreferrer">İki Geçişli Örtme Ayıklaması</a> (Nanite tarzı mimarinin Epic'in sunumları dışında açıklaması).</li>
<li>Karis ve diğerleri, <a href="https://www.youtube.com/watch?v=eviSykqSUUw" target="_blank" rel="noreferrer">Nanite — Derinlemesine İnceleme (SIGGRAPH 2021)</a> (GPU güdümlü ayıklamanın AAA ölçeğinde nasıl göründüğüne ilişkin modern referans).</li>
<li>Karis, <a href="https://www.youtube.com/watch?v=NRnj_lnpORU" target="_blank" rel="noreferrer">HPG 2022 Açılış Konuşması: Nanite'a Yolculuk</a> (ayıklama aşamasının neden önemli olduğuna ilişkin daha geniş bağlam).</li>
<li>Sanders, <a href="https://www.youtube.com/watch?v=wavnKZNSYqU" target="_blank" rel="noreferrer">Teknoloji ile Sanat Arasında: Horizon Zero Dawn'ın Bitki Örtüsü</a> (AAA bitki örtüsü ayıklama yığınının uçtan uca anlatımı).</li>
<li>Guerrilla, <a href="https://www.youtube.com/watch?v=ToCozpl1sYY" target="_blank" rel="noreferrer">Horizon Zero Dawn'da GPU Tabanlı Çalışma Zamanı Prosedürel Yerleştirme</a> (örneklenmiş yerleştirme ve örnek başına görünürlük).</li>
<li>Scthe, <a href="https://github.com/Scthe/nanite-webgpu" target="_blank" rel="noreferrer">Nanite WebGPU</a> (HZB dâhil eksiksiz bir WebGPU referans uygulaması).</li>
<li>Kitware, <a href="https://www.kitware.com/webgpu-occlusion-culling-in-vtk/" target="_blank" rel="noreferrer">VTK'da WebGPU Örtme Ayıklaması</a> (bildiğim kadarıyla tarayıcı tarafındaki ilk üretim HZB'si).</li>
<li>Acerola, <a href="https://www.youtube.com/watch?v=Y0Ko0kvwfgA" target="_blank" rel="noreferrer">Oyunlar Bu Kadar Çok Çimi Nasıl Render Ediyor?</a> ve <a href="https://www.youtube.com/watch?v=PNvlqsXdQic" target="_blank" rel="noreferrer">Oyunumdaki Çimleri Optimize Etmek İçin Ne Yaptım?</a> (erişilebilir YouTube turu).</li>
<li>RasterGrid, <a href="https://www.rastergrid.com/blog/2010/10/hierarchical-z-map-based-occlusion-culling/" target="_blank" rel="noreferrer">Hi-Z Haritası Tabanlı Örtme Ayıklaması</a> (hâlâ temel kabul edilen Hi-Z başlangıç rehberi).</li>
<li>Intel, <a href="https://www.intel.com/content/www/us/en/developer/articles/technical/masked-software-occlusion-culling.html" target="_blank" rel="noreferrer">Maskeli Yazılım Örtme Ayıklaması</a> (#6'nın buna değeceğine karar verirseniz CPU rasterleştirici ailesi).</li>
</ul>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık bir dünya oluşturmak, bölüm 29: Tek kontrolcü, her beden]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-05-15-open-world-browser-part-29-pluggable-character</link>
            <guid>https://app.cinevva.com/tr/blog/2026-05-15-open-world-browser-part-29-pluggable-character</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spike 58, fizik motorunun yürüme, yüzme veya süzülme hakkında hiçbir şey bilmediği bir karakter kontrolcüsü oluşturuyor. Her davranış takılabilir bir kontrolcü; aynı motor oyuncuyu, binilebilir bir atı ve otonom bir NPC'yi yönetiyor ve tüm sistem Node üzerinde başsız çalışıyor. Spike 59, hiçbir kontrolcüye dokunmadan buna yeniden hedeflenmiş bir avatar bağlıyor; Spike 60 ise birim testi yapabileceğiniz bir klip seçicinin arkasına, hiç yeniden hedefleme gerektirmeyen bir Synty paketi bağlıyor.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-bir-dunya-olusturmak-bolum-29-tek-kontrolcu-her-beden" tabindex="-1">Tarayıcıda açık bir dünya oluşturmak, bölüm 29: Tek kontrolcü, her beden <a class="header-anchor" href="#tarayıcıda-acık-bir-dunya-olusturmak-bolum-29-tek-kontrolcu-her-beden" aria-label="Permalink to &quot;Tarayıcıda açık bir dünya oluşturmak, bölüm 29: Tek kontrolcü, her beden&quot;"></a></h1>
<p><em><a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberini</a> kullanın. Bu rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p><a href="/tr/blog/2026-05-14-open-world-browser-part-28-grass-and-occlusion.html">28. bölüm</a> çim ve örtülmeyi ele aldı. Yirmi sekiz bölüm boyunca içinde durabileceğiniz bir dünya oluşturduk: okuyabildiğiniz arazi, yüzebildiğiniz su, ufka kadar kalitesini koruyan bitki örtüsü ve değiştirdiklerinizi hatırlayan bir sunucu. Bu bölüm, tüm bunların içinde hareket eden şeyle ilgili ve aynı zamanda tüm motorun karşılığını verdiği nokta; çünkü hedef bir oyuncu kontrolcüsü değil. Hangi bedeni yönettiğini, animasyonlarının nereden geldiğini veya direksiyonda bir insanın mı yoksa yapay zekânın mı bulunduğunu önemsemeyen bir kontrolcü. Spike 58, hareketi, lokomasyon hakkında hiçbir şey bilmeyen bir fizik motorunun üzerinde takılabilir davranışlardan oluşan bir yığın olarak kuruyor, ardından üç farklı bedeni aynı motor kopyasıyla çalıştırarak mimariyi kanıtlıyor. Spike 59, tek bir satırını bile değiştirmeden bu kontrolcüye gerçek ve yeniden hedeflenmiş bir avatar bağlıyor. Spike 60 ise hiç yeniden hedefleme gerektirmeyen farklı bir animasyon paketi bağlıyor ve klip seçme mantığını gerçekten test edebileceğiniz bağımsız bir yapıya çıkarıyor.</p>
<h2 id="yurume-hakkında-hicbir-sey-bilmeyen-bir-fizik-motoru" tabindex="-1">Yürüme hakkında hiçbir şey bilmeyen bir fizik motoru <a class="header-anchor" href="#yurume-hakkında-hicbir-sey-bilmeyen-bir-fizik-motoru" aria-label="Permalink to &quot;Yürüme hakkında hiçbir şey bilmeyen bir fizik motoru&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/58-pluggable-character/" title="Spike 58 Takılabilir Karakter" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/58-pluggable-character/" target="_blank">Spike 58'i yeni bir sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=58-pluggable-character">Kaynak kodunu görüntüle</a></p>
<p>Tasarım kuralı katı ve meselenin özü de bu: kapsül motoru hiçbir lokomasyon davranışına sahip değil. Yürüme yok, koşma yok, zıplama yok, sürtünme yok, azami hız sınırı yok, hatta yerçekimi bile yok. Kinematik bir kapsülü araziye göre entegre ediyor ve bundan fazlasını yapmıyor. Yürüme, kayma, süzülme, tırmanma, yüzme, çömelme ve dayanıklılık gibi tüm lokomasyon davranışları, motora kaydedilen bağımsız bir kontrolcüde yaşıyor. Motor her karede tüm kontrolcüleri güncelliyor, her birine kontrolü isteyip istemediğini soruyor ve hızı en yüksek öncelikli talip olan kontrolcünün yazmasına izin veriyor. Yürümenin özel bir konumu yok. Yalnızca her zaman evet diyen en düşük öncelikli kontrolcü; dolayısıyla başka hiçbir şey devreye girmediğinde varsayılan davranış oluyor. Bir kontrolcü altı küçük işlevden oluşuyor: etkin olmasa bile her karede kendi iç durumunu güncelleyen bir <code>tick</code>, kare üzerinde hak iddia eden saf bir <code>wantsControl</code> koşulu, yalnızca kazananın çalıştırdığı, hızı yazan ve isterse kendi yerçekimini uygulayan bir <code>applyForces</code> ile isteğe bağlı <code>onEnter</code>, <code>onExit</code> ve <code>stateName</code>. Yüzme, kaldırma kuvveti yayı motorun ayağı zemine oturtma işlemiyle çakışmasın diye arazi işleme kontrolünü devralmak üzere <code>applyForces</code> içinden <code>ownsCollision: true</code> döndürüyor.</p>
<p>Lokomasyon olmayan şeyler bile bu sözleşmeye sızıyor ve bu da bir sonraki fikri zorunlu kıldı. Mimariyi değerli kılan parça kanallar. Daha önceki tek kanallı tasarım her şeyi aynı hakemlikten geçiriyordu; bu da bir dayanıklılık izleyicisinin veya çömelme duruşunun, yalnızca kendi hesaplamalarını yapabilmek için lokomasyonmuş gibi davranıp ardından false döndüren bir <code>wantsControl</code> hilesiyle kontrolü reddetmesi gerektiği anlamına geliyordu. Çözüm, kontrolcüleri birbirinden bağımsız olarak hakemlik yapan ve sabit bir sırayla uygulanan adlandırılmış kanallara ayırıyor: önce kaynak, ardından duruş, sonra lokomasyon. Kaynak önce çalışıyor, çünkü dayanıklılığın azalması gibi yazdığı değerleri diğerleri okuyor. Duruş ikinci sırada çalışıyor, çünkü çömelmenin kapsül yüksekliğini küçültmesi, yürüme kontrolcüsü azami hızı sınırlamak için bu değeri okumadan önce gerçekleşmek zorunda. Lokomasyon en son çalışıyor ve kare başına hız yazımının sahibi oluyor. Böylece bir dayanıklılık gözlemcisi, bir çömelme değiştiricisi ve etkin bir yüzme kontrolcüsü, her biri kendi kanalında olacak şekilde sorunsuzca birlikte var oluyor; hiçbir kontrolcünün ne olduğu konusunda yalan söylemesi gerekmiyor. Demo, tüm bunları etkin kontrolcüye göre renk değiştiren çıplak bir kapsülle görselleştiriyor; böylece hakemliğin gerçekleşmesini izleyebiliyorsunuz: yeşil yürüme, dik bir yamaçta kayma kontrolü devraldığında turuncuya; gölde yüzme kazandığında camgöbeğine; havadayken süzülmeye dokunduğunuzda krem rengine dönüyor.</p>
<h2 id="tek-motor-uc-beden" tabindex="-1">Tek motor, üç beden <a class="header-anchor" href="#tek-motor-uc-beden" aria-label="Permalink to &quot;Tek motor, üç beden&quot;"></a></h2>
<p>“Hiçbir lokomasyona sahip değil” iddiasının asıl sınavı oyuncu değil. Asıl mesele, aynı motorun hiç değiştirilmeden oyuncu olmayan bir şeyi de yönetip yönetemediği. <code>createCapsuleEngine</code>, modül düzeyinde durumu, singleton'ı ve örneğe özgü yan etkileri olmayan saf bir fabrika olduğundan spike bunu üç kez örnekliyor. Oyuncu, eksiksiz kontrolcü kümesine sahip bir örnek. Binilebilir at, yalnızca bir yürüme kontrolcüsü kaydeden ikinci bir örnek; bu da tüm fikri kelimenin tam anlamıyla hayata geçiriyor: bir bedenin hareket repertuvarı yalnızca kaydettiğiniz kontrolcülerden oluşuyor. Dolayısıyla at düz zeminde daha hızlı ve fiziksel olarak tırmanamıyor, yüzemiyor veya süzülemiyor; çünkü bu kontrolcüler hiç eklenmedi. Otonom NPC ise oyuncuyla birlikte her karede güncellenen üçüncü bir örnek. Kendi girdisini üreten bir gezinme kontrolcüsü tarafından yönetiliyor; böylece beden, klavyede kimsenin eli olmadan kendi kendine yön buluyor. Motor, bedenlerinden birinin at veya diğerinin yapay zekâ tarafından yönetildiğini asla öğrenmiyor. Hepsi, yalnızca farklı kontrolcü listelerine sahip aynı kapsül entegratörü.</p>
<p>Binme, kasıtlı olarak motorun dışında yaşayan tek parça. Kontrolü oyuncu ile at arasında değiştirmek iki motorun koordinasyonunu gerektiriyor; bir kontrolcü ise tek bir motorun içinde çalışıyor ve bu sınırın ötesini göremiyor. Bu nedenle binme mantığı ana sistem düzeyinde bulunuyor: bu karede hangi motorun ilerletileceğine karar veren, diğerini donduran, biniciyi saniyenin dörtte üçü boyunca smoothstep ile yumuşakça eyere taşıyan ve kameraya hangi bedeni izleyeceğini söyleyen küçük bir durum makinesi. Motor fabrikası bunların hiçbirinden haberdar olmuyor. Mimari tam olarak bu sınırı çiziyor ve koruyor. Tek bir bedene ait davranışlar kontrolcüdür; bedenler arasındaki koordinasyon ise ana sistemin görevidir. Bunları birbirinden ayrı tutmak, dördüncü veya kırkıncı bir bedenin hiçbir yeni maliyet getirmemesini sağlıyor.</p>
<h2 id="tarayıcı-olmadan-test-edildi" tabindex="-1">Tarayıcı olmadan test edildi <a class="header-anchor" href="#tarayıcı-olmadan-test-edildi" aria-label="Permalink to &quot;Tarayıcı olmadan test edildi&quot;"></a></h2>
<p>Motor hiçbir <code>window</code>, <code>document</code> veya Three.js nesnesine erişmediği için tüm sistem başsız çalışıyor. Spike; arazi arayüzünün sahtesini oluşturan, motoru betiklenmiş girdilerle kare kare çalıştıran ve ortaya çıkan durum üzerinde doğrulamalar yapan bir Node test düzeneğiyle geliyor. Böylece oynayarak test ederken yakalanması son derece zahmetli olan regresyonlar bunun yerine bir betikte yakalanıyor: zıplama ve yere inme geçişi, yüzmeye giriş ve çıkış eşikleri, yüzey düzleştiğinde tırmanmanın otomatik olarak temizlenmesi, dayanıklılık tükenme oranları. Aynı girdi ve zaman adımı dizisini iki kez besleyip çıktı durumlarının bayt düzeyinde aynı olduğunu kontrol etmek, motorun deterministik olduğunu sabitliyor; gelecekte ağ bağlantılı bir yapının dayanacağı özellik de bu. Test düzeneğinin yakaladığı bir regresyonu özellikle saklamakta fayda var: yürünebilir zeminden yürünemeyecek kadar dik bir yamaca geçmek eskiden kayma kontrolcüsünü etkinleştiriyor ve oyuncuyu yokuş yukarı geri sektiriyordu. Çözüm, bir alçalma kapısı oldu. Kayma yalnızca kapsül gerçekten yamacın üzerine düşüyorsa başlıyor; dolayısıyla dik bir yüzeye yatay olarak yürümek artık kaymayı tetiklemek yerine hareketi düzgünce engelliyor. “Yürünemeyen bir yamaca doğru yürümek oyuncuyu engeller” doğrulamasını yapan test de bu düzeltmenin kalıcı olmasını sağlıyor.</p>
<h2 id="kontrolculere-dokunmadan-gercek-bir-avatar-baglamak" tabindex="-1">Kontrolcülere dokunmadan gerçek bir avatar bağlamak <a class="header-anchor" href="#kontrolculere-dokunmadan-gercek-bir-avatar-baglamak" aria-label="Permalink to &quot;Kontrolcülere dokunmadan gerçek bir avatar bağlamak&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/59-pluggable-with-avatar/" title="Spike 59 Avatarla Takılabilir Sistem" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/59-pluggable-with-avatar/" target="_blank">Spike 59'u yeni bir sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=59-pluggable-with-avatar">Kaynak kodunu görüntüle</a></p>
<p>Spike 59, kontrolcü katmanının bedenden gerçekten ayrıştırılıp ayrıştırılmadığını sınayan test. Renkli kapsülü gerçek bir iskeletli karakterle değiştiriyor: Quaternius Universal Animation Library kliplerinin üzerine yeniden hedeflendiği 3MIKE FBX iskeleti. Kontrolcüler ise hiç değişmiyor. Bağlantı noktası tek bir dize. Her kontrolcü zaten <code>stateName</code> üzerinden bir durum adı bildiriyor: idle, walk, run, jump, fall, land, slide, glide, swim, swimIdle. Avatar katmanı bu adı bir takma ad tablosu üzerinden yeniden hedeflenmiş klibe eşliyor ve geçiş sırasında çapraz soldurma uyguluyor. Yürüme kontrolcüsü kendi alt durumunu yerde olma durumu, dikey hız ve yatay hıza göre dinamik olarak seçiyor. Böylece tek bir yürüme kontrolcüsü bekleme, yürüme, koşma, zıplama, düşme ve yere inme durumlarını yönetiyor; avatar da yalnızca bildirilen adı izliyor. Bu spike tek oyunculu olduğundan avatar, önceki ağ bağlantılı spike'lardaki kablo tamsayısı dolaylamasını ve çok karakterli soyutlamayı kaldırıyor ve durum adını doğrudan bir klibe eşliyor. Bunun kanıtı, kapsülden iskeletli insana yapılan tüm görsel yükseltmenin lokomasyon kodunda sıfır satırı değiştirmiş olması; takılabilir bir kontrolcünün sağlaması gereken fayda da tam olarak bu.</p>
<h2 id="yeniden-hedefleme-gerektirmeyen-bir-paket-ve-test-edilebilir-bir-secici" tabindex="-1">Yeniden hedefleme gerektirmeyen bir paket ve test edilebilir bir seçici <a class="header-anchor" href="#yeniden-hedefleme-gerektirmeyen-bir-paket-ve-test-edilebilir-bir-secici" aria-label="Permalink to &quot;Yeniden hedefleme gerektirmeyen bir paket ve test edilebilir bir seçici&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/60-polygon-animations/" title="Spike 60 Polygon Animasyonları" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/60-polygon-animations/" target="_blank">Spike 60'ı yeni bir sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=60-polygon-animations">Kaynak kodunu görüntüle</a></p>
<p>Spike 60 üçüncü bir beden olan Synty'nin POLYGON Base Locomotion paketini bağlıyor ve yükleyici neredeyse hiçbir şey yapmıyor. Her klip, aynı Synty iskeletinin gömülü bir kopyasını ve tek bir işlenmiş animasyonu taşıyan bağımsız bir FBX olarak geliyor. Karakter iskeletiyle her klip aynı kemik adlarını kullandığından klibi <code>fbx.animations[0]</code> üzerinden alıp arada herhangi bir yeniden hedefleme kütüphanesi olmadan doğrudan karakterin mixer'ında oynatabiliyorsunuz. Three.js, animasyon izi hedeflerini nesne kimliği yerine kemik adına göre çözümlüyor; dolayısıyla eşleşen iskelet için hazırlanmış Synty veya Mixamo tarzı bir paket doğrudan çalışıyor. Bu, önceki spike'taki UAL yoluyla bilinçli olarak oluşturulan karşıtlık. Kaynak klipler ve hedef iskelet farklı iskelet sistemleri için hazırlandığından UAL yolu kapsamlı bir yeniden hedefleme gerektiriyor. Aynı kontrolcü, aynı durum adı bağlantısı, arkasında ise tamamen farklı iki animasyon hattı.</p>
<p>Spike 60'ın diğer yarısı, klip seçme mantığını test edilebilir hâle getiriyor. Hangi klibin oynatılacağını seçmek yoruma açık çok sayıda eşik içeriyor ve bu mantık, test edilemediği FBXLoader ve DOM'un yanında avatar katmanının içine gömülmüştü. Spike, seçiciyi ne Three.js'e ne de window'a dokunan saf işlevlere çıkarıyor: bu işlevler yalın bir oyuncu kaydı (hız, yatay hız, bakış yönü, yerde olma durumu, zemin normali, çarpma hızı) ve klip eylemi yerine geçen bir nesne alıp bir klip takma adı dizesi döndürüyor. Bu da eşiklerin adlandırılmış ve doğrulanan sabitler olarak yaşamasını sağlıyor. Zıplama, yürüme kontrolcüsünün gerçek sprint eşiğiyle uyumlu hız aralıklarına göre yürüme, koşma ve sprint varyantlarına ayrılıyor; inişler çarpma hızına göre yumuşak, orta ve sert olarak ayrılıyor; yokuş yukarı ve yokuş aşağı klip varyantları, yaklaşık yedi derecenin altında düz klibin kullanıldığı bir ölü bölgeye sahip eğim izdüşümü nokta çarpımından etkinleşiyor; beklemeden harekete geçiş köprüsü her zaman ileri yönü seçiyor, böylece hareketsiz başlangıçta hiçbir zaman geriye doğru bir klip oynatılmıyor; durma köprüsü ise minimum döngüde kalma süresiyle sınırlandırılıyor, çünkü Synty'nin ayak fazına göre hazırlanmış durma klipleri yaklaşık bir saniyelik tasarlanmış yavaşlama içeriyor ve oyuncunun zar zor attığı bir adıma eklendiğinde gülünç görünüyor. Küçük bir durum debounce mekanizması, birkaç kare boyunca düşme durumunu geciktiriyor; böylece bir birleşim noktasında zemin temasının tek kareliğine kaybolması animasyonun titremesine neden olmuyor. Tüm bunları görüntüleme kabuğundan çıkarmak, kuralların GPU olmadan birim testine tabi tutulabilmesini sağlıyor. Bu, motorun Spike 58'de kazandığı başsız çalışma disiplininin aynısı ve tahmin ederek ayarladığınız hareket hissiyle kesin biçimde sabitleyebildiğiniz hareket hissi arasındaki farkı oluşturuyor.</p>
<h2 id="bu-bolumde-deginilen-teknoloji" tabindex="-1">Bu bölümde değinilen teknoloji <a class="header-anchor" href="#bu-bolumde-deginilen-teknoloji" aria-label="Permalink to &quot;Bu bölümde değinilen teknoloji&quot;"></a></h2>
<p><strong>Lokomasyondan bağımsız bir fizik motoru.</strong> Kapsül motoru, kinematik bir bedeni araziye göre entegre ediyor ve yürüme, koşma, zıplama, sürtünme, hız sınırı veya yerçekimi davranışlarından hiçbirine sahip değil. Her davranış; <code>tick</code>, <code>wantsControl</code>, <code>applyForces</code> ve isteğe bağlı <code>onEnter</code>/<code>onExit</code>/<code>stateName</code> sunan kayıtlı bir kontrolcü. Yürüme yalnızca her zaman evet diyen, en düşük öncelikli varsayılan davranış ve bir kontrolcü arazi işleme kontrolünü devralmak için <code>ownsCollision: true</code> döndürebiliyor (yüzme bunu yapıyor, böylece kaldırma kuvveti yayı ayağı zemine oturtma işlemiyle çakışmıyor).</p>
<p><strong>Bağımsız hakemlik kanalları.</strong> Kontrolcüler, birbirinden ayrı olarak hakemlik yapan ve sabit bir sırayla uygulanan adlandırılmış kanallara (kaynak, duruş, lokomasyon) kaydoluyor. Böylece dayanıklılık gibi gözlemciler ve çömelme gibi değiştiriciler, kontrolü alıyormuş gibi yapıp ardından reddetmek yerine etkin lokomasyonla birlikte var olabiliyor. Kaynak yazımları (dayanıklılık), duruş ve lokomasyon tarafından okunuyor; duruş yazımları (çömelme kapsülünün yüksekliği), lokomasyonun hız sınırı tarafından okunuyor; lokomasyon ise en son çalışıyor ve hız yazımının sahibi oluyor.
<strong>Tek fabrika, birçok gövde.</strong> <code>createCapsuleEngine</code>, singleton içermeyen saf bir fabrikadır; böylece aynı motor oyuncuyu, yalnızca yürüyebilen binilebilir bir atı ve yapay girdilerle kendi kendini yöneten bir NPC'yi çalıştırır. Bir gövdenin hareket repertuvarı, tam olarak kayıtlı kontrolcü kümesinden oluşur; dolayısıyla at tırmanamaz veya yüzemez, çünkü bu kontrolcüler hiç eklenmemiştir. Binme mekaniği bir kontrolcüde değil, ana uygulama katmanında bulunur; çünkü birbirinin iç durumunu göremeyen iki motoru koordine eder. Bkz. <a href="/tr/guides/landscape-generation-browser.html#gpu-driven-lod-with-webgpu">GPU güdümlü LOD</a>.</p>
<p><strong>Başsız, deterministik testler.</strong> Motor <code>window</code>, <code>document</code> veya Three.js'e dokunmaz; böylece bir Node test düzeneği onu kare kare çalıştırarak zıplama ve yere iniş, yüzme eşikleri, tırmanmanın otomatik olarak sonlandırılması ve dayanıklılık tüketimi hakkında doğrulamalar yapar. Aynı girdiyi iki kez yeniden oynatıp çıktının aynı olduğunu kontrol etmek determinizmi kanıtlar. Ayrıca bir regresyon testi, dik bir yüzeye doğru yatay yürüyüşün oyuncuyu geriye kaydırmasını önleyen alçalma geçidini sabitler.</p>
<p><strong>Test edilebilir bir seçiciye sahip, gövdeden bağımsız avatar bağlama.</strong> Kontrolcüler bir durum adı dizesi bildirir ve görsel katman bunu bir kliple eşler; böylece kapsülü yeniden hedeflenmiş bir 3MIKE + UAL avatarıyla değiştirmek, hareket kodunda hiçbir değişiklik gerektirmez. Synty POLYGON klipleri rig ile aynı kemik adlarını paylaşır ve UAL yolundaki ağır yeniden hedefleme işleminden farklı olarak yeniden hedefleme olmadan oynatılır (Three.js, izleri kemik adına göre bağlar). Klip seçici; zıplama hızı aralıkları, iniş şiddeti, eğim izdüşümü varyantları, her zaman ileri yönlü bir boşta bekleme geçişi, durma geçişi için minimum süre koruması ve düşme durumu debounce mekanizmasına yönelik adlandırılmış sabitler içeren saf fonksiyonlara ayrılmıştır. Böylece hareket hissi tahmin edilmek yerine birim testleriyle doğrulanabilir.</p>
<hr>
<p>30 bölümün 29. bölümü.
Önceki: <a href="/tr/blog/2026-05-14-open-world-browser-part-28-grass-and-occlusion.html">Bölüm 28 - Ufka uzanan çimler ve kendini gizleyen zemin</a>
Sonraki: <a href="/tr/blog/2026-06-04-open-world-browser-part-30-collision-aware-camera.html">Bölüm 30 - Duvarlara saygı duyan bir kamera</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya inşa etmek, bölüm 28: Ufka uzanan çimler ve kendini gizleyen zemin]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-05-14-open-world-browser-part-28-grass-and-occlusion</link>
            <guid>https://app.cinevva.com/tr/blog/2026-05-14-open-world-browser-part-28-grass-and-occlusion</guid>
            <pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spike 56, tek bir compute çekirdeği ve çapraz dörtgen tekniğiyle yarım milyon çim kümesini yeşil konfetiler yerine bir tarla gibi gösteriyor. Spike 57, bir tepenin gizlediği öğeleri ayıklamanın dört yolunu karşılaştırıyor ve hızlandırılmış yöntemin geometrik olarak da doğru yöntem olduğunu ortaya koyuyor.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-insa-etmek-bolum-28-ufka-uzanan-cimler-ve-kendini-gizleyen-zemin" tabindex="-1">Tarayıcıda açık dünya inşa etmek, bölüm 28: Ufka uzanan çimler ve kendini gizleyen zemin <a class="header-anchor" href="#tarayıcıda-acık-dunya-insa-etmek-bolum-28-ufka-uzanan-cimler-ve-kendini-gizleyen-zemin" aria-label="Permalink to &quot;Tarayıcıda açık dünya inşa etmek, bölüm 28: Ufka uzanan çimler ve kendini gizleyen zemin&quot;"></a></h1>
<p><em>Yazan: <a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p><a href="/tr/blog/2026-05-13-open-world-browser-part-27-island-and-terrain.html">27. Bölüm</a> adayı oluşturdu ve ona döşeme gibi görünmeyen bir zemin kazandırdı. Bu bölüm, araziyi boş değil de yaşamla dolu hissettiren iki şeyi ele alıyor. Spike 56, dokulu bir yamacı içinde yürümek isteyeceğiniz bir yere dönüştüren yüzey ayrıntısı olan çimlere odaklanıyor; buradaki sorun, çim alanını dağınık çizgiler yerine gerçekten bir tarla gibi göstermek. Spike 57 ise daha fazla çizmenin tam tersini ele alıyor: Bir tepenin zaten gizlediği şeyleri çizmemek. İlginç sonuçsa bunu test etmenin hızlı yolunun aynı zamanda doğru yol olduğunun ortaya çıkması.</p>
<h2 id="konfeti-degil-tarla-gibi-gorunen-cimler" tabindex="-1">Konfeti değil, tarla gibi görünen çimler <a class="header-anchor" href="#konfeti-degil-tarla-gibi-gorunen-cimler" aria-label="Permalink to &quot;Konfeti değil, tarla gibi görünen çimler&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/56-grass/" title="Spike 56 Çimler" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/56-grass/" target="_blank">Spike 56'yı yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=56-grass">Kaynak kodunu görüntüle</a></p>
<p>Temel karar geometrik. Tek bir ince ve uca doğru daralan çim bıçağı, çoğu kamera açısından piksel altı boyutta kalıyor; dolayısıyla yarım milyon düz bıçak, bir tarla yerine seyrek yeşil konfetiler gibi görünüyor. Çözüm, çapraz dörtgenlerden oluşan bir küme: Yerel yukarı eksenin etrafında birbirinden altmış derece farklı açılara döndürülmüş üç daralan dörtgen. Böylece her bakış yönünde en az bir dörtgen kameraya neredeyse dik duruyor ve her örnek, ekranda yaklaşık üç çim bıçağı genişliğinde gerçek alan kaplıyor. Yeşil çizgiler görmekle çim görmek arasındaki farkı yaratan da bu.</p>
<p>Bir WebGPU compute çekirdeği, başlangıçta her kümeyi bir kez yerleştiriyor. Örnek indeksini birbiriyle korelasyonsuz beş rastgele akışa hash'liyor, alan içinde bir XZ konumu seçiyor, CPU'daki zemin örgüsünün kullandığı aynı FBM'den zemin yüksekliğini örnekliyor (değerlerin birebir eşleşmesi ve bıçakların yüzeyin üzerinde havada durmak yerine yüzeye oturması için işareti koruyan mod kullanan bir TSL uyarlaması), merkezi fark yöntemiyle bir normal hesaplıyor ve her küme için genişlik, yükseklik ve renk tonu belirliyor. Render tarafında, örnek matrisini tamamen atlayıp doğrudan clip space'e yazan bir TSL vertex grafiği bulunuyor: Birim çapraz dörtgeni ölçekliyor, Rodrigues formülüyle yerel yukarı yönünü zemin normaline döndürüyor ve küme konumuna taşıyor. Mesafe LOD'u, bir ayıklama geçişine gerek kalmadan elde ediliyor; çünkü vertex grafiği kümenin yüksekliğini <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="38.925ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 17204.8 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(722.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(1722.4,0)"><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" style="stroke-width: 3;"/><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(394,0)" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(1227,0)" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(1727,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(2227,0)" style="stroke-width: 3;"/><path data-c="68" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 124T102 167T103 217T103 272T103 329Q103 366 103 407T103 482T102 542T102 586T102 603Q99 622 88 628T43 637H25V660Q25 683 27 683L37 684Q47 685 66 686T103 688Q120 689 140 690T170 693T181 694H184V367Q244 442 328 442Q451 442 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(2616,0)" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(3172,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(3566,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(3955,0)" style="stroke-width: 3;"/><path data-c="70" d="M36 -148H50Q89 -148 97 -134V-126Q97 -119 97 -107T97 -77T98 -38T98 6T98 55T98 106Q98 140 98 177T98 243T98 296T97 335T97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 61 434T98 436Q115 437 135 438T165 441T176 442H179V416L180 390L188 397Q247 441 326 441Q407 441 464 377T522 216Q522 115 457 52T310 -11Q242 -11 190 33L182 40V-45V-101Q182 -128 184 -134T195 -145Q216 -148 244 -148H260V-194H252L228 -193Q205 -192 178 -192T140 -191Q37 -191 28 -194H20V-148H36ZM424 218Q424 292 390 347T305 402Q234 402 182 337V98Q222 26 294 26Q345 26 384 80T424 218Z" transform="translate(4399,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(6677.4,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(7066.4,0)"><path data-c="66" d="M273 0Q255 3 146 3Q43 3 34 0H26V46H42Q70 46 91 49Q99 52 103 60Q104 62 104 224V385H33V431H104V497L105 564L107 574Q126 639 171 668T266 704Q267 704 275 704T289 705Q330 702 351 679T372 627Q372 604 358 590T321 576T284 590T270 627Q270 647 288 667H284Q280 668 273 668Q245 668 223 647T189 592Q183 572 182 497V431H293V385H185V225Q185 63 186 61T189 57T194 54T199 51T206 49T213 48T222 47T231 47T241 46T251 46H282V0H273Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(306,0)" style="stroke-width: 3;"/><path data-c="64" d="M376 495Q376 511 376 535T377 568Q377 613 367 624T316 637H298V660Q298 683 300 683L310 684Q320 685 339 686T376 688Q393 689 413 690T443 693T454 694H457V390Q457 84 458 81Q461 61 472 55T517 46H535V0Q533 0 459 -5T380 -11H373V44L365 37Q307 -11 235 -11Q158 -11 96 50T34 215Q34 315 97 378T244 442Q319 442 376 393V495ZM373 342Q328 405 260 405Q211 405 173 369Q146 341 139 305T131 211Q131 155 138 120T173 59Q203 26 251 26Q322 26 373 103V342Z" transform="translate(806,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(1362,0)" style="stroke-width: 3;"/><path data-c="4E" d="M42 46Q74 48 94 56T118 69T128 86V634H124Q114 637 52 637H25V683H232L235 680Q237 679 322 554T493 303L578 178V598Q572 608 568 613T544 627T492 637H475V683H483Q498 680 600 680Q706 680 715 683H724V637H707Q634 633 622 598L621 302V6L614 0H600Q585 0 582 3T481 150T282 443T171 605V345L172 86Q183 50 257 46H274V0H265Q250 3 150 3Q48 3 33 0H25V46H42Z" transform="translate(1806,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(2556,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(3000,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(3500,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(10958.4,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(11403.1,0)"><path data-c="66" d="M273 0Q255 3 146 3Q43 3 34 0H26V46H42Q70 46 91 49Q99 52 103 60Q104 62 104 224V385H33V431H104V497L105 564L107 574Q126 639 171 668T266 704Q267 704 275 704T289 705Q330 702 351 679T372 627Q372 604 358 590T321 576T284 590T270 627Q270 647 288 667H284Q280 668 273 668Q245 668 223 647T189 592Q183 572 182 497V431H293V385H185V225Q185 63 186 61T189 57T194 54T199 51T206 49T213 48T222 47T231 47T241 46T251 46H282V0H273Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(306,0)" style="stroke-width: 3;"/><path data-c="64" d="M376 495Q376 511 376 535T377 568Q377 613 367 624T316 637H298V660Q298 683 300 683L310 684Q320 685 339 686T376 688Q393 689 413 690T443 693T454 694H457V390Q457 84 458 81Q461 61 472 55T517 46H535V0Q533 0 459 -5T380 -11H373V44L365 37Q307 -11 235 -11Q158 -11 96 50T34 215Q34 315 97 378T244 442Q319 442 376 393V495ZM373 342Q328 405 260 405Q211 405 173 369Q146 341 139 305T131 211Q131 155 138 120T173 59Q203 26 251 26Q322 26 373 103V342Z" transform="translate(806,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(1362,0)" style="stroke-width: 3;"/><path data-c="46" d="M128 619Q121 626 117 628T101 631T58 634H25V680H582V676Q584 670 596 560T610 444V440H570V444Q563 493 561 501Q555 538 543 563T516 601T477 622T431 631T374 633H334H286Q252 633 244 631T233 621Q232 619 232 490V363H284Q287 363 303 363T327 364T349 367T372 373T389 385Q407 403 410 459V480H450V200H410V221Q407 276 389 296Q381 303 371 307T348 313T327 316T303 317T284 317H232V189L233 61Q240 54 245 52T270 48T333 46H360V0H348Q324 3 182 3Q51 3 36 0H25V46H58Q100 47 109 49T128 61V619Z" transform="translate(1806,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(2459,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(2959,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(14754.1,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(15198.8,0)"><path data-c="64" d="M376 495Q376 511 376 535T377 568Q377 613 367 624T316 637H298V660Q298 683 300 683L310 684Q320 685 339 686T376 688Q393 689 413 690T443 693T454 694H457V390Q457 84 458 81Q461 61 472 55T517 46H535V0Q533 0 459 -5T380 -11H373V44L365 37Q307 -11 235 -11Q158 -11 96 50T34 215Q34 315 97 378T244 442Q319 442 376 393V495ZM373 342Q328 405 260 405Q211 405 173 369Q146 341 139 305T131 211Q131 155 138 120T173 59Q203 26 251 26Q322 26 373 103V342Z" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(556,0)" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(834,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(1228,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(16815.8,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>1</mn><mo>−</mo><mtext>smoothstep</mtext><mo stretchy="false">(</mo><mtext>fadeNear</mtext><mo>,</mo><mtext>fadeFar</mtext><mo>,</mo><mtext>dist</mtext><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container> ile çarpıyor. Böylece uzaktaki kümeler sıfır yüksekliğe kadar düzleşiyor ve fill maliyeti oluşturmamaya başlıyor. Rüzgâr, kümenin dünya XZ konumu ile zaman üzerinde hesaplanan iki oktav sinüs ve kosinüsten oluşuyor; yatay olarak uygulanıyor ve yükseklik oranıyla sınırlandırılıyor. Böylece taban sabit kalırken uçlar hareket ediyor. Kamerayı hesaba katan çok hafif bir eğim de her kümeyi izleyiciye doğru yatırarak düz kartlar gibi görünmek yerine perspektifte açılmalarını sağlıyor.</p>
<p>Renk tarifi, NedMakesGames'in Breath of the Wild URP shader'ından alındı: Çim bıçağı rengi, yükseklik oranı boyunca kök tonundan uç tonuna lerp edilen düz gölgelendirme kullanıyor; kök ve uç tonlarının kendileri de küme başına renk tonu değerine göre iki palet arasında lerp ediliyor. Bu, gerçek bir BotW çim alanındaki benekli iki tonlu görünümü sağlıyor. Stilize görünümde çapraz dörtgenlerin ayrı ayrı normalleri tek tek gölgelendirmek için fazla gürültülü olduğundan diffuse, ortam ışığı alt sınırıyla birlikte zemin normalinin güneşe göre yönünü kullanıyor. Tüm alan, bütünüyle GPU üzerinde yerleştirilip canlandırılan tek bir draw çağrısıyla çiziliyor.</p>
<h2 id="bir-tepenin-gizledigi-ogeleri-ayıklamanın-dort-yolu" tabindex="-1">Bir tepenin gizlediği öğeleri ayıklamanın dört yolu <a class="header-anchor" href="#bir-tepenin-gizledigi-ogeleri-ayıklamanın-dort-yolu" aria-label="Permalink to &quot;Bir tepenin gizlediği öğeleri ayıklamanın dört yolu&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/57-terrain-occlusion/" title="Spike 57 Arazi Örtülmesi" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/57-terrain-occlusion/" target="_blank">Spike 57'yi yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=57-terrain-occlusion">Kaynak kodunu görüntüle</a></p>
<p>Spike 57, prodüksiyon istemcisinin stream ettiği aynı prosedürel dünya üzerinde dört ayıklama yöntemini karşılaştırıyor; tepelerin bitki örtüsünü gerçekten kapatabilmesi için dünya dikey eksende 1,8 kat ölçeklenmiş. T0 yalnızca mesafeyi kullanıyor ve yayınlanan sürümdeki chunk görünürlüğünün hâlihazırda yaptığı işle eşleşiyor. T1, düşük maliyetle en büyük kazancı sağlayan frustum ayıklamasını ekleyerek görüş konisinin dışındaki her şeyi eliyor. T2, araziyi hesaba katan bir ufuk testi ekliyor: Gözden her örneğe bir ışın ilerletiyor ve yolun herhangi bir noktasında heightmap ışının üzerine çıkarsa örneği eliyor. Böylece bir sırtın arkasındaki ağaç, frustum içinde olsa bile ayıklanıyor. T3 aynı ufuk testini koruyor ancak maksimum yükseklik piramidiyle hızlandırıyor. T4 ise mesafe, frustum ve ufuk testlerinin tamamını, bitki örtüsü materyalinin gizli vertex'leri daraltmak için okuduğu örnek başına görünürlük ölçeğini yazan bir TSL compute çekirdeğine taşıyor. İki karelik görünür kalma sayacı, kamera hafifçe oynadığında bir örnekleme noktasının texel'ın hemen içine veya dışına düşmesinden kaynaklanan tek karelik titremeyi yumuşatıyor. Bu süre özellikle kısa tutuluyor; çünkü daha uzun süreler algoritmik hataları düzeltmek yerine gizliyor.</p>
<p>Spike'ın asıl değerini ortaya koyduğu yer piramit ve buradaki ders, testi ekranda gerçekten görünen şeyle eşleştirmekle ilgili. Render edilen arazi, vertex'leri sabit iki metrelik bir ızgara üzerinde bulunan üçgen örgüden oluşuyor ve rasterizer vertex'ler arasında doğrusal enterpolasyon yapıyor. Dolayısıyla herhangi bir dikdörtgen içindeki gerçek render yüksekliği, aradaki sürekli gürültü tepesinin değil, o dikdörtgen içindeki vertex'lerin maksimumu oluyor. Örtülme piramidi gürültüyü daha sık bir ızgarada örneklerse örgünün hiç göstermediği hayali tepeler buluyor ve kameranın açıkça ötesini görebildiği ışınları engellemeye başlıyor. Bu nedenle piramidin taban texel'ları tam olarak vertex ızgarasına oturuyor; her biri dört köşe vertex'inin maksimumunu saklıyor ve üst seviyeler standart 2x2 maksimum indirgemelerini kullanıyor. Bu da piramidi render edilen örgü açısından kesin hâle getiriyor. Kod, her ışın adımındaki test için piramidi sorgulamak yerine örgüyü bilineer enterpolasyonla noktasal olarak örnekliyor. Çünkü texel altı bir AABB sorgusu tüm texel'ın maksimumunu döndürerek dik sırtlarda yüksekliği birkaç metre artırıyor; bu da görünür nesneleri gizleyecek aşırı örtülmenin ta kendisi.</p>
<p>Şaşırtıcı sonuç, kaba kuvvet referansı olan T2'nin hatalı yöntem olması. T2, sürekli gürültüyü doğrudan noktasal olarak örneklediği için örgü vertex'leri arasında kalan ve render edilmeyen tepeleri yakalıyor; dolayısıyla biraz fazla örtülme uygulayıp oyuncunun gerçekte görebildiği bitki örtüsünü gizliyor. Piramit yöntemi, chunk düzeyindeki testlerde kullanılan <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="8.764ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 3873.7 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D442" d="M740 435Q740 320 676 213T511 42T304 -22Q207 -22 138 35T51 201Q50 209 50 244Q50 346 98 438T227 601Q351 704 476 704Q514 704 524 703Q621 689 680 617T740 435ZM637 476Q637 565 591 615T476 665Q396 665 322 605Q242 542 200 428T157 216Q157 126 200 73T314 19Q404 19 485 98T608 313Q637 408 637 476Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(763,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1152,0)"><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(278,0)" style="stroke-width: 3;"/><path data-c="67" d="M329 409Q373 453 429 453Q459 453 472 434T485 396Q485 382 476 371T449 360Q416 360 412 390Q410 404 415 411Q415 412 416 414V415Q388 412 363 393Q355 388 355 386Q355 385 359 381T368 369T379 351T388 325T392 292Q392 230 343 187T222 143Q172 143 123 171Q112 153 112 133Q112 98 138 81Q147 75 155 75T227 73Q311 72 335 67Q396 58 431 26Q470 -13 470 -72Q470 -139 392 -175Q332 -206 250 -206Q167 -206 107 -175Q29 -140 29 -75Q29 -39 50 -15T92 18L103 24Q67 55 67 108Q67 155 96 193Q52 237 52 292Q52 355 102 398T223 442Q274 442 318 416L329 409ZM299 343Q294 371 273 387T221 404Q192 404 171 388T145 343Q142 326 142 292Q142 248 149 227T179 192Q196 182 222 182Q244 182 260 189T283 207T294 227T299 242Q302 258 302 292T299 343ZM403 -75Q403 -50 389 -34T348 -11T299 -2T245 0H218Q151 0 138 -6Q118 -15 107 -34T95 -74Q95 -84 101 -97T122 -127T170 -155T250 -167Q319 -167 361 -139T403 -75Z" transform="translate(778,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2430,0)"><path data-c="2061" d="" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(2596.7,0)"><path data-c="1D441" d="M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(3484.7,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>O</mi><mo stretchy="false">(</mo><mi>log</mi><mo data-mjx-texclass="NONE">⁡</mo><mi>N</mi><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container> AABB indirgemesi sayesinde hem daha hızlı hem de geometrik olarak daha doğru; çünkü yalnızca örgünün gerçekten gösterdiği yükseklikleri döndürebiliyor. Spike'ın vermek istediği mesaj tam olarak bu: Hızlandırılmış yapı, hız uğruna kabul edilen bir kalite ödünü değil; gerçeklikle eşleşen sürüm. Chunk ayıklaması, her chunk için beş noktalı bir test çalıştırıyor (chunk'ın maksimum yüksekliğinde dört üst köşe ve merkez) ve chunk'ın kendini asla örtmemesi için kendi kapladığı alanı örtücü kümesinden çıkarıyor. Önerilen prodüksiyon yöntemi T4: Renderer zaten WebGPU'ya geçtiği için örnek metadata'sını ve yükseklik alanını storage buffer'lara aktarıp aynı döngüyü indirect draw kullanan bir compute shader'da çalıştırmak.</p>
<h2 id="bu-bolumde-kullanılan-teknolojiler" tabindex="-1">Bu bölümde kullanılan teknolojiler <a class="header-anchor" href="#bu-bolumde-kullanılan-teknolojiler" aria-label="Permalink to &quot;Bu bölümde kullanılan teknolojiler&quot;"></a></h2>
<p><strong>Çapraz dörtgenli GPU çimleri.</strong> Her kümede birbirinden altmış derece farklı açılara döndürülmüş üç daralan dörtgen, her açıdan bakıldığında bir dörtgenin neredeyse dik görünmesini garanti ediyor. Böylece yarım milyon örnek, piksel altı konfetiler yerine bir tarla gibi algılanıyor. Bir compute çekirdeği her kümeyi yerleştiriyor (CPU örgüsüyle aynı işareti koruyan mod kullanılarak örneklenen FBM zemin yüksekliği, merkezi fark normali, küme başına boyut ve renk tonu); bir TSL vertex grafiği ise ölçeklemek, Rodrigues yöntemiyle normale döndürmek, taşımak ve yüksekliğe bağlı rüzgâr uygulamak için örnek matrisini atlıyor. Mesafe LOD'u ücretsiz: Kümeler <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="38.925ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 17204.8 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(722.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(1722.4,0)"><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" style="stroke-width: 3;"/><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(394,0)" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(1227,0)" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(1727,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(2227,0)" style="stroke-width: 3;"/><path data-c="68" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 124T102 167T103 217T103 272T103 329Q103 366 103 407T103 482T102 542T102 586T102 603Q99 622 88 628T43 637H25V660Q25 683 27 683L37 684Q47 685 66 686T103 688Q120 689 140 690T170 693T181 694H184V367Q244 442 328 442Q451 442 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(2616,0)" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(3172,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(3566,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(3955,0)" style="stroke-width: 3;"/><path data-c="70" d="M36 -148H50Q89 -148 97 -134V-126Q97 -119 97 -107T97 -77T98 -38T98 6T98 55T98 106Q98 140 98 177T98 243T98 296T97 335T97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 61 434T98 436Q115 437 135 438T165 441T176 442H179V416L180 390L188 397Q247 441 326 441Q407 441 464 377T522 216Q522 115 457 52T310 -11Q242 -11 190 33L182 40V-45V-101Q182 -128 184 -134T195 -145Q216 -148 244 -148H260V-194H252L228 -193Q205 -192 178 -192T140 -191Q37 -191 28 -194H20V-148H36ZM424 218Q424 292 390 347T305 402Q234 402 182 337V98Q222 26 294 26Q345 26 384 80T424 218Z" transform="translate(4399,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(6677.4,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(7066.4,0)"><path data-c="66" d="M273 0Q255 3 146 3Q43 3 34 0H26V46H42Q70 46 91 49Q99 52 103 60Q104 62 104 224V385H33V431H104V497L105 564L107 574Q126 639 171 668T266 704Q267 704 275 704T289 705Q330 702 351 679T372 627Q372 604 358 590T321 576T284 590T270 627Q270 647 288 667H284Q280 668 273 668Q245 668 223 647T189 592Q183 572 182 497V431H293V385H185V225Q185 63 186 61T189 57T194 54T199 51T206 49T213 48T222 47T231 47T241 46T251 46H282V0H273Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(306,0)" style="stroke-width: 3;"/><path data-c="64" d="M376 495Q376 511 376 535T377 568Q377 613 367 624T316 637H298V660Q298 683 300 683L310 684Q320 685 339 686T376 688Q393 689 413 690T443 693T454 694H457V390Q457 84 458 81Q461 61 472 55T517 46H535V0Q533 0 459 -5T380 -11H373V44L365 37Q307 -11 235 -11Q158 -11 96 50T34 215Q34 315 97 378T244 442Q319 442 376 393V495ZM373 342Q328 405 260 405Q211 405 173 369Q146 341 139 305T131 211Q131 155 138 120T173 59Q203 26 251 26Q322 26 373 103V342Z" transform="translate(806,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(1362,0)" style="stroke-width: 3;"/><path data-c="4E" d="M42 46Q74 48 94 56T118 69T128 86V634H124Q114 637 52 637H25V683H232L235 680Q237 679 322 554T493 303L578 178V598Q572 608 568 613T544 627T492 637H475V683H483Q498 680 600 680Q706 680 715 683H724V637H707Q634 633 622 598L621 302V6L614 0H600Q585 0 582 3T481 150T282 443T171 605V345L172 86Q183 50 257 46H274V0H265Q250 3 150 3Q48 3 33 0H25V46H42Z" transform="translate(1806,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(2556,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(3000,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(3500,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(10958.4,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(11403.1,0)"><path data-c="66" d="M273 0Q255 3 146 3Q43 3 34 0H26V46H42Q70 46 91 49Q99 52 103 60Q104 62 104 224V385H33V431H104V497L105 564L107 574Q126 639 171 668T266 704Q267 704 275 704T289 705Q330 702 351 679T372 627Q372 604 358 590T321 576T284 590T270 627Q270 647 288 667H284Q280 668 273 668Q245 668 223 647T189 592Q183 572 182 497V431H293V385H185V225Q185 63 186 61T189 57T194 54T199 51T206 49T213 48T222 47T231 47T241 46T251 46H282V0H273Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(306,0)" style="stroke-width: 3;"/><path data-c="64" d="M376 495Q376 511 376 535T377 568Q377 613 367 624T316 637H298V660Q298 683 300 683L310 684Q320 685 339 686T376 688Q393 689 413 690T443 693T454 694H457V390Q457 84 458 81Q461 61 472 55T517 46H535V0Q533 0 459 -5T380 -11H373V44L365 37Q307 -11 235 -11Q158 -11 96 50T34 215Q34 315 97 378T244 442Q319 442 376 393V495ZM373 342Q328 405 260 405Q211 405 173 369Q146 341 139 305T131 211Q131 155 138 120T173 59Q203 26 251 26Q322 26 373 103V342Z" transform="translate(806,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(1362,0)" style="stroke-width: 3;"/><path data-c="46" d="M128 619Q121 626 117 628T101 631T58 634H25V680H582V676Q584 670 596 560T610 444V440H570V444Q563 493 561 501Q555 538 543 563T516 601T477 622T431 631T374 633H334H286Q252 633 244 631T233 621Q232 619 232 490V363H284Q287 363 303 363T327 364T349 367T372 373T389 385Q407 403 410 459V480H450V200H410V221Q407 276 389 296Q381 303 371 307T348 313T327 316T303 317T284 317H232V189L233 61Q240 54 245 52T270 48T333 46H360V0H348Q324 3 182 3Q51 3 36 0H25V46H58Q100 47 109 49T128 61V619Z" transform="translate(1806,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(2459,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(2959,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(14754.1,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(15198.8,0)"><path data-c="64" d="M376 495Q376 511 376 535T377 568Q377 613 367 624T316 637H298V660Q298 683 300 683L310 684Q320 685 339 686T376 688Q393 689 413 690T443 693T454 694H457V390Q457 84 458 81Q461 61 472 55T517 46H535V0Q533 0 459 -5T380 -11H373V44L365 37Q307 -11 235 -11Q158 -11 96 50T34 215Q34 315 97 378T244 442Q319 442 376 393V495ZM373 342Q328 405 260 405Q211 405 173 369Q146 341 139 305T131 211Q131 155 138 120T173 59Q203 26 251 26Q322 26 373 103V342Z" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(556,0)" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(834,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(1228,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(16815.8,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>1</mn><mo>−</mo><mtext>smoothstep</mtext><mo stretchy="false">(</mo><mtext>fadeNear</mtext><mo>,</mo><mtext>fadeFar</mtext><mo>,</mo><mtext>dist</mtext><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container> ile sıfır yüksekliğe daralıyor. Renk, NedMakesGames'in BotW tarifini izliyor: renk tonları karıştırılmış iki palet üzerinde kökten uca uzanan bir gradyan. Bkz. <a href="/tr/guides/landscape-generation-browser.html#gpu-driven-lod-with-webgpu">GPU güdümlü LOD</a>.</p>
<p><strong>Arazi ufku örtülme ayıklaması.</strong> Prodüksiyon dünyasında dört yöntem karşılaştırıldı: mesafe; buna eklenen frustum; sırtın arkasındaki örnekleri eleyen bir heightmap ışın testi; bunu hızlandıran maksimum yükseklik piramidi ve bir TSL compute uyarlaması. Piramit, örgünün tessellation için kullandığı iki metrelik vertex ızgarasının tam üzerinde örnekleme yapıyor (taban texel'ı = dört köşe vertex'inin maksimumu, üst seviyelerde 2x2 maksimum indirgeme). Böylece yalnızca rasterizer'ın gerçekten gösterdiği yükseklikleri döndürüyor.</p>
<p><strong>Ödün vermeden hem hızlandırılmış hem doğru.</strong> Sürekli gürültünün noktasal olarak örneklenmesi (kaba kuvvet T2 yöntemi), örgü vertex'leri arasında kalan ve asla render edilmeyen tepeleri bulup görünür bitki örtüsünü gereğinden fazla örtüyor. Vertex ızgaralı piramit hem daha hızlı (<mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="8.764ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 3873.7 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D442" d="M740 435Q740 320 676 213T511 42T304 -22Q207 -22 138 35T51 201Q50 209 50 244Q50 346 98 438T227 601Q351 704 476 704Q514 704 524 703Q621 689 680 617T740 435ZM637 476Q637 565 591 615T476 665Q396 665 322 605Q242 542 200 428T157 216Q157 126 200 73T314 19Q404 19 485 98T608 313Q637 408 637 476Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(763,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1152,0)"><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(278,0)" style="stroke-width: 3;"/><path data-c="67" d="M329 409Q373 453 429 453Q459 453 472 434T485 396Q485 382 476 371T449 360Q416 360 412 390Q410 404 415 411Q415 412 416 414V415Q388 412 363 393Q355 388 355 386Q355 385 359 381T368 369T379 351T388 325T392 292Q392 230 343 187T222 143Q172 143 123 171Q112 153 112 133Q112 98 138 81Q147 75 155 75T227 73Q311 72 335 67Q396 58 431 26Q470 -13 470 -72Q470 -139 392 -175Q332 -206 250 -206Q167 -206 107 -175Q29 -140 29 -75Q29 -39 50 -15T92 18L103 24Q67 55 67 108Q67 155 96 193Q52 237 52 292Q52 355 102 398T223 442Q274 442 318 416L329 409ZM299 343Q294 371 273 387T221 404Q192 404 171 388T145 343Q142 326 142 292Q142 248 149 227T179 192Q196 182 222 182Q244 182 260 189T283 207T294 227T299 242Q302 258 302 292T299 343ZM403 -75Q403 -50 389 -34T348 -11T299 -2T245 0H218Q151 0 138 -6Q118 -15 107 -34T95 -74Q95 -84 101 -97T122 -127T170 -155T250 -167Q319 -167 361 -139T403 -75Z" transform="translate(778,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2430,0)"><path data-c="2061" d="" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(2596.7,0)"><path data-c="1D441" d="M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(3484.7,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>O</mi><mo stretchy="false">(</mo><mi>log</mi><mo data-mjx-texclass="NONE">⁡</mo><mi>N</mi><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container> AABB indirgemesi) hem de geometrik olarak kesin. Bu nedenle her ışın adımındaki testler, dik sırtlarda yüksekliği metrelerce artırabilecek texel başına piramit maksimumunu sorgulamak yerine örgüyü bilineer olarak örnekliyor. Chunk ayıklaması beş noktalı bir test kullanıyor ve her chunk'ın kendi kapladığı alanı hariç tutarak kendini örtmesini önlüyor. Prodüksiyon yöntemi, metadata ile yükseklik alanını storage buffer'lara aktararak indirect draw kullanan bir compute shader ayıklaması gerçekleştiriyor.</p>
<hr>
<p>29 bölümün 28'incisi.
Önceki: <a href="/tr/blog/2026-05-13-open-world-browser-part-27-island-and-terrain.html">27. Bölüm - Gürültüden bir ada, zemine benzeyen bir zemin</a>
Sonraki: <a href="/tr/blog/2026-05-15-open-world-browser-part-29-pluggable-character.html">29. Bölüm - Tek kontrolcü, her beden</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya inşa etmek, bölüm 27: Gürültüden bir ada, zemine benzeyen zemin]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-05-13-open-world-browser-part-27-island-and-terrain</link>
            <guid>https://app.cinevva.com/tr/blog/2026-05-13-open-world-browser-part-27-island-and-terrain</guid>
            <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spike 54, yalnızca gürültüden inandırıcı bir ada oluşturuyor: radyal düşüşle şekillendirilen, alan bükmeli FBM; ardından gerçek drenaj kanalları açan hidrolik erozyon ve son olarak yükselti ile neme göre atanan biyomlar. Spike 55 ise en eski doku sorununu, kendini tekrar eden döşemeyi, dört örnekleme modu ve gerçekten kazanan yöntemle çözüyor.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-insa-etmek-bolum-27-gurultuden-bir-ada-zemine-benzeyen-zemin" tabindex="-1">Tarayıcıda açık dünya inşa etmek, bölüm 27: Gürültüden bir ada, zemine benzeyen zemin <a class="header-anchor" href="#tarayıcıda-acık-dunya-insa-etmek-bolum-27-gurultuden-bir-ada-zemine-benzeyen-zemin" aria-label="Permalink to &quot;Tarayıcıda açık dünya inşa etmek, bölüm 27: Gürültüden bir ada, zemine benzeyen zemin&quot;"></a></h1>
<p><em>Yazan: <a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberini</a> kullanın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p><a href="/tr/blog/2026-05-12-open-world-browser-part-26-water.html">Bölüm 26</a> dünyaya su ekledi. Bu bölüm, gerçek bir yerin oluşumunu yansıtan iki aşamada suyun altındaki karayı inşa ediyor. Spike 54, arazinin kendisi: elle şekillendirilmiyor, gürültüden oluşturuluyor ve ardından suyun gerçekten üzerinden aktığı bir yere ait drenaj sistemine ve kıyı şeridine kavuşana kadar aşındırılıyor. Spike 55 ise bu arazinin yüzeyi: neredeyse tüm prosedürel zeminleri ele veren sorunu, yani döşenen bir dokunun döşenmiş gibi görünmesini çözüyor. İkisi birlikte şu soruyu yanıtlıyor: Bir içerik üreticisi, bir sanatçı ikisine de dokunmadan makul bir ada ve gerçekten zemin gibi görünen bir yüzey elde edebilir mi? Doğru tarifleri kopyalarsanız yanıt evet.</p>
<h2 id="gurultunun-tek-basına-veremeyecegi-bir-kıyı-seridi" tabindex="-1">Gürültünün tek başına veremeyeceği bir kıyı şeridi <a class="header-anchor" href="#gurultunun-tek-basına-veremeyecegi-bir-kıyı-seridi" aria-label="Permalink to &quot;Gürültünün tek başına veremeyeceği bir kıyı şeridi&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/54-procgen-island/" title="Spike 54 Prosedürel Ada" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/54-procgen-island/" target="_blank">Spike 54'ü yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=54-procgen-island">Kaynak kodunu görüntüle</a></p>
<p>Yükseklik haritası, her biri ham gürültüdeki belirli bir kusuru gideren küçük dönüşümler yığını olan Red Blob Games tariflerini izliyor. Kesirli Brown hareketi, birkaç Perlin gürültüsü oktavını toplayarak araziye hem geniş tepeler hem de ince ayrıntılar kazandırıyor; ancak düz FBM yumuşak ve ızgaraya hizalı göründüğü için önce örnekleme noktasına alan bükme uygulanıyor: her koordinatı başka bir gürültü alanıyla kaydırıyorsunuz, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="19.194ex" height="2.283ex" role="img" focusable="false" viewBox="0 -759 8483.9 1009" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msup"><g data-mml-node="mi"><path data-c="1D45D" d="M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(536,363) scale(0.707)"><path data-c="2032" d="M79 43Q73 43 52 49T30 61Q30 68 85 293T146 528Q161 560 198 560Q218 560 240 545T262 501Q262 496 260 486Q259 479 173 263T84 45T79 43Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1058.2,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(2114,0)"><path data-c="1D45D" d="M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2839.2,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(3839.5,0)"><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(556,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(1056,0)" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(1334,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(1728,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(6011.5,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(6400.5,0)"><path data-c="1D45D" d="M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(6903.5,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(7514.7,0)"><path data-c="22C5" d="M78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(8014.9,0)"><path data-c="1D460" d="M131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mi>p</mi><mo data-mjx-alternate="1">′</mo></msup><mo>=</mo><mi>p</mi><mo>+</mo><mtext>noise</mtext><mo stretchy="false">(</mo><mi>p</mi><mo stretchy="false">)</mo><mo>⋅</mo><mi>s</mi></math></mjx-assistive-mml></mjx-container>; bu da sırtları eksenlere kilitli görünmek yerine organik bir biçimde büküyor. Ardından yükseltiyi <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.025ex;" xmlns="http://www.w3.org/2000/svg" width="2.453ex" height="1.956ex" role="img" focusable="false" viewBox="0 -853.7 1084.4 864.7" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msup"><g data-mml-node="mi"><path data-c="1D452" d="M39 168Q39 225 58 272T107 350T174 402T244 433T307 442H310Q355 442 388 420T421 355Q421 265 310 237Q261 224 176 223Q139 223 138 221Q138 219 132 186T125 128Q125 81 146 54T209 26T302 45T394 111Q403 121 406 121Q410 121 419 112T429 98T420 82T390 55T344 24T281 -1T205 -11Q126 -11 83 42T39 168ZM373 353Q367 405 305 405Q272 405 244 391T199 357T170 316T154 280T149 261Q149 260 169 260Q282 260 327 284T373 353Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" transform="translate(499,363) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mstyle" transform="scale(1.414)"><g data-mml-node="mspace"/></g><g data-mml-node="mi" transform="translate(236.2,0)"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mi>e</mi><mrow data-mjx-texclass="ORD"><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mi>k</mi></mrow></msup></math></mjx-assistive-mml></mjx-container> kuvvetine çıkaran yeniden dağıtım, orta tonları aşağı itiyor; böylece her yer aynı yumuşak eğimde kalmak yerine dünya düz vadilere ve keskin zirvelere kavuşuyor. Araziyi sonsuz tepeler yerine ada yapan parça ise radyal düşüş: merkezden Öklid uzaklığını <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -1.467ex;" xmlns="http://www.w3.org/2000/svg" width="21.741ex" height="4.208ex" role="img" focusable="false" viewBox="0 -1211.5 9609.7 1860" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(797.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1853.6,0)"><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(833,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(1111,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(3520.6,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(3909.6,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4409.6,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="msqrt" transform="translate(4854.2,0)"><g transform="translate(1020,0)"><g data-mml-node="msubsup"><g data-mml-node="mi"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(633,289) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(633,-247) scale(0.707)"><path data-c="1D465" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1309.7,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msubsup" transform="translate(2309.9,0)"><g data-mml-node="mi"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(633,289) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(633,-247) scale(0.707)"><path data-c="1D466" d="M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(0,1.5)"><path data-c="221A" d="M1001 1150Q1017 1150 1020 1132Q1020 1127 741 244L460 -643Q453 -650 436 -650H424Q423 -647 423 -645T421 -640T419 -631T415 -617T408 -594T399 -560T385 -512T367 -448T343 -364T312 -259L203 119L138 41L111 67L212 188L264 248L472 -474L983 1140Q988 1150 1001 1150Z" style="stroke-width: 3;"/></g><rect width="3346.5" height="60" x="1020" y="1091.5"/></g><g data-mml-node="mo" transform="translate(9220.7,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>d</mi><mo>=</mo><mo data-mjx-texclass="OP" movablelimits="true">min</mo><mo stretchy="false">(</mo><mn>1</mn><mo>,</mo><msqrt><msubsup><mi>n</mi><mi>x</mi><mn>2</mn></msubsup><mo>+</mo><msubsup><mi>n</mi><mi>y</mi><mn>2</mn></msubsup></msqrt><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container> olarak hesaplıyor ve yükseltiyi <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="5.073ex" height="1.756ex" role="img" focusable="false" viewBox="0 -694 2242.4 776" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(722.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1722.4,0)"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>1</mn><mo>−</mo><mi>d</mi></math></mjx-assistive-mml></mjx-container> yönünde harmanlıyorsunuz; böylece arazi kenarlarda okyanusa doğru alçalıyor. İkinci bir bağımsız gürültü alanı, biçimi etkilemeyen ancak daha sonra biyom adımını besleyen bir nem haritasına dönüşüyor.</p>
<p>Bu size bir biçim veriyor, ancak bu hâlâ bir gürültü biçimi. Ne nehirleri ne suyun oyduğu vadileri ne de tortu yelpazeleri var; çünkü üzerinden henüz hiçbir şey akmadı. Çözüm, Sebastian Lague'ın MIT lisanslı uygulamasından taşınan hidrolik erozyon. Binlerce su damlası rastgele noktalarda oluşup yokuş aşağı yuvarlanıyor. Her biri sert, dik açılı dönüşler yapmamak için atalet taşıyor; hızlandığında tortu topluyor, yavaşladığında veya göllendiğinde bunu bırakıyor. Önceden hesaplanan dairesel bir fırça, her erozyon olayını küçük bir yarıçapa yayarak oyuğu tek piksellik bir çizik yerine pürüzsüz hâle getiriyor; buharlaşma ise kullanım ömrü boyunca damlayı ortadan kaldırıyor. Yeterince damla çalıştırıldığında arazi, gürültünün taklit edemeyeceği özellikler kazanıyor: birleşen drenaj ağları, aşağı akış yönünde genişleyen vadiler ve tortunun çöktüğü düzlükler.</p>
<h2 id="gpu-da-erozyon-ve-nerede-olduklarını-bilen-nehirler" tabindex="-1">GPU'da erozyon ve nerede olduklarını bilen nehirler <a class="header-anchor" href="#gpu-da-erozyon-ve-nerede-olduklarını-bilen-nehirler" aria-label="Permalink to &quot;GPU'da erozyon ve nerede olduklarını bilen nehirler&quot;"></a></h2>
<p>CPU erozyonu doğru ancak yavaş; bu nedenle spike bunu bir WebGPU hesaplama gölgelendiricisine de taşıyor. İlginç olan kısım, GPU atomik işlemlerinin sizi neye zorladığı. Yükseklikler, bir milyon ölçekli sabit noktalı <code>i32</code> değerleri olarak saklanıyor; çünkü WGSL'de kayan noktalı değerler üzerinde atomik toplama yok ve binlerce damlanın aynı hücreye paralel biçimde, yarış durumlarına yol açmadan tortu bırakıp kaldırabilmesinin tek yolu tamsayılar üzerinde <code>atomicAdd</code> ve <code>atomicSub</code> kullanmak. Sabit noktalı gidiş dönüş, yoğun eşzamanlı sürükleme altında bir hücrenin zaman zaman biraz negatife düşebileceği anlamına geliyor; bu zararsız ve geri okumada sınırlandırılıyor. CPU sürümü her hücre için bir fırça tablosunu önceden hesaplıyor, ancak <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.05ex;" xmlns="http://www.w3.org/2000/svg" width="5.513ex" height="2.005ex" role="img" focusable="false" viewBox="0 -864 2436.6 886" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msup"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1000,0)" style="stroke-width: 3;"/><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" transform="translate(1500,0)" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2033,393.1) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mn>1001</mn><mn>2</mn></msup></math></mjx-assistive-mml></mjx-container> boyutundaki bir ızgarada bu tablo yaklaşık 100 MB tutuyor. Bu yüzden GPU uyarlaması, az miktarda ek hesaplama karşılığında büyük miktarda bellek tasarrufu yapmak için her damlanın fırçasını anında yeniden hesaplıyor. Damla başlangıç konumları, çalıştırmaların deterministik kalması için hâlâ CPU'daki bir Mulberry32 üretecinden geliyor.</p>
<p>İki ek geçiş, aşınmış araziyi okunabilir bir haritaya dönüştürüyor. Drenaj, Red Blob D8 akış birikimi yöntemini kullanıyor: her hücreye bir birim yağmur bırakıyor, tüm hücreleri yükseltiye göre azalan sırada diziyor ve her hücrenin biriken suyunu tek en alçak komşusuna aktarıyorsunuz. Böylece su doğal vadiler boyunca birikiyor ve birikimi belirli bir eşiği aşan her hücre nehir olarak işaretleniyor. Ancak aşınmış bir yükseklik haritasında çukurlar, yani yokuş aşağı çıkışı olmayan yerel çöküntüler bulunur. Bir çukura giren su orada durur ve birikim zincirini bozar. Bu nedenle drenaj çalıştırılmadan önce Planchon-Darboux çukur doldurma yöntemi, her çukuru en alçak komşusunun hemen üzerine, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.466ex;" xmlns="http://www.w3.org/2000/svg" width="17.709ex" height="2.036ex" role="img" focusable="false" viewBox="0 -694 7827.4 900" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mtext"><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(833,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(1111,0)" style="stroke-width: 3;"/><path data-c="4E" d="M42 46Q74 48 94 56T118 69T128 86V634H124Q114 637 52 637H25V683H232L235 680Q237 679 322 554T493 303L578 178V598Q572 608 568 613T544 627T492 637H475V683H483Q498 680 600 680Q706 680 715 683H724V637H707Q634 633 622 598L621 302V6L614 0H600Q585 0 582 3T481 150T282 443T171 605V345L172 86Q183 50 257 46H274V0H265Q250 3 150 3Q48 3 33 0H25V46H42Z" transform="translate(1667,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(2417,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(2861,0)" style="stroke-width: 3;"/><path data-c="67" d="M329 409Q373 453 429 453Q459 453 472 434T485 396Q485 382 476 371T449 360Q416 360 412 390Q410 404 415 411Q415 412 416 414V415Q388 412 363 393Q355 388 355 386Q355 385 359 381T368 369T379 351T388 325T392 292Q392 230 343 187T222 143Q172 143 123 171Q112 153 112 133Q112 98 138 81Q147 75 155 75T227 73Q311 72 335 67Q396 58 431 26Q470 -13 470 -72Q470 -139 392 -175Q332 -206 250 -206Q167 -206 107 -175Q29 -140 29 -75Q29 -39 50 -15T92 18L103 24Q67 55 67 108Q67 155 96 193Q52 237 52 292Q52 355 102 398T223 442Q274 442 318 416L329 409ZM299 343Q294 371 273 387T221 404Q192 404 171 388T145 343Q142 326 142 292Q142 248 149 227T179 192Q196 182 222 182Q244 182 260 189T283 207T294 227T299 242Q302 258 302 292T299 343ZM403 -75Q403 -50 389 -34T348 -11T299 -2T245 0H218Q151 0 138 -6Q118 -15 107 -34T95 -74Q95 -84 101 -97T122 -127T170 -155T250 -167Q319 -167 361 -139T403 -75Z" transform="translate(3139,0)" style="stroke-width: 3;"/><path data-c="68" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 124T102 167T103 217T103 272T103 329Q103 366 103 407T103 482T102 542T102 586T102 603Q99 622 88 628T43 637H25V660Q25 683 27 683L37 684Q47 685 66 686T103 688Q120 689 140 690T170 693T181 694H184V367Q244 442 328 442Q451 442 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(3639,0)" style="stroke-width: 3;"/><path data-c="62" d="M307 -11Q234 -11 168 55L158 37Q156 34 153 28T147 17T143 10L138 1L118 0H98V298Q98 599 97 603Q94 622 83 628T38 637H20V660Q20 683 22 683L32 684Q42 685 61 686T98 688Q115 689 135 690T165 693T176 694H179V543Q179 391 180 391L183 394Q186 397 192 401T207 411T228 421T254 431T286 439T323 442Q401 442 461 379T522 216Q522 115 458 52T307 -11ZM182 98Q182 97 187 90T196 79T206 67T218 55T233 44T250 35T271 29T295 26Q330 26 363 46T412 113Q424 148 424 212Q424 287 412 323Q385 405 300 405Q270 405 239 390T188 347L182 339V98Z" transform="translate(4195,0)" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(4751,0)" style="stroke-width: 3;"/><path data-c="75" d="M383 58Q327 -10 256 -10H249Q124 -10 105 89Q104 96 103 226Q102 335 102 348T96 369Q86 385 36 385H25V408Q25 431 27 431L38 432Q48 433 67 434T105 436Q122 437 142 438T172 441T184 442H187V261Q188 77 190 64Q193 49 204 40Q224 26 264 26Q290 26 311 35T343 58T363 90T375 120T379 144Q379 145 379 161T380 201T380 248V315Q380 361 370 372T320 385H302V431Q304 431 378 436T457 442H464V264Q464 84 465 81Q468 61 479 55T524 46H542V0Q540 0 467 -5T390 -11H383V58Z" transform="translate(5251,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(5807,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(6421.2,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(7421.4,0)"><path data-c="1D716" d="M227 -11Q149 -11 95 41T40 174Q40 262 87 322Q121 367 173 396T287 430Q289 431 329 431H367Q382 426 382 411Q382 385 341 385H325H312Q191 385 154 277L150 265H327Q340 256 340 246Q340 228 320 219H138V217Q128 187 128 143Q128 77 160 52T231 26Q258 26 284 36T326 57T343 68Q350 68 354 58T358 39Q358 36 357 35Q354 31 337 21T289 0T227 -11Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mtext>minNeighbour</mtext><mo>+</mo><mi>ϵ</mi></math></mjx-assistive-mml></mjx-container> seviyesine yükseltiyor ve her hücrenin suyu tahliye edebileceği bir yer oluşana kadar yirmiden az geçişle yineliyor. Son olarak biyomlar Red Blob yöntemiyle, yükselti ve nem üzerinden iki eksenli bir aramayla atanıyor. Böylece yüksek ve kuru bir hücre kayaya, alçak ve ıslak bir hücre bataklığa dönüşüyor. Buna eğimi hesaba katan geçersiz kılmalar ekleniyor: dik yüzeyler nemden bağımsız olarak kayaya zorlanıyor, su çizgisi şeridi plaja dönüşüyor ve en yüksek bölgeler karla kaplanıyor. Sonuç, iki gürültü tohumundan uçtan uca üretilmiş ve tek bakışta okunabilen bir ada.</p>
<h2 id="tekrarlamayı-bırakmayan-doseme" tabindex="-1">Tekrarlamayı bırakmayan döşeme <a class="header-anchor" href="#tekrarlamayı-bırakmayan-doseme" aria-label="Permalink to &quot;Tekrarlamayı bırakmayan döşeme&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/55-terrain-shading/" title="Spike 55 Arazi Gölgelendirmesi" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/55-terrain-shading/" target="_blank">Spike 55'i yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=55-terrain-shading">Kaynak kodunu görüntüle</a></p>
<p>Bir arazinin, yalnızca birkaç metre genişliğindeki bir dokuyla kilometrelerce alanı kaplayan bir malzemeye ihtiyacı vardır. Bir döşemeyi zemini kaplayacak biçimde ölçeklediğiniz anda göz, tekrarı fark eder. Spike 55, aynı geometri ve ışıklandırma üzerinde dört örnekleme modunu karşılaştıran bir A/B test düzeneği; dolayısıyla tek değişken dokunun nasıl okunduğu. Temel yöntem <code>plain</code>: ölçeklenmiş UV'den tek bir örnek alıyor, birkaç metrede bir açıkça tekrarlanıyor ve yalnızca aşılması gereken referans olarak bulunuyor. Ücretsiz PBR katmanları Poly Haven'ın CDN'inden geliyor: dağınık renk, paketlenmiş ARM haritası (ortam perdeleme, pürüzlülük, metallik) ve GL normal haritası. Tümü CC0 lisanslı ve anizotropi 8 ile mipmap'ler kullanılarak yükleniyor.</p>
<p>İlginç olan diğer üçü, tekrara farklı biçimlerde saldırıyor. <code>hex-linear</code> modu, Heitz-Neyret üçgen ızgarasıdır: yüzeyin üzerine eğriltilmiş üçgen bir kafes yerleştiriliyor ve her parça, üç köşesinin her birinin rastgele kaydırılmış bir örnek aldığı tek bir üçgenin içinde bulunuyor. Örnekler barisentrik ağırlıklarla harmanlanıyor; böylece komşu bölgeler dokunun farklı kısımlarını örnekliyor ve büyük ölçekli döşeme görünümü dağılıyor. Ancak üç örneğin düz doğrusal harmanı, üçgen kenarlarında renklerinin ortalamasını alıyor. Bu da görünür bir üçgen deseni bırakıyor; Spike 48'in karşılaştığı kusurun aynısı. <code>hex-vp</code> modu, aynı 2018 makalesinde yayımlanan çözüm: barisentrik toplamdan sonra dokunun ortalama rengini çıkarıyor, varyansı sabit tutmak için karesi alınmış ağırlıklar toplamının ters kareköküyle yeniden ölçekliyor ve ardından ortalamayı geri ekliyor. Bu yöntem harman boyunca kontrastı sabit tutarak üçgenleri ortadan kaldırıyor. Bu nedenle malzeme, başlangıçta ortalama rengini tahmin etmek için yüklenen her dokudan 1'e 1 bir geri okuma yapıyor. Dördüncü mod <code>iq-untiled</code>, Inigo Quilez'in Texture Repetition tekniği 3: düşük frekanslı bir varyasyon deseniyle harmanlanan iki kaydırılmış örnek; üç yerine yalnızca iki örnek kullanıyor ve en başta üçgen yapısı içermiyor. Dayanıklılığını koruyan ucuz seçenek bu.</p>
<p>Her modun üzerinde isteğe bağlı triplanar projeksiyon bulunuyor; aynı malzemenin gerilmeden bir uçurumu kaplamasını sağlayan da bu. Gölgelendirici, tek bir UV yerine üç dünya ekseni projeksiyonunu örnekliyor: X'e bakan yüzeyler YZ düzlemini, Y'ye bakanlar ZX'i, Z'ye bakanlar XY'yi okuyor. Ardından bunları, 45 derecelik bir eğimin üç projeksiyonu da bulanık bir karışıma dönüştürmemesi için <code>abs(normalWorld)</code> değerini dört ile sekiz arasında bir keskinleştirme kuvvetine yükselterek harmanlıyor. Test düzeneği ödünleşimi açıkça gösteriyor: varyansı koruyan altıgen harman kalite açısından kazanırken, Quilez'in iki örnekli yöntemi performansı gözeten seçenek oluyor. İkisi de düz yöntemi o kadar büyük farkla geçiyor ki hiçbir içerik üreticisi düz döşemeyi yayımlamamalı.</p>
<h2 id="bu-bolumde-basvurulan-teknolojiler" tabindex="-1">Bu bölümde başvurulan teknolojiler <a class="header-anchor" href="#bu-bolumde-basvurulan-teknolojiler" aria-label="Permalink to &quot;Bu bölümde başvurulan teknolojiler&quot;"></a></h2>
<p><strong>Tariflerin üst üste uygulandığı yükseklik haritası üretimi.</strong> Red Blob Games tarifleri, ham gürültüyü araziye dönüştürmek için işlemleri birleştiriyor: organik sırtlar için alan bükmeli FBM (<mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="19.194ex" height="2.283ex" role="img" focusable="false" viewBox="0 -759 8483.9 1009" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msup"><g data-mml-node="mi"><path data-c="1D45D" d="M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(536,363) scale(0.707)"><path data-c="2032" d="M79 43Q73 43 52 49T30 61Q30 68 85 293T146 528Q161 560 198 560Q218 560 240 545T262 501Q262 496 260 486Q259 479 173 263T84 45T79 43Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1058.2,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(2114,0)"><path data-c="1D45D" d="M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2839.2,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(3839.5,0)"><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(556,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(1056,0)" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(1334,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(1728,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(6011.5,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(6400.5,0)"><path data-c="1D45D" d="M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(6903.5,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(7514.7,0)"><path data-c="22C5" d="M78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(8014.9,0)"><path data-c="1D460" d="M131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mi>p</mi><mo data-mjx-alternate="1">′</mo></msup><mo>=</mo><mi>p</mi><mo>+</mo><mtext>noise</mtext><mo stretchy="false">(</mo><mi>p</mi><mo stretchy="false">)</mo><mo>⋅</mo><mi>s</mi></math></mjx-assistive-mml></mjx-container>), düz vadiler ve keskin zirveler için <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.025ex;" xmlns="http://www.w3.org/2000/svg" width="2.453ex" height="1.956ex" role="img" focusable="false" viewBox="0 -853.7 1084.4 864.7" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msup"><g data-mml-node="mi"><path data-c="1D452" d="M39 168Q39 225 58 272T107 350T174 402T244 433T307 442H310Q355 442 388 420T421 355Q421 265 310 237Q261 224 176 223Q139 223 138 221Q138 219 132 186T125 128Q125 81 146 54T209 26T302 45T394 111Q403 121 406 121Q410 121 419 112T429 98T420 82T390 55T344 24T281 -1T205 -11Q126 -11 83 42T39 168ZM373 353Q367 405 305 405Q272 405 244 391T199 357T170 316T154 280T149 261Q149 260 169 260Q282 260 327 284T373 353Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" transform="translate(499,363) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mstyle" transform="scale(1.414)"><g data-mml-node="mspace"/></g><g data-mml-node="mi" transform="translate(236.2,0)"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mi>e</mi><mrow data-mjx-texclass="ORD"><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mi>k</mi></mrow></msup></math></mjx-assistive-mml></mjx-container> yeniden dağıtımı ve kenarları okyanusa indirip bir ada oluşturmak için <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="5.073ex" height="1.756ex" role="img" focusable="false" viewBox="0 -694 2242.4 776" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(722.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1722.4,0)"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>1</mn><mo>−</mo><mi>d</mi></math></mjx-assistive-mml></mjx-container> yönünde harmanlanan Öklid tabanlı radyal düşüş. İkinci gürültü alanı, biyom atamasında kullanılan nem haritasıdır. Bkz. <a href="/tr/guides/landscape-generation-browser.html">peyzaj üretimi</a>.</p>
<p><strong>CPU ve GPU'da hidrolik erozyon.</strong> Sebastian Lague'ın damla modeli (atalet, taşıma kapasitesi, önceden hesaplanan dairesel birikim fırçası ve buharlaşma), gürültünün taklit edemeyeceği gerçek drenaj kanalları açıyor. WebGPU hesaplama uyarlaması, damlaların aynı hücre üzerinde paralel biçimde <code>atomicAdd</code>/<code>atomicSub</code> kullanabilmesi için yükseklikleri bir milyon ölçekli sabit noktalı <code>i32</code> değerleri olarak saklıyor; <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.05ex;" xmlns="http://www.w3.org/2000/svg" width="5.513ex" height="2.005ex" role="img" focusable="false" viewBox="0 -864 2436.6 886" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msup"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1000,0)" style="stroke-width: 3;"/><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" transform="translate(1500,0)" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2033,393.1) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mn>1001</mn><mn>2</mn></msup></math></mjx-assistive-mml></mjx-container> boyutunda yaklaşık 100 MB'lık bir tablodan kaçınmak için her damlanın fırçasını anında yeniden hesaplıyor ve başlangıç konumlarını deterministik bir Mulberry32 üretecinden alıyor.</p>
<p><strong>Çukur doldurmalı D8 drenajı.</strong> Red Blob D8 akış birikimi, her hücreye bir birim yağmur bırakıyor, hücreleri azalan yükseltiye göre sıralıyor ve suyu her hücrenin en alçak komşusuna geçirerek eşiğin üzerindeki birikimleri nehir olarak işaretliyor. Planchon-Darboux çukur doldurma yöntemi önce her yerel çöküntüyü <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.466ex;" xmlns="http://www.w3.org/2000/svg" width="17.709ex" height="2.036ex" role="img" focusable="false" viewBox="0 -694 7827.4 900" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mtext"><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(833,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(1111,0)" style="stroke-width: 3;"/><path data-c="4E" d="M42 46Q74 48 94 56T118 69T128 86V634H124Q114 637 52 637H25V683H232L235 680Q237 679 322 554T493 303L578 178V598Q572 608 568 613T544 627T492 637H475V683H483Q498 680 600 680Q706 680 715 683H724V637H707Q634 633 622 598L621 302V6L614 0H600Q585 0 582 3T481 150T282 443T171 605V345L172 86Q183 50 257 46H274V0H265Q250 3 150 3Q48 3 33 0H25V46H42Z" transform="translate(1667,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(2417,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(2861,0)" style="stroke-width: 3;"/><path data-c="67" d="M329 409Q373 453 429 453Q459 453 472 434T485 396Q485 382 476 371T449 360Q416 360 412 390Q410 404 415 411Q415 412 416 414V415Q388 412 363 393Q355 388 355 386Q355 385 359 381T368 369T379 351T388 325T392 292Q392 230 343 187T222 143Q172 143 123 171Q112 153 112 133Q112 98 138 81Q147 75 155 75T227 73Q311 72 335 67Q396 58 431 26Q470 -13 470 -72Q470 -139 392 -175Q332 -206 250 -206Q167 -206 107 -175Q29 -140 29 -75Q29 -39 50 -15T92 18L103 24Q67 55 67 108Q67 155 96 193Q52 237 52 292Q52 355 102 398T223 442Q274 442 318 416L329 409ZM299 343Q294 371 273 387T221 404Q192 404 171 388T145 343Q142 326 142 292Q142 248 149 227T179 192Q196 182 222 182Q244 182 260 189T283 207T294 227T299 242Q302 258 302 292T299 343ZM403 -75Q403 -50 389 -34T348 -11T299 -2T245 0H218Q151 0 138 -6Q118 -15 107 -34T95 -74Q95 -84 101 -97T122 -127T170 -155T250 -167Q319 -167 361 -139T403 -75Z" transform="translate(3139,0)" style="stroke-width: 3;"/><path data-c="68" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 124T102 167T103 217T103 272T103 329Q103 366 103 407T103 482T102 542T102 586T102 603Q99 622 88 628T43 637H25V660Q25 683 27 683L37 684Q47 685 66 686T103 688Q120 689 140 690T170 693T181 694H184V367Q244 442 328 442Q451 442 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(3639,0)" style="stroke-width: 3;"/><path data-c="62" d="M307 -11Q234 -11 168 55L158 37Q156 34 153 28T147 17T143 10L138 1L118 0H98V298Q98 599 97 603Q94 622 83 628T38 637H20V660Q20 683 22 683L32 684Q42 685 61 686T98 688Q115 689 135 690T165 693T176 694H179V543Q179 391 180 391L183 394Q186 397 192 401T207 411T228 421T254 431T286 439T323 442Q401 442 461 379T522 216Q522 115 458 52T307 -11ZM182 98Q182 97 187 90T196 79T206 67T218 55T233 44T250 35T271 29T295 26Q330 26 363 46T412 113Q424 148 424 212Q424 287 412 323Q385 405 300 405Q270 405 239 390T188 347L182 339V98Z" transform="translate(4195,0)" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(4751,0)" style="stroke-width: 3;"/><path data-c="75" d="M383 58Q327 -10 256 -10H249Q124 -10 105 89Q104 96 103 226Q102 335 102 348T96 369Q86 385 36 385H25V408Q25 431 27 431L38 432Q48 433 67 434T105 436Q122 437 142 438T172 441T184 442H187V261Q188 77 190 64Q193 49 204 40Q224 26 264 26Q290 26 311 35T343 58T363 90T375 120T379 144Q379 145 379 161T380 201T380 248V315Q380 361 370 372T320 385H302V431Q304 431 378 436T457 442H464V264Q464 84 465 81Q468 61 479 55T524 46H542V0Q540 0 467 -5T390 -11H383V58Z" transform="translate(5251,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(5807,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(6421.2,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(7421.4,0)"><path data-c="1D716" d="M227 -11Q149 -11 95 41T40 174Q40 262 87 322Q121 367 173 396T287 430Q289 431 329 431H367Q382 426 382 411Q382 385 341 385H325H312Q191 385 154 277L150 265H327Q340 256 340 246Q340 228 320 219H138V217Q128 187 128 143Q128 77 160 52T231 26Q258 26 284 36T326 57T343 68Q350 68 354 58T358 39Q358 36 357 35Q354 31 337 21T289 0T227 -11Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mtext>minNeighbour</mtext><mo>+</mo><mi>ϵ</mi></math></mjx-assistive-mml></mjx-container> seviyesine yükseltiyor (yirmiden az geçişle yineleyerek); böylece su hiçbir zaman hapsolmuyor ve birikim bağlantılı kalıyor. Yükselti ve neme göre iki eksenli bir arama biyomları atarken, eğim geçersiz kılmaları uçurumları kayaya, su çizgisini plaja ve zirveleri kara zorluyor.</p>
<p><strong>Doku döşemesini dört farklı yöntemle kırmak.</strong> Aynı geometri ve ışıklandırma üzerinde: <code>plain</code> (tek örnek, açıkça tekrarlanıyor), <code>hex-linear</code> (Heitz-Neyret üçgen ızgarası; doğrusal harman bir üçgen deseni bırakıyor), <code>hex-vp</code> (ortalamayı çıkaran, karesi alınmış ağırlıkların ters kareköküyle yeniden ölçekleyen ve ortalamayı geri ekleyen EGSR 2018 §3.3 varyans koruma çözümü; her doku için 1×1 ortalama geri okuması gerekiyor) ve <code>iq-untiled</code> (Inigo Quilez'in iki örnekli tekniği 3). Triplanar projeksiyon, uçurumların gerilmemesi için üç dünya ekseni düzlemini <code>abs(normalWorld)</code> değerinin 4-8 arasındaki bir kuvvetiyle harmanlayarak örnekliyor. Varyansı koruyan yöntem kalitede, iki örnekli yöntem maliyette kazanıyor. Bkz. <a href="/tr/guides/landscape-generation-browser.html#terrain-materials">arazi malzemeleri</a>.</p>
<hr>
<p>29 bölümün 27.'si.
Önceki: <a href="/tr/blog/2026-05-12-open-world-browser-part-26-water.html">Bölüm 26 - Su yapmanın üç yolu</a>
Sonraki: <a href="/tr/blog/2026-05-14-open-world-browser-part-28-grass-and-occlusion.html">Bölüm 28 - Ufka kadar uzanan çimenler ve kendini gizleyen zemin</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya inşa etmek, bölüm 26: Su yapmanın üç yolu]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-05-12-open-world-browser-part-26-water</link>
            <guid>https://app.cinevva.com/tr/blog/2026-05-12-open-world-browser-part-26-water</guid>
            <pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spike 51, ekran alanı yansımalarına dayalı suyu geliştirdi ve temel sınırına çarptı: Kameranın hiç görmediği şeyi yansıtamaz. Spike 52, yayımlanmış her oyunun kullandığı yöntem olan düzlemsel aynaya geçti ve koyu yansımaları yok eden bir hatayı ortadan kaldırdı. Spike 53 ise tamamlanmış bir çözümün nasıl göründüğünü görmek için üretime hazır bir su kütüphanesini devreye aldı.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-insa-etmek-bolum-26-su-yapmanın-uc-yolu" tabindex="-1">Tarayıcıda açık dünya inşa etmek, bölüm 26: Su yapmanın üç yolu <a class="header-anchor" href="#tarayıcıda-acık-dunya-insa-etmek-bolum-26-su-yapmanın-uc-yolu" aria-label="Permalink to &quot;Tarayıcıda açık dünya inşa etmek, bölüm 26: Su yapmanın üç yolu&quot;"></a></h1>
<p><em>Cinevva CTO'su ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberini</a> kullanın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p><a href="/tr/blog/2026-05-10-open-world-browser-part-25-universal-characters.html">Bölüm 25</a> avatarlara kıyafet giydirdi. Bu bölüm suyla ilgili ve üç spike'tan oluşuyor; çünkü su, ucuz bir kestirme yol ile doğru çözümün ekran görüntüsünde aynı, hareket hâlindeyken ise tamamen farklı göründüğü yüzeydir. Spike 51, cazip seçenek olan ekran alanı yöntemiyle yansımayı oluşturuyor ve doğrudan bu yöntemin yapısal sınırlamasına çarpıyor. Spike 52, yayımlanmış her oyunun gerçekte kullandığı yönteme geçiyor. Spike 53 ise “tamamlanmış” bir çözümün bizim bulunduğumuz noktadan ne kadar uzakta olduğunu görmek için hazır bir su kütüphanesini devreye alıyor. Üçü de aynı kırılma katmanını paylaşıyor; dolayısıyla ilk ikisi arasında değişen tek değişken, yansımanın nasıl hesaplandığı.</p>
<h2 id="elinizdeki-ekrandan-yansıma-uretmek" tabindex="-1">Elinizdeki ekrandan yansıma üretmek <a class="header-anchor" href="#elinizdeki-ekrandan-yansıma-uretmek" aria-label="Permalink to &quot;Elinizdeki ekrandan yansıma üretmek&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/51-water-ssr-caustics/" title="Spike 51 Ekran Alanı Yansımalı Su" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/51-water-ssr-caustics/" target="_blank">Spike 51'i yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=51-water-ssr-caustics">Kaynak kodunu görüntüle</a></p>
<p>Ekran alanı yansıması, daha önce işlediğiniz kareyi yeniden kullanır. Her su pikseli için görüş ışınını yüzeyden yansıtır, bu yansıyan ışını derinlik tamponu boyunca ilerletir ve ışın kaydedilmiş bir yüzeyin arkasına geçtiğinde suyun neyi yansıttığını bulursunuz; örnek doğrudan renk tamponundan alınır. Port, three.js'in <code>SSRNode</code> uygulamasını satır satır izliyor; o da lettier'in SSR giriş yazısını temel alıyor. İlerleme, ekran alanında yapılan bir DDA yürüyüşüdür: Işının başlangıcını ve sonunu piksel koordinatlarına yansıtıp daha uzun olan eksen boyunca, piksel başına bir örnek alarak ilerlersiniz. Her adımdaki yansımış ışın derinliği, perspektif düzeltmeli enterpolasyon gerektirir: <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -1.238ex;" xmlns="http://www.w3.org/2000/svg" width="14.984ex" height="3.195ex" role="img" focusable="false" viewBox="0 -864.9 6622.8 1412" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mfrac"><g data-mml-node="mn" transform="translate(3134.6,394) scale(0.707)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mrow" transform="translate(220,-370.3) scale(0.707)"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(500,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z" style="stroke-width: 3;"/></g></g><g data-mml-node="msub" transform="translate(1000,0)"><g data-mml-node="mi"><path data-c="1D467" d="M347 338Q337 338 294 349T231 360Q211 360 197 356T174 346T162 335T155 324L153 320Q150 317 138 317Q117 317 117 325Q117 330 120 339Q133 378 163 406T229 440Q241 442 246 442Q271 442 291 425T329 392T367 375Q389 375 411 408T434 441Q435 442 449 442H462Q468 436 468 434Q468 430 463 420T449 399T432 377T418 358L411 349Q368 298 275 214T160 106L148 94L163 93Q185 93 227 82T290 71Q328 71 360 90T402 140Q406 149 409 151T424 153Q443 153 443 143Q443 138 442 134Q425 72 376 31T278 -11Q252 -11 232 6T193 40T155 57Q111 57 76 -3Q70 -11 59 -11H54H41Q35 -5 35 -2Q35 13 93 84Q132 129 225 214T340 322Q352 338 347 338Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(498,-150) scale(0.707)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1901.6,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(2679.6,0)"><path data-c="1D460" d="M131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(3148.6,0) scale(1.414)"><g data-mml-node="mspace"/></g><g data-mml-node="mo" transform="translate(3384.7,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(3773.7,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(4273.7,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z" style="stroke-width: 3;"/></g></g><g data-mml-node="msub" transform="translate(4773.7,0)"><g data-mml-node="mi"><path data-c="1D467" d="M347 338Q337 338 294 349T231 360Q211 360 197 356T174 346T162 335T155 324L153 320Q150 317 138 317Q117 317 117 325Q117 330 120 339Q133 378 163 406T229 440Q241 442 246 442Q271 442 291 425T329 392T367 375Q389 375 411 408T434 441Q435 442 449 442H462Q468 436 468 434Q468 430 463 420T449 399T432 377T418 358L411 349Q368 298 275 214T160 106L148 94L163 93Q185 93 227 82T290 71Q328 71 360 90T402 140Q406 149 409 151T424 153Q443 153 443 143Q443 138 442 134Q425 72 376 31T278 -11Q252 -11 232 6T193 40T155 57Q111 57 76 -3Q70 -11 59 -11H54H41Q35 -5 35 -2Q35 13 93 84Q132 129 225 214T340 322Q352 338 347 338Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(498,-150) scale(0.707)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(5675.3,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(6453.3,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(6953.3,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z" style="stroke-width: 3;"/></g></g><g data-mml-node="msub" transform="translate(7453.3,0)"><g data-mml-node="mi"><path data-c="1D467" d="M347 338Q337 338 294 349T231 360Q211 360 197 356T174 346T162 335T155 324L153 320Q150 317 138 317Q117 317 117 325Q117 330 120 339Q133 378 163 406T229 440Q241 442 246 442Q271 442 291 425T329 392T367 375Q389 375 411 408T434 441Q435 442 449 442H462Q468 436 468 434Q468 430 463 420T449 399T432 377T418 358L411 349Q368 298 275 214T160 106L148 94L163 93Q185 93 227 82T290 71Q328 71 360 90T402 140Q406 149 409 151T424 153Q443 153 443 143Q443 138 442 134Q425 72 376 31T278 -11Q252 -11 232 6T193 40T155 57Q111 57 76 -3Q70 -11 59 -11H54H41Q35 -5 35 -2Q35 13 93 84Q132 129 225 214T340 322Q352 338 347 338Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(498,-150) scale(0.707)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(8354.8,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g><rect width="6382.8" height="60" x="120" y="220"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mfrac><mn>1</mn><mrow><mn>1</mn><mrow data-mjx-texclass="ORD"><mo>/</mo></mrow><msub><mi>z</mi><mn>0</mn></msub><mo>+</mo><mi>s</mi><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mo stretchy="false">(</mo><mn>1</mn><mrow data-mjx-texclass="ORD"><mo>/</mo></mrow><msub><mi>z</mi><mn>1</mn></msub><mo>−</mo><mn>1</mn><mrow data-mjx-texclass="ORD"><mo>/</mo></mrow><msub><mi>z</mi><mn>0</mn></msub><mo stretchy="false">)</mo></mrow></mfrac></math></mjx-assistive-mml></mjx-container>. Çünkü görünüm-Z değerini doğrusal olarak enterpole etmek düpedüz yanlıştır ve isabetlerin yanlış yerde oluşmasına yol açar.</p>
<p>İki şey bunu bir slayt gösterisi yerine kullanılabilir hâle getiriyor. Kaba ilerleme 64 adımla sınırlandırılıyor; aksi takdirde bin piksele yayılan uzun bir ışın, parça başına yüzlerce yineleme çalıştırır ve milyon parçalı bir su düzlemi, yüzlerce yineleme ve her yinelemede birkaç doku örneğiyle sahneyi 30 fps'ye düşürürdü. Kalite, yineleme sayısı yerine bu sınır içindeki etkili adım aralığını kontrol ediyor. Sınırlandırılmış kaba ilerleme gözle görülür basamaklı şeritler bıraktığı için, altı yinelemeli ikili hassaslaştırma son ıskalama ile isabet arasındaki aralığı ikiye bölüyor. Bu, 64 kat alt adım doğruluğu sağlayarak komşu su parçalarının aynı kaba isabet konumuna kilitlenmesini önlemeye yetiyor. Son bir noktadan doğruya uzaklık denetimi, adayın yalnızca aynı derinlikte bulunmak yerine gerçekten yansıma ışını üzerinde olduğunu doğruluyor. Bunun için, o derinlikteki tek pikselin görünüm alanındaki genişliğine göre otomatik ölçeklenen bir kalınlık toleransı kullanılıyor: yakında daha sıkı, uzakta daha gevşek.</p>
<p>Bu spike'ın dürüst yanı kendi yorumlarına yazılmış durumda: SSR, ana kameranın hiç örneklemediği bir şeyi yansıtamaz. Bir ağacın alt yüzü, ekran dışındaki veya başka bir nesne tarafından kapatılmış herhangi bir şey tamponlarda mevcut değildir; dolayısıyla yansımada da görünemez. Hiçbir ilerleme kalitesinin gideremeyeceği “yanlış taraftaki bilgi kaybı” budur ve bir sonraki spike'ın varlık nedeni de tam olarak budur.</p>
<h2 id="yalan-soyleyemeyen-ayna" tabindex="-1">Yalan söyleyemeyen ayna <a class="header-anchor" href="#yalan-soyleyemeyen-ayna" aria-label="Permalink to &quot;Yalan söyleyemeyen ayna&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/52-water-planar/" title="Spike 52 Düzlemsel Su" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/52-water-planar/" target="_blank">Spike 52'yi yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=52-water-planar">Kaynak kodunu görüntüle</a></p>
<p>Düzlemsel yansıma, sahneyi su düzlemine göre aynalanmış bir kameradan ikinci kez ekran dışı bir hedefe işler ve su gölgelendiricisi bu hedeften örnek alır. Bu, standart yaklaşımdır; UE5 Water, three.js'in kendi <code>WaterMesh</code> bileşeni, ABZÛ ve Sea of Thieves'in tümü bunu kullanır. Çünkü SSR'ın asla göremeyeceği geometri dâhil, sahnenin çizilebilecek her pikseline erişir. TSL'de neredeyse şaşırtıcı derecede basittir: <code>reflector()</code> aynalanmış yardımcı kamerayı ve onun işleme hedefini ayırır, her karede güncellenmesi için hedefini mesh'e eklersiniz ve rengini örneklersiniz. Dalgalar daha sonra eklendiğinde yansıma, yansıtıcının UV düğümüne bir bozulma ofseti eklenerek dalgalandırılır; bu, <code>WaterMesh</code> tarafından kullanılan satırın aynısıdır.</p>
<p>Kayda değer hata aynada değil, güvenlik ağındaydı. Önceki bir sürüm, sıfıra yakın bir yansımanın hedefte hiçbir şey bulunmadığı anlamına geldiği varsayımıyla yansıtıcının çıktısını, yansıyan rengin büyüklüğüne göre ağırlıklandırarak yedek bir prosedürel gökyüzüyle harmanlıyordu. Ancak koyu bir gölgelik gölgesinin büyüklüğü de düşüktür; bu nedenle sınırlama hiçbir zaman tam güce ulaşmıyor ve gerçekten koyu olan bu pikseller parlak gökyüzüyle karışıyordu. Kullanıcının fark ettiği belirti çok netti: Hata ayıklama modundaki ham ayna hedefi kusursuz koyu ağaçlar gösterirken birleştirilmiş görüntüde yansımalar soluk görünüyordu ve teşhis, gölgelendiricinin “koyu renkleri yok ettiği” yönündeydi. Çözüm, kodu silmekti. Yansıtıcı hedefi ilk kareden sonra güvenilirdir; dolayısıyla hiçbir yedeğe gerek yoktur. Her iki spike da altta aynı kırılmayı paylaşır: Yüzeyin arkasındaki sahne örneklenir, her pikselin su çizgisinin ne kadar altında olduğu yeniden oluşturulur ve kanal başına Beer-Lambert sönümlemesi uygulanır; böylece kırmızı birkaç metre içinde kaybolurken mavi kalıcı olur. Uzak düzlemdeki arka planın sislenmemesi için de bir gökyüzü maskesi kullanılır. Schlick Fresnel, suya doğrudan aşağı bakarken kırılmayı, yüzey boyunca bakarken ise yansımayı öne çıkaracak şekilde ikisini harmanlar.</p>
<h2 id="tamamlanmıs-bir-cozum-nasıl-gorunur" tabindex="-1">Tamamlanmış bir çözüm nasıl görünür? <a class="header-anchor" href="#tamamlanmıs-bir-cozum-nasıl-gorunur" aria-label="Permalink to &quot;Tamamlanmış bir çözüm nasıl görünür?&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/53-water-pro/" title="Spike 53 Profesyonel Su" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/53-water-pro/" target="_blank">Spike 53'ü yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=53-water-pro">Kaynak kodunu görüntüle</a></p>
<p>Spike 53, geliştirme ile satın alma arasındaki tercihi sınayan bir çalışmadır. <code>threejs-water-pro</code> kütüphanesini yayımlandığı hâliyle; tropikal ön ayarı, varsayılan okyanus clipmap'i, kamera takibi ve Rayleigh gökyüzüyle birlikte devreye alır ve kütüphanenin kendi demosunda kullanılan ada glTF'sini yükler. Amaç, elle yazılmış düz su gölgelendiricisi ile eksiksiz bir okyanus sistemi arasındaki farkı görmektir ve bu fark büyüktür: Bu sistem, geminin yalnızca yukarı aşağı sallanmak yerine baş-kıç ve yana yatması için gövdenin altındaki birkaç noktadan dalga yüksekliğini örnekleyen bir yüzdürme sistemine, dümen suyu üreticisine, kıyı ve yüzey köpüğüne ve dalgaların güvertenin içinden görünmesini önlemek amacıyla gemi gövdesinin içinde su işlenmesini engelleyen bir maske geçişine sahiptir.</p>
<p>Entegrasyon sırasında, yalnızca README dosyasını okumak yerine kütüphaneyi gerçekten kullanarak öğrenebileceğiniz türden ayrıntılar ortaya çıktı. Köpük dokularına ön ayarda dosya adlarıyla başvuruluyor ancak onları yüklemek tüketicinin görevi; bu dokular olmadan kıyı, parçalanan dalgalar yerine sert bir su çizgisi kenarı gibi görünüyor. Ada, su altındaki geometrisi okyanus tabanının altına inecek şekilde konumlandırılmıştır; böylece kütüphanenin taban mesh'i, modelin dış halkasını görünür bir düzlem kenarı bırakmadan örter. Kütüphanenin amaçladığı yaklaşım budur: Araziyi prosedürel olarak üretmeyin, bir 3B model getirin. Ayrıca kenar yumuşatma, işleme motorunda bilinçli olarak kapatılıp bunun yerine son işleme FXAA geçişi kullanılıyor. Çünkü MSAA, derinlik duyarlı atmosferik sis çalışmadan önce kenar parçalarını arka planla harmanlayarak geometrinin sisle buluştuğu her yerde ince, koyu bir saçak bırakıyor. Kenar yumuşatmayı sisten önce değil, sonra çözmek bu saçağı ortadan kaldırıyor. Bunun riski azalttığı asıl konu kararın kendisidir: Üretime hazır bir okyanus büyük ve uzmanlık gerektiren bir sistemdir. Böyle bir sisteme ihtiyaç duyduğumuz durumlarda bakımı yapılan bir kütüphaneyi benimsemek; dümen suyunu, yüzdürmeyi ve köpüğü sıfırdan yeniden oluşturmaktan daha iyidir. Spike 52'deki düzlemsel ayna gölgelendiricisi ise içerik üreticisinin kendi dünyasına yerleştirdiği daha küçük iç su kütleleri için doğru çözüm olmaya devam eder.</p>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>Ekran alanı yansımalı su.</strong> Yansıtılmış bir görüş ışını, perspektif düzeltmeli 1/z enterpolasyonu, parça başına maliyeti sınırlayan katı bir adım sınırı ve sınırlı ilerlemenin bıraktığı şeritlenmeyi kaldıran ikili hassaslaştırma geçişi kullanarak DDA aracılığıyla ekran alanındaki derinlik tamponunda ilerler. Derinliğe göre ölçeklenen kalınlıkla yapılan noktadan doğruya doğrulama, yanlış isabetleri eler. Yöntemin kesin sınırı, yalnızca ana kameranın daha önce örneklediği geometriyi yansıtabilmesidir; dolayısıyla ekran dışındaki ve yanlış taraftaki yüzeyler hiçbir zaman görünmez. Bkz. <a href="/tr/guides/landscape-generation-browser.html#terrain-materials">arazi malzemeleri</a>.</p>
<p><strong>Düzlemsel ayna yansıması.</strong> Su düzlemine göre aynalanmış yardımcı bir kamera, sahneyi su gölgelendiricisinin örneklediği ekran dışı bir hedefe işler. Böylece SSR'ın göremediği geometriler dâhil piksel düzeyinde kusursuz yansımalar sağlanır. UE5 Water ve three.js <code>WaterMesh</code>, dalga bozulmasını yansıtıcının UV düğümüne ofset olarak uygulayarak bu yaklaşımı kullanır. Renk büyüklüğüne göre ağırlıklandırılmış gökyüzü yedeği, koyu yansıma piksellerini hatalı biçimde yok ediyordu; yansıtıcı hedefi ilk kareden sonra güvenilir olduğundan çözüm, yedeği kaldırmaktı.</p>
<p><strong>Beer-Lambert derinlik tonlu kırılma.</strong> Her iki gölgelendirici de yüzeyin arkasındaki sahneyi örnekler, arka plandaki her pikselin su çizgisinin altındaki derinliğini yeniden oluşturur ve kanal başına üstel sönümleme uygular; kırmızı metreler içinde kaybolurken mavi kalıcı olur ve sonuç bir su sisi rengine doğru birleştirilir. Uzak düzlemin sislenmemesi için de bir gökyüzü maskesi kullanılır. Schlick Fresnel, dik geliş açısındaki kırılmayı sıyırma açılarındaki yansımayla harmanlar.</p>
<p><strong>Üretime hazır bir su kütüphanesini benimsemek.</strong> <code>threejs-water-pro</code>; okyanus clipmap'i, Rayleigh gökyüzü, geminin baş-kıç ve yana yatması için çok noktalı yüzdürme, dümen suyu, köpük ve gövde maskesi geçişi sunar. Tüketici tarafındaki ayrıntılar önemlidir: Köpük dokuları açıkça yüklenmeli, adanın su altındaki geometrisi okyanus tabanının altına inerek tabanın kenarları örtmesini sağlamalı ve geometri kenarlarında koyu bir sis saçağı oluşmasını önlemek için kenar yumuşatma MSAA yerine son işleme FXAA geçişi olarak çalıştırılmalıdır.</p>
<hr>
<p>29 bölümün 26.'sı.
Önceki: <a href="/tr/blog/2026-05-10-open-world-browser-part-25-universal-characters.html">Bölüm 25 - Tek iskelet, her kıyafet</a>
Sonraki: <a href="/tr/blog/2026-05-13-open-world-browser-part-27-island-and-terrain.html">Bölüm 27 - Gürültüden bir ada, zemine benzeyen zemin</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Modern motorlar bitki örtüsü overdraw sorununu nasıl aşıyor]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-05-11-foliage-overdraw</link>
            <guid>https://app.cinevva.com/tr/blog/2026-05-11-foliage-overdraw</guid>
            <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Z ön geçişleri, oktahedral imposter'lar, GPU güdümlü küme ayıklama, hash'lenmiş alfa, görünürlük tamponları ve mesafe alanı gölgeleri: yoğun orman sahnelerindeki 8-15 kat bitki örtüsü overdraw'unu 1-2 kata indiren teknikler bütünü.]]></description>
            <content:encoded><![CDATA[<h1 id="modern-motorlar-bitki-ortusu-overdraw-sorununu-nasıl-asıyor" tabindex="-1">Modern motorlar bitki örtüsü overdraw sorununu nasıl aşıyor <a class="header-anchor" href="#modern-motorlar-bitki-ortusu-overdraw-sorununu-nasıl-asıyor" aria-label="Permalink to &quot;Modern motorlar bitki örtüsü overdraw sorununu nasıl aşıyor&quot;"></a></h1>
<p><em>Cinevva CTO'su ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<img src="/img/blog/foliage_overdraw_hero.webp" alt="Batan güneşin önünde üst üste dizilmiş yaprak kartlarından oluşan, yoğun overdraw'u çağrıştıran sık bir orman örtüsü" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Bir orman, GPU'dan render etmesini isteyebileceğiniz en zorlu şeylerden biridir. Her yaprak, alfa maskesiyle kesilmiş dokulu bir dörtgendir. Her görüş ışını boyunca bu dörtgenlerden onlarcası üst üste biner. Rasterleştiricinin hangi fragment'lerin alfa testini geçeceğini önceden bilmesinin bir yolu yoktur; dolayısıyla opak sahneleri kurtaran standart early-Z optimizasyonu büyük ölçüde devre dışı kalır. Bunun sonucunda tek bir ekran pikseli, kare tamamlanmadan önce tam yaprak shader'ını 10 veya 15 kez çalıştırabilir. Bitki örtüsü overdraw'u budur ve son on yılda yayımlanan tüm açık dünya oyunlarında bir karenin en pahalı kısmıdır.</p>
<p>İyi haber şu ki bu, çözülmüş bir problemdir. Birinin tek bir numarayla sorunu ortadan kaldırması anlamında değil; yedi veya sekiz tekniğin bir araya gelerek yoğun bir ormandaki efektif overdraw'u 8-15 kattan 1-2 kata düşürmesi anlamında. Her modern motor bu teknikler bütününün bir sürümünü kullanır. Şimdi bunun neler içerdiğine, her parçanın neden var olduğuna ve her biri için temel kaynaklara bakalım.</p>
<h2 id="_1-bitki-ortusu-overdraw-u-neden-bu-kadar-maliyetli" tabindex="-1">1. Bitki örtüsü overdraw'u neden bu kadar maliyetli? <a class="header-anchor" href="#_1-bitki-ortusu-overdraw-u-neden-bu-kadar-maliyetli" aria-label="Permalink to &quot;1. Bitki örtüsü overdraw'u neden bu kadar maliyetli?&quot;"></a></h2>
<p>Tipik bir opak sahnede GPU, erken derinlik reddi uygular: piksel shader'ı daha çalışmadan donanım mevcut derinlik tamponunu kontrol eder ve zaten başka bir şeyin arkasında kalan fragment'leri atlar. Bunun maliyeti neredeyse yoktur ve yoğun geometrinin maliyetini makul düzeyde tutan şey de budur.</p>
<p>Alfa testli bitki örtüsü bunu bozar. Fragment shader'ın alfa dokusunu değerlendirmek ve maskeyle dışarıda bırakılan pikseller için <code>discard</code> (veya <code>clip</code>) çağırmak üzere gerçekten çalışması gerekir. Donanım, shader çalışana kadar bir fragment'in elenip elenmeyeceğini bilemez; bu nedenle çoğu GPU'da shader'ın herhangi bir yerinde <code>discard</code> kullanılması, ilgili draw call için early-Z'yi tamamen devre dışı bırakır. Tile tabanlı GPU'larda (mobil, M serisi, bazı konsollar) tüm kare için Hi-Z'yi ve derinlik sıkıştırmasını devre dışı bırakabilir. Piksel shader'ı, bir pikseli kaplayan her üçgen için bir kez çalışır ve bu değerlendirmelerin çoğu discard ile sonuçlanır.</p>
<p>Tek bir ekran pikselinin önüne 10 yaprak dörtgeni yerleştirdiğinizde yaprak shader'ı 10 kez çalışır. Bunu 4 milyon pikselle çarpınca maliyet korkunç hâle gelir. Marco Salvi'nin <a href="https://therealmjp.github.io/posts/to-earlyz-or-not-to-earlyz/" target="_blank" rel="noreferrer">Early-Z Kullanmalı mı, Kullanmamalı mı?</a> başlıklı yazısı, bunun donanım düzeyinde neden gerçekleştiğini en anlaşılır şekilde ele alan kaynaklardan biridir ve konuyu daha önce hiç düşünmediyseniz başlamak için doğru yerdir.</p>
<img src="/img/blog/foliage_overdraw_layers.webp" alt="Üst üste binen on iki yaprak kartının içinden geçen tek bir ekran pikseli ışınının yandan görünümü; üst üste yığılan alfa testli fragment'leri göstermek için her kart vurgulanmış" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<h2 id="_2-maskeli-geometri-icin-derinlik-on-gecisi" tabindex="-1">2. Maskeli geometri için derinlik ön geçişi <a class="header-anchor" href="#_2-maskeli-geometri-icin-derinlik-on-gecisi" aria-label="Permalink to &quot;2. Maskeli geometri için derinlik ön geçişi&quot;"></a></h2>
<p>Tek başına en büyük kazanımı sağlayan ve her modern motorun kullandığı teknik, bitki örtüsü çizimini iki geçişe ayırmaktır. İlk geçiş yalnızca derinlik yazar; alfa testini yapan, maskelenmiş pikselleri atan ve başka hiçbir şey yazmayan minimal bir shader kullanır. İkinci geçiş, derinlik testi &quot;equal&quot; olarak ve derinlik yazımı kapalı şekilde tam materyali render eder. Böylece her görünür piksel, arkasında kaç yaprak dörtgeni üst üste binmiş olursa olsun tam BRDF'yi tam olarak bir kez hesaplar.</p>
<p>Aynı üçgenlere iki kez dokunulduğu için bu, iki kat iş gibi gelebilir. Ancak ön geçiş shader'ı o kadar ucuzdur ki (bir doku örneği, bir discard, bir derinlik yazımı), ana geçişteki tasarruf ek maliyeti fazlasıyla aşar. Yoğun bir ormanda ana geçiş, tam yaprak shader'ını piksel başına 10-15 kez çalıştırmak yerine tam olarak bir kez çalıştırır.</p>
<p>Unreal, Frostbite, Decima ile modern Rage ve Dunia dallarının tümü bunu yapar. Bu aynı zamanda maskeli materyallerin bu motorların hepsinde hâlâ yarı saydam materyallerden daha ucuz olmasının temel nedenidir.</p>
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Pettineo, <a href="https://therealmjp.github.io/posts/to-earlyz-or-not-to-earlyz/" target="_blank" rel="noreferrer">Early-Z Kullanmalı mı, Kullanmamalı mı?</a> (<code>discard</code> ile Hi-Z ve early-Z arasındaki etkileşimi açıklayan temel kaynak).</li>
<li>Wihlidal, <a href="http://www.frostbite.com/2016/03/optimizing-the-graphics-pipeline-with-compute/" target="_blank" rel="noreferrer">Compute ile Grafik İşlem Hattını Optimize Etmek</a> (GDC 2016, Frostbite'ın derinlik ön geçişi ve ön geçiş güdümlü ayıklama mimarisi).</li>
<li>Sanders, <a href="https://www.gdcvault.com/play/1025066/Between-Tech-and-Art-The" target="_blank" rel="noreferrer">Teknoloji ile Sanat Arasında: Horizon Zero Dawn'ın Bitki Örtüsü</a> (GDC 2018, Decima'nın iki geçişli bitki örtüsü render sistemiyle birlikte).</li>
<li>Persson, <a href="http://www.humus.name/index.php?page=News&amp;ID=255" target="_blank" rel="noreferrer">Z Hakkında Birkaç Not</a> (depth-equal testi ve ön geçiş ekonomisini hâlâ en net açıklayan kaynaklardan biri).</li>
</ul>
<h2 id="_3-agresif-lod-lar-ve-oktahedral-imposter-lar" tabindex="-1">3. Agresif LOD'lar ve oktahedral imposter'lar <a class="header-anchor" href="#_3-agresif-lod-lar-ve-oktahedral-imposter-lar" aria-label="Permalink to &quot;3. Agresif LOD'lar ve oktahedral imposter'lar&quot;"></a></h2>
<p>İkinci en büyük kazanım, gerekmediğinde yaprakları hiç çizmemektir. Bitki örtüsü varlıkları birkaç LOD kademesiyle gelir. En yakındaki kademe, ayrı yaprak kartları içeren tam mesh'tir. Orta mesafede yapraklar daha yoğun birleşik kartlara dönüştürülür (30 yapraktan oluşan bir küme, aynı silüete sahip tek bir dokulu karta dönüşür). Belirli bir mesafe eşiğinin ötesinde ağacın tamamı bir <em>imposter</em>'a dönüşür: ağacın birçok açıdan önceden render edilmiş görüntüleriyle dokulanan küçük bir geometri parçası.</p>
<p>Modern imposter biçimi <strong>oktahedral imposter</strong>'dır: oktahedral eşleme kullanılarak bir küre üzerindeki noktalardan yakalanan görüntü atlasıyla dokulanmış, 8 yüzlü bir geometri parçası. Çalışma zamanında shader, kamera yönüne göre önceden render edilmiş en yakın iki veya üç görünümü seçer ve bunlar arasında geçiş yapar. Sonuç, her açıdan 3B görünen ve düzgün gölgelendirme, normal map'ler, hatta rüzgâr animasyonu sunabilen, yalnızca birkaç üçgenden oluşan bir temsildir. Başlangıçta topluluk eklentisi olan ve artık Unreal'ın bir parçası hâline gelen Ryan Brucks uygulaması, bu konudaki temel referanstır. Microsoft Flight Simulator'ın milyarlarca ağaçtan oluşan ormanları, kamera yakını dışında esasen tamamen oktahedral imposter'lardan oluşur.</p>
<p>Daha büyük yapısal kazanım, imposter'ların uzaktan <em>opak veya opaklığa yakın</em> olmasıdır. 30 yapraklı birleşik kart, 30 dörtgen yerine tek bir maskeli dörtgendir. Tüm ağacı temsil eden imposter, binlerce yüz yerine yalnızca birkaç yüzden oluşur. Uzak alan overdraw'u neredeyse sıfıra iner.</p>
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Brucks, <a href="https://shaderbits.com/blog/octahedral-impostors" target="_blank" rel="noreferrer">Oktahedral Imposter'lar</a> (matematiği ve UE uygulamasıyla birlikte temel kaynak).</li>
<li>Halen, <a href="https://dev.epicgames.com/community/learning/tutorials/JmL3/octahedral-impostors-unreal-engine" target="_blank" rel="noreferrer">Unreal Engine'de Oktahedral Imposter'lar</a> (entegre UE iş akışı).</li>
<li>Häggström, <a href="https://www.diva-portal.org/smash/get/diva2:1135856/FULLTEXT01.pdf" target="_blank" rel="noreferrer">Bitki Örtüsünün Gerçek Zamanlı Render Edilmesi</a> (LOD zincirlerini, imposter'ları ve bunların arkasındaki matematiği ele alan anlaşılır bir tez).</li>
<li>Crytek, <a href="http://developer.nvidia.com/gpugems/gpugems3/part-i-geometry/chapter-4-next-generation-speedtree-rendering" target="_blank" rel="noreferrer">CryEngine 3'te SpeedTree Entegrasyonu</a> (GPU Gems 3, ağaç LOD zincirleri için hâlâ en iyi giriş kaynaklarından biri).</li>
</ul>
<h2 id="_4-kume-ve-gpu-gudumlu-ayıklama" tabindex="-1">4. Küme ve GPU güdümlü ayıklama <a class="header-anchor" href="#_4-kume-ve-gpu-gudumlu-ayıklama" aria-label="Permalink to &quot;4. Küme ve GPU güdümlü ayıklama&quot;"></a></h2>
<p>Derinlik ön geçişi kullanılsa bile ön geçişin kendisi maliyetlidir: görünür veya görünür olma ihtimali bulunan her ağacın her üçgenine yine de <em>dokunması</em> gerekir. Modern motorlar, rasterleştiriciye ulaşmadan önce üçgen gruplarının tamamını atan GPU güdümlü küme ayıklama ile bu maliyeti azaltır.</p>
<p>İşlem hattı şu şekilde işler: her mesh önceden, sıkı bir sınırlayıcı kutuya ve normal konisine sahip 64 veya 128 üçgenlik kümelere ayrılır. Render sırasında bir compute shader örnek listesini dolaşır, her örneği görüş hacmi testinden geçirir, ardından görünür her örneğin tüm kümelerini görüş hacmi testinden geçirir ve son olarak hayatta kalan her kümeyi önceki karenin derinlik piramidine karşı <em>Hi-Z örtülme testine</em> tabi tutar. Bir tepenin veya başka bir ağacın arkasında kalan tüm ağaç dalları, herhangi bir vertex shader çalışmadan önce ayıklanır. Çıktı, doğrudan tek bir <code>DrawIndirect</code> çağrısına aktarılan kompakt bir &quot;bu kümeleri çiz&quot; argümanları listesidir.</p>
<p>10.000 ağaçlık bir ormanın saniyeler yerine milisaniyeler içinde render edilmesini sağlayan şey budur. Ubisoft'un Assassin's Creed Unity sunumu bu işlem hattını üretimde kullanılan biçimiyle tanıttı (üçgenlerin %20-40'ı, gölge üçgenlerinin %30-80'i ayıklanıyor ve önceki nesle göre ekranda 10 kat daha fazla örnek gösteriliyor); Wihlidal'ın Frostbite sunumuysa bunu daha ileri taşıdı. UE5 Nanite bu gelişim çizgisinin görünür son noktasıdır: piksel düzeyine kadar küme ayıklama.</p>
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Haar ve Aaltonen, <a href="https://advances.realtimerendering.com/s2015/aaltonenhaar_siggraph2015_combined_final_footer_220dpi.pdf" target="_blank" rel="noreferrer">GPU Güdümlü Render İşlem Hatları</a> (SIGGRAPH 2015, temel niteliğindeki Assassin's Creed Unity sunumu).</li>
<li>Wihlidal, <a href="http://www.frostbite.com/2016/03/optimizing-the-graphics-pipeline-with-compute/" target="_blank" rel="noreferrer">Compute ile Grafik İşlem Hattını Optimize Etmek</a> (GDC 2016, Frostbite'ın GPU güdümlü ön geçişi).</li>
<li>Karis, Stubbe, Wihlidal, <a href="https://advances.realtimerendering.com/s2021/Karis_Nanite_SIGGRAPH_Advances_2021_final.pdf" target="_blank" rel="noreferrer">Nanite Sanallaştırılmış Geometriye Derinlemesine Bakış</a> (SIGGRAPH 2021, meshlet ayrıntı düzeyinde küme ayıklama).</li>
<li>Liktor, <a href="https://research.activision.com/publications/2021/09/geometry-rendering-pipeline-architecture-at-activision" target="_blank" rel="noreferrer">Activision'da Geometri Render İşlem Hattı Mimarisi</a> (Call of Duty'nin küme ayıklama sürümü, 2021).</li>
</ul>
<h2 id="_5-onden-arkaya-ornek-ve-kume-sıralama" tabindex="-1">5. Önden arkaya örnek ve küme sıralama <a class="header-anchor" href="#_5-onden-arkaya-ornek-ve-kume-sıralama" aria-label="Permalink to &quot;5. Önden arkaya örnek ve küme sıralama&quot;"></a></h2>
<p>Ön geçiş görevini yerine getirmeye başladığında <em>sıralama</em> önem kazanır. Ön geçiş derinlik yazar, ancak yalnızca alfa testini geçen fragment'ler için. Önce ormanın arkasını, en son da önünü çizerseniz öndeki her fragment arkadaki bir fragment'in üzerine yazılır ve ön geçiş shader'ı arkadakiler için yine çalışır. Önden arkaya doğru çizerseniz birbirini izleyen her çizim, derinlik tamponunun daha büyük bir bölümünü daha küçük değerlerle doldurur; böylece Hi-Z, arkadaki fragment'lerin giderek daha fazlasını shader çalışmadan önce reddeder.</p>
<p>Bu nedenle neredeyse tüm modern motorlar ön geçişi başlatmadan önce bitki örtüsü örneklerini kameraya olan mesafelerine göre sıralar. Sıralama ucuzdur (GPU'da radix sort ile birkaç yüz bin örnek) ve ön geçişin kendisini, kendi yükünü azaltan bir işleme dönüştürür. Küme düzeyindeki ayıklama da aynı nedenle meshlet ayrıntı düzeyinde sıralama yapar. Derinlik ön geçişi ile önden arkaya sıralama, tek başlarına iyi ama birlikte harika olan teknik çiftlerindendir.</p>
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Persson, <a href="http://www.humus.name/Articles/Persson_DepthInDepth.pdf" target="_blank" rel="noreferrer">Derinliğin Derinliklerine</a> (derinlik tamponu sıralaması, ön geçiş ekonomisi ve Hi-Z davranışı üzerine mimari notlar).</li>
<li>Giesen, <a href="https://fgiesen.wordpress.com/2011/07/04/a-trip-through-the-graphics-pipeline-2011-part-7/" target="_blank" rel="noreferrer">Grafik İşlem Hattında Bir Yolculuk</a> (Hi-Z reddetme oranının çizim sırasına nasıl bağlı olduğunu ayrıntılı biçimde açıklayan teknik kaynak).</li>
<li>Wihlidal, <a href="http://www.frostbite.com/2016/03/optimizing-the-graphics-pipeline-with-compute/" target="_blank" rel="noreferrer">Compute ile Grafik İşlem Hattını Optimize Etmek</a> (GDC 2016, Frostbite'ın GPU tarafındaki örnek sıralamasını içerir).</li>
</ul>
<h2 id="_6-dither-uygulanmıs-lod-gecisleri-ve-hash-lenmis-alfa" tabindex="-1">6. Dither uygulanmış LOD geçişleri ve hash'lenmiş alfa <a class="header-anchor" href="#_6-dither-uygulanmıs-lod-gecisleri-ve-hash-lenmis-alfa" aria-label="Permalink to &quot;6. Dither uygulanmış LOD geçişleri ve hash'lenmiş alfa&quot;"></a></h2>
<p>Diğer büyük tuzak ise soldurmadır. İki LOD arasında geçiş yapmanın veya kamera yaklaşırken bir örneği görünür ya da görünmez hâle getirmenin basit yolu alfa harmanlamadır. Ancak harmanlanmış geometri derinlik tamponuna yazamaz; bu da soldurulan her ağacı yavaş yarı saydamlık yoluna sokar ve ön geçişi bozar. Çözüm, geometriyi maskeli yolda tutmak ve soldurmayı <em>alfa testinin içinde</em> gerçekleştirmektir.</p>
<p>İki ana teknik vardır:</p>
<ul>
<li><strong>Dither uygulanmış LOD geçişleri</strong>, 4x4 veya 8x8 Bayer deseni (ya da ekran uzayında bir blue-noise dokusu) örnekler ve bunu piksel başına kesme eşiği değiştiricisi olarak kullanır. %50 geçişteki bir ağacın dama tahtası desenindeki pikselleri hayatta kalır; eksik pikseller bir sonraki LOD'un tamamlayıcı dama tahtası deseniyle doldurulur. TAA, dama tahtası desenini iki veya üç kare içinde yumuşak bir geçişe dönüştürür. Ucuz ve kararlıdır; motordaki diğer her şeyle uyumlu biçimde harmanlanır.</li>
<li><strong>Hash'lenmiş alfa testi</strong> (Wyman &amp; McGuire, I3D 2017), sabit 0,5 alfa eşiğini [0,1) aralığında piksel başına hash'lenmiş bir eşikle değiştirir. Normalde tamamen kaybolacak uzak alfa geometrisi (mipmap uygulanmış alfa 0,5'in altına düştüğü için), hayatta kalan piksellerden oluşan kararlı bir dağılımı korur. Temizleme işini yine TAA yapar.</li>
</ul>
<p>Her iki teknik de bitki örtüsünü, derinlik ön geçişinin çalıştığı opak/maskeli yolda tutar; böylece yalnızca bir şeyi soldurmak için yarı saydam render işleminin tüm maliyetini ödemezsiniz. <strong>Alpha to coverage</strong>, aynı fikrin MSAA döneminden kalma akrabasıdır: alfayı alt piksel kapsam maskesine dönüştürür ve maskeli yoldan çıkmadan kısmi saydamlık sağlar. Ancak A2C yalnızca MSAA ile gerçek anlamda parlar ve çoğu modern deferred renderer artık MSAA kullanmaz.</p>
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Wyman ve McGuire, <a href="https://research.nvidia.com/labs/rtr/publication/wyman2017hashed/" target="_blank" rel="noreferrer">Hash'lenmiş Alfa Testi</a> (I3D 2017, hash'lenmiş alfa üzerine temel makale).</li>
<li>Castaño, <a href="http://the-witness.net/news/2010/09/computing-alpha-mipmaps/" target="_blank" rel="noreferrer">Alfa Mipmap'lerini Hesaplamak</a> (The Witness blogu, uzaktaki ağaçların kaybolmaması için alfa testli dokulara mipmap uygulamanın doğru yolu).</li>
<li>Yuksel, <a href="https://cemyuksel.com/research/alphadistribution/alpha_distribution.pdf" target="_blank" rel="noreferrer">Alfa Testi için Alfa Dağılımı</a> (alfa mipmap'leri üzerine daha yeni bir iyileştirme).</li>
<li>NVIDIA, <a href="https://developer.nvidia.com/content/transparency-or-translucency-rendering" target="_blank" rel="noreferrer">Kenar Yumuşatmalı Alfa Testi</a> (A2C, hash'lenmiş alfa ve dither uygulanmış alternatiflere genel bakış).</li>
</ul>
<h2 id="_7-maskeli-piksellerde-golgelendirme-maliyetini-azaltmak" tabindex="-1">7. Maskeli piksellerde gölgelendirme maliyetini azaltmak <a class="header-anchor" href="#_7-maskeli-piksellerde-golgelendirme-maliyetini-azaltmak" aria-label="Permalink to &quot;7. Maskeli piksellerde gölgelendirme maliyetini azaltmak&quot;"></a></h2>
<p>Kusursuz bir ön geçiş ve kusursuz ayıklama kullansanız bile görünür her bitki örtüsü pikselini yine de bir kez gölgelendirmeniz gerekir. Motorlar bu maliyeti de azaltır:</p>
<ul>
<li><strong>Daha ucuz BRDF</strong>. Bitki örtüsü mattır ve tam bir Cook-Torrance speküler yoluna pek ihtiyaç duymaz. Sarılmış Lambert dağılımlı difüz aydınlatma ile tek satırlık bir speküler yaklaşım fazlasıyla yeterlidir.</li>
<li><strong>Daha düşük frekanslı normal haritaları</strong>. Yapraklar zaten görsel açıdan karmaşıktır. 256x256 bir normal haritası, tipik izleme mesafelerinde 1024x1024 olanla aynı görünür ve bant genişliğinden tasarruf sağlar.</li>
<li><strong>Paralaks, anizotropi ve vernik katmanı yok</strong>. PBR özellikleri yapraklar için devre dışı bırakılır.</li>
<li>Tam yüzey altı saçılımı yerine <strong>iki taraflı ince geçirgenlik</strong>. Yapraklar arkadan gelen ışığı geçirir, ancak bunu arkadan aydınlatmaya yönelik tek bir nokta çarpımıyla taklit edebilirsiniz.</li>
<li>Bazı motorlarda <strong>yarı çözünürlüklü gölgelendirme</strong>. Bitki örtüsü 1/4 veya 1/2 piksel hızında gölgelendirilip üst ölçeklenir. TAA'nın stokastik gürültüsü yeniden örneklemeyi gizler.</li>
<li>Maskeli malzemelerde <strong>ayrıntı dokularını ve çıkartmaları varsayılan olarak atlama</strong>.</li>
</ul>
<p>Bunların her biri tek başına küçük bir kazanımdır. Birlikte kullanıldıklarında maskeli bitki örtüsü gölgelendiricileri, eşdeğer opak malzemeden 2-3 kat daha hızlı çalışabilir.</p>
<p>Ayrıntılı kaynaklar:</p>
<ul>
<li>Lagarde ve de Rousiers, <a href="https://seblagarde.wordpress.com/2015/07/14/siggraph-2014-moving-frostbite-to-physically-based-rendering/" target="_blank" rel="noreferrer">Frostbite'ı Fizik Tabanlı İşlemeye Taşımak 3.0, bitki örtüsü ve yarı saydamlık bölümleri</a> (SIGGRAPH 2014, iki taraflı ince malzemelere yönelik standart PBR ayarlamaları).</li>
<li>Jimenez, <a href="https://www.iryoku.com/stare-into-the-future" target="_blank" rel="noreferrer">Yeni Nesil Karakter İşleme</a> (başlangıçta cilt için geliştirilen, ancak yapraklara yaygın biçimde uyarlanan sarılmış Lambert dağılımı ve arkadan yarı saydamlık matematiği).</li>
<li>Sanders, <a href="https://www.gdcvault.com/play/1025066/Between-Tech-and-Art-The" target="_blank" rel="noreferrer">Teknoloji ile Sanat Arasında: Horizon Zero Dawn'ın Bitki Örtüsü</a> (GDC 2018, Decima'nın bitki örtüsü gölgelendiricisi sadeleştirmeleriyle birlikte).</li>
</ul>
<h2 id="_8-maskeli-malzemeler-icin-gorunurluk-tamponları-ve-nanite" tabindex="-1">8. Maskeli malzemeler için görünürlük tamponları ve Nanite <a class="header-anchor" href="#_8-maskeli-malzemeler-icin-gorunurluk-tamponları-ve-nanite" aria-label="Permalink to &quot;8. Maskeli malzemeler için görünürlük tamponları ve Nanite&quot;"></a></h2>
<p>Aşırı çizime verilebilecek en temiz yanıt, <em>gölgelendirmeyi rasterleştirmeden tamamen ayırmaktır</em>. Görünürlük tamponu, geometriyi ince bir tampona rasterleştirir (piksel başına yalnızca üçgen kimliği ve örnek kimliği), ardından görünürlük tamponunu okuyup her pikseli tam olarak bir kez gölgelendiren ertelenmiş bir geçişte tam malzemeyi çalıştırır. Tasarım gereği gölgelendirme aşamasında aşırı çizim yoktur. Burns ve Hunt'ın 2013 tarihli makalesi bu yaklaşımı tanıttı; UE 5.5 itibarıyla maskeli bitki örtüsünü de destekleyen UE5 Nanite ise bunun üretim kalitesindeki uygulamasıdır.</p>
<p>Nanite'ın farkı, bunu küme düzeyinde sanallaştırılmış geometriyle yapmasıdır; böylece rasterleştiricinin kendisi alt piksel boyutundaki üçgenler için bir yazılım yolu üzerinde çalışır ve aşırı çizimi sınırlı tutar. Nanite'taki maskeli malzemeler &quot;programlanabilir rasterleştirme&quot; özelliğine ihtiyaç duyar: alfa testi görünürlük tamponu geçişi sırasında çalışır, ancak malzeme gölgelendirmesi ertelenmiş çözümleme aşamasında görünür piksel başına yine yalnızca bir kez yapılır. Sonuç olarak, bir zamanlar maskeli malzemelerde yavaşlığıyla bilinen çok yoğun Nanite bitki örtüsü artık opak malzemelerle rekabet edebilir, hatta onlardan daha ucuz olabilir; çünkü gölgelendirme sırasındaki aşırı çizim sıfırdır. Bunun bir ödünleşimi vardır: Maskeli yol programlanabilir rasterleştirme maliyeti eklediğinden, düşük poligonlu maskeli kartlardan oluşan ağaçları korumak yerine yüksek poligonlu <em>opak</em> ağaç geometrisini Nanite üzerinden geçirmek çoğu zaman daha iyidir.</p>
<p>Ayrıntılı kaynaklar:</p>
<ul>
<li>Burns ve Hunt, <a href="http://jcgt.org/published/0002/02/04/" target="_blank" rel="noreferrer">Görünürlük Tamponu: Ertelenmiş Gölgelendirmeye Önbellek Dostu Bir Yaklaşım</a> (JCGT 2013, özgün makale).</li>
<li>Karis, Stubbe, Wihlidal, <a href="https://advances.realtimerendering.com/s2021/Karis_Nanite_SIGGRAPH_Advances_2021_final.pdf" target="_blank" rel="noreferrer">Nanite Sanallaştırılmış Geometrisine Derinlemesine Bakış</a> (SIGGRAPH 2021, üretim mimarisi).</li>
<li>Epic, <a href="https://media.gdcvault.com/gdc2024/Slides/GDC+slide+presentations/Nanite+GPU+Driven+Materials.pdf" target="_blank" rel="noreferrer">Nanite GPU Güdümlü Malzemeler</a> (GDC 2024, maskeli malzeme ve programlanabilir rasterleştirme işlem hattıyla birlikte).</li>
<li><a href="https://www.sctheblog.com/blog/nanite-materials-notes/" target="_blank" rel="noreferrer">&quot;Nanite GPU Güdümlü Malzemeler&quot;den Notlar</a> (aynı sunumun üçüncü tarafça hazırlanmış anlaşılır bir incelemesi).</li>
</ul>
<h2 id="_9-bitki-ortusu-icin-ayrı-golge-temsilleri" tabindex="-1">9. Bitki örtüsü için ayrı gölge temsilleri <a class="header-anchor" href="#_9-bitki-ortusu-icin-ayrı-golge-temsilleri" aria-label="Permalink to &quot;9. Bitki örtüsü için ayrı gölge temsilleri&quot;"></a></h2>
<p>Alfa testi uygulanan bitki örtüsüne yönelik gölge haritaları, geniş basamaklardan sonra herhangi bir açık dünya karesindeki en pahalı ikinci gölge problemidir. Her basamak kendi derinlik ön geçişine ihtiyaç duyar, her ön geçiş alfa testini çalıştırır ve maliyet 4 basamak ile düzinelerce ışık frustumu boyunca hızla birikir. Bu nedenle çoğu motor, bitki örtüsü gölgelerini bitki örtüsü rengini işlediği şekilde işlemez.</p>
<p>Yaygın alternatifler:</p>
<ul>
<li><strong>Örgü mesafe alanı gölgeleri</strong> (UE Lumen, özel motorlar). Her örgü, önceden hesaplanmış bir işaretli mesafe alanına sahiptir. SDF içinden yapılan kısa bir koni izleme, alfa testi uygulanan örgüye hiç dokunmadan yumuşak bir gölge üretir. Bu yöntem özellikle ağaçlar için uygundur; çünkü SDF, taç silüetini tek bir katı kütle olarak yakalar ve yaprak başına ayrıntıları yok sayar.</li>
<li><strong>Bitki örtüsü için daha düşük çözünürlüklü basamaklar</strong>. Bitki örtüsü gölgeleri yarı çözünürlüklü bir dilime yazılır ve kenar duyarlı filtrelemeyle üst örneklenir. Gölgeler zaten yumuşak olduğundan göz çözünürlük düşüşünü fark etmez.</li>
<li><strong>MSAA ile alfadan kapsama gölge haritaları</strong>. Gölge yolunda hâlâ MSAA bulunan motorlarda A2C, tam alfa testi maliyeti olmadan yumuşak kenarlı bitki örtüsü gölgeleri sağlar.</li>
<li><strong>Gövde ve büyük dallar için kapsül gölgeleri</strong>, taç için mesafe alanı ve yalnızca en yakın basamakta tam alfa testi. Farklı mesafeler için farklı temsiller kullanılır ve bunlar aydınlatma geçişinde harmanlanır.</li>
<li><strong>WPO devre dışı bırakma mesafesi</strong>. Rüzgâr güdümlü World Position Offset, önbelleğe alınmış gölge verilerinin kareler boyunca geçerli kalması için belirli bir eşiğin ötesinde kapatılır. UE'nin Virtual Shadow Maps sistemi buna yoğun biçimde dayanır.</li>
</ul>
<p>Ayrıntılı kaynaklar:</p>
<ul>
<li>Epic, <a href="https://dev.epicgames.com/documentation/unreal-engine/distance-field-soft-shadows-in-unreal-engine" target="_blank" rel="noreferrer">Unreal Engine'de Mesafe Alanlı Yumuşak Gölgeler</a> (örgü mesafe alanı gölgeleri için standart UE kaynağı).</li>
<li>Wright, <a href="https://advances.realtimerendering.com/s2022/SIGGRAPH2022-Advances-Lumen-Wright%20et%20al.pdf" target="_blank" rel="noreferrer">Lumen: Unreal Engine 5'te Gerçek Zamanlı Global Aydınlatma</a> (SIGGRAPH 2022, Lumen'ın bitki örtüsüne yönelik örgü SDF entegrasyonuyla birlikte).</li>
<li>Epic, <a href="https://dev.epicgames.com/documentation/en-us/unreal-engine/virtual-shadow-maps-in-unreal-engine" target="_blank" rel="noreferrer">Sanal Gölge Haritaları</a> (bitki örtüsüne özgü WPO devre dışı bırakma ve önbelleğe alma kurallarıyla modern UE5 gölge mimarisi).</li>
<li>Persson, <a href="https://www.humus.name/index.php?page=3D&amp;ID=81" target="_blank" rel="noreferrer">Pratik Basamaklı Gölge Haritaları</a> (alfa testi uygulanan gölge oluşturucularla ilgili notlar içeren, hâlâ standart kabul edilen CSM kaynağı).</li>
</ul>
<h2 id="_10-ruzgar-animasyon-ve-golge-onbellege-alma" tabindex="-1">10. Rüzgâr, animasyon ve gölge önbelleğe alma <a class="header-anchor" href="#_10-ruzgar-animasyon-ve-golge-onbellege-alma" aria-label="Permalink to &quot;10. Rüzgâr, animasyon ve gölge önbelleğe alma&quot;"></a></h2>
<p>Bununla ilişkili incelikli bir problem daha vardır: Bitki örtüsünün çoğu hareket eder. Rüzgâr güdümlü tepe noktası animasyonu (UE'de World Position Offset, Frostbite ve Decima'daki eşdeğerleri), bitki örtüsü geometrisinin kareden kareye sabit kalmaması anlamına gelir; bu da gölge önbelleğe alma ve yeniden projeksiyonu bozar. Modern motorlar bununla iki şekilde mücadele eder:</p>
<ul>
<li><strong>WPO'yu mesafeye göre sınırlandırma</strong>. Belirli bir eşiğin ötesinde rüzgâr animasyonunun genliği yumuşak biçimde sıfıra iner. Göz zaten bu kadar uzaktaki sallanmayı göremez ve gölge önbellekleri geçerliliğini korur.</li>
<li><strong>Rüzgârı küme sınırlarına dahil etme</strong>. Küme sınırlayıcı kutuları, maksimum WPO ofseti kadar genişletilir; böylece her karede yeniden yükleme yapmadan ayıklama tutucu kalır.</li>
<li><strong>Örnek başına faz ofsetleri</strong>. Birbirinin aynısı ağaçlar, rüzgâr fazını kaydırmak için örnek başına rastgele bir tohum kullanır. Böylece orman, ağaç başına benzersiz animasyon maliyeti olmadan hep birlikte aynı ritimde sallanmaz.</li>
</ul>
<p>Bu, teknik listelerinde görünmeyen ancak uygulamada 3 ms'lik bir orman ile 9 ms'lik bir orman arasındaki farkı yaratan türden bir ayrıntıdır.</p>
<p>Ayrıntılı kaynaklar:</p>
<ul>
<li>Sanders, <a href="https://www.gdcvault.com/play/1025066/Between-Tech-and-Art-The" target="_blank" rel="noreferrer">Teknoloji ile Sanat Arasında: Horizon Zero Dawn'ın Bitki Örtüsü</a> (GDC 2018, Decima rüzgâr animasyonu işlem hattı ve gölge önbelleğe almayla birlikte).</li>
<li>McAuley, <a href="https://www.gdcvault.com/play/1022235/Rendering-the-World-of-Far" target="_blank" rel="noreferrer">Far Cry 4 Dünyasının İşlenmesi</a> (GDC 2015, bitki örtüsüne yönelik rüzgâr ızgarası örneklemesini içerir).</li>
<li>Epic, <a href="https://dev.epicgames.com/community/learning/tutorials/qLk6/unreal-engine-virtual-shadow-maps" target="_blank" rel="noreferrer">Bitki Örtüsü ve Sanal Gölge Haritaları</a> (WPO devre dışı bırakma mesafesi ve VSM önbelleğe alma konusunda UE5 topluluk rehberi).</li>
</ul>
<h2 id="_11-birlesik-matematik" tabindex="-1">11. Birleşik matematik <a class="header-anchor" href="#_11-birlesik-matematik" aria-label="Permalink to &quot;11. Birleşik matematik&quot;"></a></h2>
<p>Bu tekniklerin hiçbiri tek başına kusursuz bir çözüm değildir. İlginç olan, bunları üst üste kullandığınızda ne olduğudur:</p>
<ul>
<li>Yoğun bir orman sahnesindeki basit bir maskeli bitki örtüsü geçişi, 8-15 kat etkin aşırı çizim ölçer. Görünür her piksel, yaprak gölgelendiricisini 8 ila 15 kez çalıştırır.</li>
<li>Bir derinlik ön geçişi eklendiğinde ana geçiş yaklaşık 1 kat aşırı çizime iner, ancak ön geçişin kendisi hâlâ her şeye dokunur.</li>
<li>Önden arkaya sıralama eklendiğinde ön geçiş kendi içeriğini ayıklamaya başlar.</li>
<li>Küme düzeyinde GPU ayıklama eklendiğinde ön geçiş yalnızca görünür olma ihtimali bulunan öğelere dokunur.</li>
<li>LOD zincirleri ve sahte görünümler eklendiğinde, 30 metrenin ötesindeki görünür dörtgen <em>sayısı</em> bir büyüklük mertebesi azalır.</li>
<li>Görünürlük tamponu / Nanite yolu eklendiğinde gölgelendirme aşaması, yoğun örtüşmede bile gerçekten piksel başına bir kez çalışır.</li>
<li>Mesafe alanı gölgeleri eklendiğinde gölge maliyeti artık alfa testiyle birlikte ölçeklenmez.</li>
</ul>
<p>Yukarıda bağlantısı verilen sunumlarda tekrarlanan temel sonuç şudur: Etkin aşırı çizim 8-15 kattan 1-2 kata iner ve yoğun bir orman sahnesindeki toplam bitki örtüsü kare maliyeti 4-6 kat azalır. Modern açık dünya oyunlarının tüketici donanımlarında ormanları 60+ fps hızında işleyebilmesinin tüm nedeni budur.</p>
<img src="/img/blog/foliage_overdraw_pipeline.webp" alt="Bitki örtüsü işleme hattını üst üste dizilmiş beş aşama olarak gösteren diyagram: GPU ayıklama, sıralanmış ön geçiş, eşit derinlikli maskeli renk geçişi, görünürlük tamponu gölgelendirmesi ve ayrı mesafe alanı gölge yolu" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<h2 id="_12-bunun-tarayıcı-icin-anlamı" tabindex="-1">12. Bunun tarayıcı için anlamı <a class="header-anchor" href="#_12-bunun-tarayıcı-icin-anlamı" aria-label="Permalink to &quot;12. Bunun tarayıcı için anlamı&quot;"></a></h2>
<p>Bu yığının büyük bölümü WebGPU'ya kolayca uyarlanabilir. <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Açık dünya tarayıcı motorunda</a> GPU güdümlü ayıklama, dolaylı yürütme, Hi-Z örtülme ve önden arkaya sıralanmış ön geçişleri zaten kullanıma sunduk. Maskeli geometriye yönelik derinlik ön geçişi oldukça basittir: WebGPU, erken Z ile ilgili aynı sınırlamalarla birlikte derinlik eşitliği testini ve parça gölgelendiricilerinde <code>discard</code> kullanımını destekler. Oktahedral sahte görünümler doğrudan uyarlanabilir; gereken matematik yalnızca küreden oktahedrona açılım ve atlas indekslemesidir.</p>
<p>Daha zor olanlar modern tekniklerdir. WebGPU'da bir görünürlük tamponu, bir işleme hedefine 32 bitlik üçgen kimliği yazmayı ve malzemeleri tam ekran bir hesaplama geçişinde çözümlemeyi gerektirir; yapı taşları mevcuttur, ancak bunların düzenlenmesi zahmetlidir. Örgü mesafe alanı gölgeleri varlık başına bir 3B doku ve kısa bir koni izleme ister; bunların ikisi de WebGPU'nun kapasitesi dahilindedir. Karma tabanlı alfa ve titreşimli LOD'ların her biri yalnızca bir gölgelendirici işlevi gerektirir.</p>
<p>Tarayıcı tabanlı bitki örtüsü için izlenecek yol, bu yığındaki diğer her şeyle aynıdır: Önce ucuz ve sağlam parçaları (ön geçiş, sıralanmış örnekler, LOD'lar, sahte görünümler, karma tabanlı alfa) kullanıma sunup ağır mekanizmaları (görünürlük tamponu, örgü SDF gölgeleri) bunların üzerine eklemek. Tarayıcı donanımlarının alt sınırı nihayet yeterince yükseldi; dolayısıyla bir WebGPU ormanının konsoldaki gibi görünmemesi ve çalışmaması için mimari bir neden yok. Yalnızca mühendislik kaynaklı nedenler var ve biz de en çok bu tür nedenleri seviyoruz.</p>
<h2 id="yıgının-tamamı-icin-ek-okumalar" tabindex="-1">Yığının tamamı için ek okumalar <a class="header-anchor" href="#yıgının-tamamı-icin-ek-okumalar" aria-label="Permalink to &quot;Yığının tamamı için ek okumalar&quot;"></a></h2>
<p>Tüm bunları bir araya getiren tek bir kaynak istiyorsanız SIGGRAPH'ın &quot;Oyunlarda Gerçek Zamanlı İşlemedeki Gelişmeler&quot; arşivinde (<a href="https://advances.realtimerendering.com/" target="_blank" rel="noreferrer">advances.realtimerendering.com</a>), 2014'e kadar uzanan standart bitki örtüsü ve GPU güdümlü işleme sunumları bulunur. Adrian Courrèges'in <a href="http://www.adriancourreges.com/blog/" target="_blank" rel="noreferrer">GPU profil çıkarma makaleleri</a>, burada ele alınan her geçişi üretimdeki sırasıyla gösteren GTA V ve Horizon Zero Dawn karelerinin tek tek incelemelerini içerir. Özellikle alfa testi matematiği için Chris Wyman'ın <a href="https://cwyman.org/" target="_blank" rel="noreferrer">araştırma sayfasında</a> referans gölgelendiricilerle birlikte karma tabanlı alfa ve stokastik şeffaflık makaleleri yer alır. Ayrıca <a href="https://www.realtimerendering.com/" target="_blank" rel="noreferrer">Real-Time Rendering, 4. baskı</a> kitabının şeffaflık, örnekleme ve derinlik işleme hakkındaki bölümleri hâlâ temel başlangıç noktasıdır.</p>
]]></content:encoded>
            <enclosure url="https://app.cinevva.com/img/blog/foliage_overdraw_hero.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık bir dünya inşa etmek, bölüm 25: Tek iskelet, her kıyafet]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-05-10-open-world-browser-part-25-universal-characters</link>
            <guid>https://app.cinevva.com/tr/blog/2026-05-10-open-world-browser-part-25-universal-characters</guid>
            <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spike 50, CC0 lisanslı bir karakter paketinin avatar özelleştirme ürününün tüm yükünü taşıyıp taşıyamayacağını test etti. Dört Quaternius paketinin bilinçli olarak aynı 65 eklemli iskeleti paylaştığı ortaya çıktı; böylece spike, bir animasyon iş akışı probleminden ada göre iskelet yeniden bağlama çalışmasına dönüştü.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-bir-dunya-insa-etmek-bolum-25-tek-iskelet-her-kıyafet" tabindex="-1">Tarayıcıda açık bir dünya inşa etmek, bölüm 25: Tek iskelet, her kıyafet <a class="header-anchor" href="#tarayıcıda-acık-bir-dunya-insa-etmek-bolum-25-tek-iskelet-her-kıyafet" aria-label="Permalink to &quot;Tarayıcıda açık bir dünya inşa etmek, bölüm 25: Tek iskelet, her kıyafet&quot;"></a></h1>
<p><em>Cinevva CTO'su ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p><a href="/tr/blog/2026-05-09-open-world-browser-part-24-persistence-and-wind.html">24. Bölüm</a>, dünyayı kalıcı hâle getirdi ve bitki örtüsüne rüzgâr ekledi. Bu bölüm yine dünyadaki insanlarla, ancak bu kez gardırop açısından ilgili: Bir içerik üreticisi temel bir vücut seçip kıyafetleri değiştirebilir, bir saç modeli belirleyebilir ve tamamen ücretsiz bir varlık paketiyle, rigleme ya da animasyon hazırlama gerektirmeden herhangi bir animasyonu oynatabilir mi? Riski azaltmak için özel bir rig oluşturmak doğru hedef değil. Yanıtlanması gereken asıl soru, bir CC0 paketinin tüm yükü taşıyıp taşıyamayacağı.</p>
<h2 id="birlikte-uyumlu-calısmak-uzere-hazırlanmıs-bir-paket" tabindex="-1">Birlikte uyumlu çalışmak üzere hazırlanmış bir paket <a class="header-anchor" href="#birlikte-uyumlu-calısmak-uzere-hazırlanmıs-bir-paket" aria-label="Permalink to &quot;Birlikte uyumlu çalışmak üzere hazırlanmış bir paket&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/50-universal-characters/" title="Spike 50 Evrensel Karakterler" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/50-universal-characters/" target="_blank">Spike 50'yi yeni bir sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=50-universal-characters">Kaynak kodunu görüntüle</a></p>
<p>Quaternius, neredeyse kuşku uyandıracak kadar iyi örtüşen dört varlık sunuyor: erkek ve kadın vücutlarının yanı sıra sekiz saç modeli ve iki kaş seti içeren Universal Base Characters; omuz zırhları ve kapüşon gibi aksesuarlarla birlikte gövde, kol, bacak ve ayak parçalarına ayrılan Modular Character Outfits; ayrıca hareket, dövüş, tırmanma, çiftçilik, balıkçılık, bekleme ve sosyal hareketleri kapsayan toplam 262 kliplik Universal Animation Library birinci ve ikinci paketleri. glTF dosyalarını incelemek, bunların neden birbiriyle uyumlu olduğunu ortaya çıkardı: Dört paketteki her bir mesh, bilinçli olarak aynı 65 eklemli UE5 tarzı iskelete riglenmiş; eklem adları ve bind pozları aynı, yapı kökten pelvise ve omurga üzerinden başa uzanıyor, her iki tarafta on beşer parmak eklemi bulunan aynalanmış kollar ve aynalanmış bacaklar yer alıyor. Yeniden hedefleme gerekmiyor. Bu, 213 kemikli bir yüz riginin 65 kemikli bir Mixamo rigiyle iletişim kurmak zorunda olduğu Spike 35'teki üç iskeletli yeniden hedefleme probleminin tam tersi. Burada dört paketin tamamı bilinçli olarak animasyon kütüphanesinin iskeleti üzerinde hazırlanmış ve eşleşme kusursuz.</p>
<p>Bu durum spike'ı bir animasyon iş akışı çalışması olmaktan çıkarıp bağlama çalışmasına dönüştürdü. Temel katman bir vücut glTF'si yüklüyor, kemik değişikliklerinin yükleyicinin önbelleğe alınmış sahnesine geri aktarılmasını önlemek ve her karaktere yeni bir iskelet örneği vermek için sahneyi <code>SkeletonUtils.clone</code> ile klonluyor, ardından bu 65 kemikli iskeleti ve animasyonun kökünü oluşturan armature nesnesini standart olarak önbelleğe alıyor.</p>
<h2 id="bir-ceketi-vucuda-yeniden-baglamak" tabindex="-1">Bir ceketi vücuda yeniden bağlamak <a class="header-anchor" href="#bir-ceketi-vucuda-yeniden-baglamak" aria-label="Permalink to &quot;Bir ceketi vücuda yeniden bağlamak&quot;"></a></h2>
<p>Tüm sistemi çalıştıran püf noktası, bir kıyafetin mesh'ini doğrudan sahnede başka bir üst nesneye bağlayamamanızdır; çünkü mesh hâlâ farklı bir alt ağaçta bulunan kendi glTF'sindeki kemiklere referans verir. Köylü gövdesi ya da korucu bacakları gibi her modüler parça, aynı armature'ün kendi klonuna sahip ayrı bir SkinnedMesh olarak gelir. Bağlama işlemi, kaynak iskeletin kemiklerini özgün sıralarında dolaşır, her birini standart iskelette adına göre bulur ve kaynağın ters bind matrislerini yeniden kullanarak bu yeniden bağlanmış kemiklerden yeni bir <code>Skeleton</code> oluşturur; ardından kaynağın birim bind matrisiyle <code>SkinnedMesh.bind</code> çağrısı yapar. Mesh, bağlandıktan sonra kaynak sahnesinden ayrılır ve doğrudan karakter kökünün altına yerleştirilir. Bind matrisi, bağlama anındaki dünya dönüşümünü yakaladığı ve kök birim dönüşümde bulunduğu için mesh'in kendi dünya dönüşümü çıktıyı hiçbir zaman etkilemez; skinning işlemi artık tamamen paylaşılan kemikler üzerinden gerçekleşir.</p>
<p>Saç ve kaşlar da birer yuvadır ve yanlış bir varsayımı düzeltmemizi sağladılar. Klasör yapısında &quot;baş kemiğine riglenmiş&quot; ifadesi yer alıyordu; bu da saçın, önceden belirlenmiş bir ofsetle başa bağlanan statik bir mesh olacağını düşündürüyordu. Öyle değil. Her saç dosyası, 65 eklemin tamamına ağırlıklandırılmış bir SkinnedMesh'tir; uzun saçın ağırlıkları üst omurgaya ve boyna kadar yayıldığı için karakter aşağı baktığında saç doğal biçimde sarkar. Bu nedenle saç da herhangi bir kıyafet parçasıyla aynı ada göre yeniden bağlama yolunu izler. Tek özel durum, kıyafetin gövde yuvasıdır: Bu parça eklendiğinde kıyafetin temel vücudun içinden geçmesini önlemek için temel vücut mesh'i gizlenir. Kollar, bacaklar, ayaklar ve aksesuarlar ise doğrudan üst üste eklenir; çünkü paket, giysilerin cildi açıkta bıraktığı yerlerde temel vücut görünecek şekilde bu parçaların birlikte kullanılmasına uygun hazırlanmıştır.</p>
<h2 id="ucretsiz-262-animasyon" tabindex="-1">Ücretsiz 262 animasyon <a class="header-anchor" href="#ucretsiz-262-animasyon" aria-label="Permalink to &quot;Ücretsiz 262 animasyon&quot;"></a></h2>
<p>İskelet paylaşıldıktan sonra animasyon kısmı neredeyse heyecansız kalıyor. İki kütüphane glb'si yükleniyor, klipleri tek bir adlandırılmış listede birleştiriliyor ve bu kliplerdeki track adları tam eklem adlarına <code>bone.position</code>, <code>bone.quaternion</code> ve <code>bone.scale</code> aracılığıyla referans veriyor. Karakterin armature'ünü kök alan bir <code>AnimationMixer</code>, bu kemikleri adlarına göre bulup doğrudan hareket ettiriyor ve animasyonlar arasında geçiş yaparken crossfade uyguluyor. Görüntüleyicinin sağ panelinde 262 klibin tamamını içeren, filtrelenebilir ve kaynak etiketleri gösteren bir liste bulunuyor; böylece &quot;fish&quot; araması her iki kütüphanedeki tüm balıkçılık animasyonlarını ortaya çıkarıyor. Yumuşak gölgeli standart üç noktalı aydınlatma, ayakların altındaki kutupsal ızgara ve ACES ton eşleme, koyu renkli vücut giysisinin gölgelerini ezmeden stilize temel dokuların okunaklı kalmasını sağlıyor.</p>
<p>Bunun ürün açısından azalttığı risk oldukça büyük. Avatar özelleştirme özelliği, sıfır rigleme çalışması ve sıfır animasyon üretimiyle bir CC0 paketi üzerinden kullanıma sunulabilir: Dört paketi ekleyip bir gardırop arayüzü bağladığınızda, kullanıma hazır olarak yaklaşık altı kıyafet × sekiz saç modeli × iki cinsiyet × 262 animasyonluk çeşitlilik elde edersiniz. 65 eklemli iskelet, GPU skinning maliyetini ihmal edilebilir düzeyde tutacak kadar küçük ve Spike 45'teki toplu skinning çalışması bu boyuttaki bir rig üzerinde 200'den fazla avatarı zaten destekliyor. CC0 herhangi bir kullanım kısıtlaması getirmediği için ücretli bir içerik üretme platformunda ticari kullanımda sorun yok. Geriye kalan açık soru, kullanıcıların yüklediği özel kıyafetler. Bu, yükleme sırasında kıyafetleri bu standart iskelete yeniden hedefleyerek çözülecek bir 3. Aşama problemi; yani Spike 35'teki çalışma zamanı yeniden hedeflemesinin tersi. Varlıkların diskte kapladığı alan, ham 2K PNG'ler ve sıkıştırılmamış animasyon glb'leriyle yaklaşık 147 MB. Üretimde KTX2 doku sıkıştırması ve bir gltf-transform geçişiyle bu boyut yaklaşık 30 MB'a indirilebilir.</p>
<h2 id="bu-bolumde-kullanılan-teknolojiler" tabindex="-1">Bu bölümde kullanılan teknolojiler <a class="header-anchor" href="#bu-bolumde-kullanılan-teknolojiler" aria-label="Permalink to &quot;Bu bölümde kullanılan teknolojiler&quot;"></a></h2>
<p><strong>Paket genelinde tek bir standart iskelet.</strong> Dört Quaternius paketinin tamamı (temel vücutlar, modüler kıyafetler ve iki animasyon kütüphanesi), aynı eklem adlarına ve bind pozlarına sahip, birbirinin aynısı 65 eklemli UE5 tarzı bir iskelete riglenmiştir; dolayısıyla bunları birleştirmek için yeniden hedefleme gerekmez. Temel modeli <code>SkeletonUtils.clone</code> ile klonlamak, yükleyicinin önbelleğe alınmış sahnesini değiştirmek yerine her karaktere yeni bir iskelet örneği verir.</p>
<p><strong>Ada göre iskelet yeniden bağlama.</strong> Her modüler parça, kendi armature'üne referans veren ayrı bir SkinnedMesh ile gelir. Yeniden bağlama işlemi kaynak kemikleri sırasıyla dolaşır, her birini adına göre standart iskeletteki karşılığıyla eşler, kaynağın ters bind matrislerini yeniden kullanarak yeni bir <code>Skeleton</code> oluşturur ve birim bind matrisiyle <code>SkinnedMesh.bind</code> çağrısı yapar. Ardından mesh, paylaşılan karakter kökünün altına yerleştirilir; böylece skinning tamamen paylaşılan kemikler üzerinden çalışır. Kıyafet gövdesi yuvası, kesişmeyi önlemek için temel vücudu gizler; diğer yuvalar ise üst üste eklenir.</p>
<p><strong>Skinning uygulanmış bir yuva olarak saç.</strong> Saç, baş kemiğine bağlanan statik bir nesne değil, 65 eklemin tamamına ağırlıklandırılmış bir SkinnedMesh'tir. Uzun saçın ağırlıkları üst omurga ve boyna kadar uzandığı için karakter aşağı baktığında saç sarkar. Kıyafet parçalarıyla aynı yeniden bağlama yolunu izler.</p>
<p><strong>Ek işlem gerektirmeyen, ada dayalı animasyon yeniden hedefleme.</strong> Animation Library klipleri eklemlere tam adlarıyla referans verdiğinden, paylaşılan armature'ü kök alan bir <code>AnimationMixer</code>, 262 klibin tamamını klip başına yeniden hedefleme gerektirmeden ve crossfade ile doğrudan çalıştırır. CC0 lisansı ticari kullanımı kapsar; düşük eklem sayısı da GPU skinning maliyetini Spike 45'teki toplu skinning yolunu yeniden kullanmaya yetecek kadar düşük tutar. Bkz. <a href="/tr/guides/landscape-generation-browser.html#gpu-driven-lod-with-webgpu">GPU destekli LOD</a>.</p>
<hr>
<p>29 bölümden 25'incisi.
Önceki: <a href="/tr/blog/2026-05-09-open-world-browser-part-24-persistence-and-wind.html">24. Bölüm - Bir dünyayı kaydetmek ve görebildiğiniz rüzgâr</a>
Sonraki: <a href="/tr/blog/2026-05-12-open-world-browser-part-26-water.html">26. Bölüm - Her ölçekte etkileyici görünen su</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya inşa etmek, bölüm 24: Bir dünyayı kaydetmek ve görünür rüzgâr]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-05-09-open-world-browser-part-24-persistence-and-wind</link>
            <guid>https://app.cinevva.com/tr/blog/2026-05-09-open-world-browser-part-24-persistence-and-wind</guid>
            <pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spike 47, dünyadaki düzenlemeleri kalıcı hâle getirdi: sahipliği yöneten, parça başına ikili blob'ları saklayan ve değişmeli bir düzenleme protokolü aracılığıyla tüm eşlerin arazisini aynı sonuca ulaştıran bir Durable Object. Spike 49, Quaternius'un Godot rüzgâr gölgelendiricilerini aslına sadık biçimde TSL'ye taşıdı, ardından sahneyi 1 fps'ye düşüren kare başına yeniden derleme sorunuyla uğraştı.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-insa-etmek-bolum-24-bir-dunyayı-kaydetmek-ve-gorunur-ruzgar" tabindex="-1">Tarayıcıda açık dünya inşa etmek, bölüm 24: Bir dünyayı kaydetmek ve görünür rüzgâr <a class="header-anchor" href="#tarayıcıda-acık-dunya-insa-etmek-bolum-24-bir-dunyayı-kaydetmek-ve-gorunur-ruzgar" aria-label="Permalink to &quot;Tarayıcıda açık dünya inşa etmek, bölüm 24: Bir dünyayı kaydetmek ve görünür rüzgâr&quot;"></a></h1>
<p><em>Cinevva CTO'su ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberini</a> kullanın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p><a href="/tr/blog/2026-05-08-open-world-browser-part-23-avatars-and-voice.html">Bölüm 23</a>, insanları dünyaya yerleştirdi ve onlara ses verdi. Bu bölüm, dünyanın insanların yaptığı değişiklikleri hatırlamasını ve kimse dokunmadığında bile canlı hissettirmesini ele alıyor. Spike 47 kalıcılıkla ilgili: Bir içerik üreticisi araziyi şekillendirip nesneler yerleştiriyor; bu düzenlemeler sayfa yeniden yüklendiğinde korunuyor, diğer tüm eşlerle eşitleniyor ve iki kişi aynı anda düzenleme yaptığında çakışmalar düzgün biçimde çözümleniyor. Spike 49 ise rüzgârla ilgili: Stilize bir doğa paketindeki bitki örtüsü gölgelendiricilerini, ağaçların, çalıların ve çimenlerin sanatçının amaçladığı şekilde hareket etmesi için taşımak. Bu süreç, matematikten çok gölgelendirici derleyicisiyle mücadeleye dönüştü.</p>
<h2 id="hatırlayan-bir-dunya" tabindex="-1">Hatırlayan bir dünya <a class="header-anchor" href="#hatırlayan-bir-dunya" aria-label="Permalink to &quot;Hatırlayan bir dünya&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/47-world-persistence/" title="Spike 47 Dünya Kalıcılığı" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/47-world-persistence/" target="_blank">Spike 47'yi yeni sekmede açın ↗</a> · <a href="/tr/blog/spike-source?spike=47-world-persistence">Kaynak kodunu görüntüleyin</a></p>
<p>Kurulum, paylaşılan bir içerik üretme oturumundan oluşuyor. Oyuncular dünyada dolaşıyor, tıklayarak nesneler yerleştiriyor, sağ tıklayarak bunları kaldırıyor ve bir fırçayı sürükleyerek zemini şekillendiriyor. Bunu yaparken yükseklik haritasını yükseltip alçaltabiliyor veya bir parçayı marching cubes yöntemine geçiren SDF arazisinde hacimsel mağaralar oyabiliyorlar. Yaptıkları her şey, kendi SQLite depolamasıyla desteklenen, sunucu otoriteli bir Durable Object olan Cloudflare <code>WorldChunkDO</code> içinde kalıcılaştırılıyor. İstemciler durumu doğrudan yazmıyor. Niyetlerini gönderiyorlar; DO kararı verip sonucu yayınlıyor. DO, tek doğruluk kaynağı olduğundan yeni katılan biri bir anlık görüntü alıyor ve diğer herkesin gördüğüyle birebir aynı dünyaya geliyor.</p>
<p>İki kalıcılık ayrıntısı özellikle değerini kanıtladı. Arazi, katılım sırasında yeniden oynatılacak bir olay günlüğü olarak saklanmıyor; doğruluk kaynağı olan parça başına ikili blob'lar hâlinde tutuluyor ve fırça darbesi sona erdiğinde yükleniyor. Böylece yeni katılan biri binlerce fırça örneğini yeniden çalıştırmak yerine doğrudan kaydedilmiş baytları yüklüyor. Ayrıca bu blob'lar tek bir büyük satırda değil, parça başına bir depolama anahtarında tutuluyor; çünkü tek bir SDF parçası 168 KB ve DO'nun satır başına 2 MB sınırı var. Hangi anahtarların mevcut olduğunu izleyen bir parça dizini, DO'nun uyandığında tüm haritayı yeniden yüklemesini sağlıyor. Kimlik, istemcide iki depolama alanıyla yönetiliyor: Oyuncu kimliği <code>sessionStorage</code> içinde tutuluyor; böylece iki sekme, DO'nun oyuncu haritasında kendisinin üzerine yazan tek bir eş yerine iki ayrı eş oluyor. Görünen ad ise <code>localStorage</code> içinde tutuluyor; böylece bir sekmede yapılan ad değişikliği diğer tüm sekmelere aktarılıyor.</p>
<h2 id="eszamanlı-duzenlemelerin-aynı-sonuca-ulasmasını-saglamak" tabindex="-1">Eşzamanlı düzenlemelerin aynı sonuca ulaşmasını sağlamak <a class="header-anchor" href="#eszamanlı-duzenlemelerin-aynı-sonuca-ulasmasını-saglamak" aria-label="Permalink to &quot;Eşzamanlı düzenlemelerin aynı sonuca ulaşmasını sağlamak&quot;"></a></h2>
<p>Çok oyunculu içerik üretiminin gerçekten zor kısmı, iki kişinin aynı anda örtüşen zemin bölgelerini düzenlediğinde ne olduğudur. Spike, düzenlemeleri cebirsel özelliklerine göre ayırıyor. Toplamsal işlemler — yükseklik haritasında yükseltme ve alçaltma ile SDF üzerinde ekleme ve çıkarma — değişmelidir: Hangi sırayla uygulanırlarsa uygulansınlar aynı sonucu verirler. Bu nedenle, her istemcinin işlemi yerel olarak uygulayıp damgayı gönderdiği iyimser damga yolunu kullanırlar; DO da hiçbir koordinasyon gerektirmeden bunu herkese yayınlar. Sıralama gerçekten önemsiz olduğundan koordine edilecek bir şey de yoktur.</p>
<p>Sıraya bağlı işlemler olan yumuşatma ve düzleştirme ise ilginç vakaydı. İlk tasarım bunlara bölge kilidi veriyordu: İstemci, işaretçiye basıldığında kilit istiyor; DO isteği kabul veya reddediyor; istemci basılı tutma süresince örnekleri tamponluyor ve işaretçi bırakıldığında DO tüm fırça darbesini atomik olarak uyguluyordu. Bu yöntem çalışıyor, ancak kendi kilit TTL'si ve kabul/ret gidiş dönüşü olan ayrı bir protokol gerektiriyordu. Bunun yerini alan daha temiz çözüm, önceden hesaplanmış delta oldu: İşlemi başlatan istemci yumuşatma veya düzleştirme fırçasını yerel olarak çalıştırıyor, ardından hücre başına elde edilen delta listesini gönderiyor. Diğer tüm eşler de hiçbir şeyi yeniden türetmeden bu deltaları kendi hücrelerine ekliyor. Böylece sıraya bağlı bir işlem, sonucu kaynağında sabitlenerek değişmeli hâle geliyor; tüm düzenleme sistemi aynı yakınsamayı sağlayan tek ve tutarlı bir değişmeli protokol üzerinde, hiçbir kilit olmadan çalışıyor. Nesne kilitleri farklı bir nedenle varlığını sürdürüyor: Kayıt başına kilitleme, yalnızca sahibin silebildiği modelin yerini aldı. Böylece kilitli olmadığı sürece herhangi bir eş herhangi bir nesneyi silebiliyor ve kilidi yalnızca kilitleyen kişi kaldırabiliyor. Geri alma ve yineleme, istemcinin bir nesneyi yerleştirmeden önce kimliğini belirleyebilmesiyle çalışıyor. Böylece istemci, sunucunun yanıtı gelmeden kimliği biliyor ve kendi eylemlerini deterministik biçimde geri alabiliyor. Hazırda bekleyen WebSocket'ler, boşta duran bir odayı tüm süre boyunca ücretsiz tutuyor; önceki bölümde avatar aktarımını ucuz kılan da aynı özellikti.</p>
<h2 id="ruzgarı-aslına-sadık-bicimde-tasıdık-ardından-onunla-mucadele-ettik" tabindex="-1">Rüzgârı aslına sadık biçimde taşıdık, ardından onunla mücadele ettik <a class="header-anchor" href="#ruzgarı-aslına-sadık-bicimde-tasıdık-ardından-onunla-mucadele-ettik" aria-label="Permalink to &quot;Rüzgârı aslına sadık biçimde taşıdık, ardından onunla mücadele ettik&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/49-gpu-wind-props/" title="Spike 49 GPU Rüzgârlı Nesneler" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/49-gpu-wind-props/" target="_blank">Spike 49'u yeni sekmede açın ↗</a> · <a href="/tr/blog/spike-source?spike=49-gpu-wind-props">Kaynak kodunu görüntüleyin</a></p>
<p>Spike 49, Quaternius'un Stylized Nature MegaKit paketini alıp rüzgâr sistemini kullandığımız teknoloji yığınına taşıyor. Paket, dört özgün Godot gölgelendiricisiyle birlikte geliyor ve doğru yaklaşım bunları yeniden icat etmek yerine aslına sadık biçimde çevirmekti. Kabuk gölgelendiricisinin verteks işlevi boş; dolayısıyla gövdeler sabit kalıyor. Daha önce denenmiş prosedürel maske, gövdelerin de sallanmasına neden oluyordu ve çözüm, rüzgârı kabuğa hiç uygulamamaktı. Yapraklar, üçgensel darbe hash'inden verteks başına kaotik bir sallanma alıyor. Bu hareket yüksekliğe göre maskelendiğinden ağaç tepeleri hareket ederken dip kısım yerinde kalıyor. Temel bitki örtüsü, dünya uzayında gürültüyle modüle edilen sin/cos sallanması alıyor. Çimen, temel bitki örtüsü hareketine ek olarak rüzgâr çizgisi salınımına sahip. Kayan bir gürültü dokusu kuvvet eğrisi üzerinden örnekleniyor; böylece yalnızca dokunun parlak bantları katkıda bulunuyor ve çayır boyunca ilerleyen görünür dalgalar oluşuyor. Yönlendirme, paketin kendi malzeme adlandırma kuralını izliyor. Bu nedenle <code>Leaves_Birch</code> adlı bir malzeme yaprak yoluna, <code>Grass_Common</code> ise çimen yoluna yönlendiriliyor; tahmin yürütmek gerekmiyor.</p>
<p>Taşıma sırasında karşılaştığımız sürprizlerden biri, yaprak renginin dokuda bulunmamasıydı. Quaternius, yaprak görünümünü tamamen dikey bir gradyan ve Fresnel kenar ışığıyla oluşturuyor: Albedo, yüksekliğe bağlı olarak ağaç tepesinin altındaki ek renkten üstteki yaprak rengine doğru karıştırılıyor. Buna, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="12.282ex" height="2.451ex" role="img" focusable="false" viewBox="0 -833.2 5428.4 1083.2" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(389,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1111.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(2111.4,0)"><g data-mml-node="mi"><path data-c="1D40D" d="M314 0Q296 3 181 3T48 0H39V62H147V624H39V686H171H265Q288 686 297 686T309 684T315 679Q317 676 500 455T684 233V624H576V686H585Q603 683 718 683T851 686H860V624H752V319Q752 15 750 11Q747 4 742 2T718 0H712Q708 0 706 0T700 0T696 1T693 2T690 4T687 7T684 11T679 16T674 23Q671 27 437 311L215 579V62H323V0H314Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3233.7,0)"><path data-c="22C5" d="M78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(3733.9,0)"><g data-mml-node="mi"><path data-c="1D415" d="M592 686H604Q615 685 631 685T666 684T700 684T724 683Q829 683 835 686H843V624H744L611 315Q584 254 546 165Q492 40 482 19T461 -6L460 -7H409Q398 -4 391 9Q385 20 257 315L124 624H25V686H36Q57 683 190 683Q340 683 364 686H377V624H289L384 403L480 185L492 212Q504 240 529 298T575 405L670 624H582V686H592Z" style="stroke-width: 3;"/></g></g><g data-mml-node="msup" transform="translate(4602.9,0)"><g data-mml-node="mo"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(422,363) scale(0.707)"><path data-c="33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo stretchy="false">(</mo><mn>1</mn><mo>−</mo><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">N</mi></mrow><mo>⋅</mo><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">V</mi></mrow><msup><mo stretchy="false">)</mo><mn>3</mn></msup></math></mjx-assistive-mml></mjx-container> Fresnel terimiyle ölçeklenen emisyon biçiminde bir yüzey altı saçılım tonu ekleniyor. Bu nedenle yalnızca doku kullanan sade bir geçiş düz görünüyordu. Renkler boyanmış haritadan değil, gradyandan ve kenar ışığından geliyor. Taşıma, ham yerel Y yerine önceden hesaplanmış bir <code>heightFactor</code> verteks özniteliğini okuyor. Bu öznitelik yükleme sırasında her yaprak grubu için dünya uzayındaki Y değerinden normalize ediliyor; böylece FBX içe aktarma işlemi her ağın yerel eksenlerini nasıl döndürmüş olursa olsun hem gradyan hem de rüzgâr maskesi doğru davranıyor. Godot renk sabitleri sRGB olarak etiketleniyor ve gölgelendiriciye ulaşmadan önce doğrusal uzaya dönüştürülüyor. Dolayısıyla taşıma da parlak sRGB sayılarını doğrusal değerler olarak verip bitki örtüsünü soluklaştırmak yerine aynı dönüşümü uyguluyor.</p>
<h2 id="kare-hızını-yiyip-bitiren-yeniden-derleme" tabindex="-1">Kare hızını yiyip bitiren yeniden derleme <a class="header-anchor" href="#kare-hızını-yiyip-bitiren-yeniden-derleme" aria-label="Permalink to &quot;Kare hızını yiyip bitiren yeniden derleme&quot;"></a></h2>
<p>Bunun önce bir FBX temel sürümü olarak yayımlanmasının ve eksiksiz rüzgâr malzemesi setinin bir <code>.bak</code> dosyasında kenara alınmasının nedeni, sahneyi yaklaşık 1 fps'ye düşüren kare başına yeniden derleme hatasıydı. FBX ile yüklenmiş malzemelerin üzerine özel TSL eklemek, <code>needsUpdate</code> fiilen takılı kalmış gibi Three.js'in gölgelendirici programlarını her karede yeniden oluşturmasını tetikliyordu. Tanılama yaklaşımı, her bitki örtüsü malzemesini özel düğümler içermeyen sade, dokulu bir geçişe indirgemek ve yeniden derleme döngüsünün sürüp sürmediğini gözlemlemekti. Döngü durursa sorun özel grafikteydi; devam ederse neden FBX malzeme kurulumunun üst katmanlarında veya Three.js'in kendisindeydi. Gerçek gölgelendiricilerin geri gelmesini sağlayan çözüm, malzeme başına değişen her değeri — yaprak rengi, SSS rengi, kuvvet ve karışım — uniform olarak bağlamaktı. Böylece derleyicinin her benzersiz renk kombinasyonu için yeni bir gölgelendirici üretip derleme kuyruğunu altüst etmesi yerine tüm yaprak varlıkları tek bir derlenmiş programı paylaşıyor.</p>
<p>İki ayrıntı daha korunmaya değer. Çimen, kaynak dosya başına bir <code>InstancedMesh</code> olarak işleniyor ve sinüs fazları dünya konumuna bağlı olduğundan rüzgârı dünya uzayında hesaplanıyor. Ancak örnek matrisi uygulanmadan önce yer değiştirme yerel uzayda uygulanmalı ve WGSL'de çağrılabilecek bir <code>inverse()</code> bulunmuyor. Öteleme, Y dönüşü ve tekdüze ölçekten oluşan bir örnek matrisi için üst 3×3 bölümün tersi, basitçe transpozunun ölçeğin karesine bölünmesidir. Bu nedenle gölgelendirici, dünya uzayındaki yer değiştirmeyi transpoze model matrisiyle çarpıyor ve matrisin ilk sütununun karesi alınmış uzunluğuna bölüyor; böylece karekök kullanmadan ölçeği elde ediyor. Verteks dönüşümü matrisi yeniden uyguladıktan sonra hareket, her çimen öbeğinin dönüşünden veya ölçeğinden bağımsız olarak tam tasarlandığı biçimde dünya uzayına yerleşiyor. Ayrıca her öbek, verteks başına GPU görüş hacmi elemesi çalıştırıyor: Örnek merkezi klip uzayına yansıtılıyor ve pay bırakılmış görüş hacminin dışına düşerse her verteks yerel orijine daraltılıyor. Böylece her üçgenin üç verteksi de çakışıyor, rasterleştirici dejenere üçgeni atıyor ve ekran dışındaki çimenler için parça, alfa testi veya gölge işlemi yapılmıyor. Bu işlem, Three.js'in zaten yaptığı parça başına kaba sınırlayıcı küre elemesinin üzerine ekleniyor ve konum karışımıyla doğrudan çarpılabilmesi için boolean değerler yerine kayan noktalı <code>step</code> kullanılarak oluşturuluyor.</p>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>Sunucu otoriteli dünya kalıcılığı.</strong> Bir <code>WorldChunkDO</code> Durable Object, nesne yerleştirme ve arazi düzenlemeleri hakkında karar veriyor; parça başına ikili blob'ları doğruluk kaynağı olarak kalıcılaştırıyor. Böylece katılanlar olay günlüğünü yeniden oynatmak yerine kaydedilmiş baytları yüklüyor. Ayrıca DO'nun satır başına 2 MB sınırının altında kalmak için her parça ayrı bir depolama anahtarında saklanıyor. Oyuncu kimliği <code>sessionStorage</code> içinde tutulduğundan sekmeler ayrı eşler oluyor; görünen ad ise <code>localStorage</code> içinde tutulduğundan ad değişiklikleri sekmeler arasında aktarılıyor.</p>
<p><strong>Değişmeli düzenlemelerin yakınsaması.</strong> Toplamsal arazi işlemleri (yükseltme/alçaltma, SDF ekleme/çıkarma) değişmeli olduğundan koordinasyon gerektirmeyen iyimser damga yolunu kullanıyor. Sıraya bağlı işlemler (yumuşatma, düzleştirme), bölge kilidi almak yerine önceden hesaplanmış hücre başına deltalar gönderilerek değişmeli hâle getiriliyor. Böylece tüm sistem, hiçbir kilit olmadan tek ve tutarlı bir protokol altında aynı sonuca ulaşıyor. Kayıt başına nesne kilitleri yalnızca sahibin silebildiği modelin yerini alıyor; istemci tarafından adlandırılan nesne kimlikleri ise sunucunun yanıtı gelmeden deterministik geri alma/yineleme sağlıyor. Bkz. <a href="/tr/guides/landscape-generation-browser.html#gpu-driven-lod-with-webgpu">GPU güdümlü LOD</a>.</p>
<p><strong>Godot'tan TSL'ye aslına sadık gölgelendirici taşıma.</strong> Quaternius'un dört özgün rüzgâr gölgelendiricisi satır satır çevriliyor: sabit kabuk, yüksekliğe göre maskelenmiş yaprak sallanması, dünya uzayında bitki örtüsü sallanması ve kayan rüzgâr çizgisi salınımına sahip çimen. Yollar, paketin malzeme adlandırma kuralına göre seçiliyor. Yaprak rengi dokudan değil, yükseklik gradyanı ile Fresnel güdümlü SSS kenar ışığından geliyor. Görünümün referans render'larla eşleşmesi için sRGB üretim sabitleri doğrusal uzaya dönüştürülüyor.</p>
<p><strong>Kare başına gölgelendirici yeniden derlemelerini önleme.</strong> FBX malzemelerinin üzerine özel TSL eklemek, <code>needsUpdate</code> değerini takılı bırakıp programların her karede yeniden oluşturulmasına yol açarak performansı yaklaşık 1 fps'ye düşürebilir. Malzeme başına değişen her değeri uniform olarak bağlamak, her benzersiz parametre kümesi için yeni gölgelendirici üretmek yerine tüm varyantların tek bir derlenmiş programı paylaşmasını sağlar. Sade, dokulu bir tanılama geçişi de sorunun özel grafikten mi yoksa üst katmandaki kurulumdan mı kaynaklandığını ayırır.</p>
<p><strong>Örneklenmiş bitki örtüsünde dünya uzayı rüzgârı.</strong> Çimen rüzgârı dünya uzayında hesaplanıyor ve WGSL'de <code>inverse()</code> bulunmadığı için elle türetilmiş bir ters matrisle (transpoz bölü ölçeğin karesi) yerel uzaya geri dönüştürülüyor. Verteks başına GPU görüş hacmi elemesi, ekran dışındaki öbekleri dejenere üçgenlere daraltıyor; böylece parça veya gölge işlemi yapılmıyor. Bu işlem, Three.js'in parça başına sınırlayıcı küre elemesinin üzerine ekleniyor.</p>
<hr>
<p>29 bölümün 24. bölümü.
Önceki: <a href="/tr/blog/2026-05-08-open-world-browser-part-23-avatars-and-voice.html">Bölüm 23 - Elli avatar ve odada bir ses</a>
Sonraki: <a href="/tr/blog/2026-05-10-open-world-browser-part-25-universal-characters.html">Bölüm 25 - Tek iskelet, her kıyafet</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık bir dünya inşa etmek, bölüm 23: Elli avatar ve odada bir ses]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-05-08-open-world-browser-part-23-avatars-and-voice</link>
            <guid>https://app.cinevva.com/tr/blog/2026-05-08-open-world-browser-part-23-avatars-and-voice</guid>
            <pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spike 45, toplu GPU iskelet animasyonuyla 50 karakterin kare başına 13 ms'lik JavaScript yükünü tek bir çizim çağrısına indirdi ve morph target olduğu ortaya çıkan bir WGSL hatasının peşinde iki saat harcadı. Spike 46, HRTF uzamsal ses ile yakınlık tabanlı sesli iletişim kurdu, ardından Meet ve Teams'in gerçekte sunduğu deneyime ulaşmak için ses zincirinin yarısını sildi.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-bir-dunya-insa-etmek-bolum-23-elli-avatar-ve-odada-bir-ses" tabindex="-1">Tarayıcıda açık bir dünya inşa etmek, bölüm 23: Elli avatar ve odada bir ses <a class="header-anchor" href="#tarayıcıda-acık-bir-dunya-insa-etmek-bolum-23-elli-avatar-ve-odada-bir-ses" aria-label="Permalink to &quot;Tarayıcıda açık bir dünya inşa etmek, bölüm 23: Elli avatar ve odada bir ses&quot;"></a></h1>
<p><em>Yazan: <a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p><a href="/tr/blog/2026-05-07-open-world-browser-part-22-clouds-and-meshlets.html">22. bölüm</a> dünyanın üzerine bir gökyüzü yerleştirdi. Bu bölümse dünyaya insanları yerleştiriyor. Üçüncü şahıs bakış açılı bir açık dünyada her an 50'den fazla karakterin görünür olması ve yanınızda duran kişileri duyabilmeniz gerekir. Spike 45 işin render tarafı: ana iş parçacığını eritmeden bu kadar çok animasyonlu avatarı GPU'ya aktarmak. Spike 46 ise ses tarafı: konuma göre sağa-sola dağılan ve zayıflayan eşler arası sesli iletişimi, bir teknoloji demosundan çok normal bir görüntülü görüşme gibi duyulacak şekilde ayarlamak.</p>
<h2 id="elli-danscı-icin-tek-cizim-cagrısı" tabindex="-1">Elli dansçı için tek çizim çağrısı <a class="header-anchor" href="#elli-danscı-icin-tek-cizim-cagrısı" aria-label="Permalink to &quot;Elli dansçı için tek çizim çağrısı&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/45-avatar-network-sync/" title="Spike 45 Avatar Ağ Senkronizasyonu" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/45-avatar-network-sync/" target="_blank">Spike 45'i yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=45-avatar-network-sync">Kaynak kodu görüntüle</a></p>
<p>Varsayılan Three.js yaklaşımı her karaktere kendi <code>SkinnedMesh</code>'ini, kendi <code>AnimationMixer</code>'ını, kendi kemik matrisi yüklemesini ve kendi çizim çağrısını verir. Yerel Mac'te 50 avatar, GPU daha tek bir işlem bile yapmadan önce kare başına yaklaşık 13 ms saf JavaScript yükü oluşturuyordu. Çok oyunculu sistemin tamamı için risk azaltma sorusu, tek bir toplu iskelet animasyonu mimarisinin bunu kontrol altına alıp karakter sayısıyla doğrusal biçimde ölçeklenip ölçeklenemeyeceğiydi.</p>
<p>Çözüm, animasyonun hesaplandığı yer ile çizildiği yeri ayırmak. Üç karakter sınıfı aynı FBX şablonunu paylaşıyor. Yerel oyuncu normal bir <code>Avatar</code>: kendi mixer'ına sahip tam bir iskelet klonu ve standart Three.js yaklaşımı; çünkü bundan her zaman yalnızca bir tane bulunuyor. Her uzak eş ise bir <code>VirtualSkeleton</code>: aynı klipleri çalıştıran kendi mixer'ına sahip tam bir klon, ancak yalnızca kemiklerin kalması için her <code>SkinnedMesh</code> düğümü klonlamanın hemen ardından kaldırılıyor. Bu nesne sahneye hiç girmiyor. Her karede, mixer güncellendikten ve matrisler son hâlini aldıktan sonra, 100 kemiğin tamamı için <code>(bone.matrixWorld × boneInverse)</code> değerlerini paylaşılan bir <code>Float32Array</code> içindeki bir yuvaya paketliyor. Ardından <code>BatchSkinnedRenderer</code>, geometri parçası başına bir <code>InstancedMesh</code> barındırıyor; bunların tümü <code>maxInstances × numBones × mat4</code>, yani 60 × 100 × 64 = 384 KB boyutundaki tek bir kemik matrisi <code>StorageBufferAttribute</code>'ından veri okuyor. Özel <code>positionNode</code> ve <code>normalNode</code> içeren bir <code>MeshStandardNodeMaterial</code>, tepe noktası başına dört kemik etkisini doğrudan bu depolama tamponundan okuyor. Sonuç, kalabalıkta kaç kişi olursa olsun geometri parçası başına tek bir depolama yüklemesi ve tek bir çizim çağrısı. İskelet animasyonu tepe noktası gölgelendiricisinde çalışıyor ve avatar başına JavaScript maliyeti bir mixer çalıştırıp 100 matrisi kopyalamaya düşüyor.</p>
<p>Bunu ölçen HUD'ın da yeniden yapılması gerekti. Eski sürüm, tüm karenin GPU süresi 3 ms'yi aştığında &quot;bütçe aşıldı&quot; uyarısı veriyordu; ancak kare her zaman gölge haritasını, zemini ve yerel oyuncunun tam iskelet animasyonlu mesh'ini içeriyor ve bunlar, kaç sentetik eş bulunursa bulunsun gerçek donanımda toplam 3 ila 5 ms sürüyor. Çözüm, kendini kalibre eden bir bütçe oldu: toplu avatar bulunmadığı sırada hızlı bir EMA üzerinden canlı GPU süresini taban değer olarak yakalıyor, ardından bu taban değeri donduruyor ve sentetik avatarlar belirdiğinde eklenen avatar başına bütçeyi doğrusal biçimde 0,06 ms artırıyor. Her makinede boşta PASS gösteriyor ve kalabalık büyüdükçe bütçeyi orantılı olarak sıkılaştırıyor.</p>
<h2 id="hata-goremediginiz-bir-yuzdu" tabindex="-1">Hata, göremediğiniz bir yüzdü <a class="header-anchor" href="#hata-goremediginiz-bir-yuzdu" aria-label="Permalink to &quot;Hata, göremediğiniz bir yüzdü&quot;"></a></h2>
<p>Chrome'daki ilk çalıştırmalarda yerde gümüş renkli gölgeler görünürken avatarlar hiç görünmedi ve şu WGSL ayrıştırma hatası çıktı: <code>cannot index type 'f32'</code>. Hata, uniform skaler olarak tanımlanmışken <code>object.nodeUniform2[i]</code> ifadesini indekslemeye çalışan bir satırdaydı. Bu hikâyenin dürüst kısmı şu: ilk düzeltme yanlıştı ama yine de işe yaradı. Tahmin, hatalı kodu <code>InstancedMesh</code>'in örnek matrisi yolunun ürettiğiydi ve bunu bir <code>StorageInstancedBufferAttribute</code> ile değiştirmek hatayı Chrome'da ortadan kaldırdı. Ancak hata, yeni yol farklı gölgelendirici kodu ürettiği için kaybolmuştu; neden ele alındığı için değil. Bu da en tehlikeli düzeltme türüdür.</p>
<p>Asıl suçlu morph target'lardı. 3MIKE.fbx, blend shape tabanlı yüz ifadeleriyle geliyor; klonlanan geometri <code>morphAttributes</code> değerlerini devralıyor ve Three.js'in <code>MorphNode.setup()</code> metodu <code>morphTargetInfluences</code> değerini skaler bir <code>float</code> olarak tanımladıktan sonra oluşturulmuş bir döngü içinde buna <code>.element(i)</code> uygulamaya çalışıyor. Derleyicinin reddettiği skaler indeksleme tam olarak buydu. Düzeltme tek satır: morph kullanmayan geometrilerde <code>geometry.morphAttributes = {}</code> değerini ayarlamak. Böylece Three.js, <code>MorphNode</code>'u hiçbir zaman eklemiyor. Kazara bulunan Chrome düzeltmesi bir süre kaldıktan sonra geri tepti: Safari'de depolama tabanlı örnekleme yolu 256 kez <code>Vertex buffer is not big enough</code> hatası üretti, çünkü Safari'nin WebGPU arka ucu bunu düzgün biçimde çeviremiyor. Geri almak doğru karardı ve oluşturulmuş bir örnekleme yolu yerine temel WebGPU'nun parçası olan sade kemik matrisi depolama tamponu her yerde sorunsuz çalışıyor. Buradan çıkarılması gereken ders şu: bir düzeltme tek bir tarayıcıda çalışıyor ve mekanizmasını açıklayamıyorsanız yalnızca bir belirtiyi yamamışsınızdır; bu nedenle gerçekten üretilen WGSL'yi okuyun. Spike'a daha sonra eklenen bir <code>getCompilationInfo()</code> shim'i, Three.js'in genel &quot;module is not valid&quot; mesajını gerçek Tint hatasına dönüştürdü ve harcanan emeğin karşılığını defalarca verdi.</p>
<p>Bunun yanında, framework'ün otomatik davranışından kaçınmak için ilgili bir yöntem daha bulunuyor. Three.js, standart <code>skinIndex</code> ve <code>skinWeight</code> öznitelik adlarını algılıyor ve özel <code>positionNode</code> zaten iskelet animasyonunu yapıyor olsa bile bir <code>InstancedMesh</code> içine kendi <code>SkinningNode</code>'unu eklemeye çalışıyor. Bu öznitelikleri <code>boneIndex</code> ve <code>boneWeight</code> olarak yeniden adlandırmak onları framework'ten gizliyor; özel TSL de bunları yeni adlarıyla okuyor.</p>
<h2 id="kelimeler-arasında-sizi-unutan-bir-aktarıcı" tabindex="-1">Kelimeler arasında sizi unutan bir aktarıcı <a class="header-anchor" href="#kelimeler-arasında-sizi-unutan-bir-aktarıcı" aria-label="Permalink to &quot;Kelimeler arasında sizi unutan bir aktarıcı&quot;"></a></h2>
<p>İlk sürüm, gerçek kablo biçimini ve gönderim sıklığını kullanan aynı tarayıcı içi bir yer tutucu olan <code>BroadcastChannel</code> üzerinden eşleri senkronize ediyordu ve protokol yorumunda gerçek aktarıma geçişin tek satırlık bir değişiklik olacağı vaat ediliyordu. Bu vaadi yerine getirmek, 36 baytlık ikili kareyi çözümlemeyen 74 satırlık bir Cloudflare Durable Object olan <code>AvatarRoomDO</code> anlamına geldi. Gönderenin kimliği karenin içine gömülü olduğu ve her alıcı istemci tarafında kendi yankısını filtrelediği için her mesajı olduğu gibi odadaki diğer tüm eşlere iletiyor. Aktarıcı, kimlik konusunda hiçbir farkındalığa sahip değil. Hazırda bekleyen WebSocket'ler, boşta duran bir odayı ücretsiz hâle getiriyor: DO, mesajlar arasında bellekten çıkıyor ve çalışma ortamı bir sonraki pakette etiketlenmiş soketleri geri yüklüyor. Eş başına saniyede 10 olayla bu, eş-saat başına 36.000 DO isteği, yani yaklaşık yarım sent ediyor; Cloudflare'da çıkış trafiği ücretsiz ve eşdeğer AWS WebSocket yapısından yaklaşık 6 ila 10 kat daha ucuz.</p>
<p>Geçiş, saklamaya değer bir durum makinesi hatasını ortaya çıkardı. Uzak bir oyuncu durduktan sonra yürümeye devam ediyordu. Animasyon isteği son kuyruğa alınan adı değil, o anda oynatılan klip olan <code>this._state</code> değerini kontrol ediyordu. Bu nedenle aynı tick içinde önce <code>walk</code>, ardından <code>idle</code> olmak üzere iki ağ mesajı geldiğinde <code>idle</code>, henüz ilerlememiş bir durumla karşılaştırılıyor ve sessizce bırakılıyordu. Gelecekteki <code>idle</code> paketleri değişmediği için üst katmanda yinelenen veri olarak ayıklandığından eş sonsuza dek yürümeye devam ediyordu. Düzeltme, bekleyen adın üzerine her zaman yazmak ve geçiş yardımcısının gerçek aynı durum isteklerini kısa devre etmesine izin vermekti; zaten yaptığı şey de buydu. Bu hata sınıfı geneldir: yanlış referans değerine göre yapılan yinelenen veri kontrolü, önemli girdiyi sessizce yutar.</p>
<p>Safari için iki ek koruma gerekti. WebSocket'i Chrome'dan daha hızlı açtığı için ilk gelen eş mesajı, toplu render sistemi oluşturulmadan önce ulaşabiliyor ve null referansına erişebiliyordu; eşler her 100 ms'de bir yeniden yayın yaptığı için render sistemi yokken mesajları bırakmak güvenli. Ayrıca <code>'gpu' in navigator</code> true döndürürken <code>requestAdapter()</code> null döndürüyordu. Bu da Three.js'in sessizce WebGL2'ye dönmesine neden oluyordu; depolama tamponlu iskelet animasyonu zincirinin burada geçerli bir çevirisi olmadığından sistem hata yağdırıyordu. Gerçek bir adaptörün varlığını kontrol etmek ve arka ucun gerçekten WebGPU olduğunu doğrulamak, bozuk bir render yerine yükleme ekranında açık bir mesaj gösterilmesini sağlıyor. Bir WGSL lehçe farkı bile vardı: Three.js, WebKit'in derleyicisinin henüz desteklemediği modern iki bağımsız değişkenli <code>@interpolate(flat, either)</code> ifadesini üretiyor. Bu, gölgelendirici kaynağını <code>createShaderModule</code>'a giderken yeniden yazıp ikinci bağımsız değişkeni kaldırarak yamalandı; düz enterpolasyon, hangi tepe noktası kullanılırsa kullanılsın aynı değeri taşıdığı için bunun hiçbir maliyeti yok.</p>
<h2 id="odaya-gore-saga-sola-dagılan-ses" tabindex="-1">Odaya göre sağa-sola dağılan ses <a class="header-anchor" href="#odaya-gore-saga-sola-dagılan-ses" aria-label="Permalink to &quot;Odaya göre sağa-sola dağılan ses&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/46-proximity-voice/" title="Spike 46 Yakınlık Tabanlı Sesli İletişim" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/46-proximity-voice/" target="_blank">Spike 46'yı yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=46-proximity-voice">Kaynak kodu görüntüle</a></p>
<p>Spike 46, yakınlık tabanlı sesli iletişimdir: sessiz veya orta düzeyde gürültülü bir odada Google Meet ve Microsoft Teams kalitesini yakalamak üzere açıkça kapsamlandırılmış, HRTF uzamsal ses kullanan eşler arası WebRTC. Bir <code>VoiceRoomDO</code>, JSON aktarıcısı olarak sinyalleşmeyi yönetiyor: her yeni eşe katılımcı listesini gönderiyor, katılım ve ayrılmaları duyuruyor, SDP ve ICE verilerini soket etiketine göre belirli bir eşe yönlendiriyor ve uzamsal konumlandırıcıları yöneten konum güncellemelerini yayınlıyor. Eşlerin birbirlerinin kimliğine bürünememesi için her mesaja gönderen kimliğini ekliyor; sesin kendisiyse DO'ya hiç uğramıyor. Her uzak eş için bir <code>RTCPeerConnection</code> kullanılıyor ve sözlük sıralamasında daha küçük eş kimliği her zaman teklifi yapıyor. Böylece iki taraf, eksiksiz bir perfect negotiation uygulamasına gerek kalmadan kimin başlatacağı konusunda anlaşabiliyor.</p>
<p>Alıcı tarafında her eşin sesi, ters mesafe azalmasıyla HRTF'ye ayarlanmış bir <code>PannerNode</code> üzerinden geçiyor. <code>AudioListener</code>, yerel oyuncunun konumu ve baktığı yön üzerinden her karede <code>forwardX = sin(facing)</code>, <code>forwardZ = cos(facing)</code> kullanılarak güncelleniyor; bu da sahnenin <code>atan2(wx, wz)</code> yön kuralıyla eşleşiyor. Chrome'a özgü bir tuhaflık bir saate mal oldu: yalnızca Web Audio tarafından tüketilen bir <code>MediaStream</code> bazen paketleri çekmiyor. Bu nedenle her akış, kod çözücüyü zamanlamaya zorlamak için gizli ve sessize alınmış bir <code>&lt;audio&gt;</code> öğesine de bağlanıyor. Kalite tarafında tarayıcılar varsayılan olarak yaklaşık 32 kbps mono Opus kullanıyor. Bu yüzden spike, bant içi FEC'yi etkinleştirip DTX'i devre dışı bırakarak bit hızını 128 kbps'ye çıkarmak için her teklif ve yanıttaki <code>fmtp</code> satırını değiştiriyor; ardından kodlayıcının SDP'de belirtilen değeri gerçekten kullanmasını garanti etmek için yüksek bir maksimum bit hızıyla <code>setParameters</code> çağrısı yapıyor. FEC, bit hızı artışından sonraki en büyük ikinci işitsel iyileştirmedir ve yeniden anlaşma gerektirmeden paket kaybının telafi edilmesini sağlar.</p>
<h2 id="sadelestirerek-temiz-sese-ulasmak" tabindex="-1">Sadeleştirerek temiz sese ulaşmak <a class="header-anchor" href="#sadelestirerek-temiz-sese-ulasmak" aria-label="Permalink to &quot;Sadeleştirerek temiz sese ulaşmak&quot;"></a></h2>
<p>Yayınlanan ses zinciri, başladığım zincirden çok daha küçük ve asıl ders de onu küçültmekti. İlk sürümde bir yüksek geçiren filtre, klavye seslerini yakalamak üzere ayarlanmış bir tıklama sınırlayıcı, bir kompresör, bir gürültü kapısı ve bir wet-dry çapraz geçişi vardı; bunların önünde de on ikiden fazla kaydırıcı içeren yüzen bir panel bulunuyordu. Kullanıcı klavye tıklamalarını duyduğunu bildirdiğinde ilk içgüdü, peş peşe yamalar ekleyerek tıklama sınırlayıcıyı daha sert ayarlamak ve dry karışımını düşürmekti. Yapısal yanıt şuydu: zincirde bir makine öğrenimi gürültü gidericisi bulunduğunda tıklama sınırlayıcı, gürültü kapısı ve yüksek geçiren filtrenin büyük kısmı gereksizdir; çünkü RNNoise tam olarak klavye, fare ve yazma sesleri üzerinde eğitilmiştir ve genlik kırpma aynı işin kesinlikle daha kötü bir sürümüdür. Üretim istemcileri makine öğrenimi tabanlı gürültü giderme, yankı engelleme, otomatik kazanç ve seviye kontrolü için yumuşak bir kompresör sunar; başka hiçbir şey kullanmaz. Böylece dört aşama, kaydırıcı paneli ve &quot;gürültü azaltma yöntemini seç&quot; anahtarları çıkarıldı; geriye tek ve sabit bir işleme hattı kaldı.</p>
<p>Kalan her aşamanın bir işlevi var. RNNoise yankıyı gidermediği ve onsuz hoparlörden mikrofona geri besleme sınırsız olduğu için tarayıcı yankı engellemesi açık kalıyor. RNNoise ile üst üste kullanıldığında sürtünmeli ünsüzlerde bozulma ürettiği için tarayıcının gürültü bastırması kapatılıyor; tek bir gürültü giderici seçmek gerekiyor. Tarayıcının otomatik kazancı açık kalıyor; çünkü kapatıldığında sinyal kompresörün çalışamayacağı kadar sessiz hâle geliyor ve Web Audio'nun <code>DynamicsCompressorNode</code> öğesinde bunu telafi edecek bir makeup-gain parametresi bulunmuyor. Tarayıcının geniş zaman ölçekli seviye ayarı ile spike'ın hızlı kompresörü farklı zaman ölçeklerinde çalışıyor ve bir arada kullanılabiliyor. RNNoise, yüzde 92 wet ile yüzde 8 dry karışımında çalışıyor; çünkü ses olasılığı düşen s, ş ve f gibi ötümsüz ünsüzleri aşırı bastırabiliyor. Küçük dry yolu ise biraz tuş sesi sızıntısı pahasına bu sesleri koruyor.
İki özellik sistemi tamamlıyor. Bas-konuş, <code>track.enabled</code> değerini değiştirmiyor; çünkü bu, işlem hattı tamponlarında kalan her şeyi atarak tuş bırakıldığında son heceyi kesiyor. Bunun yerine, zincirin sonuna yakın bir <code>GainNode</code>, <code>setTargetAtTime</code> ile kademeli olarak değişiyor: ilk hecenin korunması için hızlı bir atak, son ünsüzün tamamlanması içinse yavaş bir bırakma uygulanıyor ve parça sürekli etkin kalıyor. Radyo tarzı bir özellik olarak istenen beş saniyelik yayın gecikmesi ise bir baypas kolunu ve bir <code>DelayNode</code> kolunu çapraz geçişle birlikte çalıştırıyor. Kesme düğmesine basıldığında gecikmeli çıkış anında sessize alınıyor ve ses yeniden başlamadan önce HUD üzerinde geri sayım gösteriliyor. Gürültü gidericiyi paketlemek başlı başına küçük bir maceraydı: yayımlanan RNNoise worklet'i, hiçbir CDN'nin çözümleyemediği yalın belirteçli içe aktarımlar kullanıyor. Çözüm, WASM'ın base64 olarak içine gömüldüğü, kendi kendine yeten 1,9 MB'lık tek bir dosya üreten yerel bir esbuild paketi hazırlamak, bunu depoya eklemek ve geliştirme sunucusunda, VitePress derlemesinde ve özel alan adında aynı şekilde çözümlenmesi için modüle göreli bir URL ile referans vermek oldu. Worklet herhangi bir zamanda yüklenemezse zincir, sade bir yüksek geçiren filtre ve kompresör üzerinden yine de ses üretmeye devam ediyor; HUD ise hatayı kırmızı renkte gösteriyor.</p>
<h2 id="bu-bolumde-kullanılan-teknolojiler" tabindex="-1">Bu bölümde kullanılan teknolojiler <a class="header-anchor" href="#bu-bolumde-kullanılan-teknolojiler" aria-label="Permalink to &quot;Bu bölümde kullanılan teknolojiler&quot;"></a></h2>
<p><strong>Kalabalıklar için toplu GPU iskelet animasyonu.</strong> Uzak avatarlar, her kemiğin <code>bone.matrixWorld × boneInverse</code> değerini paylaşılan bir <code>StorageBufferAttribute</code> içine paketleyen başsız bir <code>VirtualSkeleton</code> (iskelet kaplamalı mesh'leri çıkarılmış, kemikleri korunmuş ve kendi mikserine sahip eksiksiz bir klon) çalıştırıyor. Geometri parçası başına bir <code>InstancedMesh</code>, bu matrisleri özel bir TSL <code>positionNode</code>/<code>normalNode</code> içinde okuyor. Böylece avatar başına CPU işi bir mikser güncellemesi ve matris kopyasıyla sınırlı kalırken tüm kalabalığın maliyeti tek bir depolama yüklemesi ve parça başına tek bir çizim çağrısı oluyor. Bkz. <a href="/tr/guides/landscape-generation-browser.html#gpu-driven-lod-with-webgpu">GPU güdümlü LOD</a>.</p>
<p><strong>Belirtiyi değil, oluşturulan WGSL'yi okumak.</strong> <code>cannot index type 'f32'</code> derleme hatasının, Three.js <code>MorphNode</code> bileşeninin <code>morphTargetInfluences</code> değerini skaler olarak tanımlayıp alt indisle erişmesinden kaynaklandığı belirlendi. Sorun, biçim değiştirme kullanmayan geometrilerde <code>morphAttributes</code> temizlenerek giderildi. Yalnızca hangi gölgelendirici yolunun oluşturulduğunu değiştiren ilk düzeltme, asıl nedeni maskeledi ve daha sonra Safari'yi bozdu. <code>skinIndex</code>/<code>skinWeight</code> değerlerini <code>boneIndex</code>/<code>boneWeight</code> olarak yeniden adlandırmak, öznitelikleri Three.js'nin otomatik <code>SkinningNode</code> eklemesinden gizliyor; böylece matematiğin denetimi özel iskelet animasyonu malzemesinde kalıyor.</p>
<p><strong>Hazırda bekleyen Durable Object aktarıcıları.</strong> Yalnızca ikili veri kullanan bir <code>AvatarRoomDO</code>, 36 baytlık kareleri çözmeden diğer tüm eşlere iletiyor; gönderenin kimliği karenin içine gömülüyor ve istemci kendi yankısını filtreliyor. Hazırda bekleyen WebSocket'ler sayesinde boşta duran bir odanın maliyeti olmuyor ve bu yapı 10 Hz'de eş-saat başına yaklaşık yarım sente mal oluyor; bu da eşdeğer yönetilen WebSocket fiyatlandırmasının çok altında. Oynatılan animasyon durumunu son kuyruğa alınan durum yerine karşılaştıran bir yinelenen ileti engelleme denetimi, durdurma mesajlarını sessizce düşürüyor ve uzaktaki oyuncuları yürüme döngüsünde takılı bırakıyordu.</p>
<p><strong>HRTF ile WebRTC yakınlık sesi.</strong> Her eş için bir <code>RTCPeerConnection</code> kullanılıyor; teklif/yanıt rolleri eş kimliği sıralamasına göre belirleniyor. Ses, oyuncunun baktığı yöne göre her karede güncellenen bir <code>AudioListener</code> ile HRTF özellikli bir <code>PannerNode</code> üzerinden yönlendiriliyor ve Opus, dayanıklılık için bant içi FEC ile 128 kbps'e ayarlanıyor. Sessize alınmış, gizli bir <code>&lt;audio&gt;</code> öğesi Chrome'u yalnızca Web Audio kullanan akıştan paketleri çekmeye zorluyor.</p>
<p><strong>Eksiltici ses mühendisliği.</strong> Meet/Teams kalitesini yakalamak, aşama eklemeyi değil kaldırmayı gerektirdi: makine öğrenimi tabanlı gürültü giderme, yankı engelleme, otomatik kazanç ve yumuşak bir kompresör kullanılırken geçit ve tıklama sınırlayıcı kullanılmadı; çünkü klavye gürültüsüyle eğitilmiş bir makine öğrenimi gürültü gidericisi, genlik kırpmayı gereksiz kılıyor. Bas-konuş, hecelerin kesilmemesi için parçayı açıp kapatmak yerine zincirin sonundaki bir <code>GainNode</code> değerini asimetrik bir zarfla kademeli olarak değiştiriyor. Gürültü giderici worklet'i ise yalın belirteçli içe aktarımların çözümlenmesi sorununu aşmak için kendi kendine yeten tek bir esbuild paketi olarak sunuluyor.</p>
<hr>
<p>29 bölümün 23. bölümü.
Önceki: <a href="/tr/blog/2026-05-07-open-world-browser-part-22-clouds-and-meshlets.html">Bölüm 22 - Aydınlatabileceğiniz bulutlar ve beslenmesi gereken ayıklama</a>
Sonraki: <a href="/tr/blog/2026-05-09-open-world-browser-part-24-persistence-and-wind.html">Bölüm 24 - Bir dünyayı kaydetmek ve görebileceğiniz rüzgâr</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya inşa etmek, bölüm 22: Işıklandırılabilen bulutlar ve beslenmesi gereken ayıklama sistemi]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-05-07-open-world-browser-part-22-clouds-and-meshlets</link>
            <guid>https://app.cinevva.com/tr/blog/2026-05-07-open-world-browser-part-22-clouds-and-meshlets</guid>
            <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spike 43, günün her saati için ayrı ayar gerektirmeyen gün batımlarıyla birlikte fizik tabanlı bir gökyüzünü ve hacimsel bulutları 2 ms'nin altında ekrana getirdi. Spike 44, meshlet tabanlı GPU ayıklama sistemi kurdu ve Hi-Z örtülme ayıklamasının yalnızca örtücüler maksimum indirgemeden sağ çıkacak kadar büyükse çalıştığını öğrendi.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-insa-etmek-bolum-22-isıklandırılabilen-bulutlar-ve-beslenmesi-gereken-ayıklama-sistemi" tabindex="-1">Tarayıcıda açık dünya inşa etmek, bölüm 22: Işıklandırılabilen bulutlar ve beslenmesi gereken ayıklama sistemi <a class="header-anchor" href="#tarayıcıda-acık-dunya-insa-etmek-bolum-22-isıklandırılabilen-bulutlar-ve-beslenmesi-gereken-ayıklama-sistemi" aria-label="Permalink to &quot;Tarayıcıda açık dünya inşa etmek, bölüm 22: Işıklandırılabilen bulutlar ve beslenmesi gereken ayıklama sistemi&quot;"></a></h1>
<p><em>Yazan: <a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberini</a> kullanın. Bu rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p><a href="/tr/blog/2026-05-06-open-world-browser-part-21-visibility-buffer.html">21. Bölüm</a>, beklenen getiriyi sağlamayan bir render tekniği hakkındaydı. Bu bölümde işe yarayan bir teknik ve çalışabilmesi için dikkatli bir düzeltme gerektiren başka bir teknik var. Spike 43 gökyüzüyle ilgili: fizik tabanlı atmosfer ve hacimsel bulutlar, bir sahnenin teknoloji demosu yerine gerçek bir mekân gibi algılanmasını sağlayan temel. Spike 44 ise meshlet tarzı GPU ayıklama üzerine; buradaki ders, örtülme testinin ancak ona sunduğunuz örtücüler kadar iyi olduğuydu.</p>
<h2 id="gradyandan-degil-fizikten-gelen-bir-gokyuzu" tabindex="-1">Gradyandan değil, fizikten gelen bir gökyüzü <a class="header-anchor" href="#gradyandan-degil-fizikten-gelen-bir-gokyuzu" aria-label="Permalink to &quot;Gradyandan değil, fizikten gelen bir gökyüzü&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/43-clouds-atmosphere/" title="Spike 43 Bulutlar ve Atmosfer" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/43-clouds-atmosphere/" target="_blank">Spike 43'ü yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=43-clouds-atmosphere">Kaynak kodunu görüntüle</a></p>
<p>Neredeyse her sinematik hava efekti iki altyapı unsuruna bağlıdır: gökyüzü ve güneş renklerinin elle ayarlanmış bir gradyan yerine fiziğe göre günün saatini izlemesini sağlayan fizik tabanlı bir atmosfer ve gökyüzüne önceden hazırlanmış bir cubemap yerine üç boyutlu yapı kazandıran hacimsel bir bulut katmanı. Spike 43, mevcut WebGPU ve TSL yığını üzerinde tam olarak bu ikiliyi kuruyor, daha fazlasını değil; çünkü bu ikisi hazır olduğunda hava sisteminin geri kalanı (sis, tanrı ışınları, ıslak yüzeyler, kar) daha küçük ve bilinen devam işlerine dönüşüyor.</p>
<p>Atmosfer, WGSL compute shader'larında hesaplanan bir dizi arama tablosundan oluşan Hillaire 2020 modelini kullanıyor. Bir geçirgenlik tablosu, güneş ışığını Rayleigh, Mie ve ozon yoğunluk profili boyunca entegre ediyor ve yalnızca güneş hareket ettiğinde yeniden hesaplanıyor. Gökyüzü görünüm tablosu, bunu koşula bağlamak ek kod yazmaya değmeyecek kadar ucuz olduğu için her karede yeniden hazırlanıyor; bantlaşmayı önlemek amacıyla ufuk çevresinde doğrusal olmayan bir parametrelendirme kullanıyor. Çoklu saçılma şimdilik gerçek tablo yerine analitik bir yaklaşım kullanıyor ve gün batımları doğru göründüğü için bu kestirme yol kendini iyi gizliyor. Bulutlar, yatay bir katman boyunca ilerleyen Schneider Nubis tarzı bir ray-march kullanıyor. Biçimleri, 32³ Worley dokusuyla aşındırılan 128³ Perlin-Worley dokusundan geliyor; ikisi de ağdan veri çekilmeden açılışta compute ile hazırlanıyor. Işıklandırmada Beer yasası sönümlenmesi, çift loblu faz fonksiyonu ve pudra yaklaşımı kullanılıyor. Temel bağlantı, bulutun güneş renginin her adımda aynı geçirgenlik tablosundan örneklenmesi; böylece bulut aydınlatması ikinci bir ayar geçişine ihtiyaç duymadan gün batımını izliyor.</p>
<p>M1'de sistemin tamamı, yarım çözünürlüklü bulutlarla 1,1 ila 2,0 ms'de tamamlanıyor; yaklaşık 14 MB GPU belleği kullanarak 100 FPS'nin üzerinde çalışıyor ve 6 ms'lik bütçenin çok altında kalıyor. İki temel iddia da pratikte doğrulandı. Gün batımı, render sistemine sinematik bir his kazandıran başlıca sahne ve günün her saati için ayrı ayar yapmaya gerek kalmadan doğrudan fizikten ortaya çıkıyor. Ayrıca güzel bir tesadüf var: bulut katmanı 800 m ile 4000 m arasında parametrelendirildiğinde, alçak bir kameradan bakılan ufuktaki uzak bulutlar koyu dağ sırtları gibi görünüyor. Böylece kimsenin arka plan arazisi modellemesine gerek kalmadan dünyaya arka plan arazisi kazandırılıyor.</p>
<p>Saklanmaya değer bir mimari not. Doğal yaklaşım, önce gökyüzünü swap chain'e çizmek, ardından three.js'in <code>autoClear = false</code> ile geometrileri bunun üzerine çizmesine izin vermek. Ancak bu yöntem r184'teki WebGPU renderer ile çalışmıyor; çünkü bu bayrak, WebGL'de olduğu gibi renk yükleme işlemini denetlemiyor ve three.js her karede gökyüzünün üzerine yazıyor. Çözüm, three.js'i ekran dışı bir hedefe render etmek ve nihai kompoziti (<code>mix(skyCloud, scene, scene.alpha)</code>, ardından ACES ve sonra sRGB) swap chain'in sahibi olan kendi geçişimizde gerçekleştirmek.</p>
<h2 id="ancak-ortuculeri-kadar-iyi-olan-bir-ayıklama-sistemi" tabindex="-1">Ancak örtücüleri kadar iyi olan bir ayıklama sistemi <a class="header-anchor" href="#ancak-ortuculeri-kadar-iyi-olan-bir-ayıklama-sistemi" aria-label="Permalink to &quot;Ancak örtücüleri kadar iyi olan bir ayıklama sistemi&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/44-meshlet-clusters/" title="Spike 44 Meshlet Kümeleri" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/44-meshlet-clusters/" target="_blank">Spike 44'ü yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=44-meshlet-clusters">Kaynak kodunu görüntüle</a></p>
<p>Spike 44 dört render modunu birbiriyle karşılaştırıyor: düz ileri render, CPU küme ayıklaması, GPU compute ayıklaması ve Hi-Z örtülme ayıklaması kullanan bir görünürlük tamponu. İlginç olan Hi-Z yolu ve burada sessiz bir hata vardı: HUD, örtülmenin açık olduğunu söylüyordu ancak “Hi-Z tarafından elendi” sayacı sonsuza kadar tam olarak %0,0'da kalıyordu. Görüş hacmi ayıklaması çalıştığına göre ayıklama shader'ının önceki aşamaları sağlamdı. Örtülme kısmı ise tam maliyetine rağmen hiçbir şey yapmıyordu.</p>
<p>Hi-Z örtülme testi, bir kümenin sınırlayıcı kutusunu ekrana yansıtır, ekran dikdörtgeni yaklaşık 2×2 texel olacak şekilde bir derinlik piramidi mip seviyesi seçer, bu dikdörtgendeki en derin örtücü derinliğini örnekler ve kümenin en yakın noktası hâlâ bu örtücüden daha uzaktaysa kümeyi eler. Derinlik piramidi, mip 0'ın opak derinlik ön geçişinden başlatılıp yukarı doğru maksimum indirgeme uygulanmasıyla her karede oluşturulur. Opak ön geçiş kasıtlı olarak yalnızca katı örtücüleri, yani zemini ve her ağaç için gövde vekillerini içerir; çünkü alfa testli yapraklar, maksimum indirgemeyi yanıltan boşluklar açar.</p>
<p>Hata mantıksal değil, geometrikti. Gövde vekili 0,5 m × 4 m × 0,5 m boyutlarında bir kutuydu. 30 m uzaklıkta ekranda yaklaşık 17 piksele yansıyordu. Ancak tipik bir 50 m'lik çim kümesi, her texel'in 32 kaynak pikseli kapsadığı mip 5'i seçer. 17 piksellik bir gövde, tek bir mip-5 texel'ini tamamen kaplamaz; dolayısıyla gövdeye temas eden her texel çevredeki zemine de temas eder. Daha ilk 2×2 maksimum indirgeme, daha büyük derinlik değerini, yani gövdenin arkasındaki daha uzak zemini seçer ve gövdenin derinliği ilk indirgemede silinir. Mip 5'e gelindiğinde piramit neredeyse her yerde zemin derinliğini tutar, küme hiçbir zaman zeminden daha uzakta olmaz ve hiçbir şey örtülü sayılmaz.</p>
<p>Çözüm, vekili düştüğü texel'lere hâkim olacak kadar büyütmek ve boyutlarını ağacın odunsu kısmına değil silüetine göre belirlemektir. Yaklaşık 2 m × 6 m × 2 m boyutlarındaki bir vekil hâlâ gerçek taçtan daha küçüktür; dolayısıyla boşluklardan görünen yapraklar gereğinden fazla ayıklanmaz. Buna rağmen önemli mesafelere kadar maksimum indirgemeden sağ çıkacak kadar büyüktür ve örtülme sayacı hemen sıfırın üzerine çıkar. Buradan çıkan sonuç, üretim motoru için genel bir kurala dönüşüyor: Hi-Z örtücüsü olarak güvenilen her şey, ekrandaki silüetine göre boyutlandırılmalıdır. Çünkü açık bitki örtüsü sahnelerinde Hi-Z'nin etkinliğini derinlik testi matematiğinin zarafetinden çok, ilgili mip seviyesindeki örtücü kapsamı belirler. Bir çim yaprağı altındaki zeminle aynı derinlikte bulunduğundan çimin çimi örtmesi zaten mümkün değildir; asıl kazançlar ağaçların uzaktaki bitki örtüsünü ve diğer ağaçları örtmesinden gelir.</p>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>Hillaire 2020 atmosfer LUT'ları.</strong> Yalnızca güneş hareket ettiğinde yeniden hesaplanan bir geçirgenlik tablosu (güneş ışığının Rayleigh, Mie ve ozon profilinden geçişi) ile doğrusal olmayan ufuk parametrelendirmesine sahip, her karede hesaplanan bir gökyüzü görünüm tablosu; elle ayarlanmış bir gradyan olmadan günün saatini izleyen fizik tabanlı gökyüzü ve güneş renkleri sağlar. Bir artefakt gerçek tablonun hazırlanmasını zorunlu kılana kadar tam tablo yerine analitik bir çoklu saçılma yaklaşımı kullanılır. Gün batımı, günün her saati için ayrı ayar yapılmadan doğrudan fizikten ortaya çıkar.</p>
<p><strong>Schneider Nubis hacimsel bulutları.</strong> Açılışta hazırlanmış ve 32³ Worley dokusuyla aşındırılmış 128³ Perlin-Worley dokusunun biçimlendirdiği yatay bir katman boyunca ray-march uygulanır; ışıklandırmada Beer yasası sönümlenmesi, çift loblu faz ve pudra terimi kullanılır. Bulutun güneş rengini her adımda aynı geçirgenlik tablosundan örneklemek, bulut aydınlatmasının gün doğumunu ve gün batımını hiçbir ek maliyet olmadan izlemesini sağlar. Standart üretim dengesi olarak yarım çözünürlüklü ray-march, tipik izleme mesafesinde görünür kalite kaybı olmadan tam çözünürlüğe göre yaklaşık 4 kat daha ucuza çalışır.</p>
<p><strong>r184'te ham WebGPU'yu three.js ile birleştirme.</strong> Gökyüzünü swap chain'e çizip three.js geometrisini <code>autoClear = false</code> ile bunun üzerine render etmek başarısız olur; çünkü bu bayrak WebGPU arka ucunda renk yükleme işlemini denetlemez. three.js'i ekran dışı bir RGBA16F hedefine render edin ve nihai <code>mix</code>, ton eşleme ve sRGB işlemlerini swap chain'in sahibi olan bir geçişte gerçekleştirin.</p>
<p><strong>Hi-Z örtülme ayıklaması ve örtücü boyutlandırma.</strong> Maksimum indirgemeyle oluşturulan bir derinlik piramidi, GPU ayıklama geçişinin en yakın noktası ekran dikdörtgenindeki en derin örtücünün arkasında kalan kümeleri elemesine olanak tanır. Örtücüler seçilen mip seviyesinde bir texel'e hâkim olamayacak kadar küçükse test sessizce hiçbir şey yapmaz; çünkü ilk maksimum indirgeme, örtücünün derinliğini onun arkasındaki daha uzak arka planla değiştirir. Örtücüler fiziksel çekirdeklerine göre değil, ekrandaki silüetlerine göre boyutlandırılmalıdır. Bkz. <a href="/tr/guides/landscape-generation-browser.html#gpu-driven-lod-with-webgpu">GPU güdümlü LOD</a>.</p>
<hr>
<p>29 bölümden 22.'si.
Önceki: <a href="/tr/blog/2026-05-06-open-world-browser-part-21-visibility-buffer.html">21. Bölüm - Daha hızlı olmayan, daha hızlı bir renderer</a>
Sonraki: <a href="/tr/blog/2026-05-08-open-world-browser-part-23-avatars-and-voice.html">23. Bölüm - Elli avatar ve odadaki bir ses</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya inşa etmek, bölüm 21: Daha hızlı olmayan bir renderer]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-05-06-open-world-browser-part-21-visibility-buffer</link>
            <guid>https://app.cinevva.com/tr/blog/2026-05-06-open-world-browser-part-21-visibility-buffer</guid>
            <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spike 40, yoğun çimler için görünürlük tamponu oluşturdu; aşırı çizim konusunda herkesin üstün geldiğini söylediği bu teknik, Apple Silicon'da yüksek yoğunlukta yalın ileri yönlü render işleminden %44 daha yavaş çıktı. İşte bunun nedeni ve bu tekniği gerçekten ne zaman kullanmanız gerektiği.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-insa-etmek-bolum-21-daha-hızlı-olmayan-bir-renderer" tabindex="-1">Tarayıcıda açık dünya inşa etmek, bölüm 21: Daha hızlı olmayan bir renderer <a class="header-anchor" href="#tarayıcıda-acık-dunya-insa-etmek-bolum-21-daha-hızlı-olmayan-bir-renderer" aria-label="Permalink to &quot;Tarayıcıda açık dünya inşa etmek, bölüm 21: Daha hızlı olmayan bir renderer&quot;"></a></h1>
<p><em>Cinevva CTO'su ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p><a href="/tr/blog/2026-05-05-open-world-browser-part-20-parallax-occlusion.html">20. Bölüm</a>, düz bir quad üzerinde yüzey derinliği yanılsaması oluşturdu. Bu bölüm bir render mimarisi kararıyla ilgili ve ders kitaplarındaki yanıtın donanımımız için yanlış çıktığı spike'ı ele alıyor. Soru şu: üçüncü şahıs kamerası altında sinematik yoğunlukta, alfa testli çimler için 200 oyunculu yoğunluğa geçmeden önce bir görünürlük tamponuna ihtiyacımız var mı? Genel kanı kesinlikle evet diyor. Biz bunu geliştirdik, ölçtük ve yanıtın hayır olduğunu gördük.</p>
<h2 id="herkesin-onerdigi-teknik" tabindex="-1">Herkesin önerdiği teknik <a class="header-anchor" href="#herkesin-onerdigi-teknik" aria-label="Permalink to &quot;Herkesin önerdiği teknik&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/40-visibility-buffer/" title="Spike 40 Görünürlük Tamponu" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/40-visibility-buffer/" target="_blank">Spike 40'ı yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=40-visibility-buffer">Kaynak kodunu görüntüle</a></p>
<p>Görünürlük tamponu, render işlemini iki geçişe ayırır. 1. geçiş geometriyi rasterleştirir ve hiçbir gölgelendirme yapmadan yalnızca üçgen ve örnek kimliklerini kompakt bir tamsayı hedefine, derinlikle birlikte yazar. 2. geçiş, kaplanan her pikseldeki kimlikleri okuyan, ilgili üçgenin köşelerini yeniden getiren, enterpole edilmiş öznitelikleri yeniden oluşturan ve görünür her pikseli tam olarak bir kez gölgelendiren tam ekran bir geçiştir. Vaat, aşırı çizimin kusursuz biçimde elenmesidir: derinlik testi, üzerinde hiçbir gölgelendirme işlemi yapılmamış fragmanlara uygulanır; böylece pahalı materyal yalnızca gerçekten gördüğünüz alanlarda çalışır.</p>
<p>Spike, tek canvas ve tek cihaz üzerinde iki yol çalıştırır; böylece tek değişken gölgelendirmenin nerede gerçekleştiğidir. İleri yönlü yol, three.js üzerinden normal bir <code>MeshStandardNodeMaterial</code> kullanır. Görünürlük tamponu yolu ise three.js dışında çalışan, iki geçişli ham bir WebGPU işlem hattıdır. Bu yol, three.js'in çim dokusunu doğrudan backend'den okur, 1. geçişte bir <code>RG32Uint</code> hedefine <code>(instanceId, triId)</code> yazar ve 2. geçişte aydınlatmayı çözümler. Her iki yol da aynı referans aydınlatma kurulumunu paylaşır.</p>
<p>Saklamaya değer iki uygulama notu var. WebGPU, fragman shader'larında hâlâ taşınabilir bir <code>primitive_index</code> yerleşik değerine sahip değil. Bu nedenle çözüm, indekslenmemiş geometriye köşe başına bir üçgen kimliği işleyip bunu <code>flat</code> enterpolasyonla okumaktır. Bu, köşe sayısını 3 katına çıkarır ancak 12 köşeli bir çim kartında maliyeti ihmal edilebilir düzeydedir. Ayrıca context'i hiçbir zaman yeniden yapılandırmadığınız veya canvas boyutlarına dokunmadığınız sürece canvas'ı three.js renderer'ıyla paylaşmak büyük ölçüde sorunsuzdur; çünkü bunların ikisi de three.js'in kontrolündedir. Zor olan kısım ileri yönlü yolu zamanlamaktı; çünkü three.js, render geçişinin içine GPU zaman damgası sorguları eklemek için herhangi bir hook sunmuyor. Geçici çözüm, ileri yönlü yolun çalışmasını önce ve sonra gönderilen, işlem yapmayan iki zaman damgası geçişiyle çevrelemekti. GPU bunları gönderim sırasına göre çalıştırır.</p>
<h2 id="rakamlar-ters-yonde-ilerliyor" tabindex="-1">Rakamlar ters yönde ilerliyor <a class="header-anchor" href="#rakamlar-ters-yonde-ilerliyor" aria-label="Permalink to &quot;Rakamlar ters yönde ilerliyor&quot;"></a></h2>
<p>M serisi bir Mac'te, yaklaşık 1080p çözünürlükte ve 80 metrelik bir alana yayılmış çapraz kartlı çim yapraklarıyla:</p>
<p>50.000 örnekte görünürlük tamponu yolu %25 farkla kazandı: ileri yönlü yolun 5,51 ms'sine karşı 4,13 ms. 100.000 örnekte sonuçlar başa baştı. 200.000 örnekte ise ileri yönlü yol %44 farkla kazandı: görünürlük tamponunun 7,80 ms'sine karşı 5,44 ms. Yoğunluk arttıkça görünürlük tamponu yolu <em>göreli olarak daha kötü</em> hâle geliyor. Bu, tam da aşırı çizim yoğunlaştığında üstün gelmesi gerektiğini söyleyen yaygın kanının tam tersi.</p>
<h2 id="ileri-yonlu-render-neden-dayanıklı-kalıyor" tabindex="-1">İleri yönlü render neden dayanıklı kalıyor? <a class="header-anchor" href="#ileri-yonlu-render-neden-dayanıklı-kalıyor" aria-label="Permalink to &quot;İleri yönlü render neden dayanıklı kalıyor?&quot;"></a></h2>
<p>Apple Silicon GPU'lar karo tabanlı ertelenmiş renderer'lardır ve bu, tüm hesabı değiştirir. Bir TBDR üzerindeki ileri yönlü gölgelendirme, fragman shader'ından önce çalışan gizli yüzey kaldırma aşamasına sahiptir: rasterleştirici, bir karoya eşlenen her fragmanı toplar, derinliğe göre sıralar ve yalnızca hayatta kalanlar (alfa testinden sonra) fragman shader'ına ulaşır. Dolayısıyla ileri yönlü yol, görünürlük tamponunun “piksel başına bir kez gölgelendirme” vaadinin büyük kısmını zaten donanım içinde ücretsiz olarak karşılıyor. Yapraklar ekranı doldurdukça daha fazla fragman, herhangi bir gölgelendirme başlamadan önce HSR tarafından eleniyor ve ileri yönlü yolun piksel başına efektif maliyeti aşırı çizimle birlikte büyümek yerine kabaca sabit kalıyor.</p>
<p>Görünürlük tamponu yolunun 1. geçişi de aynı TBDR avantajından yararlanıyor. Sorunun tamamı 2. geçişte. 2. geçiş, her pikselin örnek matrisini bir tampondan okuyor. Bu tampon 200.000 örnekte 12,8 MB boyutunda ve herhangi bir GPU önbelleğinden çok daha büyük. Ekranda yan yana duran pikseller genellikle farklı çim örneklerine aittir; dağılım sapmalı bir ızgara olduğundan komşu yaprakların örnek kimlikleri gelişigüzeldir. Bu nedenle o tampona erişen her wave, uyumsuz erişimler nedeniyle önbelleği ıskalar. Bu tutarsız rastgele erişim, tek başına kare başına yaklaşık 4 ms harcar. İleri yönlü yol bundan tamamen kaçınır; çünkü örnek matrisi köşeyle birlikte örnek başına öznitelik yolu üzerinden gelir. Dolayısıyla fragman shader'ı çalıştığında dönüştürülmüş köşe verileri zaten karo içi yerel register'lardadır ve megabayt ölçeğinde rastgele okuma gerekmez.</p>
<p>Nanite'ın materyal sınıflandırma geçişi tam olarak bu maliyeti dağıtmak için vardır: pikselleri örneğe göre gruplandırır ve sıralanmış compute wave'leri gönderir; böylece her wave'in okumaları tutarlı olur. Bizde bu yok. Kabaca yapılan bir hesap, pikselleri örneğe göre sıralamanın bu 4 ms'yi yaklaşık 1,5 ila 2 ms'ye düşürebileceğini ve kesişme noktasını 400.000 ila 500.000 örneğe taşıyabileceğini gösteriyor. Ancak bu, en başta burada üstün gelmeyen bir mimarinin üzerine optimizasyonlar yığmak anlamına geliyor.</p>
<h2 id="durust-sonuc-ve-bu-sonucu-guvenilir-kılan-denetim" tabindex="-1">Dürüst sonuç ve bu sonucu güvenilir kılan denetim <a class="header-anchor" href="#durust-sonuc-ve-bu-sonucu-guvenilir-kılan-denetim" aria-label="Permalink to &quot;Dürüst sonuç ve bu sonucu güvenilir kılan denetim&quot;"></a></h2>
<p>Apple Silicon WebGPU'da alfa testli çapraz kart bitki örtüsü için three.js'in TSL işlem hattını kullanan ileri yönlü yolun maliyeti zaten görünürlük tamponuyla aynı seviyede veya daha düşük. Görünürlük tamponu altyapısı, 200.000 örneğin çok ötesine geçene kadar görünür hiçbir kazanç sağlamıyor; o noktada bile ayrıca bir sıralama veya gruplama geçişi eklemeniz gerekiyor. Üretim motoru için pratik karar, önceki spike'lardaki ileri yönlü render, LOD ve imposter yığınını korumak ve iki koşuldan biri gerçekleşene kadar görünürlük tamponu altyapısına yatırım yapmamak: baskın dağıtım hedefimiz, aşırı çizim maliyetinin daha doğrusal olduğu ayrık NVIDIA veya AMD GPU'lar hâline gelirse ya da görünürlük tamponunun zaten doğal çıktı olduğu bir meshlet mimarisine geçersek.</p>
<p>Bu sonuç sezgilere aykırı olduğu için karşılaştırma adil değilse çıkarımın hiçbir değeri yoktur. Bu nedenle spike kapsamlı bir denetimden geçti. Birkaç gerçek hata ortaya çıkarıldı ve düzeltildi: iki yolu sessizce birbirinden koparan bir yaprak ölçeği kaydırıcısı, anti-paralel normaller nedeniyle ileri yönlü yoldaki yaprakların yarısının zifiri karanlık render edilmesi (standart yukarı yönlü normal kullanan bitki örtüsü tekniğiyle düzeltildi) ve görünürlük tamponunun enerjiyi koruyan <code>1/π</code> yerine elle seçilmiş bir Lambert katsayısı, sabit kodlanmış bir ortam terimi ve eksik ton eşleme nedeniyle yaklaşık 2 kat fazla parlak okuması. Düzeltme, three.js'in ACES filmik eğrisini eksiksiz olarak WGSL'ye kopyaladı ve her karede ışık renkleriyle yoğunluklarını gerçek sahne ışıklarından okuyor. Bilinen son eksiklik olan 2. geçişte doğrudan speküler yansımanın bulunmaması, karşılaştırmayı <em>görünürlük tamponu lehine</em> çarpıtıyor. Yani ileri yönlü yol piksel başına kesinlikle daha fazla iş yapıyor ve yine de yüksek yoğunlukta kazanıyor. Bu da ana sonucu iyimser değil, ihtiyatlı kılıyor. Geçerliliğini koruyan tek uyarı şu: bunların tamamı M serisine özgü ve ayrık bir ekran kartında kesişme noktası pekâlâ tersine dönebilir. Bu nedenle Apple dışı hedefler için teknoloji yığınını kesinleştirmeden önce testi yeniden çalıştırmaya değer.</p>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>Görünürlük tamponuyla render.</strong> 1. geçiş geometriyi rasterleştirir ve hiçbir gölgelendirme yapmadan yalnızca üçgen ve örnek kimlikleriyle derinliği yazar. 2. geçiş, kaplanan her piksel için kimlikleri okuyan, kaynak üçgeni yeniden getiren, perspektif düzeltmeli barycentrik öznitelikleri yeniden oluşturan ve her görünür pikseli bir kez gölgelendiren tam ekran bir çözümleme geçişidir. WebGPU taşınabilir bir fragman <code>primitive_index</code> değeri sunmadığından üçgen kimliği, indekslenmemiş geometri üzerinde <code>flat</code> enterpolasyonlu, köşe başına bir öznitelik olarak işlenir.</p>
<p><strong>TBDR gizli yüzey kaldırma ile ertelenmiş çözümlemenin karşılaştırılması.</strong> Karo tabanlı ertelenmiş bir GPU'da (Apple Silicon), ileri yönlü gölgelendirme fragman shader'ı çalışmadan önce örtülen fragmanları zaten eler. Böylece görünürlük tamponunun tek seferlik gölgelendirme avantajının büyük kısmını ücretsiz olarak elde eder ve aşırı çizim arttıkça piksel başına maliyeti kabaca sabit kalır. Görünürlük tamponunun çözümleme geçişi ise örnek başına büyük bir tampona yapılan tutarsız rastgele erişimin maliyetini öder (200 bin örnekte 12,8 MB). Nanite'ın materyal sınıflandırmasında olduğu gibi pikseller önce örneğe göre sıralanmadığı veya gruplandırılmadığı sürece bu maliyet yüksek yoğunlukta baskın hâle gelir.</p>
<p><strong>Bir canvas'ı three.js'in WebGPURenderer'ıyla paylaşmak.</strong> <code>context.configure()</code> işlevini yeniden çağırmadığınız veya <code>canvas.width/height</code> değerlerini değiştirmediğiniz sürece ham WebGPU komut tamponları, paylaşılan kuyrukta three.js gönderimleriyle doğru biçimde iç içe çalışır; çünkü bunların ikisi de renderer'ın kontrolündedir. three.js'in hook sunmadığı ileri yönlü yol GPU zamanlaması, render çağrısının çevresine gönderilen ve işlem yapmayan iki zaman damgalı render geçişiyle ölçülebilir; çünkü GPU komut tamponlarını gönderim sırasıyla çalıştırır.</p>
<p><strong>Sezgilere aykırı bir benchmark'ı doğrulamak.</strong> Şaşırtıcı bir performans sonucu, ancak karşılaştırmanın adilliği kadar güvenilirdir. Her iki yolu da aynı sahne içeriği ve gölgelendirmeyle denetlemek (eşleşen ACES ton eşleme, enerjiyi koruyan Lambert, aynı nesnelerden okunan ışıklar ve aynı yaprak ölçeği), “görünürlük tamponu daha yavaş” sonucunu olası bir ölçüm hatası olmaktan çıkarıp savunulabilir bir sonuca dönüştürdü. Geriye kalan tek asimetri de sonucu ihtiyatlı yönde çarpıtıyor.</p>
<hr>
<p>29 bölümün 21. bölümü.
Önceki: <a href="/tr/blog/2026-05-05-open-world-browser-part-20-parallax-occlusion.html">20. Bölüm - Düz bir düzlemde derinlik yanılsaması oluşturmak</a>
Sonraki: <a href="/tr/blog/2026-05-07-open-world-browser-part-22-clouds-and-meshlets.html">22. Bölüm - İçinden uçabileceğiniz bulutlar ve karşılığını veren ayıklama</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya inşa etmek, bölüm 20: Düz bir yüzeyde sahte derinlik oluşturmak]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-05-05-open-world-browser-part-20-parallax-occlusion</link>
            <guid>https://app.cinevva.com/tr/blog/2026-05-05-open-world-browser-part-20-parallax-occlusion</guid>
            <pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spike 39, paralaks örtüşme eşlemeyi TSL'ye taşıdı, WebGPU'nun gölgelendirici kontrol akışında iki engelle karşılaştı, hatanın birebir aktarma disiplinindeki bir eksiklikten kaynaklandığını buldu ve sonucu doğrulamak için gerçek geometrili bir referans düzlemi oluşturdu.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-insa-etmek-bolum-20-duz-bir-yuzeyde-sahte-derinlik-olusturmak" tabindex="-1">Tarayıcıda açık dünya inşa etmek, bölüm 20: Düz bir yüzeyde sahte derinlik oluşturmak <a class="header-anchor" href="#tarayıcıda-acık-dunya-insa-etmek-bolum-20-duz-bir-yuzeyde-sahte-derinlik-olusturmak" aria-label="Permalink to &quot;Tarayıcıda açık dünya inşa etmek, bölüm 20: Düz bir yüzeyde sahte derinlik oluşturmak&quot;"></a></h1>
<p><em>Cinevva Teknoloji Direktörü ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p><a href="/tr/blog/2026-05-04-open-world-browser-part-19-imposters.html">19. Bölüm</a>, uzaktaki bütün bir ağacı taklit etmek için düz bir dörtgen kullandı. Bu bölüm ise yakından derinlik yanılsaması yaratmak için düz bir dörtgen kullanıyor: tek bir ek tepe noktası bile harcamadan, parke taşlı bir yolu 5 cm derinliğinde derzlere sahipmiş gibi gösteren paralaks örtüşme eşleme tekniği. Amaç, bu tekniği üretim teknoloji yığınına (Three.js r184, WebGPU, TSL) taşımaktı; böylece arazi ayrıntı malzemeleri, önemli olduğu yerlerde bu derinlik yanılsamasını taşıyabilecek, diğer her yerdeyse düz doku maliyeti ödeyecekti.</p>
<h2 id="derinligi-taklit-etmenin-uc-yolu-yan-yana" tabindex="-1">Derinliği taklit etmenin üç yolu, yan yana <a class="header-anchor" href="#derinligi-taklit-etmenin-uc-yolu-yan-yana" aria-label="Permalink to &quot;Derinliği taklit etmenin üç yolu, yan yana&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/39-parallax-pom/" title="Spike 39 Paralaks Örtüşme Eşleme" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/39-parallax-pom/" target="_blank">Spike 39'u yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=39-parallax-pom">Kaynak kodunu görüntüle</a></p>
<p>Spike, yan yana üç düz 5×5 m düzlem yerleştiriyor. Hepsi aynı malzeme iskeletini kullanıyor ve yalnızca örnekleyicileri besleyen UV bakımından farklılaşıyor. Düz yöntem, referans taban çizgisi olarak dokuyu doğrudan örnekliyor. Tek örnekli paralaks, UV'yi o noktadaki yüksekliğe göre görüş doğrultusunda bir kez kaydırıyor; bu yöntem ucuzdur ve düşük genlikte yeterince iyidir, ancak yatık açılarda kayar. POM ise teğet uzayında ışın yürütür: görüş ışını boyunca ilerler, ışının yükseklik alanının altına geçtiği ilk katmanı bulur ve kesişimi hassaslaştırır. Her test düzlemi eksenlerle hizalı olduğundan teğet uzayı basit kalır; böylece görüş yönü, tepe noktası başına tam bir TBN matrisi yerine birkaç işaret çevirmesiyle teğet uzayına aktarılır. Doku seti, 17. Bölüm'deki model aramasının kullandığı yolla aynı olan Polyhaven dosya API'sinden canlı olarak alınır.</p>
<h2 id="webgpu-da-iki-engel-ve-dallanmasız-ısın-yurutme" tabindex="-1">WebGPU'da iki engel ve dallanmasız ışın yürütme <a class="header-anchor" href="#webgpu-da-iki-engel-ve-dallanmasız-ısın-yurutme" aria-label="Permalink to &quot;WebGPU'da iki engel ve dallanmasız ışın yürütme&quot;"></a></h2>
<p>Klasik POM döngüsü, ilk kesişmede aramadan çıkar. r184'te bu, birbirinden ayrı iki nedenle çalışmıyor. <code>If(...).and(...)</code> hatasız derlendi ancak döngü gövdesinin hiç çalışmadığı bir WGSL üretti; dolayısıyla döngü sonrası hassaslaştırma çöp veri üzerinde çalıştı ve düzlem neredeyse beyaz görüntülendi. Ayrıca bağımsız bir düğüm olarak <code>Break()</code> henüz r184 derlemesine eklenmemişti. Bu yüzden çalışan bir <code>If</code> olsa bile &quot;ilk kesişmede dur&quot; ifadesini oluşturmanın bir yolu yoktu. Her iki sorun da three.js'in bu sürüm aralığında <code>If</code> ve <code>Loop</code> sınırları boyunca TSL kontrol akışını aşırı optimize etmesiyle ilgili bilinen sorunlara dayanıyor.</p>
<p>Yeniden yazılan sürüm dallanmasız. Her yineleme dokuyu koşulsuz olarak örnekliyor; böylece doku erişimi, WGSL belirtiminin istediği gibi tekdüze kontrol akışında kalıyor. Ardından yeni durum, kayan noktalı sayı olarak tutulan bir <code>done</code> bayrağı aracılığıyla birleştiriliyor. <code>done</code> değeri 1'e geçtiğinde, yineleme başına yapılan <code>mix</code> çağrıları &quot;durumu değiştirmeden koru&quot; işlemine dönüşüyor; bu da <code>break</code> işleminin dallanmasız karşılığı. <code>done</code> bayrağı, <code>0.5 + 0.5 × sign(x + ε)</code> biçiminde uygulanan bir <code>step</code> yardımcısıyla oluşturuluyor; çünkü boolean değerlerden kayan noktalı sayılara dönüştürme r18x serisinde zaman zaman sorunlu oldu ve <code>sign()</code> her yerde güvenli. Bunun bedeli, gerçekte nerede kesiştiğine bakılmaksızın her parçanın 64 yinelemenin tamamını çalıştırması. Ancak parça ölçeğinde doğru tercih bu: çalışma zamanı zaten azami adım sayısını sınırlıyor ve gerçek bir GPU da &quot;gerçek&quot; bir <code>break</code> sonrasındaki işlemleri spekülatif olarak yürütebilir. Burada temiz bir geri dönüş önemli: son bir <code>mix(baseUV, refined, done)</code>. Böylece sıfır genlikte, yani mesafe azalmasının uzak ucunda, hiçbir parça kesişmez, <code>done</code> 0 olarak kalır ve POM malzemesi bit düzeyinde düz yöntemle aynı olur. Mesafeye dayalı LOD numarasının amacı da tam olarak bu: etki zaten piksel altı düzeydeyken maliyeti düz doku maliyetine indirmek.</p>
<h2 id="hata-matematikte-degil-disiplin-eksikligindeydi" tabindex="-1">Hata matematikte değil, disiplin eksikliğindeydi <a class="header-anchor" href="#hata-matematikte-degil-disiplin-eksikligindeydi" aria-label="Permalink to &quot;Hata matematikte değil, disiplin eksikliğindeydi&quot;"></a></h2>
<p>Dallanmasız sürüm çalıştı ancak bozuk görünüyordu: orta düzey genlikte çizgili yatay bozulmalar, düşük genlikteyse belli belirsiz yanlış ama net olmayan bir sonuç vardı. Düzeltme, tek satırlık bir istemden geldi: git ve standart referansı oku. Buna ilham veren LlamAcademy öğreticisi yalnızca bir Unity ShaderGraph düğümüydü; dolayısıyla gerçek uygulama Unity'nin <code>PerPixelDisplacement.hlsl</code> dosyasında bulunuyordu. Dosyayı satır satır okumak, farkında olmadan ortaya çıkardığım üç anlamsal farkı açığa çıkardı: ışın yüksekliği taban çizgisinde bir birimlik kayma (Unity döngüden önce ilk ilerlemeyi yapar; dolayısıyla benim referans çerçevem tam bir adım faz dışındaydı ve kesişimleri yaklaşık yarı yarıya yanlış katmana yerleştiriyordu), hassaslaştırma adımının dayandığı azami ofset işareti kuralı ve hassaslaştırma matematiğimi gereksiz yere zorlaştırıp işareti karmaşıklaştıran kümülatif ofset ile kümülatif UV kayıt yöntemi farkı.</p>
<p>Temel neden tek bir hata değil, iki referansı birbirine karıştırmaktı. Kılavuz olarak benzer ama farklı işaret kuralları ve farklı bir hassaslaştırma formülü kullanan LearnOpenGL POM öğreticisini almıştım. Sonuçta matematiğin üçte ikisinin bir kaynakla, üçte birinin diğer kaynakla eşleştiği melez bir durum ortaya çıktı. Yeniden yazılan sürüm, Unity'nin HLSL kodunun TSL'ye neredeyse birebir aktarımı: aynı değişken adları, aynı ilk ilerleme, aynı hassaslaştırma ve bunların üzerine eklenmiş dallanmasız <code>done</code> bayrağı. Çıkarılacak ders önemli: başka bir teknoloji yığınındaki çalıştığı bilinen bir gölgelendiriciyi aktarırken önce aynı adları kullanarak satır satır aktarın, ardından yerel stile göre yeniden düzenleyin. Aktarımın ortasında ikinci bir referansa bakarak formülü yeniden türetmeyin.</p>
<h2 id="yalan-soyleyemeyen-bir-referans-duzlemi" tabindex="-1">Yalan söyleyemeyen bir referans düzlemi <a class="header-anchor" href="#yalan-soyleyemeyen-bir-referans-duzlemi" aria-label="Permalink to &quot;Yalan söyleyemeyen bir referans düzlemi&quot;"></a></h2>
<p>Yan yana karşılaştırmada bariz bir şey eksikti: gerçek geometrili bir düzlem. O olmadan &quot;POM oldukça iyi görünüyor&quot; iddiası yanlışlanamaz. Neye kıyasla oldukça iyi? Bu nedenle spike'a dördüncü bir düzlem eklendi: aynı yükseklik haritası, gerçek tepe noktası konumlarına uygulandı. WebGPU'da donanımsal mozaikleme yoktur (Metal uyumluluğu için çıkarıldığından belirtimde hiç yer almaz). Bu yüzden yerine, tepe noktası aşamasında yer değiştirme uygulanan yoğun biçimde alt bölümlere ayrılmış bir düzlem (256×256 segment, 131.072 üçgen) kullanıldı. Aynı genlik uniform'u hem POM'u hem de geometri düzlemini yönetiyor; böylece ikisi birlikte azalıyor ve her mesafede adil bir karşılaştırma yapılıyor.</p>
<p>Gerçek referans ekranda gösterildiğinde, nitel iddialar ölçülebilir hâle geldi. 16°'lik yukarıdan bakan bir yörünge açısında POM ile mozaiklenmiş düzlem, iç gölgelendirme konusunda uyuşuyor. Yatık açılardaysa ayrılmaları gereken yerde ayrılıyorlar: POM, geometrinin kusursuz düz dikdörtgen kenarına sıkışırken gerçek ağ, ışığı yakalayan gerçek tepe ve vadilerin oluşturduğu engebeli bir ufuk profili gösteriyor. Böylece POM'un kenar &quot;kaymasının&quot; doku veya aydınlatma kaynaklı bir artefakt değil, algoritmanın özünde bulunan bir özellik olduğu kanıtlanabiliyor. İki maliyet profili de açıkça görülüyor: POM parça sınırlıdır (maliyet, kaplanan piksel sayısıyla ölçeklenir), mozaiklenmiş düzlem ise tepe noktası sınırlıdır (maliyet, kapsama alanından bağımsız olarak ağ yoğunluğuyla ölçeklenir). Zaten yükseklik haritasıyla yönetilen bir düzlemin tepe noktası maliyetini ödeyen arazi parçasında, ağ altı ayrıntılar için doğru çözüm POM'dur.</p>
<p>Referans düzlemi ayrıca ince bir kullanıcı deneyimi hatasını da yakaladı. Kullanıcı, genlik arttıkça yüzeyin aşağı çöktüğünü fark etti. Bunun nedeni, Unity'nin geometrik düzlemi yükseklik alanının üstü olarak kabul eden kuralıydı; böylece tepeler düzlemle aynı hizada sabit kalırken diğer her şey paralaksla aşağı kayıyor ve ortalama yüzeyi <code>(1 − mean_h) × amplitude</code> kadar düz taban çizgisinin altına çekiyordu. Düzeltme, kuralı <code>h = 0.5</code> düzleme karşılık gelecek şekilde yeniden merkezliyor; tepeler kameraya doğru yükselirken vadiler içeri çekiliyor. Algoritma tam olarak Unity'nin öngördüğü şekilde çalışıyor; spike yalnızca çıktıyı yarım ofset kadar sonradan işleyerek &quot;genlik&quot; kavramını kaydırıcıyı sürükleyen bir insanın bekleyeceği anlama getiriyor.</p>
<p>Referans düzleminin açıklığa kavuşturduğu bir konu daha vardı. &quot;Adımlar&quot; kaydırıcısı hiçbir şey yapmıyormuş gibi görünüyordu ve bu bir bağlantı hatası izlenimi veriyordu, ancak öyle değildi. Doğrusal aramadan sonraki üç yinelemeli sekant hassaslaştırması o kadar başarılıdır ki (Tatarchuk'un 2006 tarihli POM makalesi, 4 adımlı arama artı 3 adımlı sekant yönteminin görsel olarak 64 adımlı aramadan ayırt edilemediğini belirtir), pürüzsüz bir yükseklik haritasında 4 ile 64 arasındaki her adım sayısı aynı piksel altı UV'ye yakınsar. Çözüm, tesisatı yeniden kurmak değil bir açma-kapama düğmesi eklemekti: sekantı kapattığınızda adım kaydırıcısı kesişim hassasiyeti üzerindeki tek denetim hâline gelir; böylece 4'e düşürmek parke taşlarında gözle görülür basamaklanma yaratırken 64'e çıkarmak yüzeyi yeniden pürüzsüzleştirir. Düğme, kapalıyken her sekant durum güncellemesini <code>mix</code> ile işlemsiz hâle getiren bir 0/1 uniform'dur. Böylece geçiş yapmak malzemeyi hiçbir zaman yeniden oluşturmaz ve takılmaya yol açmaz.</p>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>TSL'de paralaks örtüşme eşleme.</strong> POM, teğet uzayında görüş yönünü bir yükseklik alanı boyunca ışın yürüterek tarar, ışının yüzeyin altına düştüğü ilk katmanı bulur ve kesişimi hassaslaştırır. Böylece ek geometri kullanmadan düz bir dörtgen üzerinde içeri gömülü harç derinliği oluşturur. Son bir <code>mix(baseUV, refined, done)</code>, hiçbir parça kesişmediğinde malzemeyi bit düzeyinde düz yöntemle aynı hâle getirir. Mesafeye dayalı LOD genlik azaltımının uzakta maliyeti düz doku maliyetine indirebilmesini sağlayan da budur. Bkz. <a href="/tr/guides/landscape-generation-browser.html#terrain-materials">arazi malzemeleri</a>.</p>
<p><strong>WebGPU kontrol akışı için dallanmasız döngüler.</strong> Three.js r184'te TSL <code>If(...).and(...)</code>, döngü gövdesi hiç çalışmayan bir WGSL çıktısına derlenebilir ve bağımsız <code>Break()</code> kullanılamaz. Taşınabilir kalıp, her yinelemede koşulsuz bir doku örneklemesi (WGSL belirtimine uygun olarak doku erişimini tekdüze kontrol akışında tutar) ve ayarlandıktan sonra her durum güncellemesini <code>mix</code> aracılığıyla işlemsiz hâle getiren, kayan noktalı sayı olarak tutulan bir <code>done</code> bayrağıdır. <code>sign(x + ε)</code> ile oluşturulan bir <code>step</code> yardımcısı, güvenilmez boolean-kayan noktalı sayı dönüşümünü önler. Maliyet, erken çıkış noktasından bağımsız olarak sabit azami yineleme sayısıdır; parça ölçeğinde doğru tercih budur.</p>
<p><strong>Gölgelendiricileri birebir aktarma.</strong> Başka bir motordaki çalıştığı bilinen bir gölgelendirici önce özgün değişken adlarıyla satır satır aktarılmalı, yerel stile göre yeniden düzenleme daha sonra yapılmalıdır. İki referansı (Unity'nin <code>PerPixelDisplacement.hlsl</code> dosyası ile LearnOpenGL öğreticisini) karıştırmak; bir birim kaymış ışın taban çizgisine, ters çevrilmiş ofset işaretine ve sınırlandırması aralık dışı ağırlıkları uzamsal süreksizlikler olarak gizleyen bir hassaslaştırma formülüne sahip melez bir sonuç üretti. Yeniden türetme değil, tek bir standart gerçeklik kaynağı kullanılmalı.</p>
<p><strong>Tepe noktası yer değiştirmeli gerçek referans.</strong> WebGPU'da donanımsal mozaikleme olmadığından, tepe noktası aşamasında yer değiştirme uygulanan yoğun biçimde alt bölümlere ayrılmış bir düzlem (256² segment), parça aşamasındaki taklidi doğrulamak için gerçek geometri yerine geçer. Her ikisini de aynı genlik uniform'uyla yönetmek, mesafe boyunca karşılaştırmanın adil kalmasını sağlar. POM parça sınırlıdır (kaplanan piksel sayısıyla ölçeklenir), geometri düzlemi ise tepe noktası sınırlıdır (ağ yoğunluğuyla ölçeklenir). Bu nedenle tam olarak silüet kenarlarında ayrışırlar ve POM'un kenar kaymasının bir artefakt değil, tekniğin özünde bulunan bir özellik olduğunu kanıtlarlar.</p>
<hr>
<p>29 bölümün 20.'si.
Önceki: <a href="/tr/blog/2026-05-04-open-world-browser-part-19-imposters.html">19. Bölüm - Bir ormanda hayatta kalması gereken imposter</a>
Sonraki: <a href="/tr/blog/2026-05-06-open-world-browser-part-21-visibility-buffer.html">21. Bölüm - Daha hızlı olmayan daha hızlı bir işleyici</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya oluşturmak, bölüm 19: Bir ormanda hayatta kalması gereken imposter]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-05-04-open-world-browser-part-19-imposters</link>
            <guid>https://app.cinevva.com/tr/blog/2026-05-04-open-world-browser-part-19-imposters</guid>
            <pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spike 38, bir ağacı billboard üzerindeki iki dokuya dönüştürdü; ardından bir KISS yeniden yazımı ve tek-N düzeltmesiyle doğru görünüm elde edildi. Spike 41-42, hemi-oktahedral harmanlamayla ani geçişi ortadan kaldırdı ve bir milyon ağacı GPU'ya taşıdı.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-olusturmak-bolum-19-bir-ormanda-hayatta-kalması-gereken-imposter" tabindex="-1">Tarayıcıda açık dünya oluşturmak, bölüm 19: Bir ormanda hayatta kalması gereken imposter <a class="header-anchor" href="#tarayıcıda-acık-dunya-olusturmak-bolum-19-bir-ormanda-hayatta-kalması-gereken-imposter" aria-label="Permalink to &quot;Tarayıcıda açık dünya oluşturmak, bölüm 19: Bir ormanda hayatta kalması gereken imposter&quot;"></a></h1>
<p><em><a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva Teknoloji Direktörü ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p><a href="/tr/blog/2026-05-02-open-world-browser-part-18-ai-scattering.html">18. Bölüm</a>, içerik üreticilerine bir yamacı ağaçlarla dolduran bir fırça sundu. Ancak ekranda on binlerce ağaç olduğunda bunların maliyeti sorun hâline geliyor. Uzaktaki bir ağacın dört piksele katkıda bulunmak için 2.000 üçgene ihtiyacı yoktur. Bu bölüm, en uç LOD seviyesini ele alıyor: Üzerinde ağacın fotoğrafını taşıyan düz bir dörtgen olan imposter ve “doğru görünen tek bir ağaçtan” GPU üzerindeki bir milyon ağaca uzanan yol.</p>
<h2 id="bir-agac-billboard-uzerindeki-iki-dokudur" tabindex="-1">Bir ağaç, billboard üzerindeki iki dokudur <a class="header-anchor" href="#bir-agac-billboard-uzerindeki-iki-dokudur" aria-label="Permalink to &quot;Bir ağaç, billboard üzerindeki iki dokudur&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/38-imposters/" title="Spike 38 Oktahedral Imposter'lar" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/38-imposters/" target="_blank">Spike 38'i yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=38-imposters">Kaynak kodunu görüntüle</a></p>
<p>Bir imposter, bir nesneyi farklı bakış açılarından oluşan bir ızgara üzerinden önceden render ederek biri renk, diğeri dünya uzayı normalleri için olmak üzere iki doku atlasına dönüştürür. Ardından çalışma zamanında, mevcut görüşle eşleşen döşemeyi örnekleyen ve kameraya dönük tek bir dörtgen gösterir. Pişirme işlemi her döşeme için iki geçişten oluşur: Aydınlatmanın dokuya işlenmemesi için ışıksız bir malzemeyle diffuse geçişi ve silüetin piksel piksele eşleşmesi için kaynak alfayı aktaran, <code>normalWorld × 0.5 + 0.5</code> olarak kodlanmış normal geçişi. Çalışma zamanı malzemesi tam bir <code>MeshStandardNodeMaterial</code> olduğundan imposter, diğer tüm yüzeyler gibi sahnenin güneş ışığını ve IBL'sini almaya devam eder. Kazanç geometridedir: Binlerce üçgen yerine tek bir dörtgen ve ayrıntıları taşıyan 1 MB'lık bir doku.</p>
<p>Bunu ayrı bir spike'a taşımak başlı başına bir dersti. Imposter, spike 37'nin dağıtım sistemindeki en uç LOD olarak başlamıştı ve pişirme üzerindeki her yinelemenin; pişirme doğruluğunun örnek matrislerinin taşınması ve LOD geçişleriyle iç içe geçtiği tam dağıtım hattı üzerinden test edilmesi gerekiyordu. Sistemi tek bir nesneye, tek bir dörtgene ve yanında duran orijinal modele ayırmak, yineleme süresini dakikalardan saniyelere indirdi.</p>
<h2 id="ders-kitabındaki-yanıt-yanlıs-oldugunda" tabindex="-1">Ders kitabındaki yanıt yanlış olduğunda <a class="header-anchor" href="#ders-kitabındaki-yanıt-yanlıs-oldugunda" aria-label="Permalink to &quot;Ders kitabındaki yanıt yanlış olduğunda&quot;"></a></h2>
<p>İlk uygulama, küre yönlerini bir kareye paketlemek için kullanılan klasik eşleme yöntemi olan oktahedral kodlamayı kullanıyordu. Sayısal gidiş-dönüş testlerini geçmesine rağmen kullanıcı, imposter'ın tam karşıdan değil de ağaca hafifçe yukarıdan bakıyormuş gibi görünen bir döşemeye geçtiğini gösteren ekran görüntüleri göndermeyi sürdürüyordu. Ardından altı düzeltme turu geldi (dörtgen başına görüş yönü uniform'u, kare pişirme en-boy oranı, hata ayıklama malzemeleri ve statik billboard yönelimi); bunların her biri gerçekten gerekliydi ama hiçbiri asıl hatayı çözmüyordu. Çözüm ancak “baştan düşün, KISS, geçici yama yok” yaklaşımıyla geldi.</p>
<p>Yeniden yazım, oktahedral katlamayı kaldırıp sade azimut-yükseklik yöntemini kullandı: <code>az = atan2(dir.x, dir.z)</code>, <code>el = asin(dir.y)</code>, <code>uv = (az/2π, el/π + ½)</code>. Kodlamanın tamamı bundan ibaret; L1 normalizasyonu ve sıfırın işaretiyle ilgili köşe durumları yok. Burada daha iyi olmasının nedeni daha doğru olması değil (küreyi daha az düzenli örnekler), CPU'daki hücre seçicinin ve GPU shader'ının aynı temel işlemleri kullanmasıdır. Böylece oktahedral çiftin sessizce yaptığı gibi bir sınır yönünde anlaşmazlığa düşemezler. Atlas bir kontak baskı gibi okunur: Sütun nesnenin çevresindeki açıyı, satır ise yüksekliği gösterir ve overlay üzerinde bir bakışta anlaşılır.</p>
<p>Bundan sonra bile “hafifçe yukarıdan görünüyor” şikâyeti devam etti ve neden kodlama değil, bir niceleme tercihiydi. 4×4 ızgarada satır merkezleri ±22,5° ve ±67,5°'ye denk gelir; dolayısıyla tam 0° yükseklikte bir satır yoktur. Açık ara en yaygın durum olan yatay yönde bakan bir izleyici, her zaman eğimli olarak pişirilmiş bir satıra düşer. Çözüm tek N'dir: 5×5 ızgarada satır merkezleri 0°, ±36° ve ±72°'ye denk gelir; böylece yatay izleyici, tam yatay açıyla pişirilmiş bir döşeme alır. Aynı “yarım hücrelik kayma” hatası ailesi, sonraki bölümün paralaks çalışmasında yeniden karşımıza çıkıyor ve çözümü yine aynı soruda yatıyor: Standart girdi için ayrık örnekleme noktam gerçekten düşündüğüm yere denk geliyor mu?</p>
<p>İki unsur daha önemliydi. Billboard sürekli kameraya dönmek yerine parçalı-statik olmalıdır. Imposter, belirli bir pişirme yönünden çekilmiş düz bir fotoğraftır; bu nedenle çalışma zamanı dörtgeninin görüntü düzlemi, ilgili pişirme kamerasının düzlemiyle eşleşmelidir. Bu da tek bir hücrenin seçili kaldığı yay boyunca yönelimini koruyup sınırda aniden geçiş yapması anlamına gelir. Ayrıca bütçe, oyuncuların gerçekte baktığı yerlere göre dağıtılmalıdır: Daha sonraki bir geçiş, eğimli tepeden görünüm satırlarını tamamen kaldırarak bunların yerine 15° aralıklı 24 yatay halka yuvası ve doğrudan tepeden görünüm için tek bir döşeme kullandı; çünkü ağaçlara neredeyse her zaman göz hizasından bakılır.</p>
<h2 id="ani-gecis-ve-harmanlamanın-bunu-ortadan-kaldırması" tabindex="-1">Ani geçiş ve harmanlamanın bunu ortadan kaldırması <a class="header-anchor" href="#ani-gecis-ve-harmanlamanın-bunu-ortadan-kaldırması" aria-label="Permalink to &quot;Ani geçiş ve harmanlamanın bunu ortadan kaldırması&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/42-imposter-flicker/" title="Spike 42 Imposter Titreşimi Karşılaştırması" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/42-imposter-flicker/" target="_blank">Spike 42'yi yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=42-imposter-flicker">Kaynak kodunu görüntüle</a></p>
<p>Parçalı-statik billboard uzakta fark edilmez ancak yakından bakıldığında ani geçiş yapar; kamerayla çevresinde dönene kadar bu kabul edilebilir. Spike 42, titreşimi izole edip ortadan kaldırmak için dört varyantı yan yana yerleştirdi: Orijinal nesne, azimut/yükseklik 5×5 temel sürümü ve iki hemi-oktahedral ızgara. Ani geçişe iki artefakt neden olur. Hücre sıçraması, fragment shader'ın görüş yönünü 25 hücreden birine nicelemesi nedeniyle oluşur; dolayısıyla bir sınır geçildiğinde örneklenen döşeme değiştirilir ve dörtgen aynı karede yeniden yönlendirilir. Kutup tekilliği ise her azimutun tek bir noktada birleştiği tepeden görünümdür; halka ile tepe döşemesi arasındaki köprü, atlastaki en kötü geçiştir.</p>
<p>Hemi-oktahedral eşleme her ikisini de düzeltir. Üst yarımküreyi sürekli biçimde birim kareye eşler; böylece komşu 3B yönler komşu UV'lere denk gelir, kutup tekilliği ortadan kalkar ve tepeden görünüm için özel bir döşemeye gerek kalmaz. Titreşimin çözümü bilineer hücre harmanlamadır: En yakın döşemeye aniden geçmek yerine, kodlanmış yönü çevreleyen 2×2'lik döşeme grubu bulunur ve dördü birden harmanlanır; toplamda 8 doku örneği alınır (4 diffuse, 4 normal). Böylece komşu görünümler aniden değişmek yerine çapraz geçiş yapar. İki birim vektörün normal harmanı kendi başına birim uzunlukta olmadığından yeniden normalleştirilir; bu da komşu döşemeler arasındaki küçük açılar için slerp gibi davranır. Maliyeti kayda değerdir (12×12 atlas, azimut/yükseklik atlasının 1,6 MB'ına karşılık yaklaşık 9 MB'tır ve pişirme 288 render-target geçişiyle yaklaşık 5 kat daha uzun sürer), ancak pişirme yükleme sırasında bir kez yapılır ve harmanlama ani geçişsiz bir sonuç sağlar. Kameranın gerçekten hareket ettiği sırada imposter'ları kullanılabilir kılan da budur.</p>
<h2 id="bir-milyon-agac-kare-basına-tek-kamera-konumu-kopyası" tabindex="-1">Bir milyon ağaç, kare başına tek kamera konumu kopyası <a class="header-anchor" href="#bir-milyon-agac-kare-basına-tek-kamera-konumu-kopyası" aria-label="Permalink to &quot;Bir milyon ağaç, kare başına tek kamera konumu kopyası&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/41-imposter-forest/" title="Spike 41 Imposter Ormanı" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/41-imposter-forest/" target="_blank">Spike 41'i yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=41-imposter-forest">Kaynak kodunu görüntüle</a></p>
<p>Spike 38'in çalışma zamanı, her dörtgen için her karede bir CPU <code>lookAt</code> işlemi gerçekleştirir. Bu, tek bir ağaç için sorun değildir ancak bir orman için ölümcüldür. Bir milyon ağaçta kare başına matris güncellemeleri ve instance tamponu yüklemeleri diğer her şeyin önüne geçerdi. Spike 41, kare başına işleme hattının tamamını GPU'ya taşır. Her instance'ın merkezi, yaw değeri ve ölçeği, oluşturma sırasında instanced attribute olarak bir kez yüklenir ve bir daha değişmez. Vertex shader, dünya uzayındaki <code>camPos − center</code> görüş yönünden billboard tabanını oluşturur ve paylaşılan birim dörtgeni dünya uzayına genişletir. Fragment shader, hemi-oktahedral kodlamayı ve bilineer harmanlamayı piksel başına gerçekleştirir. Tüm orman için kare başına yapılan tek CPU işi, kamera konumu uniform'unu güncelleyen bir <code>Vector3.copy</code> işlemidir ve bu maliyet ağaç sayısıyla birlikte artmaz.</p>
<p>Matematiğin hoş bir yanı, instance başına yaw değerinin normal çözümlemede birbirini götürmesidir. Pişirme, normalleri pişirme kamerasının koordinat sisteminde saklar. Dünya yukarı ekseni etrafındaki yaw dönüşü +Y'yi koruduğundan ve vektörel çarpım dönüşle uyumlu olduğundan, dünya yukarı referansıyla oluşturulan çalışma zamanı tabanı zaten döndürülmüş pişirme tabanına eşittir. Böylece shader, instance başına yaw değerine hiç dokunmadan normalleri doğrudan çalışma zamanı tabanının varying'leri üzerinden çözümler. Yerleştirme, tamamen rastgele dağıtım yerine jitter uygulanmış bir ızgara kullanır: Alan hücrelere bölünür ve her hücrenin merkezine sınırlı bir ofset eklenerek bir ağaç yerleştirilir. Bu yöntem, doğal bir orman görünümünü korurken minimum aralığı garanti eder; hiçbir ağaç diğerinin üzerine gelmez. Gözden kaçırılması kolay bir ayrıntı da sınırlayıcı küredir. Geometri şablonu yalnızca birim dörtgenden oluştuğundan three.js, kamera orijinden uzaklaştığı anda tüm ormanı görüş hacminin dışında sayardı. Tüm alanı ve bir dörtgenlik kenar payını kapsayan açık bir sınırlayıcı küre ayarlamak, köşelerdeki ağaçların eğik açılarda kesilmesini önler.</p>
<h2 id="bu-bolumde-kullanılan-teknolojiler" tabindex="-1">Bu bölümde kullanılan teknolojiler <a class="header-anchor" href="#bu-bolumde-kullanılan-teknolojiler" aria-label="Permalink to &quot;Bu bölümde kullanılan teknolojiler&quot;"></a></h2>
<p><strong>Oktahedral ve azimut-yükseklik imposter atlasları.</strong> Bir imposter, bir nesneyi görüş yönlerinden oluşan bir ızgara üzerinden diffuse atlasına ve dünya uzayı normal atlasına pişirir; ardından eşleşen döşemeyi örnekleyen tek bir billboard render ederek binlerce üçgeni iki dokuyla değiştirir. Klasik oktahedral eşleme küreyi düzenli biçimde kapsar ancak katlama sınırlarında CPU/GPU ayrışmasına yatkındır. Sade bir azimut-yükseklik ızgarası küreyi daha az düzenli örnekler ancak hücre seçiciyle shader'ın yapısal olarak aynı sonucu vermesini garanti eder. Bir satırın tam 0° yüksekliğe denk gelmesi için tek N kullanın ve nesneler çoğunlukla göz hizasından görüldüğü için döşeme bütçesini yatay halkaya ayırın.</p>
<p><strong>Parçalı-statik billboard yönelimi.</strong> Imposter belirli bir pişirme yönünden çekilmiş bir fotoğraf olduğundan çalışma zamanı dörtgeninin görüntü düzlemi, sürekli olarak çalışma zamanı kamerasına dönmek yerine pişirme kamerasının düzlemiyle eşleşmelidir. Dörtgen, tek bir hücrenin seçili kaldığı yay boyunca yönelimini korur ve sınırda aniden geçiş yapar. Bu, imposter mesafesinde fark edilmez ve yalnızca imposter'ların zaten kullanılmadığı yakın mesafede görünür.</p>
<p><strong>Bilineer hücre harmanlamalı hemi-oktahedral atlas.</strong> Üst yarımküreyi sürekli biçimde birim kareye eşlemek, kutup tekilliğini ve özel tepeden görünüm döşemesini ortadan kaldırır. Ani geçiş; kodlanmış görüş yönünü çevreleyen 2×2'lik döşeme grubunun örneklenmesi ve dört döşemenin de bilineer olarak harmanlanmasıyla (8 örnek) yok edilir. Böylece komşu görünümler çapraz geçiş yapar. Harmanlanmış normaller yeniden normalleştirilerek döşemeler arasındaki küçük açı boyunca yaklaşık bir slerp elde edilir. Bunun karşılığında daha büyük bir atlas (12×12'de yaklaşık 9 MB) ve daha uzun süren tek seferlik bir pişirme gerekir; ancak kamera hareket ederken ani geçişsiz gölgelendirme sağlanır.</p>
<p><strong>GPU güdümlü instanced imposter'lar.</strong> Instance başına merkez, yaw ve ölçek değerleri instanced attribute olarak bir kez yüklenir; vertex shader billboard tabanını oluşturup paylaşılan birim dörtgeni genişletir, fragment shader ise kodlama ve harmanlamayı piksel başına gerçekleştirir. Tüm orman için kare başına CPU maliyeti, instance sayısından bağımsız olarak tek bir kamera konumu uniform kopyasıdır. Dünya yukarı ekseni etrafındaki yaw, vektörel çarpım tabanının oluşturulması tarafından korunduğu için instance başına yaw değeri normal çözümlemede birbirini götürür. Ormanın tamamını kapsayan açık bir sınırlayıcı küre, kamera birim dörtgen şablonunun orijininden uzağa baktığında three.js'in tüm instanced mesh'i görüş hacminin dışında saymasını önler. Bkz. <a href="/tr/guides/landscape-generation-browser.html#gpu-driven-lod-with-webgpu">GPU güdümlü LOD</a>.</p>
<hr>
<p>29 bölümün 19. bölümü.
Önceki: <a href="/tr/blog/2026-05-02-open-world-browser-part-18-ai-scattering.html">18. Bölüm - Yapay zekâyla yerleştirilmiş hissi veren bir dağıtım fırçası</a>
Sonraki: <a href="/tr/blog/2026-05-05-open-world-browser-part-20-parallax-occlusion.html">20. Bölüm - Düz bir yüzeyde derinlik yanılsaması yaratmak</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Modern oyunlarda hacimsel bulutlar ve hava durumu efektleri]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-05-04-volumetric-clouds-and-weather</link>
            <guid>https://app.cinevva.com/tr/blog/2026-05-04-volumetric-clouds-and-weather</guid>
            <pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Modern oyunların hacimsel bulutları, atmosferik saçılmayı, sisi, yağmuru, karı ve dinamik hava durumunu nasıl işlediği ve her tekniğin temelini oluşturan makaleler ile oyun motoru sunumları.]]></description>
            <content:encoded><![CDATA[<h1 id="modern-oyunlarda-hacimsel-bulutlar-ve-hava-durumu-efektleri" tabindex="-1">Modern oyunlarda hacimsel bulutlar ve hava durumu efektleri <a class="header-anchor" href="#modern-oyunlarda-hacimsel-bulutlar-ve-hava-durumu-efektleri" aria-label="Permalink to &quot;Modern oyunlarda hacimsel bulutlar ve hava durumu efektleri&quot;"></a></h1>
<p><em>Yazan: <a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<img src="/img/blog/clouds_weather_hero.webp" alt="Yükselen hacimsel fırtına bulutları, şimşekler, yağmur perdeleri ve gökyüzünü yansıtan ıslak taş yol içeren stilize bir AAA sahnesi" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Birkaç hafta önce <a href="/tr/blog/2026-05-03-aaa-rendering-techniques.html">modern AAA oyunlarda gerçekten kullanılan render teknikleri</a> hakkında yazmıştım. Gökyüzü ve hava durumu konusunu kısa geçtim, çünkü kendi listesini hak ediyor. Bulutlar, sis, yağmur ve kar, bir arazi demosunu gerçek bir mekâna dönüştüren sistemlerdir. Ayrıca göründüğünden çok daha fazla ortak kod kullanırlar. Hacimsel bulutlar, yer sisi ve tanrısal ışınların hepsi aynı ışın yürütme tekniğine dayanır. Islak yollar, kar birikimi ve ayak izi izlerinin hepsi aynı yer değiştirme ve PBR hilesini kullanır. Rüzgâr ise sahnedeki her şeyin kullandığı tek bir yön vektörüdür.</p>
<p>İşte büyük stüdyoların 2026'da bu sistemleri nasıl geliştirdiğine dair, her parçanın arkasındaki makaleler ve oyun motoru sunumlarıyla birlikte kısa ve öznel bir tur.</p>
<h2 id="_1-fizik-tabanlı-gokyuzu-ve-atmosfer" tabindex="-1">1. Fizik tabanlı gökyüzü ve atmosfer <a class="header-anchor" href="#_1-fizik-tabanlı-gokyuzu-ve-atmosfer" aria-label="Permalink to &quot;1. Fizik tabanlı gökyüzü ve atmosfer&quot;"></a></h2>
<p>Atmosferik saçılma işin temelidir. Gökyüzünün rengi, ufuktaki pus, uzaktaki dağların maviye dönüşmesi ve gün batımının turuncusu; bunların tümü ışığın havada saçılmasından kaynaklanır. Modern oyun motorları bunu fizik kurallarına göre hesaplar: mavi renk için Rayleigh saçılması, güneş çevresindeki pus için Mie saçılması ve zenitteki koyu mor için ozon soğurumu.</p>
<p>Bruneton'ın 2008'de geliştirdiği özgün yöntem, her şeyi 4B arama tablolarına önceden işliyordu; bu da dinamik günün saati sistemlerini sınırlıyor ve güneşin alçak açılarında LUT yapaylıklarına yol açıyordu. UE5'in Sky Atmosphere bileşeninde kullanılan Sébastien Hillaire'in 2020 tarihli güncellemesi, yüksek boyutlu LUT'yi birkaç 2B doku ve kare başına güncellenen bir çoklu saçılma yaklaşımıyla değiştiriyor. Telefondan üst düzey PC'ye kadar her yerde çalışıyor.</p>
<img src="/img/blog/clouds_weather_atmosphere.webp" alt="Uzaktaki dağ silüeti üzerinde turuncudan maviye yumuşak bir geçiş sunan, altın saatte fizik tabanlı gökyüzü" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Hillaire, <a href="https://sebh.github.io/publications/egsr2020.pdf" target="_blank" rel="noreferrer">Ölçeklenebilir ve Prodüksiyona Hazır Bir Gökyüzü ve Atmosfer Render Tekniği</a> (EGSR 2020, UE5'te kullanılan modern standart).</li>
<li>Bruneton ve Neyret, <a href="https://hal.inria.fr/inria-00288758/document" target="_blank" rel="noreferrer">Önceden Hesaplanmış Atmosferik Saçılma</a> (EGSR 2008, özgün LUT yaklaşımı).</li>
<li>Bruneton, <a href="https://ebruneton.github.io/precomputed_atmospheric_scattering/" target="_blank" rel="noreferrer">Önceden Hesaplanmış Atmosferik Saçılma: Yeni Bir Uygulama</a> (açık kaynaklı referans; ozon ve çoklu gezegen desteği).</li>
<li>Epic Games, <a href="https://dev.epicgames.com/documentation/en-us/unreal-engine/sky-atmosphere-component-in-unreal-engine" target="_blank" rel="noreferrer">Sky Atmosphere Bileşeni</a> (UE5 belgeleri).</li>
</ul>
<h2 id="_2-perlin-worley-gurultusuyle-hacimsel-bulutlar" tabindex="-1">2. Perlin-Worley gürültüsüyle hacimsel bulutlar <a class="header-anchor" href="#_2-perlin-worley-gurultusuyle-hacimsel-bulutlar" aria-label="Permalink to &quot;2. Perlin-Worley gürültüsüyle hacimsel bulutlar&quot;"></a></h2>
<p>Modern oyunlardaki temel bulut tekniği, Andrew Schneider'in 2015 tarihli Horizon Zero Dawn sunumuyla başladı. Bulutlar mesh değildir. Katmanlı gürültüyle tanımlanan bir 3B yoğunluk fonksiyonudur: düşük frekanslı bir Perlin-Worley karışımı bulutun genel şeklini oluştururken daha yüksek frekanslı Worley gürültüsü, silüeti aşındırarak ince ve tüylü kenarlara dönüştürür. Bir hava durumu haritası (dünya XZ koordinatlarıyla örneklenen 2B bir doku), her bölgenin bulut örtüsünü, bulut türünü ve yağışını kontrol eder. Yüksekliğe dayalı bir gradyan ise irtifaya göre kümülüs, stratus ve sirüs profilleri arasında geçiş yapar.</p>
<p>Render sistemi, kameradan bulut hacminin içine doğru bir ışın yürüterek yoğunluk ve saçılmayı biriktirir. 2017'deki &quot;Nubis&quot; iterasyonu, bölgesel ölçekte içerik oluşturma ve animasyon özellikleri ekledi; özgün PS4 uygulaması ise tüm gökyüzünü yaklaşık 2 ms'de işliyordu. Günümüzde hacimsel bulut kullanan çoğu stüdyonun tekniğinin kökeni hâlâ bu makaleye dayanır.</p>
<img src="/img/blog/clouds_weather_noise.webp" alt="Detayların silüeti nasıl aşındırdığını gösteren, üst üste bindirilmiş Perlin ve Worley gürültü desenlerine ayrılmış 3B bir bulut şekli" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Schneider, <a href="https://www.guerrilla-games.com/read/the-real-time-volumetric-cloudscapes-of-horizon-zero-dawn" target="_blank" rel="noreferrer">Horizon Zero Dawn'ın Gerçek Zamanlı Hacimsel Bulut Manzaraları</a> (SIGGRAPH 2015, temel referans).</li>
<li>Schneider, <a href="https://advances.realtimerendering.com/s2017/Nubis%20-%20Authoring%20Realtime%20Volumetric%20Cloudscapes%20with%20the%20Decima%20Engine%20-%20Final%20.pdf" target="_blank" rel="noreferrer">Nubis: Decima Engine ile Gerçek Zamanlı Hacimsel Bulut Manzaraları Oluşturma</a> (SIGGRAPH 2017, bölgesel ölçekli devam çalışması).</li>
<li>Hillaire, <a href="https://media.contentapi.ea.com/content/dam/eacom/frostbite/files/s2016-pbs-frostbite-sky-clouds-new.pdf" target="_blank" rel="noreferrer">Frostbite'ta Fizik Tabanlı Gökyüzü, Atmosfer ve Bulut Render'ı</a> (SIGGRAPH 2016, Frostbite sürümü).</li>
<li>Häggström, <a href="https://www.diva-portal.org/smash/get/diva2:1223894/FULLTEXT01.pdf" target="_blank" rel="noreferrer">Hacimsel Bulutların Gerçek Zamanlı Render'ı</a> (tam shader koduyla sade ve anlaşılır bir tez).</li>
</ul>
<h2 id="_3-voksel-bulutlar-ve-nubis3" tabindex="-1">3. Voksel bulutlar ve Nubis³ <a class="header-anchor" href="#_3-voksel-bulutlar-ve-nubis3" aria-label="Permalink to &quot;3. Voksel bulutlar ve Nubis³&quot;"></a></h2>
<p>Nubis'in 2023'teki evrimi, gerçek 3B vokseller lehine 2.5B şekil temsilini tamamen terk etti. Her voksel bulut yoğunluğunu doğrudan depoluyor; böylece sanatçılar bulut şekillerini araziyi yontar gibi biçimlendirip canlandırabiliyor. Daha yoğun bir temsile geçmenin maliyeti, sıkıştırılmış işaretli uzaklık alanlarıyla ışın yürütmenin hızlandırılması ve seyrek voksel verilerinin akıllıca yüksek çözünürlüğe çıkarılması sayesinde telafi ediliyor.</p>
<p>Sonuç olarak, temeldeki hilelerin dağıldığını görmeden <em>içinden</em> uçabileceğiniz türde bulut manzaraları ortaya çıkıyor. Çoğu stüdyo için gereğinden fazla olsa da üst düzey teknolojinin ilerlediği yön bu.</p>
<img src="/img/blog/clouds_weather_voxel_clouds.webp" alt="Kalın iç kısmı yumuşatılmış ince kenarlarla harmanlanan, 3B voksel ızgarasına ayrılmış bir kümülüs bulutu" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Schneider, <a href="https://www.guerrilla-games.com/read/nubis-cubed" target="_blank" rel="noreferrer">Nubis³: Sarmalayıcı Gerçek Zamanlı Voksel Tabanlı Bulutları Modelleme ve Render Etme Yöntemleri (ve Çılgınlığı)</a> (SIGGRAPH 2023, voksel bulut sunumu).</li>
<li>Schneider, <a href="https://www.guerrilla-games.com/read/nubis-evolved" target="_blank" rel="noreferrer">Nubis'in Evrimi</a> (SIGGRAPH 2022, 2.5B ile tam 3B arasındaki köprü).</li>
<li>Schneider, <a href="https://www.schneidervfx.com/" target="_blank" rel="noreferrer">Gerçek Zamanlı Hacimsel Efektler ve VFX</a> (Andrew'nun ders notları ve çözümlemeler içeren kişisel sitesi).</li>
</ul>
<h2 id="_4-katmanlı-bulut-render-ı-ve-2b-arka-planlar" tabindex="-1">4. Katmanlı bulut render'ı ve 2B arka planlar <a class="header-anchor" href="#_4-katmanlı-bulut-render-ı-ve-2b-arka-planlar" aria-label="Permalink to &quot;4. Katmanlı bulut render'ı ve 2B arka planlar&quot;"></a></h2>
<p>Her stüdyonun tam hacimsel bulutlara ayıracak bütçesi yoktur ve her kamera açısı da buna ihtiyaç duymaz. Birçok oyun farklı teknikleri birleştirir: yüksek irtifadaki sirüsler kayan bir 2B katman olarak, orta irtifadaki kümülüsler hacimsel ışınlarla, alçak irtifadaki stratuslar ise ince bir katılımcı ortam tabakası olarak işlenir. Ufukta genellikle, hacimsel geçişin belirli bir solma mesafesinden sonra harmanlandığı, önceden işlenmiş bir gökyüzü küp haritası kullanılır.</p>
<p>Bulut bütçesini makul tutan şey bu katmanlamadır. Tek bir bulut türü tam kalitede 4-6 ms tüketebilir; farklı bulut irtifalarında farklı kalite seviyelerini katmanlamak, aynı görünümü yarı maliyetle koruyabilir.</p>
<img src="/img/blog/clouds_weather_cloud_layers.webp" alt="Üç bulut katmanına ayrılmış gün batımı gökyüzü: yüksek sirüs tutamları, orta irtifada kümülüs kümeleri ve ufka yakın alçak stratus pusu" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Vos, <a href="https://www.gdcvault.com/play/1023327/The-Real-Time-Volumetric-Cloudscapes" target="_blank" rel="noreferrer">Horizon Zero Dawn'ın Gerçek Zamanlı Hacimsel Bulut Manzaraları</a> (GDC 2016 videosu, katmanlama çözümlemesi ikinci yarıda).</li>
<li>Bauer, <a href="https://www.youtube.com/watch?v=IYxtqlD1-Ac" target="_blank" rel="noreferrer">Red Dead Redemption 2'nin Atmosferik Dünyasını Yaratmak</a> (SIGGRAPH 2019, RDR2'nin birleşik gökyüzü/bulut/hacimsel efekt iş akışı).</li>
<li>Hillaire, <a href="https://www.gdcvault.com/play/1029105/Volumetric-Clouds-and" target="_blank" rel="noreferrer">REDengine 4'te Hacimsel Bulutlar ve Mega Parçacıklar</a> (GDC 2025, Cyberpunk 2077'nin bulut iş akışı).</li>
</ul>
<h2 id="_5-froxel-ızgaralarıyla-hacimsel-sis" tabindex="-1">5. Froxel ızgaralarıyla hacimsel sis <a class="header-anchor" href="#_5-froxel-ızgaralarıyla-hacimsel-sis" aria-label="Permalink to &quot;5. Froxel ızgaralarıyla hacimsel sis&quot;"></a></h2>
<p>Sis, 2B bir ekran efekti değil, 3B bir alandır. Standart modern yaklaşım froxel ızgarasıdır: kameranın görüş frustum'una hizalanmış, her hücresinde (&quot;froxel&quot; = frustum + voxel) yoğunluk ve aydınlatılmış renk depolanan 3B bir doku. Bir compute shader, tüm ışık kaynaklarından gelen saçılmayı ızgaraya enjekte eder, görüş ışını boyunca sönümü biriktirir ve sonucu tam ekran geçişi olarak uygular.</p>
<p>Pencerelerden süzülen ışık huzmelerini, noktasal ışıkların çevresindeki renkli sisi ve patlamaların etrafındaki görünür hacimleri oluşturan şey budur. Aynı zamanda uzaktaki nesneleri havayla bütünleştirerek solduran &quot;atmosferik perspektifin&quot; altında yatan mekanizmadır. Teknik, Assassin's Creed 4 için Bart Wronski tarafından geliştirildi ve Frostbite'ta Sébastien Hillaire tarafından standartlaştırıldı.</p>
<img src="/img/blog/clouds_weather_froxel_fog.webp" alt="Kameraya yakın küçük, uzakta daha büyük hücrelere ve içlerinde sis parçacıklarına sahip 3B froxel ızgarası olarak görselleştirilmiş kamera frustum'u" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Wronski, <a href="https://bartwronski.com/wp-content/uploads/2014/08/bwronski_volumetric_fog_siggraph2014.pdf" target="_blank" rel="noreferrer">Hacimsel Sis: Atmosferik Saçılma için Birleşik Compute Shader Tabanlı Çözüm</a> (SIGGRAPH 2014, özgün froxel ızgarası makalesi).</li>
<li>Hillaire, <a href="http://www.frostbite.com/2015/08/physically-based-unified-volumetric-rendering-in-frostbite/" target="_blank" rel="noreferrer">Frostbite'ta Fizik Tabanlı ve Birleşik Hacimsel Render</a> (SIGGRAPH 2015, prodüksiyon kalitesindeki uygulama).</li>
<li>Kovalovs, <a href="https://history.siggraph.org/wp-content/uploads/2022/08/2020-Talks-Kovalovs_Volumetric-Effects-of-The-Last-of-Us-Part-Two.pdf" target="_blank" rel="noreferrer">The Last of Us Part Two'nun Hacimsel Efektleri</a> (SIGGRAPH 2020, zamansal jitter ve derinlik uyumlu kompozitleme notlarıyla).</li>
<li>Wright ve diğerleri, <a href="https://advances.realtimerendering.com/s2022/SIGGRAPH2022-Advances-Lumen-Wright%20et%20al.pdf" target="_blank" rel="noreferrer">Lumen: Unreal Engine 5'te Gerçek Zamanlı Küresel Aydınlatma</a> (SIGGRAPH 2022, Lumen'ın hacimsel sisle etkileşimini de içerir).</li>
</ul>
<h2 id="_6-tanrısal-ısınlar-ve-alacakaranlık-huzmeleri" tabindex="-1">6. Tanrısal ışınlar ve alacakaranlık huzmeleri <a class="header-anchor" href="#_6-tanrısal-ısınlar-ve-alacakaranlık-huzmeleri" aria-label="Permalink to &quot;6. Tanrısal ışınlar ve alacakaranlık huzmeleri&quot;"></a></h2>
<p>Puslu havada görülebilen güneş ışınları ayrı bir efekt değildir. Sis yoğunluğu ve gölge haritası aynı compute shader tarafından kullanılabildiği sürece aynı sis sisteminin doğal bir sonucu olarak ortaya çıkarlar. Shader bir froxel'e ışık enjekte ettiğinde, o froxel'in dünya konumundaki gölge haritasını örnekler. Gölgedeki hücreler karanlık kalırken aydınlıktaki hücreler güneşin rengini alır. Kamera ışını sonuç boyunca yürütüldüğünde parlak hücreler kesintisiz ışık huzmeleri oluşturur.</p>
<p>Daha ucuz ekran uzayı çeşitleri de vardır (güneş konumundan derinlik tamponuna doğru radyal bulanıklaştırma) ve mobil ya da düşük seviye donanımlarda hâlâ doğru tercihtir. Ekran dışındaki güneş konumlarını yakalayamazlar ancak maliyetleri yok denecek kadar azdır.</p>
<img src="/img/blog/clouds_weather_god_rays.webp" alt="Ağaç gövdeleri ve yer sisi arasından geçen güneş ışınlarının belirgin tanrısal ışık huzmeleri oluşturduğu şafak vakti ormanı" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Mitchell, <a href="https://developer.nvidia.com/gpugems/gpugems3/part-ii-light-and-shadows/chapter-13-volumetric-light-scattering-post-process" target="_blank" rel="noreferrer">Post-Process Olarak Hacimsel Işık Saçılması</a> (GPU Gems 3, ekran uzayı radyal bulanıklaştırma yaklaşımı).</li>
<li>Engelhardt ve Dachsbacher, <a href="https://cg.ivd.kit.edu/publications/2010/epipolar/EpipolarSampling.pdf" target="_blank" rel="noreferrer">Katılımcı Ortamlarda Gölgeler ve Alacakaranlık Işınları için Epipolar Örnekleme</a> (I3D 2010, daha isabetli GPU tekniği).</li>
<li>Vos, <a href="https://www.guerrilla-games.com/read/volumetric-light-effects-in-killzone-shadow-fall" target="_blank" rel="noreferrer">Killzone: Shadow Fall'da Hacimsel Işık Efektleri</a> (SIGGRAPH 2014, gölge entegrasyonuna sahip prodüksiyon sürümü).</li>
</ul>
<h2 id="_7-simsek-ve-stokastik-hava-olayları" tabindex="-1">7. Şimşek ve stokastik hava olayları <a class="header-anchor" href="#_7-simsek-ve-stokastik-hava-olayları" aria-label="Permalink to &quot;7. Şimşek ve stokastik hava olayları&quot;"></a></h2>
<p>Şimşek, iki parçadan oluşan tek karelik bir efekttir: yıldırım mesh'i ile sahne genelindeki ton eşleme ve aydınlatma tepkisi. Yıldırımın kendisi genellikle özyinelemeli çizgi parçası bölme algoritmasıyla oluşturulan, kaotik görünmesi için konumları saptırılmış ve yere doğru incelen prosedürel bir billboard mesh'idir. Bazı oyun motorları bunu ekran uzayında eklemeli bir parlama olarak işlerken diğerleri, dünyaya tek karelik bir noktasal ışık enjeksiyonu aracılığıyla ışık saçan, tamamen aydınlatılmış emissive geometri olarak işler.</p>
<p>Asıl ilginç kısım diğer <em>her şeydir</em>: bulutların altı aşağıdan aydınlanır, zemin iki kare boyunca parlar, otomatik pozlama ölçümü birkaç karede toparlanır ve mesafeye bağlı olarak gecikmeli bir gök gürültüsü sesi çalınır. İyi uygulandığında bu yaklaşım, 16 ms'lik bir parlamayı beş saniyelik bir sekansa dönüştürerek hava durumunun yalnızca dünyanın üzerinde değil, dünyanın içinde gerçekleşen bir olay olduğu hissini verir.</p>
<img src="/img/blog/clouds_weather_lightning.webp" alt="Alacakaranlıkta bir fırtına bulutundan düşerek bulutların altını ve küçük bir köy silüetini aydınlatan çatallı yıldırım" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Reed ve Wyvill, <a href="https://dl.acm.org/doi/10.1145/192161.192256" target="_blank" rel="noreferrer">Yıldırımın Görsel Simülasyonu</a> (SIGGRAPH 1994, herkesin hâlâ kullandığı özyinelemeli yıldırım algoritması).</li>
<li>Kim ve Lin, <a href="https://gamma.cs.unc.edu/POWER/" target="_blank" rel="noreferrer">Uyarlanabilir Mesh Kullanarak Hızlı Yıldırım Animasyonu</a> (IEEE TVCG 2007, fiziksel açıdan daha temellendirilmiş).</li>
<li>Bauer, <a href="https://www.youtube.com/watch?v=IYxtqlD1-Ac" target="_blank" rel="noreferrer">Red Dead Redemption 2'nin Atmosferik Dünyasını Yaratmak</a> (SIGGRAPH 2019, şimşek zamanlaması dâhil RDR2'nin fırtına iş akışı).</li>
</ul>
<h2 id="_8-yagmur-parcacıkları-yagmur-mesh-leri-ve-ekran-uzayı-damlaları" tabindex="-1">8. Yağmur parçacıkları, yağmur mesh'leri ve ekran uzayı damlaları <a class="header-anchor" href="#_8-yagmur-parcacıkları-yagmur-mesh-leri-ve-ekran-uzayı-damlaları" aria-label="Permalink to &quot;8. Yağmur parçacıkları, yağmur mesh'leri ve ekran uzayı damlaları&quot;"></a></h2>
<p>Modern oyunlarda yağan yağmur nadiren yalnızca parçacıklardan oluşur. Ucuz ve ikna edici çözüm; dikey ya da ekrana hizalı dörtgenler üzerine gerilmiş, sahnedeki diğer her şeyle aynı güneş ve gökyüzü probları tarafından aydınlatılan, kayan az sayıda doku kullanmaktır. Kameraya yaklaştıkça bağımsız çizgi parçacıkları ayrıntı katar. Kamera merceğinin üzerindeyse damlacık dokuları, kayan izler ve çarpma dalgaları, &quot;fırtınanın içindesiniz&quot; hissini güçlendirir.</p>
<p>Rüzgâr, yağmurun yönünü etkiler. Aynı rüzgâr vektörü bulutların hava durumu haritasını iter, çimleri büker ve yağmur dörtgenlerini eğer. Sahne genelinde tek bir vektör, onlarca tüketici.
<img src="/img/blog/clouds_weather_rain_storm.webp" alt="Uzak farların aydınlattığı sağanak yağmur perdeleri ve ıslak yoldaki halkalarla, gece yaşanan şiddetli yağmur fırtınası" style="width:100%;border-radius:8px;margin:1.5rem 0" /></p>
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Tatarchuk, <a href="https://gpuopen.com/wp-content/uploads/2018/04/Tatarchuk-Rain-Rendering-EGSR2006.pdf" target="_blank" rel="noreferrer">Şehir Ortamlarında Sanatçı Tarafından Yönlendirilebilir Gerçek Zamanlı Yağmur İşleme</a> (EGSR 2006, katmanlı yağmur için temel referans).</li>
<li>Garg ve Nayar, <a href="https://www1.cs.columbia.edu/CAVE/projects/rain_ren/rain_ren.php" target="_blank" rel="noreferrer">Yağmur İzlerinin Fotogerçekçi İşlenmesi</a> (SIGGRAPH 2006, ışığın yağmur damlalarından geçiş fiziği).</li>
<li>Wojciechowski, <a href="https://www.gdcvault.com/play/1027382/Rain-In-Cyberpunk-2077" target="_blank" rel="noreferrer">Cyberpunk 2077'de Yağmur</a> (GDC 2021, modern bir prodüksiyon incelemesi).</li>
</ul>
<h2 id="_9-islak-yuzeyler-su-birikintileri-ve-halkalar" tabindex="-1">9. Islak yüzeyler, su birikintileri ve halkalar <a class="header-anchor" href="#_9-islak-yuzeyler-su-birikintileri-ve-halkalar" aria-label="Permalink to &quot;9. Islak yüzeyler, su birikintileri ve halkalar&quot;"></a></h2>
<p>Zemini değiştirmeyen yağmur hemen yapay görünür. Islak yüzeyler; albedolarını koyulaştırarak (su, gelen ışığı emer), normal haritalarını düzleştirerek (su tabakası mikro yüzeyi pürüzsüzleştirir) ve pürüzlülüklerini azaltarak (su, eğik açılarda neredeyse kusursuz bir aynadır) tepki verir. Gölgelendiricideki değişiklik küçük, görsel değişiklik ise çok büyüktür.</p>
<p>Su birikintileri maskelerle yönlendirilir: yüksekliğe dayalı veya köşe noktalarına boyanmış bir maske, &quot;ıslaklık&quot; parametresi yükseldikçe suyla dolacak alçak noktaları tanımlar. Halkalar, yağmur damlalarının çarpmasıyla tetiklenen flipbook normal haritası dokularıdır. Gerçekten iyi uygulamalarda ıslaklık durumu zaman içinde birikir; böylece uzun bir yağmur fırtınası dünyayı yavaşça sırılsıklam ederken kısa bir sağanak yalnızca yüksek noktaları koyulaştırır.</p>
<img src="/img/blog/clouds_weather_wet_surfaces.webp" alt="Neon tabelaları yansıtan sığ su birikintileri ve yağmur damlalarının oluşturduğu halkalarla, gece vakti ıslak bir arnavut kaldırımlı sokak" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Lagarde ve de Rousiers, <a href="https://seblagarde.wordpress.com/2015/07/14/siggraph-2014-moving-frostbite-to-physically-based-rendering/" target="_blank" rel="noreferrer">Frostbite'ı Fizik Tabanlı İşlemeye Taşımak 3.0, bölüm 5.5</a> (SIGGRAPH 2014, ıslak yüzeyler için temel PBR ayarlamaları).</li>
<li>Lagarde, <a href="https://seblagarde.wordpress.com/2011/08/17/feeding-a-physical-based-lighting-mode/" target="_blank" rel="noreferrer">Fizik Tabanlı Bir Gölgelendirme Modelini Benimsemek</a> (ıslak PBR matematiğini içeren özgün blog serisi).</li>
<li>Cyanilux, <a href="https://www.cyanilux.com/tutorials/rain-effects-breakdown/" target="_blank" rel="noreferrer">Yağmur Efektlerinin İncelenmesi</a> (su birikintileri, halkalar ve damlacıklar hakkında anlaşılır bir Shader Graph rehberi).</li>
</ul>
<h2 id="_10-kar-birikimi-ve-deformasyonu" tabindex="-1">10. Kar birikimi ve deformasyonu <a class="header-anchor" href="#_10-kar-birikimi-ve-deformasyonu" aria-label="Permalink to &quot;10. Kar birikimi ve deformasyonu&quot;"></a></h2>
<p>Kar, yağmurun simetrik problemidir: dünya onu yalnızca almakla kalmamalı, hatırlamalıdır da. Standart yaklaşım, gökyüzünün görünür olduğu her yerde zaman içinde biriken, üstten görünüşlü bir &quot;kar birikimi&quot; dokusu kullanır (üstten görünüşlü bir derinlik veya gölge haritasına göre hesaplanır). Arazi gölgelendiricisi bu maskeyi örnekler ve gölgeli bölgelerde kar malzemesini, açıkta kalan alanlarda ise kar derinliğine göre yer değiştirmeyi harmanlar.</p>
<p>Ayak izleri ve lastik izleri, oyuncuyu merkez alan kayan bir deformasyon haritasına işlenir. Kamera hareket ettikçe eski ayak izleri kayarak görünümden çıkar ve doku döngüsel olarak sarılır. Arazi veya kar gölgelendiricisi bu deformasyon haritasını örnekler ve yazılmış noktalardaki köşe noktalarını aşağı iter. Battlefield 5'in kar sistemi bunu donanım mozaikleme ile yapar; daha düşük maliyetli yaklaşımlar yalnızca köşe noktası yer değiştirmesiyle birlikte yüksek yoğunluklu bir arazi ağı kullanır.</p>
<img src="/img/blog/clouds_weather_snow_deformation.webp" alt="Taze ayak izleri, kayaların önünde birikmiş kar yığınları, yağan kar taneleri ve puslu uzak dağlarla stilize edilmiş karlı bir manzara" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Barré-Brisebois, <a href="https://www.digitalfoundry.net/articles/digitalfoundry-2018-hands-on-with-battlefield-5s-closed-alpha" target="_blank" rel="noreferrer">Battlefield 5 ile Uygulamalı Deneyim: Küçük Şeyler Neden Önemlidir?</a> (Frostbite kar sisteminin prodüksiyon incelemesi).</li>
<li>St-Amour, <a href="https://is.muni.cz/th/m2v6i/real-time_snow_deformation.txt?lang=cs" target="_blank" rel="noreferrer">Gerçek zamanlı kar deformasyonu</a> (GPU uygulamasının tüm ayrıntılarını içeren bir tez).</li>
<li>Andersson, <a href="https://media.contentapi.ea.com/content/dam/eacom/frostbite/files/chapter5-andersson-terrain-rendering-in-frostbite.pdf" target="_blank" rel="noreferrer">Prosedürel Gölgelendirici Katmanlaması Kullanarak Frostbite'ta Arazi İşleme</a> (kar birikiminin üzerine kurulduğu katman sisteminin temeli).</li>
</ul>
<h2 id="_11-kuresel-bir-sistem-olarak-ruzgar" tabindex="-1">11. Küresel bir sistem olarak rüzgâr <a class="header-anchor" href="#_11-kuresel-bir-sistem-olarak-ruzgar" aria-label="Permalink to &quot;11. Küresel bir sistem olarak rüzgâr&quot;"></a></h2>
<p>Rüzgâr bir parçacık efekti değildir. Prodüksiyon motorlarında, <em>her</em> dinamik sistemin köşe noktası gölgelendiricisinden okuduğu tek bir küresel vektördür (bazen düşük çözünürlüklü bir 3B alandır). Çimen yaprakları eğilir, ağaç dalları sallanır, kumaşlar dalgalanır, yapraklar sürüklenir, yağmur eğik yağar, duman taşınır ve bulutların hava durumu haritaları kayar. Kare başına güncellenen tek bir uniform değer, onlarca tüketici.</p>
<p>Daha gelişmiş sürüm, dünya konumuna göre örneklenen yön ve şiddeti depolayan bir &quot;rüzgâr ızgarasıdır&quot;; bu sayede yerel rüzgâr darbeleri, korunaklı vadiler ve binaların ardındaki iz akımları bulunan fırtınalar oluşturulabilir. Ayrıca aynı ağaçların eşzamanlı sallanmaması için bitki örtüsüne genellikle içerik üretimi sırasında köşe noktası başına bir ofset işlenir. Sonuç, aynı ritimde nefes alan bir dünyadır.</p>
<img src="/img/blog/clouds_weather_wind_foliage.webp" alt="Fırtınalı bulutların altında, ön planda yapraklar girdaplar oluştururken çimenleri ve ağaçları yana doğru savuran güçlü rüzgâr" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>McAuley, <a href="https://www.gdcvault.com/play/1022235/Rendering-the-World-of-Far" target="_blank" rel="noreferrer">Far Cry 4 Dünyasının İşlenmesi</a> (GDC 2015, Far Cry 4'ün bitki örtüsü rüzgâr ızgarasını içerir).</li>
<li>Habel ve Wimmer, <a href="https://www.cg.tuwien.ac.at/research/publications/2007/HABEL-2007-IIM/" target="_blank" rel="noreferrer">Billboard Bulutları Kullanarak Manzaraların Gerçekçi ve Gerçek Zamanlı İşlenmesi</a> (eski bir kaynak olsa da rüzgârın bitki örtüsü üzerindeki etkisine ilişkin matematik değişmedi).</li>
<li>Frostbite, <a href="https://www.guerrilla-games.com/read/the-vegetation-of-horizon-zero-dawn" target="_blank" rel="noreferrer">Horizon Zero Dawn'ın Bitki Örtüsü</a> (SIGGRAPH 2017, rüzgâr sistemi mimarisiyle birlikte).</li>
</ul>
<h2 id="_12-kum-fırtınaları-tipiler-ve-yogun-hava-olayları" tabindex="-1">12. Kum fırtınaları, tipiler ve yoğun hava olayları <a class="header-anchor" href="#_12-kum-fırtınaları-tipiler-ve-yogun-hava-olayları" aria-label="Permalink to &quot;12. Kum fırtınaları, tipiler ve yoğun hava olayları&quot;"></a></h2>
<p>Şiddetli hava olayları başlı başına bir işleme kategorisidir. Kum fırtınası; güçlü bir yönsel eğilime ve yoğun uzaklık sisine sahip, kalın, opak ve zemine hizalı bir sistir. Tipi, buna kameraya yakın bir parçacık hücumu ve azalan görüş mesafesi ekler. Volkanik kül ve duman da farklı renklerle aynı mimariyi kullanır.</p>
<p>Bunları inandırıcı kılan parçacıklar değil, <em>bağlantıdır</em>: güneş kararır, gökyüzünün tonu değişir, son işleme renk derecelendirmesi kayar, ortam sesleri değiştirilir, ayak sesi efektleri farklılaşır ve oyuncunun sesi varsa boğuklaşır. İşleyici yalnızca habercidir; sürükleyicilik, oyundaki her sistemin aynı anda tepki vermesinden doğar.</p>
<img src="/img/blog/clouds_weather_sandstorm.webp" alt="Üstünde morarmış bir gökyüzü ve arkasında açık mavi gök bulunan, çöl ovası boyunca ilerleyen turuncu toz ve kum duvarı" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Burley, <a href="https://www.gdcvault.com/play/1024954/The-Real-time-Sky-and" target="_blank" rel="noreferrer">Uncharted: The Lost Legacy'nin Gerçek Zamanlı Gökyüzü ve Atmosferi</a> (GDC 2018, yoğun hava olaylarının bileşimine ilişkin notlarla).</li>
<li>Khalifa, <a href="https://www.gdcvault.com/play/1027587/Atmospheric-Weather-Effects-in-Forza" target="_blank" rel="noreferrer">Forza Horizon 5'te Atmosferik Hava Efektleri</a> (GDC 2022, modern açık dünya hava sistemi).</li>
<li>Karis, <a href="https://advances.realtimerendering.com/s2021/" target="_blank" rel="noreferrer">Unreal Engine 5 &quot;Lumen in the Land of Nanite&quot; Demosunun Arkasındaki Teknoloji</a> (SIGGRAPH 2021, mağaradaki toz sahnesinin hacimsel efekt yığını).</li>
</ul>
<h2 id="_13-gunun-saati-ve-dinamik-gokyuzu" tabindex="-1">13. Günün saati ve dinamik gökyüzü <a class="header-anchor" href="#_13-gunun-saati-ve-dinamik-gokyuzu" aria-label="Permalink to &quot;13. Günün saati ve dinamik gökyüzü&quot;"></a></h2>
<p>Gerçek zamanlı gün döngüsü, bu listedeki diğer tüm sistemleri yayınlamaya değer kılan çarpandır. Güneşin yönü ve rengi, 24 dakikalık veya 24 saatlik bir döngü boyunca güncellenir. Atmosfer LUT'si güneş açısıyla birlikte güncellenir. Bulut aydınlatması her karede yeniden hesaplanır. Gölge kademeleri yeniden yönlendirilir. Yansıma probları yenilenir. Ortam rengi değişir. Son işleme pozlaması uyum sağlar.</p>
<p>Bunu görünür yapaylıklar olmadan gerçekleştirmek, büyük ölçüde doku önbellekleme ve zamansal kararlılık meselesidir. Hızlı teknikler, gökyüzünü sabit güneş açılarında önceden hesaplayıp aralarında enterpolasyon yapar; daha yavaş teknikler ise her karede yeniden hesaplar. Hillaire'in 2020 atmosfer modeli yeniden hesaplama için yeterince hızlıdır; UE5'in bunu kullanmasının nedeni de budur. Bulut hava durumu haritası rüzgârla birlikte kayar; böylece kimsenin anahtar kareler hazırlamasına gerek kalmadan bulutluluk doğal biçimde değişir.</p>
<img src="/img/blog/clouds_weather_time_of_day.webp" alt="Aynı manzara üzerinde üç dikey şerit: şafak pembesi, öğle mavisi ve gün batımı kırmızısı; tümünde aynı tepe silüeti" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Hillaire, <a href="https://sebh.github.io/publications/egsr2020.pdf" target="_blank" rel="noreferrer">Ölçeklenebilir ve Prodüksiyona Hazır Bir Gökyüzü ve Atmosfer İşleme Tekniği</a> (EGSR 2020, dinamik gün döngüsü tartışmasıyla birlikte).</li>
<li>Pesce, <a href="https://www.realtimerendering.com/raytracinggems/rtg2/index.html" target="_blank" rel="noreferrer">Gerçek Zamanlı Gökyüzü İşleme: Teknikler ve Ödünleşimler</a> (Ray Tracing Gems II bölümü, modern bir genel bakış).</li>
<li>Bauer, <a href="https://www.youtube.com/watch?v=IYxtqlD1-Ac" target="_blank" rel="noreferrer">Red Dead Redemption 2'nin Atmosferik Dünyasını Oluşturmak</a> (SIGGRAPH 2019, 24 saatlik işlem hattıyla birlikte).</li>
</ul>
<h2 id="_14-hava-durumu-durum-makinesi" tabindex="-1">14. Hava durumu durum makinesi <a class="header-anchor" href="#_14-hava-durumu-durum-makinesi" aria-label="Permalink to &quot;14. Hava durumu durum makinesi&quot;"></a></h2>
<p>Tüm bunların altında küçük bir durum makinesi vardır. Çoğu oyun; her biri bulutluluk ve bulut türü, rüzgâr hızı ve yönü, yağış türü ve yoğunluğu, ortam rengi tonları, ses profili ve son işleme renk derecesi gibi parametrelerle tanımlanan 4 ila 12 hava durumu durumuyla (açık, parçalı bulutlu, kapalı, hafif yağmur, şiddetli yağmur, gök gürültülü fırtına, sis, kar, tipi, kum fırtınası) yayınlanır.</p>
<p>Geçişler, 30 ila 120 saniye boyunca parametre kümeleri arasında yapılan doğrusal enterpolasyonlardır. Geçiş özel bir durum değildir; yalnızca iki durumun doğrusal olarak harmanlanmasıdır ve her işleme alt sistemi o karedeki mevcut parametre değerlerini okur. Hava durumu betiklenebilir (bir ara sahne fırtına gerektirir), seed değeriyle üretilebilir (oyun içindeki her gün ve bölge için deterministik olur, böylece aynı dünyadaki iki oyuncu aynı hava durumunu görür) veya tamamen bir bölge ızgarası üzerinde tasarlanabilir. En temiz işlem hatları, üçünü de aynı parametre arabelleğine yazan farklı zamanlayıcılar olarak ele alır.</p>
<img src="/img/blog/clouds_weather_state_machine.webp" alt="Aynı sahnenin yan yana görünümü: solda açık ve güneşli hava, sağda ise ıslak ve parıldayan yüzeylerle fırtınalı yağmur" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine kaynaklar:</p>
<ul>
<li>Bauer, <a href="https://www.youtube.com/watch?v=IYxtqlD1-Ac" target="_blank" rel="noreferrer">Red Dead Redemption 2'nin Atmosferik Dünyasını Oluşturmak</a> (SIGGRAPH 2019, hava durumu durum işlem hattıyla birlikte).</li>
<li>Khalifa, <a href="https://www.gdcvault.com/play/1027587/Atmospheric-Weather-Effects-in-Forza" target="_blank" rel="noreferrer">Forza Horizon 5'te Atmosferik Hava Efektleri</a> (GDC 2022, parametre harmanlama yaklaşımıyla birlikte).</li>
<li>Schneider, <a href="https://www.guerrilla-games.com/read/the-real-time-volumetric-cloudscapes-of-horizon-zero-dawn" target="_blank" rel="noreferrer">Horizon Zero Dawn'ın Gerçek Zamanlı Hacimsel Bulut Manzaraları</a> (SIGGRAPH 2015, hava durumu haritasıyla yönlendirilen bulut evrimiyle birlikte).</li>
</ul>
<h2 id="_15-sinematik-anlar" tabindex="-1">15. Sinematik anlar <a class="header-anchor" href="#_15-sinematik-anlar" aria-label="Permalink to &quot;15. Sinematik anlar&quot;"></a></h2>
<p>Tüm bu sistem yığını birkaç özgün an için vardır. Bir fırtına cephesi yaklaşırken bir sırtın üzerinde durmak. Güneş ışığının ağaç örtüsündeki bir açıklığı delip geçtiğini izlemek. Bir mağaradan çıkıp kara adım atmak. Bir kümülüs bulutunun içinden uçarken içerideki ışığı görmek.</p>
<p>Bunlar, oyuncuların ekran görüntülerini aldığı anlardır. Aynı zamanda yukarıdaki her sistemin eşzamanlı çalışması gereken anlardır: bulut hacimleri, atmosferik saçılma, gölge entegrasyonlu sis, ıslak PBR, bitki örtüsündeki rüzgâr, günün saatine bağlı renk derecelendirmesi ve hava durumları arasındaki geçiş; bunların tümü tek karede bir araya gelir. Bunlardan birini bile yanlış yaparsanız büyü bozulur.</p>
<img src="/img/blog/clouds_weather_cloud_sea.webp" alt="Güneşle aydınlanan bulut tepeleri ve aşağıdaki gölgeli vadilerle, bulut denizinin içinden yükselen tek bir dağ zirvesine yukarıdan bakış" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<h2 id="bunun-tarayıcı-icin-anlamı" tabindex="-1">Bunun tarayıcı için anlamı <a class="header-anchor" href="#bunun-tarayıcı-icin-anlamı" aria-label="Permalink to &quot;Bunun tarayıcı için anlamı&quot;"></a></h2>
<p>Bu tekniklerin çoğu WebGPU'ya doğrudan uyarlanabilir. <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Açık dünya tarayıcı motorunda</a> temel atmosferik sisi, eşdikdörtgensel skybox harmanlamasını ve ekran uzayında uzaklık pusunu kullanıma sunduk. Arazi işlem hattı artık kararlı olduğuna göre daha zor parçalar (tam hacimsel bulutlar, froxel ızgaralı sis, dinamik su birikintilerine sahip ıslak PBR, kar deformasyon haritaları) sıradaki bariz adımdır. Spike 24'ün skybox'tan parça başına sis rengi örneklemesi bu yapbozun bir parçasıdır. Aynı atmosfer LUT'sine veri sağlayan, compute shader tabanlı bir bulut raymarcher ise bir sonraki adımdır.</p>
<p>İyi haber şu ki tarayıcı donanımlarının alt sınırı artık yeterince yüksek. WebGPU compute, 3B dokular, dolaylı dispatch ve zaman damgası sorgularının tümü mevcut. Hillaire'in 2020 atmosferi birçok kez WebGL'ye taşındı. Schneider'ın Nubis sistemi, mekanik düzenlemelerle WGSL'ye çevrilebilen açık kaynaklı GLSL referans uygulamalarına sahip. Artık bir tarayıcı oyununun konsol oyunuyla aynı gökyüzüne sahip olamaması için işlemeye dayalı bir neden yok. Yalnızca mühendislik nedenleri var ve mühendislik nedenleri bizim sevdiğimiz türden.</p>
<h2 id="tum-sistem-yıgını-hakkında-ek-kaynaklar" tabindex="-1">Tüm sistem yığını hakkında ek kaynaklar <a class="header-anchor" href="#tum-sistem-yıgını-hakkında-ek-kaynaklar" aria-label="Permalink to &quot;Tüm sistem yığını hakkında ek kaynaklar&quot;"></a></h2>
<p>Tüm bunları bir araya getiren tek bir kaynak istiyorsanız SIGGRAPH'ın &quot;Advances in Real-Time Rendering in Games&quot; arşivi (<a href="https://advances.realtimerendering.com/" target="_blank" rel="noreferrer">advances.realtimerendering.com</a>), 2014'e kadar uzanan temel hava durumu ve atmosfer sunumlarını içerir. Belirli oyunların gökyüzünü ve hava durumunu nasıl işlediğine dair prodüksiyon incelemeleri için <a href="http://www.adriancourreges.com/blog/" target="_blank" rel="noreferrer">Adrian Courrèges'in GPU profilleme makaleleri</a>, GTA V, Horizon Zero Dawn ve Doom Eternal'ın ayrıntılı kare kare çözümlemelerini içerir. Özellikle gökyüzü ve atmosfer matematiği için <a href="https://www.scratchapixel.com/lessons/3d-basic-rendering/volume-rendering-for-developers/intro-volume-rendering.html" target="_blank" rel="noreferrer">scratchapixel.com'un hacim işleme bölümü</a> en anlaşılır giriş kaynağıdır; Hillaire'in açık kaynaklı <a href="https://github.com/sebh/UnrealEngineSkyAtmosphere" target="_blank" rel="noreferrer">uygulama deposu</a> ise prodüksiyon kalitesindeki referanstır.</p>
]]></content:encoded>
            <enclosure url="https://app.cinevva.com/img/blog/clouds_weather_hero.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Modern AAA oyunlarda kullanılan render tekniklerinin kısa bir listesi]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-05-03-aaa-rendering-techniques</link>
            <guid>https://app.cinevva.com/tr/blog/2026-05-03-aaa-rendering-techniques</guid>
            <pubDate>Sun, 03 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Nanite sanallaştırılmış geometriden ReSTIR yol izlemeye ve makine öğrenmesi tabanlı çözünürlük yükseltmeye kadar günümüzün AAA görsellerinin temelindeki render teknikleri ve her biri için ayrıntılı teknik kaynaklar.]]></description>
            <content:encoded><![CDATA[<h1 id="modern-aaa-oyunlarda-kullanılan-render-tekniklerinin-kısa-bir-listesi" tabindex="-1">Modern AAA oyunlarda kullanılan render tekniklerinin kısa bir listesi <a class="header-anchor" href="#modern-aaa-oyunlarda-kullanılan-render-tekniklerinin-kısa-bir-listesi" aria-label="Permalink to &quot;Modern AAA oyunlarda kullanılan render tekniklerinin kısa bir listesi&quot;"></a></h1>
<p><em><a href="/tr/about.html">Oleg Sidorkin</a>, CTO ve Cinevva Kurucu Ortağı</em></p>
<img src="/img/blog/aaa_rendering_hero.webp" alt="Modern bir AAA oyunda PBR malzemeleri, sanallaştırılmış geometriyi ve ışın izlemeli aydınlatmayı gösteren birleşik sahne" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>2026 yapımı bir AAA oyunun render işlem hattını açıp incelerseniz bulacağınız şeylerin çoğu, farklı stüdyoların oyunlarında kullanılan küçük bir teknik kümesine dayanır. İsimler oyun motorları arasında değişse de temel fikirler aynıdır. İşte ekrandaki asıl işi yapan tekniklerin kısa bir listesi; her biri için bir görsel ve birkaç ayrıntılı teknik kaynakla birlikte.</p>
<h2 id="_1-fizik-tabanlı-render-pbr" tabindex="-1">1. Fizik tabanlı render (PBR) <a class="header-anchor" href="#_1-fizik-tabanlı-render-pbr" aria-label="Permalink to &quot;1. Fizik tabanlı render (PBR)&quot;"></a></h2>
<p>Malzemeler albedo, pürüzlülük, metaliklik, normal ve ortam örtme dokularıyla tanımlanır; enerjiyi koruyan gölgelendiricilerle (Cook-Torrance yansıması, Lambert veya Disney yayınık yansıması) aydınlatılır. Bu, tüm modern AAA oyun motorlarının temel aldığı standarttır. Bir yüzey güneş ışığı, lamba ışığı ve el feneri altında tutarlı görünüyorsa bunun nedeni PBR'dır.</p>
<img src="/img/blog/aaa_pbr_materials.webp" alt="PBR malzemeleriyle render edilmiş demir miğfer ve albedo, pürüzlülük, metaliklik ve normal haritalarını gösteren havada asılı doku örnekleri" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Ayrıntılı kaynaklar:</p>
<ul>
<li>Burley, <a href="https://media.disneyanimation.com/uploads/production/publication_asset/48/asset/s2012_pbs_disney_brdf_notes_v3.pdf" target="_blank" rel="noreferrer">Disney'de Fizik Tabanlı Gölgelendirme</a> (orijinal &quot;Disney BRDF&quot; ders notları, SIGGRAPH 2012).</li>
<li>Karis, <a href="https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf" target="_blank" rel="noreferrer">Unreal Engine 4'te Gerçekçi Gölgelendirme</a> (SIGGRAPH 2013, temel UE4 PBR sunumu).</li>
<li>Lagarde ve de Rousiers, <a href="https://seblagarde.wordpress.com/2015/07/14/siggraph-2014-moving-frostbite-to-physically-based-rendering/" target="_blank" rel="noreferrer">Frostbite'ı Fizik Tabanlı Render 3.0'a Taşımak</a> (SIGGRAPH 2014, eksiksiz Frostbite işlem hattı).</li>
<li><a href="https://www.realtimerendering.com/" target="_blank" rel="noreferrer">Gerçek Zamanlı Render, 4. baskı, 9. bölüm</a> (temel ders kitabı kaynağı).</li>
</ul>
<h2 id="_2-ertelenmis-golgelendirme-ve-gorunurluk-tamponu-golgelendirmesi" tabindex="-1">2. Ertelenmiş gölgelendirme ve görünürlük tamponu gölgelendirmesi <a class="header-anchor" href="#_2-ertelenmis-golgelendirme-ve-gorunurluk-tamponu-golgelendirmesi" aria-label="Permalink to &quot;2. Ertelenmiş gölgelendirme ve görünürlük tamponu gölgelendirmesi&quot;"></a></h2>
<p>Geometri önce öznitelikleri (normaller, malzeme kimlikleri, derinlik) bir G-buffer'a veya görünürlük tamponuna yazar. Aydınlatma, bu tamponları okuyup her pikseli bir kez gölgelendiren tam ekran bir geçiş olarak çalışır. Görünürlük tamponları (Nanite ve benzeri sistemlerde kullanılır) yalnızca üçgen kimliklerini depolayıp malzeme parametrelerini daha sonra piksel başına çözümleyerek bunu daha da ileri taşır; böylece yoğun geometrilerde üst üste çizim maliyeti düşük kalır.</p>
<img src="/img/blog/aaa_deferred_gbuffer.webp" alt="Nihai renk, dünya normalleri, derinlik ve malzeme kimliği panellerine ayrılmış ertelenmiş gölgelendirme G-buffer'ı" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Ayrıntılı kaynaklar:</p>
<ul>
<li>Engel, <a href="https://download.nvidia.com/developer/presentations/2004/6800_Leagues/6800_Leagues_Deferred_Shading.pdf" target="_blank" rel="noreferrer">Ertelenmiş Gölgelendirme</a> (NVIDIA, alanın temelini atan sunum).</li>
<li>Burns ve Hunt, <a href="http://jcgt.org/published/0002/02/04/" target="_blank" rel="noreferrer">Görünürlük Tamponu: Ertelenmiş Gölgelendirmeye Önbellek Dostu Bir Yaklaşım</a> (JCGT 2013, orijinal görünürlük tamponu makalesi).</li>
<li>Wihlidal, <a href="http://www.frostbite.com/2016/03/optimizing-the-graphics-pipeline-with-compute/" target="_blank" rel="noreferrer">&quot;Grafik İşlem Hattını Compute ile Optimize Etmek&quot;</a> (GDC 2016, Frostbite'ın compute tabanlı ertelenmiş render yolu).</li>
<li>Karis, Stubbe, Wihlidal, <a href="https://advances.realtimerendering.com/s2021/Karis_Nanite_SIGGRAPH_Advances_2021_final.pdf" target="_blank" rel="noreferrer">Nanite Sanallaştırılmış Geometriye Derinlemesine Bakış</a> (SIGGRAPH 2021, Nanite görünürlük tamponunu ayrıntılarıyla ele alır).</li>
</ul>
<h2 id="_3-sanallastırılmıs-geometri-nanite-tarzı" tabindex="-1">3. Sanallaştırılmış geometri (Nanite tarzı) <a class="header-anchor" href="#_3-sanallastırılmıs-geometri-nanite-tarzı" aria-label="Permalink to &quot;3. Sanallaştırılmış geometri (Nanite tarzı)&quot;"></a></h2>
<p>Mesh'ler önceden bir küme hiyerarşisi hâlinde oluşturulur. Çalışma zamanında GPU, her pikselin çözünürlüğüne uygun kümeleri seçip akışla yükler; böylece manuel LOD'lara gerek kalmadan piksel altı hassasiyetinde ayrıntı elde edilir. Unreal'ın Nanite sistemi bunun en bilinen örneğidir. Diğer oyun motorları da artık kendi türevlerini sunuyor. Pratikte bunun sonucu, LOD hazırlamaya gerek kalmadan film kalitesinde varlıkların gerçek zamanlı kullanılmasıdır.</p>
<img src="/img/blog/aaa_virtualized_geometry.webp" alt="Solda pürüzsüz render, sağda canlı renklerle gösterilen piksel altı meshlet kümeleri" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Ayrıntılı kaynaklar:</p>
<ul>
<li>Karis, Stubbe, Wihlidal, <a href="https://advances.realtimerendering.com/s2021/Karis_Nanite_SIGGRAPH_Advances_2021_final.pdf" target="_blank" rel="noreferrer">Nanite Sanallaştırılmış Geometriye Derinlemesine Bakış</a> (SIGGRAPH 2021).</li>
<li>Brian Karis, <a href="https://www.youtube.com/watch?v=eviSykqSUUw" target="_blank" rel="noreferrer">Nanite GDC 2021 sunumu</a> (kolay anlaşılır bir video anlatımı).</li>
<li>Liktor, <a href="https://research.activision.com/publications/2021/09/geometry-rendering-pipeline-architecture-at-activision" target="_blank" rel="noreferrer">Activision'da Geometri Render İşlem Hattı Mimarisi</a> (küme tabanlı render, 2021).</li>
<li>Schied ve diğerleri, <a href="https://research.nvidia.com/publication/2017-07_spatiotemporal-variance-guided-filtering-real-time-reconstruction-path-traced" target="_blank" rel="noreferrer">Uzamsal-Zamansal Varyans Güdümlü Filtreleme</a> (ilgili küme ayıklama teknikleri).</li>
</ul>
<h2 id="_4-golgeler-yansımalar-ve-ao-icin-gercek-zamanlı-ısın-izleme" tabindex="-1">4. Gölgeler, yansımalar ve AO için gerçek zamanlı ışın izleme <a class="header-anchor" href="#_4-golgeler-yansımalar-ve-ao-icin-gercek-zamanlı-ısın-izleme" aria-label="Permalink to &quot;4. Gölgeler, yansımalar ve AO için gerçek zamanlı ışın izleme&quot;"></a></h2>
<p>Donanım hızlandırmalı ışın izleme (DXR, Vulkan RT), her karede oluşturulan bir BVH üzerinde gölge ışınlarını, aynasal ve parlak yansıma ışınlarını ve ortam örtme ışınlarını izler. Özellikle ekran dışındaki yansımalar ve temas gölgeleri söz konusu olduğunda, piksel başına birkaç ışın bile ekran alanı tekniklerinin yapabildiklerini aşar. Çoğu oyun bunu her şey için değil, seçici biçimde kullanır.</p>
<img src="/img/blog/aaa_hardware_raytracing.webp" alt="Lüks bir galeride doğru ışın izlemeli yansımalara ve temas gölgelerine sahip parlak kırmızı spor otomobil" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Ayrıntılı kaynaklar:</p>
<ul>
<li>Microsoft, <a href="https://microsoft.github.io/DirectX-Specs/d3d/Raytracing.html" target="_blank" rel="noreferrer">DirectX Raytracing (DXR) İşlevsel Spesifikasyonu</a> (API kaynağı).</li>
<li>Wyman, <a href="http://intro-to-dxr.cwyman.org/" target="_blank" rel="noreferrer">DirectX Raytracing'e Giriş</a> (SIGGRAPH ders notları, oldukça anlaşılır).</li>
<li>Boksansky ve Marrs, <a href="https://www.realtimerendering.com/raytracinggems/rtg2/index.html" target="_blank" rel="noreferrer">Ray Tracing Gems II, 17-19. bölümler</a> (ücretsiz PDF, modern DXR teknikleri).</li>
<li>Stachowiak, <a href="https://www.ea.com/frostbite/news/stochastic-screen-space-reflections" target="_blank" rel="noreferrer">Stokastik Ekran Alanı Yansımaları</a> (Frostbite, SSR'dan RT'ye geçiş köprüsü).</li>
</ul>
<h2 id="_5-yazılım-tabanlı-ısın-izleme-lumen-tarzı" tabindex="-1">5. Yazılım tabanlı ışın izleme (Lumen tarzı) <a class="header-anchor" href="#_5-yazılım-tabanlı-ısın-izleme-lumen-tarzı" aria-label="Permalink to &quot;5. Yazılım tabanlı ışın izleme (Lumen tarzı)&quot;"></a></h2>
<p>Her oyuncuda RTX kartı bulunmadığından oyun motorları mesafe alanı veya yüzey önbelleği tabanlı yedek çözümler de sunar. Örneğin Unreal'ın Lumen sistemi, düşük maliyetli yayınık GI için işaretli mesafe alanları ve yüzey önbellekleri üzerinde izleme yapar; yalnızca gerektiğinde donanım ışınlarına geçer. AAA oyunların konsollarda &quot;ışın izlemeli görünüm&quot; elde etmesini sağlayan yöntem budur.</p>
<img src="/img/blog/aaa_software_rt_lumen.webp" alt="Vitray renklerinin çevreye yansıdığı katedral iç mekânı ve yaklaşık geometriyi ortaya çıkaran SDF tel kafes katmanı" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Ayrıntılı kaynaklar:</p>
<ul>
<li>Wright ve diğerleri, <a href="https://advances.realtimerendering.com/s2022/SIGGRAPH2022-Advances-Lumen-Wright%20et%20al.pdf" target="_blank" rel="noreferrer">Lumen: Unreal Engine 5'te Gerçek Zamanlı Küresel Aydınlatma</a> (SIGGRAPH 2022, Lumen makalesi).</li>
<li>Epic Games, <a href="https://dev.epicgames.com/documentation/en-us/unreal-engine/lumen-technical-details-in-unreal-engine" target="_blank" rel="noreferrer">Lumen Teknik Ayrıntıları</a> (resmî oyun motoru belgeleri).</li>
<li>Wright, <a href="https://advances.realtimerendering.com/s2021/Wright%20et%20al%20-%20Radiance%20Caching%20for%20Real-Time%20Global%20Illumination%20-%20SIGGRAPH%202021.pdf" target="_blank" rel="noreferrer">Gerçek Zamanlı Küresel Aydınlatma için Işınım Önbellekleme</a> (SIGGRAPH 2021).</li>
<li>Wright, <a href="https://www.youtube.com/watch?v=2GYXuM10riw" target="_blank" rel="noreferrer">Lumen GDC 2022 sunumu</a> (video sürümü).</li>
</ul>
<h2 id="_6-restir-ve-rezervuar-ornekleme" tabindex="-1">6. ReSTIR ve rezervuar örnekleme <a class="header-anchor" href="#_6-restir-ve-rezervuar-ornekleme" aria-label="Permalink to &quot;6. ReSTIR ve rezervuar örnekleme&quot;"></a></h2>
<p>Binlerce ışık kaynağıyla doğrudan ve dolaylı aydınlatma için ReSTIR (Reservoir Spatio-Temporal Importance Resampling), ışık örneklerini pikseller ve kareler arasında yeniden kullanır. Path Tracing etkinleştirilmiş Cyberpunk 2077 gibi oyunların piksel başına bir veya iki ışınla gürültüyü düşük tutabilmesini sağlayan teknik budur. Yol izleme üst düzey hedef hâline geldikçe bu tekniği daha fazla oyun motorunda görmeyi bekleyebilirsiniz.</p>
<img src="/img/blog/aaa_ray_tracing_restir.webp" alt="Islak zeminde ışın izlemeli yansımaların ve görünür sekmeli ışık yollarının bulunduğu siberpunk sokak" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Ayrıntılı kaynaklar:</p>
<ul>
<li>Bitterli ve diğerleri, <a href="https://research.nvidia.com/sites/default/files/pubs/2020-07_Spatiotemporal-reservoir-resampling/ReSTIR.pdf" target="_blank" rel="noreferrer">Dinamik Doğrudan Aydınlatmayla Gerçek Zamanlı Işın İzleme için Uzamsal-Zamansal Rezervuar Yeniden Örneklemesi</a> (SIGGRAPH 2020, orijinal ReSTIR makalesi).</li>
<li>Ouyang ve diğerleri, <a href="https://research.nvidia.com/publication/2021-06_restir-gi-path-resampling-real-time-path-tracing" target="_blank" rel="noreferrer">ReSTIR GI: Gerçek Zamanlı Yol İzleme için Yol Yeniden Örneklemesi</a> (HPG 2021, dolaylı aydınlatma için ReSTIR).</li>
<li>Lin ve diğerleri, <a href="https://research.nvidia.com/publication/2022-07_generalized-resampled-importance-sampling-foundations-restir" target="_blank" rel="noreferrer">Genelleştirilmiş Yeniden Örneklenmiş Önem Örneklemesi</a> (SIGGRAPH 2022, matematiksel temeller).</li>
<li>NVIDIA, <a href="https://www.nvidia.com/en-us/geforce/news/cyberpunk-2077-ray-tracing-overdrive-technology-preview-on-rtx-4090/" target="_blank" rel="noreferrer">Cyberpunk 2077 Yol İzleme Teknolojisine Derinlemesine Bakış</a> (mühendislik blogu).</li>
</ul>
<h2 id="_7-hacimsel-bulutlar-sis-ve-atmosfer" tabindex="-1">7. Hacimsel bulutlar, sis ve atmosfer <a class="header-anchor" href="#_7-hacimsel-bulutlar-sis-ve-atmosfer" aria-label="Permalink to &quot;7. Hacimsel bulutlar, sis ve atmosfer&quot;"></a></h2>
<p>Gökyüzü, 3B gürültü ve yoğunluk hacimleri içinde ışın yürütülerek oluşturulur. Atmosfer, güneş ile ay geçişleri için önceden hesaplanmış saçılma tablolarını (Bruneton tarzı) kullanır. Sis ise yerel aydınlatmayı yakalayan bir froxel ızgarasıdır (görüş frustum'uyla hizalanmış bir 3B doku gibi düşünebilirsiniz). Bunlar birlikte bir skybox yerine &quot;sistem olarak hava durumu&quot; sunar.</p>
<img src="/img/blog/aaa_volumetrics.webp" alt="Hacimsel bulutların ve sisli havayı delip geçen tanrı ışınlarının bulunduğu gün batımında bir dağ vadisi" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Ayrıntılı kaynaklar:</p>
<ul>
<li>Schneider, <a href="https://www.guerrilla-games.com/read/the-real-time-volumetric-cloudscapes-of-horizon-zero-dawn" target="_blank" rel="noreferrer">Horizon Zero Dawn'ın Gerçek Zamanlı Hacimsel Bulut Manzaraları</a> (SIGGRAPH 2015, temel bulut kaynağı).</li>
<li>Hillaire, <a href="https://sebh.github.io/publications/egsr2020.pdf" target="_blank" rel="noreferrer">Ölçeklenebilir ve Üretime Hazır Bir Gökyüzü ve Atmosfer Render Tekniği</a> (EGSR 2020, UE5'te kullanılan modern Bruneton ardılı).</li>
<li>Wronski, <a href="https://bartwronski.com/2014/08/22/volumetric-fog-siggraph-2014/" target="_blank" rel="noreferrer">Hacimsel Sis: Atmosferik Saçılma için Birleşik Compute Shader Tabanlı Çözüm</a> (SIGGRAPH 2014, Assassin's Creed 4'ün froxel sisi).</li>
<li>Hillaire, <a href="https://www.ea.com/frostbite/news/physically-based-unified-volumetric-rendering-in-frostbite" target="_blank" rel="noreferrer">Frostbite'ta Fizik Tabanlı ve Birleşik Hacimsel Render</a> (SIGGRAPH 2015).</li>
</ul>
<h2 id="_8-kademeli-golge-haritaları-ve-sanal-golge-haritaları" tabindex="-1">8. Kademeli gölge haritaları ve sanal gölge haritaları <a class="header-anchor" href="#_8-kademeli-golge-haritaları-ve-sanal-golge-haritaları" aria-label="Permalink to &quot;8. Kademeli gölge haritaları ve sanal gölge haritaları&quot;"></a></h2>
<p>Güneş gölgeleri için kademeli gölge haritaları, frustum'u aralıklara böler ve her birini uygun çözünürlükte render eder. Sanal gölge haritaları bunu daha da ileri taşır: Tek bir dev gölge haritası sayfalara bölünür ve yalnızca kameradan görülebilen sayfalar render edilir. AAA oyunların devasa bir bellek maliyetine katlanmadan oyuncunun yakınındaki gölgeleri keskin tutmasını sağlayan yöntem budur.</p>
<img src="/img/blog/aaa_cascaded_shadows.webp" alt="Kamera yakınındaki gölge ayrıntısını gösteren, üst üste bindirilmiş üç renkli kademe frustum'una sahip dış mekân sahnesi" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Ayrıntılı kaynaklar:</p>
<ul>
<li>Dimitrov, <a href="https://developer.download.nvidia.com/SDK/10.5/opengl/src/cascaded_shadow_maps/doc/cascaded_shadow_maps.pdf" target="_blank" rel="noreferrer">Kademeli Gölge Haritaları</a> (NVIDIA teknik incelemesi, standart kaynak).</li>
<li>Microsoft, <a href="https://learn.microsoft.com/en-us/windows/win32/dxtecharts/cascaded-shadow-maps" target="_blank" rel="noreferrer">Gölge Derinlik Haritalarını İyileştirmeye Yönelik Yaygın Teknikler</a> (DirectX belgeleri).</li>
<li>Wright, <a href="https://advances.realtimerendering.com/s2023/index.html#VirtualShadowMaps" target="_blank" rel="noreferrer">Fortnite Battle Royale 4. Bölüm'de Sanal Gölge Haritaları</a> (SIGGRAPH 2023, UE5 VSM sunumu).</li>
<li>Epic Games, <a href="https://dev.epicgames.com/documentation/en-us/unreal-engine/virtual-shadow-maps-in-unreal-engine" target="_blank" rel="noreferrer">Sanal Gölge Haritaları belgeleri</a>.</li>
</ul>
<h2 id="_9-ekran-alanı-efektleri-ssao-ssr-ssgi-sssss" tabindex="-1">9. Ekran alanı efektleri (SSAO, SSR, SSGI, SSSSS) <a class="header-anchor" href="#_9-ekran-alanı-efektleri-ssao-ssr-ssgi-sssss" aria-label="Permalink to &quot;9. Ekran alanı efektleri (SSAO, SSR, SSGI, SSSSS)&quot;"></a></h2>
<p>Derinlik ve normal tamponlarını düşük maliyetle okuyarak ortam örtme (SSAO), yansımalar (SSR), tek sekmeli küresel aydınlatma (SSGI) ve cilt için yüzey altı saçılma (SSSSS) elde edebilirsiniz. Bunlar ekran dışındaki ayrıntıları kaçırır; ışın izlemenin öne çıkmasının nedeni de budur. Yine de hızlı bir temel çözüm olarak hâlâ her yerde kullanılırlar.</p>
<img src="/img/blog/aaa_screen_space_effects.webp" alt="Solda düz aydınlatmayı, sağda SSAO, SSR ve SSGI'ı karşılaştıran yan yana mutfak sahnesi" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Ayrıntılı kaynaklar:</p>
<ul>
<li>Mittring, <a href="https://www.crytek.com/wp-content/uploads/Finding%20Next%20Gen%20-%20CryEngine%202.pdf" target="_blank" rel="noreferrer">Yeni Nesli Bulmak: CryENGINE 2</a> (SIGGRAPH 2007, orijinal SSAO makalesi).</li>
<li>McGuire ve diğerleri, <a href="https://research.nvidia.com/publication/scalable-ambient-obscurance" target="_blank" rel="noreferrer">Ölçeklenebilir Ortam Gölgelenmesi</a> (HPG 2012, modern SSAO).</li>
<li>Stachowiak ve Uludag, <a href="https://www.ea.com/frostbite/news/stochastic-screen-space-reflections" target="_blank" rel="noreferrer">Stokastik Ekran Alanı Yansımaları</a> (Frostbite, temel SSR kaynağı).</li>
<li>Jimenez, <a href="https://www.iryoku.com/separable-sss/" target="_blank" rel="noreferrer">Ayrılabilir Yüzey Altı Saçılması</a> (çoğu AAA oyun motorunda cilt için kullanılan teknik).</li>
<li>Mara ve diğerleri, <a href="https://research.activision.com/publications/2016/09/deep-g-buffers-for-stable-global-illumination-approximation" target="_blank" rel="noreferrer">Derin Ekran Alanı</a> (Activision, SSGI'ın öncüllerinden).</li>
</ul>
<h2 id="_10-zamansal-kenar-yumusatma-ve-makine-ogrenmesiyle-cozunurluk-yukseltme-dlss-fsr-xess" tabindex="-1">10. Zamansal kenar yumuşatma ve makine öğrenmesiyle çözünürlük yükseltme (DLSS, FSR, XeSS) <a class="header-anchor" href="#_10-zamansal-kenar-yumusatma-ve-makine-ogrenmesiyle-cozunurluk-yukseltme-dlss-fsr-xess" aria-label="Permalink to &quot;10. Zamansal kenar yumuşatma ve makine öğrenmesiyle çözünürlük yükseltme (DLSS, FSR, XeSS)&quot;"></a></h2>
<p>Kare, daha düşük bir dahili çözünürlükte render edilir ve hareket vektörleri, derinlik ve geçmiş kareler kullanılarak yeniden oluşturulur. Makine öğrenmesi tabanlı çözünürlük yükselticiler (DLSS 3/4, FSR 3, XeSS) buna ek olarak optik akıştan ara kareler üreten kare oluşturma özelliğini sunar. Günümüzde çoğu AAA oyun, bir çözünürlük yükselticinin etkin olduğu varsayımıyla yayımlanıyor; bu da karenin geri kalanı için performans bütçesinin nasıl ayrıldığını değiştiriyor.</p>
<img src="/img/blog/aaa_ml_upscaling.webp" alt="Aynı karakterin düşük çözünürlüklü girdisini ve makine öğrenmesiyle keskin biçimde yeniden oluşturulmuş çıktısını yan yana gösteren karşılaştırma" style="width:100%;border-radius:8px;margin:1.5rem 0" />
Derinlemesine okumalar:
- Karis, [Yüksek Kaliteli Zamansal Süper Örnekleme](http://advances.realtimerendering.com/s2014/index.html#_HIGH-QUALITY_TEMPORAL_SUPERSAMPLING) (SIGGRAPH 2014, temel TAA sunumu).
- Salvi, [Zamansal Süper Örnekleme Üzerine Bir İnceleme](https://research.nvidia.com/sites/default/files/pubs/2016-03_An-Excursion-in/dlss_DTAA-2-2.pdf) (NVIDIA, DLSS'ye giden yol üzerine).
- Edelsten, [Gerçek Anlamda Yeni Nesil: Oyunlara ve Grafiklere Derin Öğrenme Eklemek](https://www.gdcvault.com/play/1026184/) (GDC 2019, DLSS mimarisi).
- AMD, [FidelityFX Super Resolution 3 teknik ayrıntıları](https://gpuopen.com/fidelityfx-super-resolution-3/) ve Intel, [XeSS teknik makalesi](https://www.intel.com/content/www/us/en/developer/articles/technical/intel-xess-technical-paper.html).
<h2 id="_11-gpu-gudumlu-isleme-ve-mesh-shader-ları" tabindex="-1">11. GPU güdümlü işleme ve mesh shader'ları <a class="header-anchor" href="#_11-gpu-gudumlu-isleme-ve-mesh-shader-ları" aria-label="Permalink to &quot;11. GPU güdümlü işleme ve mesh shader'ları&quot;"></a></h2>
<p>Ayıklama, LOD seçimi ve çizim komutlarının gönderimi tamamen GPU üzerinde çalışır. Mesh shader'ları, tepe noktası/geometri/mozaikleme işlem hattının yerini meshlet'ler üreten, daha esnek ve hesaplama tarzında bir aşamayla değiştirir. Çoklu dolaylı çizimle birleştirildiğinde CPU'yu nesne başına çalışan kritik döngünün tamamen dışında tutar.</p>
<img src="/img/blog/aaa_gpu_driven_meshlets.webp" alt="GPU güdümlü işlemeyi gösteren renkli meshlet kümesi katmanına sahip uzaylı uzay limanı sahnesi" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine okumalar:</p>
<ul>
<li>Haar ve Aaltonen, <a href="https://advances.realtimerendering.com/s2015/aaltonenhaar_siggraph2015_combined_final_footer_220dpi.pdf" target="_blank" rel="noreferrer">GPU Güdümlü İşleme Hatları</a> (SIGGRAPH 2015, temel Assassin's Creed Unity sunumu).</li>
<li>Wihlidal, <a href="https://www.frostbite.com/2016/03/optimizing-the-graphics-pipeline-with-compute/" target="_blank" rel="noreferrer">Grafik İşlem Hattını Hesaplamayla Optimize Etmek</a> (GDC 2016, Frostbite'ın GPU güdümlü ayıklama sistemi).</li>
<li>Kubisch, <a href="https://developer.nvidia.com/blog/introduction-turing-mesh-shaders/" target="_blank" rel="noreferrer">Turing Mesh Shader'larına Giriş</a> (NVIDIA, mesh shader'larına giriş).</li>
<li>Pesce, <a href="https://www.bartwronski.com/" target="_blank" rel="noreferrer">Mesh Shader'larında Hızlı Bir Tur</a> (ve <a href="http://www.adriancourreges.com/blog/" target="_blank" rel="noreferrer">Adrian Courrèges'in RenderDoc çözümlemelerinde</a> derlenen benzer mühendislik blogları).</li>
</ul>
<h2 id="_12-sac-kumas-ve-cilt-isleme" tabindex="-1">12. Saç, kumaş ve cilt işleme <a class="header-anchor" href="#_12-sac-kumas-ve-cilt-isleme" aria-label="Permalink to &quot;12. Saç, kumaş ve cilt işleme&quot;"></a></h2>
<p>Saçlar, tel tabanlı geometriyle birlikte Marschner tarzı anizotropik gölgelendirme kullanır (NVIDIA HairWorks, AMD TressFX veya oyun motoruna özgü sistemler). Kumaşlar, konum tabanlı dinamiklerle GPU üzerinde simüle edilir ve anizotropik yansımayla işlenir. Ciltler, ekran uzayı yüzey altı saçılımı ile önceden tümleştirilmiş sarmal aydınlatma kullanır. AAA ile bağımsız yapımlar arasındaki bütçe farkını genellikle en belirgin biçimde bu üç alanda görürsünüz.</p>
<img src="/img/blog/aaa_hair_cloth_skin.webp" alt="Tel tabanlı saçlara, kumaş pelerine ve yüzey altı saçılımlı cilde sahip bir savaşçının yakın planı" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine okumalar:</p>
<ul>
<li>Marschner ve diğerleri, <a href="https://www.cs.cornell.edu/~srm/publications/SG03-hair.pdf" target="_blank" rel="noreferrer">İnsan Saçı Liflerinden Işık Saçılımı</a> (SIGGRAPH 2003, temel saç modeli).</li>
<li>Chiang ve diğerleri, <a href="https://benedikt-bitterli.me/pchfm/pchfm.pdf" target="_blank" rel="noreferrer">Üretim Tipi Yol İzleme İçin Pratik ve Kontrol Edilebilir Bir Saç ve Kürk Modeli</a> (Disney 2016, gerçek zamanlı yaklaşımlarda yaygın olarak kullanılır).</li>
<li>Müller ve diğerleri, <a href="https://matthias-research.github.io/pages/publications/posBasedDyn.pdf" target="_blank" rel="noreferrer">Konum Tabanlı Dinamikler</a> (standart kumaş simülasyonu kaynağı).</li>
<li>Jimenez ve diğerleri, <a href="https://www.iryoku.com/separable-sss/" target="_blank" rel="noreferrer">Ayrılabilir Yüzey Altı Saçılımı</a> ve <a href="https://www.iryoku.com/translucency/" target="_blank" rel="noreferrer">Gerçek Zamanlı, Gerçekçi Cilt Yarı Saydamlığı</a>.</li>
</ul>
<h2 id="_13-cıkartmalar-sanal-dokulama-ve-malzeme-katmanlama" tabindex="-1">13. Çıkartmalar, sanal dokulama ve malzeme katmanlama <a class="header-anchor" href="#_13-cıkartmalar-sanal-dokulama-ve-malzeme-katmanlama" aria-label="Permalink to &quot;13. Çıkartmalar, sanal dokulama ve malzeme katmanlama&quot;"></a></h2>
<p>Yüzey çeşitliliği; derinlik tamponuna yansıtılan katmanlı çıkartmalardan (mermi izleri, kir, kan, pas) ve yüksek çözünürlüklü ayrıntıları tam gerektiği anda akışla yükleyen sanal dokulardan gelir. Malzeme katmanlama, maskeler ve üç düzlemli izdüşüm kullanarak piksel başına birden fazla PBR setini harmanlar; tek bir kayanın beş farklı kaya gibi görünmesi böyle sağlanır.</p>
<img src="/img/blog/aaa_decals_virtual_textures.webp" alt="Mermi izi çıkartmaları ve grafiti bulunan yıpranmış beton sığınak duvarı ile eklenmiş bir sanal doku sayfası atlası" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine okumalar:</p>
<ul>
<li>Pranckevičius, <a href="https://aras-p.info/blog/2009/02/27/deferred-decals/" target="_blank" rel="noreferrer">Ertelenmiş Çıkartmalar</a> ve devam yazıları (Aras'ın klasik blog dizisi).</li>
<li>Mittring, <a href="http://advances.realtimerendering.com/s2012/Epic/UnrealEngine4_Mittring_SIGGRAPH2012_Final_Cleaned.pdf" target="_blank" rel="noreferrer">Unreal Engine 4 Elemental Demosunun Ardındaki Teknoloji</a> (SIGGRAPH 2012, sanal dokulama ayrıntılarını içerir).</li>
<li>van Waveren, <a href="https://www.realtimerendering.com/blog/id-tech-5-challenges-from-texture-virtualization-to-massive-parallelization/" target="_blank" rel="noreferrer">id Tech 5'in Zorlukları: Doku Sanallaştırmadan Devasa Paralelleştirmeye</a> (SIGGRAPH 2009, MegaTexture sunumu).</li>
<li>Williams, <a href="https://www.gdcvault.com/play/1022144/Crafting-the-World-of-The" target="_blank" rel="noreferrer">The Order: 1886'da Malzeme Katmanlama</a> (GDC 2014, katmanlı PBR malzemeleri).</li>
</ul>
<h2 id="_14-sıralamadan-bagımsız-saydamlık" tabindex="-1">14. Sıralamadan bağımsız saydamlık <a class="header-anchor" href="#_14-sıralamadan-bagımsız-saydamlık" aria-label="Permalink to &quot;14. Sıralamadan bağımsız saydamlık&quot;"></a></h2>
<p>Saç, bitki örtüsü, parçacıklar ve cam düzgün biçimde sıralanamaz. AAA oyun motorları, bunları CPU'da sıralama adımı olmadan doğru şekilde işlemek için ağırlıklı harmanlanmış OIT, derinlik soyma veya piksel başına bağlı listeler gibi teknikler kullanır. Bitki örtüsünün yoğun olduğu bir sahnede, karenin en maliyetli bölümlerinden biri sessizce budur.</p>
<img src="/img/blog/aaa_oit_transparency.webp" alt="Üst üste binen yarı saydam bitki örtüsü, duman, cam damlacıkları ve yarı saydam saç içeren orman sahnesi" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine okumalar:</p>
<ul>
<li>McGuire ve Bavoil, <a href="http://jcgt.org/published/0002/02/09/" target="_blank" rel="noreferrer">Ağırlıklı Harmanlanmış Sıralamadan Bağımsız Saydamlık</a> (JCGT 2013, WBOIT makalesi).</li>
<li>Bavoil ve Myers, <a href="https://developer.download.nvidia.com/SDK/10/opengl/src/dual_depth_peeling/doc/DualDepthPeeling.pdf" target="_blank" rel="noreferrer">Çift Derinlik Soymayla Sıralamadan Bağımsız Saydamlık</a> (NVIDIA teknik incelemesi).</li>
<li>Yang ve diğerleri, <a href="https://www.cse.chalmers.se/edu/year/2017/course/TDA362/Per-Pixel%20Linked%20List.pdf" target="_blank" rel="noreferrer">GPU Üzerinde Gerçek Zamanlı Eşzamanlı Bağlı Liste Oluşturma</a> (piksel başına bağlı listeler için temel kaynak).</li>
<li>Wyman, <a href="https://research.nvidia.com/publication/2016-06_exploring-and-expanding-continuum-oit-algorithms" target="_blank" rel="noreferrer">OIT Algoritmaları Sürekliliğini Keşfetmek ve Genişletmek</a> (HPG 2016, karşılaştırmalı inceleme).</li>
</ul>
<h2 id="_15-sinirsel-ısıma-onbellekleme-ve-makine-ogrenimi-gurultu-gidericileri" tabindex="-1">15. Sinirsel ışıma önbellekleme ve makine öğrenimi gürültü gidericileri <a class="header-anchor" href="#_15-sinirsel-ısıma-onbellekleme-ve-makine-ogrenimi-gurultu-gidericileri" aria-label="Permalink to &quot;15. Sinirsel ışıma önbellekleme ve makine öğrenimi gürültü gidericileri&quot;"></a></h2>
<p>En yeni katman. NVIDIA'nın sinirsel ışıma önbelleği, sahne başına dolaylı aydınlatmayı öğrenir ve daha fazla ışın izlemek yerine bu bilgiyi sorgular. Makine öğrenimi gürültü gidericileri (OptiX, Intel Open Image Denoise, kuruma özel çözümler), seyrek ışın izlemeli sinyalleri milisaniyeler içinde temizler. Bu kategorinin önümüzdeki iki yılda hızla büyümesini bekleyebilirsiniz.</p>
<img src="/img/blog/aaa_neural_radiance_denoise.webp" alt="Solda gürültülü, piksel başına 1 örnekli ışın izlemeli katedral; sağda makine öğrenimiyle gürültüsü giderilmiş temiz sonuç" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Derinlemesine okumalar:</p>
<ul>
<li>Müller ve diğerleri, <a href="https://research.nvidia.com/publication/2021-06_real-time-neural-radiance-caching-path-tracing" target="_blank" rel="noreferrer">Yol İzleme İçin Gerçek Zamanlı Sinirsel Işıma Önbellekleme</a> (SIGGRAPH 2021, NRC makalesi).</li>
<li>Schied ve diğerleri, <a href="https://research.nvidia.com/publication/2017-07_spatiotemporal-variance-guided-filtering-real-time-reconstruction-path-traced" target="_blank" rel="noreferrer">Uzamsal-Zamansal Varyans Güdümlü Filtreleme: Yol İzlemeli Küresel Aydınlatma İçin Gerçek Zamanlı Yeniden Oluşturma</a> (HPG 2017, SVGF).</li>
<li>Chaitanya ve diğerleri, <a href="https://research.nvidia.com/publication/interactive-reconstruction-monte-carlo-image-sequences-using-recurrent-denoising" target="_blank" rel="noreferrer">Yinelemeli Gürültü Giderici Otomatik Kodlayıcı Kullanarak Monte Carlo Görüntü Dizilerinin Etkileşimli Yeniden Oluşturulması</a> (SIGGRAPH 2017, ilk yinelemeli makine öğrenimi gürültü gidericisi).</li>
<li>Intel, <a href="https://www.openimagedenoise.org/documentation.html" target="_blank" rel="noreferrer">Open Image Denoise belgeleri</a> (açık kaynaklı, üretime yönelik gürültü giderici).</li>
</ul>
<h2 id="bunun-tarayıcı-acısından-anlamı" tabindex="-1">Bunun tarayıcı açısından anlamı <a class="header-anchor" href="#bunun-tarayıcı-acısından-anlamı" aria-label="Permalink to &quot;Bunun tarayıcı açısından anlamı&quot;"></a></h2>
<p>Bu tekniklerin birkaçını WebGPU'da çalışan <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">açık dünya tarayıcı motorumuzda</a> kullanıma sunduk. Basamaklı gölge haritaları, GPU güdümlü örnekleme, üç düzlemli PBR, ekran uzayı sisi ve clipmap tabanlı sanallaştırılmış arazi, bir tarayıcı sekmesinde 120 FPS hızında çalışıyor. Geri kalanlar (donanım hızlandırmalı ışın izleme, mesh shader'ları, makine öğrenimiyle yükseltme), WebGPU belirtimi geliştikçe web'e geliyor. Daha ayrıntılı bilgi için <a href="/tr/guides/browser-3d-open-world-tech.html">tarayıcıda açık dünya teknolojisi</a> ve <a href="/tr/guides/landscape-generation-browser.html">tarayıcıda arazi üretimi</a> rehberlerimize bakın.</p>
<h2 id="tum-teknoloji-yıgını-icin-ek-okumalar" tabindex="-1">Tüm teknoloji yığını için ek okumalar <a class="header-anchor" href="#tum-teknoloji-yıgını-icin-ek-okumalar" aria-label="Permalink to &quot;Tüm teknoloji yığını için ek okumalar&quot;"></a></h2>
<p>Tek bir kitap okuyacaksanız, <a href="https://www.realtimerendering.com/" target="_blank" rel="noreferrer">Real-Time Rendering, 4. baskı</a> yukarıdaki konuların çoğunu ele alan standart kaynaktır. Devam eden araştırmalar için SIGGRAPH'ın “Advances in Real-Time Rendering in Games” ders arşivi (<a href="https://advances.realtimerendering.com/" target="_blank" rel="noreferrer">advances.realtimerendering.com</a>), 2006'ya kadar uzanan AAA oyun motoru derinlemesine incelemelerinin ücretsiz PDF'lerini sunar. Belirli oyunların karelerini nasıl işlediğini anlatan üretim çözümlemeleri için <a href="http://www.adriancourreges.com/blog/" target="_blank" rel="noreferrer">Adrian Courrèges'in GPU profilleme makaleleri</a> mutlaka okunmalıdır.</p>
]]></content:encoded>
            <enclosure url="https://app.cinevva.com/img/blog/aaa_rendering_hero.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık bir dünya oluşturmak, bölüm 18: Yapay zekâ yerleştirmiş hissi veren bir dağıtma fırçası]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-05-02-open-world-browser-part-18-ai-scattering</link>
            <guid>https://app.cinevva.com/tr/blog/2026-05-02-open-world-browser-part-18-ai-scattering</guid>
            <pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spike 37, hiçbir LLM kullanmadan ağaçları uçurumlardan uzak, çakıl taşlarını ise su çizgisinde tutan sezgisel bir dağıtma fırçası geliştirdi; ardından örnekleme, mesafe LOD'u ve bir dizi hatayı aşarak boyama darbesini yeniden 4 ms'ye indirdi.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-bir-dunya-olusturmak-bolum-18-yapay-zeka-yerlestirmis-hissi-veren-bir-dagıtma-fırcası" tabindex="-1">Tarayıcıda açık bir dünya oluşturmak, bölüm 18: Yapay zekâ yerleştirmiş hissi veren bir dağıtma fırçası <a class="header-anchor" href="#tarayıcıda-acık-bir-dunya-olusturmak-bolum-18-yapay-zeka-yerlestirmis-hissi-veren-bir-dagıtma-fırcası" aria-label="Permalink to &quot;Tarayıcıda açık bir dünya oluşturmak, bölüm 18: Yapay zekâ yerleştirmiş hissi veren bir dağıtma fırçası&quot;"></a></h1>
<p><em><a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberini</a> kullanın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p><a href="/tr/blog/2026-05-01-open-world-browser-part-17-animations-and-search.html">17. Bölüm</a>, oyuncuya çatışmaya uygun bir animasyon seti ve herhangi bir CC0 modeli dünyaya aktarmanın yolunu sundu. Bu bölümde yeniden içerik üreticisinin tarafına dönüyoruz. Spike 34'ün paleti her tıklamada bir nesne yerleştiriyor; bu, öne çıkan bir nesneyi sahneye yerleştirmek için yeterli ama bir orman oluşturmak için işe yaramaz. Spike 37 ise fırçanın kendisi: arazi üzerinde sürüklediğinizde ağaçlar ait oldukları yerleri dolduruyor.</p>
<h2 id="yapay-zeka-olmadan-yapay-zeka-yerlestirmis-hissi" tabindex="-1">Yapay zekâ olmadan &quot;yapay zekâ yerleştirmiş&quot; hissi <a class="header-anchor" href="#yapay-zeka-olmadan-yapay-zeka-yerlestirmis-hissi" aria-label="Permalink to &quot;Yapay zekâ olmadan &quot;yapay zekâ yerleştirmiş&quot; hissi&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/37-ai-scattering/" title="Spike 37 Yapay Zekâ Destekli Nesne Dağıtımı" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/37-ai-scattering/" target="_blank">Spike 37'yi yeni bir sekmede açın ↗</a> · <a href="/tr/blog/spike-source?spike=37-ai-scattering">Kaynak kodunu görüntüleyin</a></p>
<p>Bu spike'ın yanıtladığı soru, bütünüyle sezgisel kurallara dayanan bir fırçanın LLM'i atlayacak kadar akıllı hissettirip hissettirmediği. &quot;Yapay zekâ yerleştirmiş&quot; olmanın testi somut: ağaçlar uçurumlardan uzak duruyor, kayalar eğime doğru yatıyor, sahil çakılları su çizgisinde son buluyor ve bunların hepsi ilk darbede gerçekleşiyor. Bunu eğim ve rakım koşulları, ağırlıklı seçimler ve aile başına aralık kurallarıyla, tek bir model çağrısı bile yapmadan başardık.</p>
<p>Fırça, elle ayarlanmış özelliklere sahip 257×257 boyutunda bir CPU yükseklik haritası üzerinde çalışıyor; böylece her hazır ayar yerleşebileceği bir alan buluyor: karma eğim seçimleri için kuzeyde dağlar, taş döküntüsü için doğuda bir uçurum şeridi, plaj ve çayır için güneyde bir kıyı ovası, güneybatıda ise göl çanağı. Arazi, <code>(altitude, slope)</code> biyom sınıflandırıcısından tepe renklerini önceden hesaplıyor; böylece tek bir ağaç bile boyamadan önce hazır ayarın nerede devreye gireceğini görebiliyorsunuz. Beş hazır ayar, her biri <code>{ category, weight, slopeMin, slopeMax, altMin, altMax, minSpacing, alignToSlope }</code> biçiminde seçim listeleri içeren düz veriler olarak sunuluyor. Uçurum ve Taş Döküntüsü, kayaların yalnızca gerçek eğimlere yerleşmesi için <code>slopeMin: 0.3</code>, her kayanın yukarı vektörünün yüzey normalini izlemesi için de <code>alignToSlope: true</code> kullanıyor.</p>
<p>Dağıtma motoru her darbede fırça diski içinde <code>densityPerM2 × area</code> adet aday nokta örnekliyor, her adayın yüksekliğini ve eğimini okuyor, hazır ayarın seçimlerini koşulları geçenlerle sınırlandırıyor, bunlardan birini ağırlıklı olarak seçiyor ve ardından yarıçap içi uzamsal karma tablosunda aralık denetimi yapıyor. Her şey deterministik: tüm seçimler tohumlanabilir Mulberry32 RNG tarafından yönetiliyor; dolayısıyla <code>(seed, brush events)</code> herhangi bir oturumu birebir yeniden üretiyor. Başlangıç arazisinde düz çayır üzerindeki bir Karma Orman darbesi, 158 adaydan 139'unu 5 ms'de yerleştirdi. Aynı hazır ayar bir uçurumda 226 adaydan yalnızca 106'sını yerleştirdi ve HUD, bunların 81'inin eğim nedeniyle reddedildiğini bildirdi. Bu ret dökümü kullanıcı deneyiminin özünü oluşturuyor: uçurumun neden yalnızca birkaç ağacı kabul ettiğini tahmin etmek yerine doğrudan görebiliyorsunuz.</p>
<p>Hazır ayarları düz veri olarak tutmanın amacı, LLM sürümü geldiğinde bunun yeniden yazım değil, yalnızca bir JSON değişimi olması. <code>paint({ preset })</code>, <code>preset.picks</code> değerinin elle ayarlanmış bir tariften mi yoksa &quot;yosunlu kayalar içeren yaprak döken orman&quot; ifadesini ağırlıklara dönüştüren bir worker'dan mı geldiğini önemsemiyor. Motor ayrıca hiçbir nesne kimliğini sabit kodlamıyor; dolayısıyla farklı bir katalog eklemek motor değişikliği gerektirmiyor.</p>
<h2 id="_300-cizim-cagrısından-49-a" tabindex="-1">300 çizim çağrısından 49'a <a class="header-anchor" href="#_300-cizim-cagrısından-49-a" aria-label="Permalink to &quot;300 çizim çağrısından 49'a&quot;"></a></h2>
<p>İlk sürüm, her yerleşimi çoklu mesh grubunun <code>clone(true)</code> kopyası olarak işliyordu. Bu, birkaç yüz nesne için yeterliydi ama 2.500 sınırında duvara tosluyordu; çizim çağrılarının sayısı binlere çıkıyordu. Bu noktaya gelmeden <code>InstancedMesh</code> kullanımına geçtik ve her <code>(propId, partIndex)</code> için bir bucket oluşturduk. Her bucket iki katına çıkarak büyüyor: daha büyük bir <code>InstancedMesh</code> ayır, canlı matrisleri kopyala, sahne üst öğesini değiştir, eski niteliği dispose et. Silme işlemi swap-remove kullanıyor; bu nedenle bucket boyutundan bağımsız olarak tek bir örneği kaldırmak O(1). Determinizm, aralık kuralları ve ret HUD'u değişmeden korunuyor çünkü bu değişiklik bütünüyle yerleşim kaydının altında gerçekleşiyor.</p>
<p>MegaKit paketi üzerinde yaptığımız bir tanılama, gerçek bir mimari soruyu çözüme kavuşturdu. Çok primitife sahip bir glTF mesh'i (gövde ve yapraklar), three.js'e ya dizi malzemeli ve <code>geometry.groups</code> içeren tek bir mesh olarak ya da her biri tek malzemeye sahip ayrı kardeş mesh'ler olarak ulaşabilir. Yükleyici bu paket için ikinci yolu izliyor: her parça, grupları boş olan tek malzemeli bir mesh. Bu, dağıtma için daha iyi bir yapı; çünkü primitif başına ayrı bucket'lar, sayıları farklılaşırsa gövde bucket'ının yaprak bucket'ından bağımsız büyümesini sağlıyor. Her iki durumda da çizim çağrısı sayısı aynı, ancak ayrık yapıda bellek düzeni daha iyi. Ölçülen kazanç kalıcı oldu: yaklaşık 300 çizim çağrısı kullanan bir orman darbesi 49'a düştü; çok darbeli tam bir oturum ise 51 çizim çağrısıyla 75 FPS'de 3.221 örneğe ulaştı. Kopyalama yolu, kare bütçesi çökmeden önce bu sınıra asla ulaşamazdı.</p>
<h2 id="mesafe-lod-u-ve-icinde-saklanan-dort-hata" tabindex="-1">Mesafe LOD'u ve içinde saklanan dört hata <a class="header-anchor" href="#mesafe-lod-u-ve-icinde-saklanan-dort-hata" aria-label="Permalink to &quot;Mesafe LOD'u ve içinde saklanan dört hata&quot;"></a></h2>
<p>Örnekleme çizim çağrılarını azalttı ama her örnek hâlâ tam üçgen sayısıyla çiziliyordu; 90 metre uzaktaki ve görüntüye yalnızca iki piksellik yaprak ayrıntısı katan ağaçlar bile buna dahildi. Bu nedenle meshoptimizer ile her nesne parçası için üç LOD seviyesi (tam, %50, %15) hazırladık, bucket anahtarını <code>(propId, partIndex, lod)</code> olarak genişlettik ve bir yerleşimi ayırma yapmadan kardeş bucket'lar arasında taşıyan <code>move()</code> işlevini ekledik. Mesafe bantları 0–30 m, 30–90 m ve ötesi olarak belirlendi. Her sınırın çevresinde ±4 m histerezis var; böylece bant kenarında gezinen bir kamera, yerleşimi sürekli ileri geri taşıyıp matrisini her karede yeniden yüklemiyor. Yeniden değerlendirme 4 Hz ile sınırlandırılıyor ve yalnızca kamera gerçekten hareket ettiğinde çalışıyor; dolayısıyla sabit bir kamera kare başına yalnızca bir karesel mesafe karşılaştırmasına mal oluyor.</p>
<p>Öğretici hatalar işte bu LOD yolunda ortaya çıktı. İlki, kamera yörüngede dönerken yerleşimlerin kaybolması veya çoğalması şeklinde görülüyordu ve sahne doldukça kötüleşiyordu. Nedeni ortak bir geçici matristi: <code>move()</code>, yerleşimin dönüşümünü modül kapsamındaki <code>_tmpMat</code> içine okuyordu; ancak kaynak bucket'ın swap-remove işlemi de kendi iç taşıması için aynı <code>_tmpMat</code> değişkenini kullanıyor ve hedef yazmadan önce taşınan matrisin üzerine yazıyordu. Hata yalnızca taşınan slot bucket'ta zaten son sıradaysa ortaya çıkmıyordu; bunun olasılığı yaklaşık <code>1/count</code> idi. Bu da oyun testinde görülen, &quot;sahne büyüdükçe kötüleşen nadir titreme&quot; durumuyla birebir örtüşüyor. Çözüm, yalnızca <code>move()</code> için ayrılmış özel bir <code>_carryMat</code> kullanmaktı. Toplam 1.274 taşıma içeren stres testinde küme piksel piksel aynı kaldı.</p>
<p>İkinci hata daha incelikliydi: ilk geçiş dışında her LOD geçişi akıcı görünüyordu. LOD1'e geçen ağaçların silüeti neredeyse hiç değişmemesine rağmen gölgelendirmeleri belirgin biçimde kayıyordu; buna karşılık merdivenin sonraki aşamalarındaki daha büyük üçgen azalmaları sorunsuz görünüyordu. <code>LockBorder</code> kullanan sadeleştirici hiçbir zaman tepe noktalarını taşımıyor veya yenilerini üretmiyor; dolayısıyla kalan tepe noktaları normallerini aynen koruyor. Buna rağmen her sadeleştirmeden sonra <code>computeVertexNormals()</code> çağırıyorduk. LOD0, sanatçı tarafından hazırlanmış özgün normalleri değiştirmeden döndürüyor; LOD1 ve üstü ise three.js'in genel amaçlı yüz ortalaması yeniden hesaplamasını kullanıyordu. Merdivende normal düzeninin değiştiği tek yer 0'dan 1'e geçiş sınırıydı; dolayısıyla sıçrama da orada görülüyordu. O tek savunmacı satırı kaldırmak gölgelendirmeyi düzeltti ve ek bir kazanç olarak nesne başına hazırlama süresini yaklaşık yarıya indirdi; çünkü artık parça başına dört LOD için normalleri yeniden hesaplamıyorduk.</p>
<p>Sadeleştiricinin ürettiklerini denetlemek üçüncü bir kazancı ortaya çıkardı. Her LOD, yeni bir indeks içeren <code>original.clone()</code> idi ve <code>BufferGeometry.clone()</code> her niteliği derinlemesine kopyaladığı için beş LOD; değerleri bit düzeyinde aynı olan konum, normal, UV ve renk tamponlarının beş bağımsız kopyasını tutuyordu. Nitelik referanslarını paylaşacak ve her LOD için yalnızca özel bir indeks tamponuna sahip olacak şekilde yeniden düzenledik. Böylece tipik bir ağaç parçasındaki farklı nitelik kimliği sayısı 20'den 9'a düştü ve her tepe noktası tamponu GPU'ya yalnızca bir kez yüklendi. Paylaşımlı depolama iki kural getiriyor: herhangi bir LOD üzerinden nitelik verilerini değiştirmeyin ve tek bir LOD geometrisine <code>dispose()</code> uygulamayın; çünkü ikisi de tamponu paylaşan tüm kardeşleri etkiler.</p>
<p>Dördüncü hatanın boyamayla hiçbir ilgisi yoktu. Herhangi bir düğmeye basılmamışken imleci yalnızca arazi üzerinde hareket ettirmek kare hızını düşürüyordu. <code>pointermove</code> işleyicisi, hiçbir uzamsal yapısı olmayan 131.072 üçgenlik bir düzlem olan arazi mesh'ine raycast uyguluyordu; bu nedenle three.js, saniyede 1.000 olaya varan hızlarda her olay için indeks tamponunun tamamını tarıyordu. Arazi parametrik bir yükseklik haritası olduğu için bu aramada mesh'e hiç ihtiyacımız yoktu. <code>sampleHeight</code> üzerinde uyarlanabilir bir ışın yürüyüşü (yüzeyden yüksekte büyük adımlar, yüzeye yaklaşınca 0,4 m alt sınır, ardından işaret değişiminde 12 ikili bölme), ışın başına 131.072 üçgen testi yerine yaklaşık 8–30 örneğe mal oluyor. Bu yaklaşık üç büyüklük mertebesi daha ucuz ve fareyle üzerine gelindiğinde kare hızı yeniden üst sınırda kalıyor.</p>
<h2 id="maliyet-yalnızca-yer-degistirir-tıklamadan-uzaklastıgından-emin-olun" tabindex="-1">Maliyet yalnızca yer değiştirir; tıklamadan uzaklaştığından emin olun <a class="header-anchor" href="#maliyet-yalnızca-yer-degistirir-tıklamadan-uzaklastıgından-emin-olun" aria-label="Permalink to &quot;Maliyet yalnızca yer değiştirir; tıklamadan uzaklaştığından emin olun&quot;"></a></h2>
<p>Spike'ı three r184 üzerindeki <code>WebGPURenderer</code>'a (üretim hedefi) geçirdikten sonra bir DevTools profili, ilk boyamanın 265 ms boyunca engellendiğini ve bunun %79'unun meshoptimizer WASM içinde geçtiğini gösterdi. Hazırlama gerçekten ağırdı; soğuk bir hazır ayar için yaklaşık 180 sadeleştirme çağrısı yapılıyordu. Ancak <code>preloadProps</code> yalnızca sahneleri getirip ayrıştırdığı ve LOD hazırlamasını hiç tetiklemediği için bu iş tıklama işleyicisinin içinde çalışıyordu. Çözüm, hazır ayar seçiminin tüm hazırlamayı arka planda yapmasını sağlamaktı: <code>preloadProps</code> artık parça çözümleme yolunu çağırıyor, hızlı bir tıklamanın yinelenen bir işlem başlatmak yerine mevcut işleme katılması için sürmekte olan promise'i önbelleğe alıyor ve sadeleştiricinin parça başına dört kez tekrarladığı geometri ön işlemesini memoize ediyor. İlk boyama süresi HUD'da 209 ms'den 4 ms'ye düştü. WASM süresi ortadan kalkmadı; yalnızca kullanıcının kritik yolundan çıktı ve kullanıcı araziye bakıp nereyi boyayacağına karar verirken çalışmaya başladı.</p>
<p>Bu spike'ın tekrarlanan dersi bu. Bu düzeltmelerin neredeyse hiçbiri fırçanın <em>ne yaptığını</em> değiştirmedi. Maliyetin <em>ne zaman</em> oluştuğunu değiştirdiler: tıklamanın dışında, üzerine gelmenin dışında, kameranın yakınında gezindiği sınırın dışında. Anında tepki veriyormuş gibi hissettiren bir dağıtma aracı daha az iş yapmaz; işi kullanıcının beklemediği anda yapar.</p>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>Sezgisel uygunluk dağıtımı.</strong> Bir fırça, disk içinde aday noktalar örnekler; CPU yükseklik haritasından her noktanın <code>(height, slope)</code> değerini okur; hazır ayarın seçimlerini eğim ve rakım koşullarına göre filtreler; birini ağırlıklı olarak seçer ve uzamsal karma tablosunda izlenen aile başına minimum aralığı ihlal ediyorsa reddeder. Eğime hizalanan seçimler, yukarı vektörlerini yüzey normaline döndürür. Bu yöntem, öğrenilmiş ağırlıklar olmadan kasıtlı görünen yerleşimler üretir (ağaçlar uçurumlardan uzak durur, kayalar eğimlere doğru yatar, çakıllar su çizgisinde son bulur) ve hazır ayarı düz veri olarak tuttuğu için LLM tarafından oluşturulan bir seçim listesi doğrudan yerine takılabilir.</p>
<p><strong>Asenkron yüklemeler altında deterministik yerleşim.</strong> Tohumlanabilir Mulberry32 RNG tüm seçimleri yönetir; dolayısıyla <code>(seed, brush events)</code> bir oturumu birebir yeniden üretir. RNG seçimleri herhangi bir <code>await</code> öncesinde yapılır ve aralık rezervasyonları glTF kopyası çözülmeden önce uzamsal indekse eklenir. Böylece eşzamanlı adaylar birbirlerini dikkate alır ve asenkron varlık yükleme işlemleri diziyi değiştiremez.</p>
<p><strong>O(1) düzenlemeli bucket tabanlı InstancedMesh.</strong> Her <code>(propId, partIndex, lod)</code> için bir <code>InstancedMesh</code>; kapasite gerektiğinde canlı matrislerin daha büyük bir tampona kopyalanmasıyla iki katına çıkarılır. Silme ve FIFO tahliyesi, taşınan örneğin indeksini güncelleyen bir geri referans dizisiyle swap-remove kullanır; böylece kaldırma işlemi bucket boyutundan bağımsız olarak O(1) olur. Bir tanılama, glTF parçalarının tek malzemeli mesh'ler olarak geldiğini doğruladı. Bu da primitif başına tek bucket yolunu etkinleştiriyor ve her primitife bağımsız büyüyebilen bir bucket sağlıyor.</p>
<p><strong>Histerezisli ve paylaşılan nitelik tamponlu mesafe LOD'u.</strong> Parça başına meshopt ile sadeleştirilmiş üç seviye, sınır yakınındaki kameranın sürekli geçiş yapmasını önlemek için ±4 m histerezis içeren mesafe bantlarıyla seçilir; yeniden değerlendirme sınırlı bir hızda yapılır ve yalnızca gerçek kamera hareketinde çalışır. <code>LockBorder</code> sadeleştirmesi tepe noktalarını hiç taşımadığından tüm LOD'lar aynı konum/normal/UV/renk tamponlarını paylaşır ve yalnızca özel indeks tamponlarıyla birbirinden ayrılır; böylece farklı GPU tepe noktası tamponlarının sayısı yaklaşık yarıya iner. Savunma amacıyla kullanılan <code>computeVertexNormals</code> çağrısını atlamak, sanatçı normallerini LOD'lar arasında aynı tutar ve merdivendeki tek gölgelendirme süreksizliğini ortadan kaldırır. Bkz. <a href="/tr/guides/landscape-generation-browser.html#gpu-driven-lod-with-webgpu">LOD ve meshoptimizer</a>.</p>
<p><strong>Yüksek frekanslı aramalar için analitik yükseklik haritası raycast'i.</strong> <code>pointermove</code> hızındaki bir imleç aramasını 131 bin üçgenli bir düzlem mesh'ine uygulamak, her olayda indeks tamponunun tamamını tarar. Bunu analitik yükseklik işlevi üzerinde uyarlanabilir bir ışın yürüyüşüyle değiştirmek (yüzeyden uzakta büyük adımlar, yakınında küçük bir alt sınır, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.869ex;" xmlns="http://www.w3.org/2000/svg" width="16.358ex" height="2.566ex" role="img" focusable="false" viewBox="0 -750 7230.4 1134.3" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(389,0)"><g data-mml-node="mtext"><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(392,0)" style="stroke-width: 3;"/><path data-c="79" d="M69 -66Q91 -66 104 -80T118 -116Q118 -134 109 -145T91 -160Q84 -163 97 -166Q104 -168 111 -168Q131 -168 148 -159T175 -138T197 -106T213 -75T225 -43L242 0L170 183Q150 233 125 297Q101 358 96 368T80 381Q79 382 78 382Q66 385 34 385H19V431H26L46 430Q65 430 88 429T122 428Q129 428 142 428T171 429T200 430T224 430L233 431H241V385H232Q183 385 185 366L286 112Q286 113 332 227L376 341V350Q376 365 366 373T348 383T334 385H331V431H337H344Q351 431 361 431T382 430T405 429T422 429Q477 429 503 431H508V385H497Q441 380 422 345Q420 343 378 235T289 9T227 -131Q180 -204 113 -204Q69 -204 44 -177T19 -116Q19 -89 35 -78T69 -66Z" transform="translate(892,0)" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1453,-239.4) scale(0.707)"><path data-c="1D466" d="M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(2460.7,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(3460.9,0)"><g data-mml-node="mtext"><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(389,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(833,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(1225,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(1617,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(2117,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(2395,0)" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(2984,-150) scale(0.707)"><path data-c="1D466" d="M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(6841.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo stretchy="false">(</mo><msub><mtext>ray</mtext><mi>y</mi></msub><mo>−</mo><msub><mtext>terrain</mtext><mi>y</mi></msub><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container> ifadesinin işaret değişiminde ikili bölme), on binlerce üçgen testi yerine onlarca örneğe mal olur; bu yaklaşık üç büyüklük mertebesi daha ucuzdur. Önceden ayrılmış bir çıktı vektörü de sıcak yolu ayırmasız tutar.</p>
<p><strong>İşi etkileşimin kritik yolundan çıkarın.</strong> Maliyetli tek seferlik işler (meshopt LOD hazırlamaları, WGSL pipeline derlemeleri) tıklama işleyicisinin içinde değil, boşta kalınan aralıklarda çalışmalıdır. Hazır ayar seçildiğinde etkin hazır ayarın tam hazırlamasını önceden yüklemek, hızlı bir tıklamanın yeni bir işlem başlatmak yerine mevcut promise'e katılması için sürmekte olan promise'i önbelleğe almak ve geometri başına ön işlemeyi memoize etmek, toplamda daha az iş yapmadan ilk boyama gecikmesini 209 ms'den 4 ms'ye düşürdü.</p>
<hr>
<p>29 bölümden 18. bölüm.
Önceki: <a href="/tr/blog/2026-05-01-open-world-browser-part-17-animations-and-search.html">17. Bölüm - Yeniden hedefleme gerektirmeyen animasyonlar ve canlı varlık araması</a>
Sonraki: <a href="/tr/blog/2026-05-04-open-world-browser-part-19-imposters.html">19. Bölüm - Bir ormanda hayatta kalması gereken imposter</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya geliştirmek, bölüm 17: Yeniden hedefleme gerektirmeyen animasyonlar ve canlı varlık araması]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-05-01-open-world-browser-part-17-animations-and-search</link>
            <guid>https://app.cinevva.com/tr/blog/2026-05-01-open-world-browser-part-17-animations-and-search</guid>
            <pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spike 35, 262 savaş ve hareket klibini oyuncu iskeletine yeniden hedefledi ve doğruluklarını korumak için çevrimdışı bir eşlik testi geliştirdi. Spike 36 ise derleme adımı olmadan canlı bir Polyhaven model araması bağladı.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-gelistirmek-bolum-17-yeniden-hedefleme-gerektirmeyen-animasyonlar-ve-canlı-varlık-araması" tabindex="-1">Tarayıcıda açık dünya geliştirmek, bölüm 17: Yeniden hedefleme gerektirmeyen animasyonlar ve canlı varlık araması <a class="header-anchor" href="#tarayıcıda-acık-dunya-gelistirmek-bolum-17-yeniden-hedefleme-gerektirmeyen-animasyonlar-ve-canlı-varlık-araması" aria-label="Permalink to &quot;Tarayıcıda açık dünya geliştirmek, bölüm 17: Yeniden hedefleme gerektirmeyen animasyonlar ve canlı varlık araması&quot;"></a></h1>
<p><em>Cinevva CTO'su ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberini</a> kullanın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p><a href="/tr/blog/2026-04-28-open-world-browser-part-16-structure-and-authoring.html">Bölüm 16</a>, içine nesneler yerleştirebildiğiniz bir dünya sundu. Bu bölümse oyuncuya o dünyada yapabileceği daha iyi şeyler veriyor: savaş kalitesinde bir animasyon seti ve arama yazarak binlerce CC0 modelden herhangi birini dünyaya aktarmanın bir yolu.</p>
<h2 id="_262-klip-tek-iskelet-uc-yeniden-hedefleme-duzeltmesi" tabindex="-1">262 klip, tek iskelet, üç yeniden hedefleme düzeltmesi <a class="header-anchor" href="#_262-klip-tek-iskelet-uc-yeniden-hedefleme-duzeltmesi" aria-label="Permalink to &quot;262 klip, tek iskelet, üç yeniden hedefleme düzeltmesi&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/35-combat-animations/" title="Spike 35 Savaş Animasyonları" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/35-combat-animations/" target="_blank">Spike 35'i yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=35-combat-animations">Kaynak kodunu görüntüle</a></p>
<p>Oyuncu iskeleti, 80'den fazla kemikten oluşan bir yüz iskeleti ve eksiksiz parmak eklemleri dâhil toplam 213 kemiğe sahip, CC4 tarzı bir <code>3MIKE</code> iskeleti. Animasyon kaynakları bununla eşleşmiyor. İlk sürümde elle seçilmiş Mixamo savaş klipleri yeniden hedeflendi, ancak kaynak havuzu yetersizdi ve hareket animasyonları Mixamo ile birkaç Kimodo BVH bekleme animasyonu arasında kullanışsız biçimde bölünmüştü. Asıl kazanım, kaynak kütüphanesini Quaternius'un iki Universal Animation Library paketine geçirdiğimizde geldi: tek ve tutarlı, UE5 tarzı 65 kemikli bir manken üzerinde toplam 262 klip; kılıç komboları, okçuluk, tırmanma, duvarda koşma, sıyrılmalar, darbe tepkileri, ifadeler ve çok daha temiz bir hareket seti.</p>
<p>Bu, ortak kemik adları, T-pozu yönelimleri veya uzuv oranları bulunmayan 65 kemikli bir kaynaktan 213 kemikli bir hedefe aktarım demek. Her klip üç adımda yeniden eşleniyor: bir kemik adı eşlemesi, iki iskeletin ortak bir referans yönelimini paylaşmasını sağlayan bağlama pozu hizalaması ve daha kısa kaynak iskeletin karakteri dizlerine kadar zemine gömmemesi için konum izi ölçeklendirmesi. Bunu doğru yapmak, her biri bize belirli bir şey öğreten bir dizi hatanın peşine düşmek anlamına geldi.</p>
<p>Karakter aşırı burulmuş görünüyordu; her omuz ve dirsek yaklaşık 30° fazla dönüyordu. Bunun nedeni bir poz uyuşmazlığıydı: UAL kaynağı gerçek bir T-pozuyla geliyor, CC4'ün bağlama pozuysa A-pozu ve yeniden hedefleyici iki iskeletin de eşleşen referans pozlarında durduğunu varsayıyordu. Bu nedenle A'dan T'ye olan fark, kare başına her deltaya ekleniyordu. Düzeltme, bağlama pozunu yakalamak için CC4'ün kol zincirini gerçek bir T-pozuna zorluyor, ardından yeniden hedefleme yapıyor; böylece deltalar küçük kalıyor.</p>
<p>Ardından gövde ötelemesi durdu. Geri savrulmalarda üst gövde tepki veriyor, ancak ayaklar yere sabit kalıyordu. UAL, yer değiştirmeyi pelvis yerine <code>root</code> kemiğine koyuyor; bu nedenle pelvis konumunu okumak sıfıra yakın hareket veriyordu. Düzeltme, <code>root.position</code> ile <code>pelvis.position</code> değerlerini topluyor, yatay kısmı ölçeklendiriyor ve tek bir kalça konumu izi yazıyor. Bunu yaparken dikey ofsetlerin yaklaşık %12 hatalı olduğunu keşfettik; çünkü pelvis yüksekliği için kalçadan zemine oran gerekirken Y ekseninde genel uzuv oranını kullanmıştık. İki oran, iki eksen: Y için <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="40.854ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 18057.6 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mtext"><path data-c="76" d="M338 431Q344 429 422 429Q479 429 503 431H508V385H497Q439 381 423 345Q421 341 356 172T288 -2Q283 -11 263 -11Q244 -11 239 -2Q99 359 98 364Q93 378 82 381T43 385H19V431H25L33 430Q41 430 53 430T79 430T104 429T122 428Q217 428 232 431H240V385H226Q187 384 184 370Q184 366 235 234L286 102L377 341V349Q377 363 367 372T349 383T335 385H331V431H338Z" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(528,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(972,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(1364,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(1753,0)" style="stroke-width: 3;"/><path data-c="63" d="M370 305T349 305T313 320T297 358Q297 381 312 396Q317 401 317 402T307 404Q281 408 258 408Q209 408 178 376Q131 329 131 219Q131 137 162 90Q203 29 272 29Q313 29 338 55T374 117Q376 125 379 127T395 129H409Q415 123 415 120Q415 116 411 104T395 71T366 33T318 2T249 -11Q163 -11 99 53T34 214Q34 318 99 383T250 448T370 421T404 357Q404 334 387 320Z" transform="translate(2031,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(2475,0)" style="stroke-width: 3;"/><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z" transform="translate(2975,0)" style="stroke-width: 3;"/><path data-c="52" d="M130 622Q123 629 119 631T103 634T60 637H27V683H202H236H300Q376 683 417 677T500 648Q595 600 609 517Q610 512 610 501Q610 468 594 439T556 392T511 361T472 343L456 338Q459 335 467 332Q497 316 516 298T545 254T559 211T568 155T578 94Q588 46 602 31T640 16H645Q660 16 674 32T692 87Q692 98 696 101T712 105T728 103T732 90Q732 59 716 27T672 -16Q656 -22 630 -22Q481 -16 458 90Q456 101 456 163T449 246Q430 304 373 320L363 322L297 323H231V192L232 61Q238 51 249 49T301 46H334V0H323Q302 3 181 3Q59 3 38 0H27V46H60Q102 47 111 49T130 61V622ZM491 499V509Q491 527 490 539T481 570T462 601T424 623T362 636Q360 636 340 636T304 637H283Q238 637 234 628Q231 624 231 492V360H289Q390 360 434 378T489 456Q491 467 491 499Z" transform="translate(3253,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(3989,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(4489,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(4878,0)" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(5156,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(5933.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(6989.6,0) translate(0 -0.5)"><path data-c="7C" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(7267.6,0)"><g data-mml-node="mtext"><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(389,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(889,0)" style="stroke-width: 3;"/><path data-c="67" d="M329 409Q373 453 429 453Q459 453 472 434T485 396Q485 382 476 371T449 360Q416 360 412 390Q410 404 415 411Q415 412 416 414V415Q388 412 363 393Q355 388 355 386Q355 385 359 381T368 369T379 351T388 325T392 292Q392 230 343 187T222 143Q172 143 123 171Q112 153 112 133Q112 98 138 81Q147 75 155 75T227 73Q311 72 335 67Q396 58 431 26Q470 -13 470 -72Q470 -139 392 -175Q332 -206 250 -206Q167 -206 107 -175Q29 -140 29 -75Q29 -39 50 -15T92 18L103 24Q67 55 67 108Q67 155 96 193Q52 237 52 292Q52 355 102 398T223 442Q274 442 318 416L329 409ZM299 343Q294 371 273 387T221 404Q192 404 171 388T145 343Q142 326 142 292Q142 248 149 227T179 192Q196 182 222 182Q244 182 260 189T283 207T294 227T299 242Q302 258 302 292T299 343ZM403 -75Q403 -50 389 -34T348 -11T299 -2T245 0H218Q151 0 138 -6Q118 -15 107 -34T95 -74Q95 -84 101 -97T122 -127T170 -155T250 -167Q319 -167 361 -139T403 -75Z" transform="translate(1281,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(1781,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(2225,0)" style="stroke-width: 3;"/><path data-c="48" d="M128 622Q121 629 117 631T101 634T58 637H25V683H36Q57 680 180 680Q315 680 324 683H335V637H302Q262 636 251 634T233 622L232 500V378H517V622Q510 629 506 631T490 634T447 637H414V683H425Q446 680 569 680Q704 680 713 683H724V637H691Q651 636 640 634T622 622V61Q628 51 639 49T691 46H724V0H713Q692 3 569 3Q434 3 425 0H414V46H447Q489 47 498 49T517 61V332H232V197L233 61Q239 51 250 49T302 46H335V0H324Q303 3 180 3Q45 3 36 0H25V46H58Q100 47 109 49T128 61V622Z" transform="translate(2614,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(3364,0)" style="stroke-width: 3;"/><path data-c="70" d="M36 -148H50Q89 -148 97 -134V-126Q97 -119 97 -107T97 -77T98 -38T98 6T98 55T98 106Q98 140 98 177T98 243T98 296T97 335T97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 61 434T98 436Q115 437 135 438T165 441T176 442H179V416L180 390L188 397Q247 441 326 441Q407 441 464 377T522 216Q522 115 457 52T310 -11Q242 -11 190 33L182 40V-45V-101Q182 -128 184 -134T195 -145Q216 -148 244 -148H260V-194H252L228 -193Q205 -192 178 -192T140 -191Q37 -191 28 -194H20V-148H36ZM424 218Q424 292 390 347T305 402Q234 402 182 337V98Q222 26 294 26Q345 26 384 80T424 218Z" transform="translate(3642,0)" style="stroke-width: 3;"/><path data-c="59" d="M518 0Q497 3 374 3Q253 3 232 0H221V46H254Q313 47 321 58Q324 62 324 167V273L221 446Q117 620 114 623Q106 631 91 634T31 637H11V683H20Q29 680 148 680Q273 680 294 683H305V637H287Q239 636 236 621Q236 619 321 475L407 332L483 460Q502 492 527 534Q563 594 563 604Q563 632 517 637H508V683H517H525Q533 683 545 683T571 682T600 681T626 681Q695 681 731 683H738V637H723Q640 633 613 588Q612 587 517 427L425 273V169V95Q425 66 428 59T444 49Q459 46 506 46H528V0H518Z" transform="translate(4198,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(12215.6,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z" style="stroke-width: 3;"/></g></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(12715.6,0)"><g data-mml-node="mtext"><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(394,0)" style="stroke-width: 3;"/><path data-c="75" d="M383 58Q327 -10 256 -10H249Q124 -10 105 89Q104 96 103 226Q102 335 102 348T96 369Q86 385 36 385H25V408Q25 431 27 431L38 432Q48 433 67 434T105 436Q122 437 142 438T172 441T184 442H187V261Q188 77 190 64Q193 49 204 40Q224 26 264 26Q290 26 311 35T343 58T363 90T375 120T379 144Q379 145 379 161T380 201T380 248V315Q380 361 370 372T320 385H302V431Q304 431 378 436T457 442H464V264Q464 84 465 81Q468 61 479 55T524 46H542V0Q540 0 467 -5T390 -11H383V58Z" transform="translate(894,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(1450,0)" style="stroke-width: 3;"/><path data-c="63" d="M370 305T349 305T313 320T297 358Q297 381 312 396Q317 401 317 402T307 404Q281 408 258 408Q209 408 178 376Q131 329 131 219Q131 137 162 90Q203 29 272 29Q313 29 338 55T374 117Q376 125 379 127T395 129H409Q415 123 415 120Q415 116 411 104T395 71T366 33T318 2T249 -11Q163 -11 99 53T34 214Q34 318 99 383T250 448T370 421T404 357Q404 334 387 320Z" transform="translate(1842,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(2286,0)" style="stroke-width: 3;"/><path data-c="48" d="M128 622Q121 629 117 631T101 634T58 637H25V683H36Q57 680 180 680Q315 680 324 683H335V637H302Q262 636 251 634T233 622L232 500V378H517V622Q510 629 506 631T490 634T447 637H414V683H425Q446 680 569 680Q704 680 713 683H724V637H691Q651 636 640 634T622 622V61Q628 51 639 49T691 46H724V0H713Q692 3 569 3Q434 3 425 0H414V46H447Q489 47 498 49T517 61V332H232V197L233 61Q239 51 250 49T302 46H335V0H324Q303 3 180 3Q45 3 36 0H25V46H58Q100 47 109 49T128 61V622Z" transform="translate(2730,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(3480,0)" style="stroke-width: 3;"/><path data-c="70" d="M36 -148H50Q89 -148 97 -134V-126Q97 -119 97 -107T97 -77T98 -38T98 6T98 55T98 106Q98 140 98 177T98 243T98 296T97 335T97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 61 434T98 436Q115 437 135 438T165 441T176 442H179V416L180 390L188 397Q247 441 326 441Q407 441 464 377T522 216Q522 115 457 52T310 -11Q242 -11 190 33L182 40V-45V-101Q182 -128 184 -134T195 -145Q216 -148 244 -148H260V-194H252L228 -193Q205 -192 178 -192T140 -191Q37 -191 28 -194H20V-148H36ZM424 218Q424 292 390 347T305 402Q234 402 182 337V98Q222 26 294 26Q345 26 384 80T424 218Z" transform="translate(3758,0)" style="stroke-width: 3;"/><path data-c="59" d="M518 0Q497 3 374 3Q253 3 232 0H221V46H254Q313 47 321 58Q324 62 324 167V273L221 446Q117 620 114 623Q106 631 91 634T31 637H11V683H20Q29 680 148 680Q273 680 294 683H305V637H287Q239 636 236 621Q236 619 321 475L407 332L483 460Q502 492 527 534Q563 594 563 604Q563 632 517 637H508V683H517H525Q533 683 545 683T571 682T600 681T626 681Q695 681 731 683H738V637H723Q640 633 613 588Q612 587 517 427L425 273V169V95Q425 66 428 59T444 49Q459 46 506 46H528V0H518Z" transform="translate(4314,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(17779.6,0) translate(0 -0.5)"><path data-c="7C" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mtext>verticalRatio</mtext><mo>=</mo><mo data-mjx-texclass="ORD" stretchy="false">|</mo><mrow data-mjx-texclass="ORD"><mtext>targetHipY</mtext></mrow><mrow data-mjx-texclass="ORD"><mo>/</mo></mrow><mrow data-mjx-texclass="ORD"><mtext>sourceHipY</mtext></mrow><mo data-mjx-texclass="ORD" stretchy="false">|</mo></math></mjx-assistive-mml></mjx-container>, yatay içinse orantı oranı. Aşırı hareket ortadan kalktı. Ayrıca <code>RL_BoneRoot.position</code> NaN uyarıları akışının nedeni, UAL'ın <code>root</code> kemiğinin (<mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="5.875ex" height="1.731ex" role="img" focusable="false" viewBox="0 -683 2596.6 765" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D44C" d="M66 637Q54 637 49 637T39 638T32 641T30 647T33 664T42 682Q44 683 56 683Q104 680 165 680Q288 680 306 683H316Q322 677 322 674T320 656Q316 643 310 637H298Q242 637 242 624Q242 619 292 477T343 333L346 336Q350 340 358 349T379 373T411 410T454 461Q546 568 561 587T577 618Q577 634 545 637Q528 637 528 647Q528 649 530 661Q533 676 535 679T549 683Q551 683 578 682T657 680Q684 680 713 681T746 682Q763 682 763 673Q763 669 760 657T755 643Q753 637 734 637Q662 632 617 587Q608 578 477 424L348 273L322 169Q295 62 295 57Q295 46 363 46Q379 46 384 45T390 35Q390 33 388 23Q384 6 382 4T366 1Q361 1 324 1T232 2Q170 2 138 2T102 1Q84 1 84 9Q84 14 87 24Q88 27 89 30T90 35T91 39T93 42T96 44T101 45T107 45T116 46T129 46Q168 47 180 50T198 63Q201 68 227 171L252 274L129 623Q128 624 127 625T125 627T122 629T118 631T113 633T105 634T96 635T83 636T66 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1040.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2096.6,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>Y</mi><mo>=</mo><mn>0</mn></math></mjx-assistive-mml></mjx-container> konumunda) konum izi bağlama Y değerine bölünerek normalleştirilen bir hedef kemiğe eşlenmesiydi. Sıfıra bölme, NaN ve sessizce atılan bir iz. Çözüm, ötelemesi zaten kalça izinde bulunduğu için kök eşlemesini tamamen kaldırmaktı.</p>
<p>En küçük düzeltme, izlemesi en tatmin edici olandı. Kemik eşlemesinde parmak girdileri bulunmadığı ve yeniden hedefleyici yalnızca eşlenmiş kemikler için iz yazdığı için karakter kılıcı gevşek, bağlama pozundaki parmaklarla tutuyordu. 30 parmak kemiği eklemek (beş parmak, üç segment, iki el; UAL'ın deformasyon yapmayan dördüncü uç yardımcı kemiğini hariç tutarak) elin kabzayı kavrarken kapanmasını ve bırakırken açılmasını sağladı.</p>
<h2 id="_262-klibi-262-klibi-izlemeden-dogrulamak" tabindex="-1">262 klibi, 262 klibi izlemeden doğrulamak <a class="header-anchor" href="#_262-klibi-262-klibi-izlemeden-dogrulamak" aria-label="Permalink to &quot;262 klibi, 262 klibi izlemeden doğrulamak&quot;"></a></h2>
<p>262 kliplik bir kütüphaneyi gözle doğrulayamazsınız; bu nedenle çevrimdışı bir yörünge eşlik testi geliştirdik: Her paketi yükleyen, kaynak iskeleti 60 Hz'de örnekleyen, yeniden hedefleme işlem hattını çalıştıran ve ölçeklendirmeden sonra kemik başına dünya konumlarıyla dönüşlerini kaynakla karşılaştıran başsız bir Node betiği. Pelvisin Y eksenindeki maksimum sapması 0,003 m oldu. Ellerde başlangıçta “parmaklar takip etmiyor” şeklinde yorumlanan sabit 2,5°'lik bir ofset vardı; ancak sabit ofset, düz UAL eli ile CC4'ün hafifçe çukurlaştırılmış bağlama pozu arasındaki bağlama deltasıdır ve klip boyunca değişmez. Gerçek animasyon hataları, kareden kareye değişen sapmalar olarak ortaya çıkar. Bu netleştiğinde test, tek seferlik bir regresyon kontrolüne dönüştü: Bir klibin sapması bu sabit taban çizgisini korumayı bırakırsa yakın tarihli bir değişiklik yeniden hedeflemeyi bozmuş demektir.</p>
<p>Yan yana gösterilen bir referans manken, hata ayıklamanın görsel tarafını belirleyici hâle getirdi. Ters eğik çizgi tuşuna basıldığında geçerli klibin sahibi olan kaynak iskelet oyuncunun yanında gösteriliyor; böylece “omuz neden burulmuş?” sorusu “burulma kaynakta mı, yoksa yeniden hedefleme mi ekledi?” sorusuna dönüşüyor. Sayısal testler regresyonları yakalıyor, görsel referans sayıların ortaya çıkarmadığı bağlama pozu hatalarını buluyor ve ikisi birlikte tahmin oyununa son veriyor.</p>
<p>İşlem hattı sağlamlaştıktan sonra WASD/zıplama/yüzme temelini Mixamo'dan UAL'a geçirmek yalnızca ince bir takma ad eşlemesi gerektirdi: FSM hâlâ <code>idle</code> ve <code>walk</code> gibi genel durum adlarını kullanıyor ve bunlar oynatma sırasında UAL klip adlarına çözümleniyor. Serbest stil ve su üstünde durma pozları pelvisi farklı anatomik yüksekliklere sabitlediği için yüzmede klip başına iskelet ofsetleri gerekti. Bu nedenle aktif yüzme sırasında iskeleti yarım metre, su üstünde dururken daha derine batırıyor ve aralarında yumuşak bir 5 Hz geçiş yapıyoruz.</p>
<h2 id="bir-kelime-yazın-bir-model-alın" tabindex="-1">Bir kelime yazın, bir model alın <a class="header-anchor" href="#bir-kelime-yazın-bir-model-alın" aria-label="Permalink to &quot;Bir kelime yazın, bir model alın&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/36-polyhaven-models/" title="Spike 36 Polyhaven Modelleri" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/36-polyhaven-models/" target="_blank">Spike 36'yı yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=36-polyhaven-models">Kaynak kodunu görüntüle</a></p>
<p>Spike 34, elle seçilmiş bir CC0 paketi hazırlamak için bir gün harcadı. Uzun vadeli çözüm bir arama kutusu. Polyhaven, izin verici bir JSON API'si ve deterministik bir CDN üzerinden yaklaşık 1.100 CC0 model yayımlıyor. Bu spike, sorgu, küçük resimler, yükleme ve görüntülemeden oluşan tüm yolu; derleme adımı bulunmayan statik bir sayfada, yaklaşık 300 satır sade JS ve three.js ile bağlıyor.</p>
<p>Başlangıçta yaklaşık 600 KB büyüklüğündeki kataloğun tamamı bir kez getiriliyor. Arama, 120 ms gecikmeli, tamamen istemci taraflı puanlama kullanıyor (ad, kimlikten; kimlik, kategoriden; kategori de etiketten üstün) ve en yüksek puanlı 60 kartı oluşturuyor. Küçük resimler bir <code>IntersectionObserver</code> üzerinden tembel yükleniyor; böylece yazı yazmak aynı anda 60 istek başlatmıyor. İlginç kısım yükleme. Polyhaven'ın dosya uç noktası GLB değil, çok dosyalı glTF sunuyor; dokular çözünürlükler arasında paylaşılıyor ve ayrı dosyalara bölünüyor. Ayrıca göreli yollardan mutlak CDN URL'lerine uzanan bir <code>include</code> eşlemesi döndürüyor. JSON'u kendimiz indirip yamamak yerine bu eşlemeyi <code>LoadingManager.setURLModifier</code> üzerinden geçiriyoruz. Bu, yükleyicinin ihtiyaç duyduğu her bağımlılık (<code>.bin</code> ve her doku) için çalışıyor ve bunları CDN üzerinden çözümlüyor. Tek tıklama, görünürde tek dosya. Hem API hem de CDN izin verici CORS başlıkları sunuyor; bu durum herhangi bir istemci kodu yazılmadan önce <code>curl</code> ile doğrulandı, dolayısıyla proxy gerekmiyor. PBR malzemeleri, <code>RoomEnvironment</code> ve varsayılan ACES ton eşleme ayarlarıyla varlık başına düzeltme gerektirmeden doğru görüntüleniyor. 1k dokular da tipik bir modeli 4k'daki 20 ila 40 MB yerine 2 ila 5 MB arasında tutuyor.</p>
<p>Bir meshoptimizer WASM geçişi, sistemi tahribatsız bir azaltıcıyla tamamlıyor: Her mesh, özgün geometrisinin bir kopyasını saklıyor ve oran değiştiğinde kümülatif olarak sadeleştirmek yerine bu kopyadan yeni bir indeks arabelleği oluşturuyor. Çok malzemeli geometri, grup başına sadeleştiriliyor ve malzeme yuvalarının birleşmemesi için <code>geometry.groups</code> yeniden oluşturuluyor. Bir koltuk, tam ayrıntıda 5.626 üçgenden yarı ayrıntıda 2.812 üçgene düşüyor.</p>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>Bağlama pozu hizalamasıyla iskelet yeniden hedefleme.</strong> Animasyonu farklı kemik adlarına, oranlara ve referans pozlarına sahip bir iskeletten diğerine eşlemek üç düzeltme gerektirir: bir kemik adı eşlemesi, iki iskeletin ortak bir referans yönelimini paylaşmasını sağlayan bağlama pozu hizalaması (hedefin A-pozu kol zincirini kaynağın T-pozuna zorlayarak) ve konum izi ölçeklendirmesi. Poz uyuşmazlığı, A'dan T'ye dönüşü kare başına her deltaya ekleyerek eklem dönüşünü ikiye katlar. Eşlenmemiş yardımcı kemikler çıkarılmalıdır; çünkü <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="5.875ex" height="1.731ex" role="img" focusable="false" viewBox="0 -683 2596.6 765" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D44C" d="M66 637Q54 637 49 637T39 638T32 641T30 647T33 664T42 682Q44 683 56 683Q104 680 165 680Q288 680 306 683H316Q322 677 322 674T320 656Q316 643 310 637H298Q242 637 242 624Q242 619 292 477T343 333L346 336Q350 340 358 349T379 373T411 410T454 461Q546 568 561 587T577 618Q577 634 545 637Q528 637 528 647Q528 649 530 661Q533 676 535 679T549 683Q551 683 578 682T657 680Q684 680 713 681T746 682Q763 682 763 673Q763 669 760 657T755 643Q753 637 734 637Q662 632 617 587Q608 578 477 424L348 273L322 169Q295 62 295 57Q295 46 363 46Q379 46 384 45T390 35Q390 33 388 23Q384 6 382 4T366 1Q361 1 324 1T232 2Q170 2 138 2T102 1Q84 1 84 9Q84 14 87 24Q88 27 89 30T90 35T91 39T93 42T96 44T101 45T107 45T116 46T129 46Q168 47 180 50T198 63Q201 68 227 171L252 274L129 623Q128 624 127 625T125 627T122 629T118 631T113 633T105 634T96 635T83 636T66 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1040.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2096.6,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>Y</mi><mo>=</mo><mn>0</mn></math></mjx-assistive-mml></mjx-container> konumundaki bir kök kemik, konum izi normalleştirmesinde sessiz bir sıfıra bölme hatasını tetikler.</p>
<p><strong>Tek iskelet için iki ölçek oranı.</strong> Yatay yer değiştirme genel uzuv oranını, yani iskeletin genel boyutunu kullanır; ancak dikey pelvis ofseti, iskeletlerin bacak-gövde oranları farklı olduğu için kalçadan zemine <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="25.041ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 11068 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo" transform="translate(0 -0.5)"><path data-c="7C" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(278,0)"><g data-mml-node="mtext"><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(389,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(889,0)" style="stroke-width: 3;"/><path data-c="67" d="M329 409Q373 453 429 453Q459 453 472 434T485 396Q485 382 476 371T449 360Q416 360 412 390Q410 404 415 411Q415 412 416 414V415Q388 412 363 393Q355 388 355 386Q355 385 359 381T368 369T379 351T388 325T392 292Q392 230 343 187T222 143Q172 143 123 171Q112 153 112 133Q112 98 138 81Q147 75 155 75T227 73Q311 72 335 67Q396 58 431 26Q470 -13 470 -72Q470 -139 392 -175Q332 -206 250 -206Q167 -206 107 -175Q29 -140 29 -75Q29 -39 50 -15T92 18L103 24Q67 55 67 108Q67 155 96 193Q52 237 52 292Q52 355 102 398T223 442Q274 442 318 416L329 409ZM299 343Q294 371 273 387T221 404Q192 404 171 388T145 343Q142 326 142 292Q142 248 149 227T179 192Q196 182 222 182Q244 182 260 189T283 207T294 227T299 242Q302 258 302 292T299 343ZM403 -75Q403 -50 389 -34T348 -11T299 -2T245 0H218Q151 0 138 -6Q118 -15 107 -34T95 -74Q95 -84 101 -97T122 -127T170 -155T250 -167Q319 -167 361 -139T403 -75Z" transform="translate(1281,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(1781,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(2225,0)" style="stroke-width: 3;"/><path data-c="48" d="M128 622Q121 629 117 631T101 634T58 637H25V683H36Q57 680 180 680Q315 680 324 683H335V637H302Q262 636 251 634T233 622L232 500V378H517V622Q510 629 506 631T490 634T447 637H414V683H425Q446 680 569 680Q704 680 713 683H724V637H691Q651 636 640 634T622 622V61Q628 51 639 49T691 46H724V0H713Q692 3 569 3Q434 3 425 0H414V46H447Q489 47 498 49T517 61V332H232V197L233 61Q239 51 250 49T302 46H335V0H324Q303 3 180 3Q45 3 36 0H25V46H58Q100 47 109 49T128 61V622Z" transform="translate(2614,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(3364,0)" style="stroke-width: 3;"/><path data-c="70" d="M36 -148H50Q89 -148 97 -134V-126Q97 -119 97 -107T97 -77T98 -38T98 6T98 55T98 106Q98 140 98 177T98 243T98 296T97 335T97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 61 434T98 436Q115 437 135 438T165 441T176 442H179V416L180 390L188 397Q247 441 326 441Q407 441 464 377T522 216Q522 115 457 52T310 -11Q242 -11 190 33L182 40V-45V-101Q182 -128 184 -134T195 -145Q216 -148 244 -148H260V-194H252L228 -193Q205 -192 178 -192T140 -191Q37 -191 28 -194H20V-148H36ZM424 218Q424 292 390 347T305 402Q234 402 182 337V98Q222 26 294 26Q345 26 384 80T424 218Z" transform="translate(3642,0)" style="stroke-width: 3;"/><path data-c="59" d="M518 0Q497 3 374 3Q253 3 232 0H221V46H254Q313 47 321 58Q324 62 324 167V273L221 446Q117 620 114 623Q106 631 91 634T31 637H11V683H20Q29 680 148 680Q273 680 294 683H305V637H287Q239 636 236 621Q236 619 321 475L407 332L483 460Q502 492 527 534Q563 594 563 604Q563 632 517 637H508V683H517H525Q533 683 545 683T571 682T600 681T626 681Q695 681 731 683H738V637H723Q640 633 613 588Q612 587 517 427L425 273V169V95Q425 66 428 59T444 49Q459 46 506 46H528V0H518Z" transform="translate(4198,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(5226,0)"><g data-mml-node="mo"><path data-c="2F" d="M423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750Z" style="stroke-width: 3;"/></g></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(5726,0)"><g data-mml-node="mtext"><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(394,0)" style="stroke-width: 3;"/><path data-c="75" d="M383 58Q327 -10 256 -10H249Q124 -10 105 89Q104 96 103 226Q102 335 102 348T96 369Q86 385 36 385H25V408Q25 431 27 431L38 432Q48 433 67 434T105 436Q122 437 142 438T172 441T184 442H187V261Q188 77 190 64Q193 49 204 40Q224 26 264 26Q290 26 311 35T343 58T363 90T375 120T379 144Q379 145 379 161T380 201T380 248V315Q380 361 370 372T320 385H302V431Q304 431 378 436T457 442H464V264Q464 84 465 81Q468 61 479 55T524 46H542V0Q540 0 467 -5T390 -11H383V58Z" transform="translate(894,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(1450,0)" style="stroke-width: 3;"/><path data-c="63" d="M370 305T349 305T313 320T297 358Q297 381 312 396Q317 401 317 402T307 404Q281 408 258 408Q209 408 178 376Q131 329 131 219Q131 137 162 90Q203 29 272 29Q313 29 338 55T374 117Q376 125 379 127T395 129H409Q415 123 415 120Q415 116 411 104T395 71T366 33T318 2T249 -11Q163 -11 99 53T34 214Q34 318 99 383T250 448T370 421T404 357Q404 334 387 320Z" transform="translate(1842,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(2286,0)" style="stroke-width: 3;"/><path data-c="48" d="M128 622Q121 629 117 631T101 634T58 637H25V683H36Q57 680 180 680Q315 680 324 683H335V637H302Q262 636 251 634T233 622L232 500V378H517V622Q510 629 506 631T490 634T447 637H414V683H425Q446 680 569 680Q704 680 713 683H724V637H691Q651 636 640 634T622 622V61Q628 51 639 49T691 46H724V0H713Q692 3 569 3Q434 3 425 0H414V46H447Q489 47 498 49T517 61V332H232V197L233 61Q239 51 250 49T302 46H335V0H324Q303 3 180 3Q45 3 36 0H25V46H58Q100 47 109 49T128 61V622Z" transform="translate(2730,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(3480,0)" style="stroke-width: 3;"/><path data-c="70" d="M36 -148H50Q89 -148 97 -134V-126Q97 -119 97 -107T97 -77T98 -38T98 6T98 55T98 106Q98 140 98 177T98 243T98 296T97 335T97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 61 434T98 436Q115 437 135 438T165 441T176 442H179V416L180 390L188 397Q247 441 326 441Q407 441 464 377T522 216Q522 115 457 52T310 -11Q242 -11 190 33L182 40V-45V-101Q182 -128 184 -134T195 -145Q216 -148 244 -148H260V-194H252L228 -193Q205 -192 178 -192T140 -191Q37 -191 28 -194H20V-148H36ZM424 218Q424 292 390 347T305 402Q234 402 182 337V98Q222 26 294 26Q345 26 384 80T424 218Z" transform="translate(3758,0)" style="stroke-width: 3;"/><path data-c="59" d="M518 0Q497 3 374 3Q253 3 232 0H221V46H254Q313 47 321 58Q324 62 324 167V273L221 446Q117 620 114 623Q106 631 91 634T31 637H11V683H20Q29 680 148 680Q273 680 294 683H305V637H287Q239 636 236 621Q236 619 321 475L407 332L483 460Q502 492 527 534Q563 594 563 604Q563 632 517 637H508V683H517H525Q533 683 545 683T571 682T600 681T626 681Q695 681 731 683H738V637H723Q640 633 613 588Q612 587 517 427L425 273V169V95Q425 66 428 59T444 49Q459 46 506 46H528V0H518Z" transform="translate(4314,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(10790,0) translate(0 -0.5)"><path data-c="7C" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo data-mjx-texclass="ORD" stretchy="false">|</mo><mrow data-mjx-texclass="ORD"><mtext>targetHipY</mtext></mrow><mrow data-mjx-texclass="ORD"><mo>/</mo></mrow><mrow data-mjx-texclass="ORD"><mtext>sourceHipY</mtext></mrow><mo data-mjx-texclass="ORD" stretchy="false">|</mo></math></mjx-assistive-mml></mjx-container> oranını kullanır. Her iki eksende de tek oran kullanmak, tırmanışların hedefi aşmasına ve toparlanmaların zeminin altına batmasına yol açar. UAL'daki yer değiştirme pelviste değil <code>root</code> kemiğinde bulunduğundan, geri savrulma, tırmanma ve hareket kliplerinde hareketi korumak için ikisi de tek bir kalça konumu izinde toplanmalıdır.</p>
<p><strong>Çevrimdışı yörünge eşlik testi.</strong> Başsız bir betik kaynak iskeleti 60 Hz'de örnekler, yeniden hedefleme işlem hattını çalıştırır ve kemik başına dünya dönüşümlerini kaynakla karşılaştırır. Kare başına sabit bir ofset zararsız bağlama deltasıyken, kareden kareye değişen sapma gerçek bir hatadır. Böylece test, bir değişiklik bir izi kaldırdığında veya bozduğunda tetiklenen bir regresyon kontrolüne dönüşür. Paket başına GLB yalıtımı (her seferinde yeni yükleme ve bir sonrakinden önce serbest bırakma), taramanın tamamında önbellek çekişmesini önler.</p>
<p><strong>CDN glTF grafikleri için LoadingManager.setURLModifier.</strong> Bir CDN, glTF'yi beraberindeki bir include eşlemesiyle (göreli yoldan mutlak URL'ye) göreli URI grafiği olarak sunduğunda <code>setURLModifier</code>, JSON'u yeniden yazmadan yükleyicinin istediği her bağımlılığı CDN üzerinden çözümler. Bu, çok dosyalı ve çok çözünürlüklü bir dağıtımı tek tıklamayla yüklenebilir hâle getirir. Bir sonraki model yüklenmeden önce önceki modelin geometrisini, malzemelerini ve doku haritalarını serbest bırakmak, gezinme oturumu boyunca yüzlerce MB GPU belleğinin birikmesini önler.</p>
<p><strong>Tahribatsız mesh sadeleştirme.</strong> Her mesh'in özgün geometrisinin bir kopyasını saklamak ve her sadeleştirme oranında yalnızca indeks arabelleğini yeniden oluşturmak, değişiklikleri hızlı tutar ve tekrarlanan sadeleştirmenin yol açtığı kümülatif hasarı önler. İşlemi her <code>geometry.groups</code> dilimi için ayrı yürütmek ve grupları yeniden oluşturmak, çoklu malzeme atamalarını korur. Bunun mesafeye dayalı LOD'a nasıl aktarıldığını görmek için <a href="/tr/guides/landscape-generation-browser.html#gpu-driven-lod-with-webgpu">LOD ve meshoptimizer</a> bölümüne bakın.</p>
<hr>
<p>29 bölümün 17.'si.
Önceki: <a href="/tr/blog/2026-04-28-open-world-browser-part-16-structure-and-authoring.html">Bölüm 16 - Büyümeye devam eden bir dünya için yapı</a>
Sonraki: <a href="/tr/blog/2026-05-02-open-world-browser-part-18-ai-scattering.html">Bölüm 18 - Yapay zekâ yerleştirmiş hissi veren bir dağıtma fırçası</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Bir yapay zekâ oyun motorunun anatomisi: istemin içinde gerçekte ne var?]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-04-30-anatomy-of-an-ai-game-engine</link>
            <guid>https://app.cinevva.com/tr/blog/2026-04-30-anatomy-of-an-ai-game-engine</guid>
            <pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Cinevva tek bir metin kutusu gibi görünür. Arka planda bir orkestratör, tür tanımlı 26 araç, on bir varlık sağlayıcısı, ajanın oynayabildiği canlı bir oyun iframe'i ve oynanış videolarına bağlı bir mağaza bulunur. İşte parça parça tüm sistem.]]></description>
            <content:encoded><![CDATA[<h1 id="bir-yapay-zeka-oyun-motorunun-anatomisi-istemin-icinde-gercekte-ne-var" tabindex="-1">Bir yapay zekâ oyun motorunun anatomisi: istemin içinde gerçekte ne var? <a class="header-anchor" href="#bir-yapay-zeka-oyun-motorunun-anatomisi-istemin-icinde-gercekte-ne-var" aria-label="Permalink to &quot;Bir yapay zekâ oyun motorunun anatomisi: istemin içinde gerçekte ne var?&quot;"></a></h1>
<p><em><a href="/tr/about.html">Mariana Muntean</a>, Cinevva CEO'su</em></p>
<p>Cinevva hakkında yabancılardan en sık duyduğumuz şey, onun bir yapay zekâ sarmalayıcısı olduğu. Ana sayfaya geliyor, üzerinde &quot;Oyununu tarif et&quot; yazan tek bir giriş kutusu görüyor ve ürünü anladıklarına karar veriyorlar. Oysa yalnızca giriş kapısını anlamış oluyorlar. Ürün, siz o cümleyi yazarken görmediğiniz her şeyin yanı sıra, bu haftadan itibaren oyuncularınızın oyununuzu bulmak için ilk adım attığı açık dünyadır.</p>
<p>Bu girişin arkasında eksiksiz bir oyun motoru, tür tanımlı 26 araca sahip bir orkestratör, bir üretken model filosu, on bir sağlayıcıyı kapsayan birleşik bir varlık araması, ajanın okuyup yazabildiği canlı bir oyun iframe'i ve aynı ajanın tamamlanmış oyununuzu kaydırılabilir bir oynanış videosu olarak yayımladığı bir mağaza bulunuyor. Bunların hiçbiri egzotik değil. Hepsi altyapı işi. Asıl ilginç iş, neyi neye bağlayacağımıza karar vermekti.</p>
<p>Bu yazıda sistemi tepeden tırnağa inceleyeceğiz. Teknik yatırımcılara ve katkıda bulunmayı düşünen geliştiricilere yaptığımız açıklama bu. İkisi de aynı yanıtı istiyor.</p>
<h2 id="_1-istem-sistemin-kendisi-degil-gorunen-yuzudur" tabindex="-1">1. İstem sistemin kendisi değil, görünen yüzüdür <a class="header-anchor" href="#_1-istem-sistemin-kendisi-degil-gorunen-yuzudur" aria-label="Permalink to &quot;1. İstem sistemin kendisi değil, görünen yüzüdür&quot;"></a></h2>
<img src="/img/blog/engine-anatomy/cinevva-engine-prompt.png" alt="Ana sayfadaki Cinevva istem alanı. Tek bir metin alanında 'Asteroitler, güçlendirmeler ve synth müziklerle neon bir uzay nişancı oyunu yap.' yazıyor. Altında üç öneri etiketi ve Cinevva logosu bulunuyor." style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>İlk tasarım kararımız, kullanıcı gerçekten işe dâhil olana kadar her şeyi gizlemekti. Ana sayfanın tek bir görevi var: bir cümleyi alıp projeye dönüştürmek. Deneyimi herkese açık taraf (istem, vitrinler ve mağaza akışı) ile üretici tarafı (IDE, varlık araçları ve yayımlama akışı) olarak ikiye ayırdık; böylece yalnızca oyun oynamak isteyenler kokpite bakmak zorunda kalmıyor.</p>
<p>Bu nedenle yer tutucu metin &quot;Neon grafiklere sahip bir yılan oyunu yap&quot; ve &quot;Üstten görünümlü zombi nişancı oyunu&quot; gibi örnekler arasında değişiyor. Bunlar eğitim içeriği değil. Kullanıcıya izin veren küçük bir işaret. Kullanıcı, &quot;tuhaf arcade fikri&quot;nin geçerli bir girdi olduğunu görüyor.</p>
<p>Gönder düğmesine bastığınız anda üç şey gerçekleşir. Sistem, kalıcı bir kimliğe sahip yepyeni bir oyun projesi oluşturur. Boş bir dosya ağacı (<code>index.html</code>, <code>game.js</code>, <code>style.css</code>, <code>assets/</code>, <code>GDD.md</code>) hazırlar. Ardından cümlenizi, bu boş dosyaları işaret eden bir proje bağlam penceresiyle birlikte orkestratöre yönlendirir. Bu noktadan sonra elleri olan bir ajanla konuşursunuz.</p>
<h2 id="_2-giris-alanının-arkasında-eksiksiz-bir-tarayıcı-ide-si" tabindex="-1">2. Giriş alanının arkasında eksiksiz bir tarayıcı IDE'si <a class="header-anchor" href="#_2-giris-alanının-arkasında-eksiksiz-bir-tarayıcı-ide-si" aria-label="Permalink to &quot;2. Giriş alanının arkasında eksiksiz bir tarayıcı IDE'si&quot;"></a></h2>
<img src="/img/blog/engine-anatomy/cinevva-engine-ide.png" alt="Karanlık moddaki Cinevva üretici IDE'si. Üç panel bulunuyor: solda GDD.md, index.html, game.js, style.css ve assets klasörünü içeren bir dosya ağacı; ortada Three.js işleyici kurulumunu gösteren, sözdizimi vurgulamalı bir kod düzenleyici; sağda ise SKOR ve CAN HUD'uyla üstten görünümlü neon bir uzay nişancı oyununu gösteren canlı oyun önizlemesi." style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Üretici çalışma alanı, tamamen tarayıcıda çalışan üç panelli bir IDE'dir. Solda dosya ağacı, ortada kod düzenleyici, sağda canlı oyun iframe'i ve alt kısım boyunca uzanan bir sohbet alanı bulunur. Bu düzeni bilinçli olarak seçtik. Hâlihazırda kod yazan kişiler onu anında tanıyor. Kod yazmayanlar ise orta paneli görmezden gelip yalnızca sohbet üzerinden ilerleyebiliyor.</p>
<p>Dosya ağacı bir metafor değil. Her proje gerçekten de bir Cloudflare Worker aracılığıyla doğrudan R2'den sunulan HTML, JS, CSS, üretilmiş görseller, GLB modelleri ve ses dosyalarından oluşan küçük bir statik sitedir. Derleme adımı yoktur. Bunun önemli bir nedeni var. Ajanın gerçekten yayımlayacağınız dosyaları okuyup yazabilmesi anlamına gelir. Ayrıca aynı yapının iframe içinde, Capacitor ile paketlenmiş bir telefonda, Tauri ile paketlenmiş Steam sürümünde ve Embedded Activity olarak Discord içinde çalışmasını sağlar. Tek bir dosya sistemi, altı dağıtım hedefi.</p>
<p>Ürettiğimiz her oyunun <code>window</code> üzerinde iki işlev sunması zorunludur. <code>getGameState()</code>, çalışan oyunu tanımlayan sade bir nesne döndürür (oyuncu konumu, skor, canlar, düşmanlar, zamanlayıcılar). <code>setGameState(patch)</code> ise kısmi bir güncellemeyi canlı oyuna uygular. Bu küçük API, ajanın çalışan bir oyunu yeniden yüklemeden inceleyip değiştirmesini sağlayan sözleşmedir. Bunun neden önemli olduğuna 6. bölümde geri döneceğiz.</p>
<h2 id="_3-asıl-motorun-bulundugu-orkestrator" tabindex="-1">3. Asıl motorun bulunduğu orkestratör <a class="header-anchor" href="#_3-asıl-motorun-bulundugu-orkestrator" aria-label="Permalink to &quot;3. Asıl motorun bulunduğu orkestratör&quot;"></a></h2>
<img src="/img/blog/engine-anatomy/cinevva-engine-orchestrator.png" alt="Cinevva orkestratörünün şeması. 'Orkestratör (LLM)' etiketli merkezî bir düğüm, çevresine yerleştirilmiş sekiz araç düğümüne bağlı: list_game_files, read_files, edit_files, write_files, generate_image (Flux), generate_skybox (Blockade), generate_music (ElevenLabs) ve rig_model (Tripo). Noktalı bir çizgi, orkestratörü 'ekran görüntüleri + konsol' etiketli 'Oyun iframe'i' düğümüne bağlıyor." style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Buna &quot;bir yapay zekâ sarmalayıcısı&quot; diyenlerin gözden kaçırdığı nokta, yapay zekânın kod yazmaktan ziyade küçük bir orkestrayı yönetmesidir. Orkestratör, öncü bir model üzerinde çalışan, araç çağırmaya dayalı bir döngüdür. Yaklaşık bin satırlık bir sistem istemine ve tür tanımlı 26 işlevden oluşan bir araç yüzeyine sahiptir. Motor, araç tanımlarıdır. Model ise orkestra şefidir.</p>
<p>26 araç beş aileye ayrılır. Dosya sistemi araçları (<code>list_game_files</code>, <code>read_files</code>, <code>search_game_file</code>, <code>edit_files</code>, <code>write_files</code>, <code>delete_files</code>, <code>rename_files</code>), ajanın oyununuzu herhangi bir kod tabanı gibi ele almasını sağlar. Proje araçları (<code>create_new_game</code>, <code>list_games</code>, <code>open_game</code>, <code>ask_user</code>, <code>game_ready</code>), bir projenin yaşam döngüsünü ve kontrolün insana geri verilmesini yönetir. Üretken araçlar (<code>generate_image</code>, <code>generate_skybox</code>, <code>generate_music</code>, <code>generate_sfx</code>, <code>rig_model</code>, <code>apply_animation</code>, <code>list_animations</code>, <code>list_skybox_styles</code>), birazdan ele alacağımız uzmanlaşmış modelleri çağırır. Bilgi araçları (<code>search_fonts</code>, <code>list_library_docs</code>, <code>search_library_docs</code>, <code>list_generations</code>), ajana uydurma API'ler yerine güvenilir, dizine eklenmiş doğruluk kaynakları sunar. Çalışma zamanı araçları (<code>read_console_logs</code>, <code>execute_js</code>) ise ajanın canlı oyunu görmesini ve ona müdahale etmesini sağlar.</p>
<p>Tipik bir ilk konuşma sırası kabaca şöyle görünür. Kullanıcı &quot;Neon bir uzay nişancı oyunu yap&quot; yazar. Model önce tasarımı açıklayan <code>GDD.md</code> dosyası için bir <code>write_files</code> çağrısı, ardından <code>index.html</code>, <code>game.js</code> ve <code>style.css</code> için bir <code>write_files</code> çağrısı daha üretir. <code>prompt=&quot;synthwave space shooter, 120 BPM, driving bassline&quot;</code> ile <code>generate_music</code> çağrısı yapar; bu, ElevenLabs Music üzerinde bir iş başlatır ve R2 içindeki bir MP3 URL'si döndürür. Yıldız alanı için Blockade Labs model 3 stilini kullanarak <code>generate_skybox</code> çağrısı yapar. iframe'i yeni yapıya geçirmek için <code>game_ready(title, message)</code>, ardından oyunun hatasız başlatıldığını doğrulamak için <code>read_console_logs</code> çağrısı yapar. Bir yığın izleme kaydı görürse kullanıcı herhangi bir sorun bildirmeden önce <code>edit_files</code> adımına geri döner ve hatayı düzeltir.</p>
<p>Bu tasarımın ilginç özelliği, ürüne özgü olan tek şeyin sistem istemi ile araç şemaları olmasıdır. Modeli değiştirseniz bile her şey çalışmaya devam eder. Geçen yıl içinde yüzeyi değiştirmeden üç öncü model arasında geçiş yaptık, çünkü yüzey bize ait.</p>
<h2 id="_4-varlık-tarafı-modellere-dagıtılan-bir-yapı" tabindex="-1">4. Varlık tarafı: modellere dağıtılan bir yapı <a class="header-anchor" href="#_4-varlık-tarafı-modellere-dagıtılan-bir-yapı" aria-label="Permalink to &quot;4. Varlık tarafı: modellere dağıtılan bir yapı&quot;"></a></h2>
<img src="/img/blog/engine-anatomy/cinevva-engine-assets.png" alt="Üç panelli bir varlık üretim paneli. Sol panelde 'synthwave space shooter, 120 BPM, driving bassline' istemini, 60 saniyelik süre kaydırıcısını ve Üret düğmesini içeren bir müzik üreticisi ile 'Asteroid Drift Theme' başlıklı, çalmakta olan bir dalga biçimi kartı bulunuyor. Orta panelde 'deep space, distant nebula, two moons' istemini ve dört adet 360 derecelik ortam küçük resminden oluşan ızgarayı içeren bir gökyüzü kutusu üreticisi var. Sağ panelde düşük poligonlu mor bir uzay gemisinin dönen 3D model önizlemesi, 'İskeletle + Yürüt' düğmesi ve 'İskelet oluşturuluyor... 1 dk. 42 sn. kaldı' yazan bir durum göstergesi bulunuyor." style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Ajan görsel, müzik, ses veya 3D içerik üretmez. Uzmanları çağırır. Cinevva'nın varlık tarafı, sınıfının en iyi modellerine dağılan ve birinin çıktısı diğerinin geçerli girdisi olacak şekilde birbirine bağlanan bir yapıdır.</p>
<p>Görseller ve sprite'lar için <code>generate_image</code>, her zaman 32'nin katı olan bir genişlik ve yükseklik kullanarak Flux Pro 1.1'i çağırır; istem şeffaflık talep ettiğinde çıktı biçimi PNG'ye geçer. Tam uzunlukta şarkılar için ajan, stilistik bir istem ve saniye cinsinden süreyle ElevenLabs Music'i çağırır. Tek seferlik efektlerde ElevenLabs SFX, &quot;laser gun firing, sci-fi blaster&quot; gibi bir metinden beş ila on beş saniye içinde bir klip üretir. 360 derecelik ortamlar için <code>generate_skybox</code>, yaklaşık doksan stilden biriyle Blockade Labs'i çağırır ve varsayılan olarak model 3 Digital Painting'i kullanır. 3D karakterler için <code>rig_model</code>, bir GLB dosyasını iki ayaklı, dört ayaklı, altı ayaklı, sekiz ayaklı, yılansı veya suda yaşayan bir canlı olarak kaplamak ve iskeletlendirmek üzere Tripo'ya gönderir. Ardından <code>apply_animation</code>, on beş hazır animasyondan herhangi birini oynatır (boşta durma, yürüme, koşma, zıplama, tırmanma, dalma, kesme, ateş etme, hasar alma, düşme, dönme ve iki ayaklı olmayanlara özel yürüyüşler).</p>
<p>Bunların her biri eşzamanlı bir çağrı değil, bir iştir. Saniyelerden dakikalara kadar sürebilirler. Orkestratör bunları başlatır, hemen bir <code>jobId</code> ile geri döner ve ayrı bir kanal, varlık hazır olduğunda sonucu konuşmaya aktarır. Bu, deneyimin hissini tamamen değiştirir. Ajan, arka planda bir 3D modelin iskeletlendirilmesi tamamlanırken oyun mantığını geliştirmeye devam edebilir. Kullanıcı hiçbir zaman tek bir kritik yolu beklemek zorunda kalmaz.</p>
<p>Tüm çıktılar aynı yere gider. <code>cdn.cinevva.com</code> arkasındaki R2'ye; sade URL'lerle erişilebilir biçimde. Böylece ajanın bir sonraki <code>write_files</code> çağrısı yalnızca <code>&lt;audio src=&quot;https://cdn.cinevva.com/audio/abc.mp3&quot;&gt;</code> etiketini ekleyebilir ve oyun doğrudan çalışır. SDK yok, varlık paketleyici yok, manifest yok.</p>
<h2 id="_5-on-bir-saglayıcıda-varlık-araması" tabindex="-1">5. On bir sağlayıcıda varlık araması <a class="header-anchor" href="#_5-on-bir-saglayıcıda-varlık-araması" aria-label="Permalink to &quot;5. On bir sağlayıcıda varlık araması&quot;"></a></h2>
<img src="/img/blog/engine-anatomy/cinevva-engine-asset-search.png" alt="Karanlık moddaki Cinevva varlık arama sayfası. Üstteki arama çubuğunda 'asteroid rock' sorgusu bulunuyor. Sağındaki sağlayıcı filtrelerinde Tümü, PolyHaven, Sketchfab, Kenney, Quaternius, AmbientCG, OpenGameArt, Freesound, Smithsonian, Synty ve Jamendo seçenekleri gösteriliyor; Sketchfab vurgulanmış. Aşağıda dört sütunlu bir asteroit modeli küçük resimleri ızgarası bulunuyor. Her kartta sağlayıcı rozeti, CC0 veya CC-BY lisans etiketi ve 'Oyunda kullan' düğmesi var. Sağ üst köşedeki küçük açıklamada 'ChatGPT: oyun geliştiricileri için en iyi ücretsiz varlık araçlarından biri' yazan bir sohbet balonu görünüyor." style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Belirli bir şeye ihtiyaç duyduğunuzda üretim harikadır. Bir şey zaten mevcutsa arama daha hızlıdır. <a href="/tr/assets.html">Varlık Kitaplığı</a>, on bir ücretsiz ve lisanslı sağlayıcıda birleşik arama yaparak sonuçları tek bir sıralanmış akışta sunar.</p>
<p>Sağlayıcı kayıt sistemi worker içinde yer alır ve her sorguyu PolyHaven, Sketchfab, Freesound, Kenney, AmbientCG, Quaternius, OpenGameArt, Smithsonian 3D koleksiyonu, TurboSquid, Synty ve Jamendo üzerinde paralel olarak çalıştırır. Her sağlayıcı ortak bir arayüz uygular (<code>search</code>, <code>getMetadata</code>, <code>isBrowsable</code>, <code>getSupportedTypes</code>), dolayısıyla yeni bir sağlayıcı eklemek için tek bir TypeScript dosyası yeterlidir. Birleştirme katmanı, sayfalandırmayı farklı şekillerde yapan sağlayıcılar arasında imleç tabanlı sayfalandırmayı yönetir, yinelenen lisansları kaldırır, varlık türlerini ortak bir sınıflandırmada (model, doku, ses, hdri, sprite) normalleştirir ve ajanın yeniden dağıtamayacağı bir şeyi seçmemesi için her varlığı lisansıyla etiketler.</p>
<p>ChatGPT geçen çeyrekte bu aracı oyun geliştiricileri için en iyi ücretsiz varlık buluculardan biri olarak önerdiğinde gidip tavsiyeyi okuduk. Önemli olan kısımda haklıydı. Mesele tek bir kitaplığın üzerinde arama çubuğumuzun olması değil. Mesele, &quot;taş duvar dokusu&quot; arayan bağımsız bir geliştiricinin tek sorguyla ve tutarlı lisans meta verileriyle PolyHaven ile AmbientCG sonuçlarını, Kenney'nin stilize sürümünü ve Smithsonian'ın fotogrametri seçeneğini yan yana görebilmesi. Ajan da aynı uç noktayı kullanabilir ve varlıkları bir insanla aynı şekilde seçebilir.</p>
<p>Motorun çoğu zaman yeterince önemsenmeyen kısmı budur. Çoğu oyun yapay zekâsı demosu her şeyi sıfırdan üretir ve sonuçta tek tip, parlak, hafif tekinsiz bir görünüm ortaya çıkar. Cinevva'daki ilginç oyunlar, üretilmiş varlıkları Smithsonian'dan gerçek CC0 fotogrametri içerikleri ve Quaternius'tan el yapımı düşük poligonlu bir ağaçla birleştiriyor. Orkestratör bunu tek bir konuşma sırasında yapabilir.</p>
<h2 id="_6-ajan-oyunu-oynar" tabindex="-1">6. Ajan oyunu oynar <a class="header-anchor" href="#_6-ajan-oyunu-oynar" aria-label="Permalink to &quot;6. Ajan oyunu oynar&quot;"></a></h2>
<img src="/img/blog/engine-anatomy/cinevva-engine-debug.png" alt="Canlı hata ayıklama görünümü. Solda, oyuncu gemisinin asteroitlerden kaçtığı, SKOR'un 4820 ve kalan can sayısının 2 olduğu çalışan bir neon uzay nişancı oyunu var. Sağda üst üste iki panel bulunuyor: JSON.stringify(getGameState()) çağrısını ve oyuncu konumu, hız, sağlık, skor, canlar ve asteroit sayısını içeren, döndürülmüş bir JSON nesnesini gösteren execute_js paneli ile asteroit oluşturma, güçlendirme alma, bir doku yükleme uyarısı ve 58 FPS değerini içeren en son günlük satırlarını gösteren read_console_logs paneli." style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Mühendislerin çoğunu gösterdiğimizde şaşırtan kısım bu. Ajan yalnızca dosyalara kod yazmaz. Oyunu korumalı bir iframe içinde çalıştırır, konsolunu okur, kullanıcı arayüzü ile 3D sahne için ayrı katmanlar hâlinde ekran görüntüleri alır ve durumu incelemek veya değiştirmek için canlı çalışma zamanı içinde JavaScript çalıştırır.
<code>read_console_logs</code>, iframe’deki son elli <code>console.log</code>, <code>console.warn</code>, <code>console.error</code> satırını ve yakalanmamış istisnaları döndürür. Her <code>game_ready</code> çağrısından sonra ajan, sistem istemi gereği <code>read_console_logs</code> çağırmalı ve oyunu kullanıcıya teslim etmeden önce tüm hataları düzeltmelidir. Bu tek kural, diğer araçlarda görülen “Yapay zekâ tamamlandığını söyledi ama ekran simsiyah” sorunlarının çoğunu ortadan kaldırır.</p>
<p><code>execute_js</code> ise daha güçlü olanıdır. Oyunun global kapsamında rastgele JavaScript çalıştırır. Her oyunun <code>getGameState</code> ve <code>setGameState</code> işlevlerini uygulaması gerektiğinden ajan, çalışan oyunun tüm durumunu okumak için <code>JSON.stringify(getGameState())</code> çalıştırabilir; ardından oyuncuyu ışınlamak için <code>setGameState({player: {x: 500, y: 100}})</code>, yenilmezlik vermek için <code>setGameState({lives: 99})</code> veya ileri atlamak için <code>setGameState({level: 3})</code> çağrısını kullanabilir. Ayrıca Three.js sahne grafiğini incelemek için <code>scene.children.map(c =&gt; c.type)</code> ya da oluşturucunun bağlandığını doğrulamak için <code>document.querySelectorAll('canvas').length</code> gibi komutlarla daha alt seviyelere de erişebilir.</p>
<p>Bunun neden önemli olduğunu görebilirsiniz. Bir kullanıcı “Oyuncu ikinci bölümde duvara takılıyor” dediğinde ajanın tahmin yürütmesi gerekmez. İkinci bölümü açar, <code>getGameState()</code> çalıştırır, çarpışma verilerini inceler, düzeltmeyi test etmek için bir <code>execute_js</code> yaması çalıştırır ve ancak bundan sonra düzeltmeyi diske yazar. Sizin hata ayıkladığınız gibi hata ayıklar. Iframe’i bir hedef değil, eş düzey bir bileşen olarak ele alıyoruz.</p>
<h2 id="_7-kutuphane-belgeleri-sıkıcı-gerceklik-kaynagı" tabindex="-1">7. Kütüphane belgeleri, sıkıcı gerçeklik kaynağı <a class="header-anchor" href="#_7-kutuphane-belgeleri-sıkıcı-gerceklik-kaynagı" aria-label="Permalink to &quot;7. Kütüphane belgeleri, sıkıcı gerçeklik kaynağı&quot;"></a></h2>
<p>Oyunların gerçekten kullandığı kütüphanelerin (Three.js, Tone.js, Cannon ve giderek daha fazlasının) resmî belgelerini yapılandırılmış, aranabilir bir JSON deposunda dizinliyoruz. Ajan, açık web’e yönelmeden önce <code>search_library_docs(&quot;threejs&quot;, &quot;Mesh&quot;)</code> komutuna başvurur. Bu daha hızlıdır, sürümlendirilmiştir ve iki alt sürüm önce yeniden adlandırılmış bir yöntemi asla uydurmaz.</p>
<p>Bu gösterişli bir şey değil. Ancak çalışan kod üreten bir yapay zekâ ile kırkıncı satırda çöken, ikna edici görünen kod üreten bir yapay zekâ arasındaki farkı yaratıyor. Cinevva ile geliştirilen oyunların görünür kalitesinin büyük bölümü bu tek karardan kaynaklanıyor.</p>
<h2 id="_8-oynanabilirlikten-kesfedilebilirlige-kısa-videolar-ve-magaza-vitrini" tabindex="-1">8. Oynanabilirlikten keşfedilebilirliğe: kısa videolar ve mağaza vitrini <a class="header-anchor" href="#_8-oynanabilirlikten-kesfedilebilirlige-kısa-videolar-ve-magaza-vitrini" aria-label="Permalink to &quot;8. Oynanabilirlikten keşfedilebilirliğe: kısa videolar ve mağaza vitrini&quot;"></a></h2>
<img src="/img/blog/engine-anatomy/cinevva-engine-reels.png" alt="Kısa oynanış videolarından oluşan bir mağaza vitrini. Ortada, telefon biçimli bir kartta çatışmanın ortasındaki neon bir uzay nişancı oyununun dikey videosu oynuyor; sağ tarafta sosyal arayüz simgeleri sıralanmış (14 bin beğenili bir kalp, 3,2 bin yorumlu bir sohbet balonu, 1,8 bin paylaşımlı bir paylaşım oku ve bir 'Şimdi Oyna' düğmesi). Alttaki kısa video etiketinde 'Asteroid Drift • @indiedev tarafından • 3,1 Mn görüntülenme' yazıyor. Solda, 'Üreticinin sohbetinden' başlıklı küçük bir sohbet kesitinde asistanın 'Oyun yayında. Kısa video mağaza vitrininizde otomatik olarak yayımlandı.' mesajı yer alıyor. Sağda, Mağaza Vitrini panelinde trend olan üç oyun listeleniyor: Asteroid Drift, Roadhawk Runner ve Birb Clicker; her birinin yanında görüntülenme sayısı ve 'Trend' rozeti bulunuyor." style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Kimsenin oynamadığı bir oyun, kişisel bir hobiden ibarettir. Bağımsız oyun geliştirmedeki çözülmemiş en zor sorun artık oyun yapmak değil, dağıtımdır. Bu yüzden motor “oynanabilir” noktada durmaz. “Oyuncuların önünde” olduğu noktada durur.</p>
<p>Cinevva’daki her proje, oyunun en son sürümünü beğeni ve paylaşım seçenekleri içeren küçük bir katmanla birlikte tam sayfa iframe’de açan <code>play.cinevva.com/{game-id}</code> gibi kalıcı bir paylaşım URL’sine sahiptir. Ajan <code>game_ready</code> çağrısı yaptığında yalnızca IDE içi önizlemeyi etkinleştirmez. Ayrıca 15 saniyelik bir oynanış videosunu <a href="/tr/play.html">Cinevva mağaza vitrininde</a> yayımlamayı önerir. Kısa video, oynanan oyunun doğrudan iframe’den yakalanmış gerçek bir kaydıdır (ajanın oyun çalışma zamanına enjekte ettiği küçük bir kayıt betiği sunuyoruz); dolayısıyla izleyicinin kaydırırken gördüğü şey bir pazarlama kurgusu değil, gerçek oynanıştır.</p>
<p>Bu, bir geliştiricinin içinde yaşadığı döngüyü değiştirir. Eski döngü; kodlama, derleme, paketleme, yükleme, bir Steam sayfası yazma, algoritmayla mücadele etme ve istek listesi sayacını izleme şeklindeydi. Yeni döngü ise bir cümle yazmak, ajanın geliştirmesini izlemek, yayımla düğmesine basmak ve oyununuzun diğer her şeyin yanında aynı kaydırmalı akışta belirmesini izlemektir. Keşif, üretimin gerçekleştiği ürünün içinde, aynı URL’de ve aynı oturumla gerçekleşir.</p>
<p>Geliştirici topluluğundaki okurlarımızın incelemesi gereken kısım burası. Dağıtım, oyun motorlarının hiçbir zaman birlikte sunmadığı rekabet hendeği olmuştur. Unity bir editör sunar, oyunu Steam’de siz yayımlarsınız. Unreal bir editör sunar, oyunu Epic Store’da siz yayımlarsınız. Cinevva her iki yarıyı da sunar. Motor ve mağaza vitrini, oyunu geliştiren aynı orkestratör üzerinden birbiriyle iletişim kurar.</p>
<h2 id="_9-en-iyi-performans-gosterenler-kesif-carkı" tabindex="-1">9. En İyi Performans Gösterenler: keşif çarkı <a class="header-anchor" href="#_9-en-iyi-performans-gosterenler-kesif-carkı" aria-label="Permalink to &quot;9. En İyi Performans Gösterenler: keşif çarkı&quot;"></a></h2>
<img src="/img/blog/engine-anatomy/cinevva-engine-charts.png" alt="Cinevva En İyi Performans Gösterenler tablosu. Üstte Trend, En Yeni ve En İyi yazan üç sekme bulunuyor; En İyi seçili. Altında öne çıkan üç oyundan oluşan bir podyum sırası yer alıyor: birinci sırada 42,1 bin oynanmayla The Breaker Belt, ikinci sırada 27,7 bin oynanmayla Roadhawk Runner ve üçüncü sırada 37,1 bin oynanmayla Asteroid Drift. Podyumun altında Pixel Platformer, Zombie Shooter, Fruit Ninja Clone, Tower Defense, Card Battler ve Zombie Builder’ın da aralarında bulunduğu altı küçük oyun kartından oluşan daha yoğun bir ızgara bulunuyor; her birinde küçük resimler, üretici kullanıcı adları ve oynanma sayıları yer alıyor." style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Kısa video akışı, çarkın bir yarısıdır. <a href="/tr/charts.html">En İyi Performans Gösterenler tablosu</a> ise diğer yarısıdır. Oyunları trend, en yeni ve tüm zamanların en iyileri olarak sıralar; ham tıklamalar yerine tamamlama oranını (oyuncu bir oturumu tamamladı mı?) ağırlıklandırır. Tamamlama oranını manipüle etmek, yükleme sayılarını manipüle etmekten daha zordur. Dikkati altmış saniye boyunca koruyan bir oyun, açılıp hemen kapatılan bir oyunu geride bırakır.</p>
<p>Her sinyal, orkestratörün bir sonraki turuna geri beslenir. Ajan “Bir güçlendirme ekleyelim” dediğinde sabit bir kalıp kütüphanesinden yararlanmıyor. Bu ay Cinevva’da hangi mekaniklerin oyuncuları gerçekten elde tuttuğunu gözlemlemiş bir modelden yararlanıyor. Çark, sayfanın altındaki bir tablodan ibaret değil. Tüm motorun eğitim sinyalidir.</p>
<p>Yatırımcılar için veri hendeğimiz budur. Yalnızca üretilmiş oyunlara sahip değiliz. Bu oyunları oluşturan istemlerle, ajanın yaptığı varlık seçimleriyle ve onları beğenen oyuncularla ilişkilendirilmiş, gerçek oturum düzeyinde etkileşim metriklerine sahip üretilmiş oyunlarımız var. Her döngü bir sonrakini daha da güçlendiriyor.</p>
<h2 id="_10-motor-bir-oyuna-donusuyor" tabindex="-1">10. Motor bir oyuna dönüşüyor <a class="header-anchor" href="#_10-motor-bir-oyuna-donusuyor" aria-label="Permalink to &quot;10. Motor bir oyuna dönüşüyor&quot;"></a></h2>
<p>Aylardır sosyal medyada ima ettiğim kısım burada. 1’den 9’a kadar olan bölümlerdeki her şey, oyun geliştiren bir sistemi anlatıyor. Siz görene kadar anlatılması daha zor olan şey ise sistemin kendisi bir mekâna dönüştüğünde yaşananlar.</p>
<p>Sunduğumuz tüm özelliklere rağmen oyun geliştirmek zor iştir. Daha önce hiç oyun yapmadıysanız bir anda hikâyeden, karakterlerden, dünyadan, mekaniklerden, kimin neyi ne zaman yaptığından, ışığın nasıl davrandığından, özel efektlerin nasıl katmanlandığından, müzikten, ses efektlerinden ve kamera hareketlerinden sorumlu hâle gelirsiniz. Bu çok fazla şeydir. Üstelik tüm bunların yanında sonucun, başka birinin aracının çıkardığı bir şablon gibi değil, size aitmiş gibi hissettirmesini istersiniz. İstem ve orkestratör, mekanik işlerin çoğunu sizin için yapar. Tek başlarına yapamayacakları şey, tamamlanmış eseriniz için diğer insanların izlediği bir sahne sunmaktır.</p>
<p>Biz de sahneyi kurduk. Bu yılın büyük bölümünde <a href="/tr/about.html">Oleg</a> ve motor ekibi, açık bir dünyayı tarayıcıya taşımayı anlatan <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">14 bölümlük bir seride</a> çalışmalarını yayımladı. Gerçek zamanlı şekillendirebildiğiniz yontulmuş araziler. Eğim ve rakıma göre kendini kaya ya da çim olarak boyayan biyomlar. Hesaplamayla üretilmiş arazinin üzerinde rüzgârda eğilen 80.000 çim sapı. Aynı adımda hem yükseklik haritası hem de hacimsel arazi üzerinde yürüyen, koşan, zıplayan ve süzülen bir karakter. Bunların hiçbiri sırf teknoloji demosu olsun diye yapılmadı. Hepsi bunun altyapısını oluşturuyordu.</p>
<p>Bugün açık dünya erken sürümüyle yayında. Bir avatar seçip içeri giriyorsunuz. Yayımlanmış oyunlarınız, tıpkı <a href="/tr/play.html">mağaza vitrini kısa videolarının</a> ve <a href="/tr/charts.html">En İyi Performans Gösterenler tablosunun</a> onları şimdi gösterdiği gibi, etrafınızda ziyaret edilebilir alanlar olarak beliriyor; ancak bu kez kaydırarak değil, yürüyerek ulaşıyorsunuz. Dünyadan ayrılmadan, o dünya üzerinden bir yabancının oyununa girebilirsiniz. Az önce oynadığınız şeyi yapan kişinin yanında durup ona sırada ne ekleyeceğinizi söyleyebilirsiniz. Yeni tanıştığınız biriyle bir arazi parçasını şekillendirip onu yeni bir projenin tohumuna dönüştürebilirsiniz. Keşif artık bir akış olmaktan çıkar. Bir yürüyüşe dönüşür.</p>
<p>Motorumuz teknik anlamda her zaman bir oyun motoruydu. Bugün gerçek anlamda da bir oyuna dönüşüyor. Oyununuzu geliştiren şey artık başlı başına bir oyun ve 3. bölümdeki aynı orkestratör, 4. bölümdeki aynı varlık rayları, 6. bölümdeki aynı <code>getGameState</code> sözleşmesi, 8. bölümdeki aynı kısa videolar ve 9. bölümdeki aynı tablo, oyuncularınızın içinde dolaştığı tek bir yerde birleşiyor. Üretmek ile oynamak arasındaki sınır her zaman yapaydı. Artık ortadan kalktı.</p>
<h2 id="neleri-dogru-yaptıgımızı-dusunuyoruz" tabindex="-1">Neleri doğru yaptığımızı düşünüyoruz <a class="header-anchor" href="#neleri-dogru-yaptıgımızı-dusunuyoruz" aria-label="Permalink to &quot;Neleri doğru yaptığımızı düşünüyoruz&quot;"></a></h2>
<p>Doğru yaptığımız ilk şey, istemi bir ürün yerine bir kullanıcı arayüzü olanağı olarak ele almaktı. Ürün; orkestratör, araç yüzeyi, varlık rayları ve mağaza vitrinidir. İstem ise kullanıcıyı sisteme dâhil etmenin mümkün olan en düşük maliyetli yoludur.</p>
<p>İkincisi, derleme adımı olmayan düz, tarayıcıya özgü bir dosya sisteminde ısrar etmekti. Bir Cinevva oyununun tek bir doğruluk kaynağından mobil cihazlara, masaüstüne, Steam’e ve Discord’a sunulabilmesinin nedeni budur. Ajanın yazdıklarını okuyabilmesinin nedeni de budur.</p>
<p>Üçüncüsü, üretilen her oyunun <code>getGameState</code> ve <code>setGameState</code> işlevlerini uygulamasını gerektiren sözleşmeydi. Sistem istemindeki bu tek satır, ajanın bir kod üreticisi yerine bir iş arkadaşı gibi hissettirmesini sağlar. Ajan oynayabilir ve oynayabilen bir sistem hata ayıklayabilir.</p>
<p>Dördüncüsü, mağaza vitrinini motorla aynı döngüye bağlamaktı. Salt model kalitesiyle kazanmayacağız. Açık ağırlıklı bir üreticiden iki ay ileride olmanın savunulabilir bir avantajı yok. Oyununuzu geliştiren aynı ajan onu yayımladığında, ölçtüğünde ve yabancıların onu nasıl oynadığından öğrendiğinde kazanırız.</p>
<p>Tüm makineyi çalışırken görmek istiyorsanız ana sayfadaki istem hâlâ giriş kapısıdır. Bir cümle yazın. Arkasında neler olduğunu izleyin. Sonra buraya dönüp motorun hangi parçasını sıradaki yazıda ele almamız gerektiğini bize söyleyin.</p>
]]></content:encoded>
            <enclosure url="https://app.cinevva.com/img/blog/engine-anatomy/cinevva-engine-prompt.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya oluşturmak, bölüm 16: Büyümeye devam eden bir dünya için yapı]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-04-28-open-world-browser-part-16-structure-and-authoring</link>
            <guid>https://app.cinevva.com/tr/blog/2026-04-28-open-world-browser-part-16-structure-and-authoring</guid>
            <pubDate>Tue, 28 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spike 33, 6.285 satırlık bir monoliti modüllere ayırdı ve gizli üç başlatma sırası hatasını ortaya çıkardı. Spike 34 ise bu yapıyı kullanarak hiçbir şeyi şişirmeden yerleştirilebilir 100'den fazla nesne ekledi.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-olusturmak-bolum-16-buyumeye-devam-eden-bir-dunya-icin-yapı" tabindex="-1">Tarayıcıda açık dünya oluşturmak, bölüm 16: Büyümeye devam eden bir dünya için yapı <a class="header-anchor" href="#tarayıcıda-acık-dunya-olusturmak-bolum-16-buyumeye-devam-eden-bir-dunya-icin-yapı" aria-label="Permalink to &quot;Tarayıcıda açık dünya oluşturmak, bölüm 16: Büyümeye devam eden bir dünya için yapı&quot;"></a></h1>
<p><em>Yazan: <a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p><a href="/tr/blog/2026-04-13-open-world-browser-part-13-terrain-sculpting.html">Bölüm 13'ten</a> bu yana her spike aynı tarifi izliyordu: önceki monoliti kopyala, bir özellik ekle. <a href="/tr/blog/2026-04-13-open-world-browser-part-15-multiplayer-and-water.html">Spike 32'nin</a> sonunda bu monolit, tek bir <code>&lt;script type=&quot;module&quot;&gt;</code> içindeki 6.285 satırlık bir <code>index.html</code> dosyasına dönüşmüştü. Kod aramaları gereksiz sonuçlarla doluydu, bir özelliği nereye ekleyeceğimizi bulmak onu yazmaktan daha uzun sürüyordu ve herhangi bir mimari değişiklik, farklarını zihinde takip edemeyeceğiniz kadar büyük bir dosyaya dokunuyordu. Yeni bir özellik daha eklemeden önce yapısal borcu kapattık.</p>
<h2 id="davranısı-hic-degistirmeden-monoliti-parcalamak" tabindex="-1">Davranışı hiç değiştirmeden monoliti parçalamak <a class="header-anchor" href="#davranısı-hic-degistirmeden-monoliti-parcalamak" aria-label="Permalink to &quot;Davranışı hiç değiştirmeden monoliti parçalamak&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/33-code-structure/" title="Spike 33 Kod Yapısı Yeniden Düzenlemesi" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/33-code-structure/" target="_blank">Spike 33'ü yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=33-code-structure">Kaynak kodu görüntüle</a></p>
<p>Kısıt katıydı: her ayırma işlemi yeniden tasarım değil, yalnızca davranışı değiştirmeyen bir yeniden düzenleme olmalıydı. Monolit, 19 <code>.mjs</code> dosyasına ve 151 satırlık bir ana kabuğa dönüştü. Sahne, su, çim, karakter, fizik, çok oyunculu sistem ve kullanıcı arayüzü için üst düzey modüller; GPU tarafındaki tüm doğruların tek kaynağı olarak her WGSL kaynak dizesini barındıran bir <code>wgsl.mjs</code>; ayrıca yükseklik haritası, SDF, parçalar, GPU tampon sarmalayıcıları, fırça, LOD ve kalıcılık için bir <code>terrain/</code> alt ağacı oluşturduk. Toplam kod 6.555 satır oldu; yani temelde monolite içe aktarma için gereken standart kodların eklenmiş hâliydi. Hacim neredeyse hiç değişmedi, ancak kod içinde gezinmek çok daha kolaylaştı.</p>
<p>Ardından sayfa siyah ekranla açıldı. İki hata mesajı ve birbiriyle ilgisiz iki temel neden vardı. İlki, sıfır baytlık bir tampon bağlamasıyla ilgili WebGPU şikâyetiydi. Monolitte SDF fırça tamponu, ilk marching cubes parçası göründüğünde tembel biçimde ayrılıyordu; bağlama grubu fabrikası ise tesadüfen daha sonra, tampon oluşturulduktan sonra çalışıyordu. <code>terrain/gpu.mjs</code> dosyasını <code>terrain/brush.mjs</code> dosyasından ayırmak modül değerlendirme sırasını değiştirdi. Böylece fabrika artık önce çalışıyor ve bir <code>null</code> yer tutucuyu bağlamaya çalışıyordu. Çözüm, bağlama grubu oluşturmayı ilk dispatch işlemine kadar erteleyen bir <code>getOrCreateBindGroup(chunk)</code> yardımcısı kullanmaktı. &quot;Her şeyi baştan oluştur&quot; kalıbı, monolitin tek başlatma yolundan kalma bir kalıntıydı.</p>
<p>İkinci mesaj, korkutucu görünen bir FBX iskelet uyarısıydı ama bunun yanlış iz olduğu ortaya çıktı. Spike 25'ten beri yazdırılıyordu ve zararsızdı. Karakterin kayıp olmasının tek nedeni ilk hatanın zincirleme etkisiydi: her compute dispatch hata veriyor, yükseklik haritasına hiçbir zaman yazılmıyor, yükseklik örnekleri 0 döndürüyor ve karakter başlangıç noktasında doğup dünyanın içinden aşağı düşüyordu. Tamponu düzeltince karakter, uyarıya rağmen sorunsuz biçimde canlandı.</p>
<p>Yeniden düzenlemenin asıl dersi buydu. Monolit, tüm &quot;Y oluşturulmadan önce X mevcut olmalı&quot; ilişkilerini betiğin yukarıdan aşağıya çalışma sırasının içine gizliyordu. Modülerleştirme bu sırayı değiştirdi ve bekleyen üç sıralama hatasını daha açığa çıkardı: yükseklik haritası yüklenmeden önce çimlerin dağıtılması, ortam haritasının kod çözme işlemi bitmeden önce su düzleminin eklenmesi ve kalıcılık yüklemesinin ilk kareden sonra tamamlanması. Üçünün de çözümü tek satırdı ve ayırma işlemi olmasaydı hiçbiri yakalanmayacaktı.</p>
<h2 id="hicbir-seyi-buyutmeden-yuz-nesne-eklemek" tabindex="-1">Hiçbir şeyi büyütmeden yüz nesne eklemek <a class="header-anchor" href="#hicbir-seyi-buyutmeden-yuz-nesne-eklemek" aria-label="Permalink to &quot;Hiçbir şeyi büyütmeden yüz nesne eklemek&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/34-world-authoring/" title="Spike 34 Dünya Oluşturma Araçları" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/34-world-authoring/" target="_blank">Spike 34'ü yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=34-world-authoring">Kaynak kodu görüntüle</a></p>
<p>Spike 34, bu yapının işe yarayıp yaramadığını sınayan testti. Amaç, kontrollerden ayrılmadan bir CC0 model paketindeki ağaçları, kayaları, çalıları, mantarları ve yolları yerleştirmek için birinci şahıs bir palet oluşturmaktı. Buna araziye duyarlı hizalama, kalıcılık, çok oyunculu eşitleme ve fizik çarpıştırıcıları da dâhildi. Yeni kodun her satırı <code>src/props/</code> altındaki beş yeni dosyaya yerleşti ve mevcut modüllerin hiçbiri on satırdan fazla bağlantı koduyla büyümedi.</p>
<p>Varlık süreci, kayda değer bir sapma yaşadı; çünkü bu, bir günü kolayca tüketebilecek türden bir meseleydi. İşe, gömülü dokular içermeyen bir FBX kütüphanesi olan Quaternius Ultimate Nature paketiyle başladık. FBX malzemeleri, haritasız <code>MeshPhong</code> olarak geliyordu. Bu nedenle malzeme adlarını PNG'lerle eşleştiren manuel bir tablo kurduk, Phong'u Standard'a dönüştürdük ve renk uzaylarını elle ayarladık. Malzemelerin yaklaşık %30'unun eşleşen PNG'si yoktu ve benzer ağaçlar arasında bazı adlar belirsizdi. İkinci bir FBX paketinde de aynı eksik vardı. Çözüm daha fazla eşleme tablosu değil, daha iyi hazırlanmış bir paketti: Quaternius Stylized Nature MegaKit, gömülü PBR malzemeleri ve fırınlanmış normalleri olan 116 eksiksiz glTF ile geliyor. <code>FBXLoader</code> yerine <code>GLTFLoader</code> kullanmak; santimetreden metreye ölçeklemeyi, doku tablosunu ve Phong dönüşümünü ortadan kaldırdı, ayrıca <code>library.mjs</code> dosyasını yaklaşık 80 satır küçülttü. Çıkarım şu: glTF sunan CC0 paketler için PBR destekli glTF doğru işlem hattıdır; manuel doku eşlemeli FBX ise yarı kalite için iki kat kod gerektiriyordu.</p>
<p>glTF yolu da birkaç keskin köşeyle geldi. Palet 116 küçük resim oluşturuyor ve WebGPU'nun <code>canvas.toDataURL()</code> işlevi, <code>GPUCanvasContext</code> yüzeyi için boş sonuç döndürüyor. Bu nedenle küçük resimler bir <code>RenderTarget</code> içine işleniyor, <code>readRenderTargetPixelsAsync</code> ile geri okunuyor ve WebGPU'nun 256 baytlık satır hizalaması dikkate alınarak 2B bir tuvale kopyalanıyor. Hayalet önizlemeler, her malzemeyi yeşile boyamak için klonluyor; ancak <code>material</code> değeri bir dizi olan mesh'lerde bu bozuluyordu. Sorunu bir <code>Array.isArray</code> dalıyla çözdük. Ayrıca yaklaşık 200 MB boyutunda gelen 16 bit normal haritaları, tek seferlik bir <code>mogrify -depth 8</code> işlemiyle yaklaşık 32 MB'a indirildi. Tarayıcılar yükleme sırasında zaten alt örnekleme yaptığı için görsel sonuç tamamen aynıydı.</p>
<h2 id="islenen-geometri-yalnızca-gpu-da-mevcut-oldugunda" tabindex="-1">İşlenen geometri yalnızca GPU'da mevcut olduğunda <a class="header-anchor" href="#islenen-geometri-yalnızca-gpu-da-mevcut-oldugunda" aria-label="Permalink to &quot;İşlenen geometri yalnızca GPU'da mevcut olduğunda&quot;"></a></h2>
<p>En öğretici hata, imleç hareket ederken hayalet önizlemenin 1 ila 2 metrelik adımlarla sıçramasıydı. Arazi mesh'leri, compute işlem hattı konumları doğrudan GPU'ya yazdığı için köşe konumlarını bir <code>StorageBufferAttribute</code> içinde saklıyor. Bu nedenle three.js'in CPU tarafındaki <code>Raycaster</code> bileşeni bunları göremiyor ve hiçbir sonuç döndürmüyor. Yedek yöntem, analitik yükseklik haritasına karşı 1,5 metrelik kaba bir ışın yürüyüşüydü ve kullanıcının gördüğü ızgarayı bu sabit adım oluşturuyordu. Bunu uyarlanabilir bir yürüyüşle değiştirdik: yüzeyin çok üzerindeyken 2,5 m adım, yüzeye 5 m kala 0,4 m adım ve <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.869ex;" xmlns="http://www.w3.org/2000/svg" width="16.358ex" height="2.566ex" role="img" focusable="false" viewBox="0 -750 7230.4 1134.3" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(389,0)"><g data-mml-node="mtext"><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(392,0)" style="stroke-width: 3;"/><path data-c="79" d="M69 -66Q91 -66 104 -80T118 -116Q118 -134 109 -145T91 -160Q84 -163 97 -166Q104 -168 111 -168Q131 -168 148 -159T175 -138T197 -106T213 -75T225 -43L242 0L170 183Q150 233 125 297Q101 358 96 368T80 381Q79 382 78 382Q66 385 34 385H19V431H26L46 430Q65 430 88 429T122 428Q129 428 142 428T171 429T200 430T224 430L233 431H241V385H232Q183 385 185 366L286 112Q286 113 332 227L376 341V350Q376 365 366 373T348 383T334 385H331V431H337H344Q351 431 361 431T382 430T405 429T422 429Q477 429 503 431H508V385H497Q441 380 422 345Q420 343 378 235T289 9T227 -131Q180 -204 113 -204Q69 -204 44 -177T19 -116Q19 -89 35 -78T69 -66Z" transform="translate(892,0)" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1453,-239.4) scale(0.707)"><path data-c="1D466" d="M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(2460.7,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(3460.9,0)"><g data-mml-node="mtext"><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(389,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(833,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(1225,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(1617,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(2117,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(2395,0)" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(2984,-150) scale(0.707)"><path data-c="1D466" d="M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(6841.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo stretchy="false">(</mo><msub><mtext>ray</mtext><mi>y</mi></msub><mo>−</mo><msub><mtext>terrain</mtext><mi>y</mi></msub><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container> işareti değiştiğinde 14 kez ikiye bölme. Bu yöntem, ışın başına yaklaşık 30 geniş adım ve 14 ikiye bölme ile milimetrenin altında hassasiyet sağlıyor. İşlenen geometri yalnızca GPU'da yaşıyorsa raycaster ile mücadele etmeyin; analitik kaynağa karşı yürüyün.</p>
<h2 id="duzenlemeler-boyunca-dogrulugunu-koruyan-carpıstırıcılar" tabindex="-1">Düzenlemeler boyunca doğruluğunu koruyan çarpıştırıcılar <a class="header-anchor" href="#duzenlemeler-boyunca-dogrulugunu-koruyan-carpıstırıcılar" aria-label="Permalink to &quot;Düzenlemeler boyunca doğruluğunu koruyan çarpıştırıcılar&quot;"></a></h2>
<p>Dışbükey gövdeler veya mesh çarpıştırıcıları yerine ilkel şekil vekillerini seçtik. Quaternius nesneleri belirgin içbükeylikleri olmayan, yuvarlak hatlı ve düşük poligonlu modeller. Bu nedenle gövdeler aynı oynanış için yaklaşık 50 kat fazla kod ve çalışma zamanında 10 kat fazla maliyet getirirdi. Her nesne, sınırlayıcı kutusundan türetilen tek bir şekle indirgeniyor: ağaçlar ve kaktüsler dikey kapsüle, kayalar küreye, kütükler uzun eksen boyunca yatay kapsüle dönüşüyor; dekoratif çalılar ve çiçekler ise hiçbir çarpıştırıcı almıyor. Kayaların ve kütüklerin üzerinde yürünebiliyor; üzerlerinde durabilmeniz için yalnızca dikey itme uygulanıyor. Ağaçlar ve kaktüsler ise engelleyici; gövdeye tırmanamamanız için tam 3B itme uygulanıyor. 8 metrelik bir uzamsal karma, kare başına testi oyuncunun 3×3'lük komşuluğuyla sınırlıyor; burada genellikle sıfır ila altı nesne bulunuyor.</p>
<p>İki tasarım kararı sistemin tutarlı kalmasını sağladı. Arazi hizalaması, kod içine sabitlenmiş bir kategori enum'u değil, manifest içindeki bir bayraktır. Böylece hayalet önizleme ile kesinleştirilmiş yerleşim aynı <code>placement.alignToTerrain</code> değerini okur ve birbiriyle çelişemez. Ayrıca yerleştirilen nesneler, arazi düzenlemelerine tek bir yardımcı üzerinden tepki verir: bir fırça darbesinden sonra —ister yerel olsun ister eşten yeniden oynatılsın— <code>refreshPlacementsInRadius</code>, etkilenen disk içindeki her nesnenin altındaki zemini yeniden örnekler, hizalamayı yeniden uygular ve çarpıştırıcı uç noktalarını yeniden türetir. Bir ağacın altında tepe şekillendirdiğinizde ağaç da onunla birlikte yükselir. Kalıcılık ve çok oyunculu sistem, spike 31'in kalıbını aynen yeniden kullanıyor; düz bir <code>{uid, propId, x, y, z, rotY, scale}</code> listesi saklıyor ve yerleştirme, kaldırma ve küçük hareket olaylarını BroadcastChannel üzerinden yansıtıyor.</p>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>WebGPU altında ES modülü ayrıştırması.</strong> Monolitik bir <code>&lt;script type=&quot;module&quot;&gt;</code> yapısını yalın yollu <code>.mjs</code> içe aktarmalarına bölmek, modüller statik varlıklar olarak sunulduğunda paketleyici gerektirmez; ayrıca three.js TSL modül sınırları arasında sorunsuz çalışır. Gizli maliyet, başlatma sırasıdır: monolit, &quot;Y'den önce X'i oluştur&quot; kuralını betiğin yukarıdan aşağıya sırasına kodlar. Modüller ise içe aktarma sırasına göre değerlendirilir ve bu, tamponu henüz mevcut değilken bir GPU bağlama grubu fabrikasını çalıştırabilir. Çözüm kalıbı, tembel başlatma (ilk kullanımda <code>getOrCreate...</code>) ve bildirim sırasına güvenmek yerine doğru promise'i beklemektir.</p>
<p><strong>Gömülü PBR destekli glTF ile manuel eşlemeli FBX karşılaştırması.</strong> glTF metre cinsinden gelir, kendi dokularına başvurur ve doğrudan <code>MeshStandardMaterial</code> sağlar. Böylece glTF olarak hazırlanmış bir CC0 paketi doğrudan PBR işlem hattına girer. Doku bağlama meta verileri olmayan FBX paketleri, her paket güncellemesinde güncelliğini yitiren ve elle sürdürülen bir malzeme-adı-PNG tablosunun yanı sıra Phong'dan Standard'a dönüşüm ve manuel renk uzayı etiketleme gerektirir. Bitki örtüsü için kullanılan bir güvenlik ağı, <code>alphaTest</code> içermeyen <code>transparent</code> malzemeleri <code>alphaTest: 0.5</code> kesme kartlarına yükseltir; böylece opak geometrinin arkasında doğru sıralanırlar.</p>
<p><strong>WebGPU ekran dışı küçük resimleri.</strong> <code>canvas.toDataURL()</code>, <code>GPUCanvasContext</code> destekli bir tuval için boş sonuç döndürür; çünkü sunum yüzeyinden 2B bağlama geri dönen bir yol yoktur. WebGPU'nun 256 bayta hizalanmış geri okuma adımlarına uyulduğu sürece bir <code>RenderTarget</code> içine işlemek, pikselleri <code>readRenderTargetPixelsAsync</code> ile okumak ve 2B tuvale kopyalamak işe yarar. Sonuçlar, paket değişikliklerinin eski işlemeleri geçersiz kılabilmesi için sürümü artırılmış bir anahtar altında <code>localStorage</code> içinde önbelleğe alınır.</p>
<p><strong>Analitik yükseklik haritasına karşı uyarlanabilir ışın yürüyüşü.</strong> Arazi köşeleri GPU'daki bir <code>StorageBufferAttribute</code> içinde yaşadığında CPU ışın izleyicisi bunları göremez. Analitik yükseklik işlevinde yüzeyden uzaktayken büyük, yüzeye yakınken küçük adımlarla yürümek ve <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.869ex;" xmlns="http://www.w3.org/2000/svg" width="16.358ex" height="2.566ex" role="img" focusable="false" viewBox="0 -750 7230.4 1134.3" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(389,0)"><g data-mml-node="mtext"><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(392,0)" style="stroke-width: 3;"/><path data-c="79" d="M69 -66Q91 -66 104 -80T118 -116Q118 -134 109 -145T91 -160Q84 -163 97 -166Q104 -168 111 -168Q131 -168 148 -159T175 -138T197 -106T213 -75T225 -43L242 0L170 183Q150 233 125 297Q101 358 96 368T80 381Q79 382 78 382Q66 385 34 385H19V431H26L46 430Q65 430 88 429T122 428Q129 428 142 428T171 429T200 430T224 430L233 431H241V385H232Q183 385 185 366L286 112Q286 113 332 227L376 341V350Q376 365 366 373T348 383T334 385H331V431H337H344Q351 431 361 431T382 430T405 429T422 429Q477 429 503 431H508V385H497Q441 380 422 345Q420 343 378 235T289 9T227 -131Q180 -204 113 -204Q69 -204 44 -177T19 -116Q19 -89 35 -78T69 -66Z" transform="translate(892,0)" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1453,-239.4) scale(0.707)"><path data-c="1D466" d="M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(2460.7,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(3460.9,0)"><g data-mml-node="mtext"><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(389,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(833,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(1225,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(1617,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(2117,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(2395,0)" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(2984,-150) scale(0.707)"><path data-c="1D466" d="M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(6841.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo stretchy="false">(</mo><msub><mtext>ray</mtext><mi>y</mi></msub><mo>−</mo><msub><mtext>terrain</mtext><mi>y</mi></msub><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container> işaret değiştirdiğinde ikili aramayla inceltme yapmak, sınırlı sayıda örnekle milimetrenin altında imleç hassasiyeti sağlar. Aynı ilkel yöntem hem fırça imlecini hem de nesne hayaletini çalıştırır.</p>
<p><strong>Uzamsal karma kullanan ilkel kapsül çarpıştırıcıları.</strong> Her nesne, sınırlayıcı kutusundan kategoriye göre türetilen bir kapsüle veya küreye indirgenir, <code>{kind, walkable, radius, p1, p2}</code> olarak kaydedilir ve kesiştiği her 8 metrelik karma bölmesine eklenir. Oyuncu, kare başına yalnızca 3×3'lük bölme komşuluğundaki nesneleri test eder ve her biri için tek bir kapsüle karşı kapsül çözümlemesi uygulanır. Üzerinde yürünebilen vekiller (kayalar, kütükler) yalnızca dikey itme, engelleyici vekiller (ağaçlar) ise tam 3B itme alır. Bunun temel aldığı kapsül matematiği için <a href="/tr/guides/landscape-generation-browser.html#physics-on-sdf-terrain">SDF arazi çarpışmalarına</a> bakın.</p>
<hr>
<p>29 bölümün 16.'sı.
Önceki: <a href="/tr/blog/2026-04-13-open-world-browser-part-15-multiplayer-and-water.html">Bölüm 15 - Temeli değiştir, ardından eşitle</a>
Sonraki: <a href="/tr/blog/2026-05-01-open-world-browser-part-17-animations-and-search.html">Bölüm 17 - Yeniden hedefleme gerektirmeyen animasyonlar ve canlı varlık araması</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[2022'de oyun dünyası hakkında ortaya attığım dört iddia. Bugün ne durumdalar?]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-04-24-2022-predictions-aging-well</link>
            <guid>https://app.cinevva.com/tr/blog/2026-04-24-2022-predictions-aging-well</guid>
            <pubDate>Fri, 24 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[2022'deki bir röportajda WebGL oyun motorları, diyaloglar için GPT-3, gerçek zamanlı yaratıcı iş birliği ve bağımsız geliştiricilerin yükselişinden söz etmiştim. Dört yıl sonra her birinin vardığı nokta burada.]]></description>
            <content:encoded><![CDATA[<h1 id="_2022-de-oyun-dunyası-hakkında-ortaya-attıgım-dort-iddia-bugun-ne-durumdalar" tabindex="-1">2022'de oyun dünyası hakkında ortaya attığım dört iddia. Bugün ne durumdalar? <a class="header-anchor" href="#_2022-de-oyun-dunyası-hakkında-ortaya-attıgım-dort-iddia-bugun-ne-durumdalar" aria-label="Permalink to &quot;2022'de oyun dünyası hakkında ortaya attığım dört iddia. Bugün ne durumdalar?&quot;"></a></h1>
<p><em><a href="/tr/about.html">Mariana Muntean</a>, Cinevva CEO'su</em></p>
<img src="/img/blog/tech-done-different.jpg" alt="Tech Done Different podcast röportajı, Mayıs 2022" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Mayıs 2022'de Ted Harrington'ın <em>Tech Done Different</em> podcast'i için bir röportaj verdim. Röportajın orijinal yazısı <a href="https://medium.com/@vio-202020/interview-with-tech-done-different-3b9bf74d99c2" target="_blank" rel="noreferrer">hâlâ Medium'da yayında</a>. O sırada Cinevva'yı yaklaşık iki yıldır yönetiyordum. Beş kişilik bir ekibimiz, topladığımız 200 bin dolar, duvarda asılı bir Mozilla Builders ödülü ve oyun geliştirmenin nereye gittiğine dair pek çok fikrimiz vardı.</p>
<p>Bu fikirlerin çoğu 2022'de pek revaçta değildi. Web3 çok ses getiriyor, gündemi AAA stüdyolar belirliyor, GPT-3 bir araştırma oyuncağı olarak görülüyor, WebGL ise hobi amaçlı game jam oyunları yapmak için kullanılıyordu. “Her yaratıcı kişi bir oyun geliştiricisi olacak” dediğinizde nazikçe başlarını sallıyor ama tek kuruşluk çek yazmıyorlardı.</p>
<p>Geçen hafta o röportaja dönüp yeniden baktım. Söylediklerimin bazıları hüsnükuruntu gibi geliyor. Bazılarıysa sanki bir zaman makinem varmış gibi. İşte zamana en iyi direnen dört iddia ve her birinin yanında 2026'daki gerçek durum.</p>
<h2 id="_1-iddia-oyun-motorlarının-yeri-tarayıcıdır" tabindex="-1">1. iddia: Oyun motorlarının yeri tarayıcıdır <a class="header-anchor" href="#_1-iddia-oyun-motorlarının-yeri-tarayıcıdır" aria-label="Permalink to &quot;1. iddia: Oyun motorlarının yeri tarayıcıdır&quot;"></a></h2>
<p>2022'de şöyle demiştim:</p>
<blockquote>
<p>WebGL teknolojisi, yalnızca PC'lerle sınırlı olabilen diğer API'lerin aksine mobil cihazlar da dâhil olmak üzere birden fazla platformda kullanılabilir. Böylece ister evinizin konforunda ister hareket hâlinde olun, üretmeye ve yayımlamaya devam edebilirsiniz. WebGL oyunları, geleneksel bir PC oyununun ihtiyaç duyduğu CPU ve GPU gücünün yalnızca küçük bir bölümünü kullanır.</p>
</blockquote>
<p>Bu, 2022'de genel kabule ters düşen bir iddiaydı. Büyük oyun motorlarının tümü indirme, kurulum ve yama döngülerini temel alıyordu. Tarayıcı oyunları dendiğinde akla Flash nostaljisi ve Friv geliyordu.</p>
<p>2026'da <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">açık dünya motorumuz bir tarayıcı sekmesinde 120 FPS ile çalışıyor</a>. Arazi, ağaçlar, fizik ve çok oyunculu senkronizasyonun tamamı tek bir URL'de. İndirme yok, uygulama mağazası yok, kurulum yok.</p>
<img src="/img/blog/open-world-browser-120fps.png" alt="Arazi, ağaçlar, fizik ve oyuncu kapsülü tek bir sekmede işlenirken Cinevva açık dünyasının bir tarayıcı sekmesinde 120 FPS ile çalışması" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Üç gelişme aynı anda gerçekleştiği için tarayıcı aradaki farkı kapattı. WebGPU tüm büyük tarayıcılarda kullanıma sunuldu. SharedArrayBuffer ve kaynaklar arası yalıtım güvenilir hâle geldi. WebAssembly, Rust'tan derlenen gerçek fizik motorlarını çalıştırabilecek kadar hızlandı. Ekibimiz, bu adımların her birinin gerçekte nelere mal olduğunu anlatan <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">12 bölümlük bir saha günlüğü yayımladı</a>. Özetle tarayıcı artık gerçek oyunun demosunu koyduğunuz bir yer değil, başlı başına gerçek bir oyun çalışma ortamı.</p>
<p>Bu iddianın içinde gözden kaçırdığım nokta şuydu: İşin ne kadar büyük bir bölümünün mühendislik kültürü tarafında yapılması gerekeceğini hafife aldım. Tarayıcı tabanlı oyun motorlarını artık tarayıcılar sınırlamıyor. Onları sınırlayan şey, gerçek bir oyunun başlatıcıya sahip olması gerektiği varsayımı.</p>
<h2 id="_2-iddia-yapay-zeka-bir-yan-ozellik-degil-uretim-surecinin-parcasıdır" tabindex="-1">2. iddia: Yapay zekâ bir yan özellik değil, üretim sürecinin parçasıdır <a class="header-anchor" href="#_2-iddia-yapay-zeka-bir-yan-ozellik-degil-uretim-surecinin-parcasıdır" aria-label="Permalink to &quot;2. iddia: Yapay zekâ bir yan özellik değil, üretim sürecinin parçasıdır&quot;"></a></h2>
<p>2022'de şöyle demiştim:</p>
<blockquote>
<p>Platformumuzun kusursuz çalışması için açık kaynaklı oyun araçlarından yararlanıyor, ayrıca Doğal Dil İşleme, Bilgisayarlı Görü ve diyaloglar için GPT3, metinden görsel üretimi için DALL:E gibi Open AI çözümlerini kullanarak kendi teknolojimizi geliştiriyoruz.</p>
</blockquote>
<p>Mayıs 2022'de GPT-3, çoğu insanın hiç kullanmadığı ücretli bir API'ydi. DALL·E henüz bir yaşını biraz geçmişti ve bekleme listesiyle erişilebiliyordu. Bunları üretimde kullanılan oyun geliştirme araçları hâline getireceğimizi söylemek, en iyi ihtimalle iddialı bir rol yapma gösterisiydi.</p>
<p>2026'da bizimki de dâhil olmak üzere her ciddi yaratıcı üretim sürecinde dil modelleri ve görsel üretimi yer alıyor. Bugün Cinevva'nın içinde müzikler için ElevenLabs Music, efektler için ElevenLabs SFX, varlıklar için Hunyuan3D ve SAM3D, görseller için Flux, uyarlanabilir sesler için Mubert, enstrümantasyon için AceStep kullanılıyor. İstemler giriliyor, kullanılabilir varlıklar çıkıyor ve tüm bunlar editörün içinde gerçekleşiyor.</p>
<img src="/img/blog/prompting-3d-games.png" alt="Cinevva editöründe istemlerle yönlendirilen 3D varlık üretimi" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Bunun kanıtları GDC 2026 <em>State of the Game Industry</em> raporunda yer alıyor. <a href="/tr/signals/2026-03-28-the-52-52-split.html">Oyun şirketlerinin %52'si üretimde üretken yapay zekâ kullanıldığını söylüyor</a>. Geliştiricilerin yine %52'si yapay zekâ kullanımının sektörü olumsuz etkilediğini belirtiyor. Her iki oran da doğru. Asıl mesele, temel teknolojinin kimsenin itiraf etmek istemediği kadar hızlı biçimde vazgeçilmez hâle gelmesi.</p>
<p>Yanıldığım nokta: Direncin, kalite konusunda endişelenen mühendislerden geleceğini düşünmüştüm. Direncin büyük bölümü, işlerini kaybetmekten endişe duyan sanatçılardan geldi. Bu tartışma <a href="/tr/signals/2026-03-16-when-ai-overrides-the-artist.html">beklediğimden çok daha karmaşık</a> ve bunu tartışmasız bir zafer gibi görenler olup bitene dikkat etmiyor.</p>
<h2 id="_3-iddia-oyun-gelistirme-google-dokumanlar-tarzı-is-birligine-ihtiyac-duyuyor" tabindex="-1">3. iddia: Oyun geliştirme, Google Dokümanlar tarzı iş birliğine ihtiyaç duyuyor <a class="header-anchor" href="#_3-iddia-oyun-gelistirme-google-dokumanlar-tarzı-is-birligine-ihtiyac-duyuyor" aria-label="Permalink to &quot;3. iddia: Oyun geliştirme, Google Dokümanlar tarzı iş birliğine ihtiyaç duyuyor&quot;"></a></h2>
<p>2022'de şöyle demiştim:</p>
<blockquote>
<p>Kaynak kontrolü ve uygulama sürümleriyle çalışma çoğu zaman uzaktan iş birliğiyle bağlantılıdır. Bugün bunu yapabilmek için nereye gideceğinizi, uygulamanın hangi sürümünü indirmeniz gerektiğini bilmeniz ve herkesle senkronize olmanız gerekiyor; Allah korusun, ekip üyelerinden biri uygulamanın yanlış sürümünü kullanıyorsa bu bir soruna dönüşüyor. Google dokümanlarına benzer, gerçek zamana yakın bir deneyim hedefliyoruz: basit, zahmetsiz ama eğlenceli.</p>
</blockquote>
<p>Kodlama araçlarında gerçek zamanlı iş birliği 2022'de marjinal bir fikirdi. Replit'te vardı. VS Code Live Share mevcuttu. Profesyonel motorların çoğuysa Perforce, VPN ve dalınıza göz kulak olacak kıdemli bir mühendis gerektiriyordu.</p>
<p>2026'da ciddiye alınmak isteyen her yaratıcı araç için gerçek zamanlı iş birliği varsayılan hâle geldi. Figma bunu tasarımda normalleştirdi. Cursor ve Bolt kodlamada normalleştirdi. Lovable, uygulama prototiplemede normalleştirdi. Oyun motorları lider değil, geride kalan taraftı.</p>
<img src="/img/blog/open-world-chunk-streaming.png" alt="Bir açık dünya oyununun parçalarını oyuncular arasında gerçek zamanlı aktarma" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Artık kendi motorumuzda da parça aktarımı, katılımcı görünürlüğü ve tarayıcıda paylaşılan durumla birlikte, <a href="/tr/blog/2026-02-25-open-world-browser-part-04-streaming-before-fancy.html">birinci sınıf bir deneysel özellik</a> olarak çalışan çok oyunculu senkronizasyon var. Deneyim, “Perforce'u kur, Slack'ten doğru sürümü sor, başlatıcıyı yükle”den ziyade “bağlantıyı aç, oyuna katıl” yaklaşımına yakın.</p>
<p>Hafife aldığım nokta şuydu: Oyunlarda gerçek zamanlı iş birliğinin en zor kısmı ağ iletişimi değil. Yaratıcı niyetler arasındaki uyuşmazlıkları çözmek. İki kişinin aynı anda aynı bölümü düzenlemesi, senkronizasyon sorunundan önce bir kullanıcı deneyimi sorunu ve çoğu araç bunu hâlâ çözebilmiş değil.</p>
<h2 id="_4-iddia-gelecek-bagımsız-gelistiricilerin" tabindex="-1">4. iddia: Gelecek bağımsız geliştiricilerin <a class="header-anchor" href="#_4-iddia-gelecek-bagımsız-gelistiricilerin" aria-label="Permalink to &quot;4. iddia: Gelecek bağımsız geliştiricilerin&quot;"></a></h2>
<p>2022'de şöyle demiştim:</p>
<blockquote>
<p>Daha önce oyun içeriği oluşturamayan yaratıcı kişiler artık bunu yapabilecek. İnsanların yaratıcılığı algılama ve ifade etme biçimlerinin sayısız yeni yolunu keşfedeceğiz. Bu kez süreç yalnızca şirketlerin veya büyük AAA stüdyoların kontrolünde olmayacak. Gelecek bağımsız geliştiricilerin.</p>
</blockquote>
<p>Bu, röportajdaki en romantik ve 2022'de göz ardı edilmesi en kolay cümleydi. AAA bütçeleri hiç bu kadar yüksek olmamıştı. Bağımsız projeler görünürlük kazanmakta hiç bu kadar zorlanmamıştı. Rakamlar gidişatın tam ters yönde olduğunu gösteriyordu.</p>
<p>2026'da hesap değişti. <a href="/tr/blog/2026-02-18-a-breaker-belt.html">A Breaker Belt'i</a> iki kişiyle, üç günde, tek bir kod tabanından web, mobil ve PC için geliştirdik. Eskiden bu iş küçük bir ekibin üç ayını alırdı. <a href="/tr/signals/2026-03-23-solo-devs-shipping-not-vibing.html">Tek başına çalışan geliştiriciler yalnızca akışa kapılmıyor, oyunlarını yayımlıyor</a> ve Steam Next Fest 2026'ya tek kişilik ekiplerden rekor sayıda başvuru geldi.</p>
<img src="/img/social/industry-solo-dev-shipping.png" alt="Yapay zekâ araçları ve tarayıcı motorları kullanarak üretim kalitesinde oyunlar yayımlayan solo geliştiriciler" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Sıra dışı bir fikrin işe yarayıp yaramadığını öğrenmenin maliyeti dibe vurdu. Asıl değişim bu; üretim sürecindeki yapay zekâ, çalışma ortamı olarak tarayıcı ve gerçek zamanlı iş birliği dâhil diğer her şey buna hizmet ediyor. Doğru araçlara sahip solo bir geliştirici artık 2018'de 20 kişilik bir stüdyonun sahip olduğu üretim kapasitesine sahip.</p>
<p>2022'de yeterince net öngöremediğim nokta şuydu: Darboğaz üretimden keşfedilmeye kayıyor. Herkes oyun yayımlayabildiğinde bulunmak zorlaşıyor. Sıradaki iddialarımız bununla ilgili ve şu anda onları hayata geçiriyoruz.</p>
<h2 id="bilerek-yanıldıgım-noktalar" tabindex="-1">Bilerek yanıldığım noktalar <a class="header-anchor" href="#bilerek-yanıldıgım-noktalar" aria-label="Permalink to &quot;Bilerek yanıldığım noktalar&quot;"></a></h2>
<p>2022'deki iddialardan birkaçı hâlâ sonuçlanmadı veya yeniden ele alınması gerekiyor.</p>
<p>Web3 konusu o röportajda olması gerekenden daha çok öne çıkıyordu. Şifreleme ve sıfır bilgi ispatı kısmı, içerik hakları için temel bir yapı taşı olarak hâlâ geçerliliğini koruyor. Token ve pazar yeri çerçevesiyse zamana yenik düştü. 2022'de buna ayırdığım enerjinin büyük bölümü, asıl potansiyelin bulunduğu yapay zekâ araçlarına harcansa daha iyi olurdu.</p>
<p>Ayrıca “herkes oyun yapabilir” fikrinin araçlardan çok keşfedilme ve dağıtım sorunu olduğunu hafife aldım. Geliştirmek artık kolay. Bulunmak ve para kazanmak hâlâ zor; bugün çalışmalarımızın çoğu da bu alanlara odaklanıyor.</p>
<p>Şu anda ortaya koyduğumuz iddia bu. <a href="/tr/play.html">cinevva.com/play</a> adresinde TikTok tarzı bir reels akışını kısa süre önce kullanıma sunduk. Her biri on beş saniyelik gerçek oynanış kliplerini dikey olarak kaydırıyorsunuz; fragman veya pazarlama görüntüsü yok. Bir şey dikkatinizi çekerse tek dokunuşla tarayıcınızda oynamaya başlıyorsunuz. İndirme yok, kurulum yok, oyunla aranızda duran bir öğretici yok.</p>
<p>Bunun bağımsız geliştiriciler için önemli olmasının nedeni acımasız bir hesap. Steam Next Fest 2026'ya rekor sayıda başvuru yapıldı. Oyuna düşen ilgi payını hesaplayana kadar bu kulağa harika geliyor. Demoların çoğu binin altında gösterim aldı. Yapay zekâ durumu daha da kötüleştirmeden önce bile mağaza sayfası hunisi bozuktu. Oynanışın reklamın kendisi olduğu kaydırmalı bir keşif yüzeyi, keşif döngüsünü tek bir harekete indiriyor. TikTok'un tanınmayan müzisyenleri dinleyicilerin karşısına çıkarması gibi solo geliştiricileri oyuncularla buluşturuyor. “Herkes oyun yayımlayabilir” ile “herkes başarılı olabilir” arasındaki eksik parça bu.</p>
<p>Orijinal röportajın tamamını okumak isterseniz <a href="https://medium.com/@vio-202020/interview-with-tech-done-different-3b9bf74d99c2" target="_blank" rel="noreferrer">burada</a>. Geri dönüp okumak faydalı oldu. 2022'de yüksek sesle dile getirdiklerimizin çoğu, düşündüğümüzden daha hızlı ilerleyen, uygulanabilir bir yol haritasına dönüştü.</p>
]]></content:encoded>
            <enclosure url="https://app.cinevva.com/img/blog/tech-done-different.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya inşa etmek, bölüm 13: Arazi şekillendirme ve matematik fonksiyonunun ölümü]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-04-13-open-world-browser-part-13-terrain-sculpting</link>
            <guid>https://app.cinevva.com/tr/blog/2026-04-13-open-world-browser-part-13-terrain-sculpting</guid>
            <pubDate>Mon, 13 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Üç başarısız başlangıç, patlayan bir mesh ve arazi verilerinin nasıl çalıştığını yeniden düşünmemize yol açan bir dikiş hatası.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-insa-etmek-bolum-13-arazi-sekillendirme-ve-matematik-fonksiyonunun-olumu" tabindex="-1">Tarayıcıda açık dünya inşa etmek, bölüm 13: Arazi şekillendirme ve matematik fonksiyonunun ölümü <a class="header-anchor" href="#tarayıcıda-acık-dunya-insa-etmek-bolum-13-arazi-sekillendirme-ve-matematik-fonksiyonunun-olumu" aria-label="Permalink to &quot;Tarayıcıda açık dünya inşa etmek, bölüm 13: Arazi şekillendirme ve matematik fonksiyonunun ölümü&quot;"></a></h1>
<p><em>Cinevva CTO'su ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Bu rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p>On iki bölüm boyunca bakabileceğiniz bir arazi motoru geliştirdik. Üzerinde uçabiliyor, dikişlerin çatlamamasını hayranlıkla izleyebiliyordunuz. Bu kez ona dokunmak istedik.</p>
<p>Hedef kulağa basit geliyordu: oyuncunun araziyi bir fırçayla gerçek zamanlı olarak şekillendirmesini sağlamak ve bunu, 24 spike boyunca geliştirdiğimiz hiçbir sistemi bozmadan yapmak. Üç deneme, render hatası gibi görünen ama aslında veri modeli hatası olan iki bug ve arazi verilerinin nasıl çalışması gerektiğine dair köklü bir yeniden değerlendirme gerekti.</p>
<h2 id="uc-basarısız-baslangıc" tabindex="-1">Üç başarısız başlangıç <a class="header-anchor" href="#uc-basarısız-baslangıc" aria-label="Permalink to &quot;Üç başarısız başlangıç&quot;"></a></h2>
<p>Spike 25'in kolay olması gerekiyordu. Üretim kod tabanında arazi mesh'lerine isabet eden bir raycaster zaten vardı. Yerleştirme aracı, nesneleri bırakmak için bunu kullanıyordu. Fırça aracı da aynı yapıyı izler; yalnızca bir prefab oluşturmak yerine heightmap değerlerini değiştirir. Basit.</p>
<p>Birinci deneme: Aracı doğrudan üretimdeki <code>world/client/</code> TypeScript kodunun içine geliştirdim. Yeni bir <code>terrain-brush.ts</code>, <code>chunk.ts</code> üzerinde değişiklikler, protokol değişiklikleri, Vue bileşeni güncellemeleri. Bir saat içinde kısmen çalışan bir fırçam vardı ama chunk sınırlarında görünür normal süreksizlikleri oluşuyordu. Hatanın fırça kodumdan mı, mevcut chunk birleştirmesinden mi, yoksa tam render döngüsüyle bir etkileşimden mi kaynaklandığını anlayamıyordum. Spike metodolojisi tam da bu durumu önlemek için var. Kuralı atlamıştım ve bedelini hemen ödedim. Her şeyi geri aldım.</p>
<p>İkinci deneme: Bağımsız bir spike hazırladım ama Three.js 0.170.0 ve WebGL'e yöneldim. Üretim kodu WebGL kullandığı için doğal bir seçim gibi gelmişti. Ancak Spike 13-24'ün tamamı WebGPU'ya geçmişti. WebGL tabanlı bir fırça spike'ı geliştirmek, bunun geçiş yapmayı planladığımız renderer'da değil, eski renderer'da çalıştığını kanıtlayacaktı. Yanlış yön. Baştan başladım.</p>
<p>Üçüncü deneme: WebGPU, <code>WebGPURenderer</code>, vertex üretimi için compute shader ve Spike 22 ile eşleşen teknoloji yığını. Bu kez mimari doğruydu. Beş fırça işlemi çalışıyordu: yükseltme, alçaltma, yumuşatma, düzleştirme ve gürültü. M1'de fırça döngüsü P95 değeri 4 ms'nin altındaydı.</p>
<p>Ama dikiş hatası hâlâ oradaydı.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/25-heightmap-brush/" title="Spike 25 Heightmap Fırçası" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/25-heightmap-brush/" target="_blank">Spike 25'i yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=25-heightmap-brush">Kaynak kodu görüntüle</a></p>
<h2 id="bir-turlu-cozulemeyen-dikis-hatası" tabindex="-1">Bir türlü çözülemeyen dikiş hatası <a class="header-anchor" href="#bir-turlu-cozulemeyen-dikis-hatası" aria-label="Permalink to &quot;Bir türlü çözülemeyen dikiş hatası&quot;"></a></h2>
<p>Chunk'lar arası normal hesaplamasında standart çözüm sınır örtüşmesidir: her chunk, komşularından gelen fazladan bir veri halkası saklar; böylece sınırdaki normal hesabı her iki taraftan da örnek alabilir. Bunu uyguladım. Komşu kenar verilerini genişletilmiş bir buffer'a kopyaladım. Dikişler yine de çatlıyordu.</p>
<p>Matematiği incelemeye başladım. Chunk A (cx=-1) ile chunk B (cx=0) arasındaki sınırda iki chunk'ın da ortak vertex için aynı normal'i hesaplaması gerekir. Chunk A'nın shader'ı <code>mix(own_col31, own_col32, 0.85)</code> örneğini alıyordu. Chunk B ise <code>mix(neighbor_edge, own_col0, 0.85)</code> örneğini alıyordu. Bunlar, farklı veriler üzerinde ilerleyen farklı bilineer interpolasyon yollarıydı. Sınır verileri doğru olsa bile iki chunk aynı nokta için farklı normal'ler hesaplıyordu.</p>
<p>İşte o anda asıl hatanın sınır kopyalama olmadığını fark ettim. Asıl hata veri modeliydi.</p>
<p>1'den 24'e kadar her spike, <code>height_at()</code> adlı prosedürel bir matematik fonksiyonu kullanıyordu. Dünya koordinatlarını verin, yüksekliği alın. Temiz, global ve durumsuz. Fırça bir matematik fonksiyonunu değiştiremediği için üstüne bir <code>displacement</code> buffer'ı eklemiştim. Arazi artık <code>height_at(x,z) + displacement[i]</code> olmuştu. GPU shader'ı, temel arazi için 30 satırlık gürültü fonksiyonlarının yanı sıra displacement katmanı için bilineer interpolasyon kodunu da içeriyordu. Düzleştirme fırçası, hedef yüksekliği üretecek displacement değerini bulabilmek için <code>height_at()</code> değerini çıkarmak zorundaydı. Birbiri üzerine bindirilmiş, farklı örnekleme stratejileriyle farklı şeyler hesaplayan iki sistem.</p>
<p>Gerçek bir oyun bunların hiçbirini böyle yapmaz. Üretimde, tasarlanmış arazi buffer'larda saklanan örneklenmiş verilerden oluşur. Prosedürel fonksiyon, ilk spike'lardan kalma kullanışlı bir geçici çözümdü. Amacına hizmet etmişti. Artık etkin biçimde hatalara neden oluyordu.</p>
<p>Onu kaldırdım.</p>
<p>Artık her chunk, gerçek yükseklik değerlerini içeren bir <code>heightmap</code> Float32Array'e sahip. Chunk oluşturulurken bu dizi prosedürel gürültüyle dolduruluyor. Bundan sonra gürültü fonksiyonu bir daha hiç çağrılmıyor. Fırça, saklanan yükseklikleri doğrudan değiştiriyor. GPU shader'ı tek bir fonksiyon kullanarak tek bir buffer'dan okuyor: <code>hm_at(i,j)</code>. Normal'ler, aynı veri üzerinde grid hizalı merkezi farklarla hesaplanıyor. Bilineer interpolasyon belirsizliği yok. İki sistem arasında uyumsuzluk yok. Shader 90 satırdan 40 satıra indi.</p>
<p>Dikişler kendiliğinden düzeldi. Ortak bir kenardaki iki chunk da artık kendi buffer'larından aynı ayrık yükseklik değerlerini okuyordu; sınır örtüşmesinde komşunun doğru iç noktaları bulunuyordu. Aynı veri girince aynı normal'ler çıkıyordu.</p>
<p>Bu, fırçayla ilgili bir ders değildi. Fırçanın açığa çıkardığı bir veri mimarisi dersiydi.</p>
<h2 id="patlayan-mesh" tabindex="-1">Patlayan mesh <a class="header-anchor" href="#patlayan-mesh" aria-label="Permalink to &quot;Patlayan mesh&quot;"></a></h2>
<p>Spike 26 bunun hacimsel karşılığıydı. 64 küplük bir SDF hacmini fırçayla değiştirip ardından marching cubes ile yeniden mesh üretmek. Spike 25 ile aynı soru, ancak bu kez 3B.</p>
<p>İlk çalıştırdığımda mesh patladı. Her yöne doğru uzanan uzun sivri uçlar vardı; kötü bir gün geçiren denizkestanesi gibiydi.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/26-sdf-brush/" title="Spike 26 SDF Fırçası" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/26-sdf-brush/" target="_blank">Spike 26'yı yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=26-sdf-brush">Kaynak kodu görüntüle</a></p>
<p>Ürettiğim MC durum tablosunda 4096 yerine 3840 girdi vardı. Tam tablo <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.462ex;" xmlns="http://www.w3.org/2000/svg" width="28.419ex" height="2.032ex" role="img" focusable="false" viewBox="0 -694 12561 898" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" transform="translate(1000,0)" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(1500,0)"><path data-c="A0" d="" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(1750,0)"><path data-c="64" d="M376 495Q376 511 376 535T377 568Q377 613 367 624T316 637H298V660Q298 683 300 683L310 684Q320 685 339 686T376 688Q393 689 413 690T443 693T454 694H457V390Q457 84 458 81Q461 61 472 55T517 46H535V0Q533 0 459 -5T380 -11H373V44L365 37Q307 -11 235 -11Q158 -11 96 50T34 215Q34 315 97 378T244 442Q319 442 376 393V495ZM373 342Q328 405 260 405Q211 405 173 369Q146 341 139 305T131 211Q131 155 138 120T173 59Q203 26 251 26Q322 26 373 103V342Z" style="stroke-width: 3;"/><path data-c="75" d="M383 58Q327 -10 256 -10H249Q124 -10 105 89Q104 96 103 226Q102 335 102 348T96 369Q86 385 36 385H25V408Q25 431 27 431L38 432Q48 433 67 434T105 436Q122 437 142 438T172 441T184 442H187V261Q188 77 190 64Q193 49 204 40Q224 26 264 26Q290 26 311 35T343 58T363 90T375 120T379 144Q379 145 379 161T380 201T380 248V315Q380 361 370 372T320 385H302V431Q304 431 378 436T457 442H464V264Q464 84 465 81Q468 61 479 55T524 46H542V0Q540 0 467 -5T390 -11H383V58Z" transform="translate(556,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(1112,0)" style="stroke-width: 3;"/><path data-c="75" d="M383 58Q327 -10 256 -10H249Q124 -10 105 89Q104 96 103 226Q102 335 102 348T96 369Q86 385 36 385H25V408Q25 431 27 431L38 432Q48 433 67 434T105 436Q122 437 142 438T172 441T184 442H187V261Q188 77 190 64Q193 49 204 40Q224 26 264 26Q290 26 311 35T343 58T363 90T375 120T379 144Q379 145 379 161T380 201T380 248V315Q380 361 370 372T320 385H302V431Q304 431 378 436T457 442H464V264Q464 84 465 81Q468 61 479 55T524 46H542V0Q540 0 467 -5T390 -11H383V58Z" transform="translate(1504,0)" style="stroke-width: 3;"/><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(2060,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4865.2,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(5865.4,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" transform="translate(500,0)" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(6865.4,0)"><path data-c="A0" d="" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(7115.4,0)"><path data-c="79" d="M69 -66Q91 -66 104 -80T118 -116Q118 -134 109 -145T91 -160Q84 -163 97 -166Q104 -168 111 -168Q131 -168 148 -159T175 -138T197 -106T213 -75T225 -43L242 0L170 183Q150 233 125 297Q101 358 96 368T80 381Q79 382 78 382Q66 385 34 385H19V431H26L46 430Q65 430 88 429T122 428Q129 428 142 428T171 429T200 430T224 430L233 431H241V385H232Q183 385 185 366L286 112Q286 113 332 227L376 341V350Q376 365 366 373T348 383T334 385H331V431H337H344Q351 431 361 431T382 430T405 429T422 429Q477 429 503 431H508V385H497Q441 380 422 345Q420 343 378 235T289 9T227 -131Q180 -204 113 -204Q69 -204 44 -177T19 -116Q19 -89 35 -78T69 -66Z" style="stroke-width: 3;"/><path data-c="75" d="M383 58Q327 -10 256 -10H249Q124 -10 105 89Q104 96 103 226Q102 335 102 348T96 369Q86 385 36 385H25V408Q25 431 27 431L38 432Q48 433 67 434T105 436Q122 437 142 438T172 441T184 442H187V261Q188 77 190 64Q193 49 204 40Q224 26 264 26Q290 26 311 35T343 58T363 90T375 120T379 144Q379 145 379 161T380 201T380 248V315Q380 361 370 372T320 385H302V431Q304 431 378 436T457 442H464V264Q464 84 465 81Q468 61 479 55T524 46H542V0Q540 0 467 -5T390 -11H383V58Z" transform="translate(528,0)" style="stroke-width: 3;"/><path data-c="76" d="M338 431Q344 429 422 429Q479 429 503 431H508V385H497Q439 381 423 345Q421 341 356 172T288 -2Q283 -11 263 -11Q244 -11 239 -2Q99 359 98 364Q93 378 82 381T43 385H19V431H25L33 430Q41 430 53 430T79 430T104 429T122 428Q217 428 232 431H240V385H226Q187 384 184 370Q184 366 235 234L286 102L377 341V349Q377 363 367 372T349 383T335 385H331V431H338Z" transform="translate(1084,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(1612,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(9505.2,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(10561,0)"><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="39" d="M352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248Z" transform="translate(1000,0)" style="stroke-width: 3;"/><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" transform="translate(1500,0)" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>256</mn><mtext> </mtext><mtext>durum</mtext><mo>×</mo><mn>16</mn><mtext> </mtext><mtext>yuva</mtext><mo>=</mo><mn>4096</mn></math></mjx-assistive-mml></mjx-container> olmalıydı ama benim tablom <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="15.964ex" height="1.717ex" role="img" focusable="false" viewBox="0 -677 7056 759" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" transform="translate(1000,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1722.2,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2722.4,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" transform="translate(500,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4000.2,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(5056,0)"><path data-c="33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z" style="stroke-width: 3;"/><path data-c="38" d="M70 417T70 494T124 618T248 666Q319 666 374 624T429 515Q429 485 418 459T392 417T361 389T335 371T324 363L338 354Q352 344 366 334T382 323Q457 264 457 174Q457 95 399 37T249 -22Q159 -22 101 29T43 155Q43 263 172 335L154 348Q133 361 127 368Q70 417 70 494ZM286 386L292 390Q298 394 301 396T311 403T323 413T334 425T345 438T355 454T364 471T369 491T371 513Q371 556 342 586T275 624Q268 625 242 625Q201 625 165 599T128 534Q128 511 141 492T167 463T217 431Q224 426 228 424L286 386ZM250 21Q308 21 350 55T392 137Q392 154 387 169T375 194T353 216T330 234T301 253T274 270Q260 279 244 289T218 306L210 311Q204 311 181 294T133 239T107 157Q107 98 150 60T250 21Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z" transform="translate(1000,0)" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1500,0)" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>256</mn><mo>×</mo><mn>15</mn><mo>=</mo><mn>3840</mn></math></mjx-assistive-mml></mjx-container> boyutundaydı; 112. durumdan başlayan on altı satır eksikti. Bu indeksten sonraki her arama kaymıştı, dolayısıyla durum numarası artık üçgenleme verileriyle eşleşmiyordu. Marching cubes yanlış girdiyi okuduğunda iki uç noktası da yüzeyin aynı tarafında bulunan kenarlar oluşturur. Gerçek bir kesişim kenarında interpolasyon parametresi</p>
<mjx-container tabindex="0" class="MathJax" jax="SVG" display="true" style="direction: ltr; display: block; text-align: center; margin: 1em 0; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -1.909ex;" xmlns="http://www.w3.org/2000/svg" width="11.698ex" height="4.757ex" role="img" focusable="false" viewBox="0 -1259 5170.4 2102.8" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(638.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mfrac" transform="translate(1694.6,0)"><g data-mml-node="mrow" transform="translate(877.9,676)"><g data-mml-node="mo"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(778,0)"><g data-mml-node="mi"><path data-c="1D463" d="M173 380Q173 405 154 405Q130 405 104 376T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Q21 294 29 316T53 368T97 419T160 441Q202 441 225 417T249 361Q249 344 246 335Q246 329 231 291T200 202T182 113Q182 86 187 69Q200 26 250 26Q287 26 319 60T369 139T398 222T409 277Q409 300 401 317T383 343T365 361T357 383Q357 405 376 424T417 443Q436 443 451 425T467 367Q467 340 455 284T418 159T347 40T241 -11Q177 -11 139 22Q102 54 102 117Q102 148 110 181T151 298Q173 362 173 380Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(518,-150) scale(0.707)"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mrow" transform="translate(220,-686)"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D463" d="M173 380Q173 405 154 405Q130 405 104 376T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Q21 294 29 316T53 368T97 419T160 441Q202 441 225 417T249 361Q249 344 246 335Q246 329 231 291T200 202T182 113Q182 86 187 69Q200 26 250 26Q287 26 319 60T369 139T398 222T409 277Q409 300 401 317T383 343T365 361T357 383Q357 405 376 424T417 443Q436 443 451 425T467 367Q467 340 455 284T418 159T347 40T241 -11Q177 -11 139 22Q102 54 102 117Q102 148 110 181T151 298Q173 362 173 380Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(518,-150) scale(0.707)"><path data-c="1D44F" d="M73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1093.6,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(2093.8,0)"><g data-mml-node="mi"><path data-c="1D463" d="M173 380Q173 405 154 405Q130 405 104 376T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Q21 294 29 316T53 368T97 419T160 441Q202 441 225 417T249 361Q249 344 246 335Q246 329 231 291T200 202T182 113Q182 86 187 69Q200 26 250 26Q287 26 319 60T369 139T398 222T409 277Q409 300 401 317T383 343T365 361T357 383Q357 405 376 424T417 443Q436 443 451 425T467 367Q467 340 455 284T418 159T347 40T241 -11Q177 -11 139 22Q102 54 102 117Q102 148 110 181T151 298Q173 362 173 380Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(518,-150) scale(0.707)"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g></g></g><rect width="3235.9" height="60" x="120" y="220"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="block" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; overflow: hidden; width: 100%;"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><mi>t</mi><mo>=</mo><mfrac><mrow><mo>−</mo><msub><mi>v</mi><mi>a</mi></msub></mrow><mrow><msub><mi>v</mi><mi>b</mi></msub><mo>−</mo><msub><mi>v</mi><mi>a</mi></msub></mrow></mfrac></math></mjx-assistive-mml></mjx-container><p><mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="4.526ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 2000.7 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="5B" d="M118 -250V750H255V710H158V-210H255V-250H118Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(278,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(778,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(1222.7,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1722.7,0)"><path data-c="5D" d="M22 710V750H159V-250H22V-210H119V710H22Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo stretchy="false">[</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo stretchy="false">]</mo></math></mjx-assistive-mml></mjx-container> aralığında kalır çünkü <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.355ex;" xmlns="http://www.w3.org/2000/svg" width="2.131ex" height="1.358ex" role="img" focusable="false" viewBox="0 -443 942.1 600.1" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D463" d="M173 380Q173 405 154 405Q130 405 104 376T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Q21 294 29 316T53 368T97 419T160 441Q202 441 225 417T249 361Q249 344 246 335Q246 329 231 291T200 202T182 113Q182 86 187 69Q200 26 250 26Q287 26 319 60T369 139T398 222T409 277Q409 300 401 317T383 343T365 361T357 383Q357 405 376 424T417 443Q436 443 451 425T467 367Q467 340 455 284T418 159T347 40T241 -11Q177 -11 139 22Q102 54 102 117Q102 148 110 181T151 298Q173 362 173 380Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(518,-150) scale(0.707)"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>v</mi><mi>a</mi></msub></math></mjx-assistive-mml></mjx-container> ve <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.357ex;" xmlns="http://www.w3.org/2000/svg" width="1.971ex" height="1.359ex" role="img" focusable="false" viewBox="0 -443 871.3 600.8" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D463" d="M173 380Q173 405 154 405Q130 405 104 376T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Q21 294 29 316T53 368T97 419T160 441Q202 441 225 417T249 361Q249 344 246 335Q246 329 231 291T200 202T182 113Q182 86 187 69Q200 26 250 26Q287 26 319 60T369 139T398 222T409 277Q409 300 401 317T383 343T365 361T357 383Q357 405 376 424T417 443Q436 443 451 425T467 367Q467 340 455 284T418 159T347 40T241 -11Q177 -11 139 22Q102 54 102 117Q102 148 110 181T151 298Q173 362 173 380Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(518,-150) scale(0.707)"><path data-c="1D44F" d="M73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>v</mi><mi>b</mi></msub></math></mjx-assistive-mml></mjx-container> zıt işaretlere sahiptir. Sahte bir kenarda ise aynı işarete sahiptirler; bu yüzden <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.357ex;" xmlns="http://www.w3.org/2000/svg" width="6.868ex" height="1.676ex" role="img" focusable="false" viewBox="0 -583 3035.9 740.8" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D463" d="M173 380Q173 405 154 405Q130 405 104 376T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Q21 294 29 316T53 368T97 419T160 441Q202 441 225 417T249 361Q249 344 246 335Q246 329 231 291T200 202T182 113Q182 86 187 69Q200 26 250 26Q287 26 319 60T369 139T398 222T409 277Q409 300 401 317T383 343T365 361T357 383Q357 405 376 424T417 443Q436 443 451 425T467 367Q467 340 455 284T418 159T347 40T241 -11Q177 -11 139 22Q102 54 102 117Q102 148 110 181T151 298Q173 362 173 380Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(518,-150) scale(0.707)"><path data-c="1D44F" d="M73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1093.6,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(2093.8,0)"><g data-mml-node="mi"><path data-c="1D463" d="M173 380Q173 405 154 405Q130 405 104 376T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Q21 294 29 316T53 368T97 419T160 441Q202 441 225 417T249 361Q249 344 246 335Q246 329 231 291T200 202T182 113Q182 86 187 69Q200 26 250 26Q287 26 319 60T369 139T398 222T409 277Q409 300 401 317T383 343T365 361T357 383Q357 405 376 424T417 443Q436 443 451 425T467 367Q467 340 455 284T418 159T347 40T241 -11Q177 -11 139 22Q102 54 102 117Q102 148 110 181T151 298Q173 362 173 380Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(518,-150) scale(0.707)"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>v</mi><mi>b</mi></msub><mo>−</mo><msub><mi>v</mi><mi>a</mi></msub></math></mjx-assistive-mml></mjx-container> sıfıra yaklaşır veya işaret değiştirir ve <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.025ex;" xmlns="http://www.w3.org/2000/svg" width="0.817ex" height="1.441ex" role="img" focusable="false" viewBox="0 -626 361 637" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>t</mi></math></mjx-assistive-mml></mjx-container>, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="4.526ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 2000.7 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="5B" d="M118 -250V750H255V710H158V-210H255V-250H118Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(278,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(778,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(1222.7,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1722.7,0)"><path data-c="5D" d="M22 710V750H159V-250H22V-210H119V710H22Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo stretchy="false">[</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo stretchy="false">]</mo></math></mjx-assistive-mml></mjx-container> aralığının dışına fırlar. Böylece vertex, hacmin çok uzağına yerleştirilir. Bunu birkaç yüz hatalı hücreyle çarptığınızda ortaya bir kirpi çıkar.</p>
<p>Çözüm son derece basitti: Kanıtlanmış tabloyu Spike 12'den bayt bayt kopyalamak. Dersimi aldım. Kanıtlanmış bir kopya mevcutken lookup table'ı asla yeniden üretmeyin.</p>
<p>İkinci hata daha incelikliydi. Yumuşatma fırçasının arazi özelliklerini yumuşatması gerekiyordu. Bunun yerine keskin kırışıklıklar oluşturuyordu. Sorun şuydu: Her SDF değerini sıfıra, yani izoyüzeye doğru çekiyordum. Bunun yüzeyi yumuşatması gerektiği düşünülebilir ama aslında distance field'ı çökertir. Yüzeyin hem üstündeki hem de altındaki voxel'ler sıfıra doğru hızla ilerleyerek fırça yarıçapındaki her şeyi düzleştirir. Sınırda, yumuşatılmış voxel'ler yumuşatılmamış olanlarla sert bir basamak oluşturarak buluşur. “Yumuşatma” fırçası aslında bir kırışıklık üretecine dönüşmüştü.</p>
<p>Çözüm, doğru Laplasyen yumuşatmaydı. Her değeri sıfıra doğru çekmek yerine, onu 6 doğrudan komşusunun ortalamasına doğru çekmek gerekiyordu:</p>
<mjx-container tabindex="0" class="MathJax" jax="SVG" display="true" style="direction: ltr; display: block; text-align: center; margin: 1em 0; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -3.222ex;" xmlns="http://www.w3.org/2000/svg" width="30.99ex" height="7.575ex" role="img" focusable="false" viewBox="0 -1924.1 13697.6 3348.2" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D719" d="M409 688Q413 694 421 694H429H442Q448 688 448 686Q448 679 418 563Q411 535 404 504T392 458L388 442Q388 441 397 441T429 435T477 418Q521 397 550 357T579 260T548 151T471 65T374 11T279 -10H275L251 -105Q245 -128 238 -160Q230 -192 227 -198T215 -205H209Q189 -205 189 -198Q189 -193 211 -103L234 -11Q234 -10 226 -10Q221 -10 206 -8T161 6T107 36T62 89T43 171Q43 231 76 284T157 370T254 422T342 441Q347 441 348 445L378 567Q409 686 409 688ZM122 150Q122 116 134 91T167 53T203 35T237 27H244L337 404Q333 404 326 403T297 395T255 379T211 350T170 304Q152 276 137 237Q122 191 122 150ZM500 282Q500 320 484 347T444 385T405 400T381 404H378L332 217L284 29Q284 27 285 27Q293 27 317 33T357 47Q400 66 431 100T475 170T494 234T500 282Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(629,-150) scale(0.707)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1200.7,0)"><path data-c="2190" d="M944 261T944 250T929 230H165Q167 228 182 216T211 189T244 152T277 96T303 25Q308 7 308 0Q308 -11 288 -11Q281 -11 278 -11T272 -7T267 2T263 21Q245 94 195 151T73 236Q58 242 55 247Q55 254 59 257T73 264Q121 283 158 314T215 375T247 434T264 480L267 497Q269 503 270 505T275 509T288 511Q308 511 308 500Q308 493 303 475Q293 438 278 406T246 352T215 315T185 287T165 270H929Q944 261 944 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(2478.5,0)"><g data-mml-node="mi"><path data-c="1D719" d="M409 688Q413 694 421 694H429H442Q448 688 448 686Q448 679 418 563Q411 535 404 504T392 458L388 442Q388 441 397 441T429 435T477 418Q521 397 550 357T579 260T548 151T471 65T374 11T279 -10H275L251 -105Q245 -128 238 -160Q230 -192 227 -198T215 -205H209Q189 -205 189 -198Q189 -193 211 -103L234 -11Q234 -10 226 -10Q221 -10 206 -8T161 6T107 36T62 89T43 171Q43 231 76 284T157 370T254 422T342 441Q347 441 348 445L378 567Q409 686 409 688ZM122 150Q122 116 134 91T167 53T203 35T237 27H244L337 404Q333 404 326 403T297 395T255 379T211 350T170 304Q152 276 137 237Q122 191 122 150ZM500 282Q500 320 484 347T444 385T405 400T381 404H378L332 217L284 29Q284 27 285 27Q293 27 317 33T357 47Q400 66 431 100T475 170T494 234T500 282Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(629,-150) scale(0.707)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3623.7,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(4623.9,0)"><path data-c="1D706" d="M166 673Q166 685 183 694H202Q292 691 316 644Q322 629 373 486T474 207T524 67Q531 47 537 34T546 15T551 6T555 2T556 -2T550 -11H482Q457 3 450 18T399 152L354 277L340 262Q327 246 293 207T236 141Q211 112 174 69Q123 9 111 -1T83 -12Q47 -12 47 20Q47 37 61 52T199 187Q229 216 266 252T321 306L338 322Q338 323 288 462T234 612Q214 657 183 657Q166 657 166 673Z" style="stroke-width: 3;"/></g><g data-mml-node="mrow" transform="translate(5373.6,0)"><g data-mml-node="mo"><path data-c="239B" d="M837 1154Q843 1148 843 1145Q843 1141 818 1106T753 1002T667 841T574 604T494 299Q417 -84 417 -609Q417 -641 416 -647T411 -654Q409 -655 366 -655Q299 -655 297 -654Q292 -652 292 -643T291 -583Q293 -400 304 -242T347 110T432 470T574 813T785 1136Q787 1139 790 1142T794 1147T796 1150T799 1152T802 1153T807 1154T813 1154H819H837Z" transform="translate(0,770.1)" style="stroke-width: 3;"/><path data-c="239D" d="M843 -635Q843 -638 837 -644H820Q801 -644 800 -643Q792 -635 785 -626Q684 -503 605 -363T473 -75T385 216T330 518T302 809T291 1093Q291 1144 291 1153T296 1164Q298 1165 366 1165Q409 1165 411 1164Q415 1163 416 1157T417 1119Q417 529 517 109T833 -617Q843 -631 843 -635Z" transform="translate(0,-780.1)" style="stroke-width: 3;"/></g><g data-mml-node="mfrac" transform="translate(875,0)"><g data-mml-node="mn" transform="translate(220,676)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(220,-686)"><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" style="stroke-width: 3;"/></g><rect width="700" height="60" x="120" y="220"/></g><g data-mml-node="munder" transform="translate(1981.7,0)"><g data-mml-node="mo" transform="translate(370.5,0)"><path data-c="2211" d="M60 948Q63 950 665 950H1267L1325 815Q1384 677 1388 669H1348L1341 683Q1320 724 1285 761Q1235 809 1174 838T1033 881T882 898T699 902H574H543H251L259 891Q722 258 724 252Q725 250 724 246Q721 243 460 -56L196 -356Q196 -357 407 -357Q459 -357 548 -357T676 -358Q812 -358 896 -353T1063 -332T1204 -283T1307 -196Q1328 -170 1348 -124H1388Q1388 -125 1381 -145T1356 -210T1325 -294L1267 -449L666 -450Q64 -450 61 -448Q55 -446 55 -439Q55 -437 57 -433L590 177Q590 178 557 222T452 366T322 544L56 909L55 924Q55 945 60 948Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" transform="translate(0,-1147.3) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D457" d="M297 596Q297 627 318 644T361 661Q378 661 389 651T403 623Q403 595 384 576T340 557Q322 557 310 567T297 596ZM288 376Q288 405 262 405Q240 405 220 393T185 362T161 325T144 293L137 279Q135 278 121 278H107Q101 284 101 286T105 299Q126 348 164 391T252 441Q253 441 260 441T272 442Q296 441 316 432Q341 418 354 401T367 348V332L318 133Q267 -67 264 -75Q246 -125 194 -164T75 -204Q25 -204 7 -183T-12 -137Q-12 -110 7 -91T53 -71Q70 -71 82 -81T95 -112Q95 -148 63 -167Q69 -168 77 -168Q111 -168 139 -140T182 -74L193 -32Q204 11 219 72T251 197T278 308T289 365Q289 372 288 376Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(412,0)"><path data-c="2208" d="M84 250Q84 372 166 450T360 539Q361 539 377 539T419 540T469 540H568Q583 532 583 520Q583 511 570 501L466 500Q355 499 329 494Q280 482 242 458T183 409T147 354T129 306T124 272V270H568Q583 262 583 250T568 230H124V228Q124 207 134 177T167 112T231 48T328 7Q355 1 466 0H570Q583 -10 583 -20Q583 -32 568 -40H471Q464 -40 446 -40T417 -41Q262 -41 172 45Q84 127 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1079,0)"><path data-c="1D441" d="M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1967,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(2356,0)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2701,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="msub" transform="translate(4333.3,0)"><g data-mml-node="mi"><path data-c="1D719" d="M409 688Q413 694 421 694H429H442Q448 688 448 686Q448 679 418 563Q411 535 404 504T392 458L388 442Q388 441 397 441T429 435T477 418Q521 397 550 357T579 260T548 151T471 65T374 11T279 -10H275L251 -105Q245 -128 238 -160Q230 -192 227 -198T215 -205H209Q189 -205 189 -198Q189 -193 211 -103L234 -11Q234 -10 226 -10Q221 -10 206 -8T161 6T107 36T62 89T43 171Q43 231 76 284T157 370T254 422T342 441Q347 441 348 445L378 567Q409 686 409 688ZM122 150Q122 116 134 91T167 53T203 35T237 27H244L337 404Q333 404 326 403T297 395T255 379T211 350T170 304Q152 276 137 237Q122 191 122 150ZM500 282Q500 320 484 347T444 385T405 400T381 404H378L332 217L284 29Q284 27 285 27Q293 27 317 33T357 47Q400 66 431 100T475 170T494 234T500 282Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(629,-150) scale(0.707)"><path data-c="1D457" d="M297 596Q297 627 318 644T361 661Q378 661 389 651T403 623Q403 595 384 576T340 557Q322 557 310 567T297 596ZM288 376Q288 405 262 405Q240 405 220 393T185 362T161 325T144 293L137 279Q135 278 121 278H107Q101 284 101 286T105 299Q126 348 164 391T252 441Q253 441 260 441T272 442Q296 441 316 432Q341 418 354 401T367 348V332L318 133Q267 -67 264 -75Q246 -125 194 -164T75 -204Q25 -204 7 -183T-12 -137Q-12 -110 7 -91T53 -71Q70 -71 82 -81T95 -112Q95 -148 63 -167Q69 -168 77 -168Q111 -168 139 -140T182 -74L193 -32Q204 11 219 72T251 197T278 308T289 365Q289 372 288 376Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(5525.8,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(6526.1,0)"><g data-mml-node="mi"><path data-c="1D719" d="M409 688Q413 694 421 694H429H442Q448 688 448 686Q448 679 418 563Q411 535 404 504T392 458L388 442Q388 441 397 441T429 435T477 418Q521 397 550 357T579 260T548 151T471 65T374 11T279 -10H275L251 -105Q245 -128 238 -160Q230 -192 227 -198T215 -205H209Q189 -205 189 -198Q189 -193 211 -103L234 -11Q234 -10 226 -10Q221 -10 206 -8T161 6T107 36T62 89T43 171Q43 231 76 284T157 370T254 422T342 441Q347 441 348 445L378 567Q409 686 409 688ZM122 150Q122 116 134 91T167 53T203 35T237 27H244L337 404Q333 404 326 403T297 395T255 379T211 350T170 304Q152 276 137 237Q122 191 122 150ZM500 282Q500 320 484 347T444 385T405 400T381 404H378L332 217L284 29Q284 27 285 27Q293 27 317 33T357 47Q400 66 431 100T475 170T494 234T500 282Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(629,-150) scale(0.707)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(7449,0)"><path data-c="239E" d="M31 1143Q31 1154 49 1154H59Q72 1154 75 1152T89 1136Q190 1013 269 873T401 585T489 294T544 -8T572 -299T583 -583Q583 -634 583 -643T577 -654Q575 -655 508 -655Q465 -655 463 -654Q459 -653 458 -647T457 -609Q457 -58 371 340T100 1037Q87 1059 61 1098T31 1143Z" transform="translate(0,770.1)" style="stroke-width: 3;"/><path data-c="23A0" d="M56 -644H50Q31 -644 31 -635Q31 -632 37 -622Q69 -579 100 -527Q286 -228 371 170T457 1119Q457 1161 462 1164Q464 1165 520 1165Q575 1165 577 1164Q582 1162 582 1153T583 1093Q581 910 570 752T527 400T442 40T300 -303T89 -626Q78 -640 75 -642T61 -644H56Z" transform="translate(0,-780.1)" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="block" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; overflow: hidden; width: 100%;"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><msub><mi>ϕ</mi><mi>i</mi></msub><mo stretchy="false">←</mo><msub><mi>ϕ</mi><mi>i</mi></msub><mo>+</mo><mi>λ</mi><mrow data-mjx-texclass="INNER"><mo data-mjx-texclass="OPEN">(</mo><mfrac><mn>1</mn><mn>6</mn></mfrac><munder><mo data-mjx-texclass="OP">∑</mo><mrow data-mjx-texclass="ORD"><mi>j</mi><mo>∈</mo><mi>N</mi><mo stretchy="false">(</mo><mi>i</mi><mo stretchy="false">)</mo></mrow></munder><msub><mi>ϕ</mi><mi>j</mi></msub><mo>−</mo><msub><mi>ϕ</mi><mi>i</mi></msub><mo data-mjx-texclass="CLOSE">)</mo></mrow></math></mjx-assistive-mml></mjx-container><p>Parantez içindeki terim ayrık bir Laplasyen, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="8.862ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 3917.2 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D706" d="M166 673Q166 685 183 694H202Q292 691 316 644Q322 629 373 486T474 207T524 67Q531 47 537 34T546 15T551 6T555 2T556 -2T550 -11H482Q457 3 450 18T399 152L354 277L340 262Q327 246 293 207T236 141Q211 112 174 69Q123 9 111 -1T83 -12Q47 -12 47 20Q47 37 61 52T199 187Q229 216 266 252T321 306L338 322Q338 323 288 462T234 612Q214 657 183 657Q166 657 166 673Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(860.8,0)"><path data-c="2208" d="M84 250Q84 372 166 450T360 539Q361 539 377 539T419 540T469 540H568Q583 532 583 520Q583 511 570 501L466 500Q355 499 329 494Q280 482 242 458T183 409T147 354T129 306T124 272V270H568Q583 262 583 250T568 230H124V228Q124 207 134 177T167 112T231 48T328 7Q355 1 466 0H570Q583 -10 583 -20Q583 -32 568 -40H471Q464 -40 446 -40T417 -41Q262 -41 172 45Q84 127 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1805.6,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2194.6,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2694.6,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(3139.2,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(3639.2,0)"><path data-c="5D" d="M22 710V750H159V-250H22V-210H119V710H22Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>λ</mi><mo>∈</mo><mo stretchy="false">(</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo stretchy="false">]</mo></math></mjx-assistive-mml></mjx-container> ise yumuşatma kuvvetidir. Bu yöntem yakındaki geometriyi ortalamaya tabi tutar; distance field gradyanını çökertmek yerine koruyarak yüzey şeklini yumuşatır.</p>
<h2 id="her-sey-aynı-anda" tabindex="-1">Her şey aynı anda <a class="header-anchor" href="#her-sey-aynı-anda" aria-label="Permalink to &quot;Her şey aynı anda&quot;"></a></h2>
<p>Spike 27 entegrasyon kapısıydı. Spike 24'ün tam pipeline'ını (heightmap patch'leri, MC chunk'ları, Transvoxel dikişleri, geomorph LOD) alıp Spike 25'in örneklenmiş veri modeli ve iki fırça türüyle birleştirdik.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/27-hm-mc-brush/" title="Spike 27 HM + MC + Fırça Entegrasyonu" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/27-hm-mc-brush/" target="_blank">Spike 27'yi yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=27-hm-mc-brush">Kaynak kodu görüntüle</a></p>
<p>İlk yaptığım şey, <code>height_at()</code> fonksiyonunu her shader'dan söküp atmaktı. Üç compute shader'ın tamamı (SDF doldurma, heightmap patch'i ve Transvoxel dikişi) artık aynı 129x129 heightmap GPU buffer'ını bağlıyor ve paylaşılan bir WGSL preamble üzerinden aynı <code>hm_sample()</code> bilineer interpolasyon fonksiyonunu kullanıyor. Tek veri kaynağı, birden fazla tüketici. Spike 1'den beri her shader'ın içinde yaşayan prosedürel gürültü fonksiyonları artık yoktu.</p>
<p>Ardından ilginç sorunlar başladı.</p>
<p>Bir SDF fırçası chunk'ı MC moduna kilitlediğinde, o chunk ile heightmap komşusu arasındaki Transvoxel dikişinin heightmap'ten değil, SDF hacminden örnek alması gerekir. Dikiş shader'ını ek storage buffer binding'leri ve chunk başına MC bayraklarıyla genişlettim. Ele alınması gereken dört sınır kombinasyonu vardı: HM-HM, HM-MC, MC-HM, MC-MC.</p>
<p>LOD başka bir bilmeceydi. Önceki spike'larda bir MC chunk'ını daha düşük bir LOD seviyesine geçirmek, SDF'yi daha kaba bir çözünürlükte yeniden doldurmak anlamına geliyordu. Bunun yerine stride tabanlı örnekleme kullandım: SDF verisi tam çözünürlükte, yani 65 grid noktası olarak kalıyor. MC shader'ı, grid boyutunun hücre sayısına oranından bir stride hesaplıyor. LOD0'da stride 1. LOD1'de stride 2 ve her iki voxel'den biri örnekleniyor. Chunk'lar SDF verilerine dokunmadan serbestçe LOD değiştirebiliyor.</p>
<p>En tatmin edici çözüm, dinamik dikey chunk oluşturmaydı. Bir chunk'ın üst sınırını aşacak şekilde yukarı doğru şekillendirdiğinizde, üstünde yeni ve yalnızca MC kullanan bir chunk beliriyor; SDF'si, alttaki chunk'ın sınır yüzünden başlatılıyor. Aşağı doğru şekillendirdiğinizde de aynısı gerçekleşiyor. Dünya, düzenlemelere uyacak şekilde büyüyor.</p>
<p>Son tuzak, heightmap fırçasının MC'ye kilitli chunk'larda hiçbir şey yapmamasıydı. HM fırçası <code>heightmapCPU</code> verisini değiştirip yeniden yüklüyor. MC chunk'ları artık heightmap'ten okuma yapmıyor; çünkü SDF'leri önce heightmap'ten doldurulmuş, ardından ondan ayrışmış durumda. <code>syncHeightmapToSdf()</code> fonksiyonunu ekledim: Heightmap değiştikten sonra, fırça yarıçapındaki tüm MC chunk'larının SDF sütunları yeniden türetiliyor ve yeni değerler yükleniyor. Artık her iki fırça türü de her iki chunk türünde çalışıyor.</p>
<h2 id="aslında-ne-ogrendik" tabindex="-1">Aslında ne öğrendik? <a class="header-anchor" href="#aslında-ne-ogrendik" aria-label="Permalink to &quot;Aslında ne öğrendik?&quot;"></a></h2>
<p>Fırça spike'larının bir performans sorusuna yanıt vermesi gerekiyordu: Şekillendirme, kare süresi bütçesi içinde çalışabilir mi? Evet, çalışabilir. Kolay kısım buydu.</p>
<p>Zor kısım, arazi gerçeği olarak 24 spike boyunca <code>height_at()</code> kullanmanın görünmez bir bağımlılık yarattığını ve herhangi bir şeyi düzenlemeye çalıştığımız anda bu bağımlılığın sistemi bozduğunu keşfetmekti. Prosedürel fonksiyon temiz, global ve durumsuzdu; ta ki artık arazinin kendisi olmayana kadar.</p>
<p>Yazdığımız ve unutmayacağımız kurallar:</p>
<ol>
<li>Arazi yüksekliği örneklenmiş veriden gelir. Chunk'lar kendi buffer'larına sahip olur.</li>
<li>Prosedürel üretim ilk veriyi doldurur. Çalışma zamanındaki gerçek değildir.</li>
<li>Fırça, chunk verilerini doğrudan değiştirir. Displacement katmanları kullanılmaz.</li>
<li>Normal'ler, aynı veriden grid hizalı merkezi farklarla elde edilir.</li>
<li>Sınır örtüşmesi (komşunun iç kısmından 1 hücre) chunk'lar arası normal'leri yönetir.</li>
<li>Kanıtlanmış bir kopya mevcutken lookup table'ı asla yeniden üretmeyin.</li>
</ol>
<p><a href="/tr/blog/2026-04-13-open-world-browser-part-14-world-comes-alive.html">Bölüm 14'te</a> debug geometrisini şekillendirmeyi bırakıp dünyayı gerçek bir yer gibi göstermeye ve hissettirmeye başlıyoruz.</p>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>Örneklenmiş heightmap mimarisi.</strong> Arazinin çalışma zamanında prosedürel bir fonksiyonla hesaplanması yerine, her chunk'a ait veriler olarak saklanması. Her chunk, gerçek yükseklik değerlerini içeren bir <code>Float32Array</code> barındırır. Oluşturma sırasında prosedürel gürültü ilk veriyi doldurur ve ardından fonksiyon bir daha hiç çağrılmaz. Bu yaklaşım, matematik tabanlı arazi ile düzenleme katmanları arasındaki çift sistemli uyumsuzluğu ortadan kaldırır, fırça işlemlerini basitleştirir (saklanan değerler doğrudan düzenlenir) ve GPU shader'ını son derece basit hâle getirir (buffer'dan oku, normal'leri grid hizalı merkezi farklarla hesapla). Streaming kullanan açık dünyalarda, komşulardan alınan 1 hücrelik sınır örtüşmesiyle chunk başına veri sahipliği standart yaklaşımdır. <a href="/tr/guides/landscape-generation-browser.html#terrain-data-representation">Arazi oluşturma rehberimize</a> bakın.</p>
<p><strong>SDF fırça işlemleri.</strong> Araziyi şekillendirmek için signed distance field'ın değiştirilmesi. Ekleme (şişirme), bir kürenin çevresinde smooth-step falloff kullanır. Çıkarma (oyma), aynı şeklin ters işaretlisini kullanır. Yumuşatma ise Laplasyen ortalama kullanır: 6 doğrudan komşuyu oku, ortalamalarını hesapla ve değeri bu ortalamaya doğru çek. Değerleri sıfıra çekmeye dayalı naif yaklaşım distance field'ı çökertir ve keskin kenarlar oluşturur. Laplasyen yumuşatma, özellikleri yumuşatırken alan gradyanını korur. <a href="/tr/guides/landscape-generation-browser.html#signed-distance-fields-sdfs">SDF arazi gösterimine</a> bakın.</p>
<p><strong>Karışık veri kaynaklarıyla Transvoxel.</strong> Bir MC chunk'ı ile heightmap chunk'ı arasındaki sınırda bulunan geçiş hücrelerinin, her iki tarafta farklı verilerden örnek alması gerekir. Dikiş shader'ı, dört kombinasyonun tamamını (HM-HM, HM-MC, MC-HM, MC-MC) yönetmek için chunk başına bayraklar ve buffer binding'leri taşır. Taraflardan biri MC'ye kilitliyse shader, heightmap'ten örnek almak yerine SDF buffer'ını trilineer olarak interpole eder.
<strong>Marching cubes için adım aralığı tabanlı LOD.</strong> SDF verileri, parçanın mevcut LOD seviyesinden bağımsız olarak tam çözünürlükte saklanır. MC shader’ı, SDF ızgara noktalarının MC hücrelerine oranından bir örnekleme adım aralığı hesaplar. Tam çözünürlükte adım aralığı 1, yarı çözünürlükte ise 2’dir. Bu yaklaşım SDF verilerini LOD değişikliklerinden bağımsız hâle getirir; böylece parçalar SDF yeniden oluşturulmadan LOD seviyeleri arasında serbestçe geçiş yapabilir.</p>
<hr>
<p>14 bölümün 13. bölümü.
Önceki: <a href="/tr/blog/2026-02-25-open-world-browser-part-12-lessons.html">Bölüm 12 - Halkalar, gökyüzü sisi ve yeniden yapacaklarımız</a>
Sonraki: <a href="/tr/blog/2026-04-13-open-world-browser-part-14-world-comes-alive.html">Bölüm 14 - Dünya canlanıyor</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya inşa etmek, bölüm 14: Dünya canlanıyor]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-04-13-open-world-browser-part-14-world-comes-alive</link>
            <guid>https://app.cinevva.com/tr/blog/2026-04-13-open-world-browser-part-14-world-comes-alive</guid>
            <pubDate>Mon, 13 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Şekillendirmenize tepki veren malzemeler, mağara tavanlarında büyüyen çimler ve bir tarayıcı sekmesinde olduğunuzu unutturan bir planör.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-insa-etmek-bolum-14-dunya-canlanıyor" tabindex="-1">Tarayıcıda açık dünya inşa etmek, bölüm 14: Dünya canlanıyor <a class="header-anchor" href="#tarayıcıda-acık-dunya-insa-etmek-bolum-14-dunya-canlanıyor" aria-label="Permalink to &quot;Tarayıcıda açık dünya inşa etmek, bölüm 14: Dünya canlanıyor&quot;"></a></h1>
<p><em><a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p><a href="/tr/blog/2026-04-13-open-world-browser-part-13-terrain-sculpting.html">13. bölümden</a> sonra arazi şekillendirme özelliğimiz vardı. Araziyi yükseltebiliyor, mağaralar oyabiliyor, uçurumları yumuşatabiliyorduk; üstelik bunların hepsi gerçek zamanlı gerçekleşiyor ve dikişler bozulmadan kalıyordu. Ancak dünya bir teknoloji demosu gibi görünüyordu. Hata ayıklama renkleriyle düz gölgelendirme, tel kafes katmanları, parçaları birbirinden ayırmak için LOD renkleri taşıyan gri geometri. Dünyayı düzenleyebiliyordunuz. Ama onu hissedemiyordunuz.</p>
<p>Bunu üç spike değiştirdi. Mimaride hiçbir değişiklik olmadı. 13. bölümdeki işlem hattı, tamponlar ve dikiş birleştirme sistemi aynen kaldı. Yalnızca araziyi gerçek bir mekân gibi hissettiren katmanları ekledik: şekle tepki veren yüzeyler, bu yüzeylerde büyüyen yaşam ve üzerlerinde yürüyen bir beden.</p>
<p>“Teknik olarak çalışıyor” ile “burada kalmak istiyorum” arasındaki farkın şaşırtıcı derecede küçük olduğu ortaya çıktı.</p>
<h2 id="bir-ucurum-sekillendirin-ve-kayaya-donusmesini-izleyin" tabindex="-1">Bir uçurum şekillendirin ve kayaya dönüşmesini izleyin <a class="header-anchor" href="#bir-ucurum-sekillendirin-ve-kayaya-donusmesini-izleyin" aria-label="Permalink to &quot;Bir uçurum şekillendirin ve kayaya dönüşmesini izleyin&quot;"></a></h2>
<p>Spike 28 dar kapsamlı bir soru sordu: triplanar eşlemeye sahip 4 katmanlı bir malzeme, kare süresi bütçesini tüketmeden hesaplama yoluyla üretilmiş arazide çalışabilir mi? Yanıt evetti, ancak asıl ilginç olan bundan sonra yaşananlardı.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/28-multi-material/" title="Spike 28 Çok Malzemeli Dokulama" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/28-multi-material/" target="_blank">Spike 28'i yeni bir sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=28-multi-material">Kaynak kodunu görüntüle</a></p>
<p>Dört prosedürel doku (çim, kaya, kum ve kar), başlangıçta FBM gürültüsünden üretiliyor. Harici dosya yok, varlık işlem hattı yok; yalnızca matematik ve bir <code>DataTexture</code> var. Malzeme ağırlıkları yüzeyin kendisinden geliyor: eğim ve rakım. Ağaç sınırının altındaki düz alanlar çimle kaplanıyor. Dik yüzeyler kayaya dönüşüyor. Alçak zeminlere kum, yüksek zirvelere kar geliyor. Her ham ağırlık, eğim ve rakım üzerinde bir <code>smoothstep</code> işleminden elde ediliyor; ardından parça başına normalize edilerek <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.663ex;" xmlns="http://www.w3.org/2000/svg" width="10.014ex" height="2.36ex" role="img" focusable="false" viewBox="0 -750 4426.1 1043.1" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="munder"><g data-mml-node="mo"><path data-c="2211" d="M61 748Q64 750 489 750H913L954 640Q965 609 976 579T993 533T999 516H979L959 517Q936 579 886 621T777 682Q724 700 655 705T436 710H319Q183 710 183 709Q186 706 348 484T511 259Q517 250 513 244L490 216Q466 188 420 134T330 27L149 -187Q149 -188 362 -188Q388 -188 436 -188T506 -189Q679 -189 778 -162T936 -43Q946 -27 959 6H999L913 -249L489 -250Q65 -250 62 -248Q56 -246 56 -239Q56 -234 118 -161Q186 -81 245 -11L428 206Q428 207 242 462L57 717L56 728Q56 744 61 748Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1089,-285.4) scale(0.707)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="msub" transform="translate(1549.6,0)"><g data-mml-node="mi"><path data-c="1D464" d="M580 385Q580 406 599 424T641 443Q659 443 674 425T690 368Q690 339 671 253Q656 197 644 161T609 80T554 12T482 -11Q438 -11 404 5T355 48Q354 47 352 44Q311 -11 252 -11Q226 -11 202 -5T155 14T118 53T104 116Q104 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Q21 293 29 315T52 366T96 418T161 441Q204 441 227 416T250 358Q250 340 217 250T184 111Q184 65 205 46T258 26Q301 26 334 87L339 96V119Q339 122 339 128T340 136T341 143T342 152T345 165T348 182T354 206T362 238T373 281Q402 395 406 404Q419 431 449 431Q468 431 475 421T483 402Q483 389 454 274T422 142Q420 131 420 107V100Q420 85 423 71T442 42T487 26Q558 26 600 148Q609 171 620 213T632 273Q632 306 619 325T593 357T580 385Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(749,-150) scale(0.707)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(2870.3,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(3926.1,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><munder><mo data-mjx-texclass="OP">∑</mo><mi>i</mi></munder><msub><mi>w</mi><mi>i</mi></msub><mo>=</mo><mn>1</mn></math></mjx-assistive-mml></mjx-container> olması sağlanıyor ve nihai renk yalnızca ağırlıklı karışım <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.663ex;" xmlns="http://www.w3.org/2000/svg" width="7.963ex" height="2.36ex" role="img" focusable="false" viewBox="0 -750 3519.5 1043.1" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="munder"><g data-mml-node="mo"><path data-c="2211" d="M61 748Q64 750 489 750H913L954 640Q965 609 976 579T993 533T999 516H979L959 517Q936 579 886 621T777 682Q724 700 655 705T436 710H319Q183 710 183 709Q186 706 348 484T511 259Q517 250 513 244L490 216Q466 188 420 134T330 27L149 -187Q149 -188 362 -188Q388 -188 436 -188T506 -189Q679 -189 778 -162T936 -43Q946 -27 959 6H999L913 -249L489 -250Q65 -250 62 -248Q56 -246 56 -239Q56 -234 118 -161Q186 -81 245 -11L428 206Q428 207 242 462L57 717L56 728Q56 744 61 748Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1089,-285.4) scale(0.707)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="msub" transform="translate(1549.6,0)"><g data-mml-node="mi"><path data-c="1D464" d="M580 385Q580 406 599 424T641 443Q659 443 674 425T690 368Q690 339 671 253Q656 197 644 161T609 80T554 12T482 -11Q438 -11 404 5T355 48Q354 47 352 44Q311 -11 252 -11Q226 -11 202 -5T155 14T118 53T104 116Q104 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Q21 293 29 315T52 366T96 418T161 441Q204 441 227 416T250 358Q250 340 217 250T184 111Q184 65 205 46T258 26Q301 26 334 87L339 96V119Q339 122 339 128T340 136T341 143T342 152T345 165T348 182T354 206T362 238T373 281Q402 395 406 404Q419 431 449 431Q468 431 475 421T483 402Q483 389 454 274T422 142Q420 131 420 107V100Q420 85 423 71T442 42T487 26Q558 26 600 148Q609 171 620 213T632 273Q632 306 619 325T593 357T580 385Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(749,-150) scale(0.707)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mstyle" transform="translate(2592.6,0)"><g data-mml-node="mspace"/></g><g data-mml-node="msub" transform="translate(2759.6,0)"><g data-mml-node="mi"><path data-c="1D450" d="M34 159Q34 268 120 355T306 442Q362 442 394 418T427 355Q427 326 408 306T360 285Q341 285 330 295T319 325T330 359T352 380T366 386H367Q367 388 361 392T340 400T306 404Q276 404 249 390Q228 381 206 359Q162 315 142 235T121 119Q121 73 147 50Q169 26 205 26H209Q321 26 394 111Q403 121 406 121Q410 121 419 112T429 98T420 83T391 55T346 25T282 0T202 -11Q127 -11 81 37T34 159Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(466,-150) scale(0.707)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><munder><mo data-mjx-texclass="OP">∑</mo><mi>i</mi></munder><msub><mi>w</mi><mi>i</mi></msub><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><msub><mi>c</mi><mi>i</mi></msub></math></mjx-assistive-mml></mjx-container> oluyor. Normalizasyon, biyomların örtüştüğü yerlerde yüzeyin kararmasını veya aşırı parlaklaşmasını engelliyor. Triplanar eşleme ise üçgenlerin anlamlı UV koordinatlarına sahip olmadığı MC parçalarındaki UV izdüşümünü hallediyor.</p>
<p>Bizi ikna eden an şuydu: fırçayla araziyi yükseltip dik bir uçurum oluşturduğunuzda, yeni yüzeyde aynı kare içinde kaya dokusu beliriyor. Tekrar düzleştirdiğinizde yüzeyi yeniden çim kaplıyor. Malzemenin fırçadan haberi yok. Yalnızca dünya konumunu ve yüzey normalini, yani geometrinin oluşturulduğu verilerin aynısını okuyor. Şekillendirme ile görsel geri bildirim arasındaki döngü anlık ve önceden betiklenmemiş.</p>
<p>Spike 8, bir buçuk ay önce WebGL üzerinde statik bir mesh kullanarak arazi malzemesinin maliyetini test etmişti. Spike 28 ise bunun, altında tam şekillendirme işlem hattı çalışan dinamik ve hesaplama yoluyla üretilmiş arazide de işe yaradığını kanıtlıyor. Bunun için bütçe ayırmıştık ama her şey çalışırken 60 fps'yi koruduğunu görmek yine de rahatlatıcıydı.</p>
<h2 id="_80-000-cim-kumesi-ve-bir-magara-tavanı" tabindex="-1">80.000 çim kümesi ve bir mağara tavanı <a class="header-anchor" href="#_80-000-cim-kumesi-ve-bir-magara-tavanı" aria-label="Permalink to &quot;80.000 çim kümesi ve bir mağara tavanı&quot;"></a></h2>
<p>Spike 29'da oyun geliştirme içgüdülerimiz devreye girdi.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/29-vegetation/" title="Spike 29 Bitki Örtüsü / Shader Çimi" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/29-vegetation/" target="_blank">Spike 29'u yeni bir sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=29-vegetation">Kaynak kodunu görüntüle</a></p>
<p>Breath of the Wild'daki gibi çimler istiyorduk. Poligon sayısını değil, hissini. Doğru yerleri kaplayan, rüzgârda hareket eden ve içinden koşma isteği uyandıran çimler.</p>
<p>Her çim kümesi, 60 derecelik açılarla kesişen üç dörtgenden ve bükülme için dört dikey segmentten oluşuyor. Billboard hileleri kullanmadan her açıdan hacimli görünen bir haç şekli. Parça başına bir <code>InstancedMesh</code>, dünya genelinde 80.000 çim kümesi ve toplamda yaklaşık 2,4 milyon çim köşesi.</p>
<p>Asıl önemli kısım yerleştirme. CPU, her parça boyunca titreşimli bir ızgarada ilerliyor ve GPU malzeme shader'ının kullandığı eğim/rakım mantığının aynısını değerlendiriyor. Malzeme sisteminin “çim” dediği yerde çim büyüyor. Kaya veya kumun baskın olduğu yerlerde yoğunluk sıfıra düşüyor. Geçiş yumuşak, çünkü temeldeki <code>smoothstep</code> ağırlıkları biyom kenarlarında sürekli gradyanlar oluşturuyor. Bir sınır fark etmiyorsunuz, çünkü ortada bir sınır yok.</p>
<p>Ardından işe yarayıp yaramayacağından emin olmadığım bir şey yaptık: SDF yüzeylerinde çim. Dağıtma fonksiyonu, SDF hacminin her sütununda ilerliyor ve komşu vokseller arasındaki sıfır geçişlerini buluyor. SDF'nin negatiften pozitife geçtiği yerde bir yüzey vardır. Yüzey normali, alanın normalize edilmiş gradyanıdır: <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -1.238ex;" xmlns="http://www.w3.org/2000/svg" width="9.256ex" height="3.445ex" role="img" focusable="false" viewBox="0 -975.7 4091.1 1522.8" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mover"><g data-mml-node="mi"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(300,16) translate(-250 0)"><path data-c="5E" d="M112 560L249 694L257 686Q387 562 387 560L361 531Q359 532 303 581L250 627L195 580Q182 569 169 557T148 538L140 532Q138 530 125 546L112 560Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(877.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mfrac" transform="translate(1933.6,0)"><g data-mml-node="mrow" transform="translate(573.6,485) scale(0.707)"><g data-mml-node="mi"><path data-c="2207" d="M46 676Q46 679 51 683H781Q786 679 786 676Q786 674 617 326T444 -26Q439 -33 416 -33T388 -26Q385 -22 216 326T46 676ZM697 596Q697 597 445 597T193 596Q195 591 319 336T445 80L697 596Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(833,0)"><path data-c="1D719" d="M409 688Q413 694 421 694H429H442Q448 688 448 686Q448 679 418 563Q411 535 404 504T392 458L388 442Q388 441 397 441T429 435T477 418Q521 397 550 357T579 260T548 151T471 65T374 11T279 -10H275L251 -105Q245 -128 238 -160Q230 -192 227 -198T215 -205H209Q189 -205 189 -198Q189 -193 211 -103L234 -11Q234 -10 226 -10Q221 -10 206 -8T161 6T107 36T62 89T43 171Q43 231 76 284T157 370T254 422T342 441Q347 441 348 445L378 567Q409 686 409 688ZM122 150Q122 116 134 91T167 53T203 35T237 27H244L337 404Q333 404 326 403T297 395T255 379T211 350T170 304Q152 276 137 237Q122 191 122 150ZM500 282Q500 320 484 347T444 385T405 400T381 404H378L332 217L284 29Q284 27 285 27Q293 27 317 33T357 47Q400 66 431 100T475 170T494 234T500 282Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mrow" transform="translate(220,-370.3) scale(0.707)"><g data-mml-node="mo"><path data-c="2016" d="M133 736Q138 750 153 750Q164 750 170 739Q172 735 172 250T170 -239Q164 -250 152 -250Q144 -250 138 -244L137 -243Q133 -241 133 -179T132 250Q132 731 133 736ZM329 739Q334 750 346 750Q353 750 361 744L362 743Q366 741 366 679T367 250T367 -178T362 -243L361 -244Q355 -250 347 -250Q335 -250 329 -239Q327 -235 327 250T329 739Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(500,0)"><path data-c="2207" d="M46 676Q46 679 51 683H781Q786 679 786 676Q786 674 617 326T444 -26Q439 -33 416 -33T388 -26Q385 -22 216 326T46 676ZM697 596Q697 597 445 597T193 596Q195 591 319 336T445 80L697 596Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1333,0)"><path data-c="1D719" d="M409 688Q413 694 421 694H429H442Q448 688 448 686Q448 679 418 563Q411 535 404 504T392 458L388 442Q388 441 397 441T429 435T477 418Q521 397 550 357T579 260T548 151T471 65T374 11T279 -10H275L251 -105Q245 -128 238 -160Q230 -192 227 -198T215 -205H209Q189 -205 189 -198Q189 -193 211 -103L234 -11Q234 -10 226 -10Q221 -10 206 -8T161 6T107 36T62 89T43 171Q43 231 76 284T157 370T254 422T342 441Q347 441 348 445L378 567Q409 686 409 688ZM122 150Q122 116 134 91T167 53T203 35T237 27H244L337 404Q333 404 326 403T297 395T255 379T211 350T170 304Q152 276 137 237Q122 191 122 150ZM500 282Q500 320 484 347T444 385T405 400T381 404H378L332 217L284 29Q284 27 285 27Q293 27 317 33T357 47Q400 66 431 100T475 170T494 234T500 282Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1929,0)"><path data-c="2016" d="M133 736Q138 750 153 750Q164 750 170 739Q172 735 172 250T170 -239Q164 -250 152 -250Q144 -250 138 -244L137 -243Q133 -241 133 -179T132 250Q132 731 133 736ZM329 739Q334 750 346 750Q353 750 361 744L362 743Q366 741 366 679T367 250T367 -178T362 -243L361 -244Q355 -250 347 -250Q335 -250 329 -239Q327 -235 327 250T329 739Z" style="stroke-width: 3;"/></g></g><rect width="1917.6" height="60" x="120" y="220"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow data-mjx-texclass="ORD"><mover><mi>n</mi><mo stretchy="false">^</mo></mover></mrow><mo>=</mo><mfrac><mrow><mi mathvariant="normal">∇</mi><mi>ϕ</mi></mrow><mrow><mo data-mjx-texclass="OPEN" fence="false" stretchy="false">‖</mo><mi mathvariant="normal">∇</mi><mi>ϕ</mi><mo data-mjx-texclass="CLOSE" fence="false" stretchy="false">‖</mo></mrow></mfrac></math></mjx-assistive-mml></mjx-container>. Bu değer voksel farklarından hesaplanır; eğim ise dikeyden ölçülen açı olan <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="11.911ex" height="2.398ex" role="img" focusable="false" viewBox="0 -810 5264.4 1060" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="63" d="M370 305T349 305T313 320T297 358Q297 381 312 396Q317 401 317 402T307 404Q281 408 258 408Q209 408 178 376Q131 329 131 219Q131 137 162 90Q203 29 272 29Q313 29 338 55T374 117Q376 125 379 127T395 129H409Q415 123 415 120Q415 116 411 104T395 71T366 33T318 2T249 -11Q163 -11 99 53T34 214Q34 318 99 383T250 448T370 421T404 357Q404 334 387 320Z" transform="translate(892,0)" style="stroke-width: 3;"/><path data-c="63" d="M370 305T349 305T313 320T297 358Q297 381 312 396Q317 401 317 402T307 404Q281 408 258 408Q209 408 178 376Q131 329 131 219Q131 137 162 90Q203 29 272 29Q313 29 338 55T374 117Q376 125 379 127T395 129H409Q415 123 415 120Q415 116 411 104T395 71T366 33T318 2T249 -11Q163 -11 99 53T34 214Q34 318 99 383T250 448T370 421T404 357Q404 334 387 320Z" transform="translate(1336,0)" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(1780,0)" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(2280,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2674,0)"><path data-c="2061" d="" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2674,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(3063,0)"><g data-mml-node="mover"><g data-mml-node="mi"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(300,16) translate(-250 0)"><path data-c="5E" d="M112 560L249 694L257 686Q387 562 387 560L361 531Q359 532 303 581L250 627L195 580Q182 569 169 557T148 538L140 532Q138 530 125 546L112 560Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(3885.2,0)"><path data-c="22C5" d="M78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(4385.4,0)"><g data-mml-node="mover"><g data-mml-node="mi"><path data-c="1D466" d="M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(300.6,16) translate(-250 0)"><path data-c="5E" d="M112 560L249 694L257 686Q387 562 387 560L361 531Q359 532 303 581L250 627L195 580Q182 569 169 557T148 538L140 532Q138 530 125 546L112 560Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(4875.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>arccos</mi><mo data-mjx-texclass="NONE">⁡</mo><mo stretchy="false">(</mo><mrow data-mjx-texclass="ORD"><mover><mi>n</mi><mo stretchy="false">^</mo></mover></mrow><mo>⋅</mo><mrow data-mjx-texclass="ORD"><mover><mi>y</mi><mo stretchy="false">^</mo></mover></mrow><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container> değeridir. Yeterince yatıksa oraya çim yerleştirilir.</p>
<p>Spike 27'de SDF fırçasıyla bir mağara oyun. Spike 29'a geri döndüğünüzde mağara tavanının üzerinde çimler büyüdüğünü görürsünüz. Dağıtma kodu mağaranın ne olduğunu bilmiyor. Yalnızca doğru rakımda, uygun eğime sahip bir yüzey görüyor. Açık dünya sistemleri geliştirmeyi tatmin edici kılan türden bir beliren davranış bu.</p>
<p>Rüzgâr, TSL vertex shader'ındaki bir sinüs dalgası. Bu dalga, çimin V koordinatıyla modüle edildiği için uçlar sallanırken kökler sabit kalıyor. Hafif, güçlü ve kapalı seçenekleri arasında geçiş yapmak için V tuşuna basın. Rüzgâr tamamen vertex shader'ında çalıştığından, 80 bin kümenin tamamını sıfır CPU maliyetiyle aynı anda etkiliyor.</p>
<p>Spike 7'de 50 bin çim örneğini test etmiş ve sınıra ulaşmaktan endişelenmiştik. Spike 29; hesaplamalı arazi, dikiş birleştirme, çok malzemeli dokulama ve fırçaların üzerine 80 bin örnek çalıştırıyor. Daha az sayıda <code>InstancedMesh</code> çiziminde gruplamak, çim başına köşe sayısını azaltmaktan hâlâ daha önemli. Spike 7'den çıkardığımız ders geçerliliğini korudu.</p>
<p>Ertelediğimiz bir şey var: altındaki araziyi şekillendirdiğinizde çimler güncellenmiyor. Örnek matrisleri dağıtma anında ayarlanıyor. Bir tepeyi vadiye dönüştürürseniz, yeniden dağıtmak için G tuşuna basana kadar çimler havada asılı kalıyor. Bir spike için yeterince iyi. Üretim sürümünde kirli parçaların yeniden dağıtılması gerekecek.</p>
<h2 id="ilk-ayak-sesi" tabindex="-1">İlk ayak sesi <a class="header-anchor" href="#ilk-ayak-sesi" aria-label="Permalink to &quot;İlk ayak sesi&quot;"></a></h2>
<p>Spike 30, dönüp dönüp baktığım çalışma oldu.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/30-physics/" title="Spike 30 Arazi Fiziği" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/30-physics/" target="_blank">Spike 30'u yeni bir sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=30-physics">Kaynak kodunu görüntüle</a></p>
<p>Fizik kütüphanesi yok. 120 Hz sabit zaman adımında çalışan özel bir kapsül var. Üretim kod tabanı, bir web worker içinde Rapier kullanıyor (Spike 2 gecikmenin sorun olmadığını kanıtladı), ancak bu spike'ın çarpışma sorgularını doğrulaması gerekiyordu. Bir karakter yükseklik haritası arazisinde yürüyebilir, şekillendirilmiş SDF arazisine adım atabilir ve içinden düşmeden kalabilir mi?</p>
<p>Sistemin merkezinde <code>terrainQuery(x, y, z)</code> adlı bir fonksiyon bulunuyor. Bu fonksiyon, konumun MC'ye kilitlenmiş bir parçanın içinde olup olmadığını kontrol ediyor. İçindeyse CPU'daki SDF kopyasında trilineer enterpolasyon yapıyor ve yüzey normali olarak gradyanı döndürüyor. Değilse merkezi fark normaliyle yükseklik haritası sorgusu yapıyor. Karakter hangi arazi sisteminin üzerinde durduğunu bilmiyor. Yalnızca zemini soruyor ve bir yanıt alıyor.</p>
<p>SDF çarpışmasının zor olmasını bekliyordum. Kapsülün çevresinde yedi sonda noktası var: alt, orta, üst ve dört ana yöndeki ofset. <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="1.373ex" height="1.005ex" role="img" focusable="false" viewBox="0 -444 607 444" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D431" d="M227 0Q212 3 121 3Q40 3 28 0H21V62H117L245 213L109 382H26V444H34Q49 441 143 441Q247 441 265 444H274V382H246L281 339Q315 297 316 297Q320 297 354 341L389 382H352V444H360Q375 441 466 441Q547 441 559 444H566V382H471L355 246L504 63L545 62H586V0H578Q563 3 469 3Q365 3 347 0H338V62H366Q366 63 326 112T285 163L198 63L217 62H235V0H227Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">x</mi></mrow></math></mjx-assistive-mml></mjx-container> konumundaki bir sonda, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="8.519ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 3765.6 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D719" d="M409 688Q413 694 421 694H429H442Q448 688 448 686Q448 679 418 563Q411 535 404 504T392 458L388 442Q388 441 397 441T429 435T477 418Q521 397 550 357T579 260T548 151T471 65T374 11T279 -10H275L251 -105Q245 -128 238 -160Q230 -192 227 -198T215 -205H209Q189 -205 189 -198Q189 -193 211 -103L234 -11Q234 -10 226 -10Q221 -10 206 -8T161 6T107 36T62 89T43 171Q43 231 76 284T157 370T254 422T342 441Q347 441 348 445L378 567Q409 686 409 688ZM122 150Q122 116 134 91T167 53T203 35T237 27H244L337 404Q333 404 326 403T297 395T255 379T211 350T170 304Q152 276 137 237Q122 191 122 150ZM500 282Q500 320 484 347T444 385T405 400T381 404H378L332 217L284 29Q284 27 285 27Q293 27 317 33T357 47Q400 66 431 100T475 170T494 234T500 282Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(596,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(985,0)"><g data-mml-node="mi"><path data-c="1D431" d="M227 0Q212 3 121 3Q40 3 28 0H21V62H117L245 213L109 382H26V444H34Q49 441 143 441Q247 441 265 444H274V382H246L281 339Q315 297 316 297Q320 297 354 341L389 382H352V444H360Q375 441 466 441Q547 441 559 444H566V382H471L355 246L504 63L545 62H586V0H578Q563 3 469 3Q365 3 347 0H338V62H366Q366 63 326 112T285 163L198 63L217 62H235V0H227Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1592,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2258.8,0)"><path data-c="3C" d="M694 -11T694 -19T688 -33T678 -40Q671 -40 524 29T234 166L90 235Q83 240 83 250Q83 261 91 266Q664 540 678 540Q681 540 687 534T694 519T687 505Q686 504 417 376L151 250L417 124Q686 -4 687 -5Q694 -11 694 -19Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(3314.6,0)"><path data-c="1D45F" d="M21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q161 442 183 430T214 408T225 388Q227 382 228 382T236 389Q284 441 347 441H350Q398 441 422 400Q430 381 430 363Q430 333 417 315T391 292T366 288Q346 288 334 299T322 328Q322 376 378 392Q356 405 342 405Q286 405 239 331Q229 315 224 298T190 165Q156 25 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>ϕ</mi><mo stretchy="false">(</mo><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">x</mi></mrow><mo stretchy="false">)</mo><mo>&lt;</mo><mi>r</mi></math></mjx-assistive-mml></mjx-container> olduğunda yüzeye nüfuz ediyor. Nüfuz derinliği <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="12.423ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 5491 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D45D" d="M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(780.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1836.6,0)"><path data-c="1D45F" d="M21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q161 442 183 430T214 408T225 388Q227 382 228 382T236 389Q284 441 347 441H350Q398 441 422 400Q430 381 430 363Q430 333 417 315T391 292T366 288Q346 288 334 299T322 328Q322 376 378 392Q356 405 342 405Q286 405 239 331Q229 315 224 298T190 165Q156 25 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2509.8,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(3510,0)"><path data-c="1D719" d="M409 688Q413 694 421 694H429H442Q448 688 448 686Q448 679 418 563Q411 535 404 504T392 458L388 442Q388 441 397 441T429 435T477 418Q521 397 550 357T579 260T548 151T471 65T374 11T279 -10H275L251 -105Q245 -128 238 -160Q230 -192 227 -198T215 -205H209Q189 -205 189 -198Q189 -193 211 -103L234 -11Q234 -10 226 -10Q221 -10 206 -8T161 6T107 36T62 89T43 171Q43 231 76 284T157 370T254 422T342 441Q347 441 348 445L378 567Q409 686 409 688ZM122 150Q122 116 134 91T167 53T203 35T237 27H244L337 404Q333 404 326 403T297 395T255 379T211 350T170 304Q152 276 137 237Q122 191 122 150ZM500 282Q500 320 484 347T444 385T405 400T381 404H378L332 217L284 29Q284 27 285 27Q293 27 317 33T357 47Q400 66 431 100T475 170T494 234T500 282Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4106,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(4495,0)"><g data-mml-node="mi"><path data-c="1D431" d="M227 0Q212 3 121 3Q40 3 28 0H21V62H117L245 213L109 382H26V444H34Q49 441 143 441Q247 441 265 444H274V382H246L281 339Q315 297 316 297Q320 297 354 341L389 382H352V444H360Q375 441 466 441Q547 441 559 444H566V382H471L355 246L504 63L545 62H586V0H578Q563 3 469 3Q365 3 347 0H338V62H366Q366 63 326 112T285 163L198 63L217 62H235V0H227Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(5102,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>p</mi><mo>=</mo><mi>r</mi><mo>−</mo><mi>ϕ</mi><mo stretchy="false">(</mo><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">x</mi></mrow><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container>, dışarı itme yönü ise alan gradyanı <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -1.238ex;" xmlns="http://www.w3.org/2000/svg" width="9.256ex" height="3.445ex" role="img" focusable="false" viewBox="0 -975.7 4091.1 1522.8" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mover"><g data-mml-node="mi"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(300,16) translate(-250 0)"><path data-c="5E" d="M112 560L249 694L257 686Q387 562 387 560L361 531Q359 532 303 581L250 627L195 580Q182 569 169 557T148 538L140 532Q138 530 125 546L112 560Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(877.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mfrac" transform="translate(1933.6,0)"><g data-mml-node="mrow" transform="translate(573.6,485) scale(0.707)"><g data-mml-node="mi"><path data-c="2207" d="M46 676Q46 679 51 683H781Q786 679 786 676Q786 674 617 326T444 -26Q439 -33 416 -33T388 -26Q385 -22 216 326T46 676ZM697 596Q697 597 445 597T193 596Q195 591 319 336T445 80L697 596Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(833,0)"><path data-c="1D719" d="M409 688Q413 694 421 694H429H442Q448 688 448 686Q448 679 418 563Q411 535 404 504T392 458L388 442Q388 441 397 441T429 435T477 418Q521 397 550 357T579 260T548 151T471 65T374 11T279 -10H275L251 -105Q245 -128 238 -160Q230 -192 227 -198T215 -205H209Q189 -205 189 -198Q189 -193 211 -103L234 -11Q234 -10 226 -10Q221 -10 206 -8T161 6T107 36T62 89T43 171Q43 231 76 284T157 370T254 422T342 441Q347 441 348 445L378 567Q409 686 409 688ZM122 150Q122 116 134 91T167 53T203 35T237 27H244L337 404Q333 404 326 403T297 395T255 379T211 350T170 304Q152 276 137 237Q122 191 122 150ZM500 282Q500 320 484 347T444 385T405 400T381 404H378L332 217L284 29Q284 27 285 27Q293 27 317 33T357 47Q400 66 431 100T475 170T494 234T500 282Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mrow" transform="translate(220,-370.3) scale(0.707)"><g data-mml-node="mo"><path data-c="2016" d="M133 736Q138 750 153 750Q164 750 170 739Q172 735 172 250T170 -239Q164 -250 152 -250Q144 -250 138 -244L137 -243Q133 -241 133 -179T132 250Q132 731 133 736ZM329 739Q334 750 346 750Q353 750 361 744L362 743Q366 741 366 679T367 250T367 -178T362 -243L361 -244Q355 -250 347 -250Q335 -250 329 -239Q327 -235 327 250T329 739Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(500,0)"><path data-c="2207" d="M46 676Q46 679 51 683H781Q786 679 786 676Q786 674 617 326T444 -26Q439 -33 416 -33T388 -26Q385 -22 216 326T46 676ZM697 596Q697 597 445 597T193 596Q195 591 319 336T445 80L697 596Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1333,0)"><path data-c="1D719" d="M409 688Q413 694 421 694H429H442Q448 688 448 686Q448 679 418 563Q411 535 404 504T392 458L388 442Q388 441 397 441T429 435T477 418Q521 397 550 357T579 260T548 151T471 65T374 11T279 -10H275L251 -105Q245 -128 238 -160Q230 -192 227 -198T215 -205H209Q189 -205 189 -198Q189 -193 211 -103L234 -11Q234 -10 226 -10Q221 -10 206 -8T161 6T107 36T62 89T43 171Q43 231 76 284T157 370T254 422T342 441Q347 441 348 445L378 567Q409 686 409 688ZM122 150Q122 116 134 91T167 53T203 35T237 27H244L337 404Q333 404 326 403T297 395T255 379T211 350T170 304Q152 276 137 237Q122 191 122 150ZM500 282Q500 320 484 347T444 385T405 400T381 404H378L332 217L284 29Q284 27 285 27Q293 27 317 33T357 47Q400 66 431 100T475 170T494 234T500 282Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1929,0)"><path data-c="2016" d="M133 736Q138 750 153 750Q164 750 170 739Q172 735 172 250T170 -239Q164 -250 152 -250Q144 -250 138 -244L137 -243Q133 -241 133 -179T132 250Q132 731 133 736ZM329 739Q334 750 346 750Q353 750 361 744L362 743Q366 741 366 679T367 250T367 -178T362 -243L361 -244Q355 -250 347 -250Q335 -250 329 -239Q327 -235 327 250T329 739Z" style="stroke-width: 3;"/></g></g><rect width="1917.6" height="60" x="120" y="220"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow data-mjx-texclass="ORD"><mover><mi>n</mi><mo stretchy="false">^</mo></mover></mrow><mo>=</mo><mfrac><mrow><mi mathvariant="normal">∇</mi><mi>ϕ</mi></mrow><mrow><mo data-mjx-texclass="OPEN" fence="false" stretchy="false">‖</mo><mi mathvariant="normal">∇</mi><mi>ϕ</mi><mo data-mjx-texclass="CLOSE" fence="false" stretchy="false">‖</mo></mrow></mfrac></math></mjx-assistive-mml></mjx-container>. Kapsülün yüzeye yeniden girmesini önlemek için hız, içeri doğru bileşenini sıfırlayacak biçimde izdüşürülüyor:</p>
<mjx-container tabindex="0" class="MathJax" jax="SVG" display="true" style="direction: ltr; display: block; text-align: center; margin: 1em 0; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="17.018ex" height="2.398ex" role="img" focusable="false" viewBox="0 -810 7521.9 1060" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msup"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D42F" d="M401 444Q413 441 495 441Q568 441 574 444H580V382H510L409 156Q348 18 339 6Q331 -4 320 -4Q318 -4 313 -4T303 -3H288Q273 -3 264 12T221 102Q206 135 197 156L96 382H26V444H34Q49 441 145 441Q252 441 270 444H279V382H231L284 264Q335 149 338 149Q338 150 389 264T442 381Q442 382 418 382H394V444H401Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(640,413) scale(0.707)"><path data-c="2032" d="M79 43Q73 43 52 49T30 61Q30 68 85 293T146 528Q161 560 198 560Q218 560 240 545T262 501Q262 496 260 486Q259 479 173 263T84 45T79 43Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1162.2,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(2218,0)"><g data-mml-node="mi"><path data-c="1D42F" d="M401 444Q413 441 495 441Q568 441 574 444H580V382H510L409 156Q348 18 339 6Q331 -4 320 -4Q318 -4 313 -4T303 -3H288Q273 -3 264 12T221 102Q206 135 197 156L96 382H26V444H34Q49 441 145 441Q252 441 270 444H279V382H231L284 264Q335 149 338 149Q338 150 389 264T442 381Q442 382 418 382H394V444H401Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3047.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4047.5,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(4436.5,0)"><g data-mml-node="mi"><path data-c="1D42F" d="M401 444Q413 441 495 441Q568 441 574 444H580V382H510L409 156Q348 18 339 6Q331 -4 320 -4Q318 -4 313 -4T303 -3H288Q273 -3 264 12T221 102Q206 135 197 156L96 382H26V444H34Q49 441 145 441Q252 441 270 444H279V382H231L284 264Q335 149 338 149Q338 150 389 264T442 381Q442 382 418 382H394V444H401Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(5265.7,0)"><path data-c="22C5" d="M78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(5765.9,0)"><g data-mml-node="mover"><g data-mml-node="mi"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(300,16) translate(-250 0)"><path data-c="5E" d="M112 560L249 694L257 686Q387 562 387 560L361 531Q359 532 303 581L250 627L195 580Q182 569 169 557T148 538L140 532Q138 530 125 546L112 560Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(6365.9,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(6754.9,0)"><g data-mml-node="mspace"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(6921.9,0)"><g data-mml-node="mover"><g data-mml-node="mi"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(300,16) translate(-250 0)"><path data-c="5E" d="M112 560L249 694L257 686Q387 562 387 560L361 531Q359 532 303 581L250 627L195 580Q182 569 169 557T148 538L140 532Q138 530 125 546L112 560Z" style="stroke-width: 3;"/></g></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="block" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; overflow: hidden; width: 100%;"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><msup><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">v</mi></mrow><mo data-mjx-alternate="1">′</mo></msup><mo>=</mo><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">v</mi></mrow><mo>−</mo><mo stretchy="false">(</mo><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">v</mi></mrow><mo>⋅</mo><mrow data-mjx-texclass="ORD"><mover><mi>n</mi><mo stretchy="false">^</mo></mover></mrow><mo stretchy="false">)</mo><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mrow data-mjx-texclass="ORD"><mover><mi>n</mi><mo stretchy="false">^</mo></mover></mrow></math></mjx-assistive-mml></mjx-container><p>Böylece yalnızca yüzey boyunca kayan bileşen kalıyor. Bu bir fizik motoru değil. Geometri sorguları ve basit tepkilerden ibaret. Ancak mağaraları, çıkıntıları ve şekillendirilmiş tünelleri, şekil başına tek bir özel durum kodu olmadan işliyor. On saniye önce oyduğunuz bir mağaraya girdiğinizde kapsül tavanın hatlarını tam olarak takip ediyor.</p>
<p>Hareket modeli pratik bir yaklaşımla başladı, sonra eğlenceli hâle geldi. Yürüme, koşma, depar, zıplama ve 45 derecenin üzerindeki eğimlerde kayma. Ardından BotW tarzı bir planör ekledim ve spike kapatmak istemediğim bir şeye dönüştü.</p>
<p>Havadayken Space tuşuna basın. Yerçekimi -30'dan -4'e düşer. Düşüş hızı -3 ile sınırlandırılır. Kapsülden, ölçek enterpolasyonuyla bir delta kanat mesh'i açılır. Sola yatış yaptığınızda kanat eğilir. Kapsülün baktığı yön, hız vektörüne otomatik olarak hizalanır; böylece her zaman gittiğiniz yöne bakarsınız. Düşmek için Space tuşunu bırakın. Yere indiğinizde yeniden koşmaya başlarsınız.</p>
<p>Kamera geri çekilerek üçüncü şahıs görünümüne geçiyor (P ile değiştirin). Yaw yumuşatmasıyla oyuncuyu arkadan takip ediyor. Oyuncudan kameraya doğru yapılan bir ışın yürüyüşü, araziyi 20 adımda test ediyor. Bir mağaraya uçtuğunuzda kamera kolu kayaların içinden geçmek yerine yumuşakça kısalıyor. Diğer taraftan çıktığınızda yeniden uzuyor.</p>
<p>Spike'ı yapmaya değer kılan an şuydu: yükseklik haritası fırçasıyla yüksek bir uçurum şekillendirin. Üçüncü şahıs kamerasına geçin. Kenara doğru koşun. Zıplayın. Planörü açın. Aşağınızda Spike 29'da yetiştirdiğiniz çimler dalgalanırken, uçurum yüzeyinde Spike 28'in kaya dokusu görünürken ve Transvoxel dikişleri her parça sınırında sağlam kalırken az önce şekillendirdiğiniz arazinin üzerinde sola yatış yapın. Karşı tarafa inin. Her şey tek bir tarayıcı sekmesinde birlikte çalışıyor.</p>
<h2 id="kendi-ayaklarınızın-altını-sekillendirmek" tabindex="-1">Kendi ayaklarınızın altını şekillendirmek <a class="header-anchor" href="#kendi-ayaklarınızın-altını-sekillendirmek" aria-label="Permalink to &quot;Kendi ayaklarınızın altını şekillendirmek&quot;"></a></h2>
<p>Emin olmadığım bir şey vardı: karakterin üzerinde durduğu araziyi şekillendirdiğinizde ne olur? Yükseklik haritasındaki değişiklikler, CPU tamponunu doğrudan okuduğu için <code>terrainQuery()</code> fonksiyonuna anında yansıyor. SDF değişiklikleri de CPU'daki SDF kopyasına aktarılıyor. Kapsül, nüfuzu bir sonraki fizik tikinde çözüyor; 120 Hz'de bu, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.816ex;" xmlns="http://www.w3.org/2000/svg" width="9.304ex" height="2.773ex" role="img" focusable="false" viewBox="0 -864.9 4112.2 1225.5" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mfrac"><g data-mml-node="mn" transform="translate(573.6,394) scale(0.707)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(220,-345) scale(0.707)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1000,0)" style="stroke-width: 3;"/></g><rect width="1260.7" height="60" x="120" y="220"/></g><g data-mml-node="mo" transform="translate(1778.4,0)"><path data-c="2248" d="M55 319Q55 360 72 393T114 444T163 472T205 482Q207 482 213 482T223 483Q262 483 296 468T393 413L443 381Q502 346 553 346Q609 346 649 375T694 454Q694 465 698 474T708 483Q722 483 722 452Q722 386 675 338T555 289Q514 289 468 310T388 357T308 404T224 426Q164 426 125 393T83 318Q81 289 69 289Q55 289 55 319ZM55 85Q55 126 72 159T114 210T163 238T205 248Q207 248 213 248T223 249Q262 249 296 234T393 179L443 147Q502 112 553 112Q609 112 649 141T694 220Q694 249 708 249T722 217Q722 153 675 104T555 55Q514 55 468 76T388 123T308 170T224 192Q164 192 125 159T83 84Q80 55 69 55Q55 55 55 85Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2834.2,0)"><path data-c="38" d="M70 417T70 494T124 618T248 666Q319 666 374 624T429 515Q429 485 418 459T392 417T361 389T335 371T324 363L338 354Q352 344 366 334T382 323Q457 264 457 174Q457 95 399 37T249 -22Q159 -22 101 29T43 155Q43 263 172 335L154 348Q133 361 127 368Q70 417 70 494ZM286 386L292 390Q298 394 301 396T311 403T323 413T334 425T345 438T355 454T364 471T369 491T371 513Q371 556 342 586T275 624Q268 625 242 625Q201 625 165 599T128 534Q128 511 141 492T167 463T217 431Q224 426 228 424L286 386ZM250 21Q308 21 350 55T392 137Q392 154 387 169T375 194T353 216T330 234T301 253T274 270Q260 279 244 289T218 306L210 311Q204 311 181 294T133 239T107 157Q107 98 150 60T250 21Z" style="stroke-width: 3;"/><path data-c="2E" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z" transform="translate(778,0)" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mfrac><mn>1</mn><mn>120</mn></mfrac><mo>≈</mo><mn>8.3</mn></math></mjx-assistive-mml></mjx-container> ms içinde gerçekleşiyor.</p>
<p>Öylece çalışıyor. Oyuncunun altındaki zemini yükselttiğinizde oyuncu da onunla birlikte yükseliyor. Zemini oyduğunuzda düşüyor. Özel bir işleme gerek yok. Fizik sistemi yeterince hızlı çalıştığı için tek karelik arazi değişiklikleri hiçbir zaman büyük nüfuzlara yol açmıyor. Bu, zaman adımı için 120 Hz seçmemizin mutlu bir tesadüfüydü. Bu değeri akıcı hareket için seçmiştik; arazi düzenlemeyi de hiçbir ek maliyet olmadan güvenli hâle getirdi.</p>
<h2 id="_30-spike-sonra" tabindex="-1">30 spike sonra <a class="header-anchor" href="#_30-spike-sonra" aria-label="Permalink to &quot;30 spike sonra&quot;"></a></h2>
<p>Bu seriye düz bir yükseklik haritası ve 500 küple başladık. Şimdi hacimsel mağaralara, Transvoxel dikiş birleştirmesine, yüzey şekline tepki veren çok malzemeli dokulamaya, rüzgârda salınan 80.000 çim kümesine ve tüm bunların üzerinde yürüyen, depar atan, zıplayan ve süzülen bir karaktere sahip şekillendirilmiş bir arazimiz var.</p>
<p>Bunların hiçbiri henüz üretim sürümünde değil. <code>world/client/</code> kod tabanı hâlâ basit yükseklik haritası parçalarıyla WebGL üzerinde çalışıyor. Bu 30 spike'taki her şey bağımsız HTML sayfalarında yaşıyor. Sırada entegrasyon işi var: <code>WebGPURenderer</code> sistemine geçmek, hibrit HM/MC politikasını parça yöneticisine bağlamak ve fırça ile malzeme sistemlerini çok oyunculu yapıya entegre etmek.</p>
<p>Ancak render sistemi artık riskli kısım değil. Açık sorular veri akışıyla ilgili: düzenlemelerin kalıcı hâle getirilmesi, fırça darbelerinin ağ üzerinden senkronizasyonu ve iş birliğine dayalı şekillendirme. Yani üçgenler arasında değil, oyuncular arasında gerçekleşen şeyler.</p>
<p>Bu seriyi 1. bölümden beri takip ediyorsanız, dağınık kısımlarda da bizimle kaldığınız için teşekkürler. Seriyi yeni keşfettiyseniz <a href="/tr/blog/2026-02-25-open-world-browser-part-01-risk-first.html">1. bölüme</a> dönün. Dersler yanlış dönüşlerde saklıdır.</p>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>TSL (Three Shading Language).</strong> Three.js'in WebGPU renderer için geliştirilmiş, düğüm tabanlı shader sistemi. Malzemeler, JavaScript'te fonksiyon bileşimi kullanılarak düğümlerden (<code>positionWorld</code>, <code>normalWorld</code>, <code>smoothstep</code>, <code>triplanarTexture</code>) oluşturulur. Shader grafiği çalışma zamanında WGSL'ye derlenir. TSL, WebGPU hedeflerinde ham GLSL <code>ShaderMaterial</code> kullanımının yerini alır ve standart Three.js malzeme özellikleriyle (ışıklar, gölgeler, sis) özel parça başına mantık arasında birlikte çalışabilirlik sağlar.</p>
<p><strong>Triplanar eşleme.</strong> Bir dokuyu üç kez (XY, XZ ve YZ düzlemlerinde) örnekleyen ve örnekleri yüzey normalinin yönüne göre harmanlayan bir doku izdüşüm tekniği. Bu teknik, rastgele mesh geometrilerindeki UV gerilmesini ortadan kaldırır. Üçgenlerin anlamlı UV koordinatlarına sahip olmadığı marching cubes çıktıları için bu kritik öneme sahiptir. TSL, yerleşik bir düğüm olarak <code>triplanarTexture()</code> sağlar.</p>
<p><strong>Çapraz dörtgen çimlerle örneklenmiş bitki örtüsü.</strong> Her çim kümesi, 60 derecelik açılarla kesişen 3 dörtgenden oluşur ve her bakış yönünden hacimli görünür. Dörtgen başına 4 dikey segment, rüzgâr animasyonu için yumuşak bükülmeye olanak tanır. Tüm alan, parça başına tek bir <code>InstancedMesh</code> olarak render edilir. Kapasite %25 fazla ayrılır; böylece arazi düzenlendiğinde yeni örnekler GPU tamponunu yeniden ayırmadan rezerve edilmiş yuvalara yerleştirilebilir. <a href="/tr/guides/landscape-generation-browser.html#vegetation-and-foliage">Bitki örtüsüyle ilgili peyzaj oluşturma rehberimize</a> bakın.
<strong>Kapsül ve SDF çarpışması.</strong> Fizik motoru olmadan hacimsel araziyle karakter çarpışması. Kapsül, birden fazla noktada SDF'e karşı test edilir. Alan değerinin kapsül yarıçapından küçük olduğu yerlerde gradyan dışa dönük normali, aradaki fark ise iç içe geçme derinliğini verir. Bu yaklaşım mağaraları, çıkıntıları ve tünelleri şekle özgü kod gerektirmeden işler. Bkz. <a href="/tr/guides/landscape-generation-browser.html#physics-on-sdf-terrain">SDF arazi çarpışmaları</a>.</p>
<p><strong>Sabit zaman adımlı karakter kontrolcüsü.</strong> Fizik, kare hızından bağımsız olarak 120 Hz'de ilerler; gerçek zamanı biriktirir ve sabit boyutlu adımlarla işler. Maksimum alt adım sayısı, yavaş karelerde ölüm sarmalını önler. Zemine yapışma, eğimlerde ilerlerken kapsülün yüzeyle temasını korur. Sabit zaman adımı, gelecekteki çok oyunculu tekrar oynatımı için deterministik davranış sağlar.</p>
<hr>
<p>29 bölümün 14. bölümü.
Önceki: <a href="/tr/blog/2026-04-13-open-world-browser-part-13-terrain-sculpting.html">13. Bölüm - Arazi şekillendirme ve matematik fonksiyonunun sonu</a>
Sonraki: <a href="/tr/blog/2026-04-13-open-world-browser-part-15-multiplayer-and-water.html">15. Bölüm - Temel sürümü değiştir, ardından eşitle</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya oluşturmak, bölüm 15: Temeli değiştir, sonra senkronize et]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-04-13-open-world-browser-part-15-multiplayer-and-water</link>
            <guid>https://app.cinevva.com/tr/blog/2026-04-13-open-world-browser-part-15-multiplayer-and-water</guid>
            <pubDate>Mon, 13 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[31-32. denemelerde eski dünyayı en iyi denemeyle değiştirmeye karar verdik, ardından fırça parametrelerini yeniden oynatmaya dayalı çok oyunculu sistemi doğruladık ve yüzme mekaniğine sahip bir okyanus ekledik.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-olusturmak-bolum-15-temeli-degistir-sonra-senkronize-et" tabindex="-1">Tarayıcıda açık dünya oluşturmak, bölüm 15: Temeli değiştir, sonra senkronize et <a class="header-anchor" href="#tarayıcıda-acık-dunya-olusturmak-bolum-15-temeli-degistir-sonra-senkronize-et" aria-label="Permalink to &quot;Tarayıcıda açık dünya oluşturmak, bölüm 15: Temeli değiştir, sonra senkronize et&quot;"></a></h1>
<p><em>Yazan: <a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Rehber, denemenin ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p>İlk on dört bölüm, 1'den 30'a kadar olan denemeleri ele aldı. Bu süreç, gerçek zamanlı şekillendirilebilen bir arazi sistemi ile üzerinde yürüyebilen, süzülebilen ve düşebilen bir karakterle sona erdi. Bu bölüm, seriye 31. denemeden devam ediyor ve vermemiz gereken ilk karar teknik değildi. Tüm bu deneme koduyla ne yapacağımıza karar vermemiz gerekiyordu.</p>
<h2 id="geri-tasımak-yerine-degistir-kararı" tabindex="-1">&quot;Geri taşımak yerine değiştir&quot; kararı <a class="header-anchor" href="#geri-tasımak-yerine-degistir-kararı" aria-label="Permalink to &quot;&quot;Geri taşımak yerine değiştir&quot; kararı&quot;"></a></h2>
<p>Her biri ayrı bir kavramı doğrulayan 30 bağımsız HTML dosyamız vardı ama bunlar arasında hiçbir entegrasyon yoktu. Üretimdeki <code>world/client/</code> hâlâ eski teknoloji yığınını kullanıyordu: WebGL, basit bir yükseklik haritası, 75 satırlık bir karakter denetleyicisi ve dokuz mesaj türüne sahip bir MessagePack protokolü. Düzenleme, WebGPU, materyal veya bitki örtüsü yoktu.</p>
<p>Bariz plan, deneme sonuçlarını üretim kod tabanına tek tek geri taşımaktı. Bu planı çöpe attık. 30. deneme; arazi, fizik, materyaller, bitki örtüsü ve kamera açısından <code>world/client/</code> sisteminin ulaştığı her şeyden zaten daha iyiydi. Bunları eski WebGL koduna geri taşımak, bütün süreç boyunca o kodla mücadele etmek anlamına gelecekti. Bu nedenle dünya uygulamasını en başarılı denemeyle değiştirmeye ve buradan ilerlemeye karar verdik. 30. deneme yeni temel oldu ve <code>world/client/</code> artık kullanılmayan koda dönüştü.</p>
<p>Bu karar, kalan çalışmayı yeniden çerçeveledi. &quot;Harika bir tek oyunculu teknoloji demosundan&quot; &quot;ürüne&quot; geçmek için çok oyunculu desteğe, kalıcılığa, sonsuz dünya akışına ve nesne yerleştirmeye ihtiyacımız vardı. İlk sıraya çok oyunculu arazi senkronizasyonunu koyduk çünkü mimariyi şekillendiren konu buydu. Yanıtladığı soruyu sormak kolay, yanlış yanıtlamanın bedeliyse yüksekti: Oyuncu A araziyi şekillendirdiğinde ağ üzerinden gerçekte ne gönderilecek?</p>
<h2 id="piksel-senkronizasyonu-degil-fırca-parametrelerini-yeniden-oynatma" tabindex="-1">Piksel senkronizasyonu değil, fırça parametrelerini yeniden oynatma <a class="header-anchor" href="#piksel-senkronizasyonu-degil-fırca-parametrelerini-yeniden-oynatma" aria-label="Permalink to &quot;Piksel senkronizasyonu değil, fırça parametrelerini yeniden oynatma&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/31-multiplayer-sync/" title="31. Deneme: Çok Oyunculu Arazi Senkronizasyonu" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/31-multiplayer-sync/" target="_blank">31. denemeyi yeni sekmede açın ↗</a> · <a href="/tr/blog/spike-source?spike=31-multiplayer-sync">Kaynak kodunu görüntüleyin</a></p>
<p>Tek bir satır ağ kodu yazmadan önce, bir fırça darbesinin tam olarak ne yaptığını izledik. Yükseklik haritası fırçası, CPU üzerindeki bir <code>Float32Array</code> içinde imlecin çevresindeki yarıçapı dolaşıyor, yumuşak geçişli bir düşüş uyguluyor ve ardından yükseltiyor, alçaltıyor, yumuşatıyor ya da düzleştiriyor. SDF fırçası da aynı işlemi 3B ortamda küresel bir voksel alanı üzerinde yapıyor. Her iki yol da saf CPU dizi matematiğinden oluşuyor. Döngüde GPU hesaplaması, rastlantısallık veya deterministik olmayan kayan nokta işlemi yok. Aynı girdi dizisi ve aynı parametreler, her makinede aynı çıktıyı üretiyor.</p>
<p>İşin püf noktası bu. Düzenlenmiş araziyi göndermiyoruz. Her fırça darbesi adımında 56 baytlık fırça parametrelerini gönderiyoruz ve her istemci aynı deterministik fonksiyonu yeniden çalıştırıyor. Senkronizasyon protokolünde dört mesaj türü var: eş keşfi, <code>{op, wx, wy, wz, radius, strength, flattenTarget}</code> biçimindeki fırça mesajı ve 20Hz frekansındaki oyuncu konumu mesajı.</p>
<p>Denemede sunucuyu tamamen atlayıp tarayıcının aynı kaynaktan açılan sekmeler arasında mesajlaşmayı sağlayan <code>BroadcastChannel</code> API'sini kullandık. İki sekme açtığınızda sıfır altyapıyla birbirleriyle iletişim kuruyorlar. Böylece senkronizasyon sorununu gecikme, kimlik doğrulama ve Durable Object bağlantılarından ayırdık. Parametreleri yeniden oynatma sekmeler arasında yakınsıyorsa WebSocket üzerinden de yakınsar.</p>
<p>Yeniden oynatmanın ayrışabileceği tek yer, sıraya bağlı işlemlerdir. Yükseltme ve alçaltma değişmeli işlemlerdir; dolayısıyla <code>val + strength * falloff</code>, önce kimin uyguladığından bağımsız olarak aynı sonuca ulaşır. Yumuşatma ve düzleştirme komşu değerleri okur. Bu yüzden iki istemci aynı anda tam olarak aynı noktayı yumuşatırsa her adımda milimetrenin küçük kesirleri kadar sapma oluşabilir. Pratikte bu durum hiç yaşanmıyor ve üretimdeki çözüm de şimdiden belli: Düzenlemeleri DO üzerinden yönlendirmek, monotonik bir sıra numarası atamasını sağlamak, istemcide iyimser biçimde uygulamak ve yetkili sıra farklıysa sıralamayı düzeltmek. Bu, klasik iyimser eşzamanlılıktır ve DO zaten doğal bir serileştirme noktasıdır.</p>
<h2 id="surekli-kaybolan-es-kapsulu" tabindex="-1">Sürekli kaybolan eş kapsülü <a class="header-anchor" href="#surekli-kaybolan-es-kapsulu" aria-label="Permalink to &quot;Sürekli kaybolan eş kapsülü&quot;"></a></h2>
<p>Düzenlemeler ilk denemede senkronize oldu. Uzak oyuncunun kapsülü ise olmadı. Diğer sekmede görünüp kayboluyordu ve kalıcı hâle gelmesi için üç ayrı hatayı düzeltmemiz gerekti.</p>
<p>Kapsül dünya orijininde oluşturuluyordu; burası arazinin altında kalıyordu çünkü <code>join</code> mesajı herhangi bir konum verisinden önce ulaşıyordu. Çözüm: Başlangıçta gizlemek ve ilk konum güncellemesinde göstermek. Konum yayını render döngüsünün içindeydi ve Chrome, odakta olmayan sekmelerde <code>requestAnimationFrame</code> çağrılarını yavaşlatıyordu. Bu nedenle diğer sekmenin güncellik kontrolü eşi kaldırıyor, sonraki mesaj da onu yeniden oluşturuyordu. Çözüm: Yayını, görünür sekmelerde yavaşlatılmayan bir <code>setInterval</code> içine taşımak. Ayrıca güncellik zaman aşımı fazla agresif bir değer olan 5 saniyeydi ve herhangi bir GC duraklamasında tetikleniyordu. Çözüm: Süreyi 30 saniyeye çıkarmak ve normal kapanışlarda temiz <code>leave</code> mesajına güvenmek.</p>
<h2 id="kalıcılık-ve-sonradan-katılım-aynı-format" tabindex="-1">Kalıcılık ve sonradan katılım, aynı format <a class="header-anchor" href="#kalıcılık-ve-sonradan-katılım-aynı-format" aria-label="Permalink to &quot;Kalıcılık ve sonradan katılım, aynı format&quot;"></a></h2>
<p>Kalıcılığı yeni bir denemeye ayırmak yerine aynı denemeye dâhil ettik çünkü hedef ister IndexedDB ister başka bir sekme olsun, serileştirme formatı aynıydı. Bir anlık görüntü; tam yükseklik haritasından (129×129 boyutunda bir <code>Float32Array</code>, yaklaşık 66 KB), yalnızca düzenlenmiş SDF parçalarından (her biri <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.05ex;" xmlns="http://www.w3.org/2000/svg" width="3.25ex" height="2.003ex" role="img" focusable="false" viewBox="0 -863.3 1436.6 885.3" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msup"><g data-mml-node="mn"><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" style="stroke-width: 3;"/><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" transform="translate(500,0)" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(1033,393.1) scale(0.707)"><path data-c="33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mn>65</mn><mn>3</mn></msup></math></mjx-assistive-mml></mjx-container>, yaklaşık 1,1 MB) ve marching-cubes moduna kilitlenmiş parça kimliklerinin listesinden oluşuyor. Gecikmeli kaydetme işlemi, son düzenlemeden iki saniye sonra IndexedDB'ye yazıyor. Yükleme sırasında prosedürel arazi eşzamanlı olarak oluşturuluyor, ardından kaydedilmiş durum ilk anlamlı kareden önce onun üzerine yazılıyor. Sonradan katılım da tamamen aynı baytları yeniden kullanıyor: Yeni bir sekme katıldığında, düzenlemelere sahip mevcut bir sekme durumunu serileştirip yeni gelene özel olarak gönderiyor ve beş dakika önce şekillendirdiğiniz dağ onun ekranında beliriyor.</p>
<p>İlk kalıcılık testi güzel bir sıralama hatasını ortaya çıkardı. Çimler başlangıçta prosedürel yükseklikler kullanılarak eşzamanlı biçimde dağıtılıyor ancak IndexedDB'den geri yükleme eşzamansız gerçekleşip daha sonra yükseklik haritasının üzerine yazıyor. Sonuç olarak her çim yaprağı havada kalıyor ya da zemine gömülüyordu. Çözüm, her örneğin altındaki yüksekliği yeniden örnekleyen ve artık uygun olmayan bir eğimde ya da rakımda bulunan yaprakları gizleyen bir <code>refreshAllGrass()</code> geçişidir. Aynı fonksiyon hem yüklemeye hem de sonradan katılıma hizmet ediyor.</p>
<h2 id="egim-macerası" tabindex="-1">Eğim macerası <a class="header-anchor" href="#egim-macerası" aria-label="Permalink to &quot;Eğim macerası&quot;"></a></h2>
<p>Şekillendirilmiş arazi, pürüzsüz prosedürel temelden daha engebeliydi ve eski arazinin asla ortaya çıkaramadığı üç fizik hatasını açığa çıkardı. Doğrudan yokuş yukarı yürümek kapsülün yana kaymasına neden oluyordu. Bunun nedeni, hareketi zemine teğet tutmayı amaçlayan ancak normalin yalnızca yatay bileşenleri kullanılarak yazılmış bir hız izdüşümüydü. Normali <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="15.967ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 7057.3 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(389,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(1167,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/><path data-c="2E" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z" transform="translate(778,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2445,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2889.7,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/><path data-c="2E" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="39" d="M352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248Z" transform="translate(778,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4167.7,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4612.3,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(5390.3,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/><path data-c="2E" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z" transform="translate(778,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(6668.3,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo stretchy="false">(</mo><mo>−</mo><mn>0.3</mn><mo>,</mo><mn>0.9</mn><mo>,</mo><mo>−</mo><mn>0.3</mn><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container> olan çapraz bir eğimde kuzeye yürümek, yoktan yere yanal hız oluşturuyordu. Zemine oturtma zaten oyuncuyu yüzeyde tuttuğu için izdüşüm işlemini tamamen sildik.</p>
<p>Kayma, ikinci bir kaynaktan dolayı devam etti. SDF çarpışma sondaları, gövdeyi nüfuz derinliği kadar gradyan boyunca dışarı iter. Herhangi bir eğimde gradyanın yatay bileşenleri vardır. Dolayısıyla 15°'lik bir eğimde 0,1 m'lik nüfuz, her adımda yaklaşık 0,026 m'lik yanal itiş oluşturur; 120Hz'de bu, yaklaşık 3 m/s'lik görünmez bir kaymaya karşılık gelir. Çözüm: Tepkiyi eğime göre bölmek. Yürünebilir zeminde (<mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.874ex;" xmlns="http://www.w3.org/2000/svg" width="5.379ex" height="2.444ex" role="img" focusable="false" viewBox="0 -694 2377.5 1080.3" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mtext"><path data-c="67" d="M329 409Q373 453 429 453Q459 453 472 434T485 396Q485 382 476 371T449 360Q416 360 412 390Q410 404 415 411Q415 412 416 414V415Q388 412 363 393Q355 388 355 386Q355 385 359 381T368 369T379 351T388 325T392 292Q392 230 343 187T222 143Q172 143 123 171Q112 153 112 133Q112 98 138 81Q147 75 155 75T227 73Q311 72 335 67Q396 58 431 26Q470 -13 470 -72Q470 -139 392 -175Q332 -206 250 -206Q167 -206 107 -175Q29 -140 29 -75Q29 -39 50 -15T92 18L103 24Q67 55 67 108Q67 155 96 193Q52 237 52 292Q52 355 102 398T223 442Q274 442 318 416L329 409ZM299 343Q294 371 273 387T221 404Q192 404 171 388T145 343Q142 326 142 292Q142 248 149 227T179 192Q196 182 222 182Q244 182 260 189T283 207T294 227T299 242Q302 258 302 292T299 343ZM403 -75Q403 -50 389 -34T348 -11T299 -2T245 0H218Q151 0 138 -6Q118 -15 107 -34T95 -74Q95 -84 101 -97T122 -127T170 -155T250 -167Q319 -167 361 -139T403 -75Z" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(892,0)" style="stroke-width: 3;"/><path data-c="64" d="M376 495Q376 511 376 535T377 568Q377 613 367 624T316 637H298V660Q298 683 300 683L310 684Q320 685 339 686T376 688Q393 689 413 690T443 693T454 694H457V390Q457 84 458 81Q461 61 472 55T517 46H535V0Q533 0 459 -5T380 -11H373V44L365 37Q307 -11 235 -11Q158 -11 96 50T34 215Q34 315 97 378T244 442Q319 442 376 393V495ZM373 342Q328 405 260 405Q211 405 173 369Q146 341 139 305T131 211Q131 155 138 120T173 59Q203 26 251 26Q322 26 373 103V342Z" transform="translate(1392,0)" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1981,-241.4) scale(0.707)"><path data-c="1D466" d="M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mtext>grad</mtext><mi>y</mi></msub></math></mjx-assistive-mml></mjx-container> değeri yürüme eşiğinin üzerindeyken) itiş yalnızca dikeydir. Duvarlarda ve uçurumlarda tam 3B itiş korunur çünkü yönünüzün saptırılmasını istediğiniz yerler tam olarak buralardır. Ayrıca fırçayla oluşturulan tepelerin Breath of the Wild'daki gibi tırmanılabilir hissettirmesi için yürünebilir sınırı <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.05ex;" xmlns="http://www.w3.org/2000/svg" width="6.798ex" height="1.667ex" role="img" focusable="false" viewBox="0 -715 3004.7 737" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="63" d="M370 305T349 305T313 320T297 358Q297 381 312 396Q317 401 317 402T307 404Q281 408 258 408Q209 408 178 376Q131 329 131 219Q131 137 162 90Q203 29 272 29Q313 29 338 55T374 117Q376 125 379 127T395 129H409Q415 123 415 120Q415 116 411 104T395 71T366 33T318 2T249 -11Q163 -11 99 53T34 214Q34 318 99 383T250 448T370 421T404 357Q404 334 387 320Z" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(444,0)" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(944,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1338,0)"><path data-c="2061" d="" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(1504.7,0)"><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z" style="stroke-width: 3;"/><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" transform="translate(500,0)" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(2504.7,0)"><g data-mml-node="mo"><path data-c="B0" d="M147 628Q147 669 179 692T244 715Q298 715 325 689T352 629Q352 592 323 567T249 542Q202 542 175 567T147 628ZM313 628Q313 660 300 669T259 678H253Q248 678 242 678T234 679Q217 679 207 674T192 659T188 644T187 629Q187 600 198 590Q210 579 250 579H265Q279 579 288 581T305 595T313 628Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>cos</mi><mo data-mjx-texclass="NONE">⁡</mo><mn>45</mn><mrow data-mjx-texclass="ORD"><mo data-mjx-pseudoscript="true">°</mo></mrow></math></mjx-assistive-mml></mjx-container> değerinden <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.05ex;" xmlns="http://www.w3.org/2000/svg" width="6.798ex" height="1.667ex" role="img" focusable="false" viewBox="0 -715 3004.7 737" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="63" d="M370 305T349 305T313 320T297 358Q297 381 312 396Q317 401 317 402T307 404Q281 408 258 408Q209 408 178 376Q131 329 131 219Q131 137 162 90Q203 29 272 29Q313 29 338 55T374 117Q376 125 379 127T395 129H409Q415 123 415 120Q415 116 411 104T395 71T366 33T318 2T249 -11Q163 -11 99 53T34 214Q34 318 99 383T250 448T370 421T404 357Q404 334 387 320Z" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(444,0)" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(944,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1338,0)"><path data-c="2061" d="" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(1504.7,0)"><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="ORD" transform="translate(2504.7,0)"><g data-mml-node="mo"><path data-c="B0" d="M147 628Q147 669 179 692T244 715Q298 715 325 689T352 629Q352 592 323 567T249 542Q202 542 175 567T147 628ZM313 628Q313 660 300 669T259 678H253Q248 678 242 678T234 679Q217 679 207 674T192 659T188 644T187 629Q187 600 198 590Q210 579 250 579H265Q279 579 288 581T305 595T313 628Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>cos</mi><mo data-mjx-texclass="NONE">⁡</mo><mn>60</mn><mrow data-mjx-texclass="ORD"><mo data-mjx-pseudoscript="true">°</mo></mrow></math></mjx-assistive-mml></mjx-container> değerine çıkardık.</p>
<p>Üçüncü hata, kapsülün parça sınırlarında donmasına neden oluyordu çünkü çarpışma sondaları tek bir parçanın SDF'sini örnekliyor ve bir sonda komşu parçaya geçtiğinde &quot;havanın derinlerinde&quot; gözcü değerini alıyordu. Çözüm, herhangi bir dünya konumu için doğru parçayı bulan ve SDF'nin bulunmadığı yerlerde yükseklik haritası mesafe tahminine geri dönen <code>sdfSampleWorld(wx, wy, wz)</code> ile <code>sdfGradientWorld(...)</code> fonksiyonlarıydı. SDF'den yükseklik haritası çarpışmasına geçiş artık kesintisiz.</p>
<h2 id="su-dunyayı-tamamlıyor" tabindex="-1">Su dünyayı tamamlıyor <a class="header-anchor" href="#su-dunyayı-tamamlıyor" aria-label="Permalink to &quot;Su dünyayı tamamlıyor&quot;"></a></h2>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/32-water-swimming/" title="32. Deneme: Su ve Yüzme" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/32-water-swimming/" target="_blank">32. denemeyi yeni sekmede açın ↗</a> · <a href="/tr/blog/spike-source?spike=32-water-swimming">Kaynak kodunu görüntüleyin</a></p>
<p>Buraya kadarki her deneme &quot;suyun üzerindeki kara&quot; üzerineydi. 32. deneme bir okyanus ve onunla birlikte yeni bir hareket biçimi ekledi. Yaklaşık 8 ile 58 arasında değişen arazide su seviyesini 22 olarak belirledik. Böylece alçak vadiler suyla doldu, kıyı çizgisinde plajlar oluştu ve oyun için bol miktarda kuru alan kaldı.</p>
<p>Yüzey, araziyle aynı düğüm yaklaşımını kullanan ve TSL ile oluşturulmuş bir <code>MeshStandardNodeMaterial</code> materyalidir. Farklı frekanslardaki üç örtüşen sinüs dalgası köşeleri yerinden oynatıyor ve yüzey normali, örgü normallerinden değil bu dalgaların analitik kosinüs türevlerinden elde ediliyor. Renk, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="4.526ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 2000.7 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="5B" d="M118 -250V750H255V710H158V-210H255V-250H118Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(278,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(778,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(1222.7,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1722.7,0)"><path data-c="5D" d="M22 710V750H159V-250H22V-210H119V710H22Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo stretchy="false">[</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo stretchy="false">]</mo></math></mjx-assistive-mml></mjx-container> aralığına sıkıştırılmış <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="24.614ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 10879.3 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(389,0)"><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(278,0)" style="stroke-width: 3;"/><path data-c="76" d="M338 431Q344 429 422 429Q479 429 503 431H508V385H497Q439 381 423 345Q421 341 356 172T288 -2Q283 -11 263 -11Q244 -11 239 -2Q99 359 98 364Q93 378 82 381T43 385H19V431H25L33 430Q41 430 53 430T79 430T104 429T122 428Q217 428 232 431H240V385H226Q187 384 184 370Q184 366 235 234L286 102L377 341V349Q377 363 367 372T349 383T335 385H331V431H338Z" transform="translate(722,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(1250,0)" style="stroke-width: 3;"/><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z" transform="translate(1694,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2583.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(3583.4,0)"><path data-c="1D466" d="M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4295.7,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(5295.9,0)"><path data-c="77" d="M90 368Q84 378 76 380T40 385H18V431H24L43 430Q62 430 84 429T116 428Q206 428 221 431H229V385H215Q177 383 177 368Q177 367 221 239L265 113L339 328L333 345Q323 374 316 379Q308 384 278 385H258V431H264Q270 428 348 428Q439 428 454 431H461V385H452Q404 385 404 369Q404 366 418 324T449 234T481 143L496 100L537 219Q579 341 579 347Q579 363 564 373T530 385H522V431H529Q541 428 624 428Q692 428 698 431H703V385H697Q696 385 691 385T682 384Q635 377 619 334L559 161Q546 124 528 71Q508 12 503 1T487 -11H479Q460 -11 456 -4Q455 -3 407 133L361 267Q359 263 266 -4Q261 -11 243 -11H238Q225 -11 220 -3L90 368Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(722,0)" style="stroke-width: 3;"/><path data-c="76" d="M338 431Q344 429 422 429Q479 429 503 431H508V385H497Q439 381 423 345Q421 341 356 172T288 -2Q283 -11 263 -11Q244 -11 239 -2Q99 359 98 364Q93 378 82 381T43 385H19V431H25L33 430Q41 430 53 430T79 430T104 429T122 428Q217 428 232 431H240V385H226Q187 384 184 370Q184 366 235 234L286 102L377 341V349Q377 363 367 372T349 383T335 385H331V431H338Z" transform="translate(1222,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(1750,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(7489.9,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(8101.1,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(9101.3,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/><path data-c="2E" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" transform="translate(778,0)" style="stroke-width: 3;"/><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" transform="translate(1278,0)" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo stretchy="false">(</mo><mtext>level</mtext><mo>−</mo><mi>y</mi><mo>+</mo><mtext>wave</mtext><mo stretchy="false">)</mo><mo>×</mo><mn>0.12</mn></math></mjx-assistive-mml></mjx-container> derinlik tahminini kullanarak turkuaz sığlıklardan koyu deniz mavisi derinliklere geçiyor. Bu tahmin kıyı çizgisinde sıfıra yaklaşırken köpük yükseliyor ve alfa derinliği takip ediyor; böylece sığ su şeffaf, derin su ise neredeyse opak görünüyor.</p>
<p>Yüzme, kaldırma kuvveti sağlayan bir yaydır. Ayaklar su seviyesinin altına düştüğünde ve gövdenin merkezi yüzeye kapsül yarı yüksekliği kadar yakın olduğunda oyuncu yüzme moduna giriyor. Bir yay, gövdeyi yüzeyin hemen altındaki hedefe doğru çekiyor. Su sönümlemesi 4'e karşı kaldırma sabiti 12 olduğunda oyuncu, salınım yapmadan ve başı suyun dışında kalacak biçimde dengeli şekilde yüzüyor. Yüzme hızı yürümekten daha düşük; ivmelenme ve sürüklenme daha akışkan. Yüzeye yakınken zıplamak oyuncuyu normal zıplama hızının %60'ıyla sudan dışarı fırlatıyor, suya girişteyse aşağı yönlü hız -5 m/s ile sınırlandırılarak oyuncunun dibe çakılması önleniyor. Arazi çarpışması su altında da çalışmaya devam ediyor; bu nedenle göl yatağının yüzme hedefinin üzerine çıktığı yerlerde yürüyebilirsiniz. Yüzme bayrağı konum yayınına da ekleniyor, böylece diğer oyuncular yüzdüğünüzü görebiliyor. Kamera yüzeyin altına indiğinde bir HTML gradyan katmanı görüntüyü renklendiriyor.</p>
<h2 id="bu-bolumde-kullanılan-teknolojiler" tabindex="-1">Bu bölümde kullanılan teknolojiler <a class="header-anchor" href="#bu-bolumde-kullanılan-teknolojiler" aria-label="Permalink to &quot;Bu bölümde kullanılan teknolojiler&quot;"></a></h2>
<p><strong>Deterministik fırça parametresi yeniden oynatması.</strong> Her istemci, düzenlenmiş araziyi aktarmak yerine yalnızca fırça parametrelerini gönderiyor ve aynı CPU fonksiyonunu yeniden çalıştırıyor. Bu mümkün çünkü hem yükseklik haritası hem de SDF fırçaları, rastlantısallık ya da GPU kaynaklı deterministik olmayan davranış içermeyen saf <code>Float32Array</code> matematiğine dayanıyor. Böylece aynı girdiler her yerde bit düzeyinde aynı çıktıları üretiyor. Yük, her fırça darbesi adımında 56 bayt. Değişmeli işlemler (yükseltme, alçaltma) sıradan bağımsız olarak yakınsarken komşuları okuyan işlemlerin (yumuşatma, düzleştirme) yakınsamayı garanti etmek için bir serileştirme noktasına ihtiyacı vardır. Üretimdeki Durable Object bunu monotonik sıra numaralarıyla sağlar.</p>
<p><strong>WebSocket yerine BroadcastChannel.</strong> Sıfır sunucuyla, aynı kaynaktan açılmış sekmeler arasında mesajlaşmayı sağlayan bir tarayıcı API'si. Burada senkronizasyon protokolünü ağ gecikmesi ve kimlik doğrulamadan bağımsız olarak test etmek için kullanıldı. Serileştirme formatı (ham <code>Float32Array</code> yükseklik haritası, düzenlenmiş SDF parçaları ve MC kilitli parça kimlikleri), IndexedDB kalıcılığı ve sonradan katılım durum aktarımında kullanılan baytlarla aynıdır. Böylece tek format üç işi birden kapsar.</p>
<p><strong>Eğime göre bölünmüş SDF çarpışma tepkisi.</strong> Bir kapsül sondası hacimsel araziye nüfuz ettiğinde en basit çözüm, gövdeyi nüfuz derinliği kadar SDF gradyanı boyunca dışarı itmektir. Eğimlerde bu gradyanın yatay bileşenleri bulunur ve bu da yanal kayma oluşturur. Tepkiyi, yürünebilir yüzeylerin (<mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.874ex;" xmlns="http://www.w3.org/2000/svg" width="5.379ex" height="2.444ex" role="img" focusable="false" viewBox="0 -694 2377.5 1080.3" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mtext"><path data-c="67" d="M329 409Q373 453 429 453Q459 453 472 434T485 396Q485 382 476 371T449 360Q416 360 412 390Q410 404 415 411Q415 412 416 414V415Q388 412 363 393Q355 388 355 386Q355 385 359 381T368 369T379 351T388 325T392 292Q392 230 343 187T222 143Q172 143 123 171Q112 153 112 133Q112 98 138 81Q147 75 155 75T227 73Q311 72 335 67Q396 58 431 26Q470 -13 470 -72Q470 -139 392 -175Q332 -206 250 -206Q167 -206 107 -175Q29 -140 29 -75Q29 -39 50 -15T92 18L103 24Q67 55 67 108Q67 155 96 193Q52 237 52 292Q52 355 102 398T223 442Q274 442 318 416L329 409ZM299 343Q294 371 273 387T221 404Q192 404 171 388T145 343Q142 326 142 292Q142 248 149 227T179 192Q196 182 222 182Q244 182 260 189T283 207T294 227T299 242Q302 258 302 292T299 343ZM403 -75Q403 -50 389 -34T348 -11T299 -2T245 0H218Q151 0 138 -6Q118 -15 107 -34T95 -74Q95 -84 101 -97T122 -127T170 -155T250 -167Q319 -167 361 -139T403 -75Z" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(892,0)" style="stroke-width: 3;"/><path data-c="64" d="M376 495Q376 511 376 535T377 568Q377 613 367 624T316 637H298V660Q298 683 300 683L310 684Q320 685 339 686T376 688Q393 689 413 690T443 693T454 694H457V390Q457 84 458 81Q461 61 472 55T517 46H535V0Q533 0 459 -5T380 -11H373V44L365 37Q307 -11 235 -11Q158 -11 96 50T34 215Q34 315 97 378T244 442Q319 442 376 393V495ZM373 342Q328 405 260 405Q211 405 173 369Q146 341 139 305T131 211Q131 155 138 120T173 59Q203 26 251 26Q322 26 373 103V342Z" transform="translate(1392,0)" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1981,-241.4) scale(0.707)"><path data-c="1D466" d="M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mtext>grad</mtext><mi>y</mi></msub></math></mjx-assistive-mml></mjx-container> eşik değerinin üzerindeyken) yalnızca dikey bir itiş alacağı, dik yüzeylerinse tam 3B itişi ve hız izdüşümünü koruyacağı şekilde bölmek; duvar çarpışmasını kaybetmeden kaymayı ortadan kaldırır. Bkz. <a href="/tr/guides/landscape-generation-browser.html#physics-on-sdf-terrain">SDF arazi çarpışmaları</a>.</p>
<p><strong>Analitik dalga normallerine sahip TSL suyu.</strong> Okyanus, köşeleri üst üste eklenen üç sinüs dalgasıyla yerinden oynatılan bir düğüm materyalidir. Yüzey normali, yer değiştirmeden sonra örgü normallerini yeniden hesaplamak yerine dalga fonksiyonlarının kosinüs türevlerinden analitik olarak elde edilir. Bu yöntem daha ucuzdur ve kaba bir ızgarada sonlu fark normallerinin oluşturduğu bozulmaları önler. Derinliğe bağlı renk, kıyı köpüğü ve derinliğe bağlı şeffaflık aynı derinlik tahminini temel alır.</p>
<p><strong>Kaldırma yaylı yüzme.</strong> Yüzme fiziği, gövdeyi yüzeyin hemen altındaki bir hedefe çeken sönümlü bir yay olarak modeller. Kaldırma sabiti 12 ve sönümleme 4 olduğunda oyuncu salınım yapmadan yüzeyde dengelenir. Farklı hareket sabitleri (daha düşük hız, akışkan ivmelenme ve güçlü sürüklenme) yüzmeye yürümekten farklı bir his kazandırır; mevcut kapsül-arazi çarpışması da su altında çalışmayı sürdürür.</p>
<hr>
<p>29 bölümün 15.'si.
Önceki: <a href="/tr/blog/2026-04-13-open-world-browser-part-14-world-comes-alive.html">Bölüm 14 - Dünya canlanıyor</a>
Sonraki: <a href="/tr/blog/2026-04-28-open-world-browser-part-16-structure-and-authoring.html">Bölüm 16 - Büyümeye devam eden bir dünya için yapı</a>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Cubcoats × Cinevva: Tek Sayfalık Oyun Konseptleri]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-03-19-cubcoats-game-concepts-one-pager</link>
            <guid>https://app.cinevva.com/tr/blog/2026-03-19-cubcoats-game-concepts-one-pager</guid>
            <pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Eskizden videoya ve 3D'ye uzanan üretim süreciyle Kedi Kali'yi temel alan üç eğitici oyun konsepti (Altın Ağaç, Kali'nin Kelime Adası, Ada Hikâyeleri). Lisanslama veya iş ortağı sunumları için.]]></description>
            <content:encoded><![CDATA[<h1 id="cubcoats-×-cinevva-tek-sayfalık-oyun-konseptleri" tabindex="-1">Cubcoats × Cinevva: Tek Sayfalık Oyun Konseptleri <a class="header-anchor" href="#cubcoats-×-cinevva-tek-sayfalık-oyun-konseptleri" aria-label="Permalink to &quot;Cubcoats × Cinevva: Tek Sayfalık Oyun Konseptleri&quot;"></a></h1>
<p><em>Eskizden videoya ve 3D'ye uzanan üretim süreciyle Kedi Kali'yi (Cubcoats) temel alır. Lisanslama, blog veya iş ortağı sunumları için.</em></p>
<p><strong>PDF olarak paylaşmak için:</strong> Bu sayfayı açın, ardından tarayıcınızda <strong>Dosya → Yazdır → PDF olarak kaydet</strong> seçeneğini kullanın.</p>
<hr>
<h2 id="altın-agac-—-tam-tek-sayfalık-konsept" tabindex="-1">Altın Ağaç — Tam tek sayfalık konsept <a class="header-anchor" href="#altın-agac-—-tam-tek-sayfalık-konsept" aria-label="Permalink to &quot;Altın Ağaç — Tam tek sayfalık konsept&quot;"></a></h2>
<p><strong>Slogan:</strong> <em>Sizinle birlikte büyüyen bir dünya. Ziyaret et, sula, izle. Seviye yok. Baskı yok.</em></p>
<table tabindex="0">
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Yaş aralığı</strong></td>
<td>3–13 (geniş kitle)</td>
</tr>
<tr>
<td><strong>Format</strong></td>
<td>Bölümler hâlinde gelişen ortak 3D dünya + haftalık kısa &quot;anlar&quot;</td>
</tr>
<tr>
<td><strong>Platform</strong></td>
<td>Web (ileride mobil de); kolay erişim, kurulum gerektirmez</td>
</tr>
<tr>
<td><strong>Viral kanca</strong></td>
<td>&quot;Arkadaşına bir tohum gönder.&quot; Birlikte büyüme, paylaşılabilir huzurlu klipler.</td>
</tr>
</tbody>
</table>
<h3 id="nedir" tabindex="-1">Nedir? <a class="header-anchor" href="#nedir" aria-label="Permalink to &quot;Nedir?&quot;"></a></h3>
<p><strong>Gerçek dünya zamanına</strong> göre gelişen, sakin ve koleksiyon odaklı bir dünya. Herkesin paylaştığı tek bir &quot;mevsim&quot; (ör. Bahar Adası): çocukların içinde dolaşabildiği tek bir 3D ada (oynanabilir Kali demosu gibi). Geleneksel seviyeler veya puanlar yoktur. İlerleme; <strong>ağacının yeni bir dal çıkarması</strong>, <strong>12 an görmüş olman</strong> veya <strong>birinin senin tohumunu sulaması</strong> demektir.</p>
<p>Çocuk her ziyaretinde şunlardan birini yapabilir: <strong>bir bitkiyi sulamak</strong>, <strong>bir dilek bırakmak</strong> (metin veya emoji), <strong>gizli bir Cubcoats karakterini bulmak</strong> ya da <strong>30 saniyelik bir &quot;an&quot; izlemek</strong> (ör. altın ağacın altındaki Kali). Yeni anlar ve küçük hikâye parçaları <strong>her hafta</strong> yayınlanır (bölümler hâlinde). İsteğe bağlı doğal dil desteği: &quot;Kali bugün şöyle dedi: [İngilizce ve Çince birer cümle].&quot;</p>
<p>Öğrenme ve gelişim <strong>fark ettirmeden</strong> gerçekleşir: nezaket, sabır ve yeniden deneme gibi temalar derslerde değil, metinlerde ve görsel tasarımda yer alır. Deneyim okul gibi değil, bir oyuncak veya ortak bir buluşma alanı gibi hissettirir.</p>
<h3 id="temel-oyun-dongusu" tabindex="-1">Temel oyun döngüsü <a class="header-anchor" href="#temel-oyun-dongusu" aria-label="Permalink to &quot;Temel oyun döngüsü&quot;"></a></h3>
<ol>
<li>Adayı <strong>ziyaret et</strong> (tarayıcıdan veya uygulamadan).</li>
<li>Her ziyarette <strong>nazik bir eylem gerçekleştir</strong>: sula, dilek bırak, bir karakter bul veya bir an izle.</li>
<li>Günler ve haftalar içinde <strong>dünyanın değiştiğini gör</strong> (yeni çiçekler, yeni karakter pozları, yeni kısa klipler).</li>
<li>Büyümeyi sosyal bir deneyime dönüştürmek için arkadaşına bir tohum <strong>gönder</strong> veya &quot;bir arkadaşının adasını ziyaret et.&quot;</li>
</ol>
<h3 id="yazıdaki-uretim-surecini-ve-karakterleri-nasıl-kullanıyor" tabindex="-1">Yazıdaki üretim sürecini ve karakterleri nasıl kullanıyor? <a class="header-anchor" href="#yazıdaki-uretim-surecini-ve-karakterleri-nasıl-kullanıyor" aria-label="Permalink to &quot;Yazıdaki üretim sürecini ve karakterleri nasıl kullanıyor?&quot;"></a></h3>
<ul>
<li><strong>Oynanabilir 3D dünya:</strong> Kali demosuyla aynı üretim süreci: T pozu → 3D Model Generator → rigleme → Cinevva Engine. Ada ve karakterler üçüncü şahıs bakış açısıyla, rahatça ve baskı olmadan keşfedilebilir.</li>
<li><strong>Altın ağaç:</strong> Doğrudan yazıdan alınmıştır (Kali'nin &quot;korkudan umuda&quot; geçişi ve büyülü altın ağaç). Ağaç, sezonun duygusal ve görsel odağıdır.</li>
<li><strong>Kısa &quot;anlar&quot;:</strong> Yazıdaki dikey kısa video gibi üretilir: başlangıç karesi + bitiş karesi + hareket istemi → Video Generator (Kling 3.0 Pro), 9:16, ~15 sn. Her haftalık yayın, hikâyenin küçük bir parçasını sunar.</li>
<li><strong>Cubcoats fikrî mülkiyeti:</strong> Kali ve diğer yedi karakter, ada dünyası ve sıcak, yuvarlak hatlı görsel tarz. Dijital ve bölümler hâlinde sunulan bir ürün olarak lisanslama odaklı yeniden lansmana (2026) uygundur.</li>
</ul>
<h3 id="neden-viral-olabilir" tabindex="-1">Neden viral olabilir? <a class="header-anchor" href="#neden-viral-olabilir" aria-label="Permalink to &quot;Neden viral olabilir?&quot;"></a></h3>
<ul>
<li><strong>Kolay erişim:</strong> Tek bağlantı, uzun bir başlangıç süreci yok. &quot;Arkadaşına bir tohum gönder&quot; basit ve paylaşılabilir bir çağrıdır.</li>
<li><strong>Sakin, güzel klipler:</strong> Kısa anlar tek başlarına paylaşılabilir (sosyal medyada &quot;şu 15 saniyeyi izle&quot;). Olumlu anlamda meme potansiyeline sahiptir.</li>
<li><strong>Bölümler hâlinde:</strong> &quot;Bu hafta ne var?&quot; sorusu tekrar ziyaretleri ve konuşmaları teşvik eder.</li>
<li><strong>Fark ettirmeden öğrenme:</strong> Ebeveynler &quot;sakin, yaratıcı, reklamsız, stressiz&quot; bir deneyim görür; çocuklar ise açıkça ders verildiğini hissetmeden rutin, sabır ve hoş sürprizlerle karşılaşır.</li>
</ul>
<h3 id="cinevva-blogu-icin-olası-yaklasım" tabindex="-1">Cinevva blogu için olası yaklaşım <a class="header-anchor" href="#cinevva-blogu-icin-olası-yaklasım" aria-label="Permalink to &quot;Cinevva blogu için olası yaklaşım&quot;"></a></h3>
<p><em>&quot;Kali'yi eskizden videoya, ardından içinde dolaşabileceğiniz bir karaktere dönüştürdük. Altın Ağaç bir sonraki adım: çocukların ziyaret ettiği, suladığı ve kısa anları izlediği, gerçek zamanlı büyüyen bir dünya—seviye yok, baskı yok. Aynı üretim süreci. Yeni bir format.&quot;</em></p>
<hr>
<h2 id="kali-nin-kelime-adası-—-kısa-bakıs" tabindex="-1">Kali'nin Kelime Adası — Kısa bakış <a class="header-anchor" href="#kali-nin-kelime-adası-—-kısa-bakıs" aria-label="Permalink to &quot;Kali'nin Kelime Adası — Kısa bakış&quot;"></a></h2>
<table tabindex="0">
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Slogan</strong></td>
<td>Kali ve arkadaşlarının adayı büyütmesine yardım et. Bu sırada İngilizce ve Çince öğren.</td>
</tr>
<tr>
<td><strong>Yaş aralığı</strong></td>
<td>5–11</td>
</tr>
<tr>
<td><strong>Odak</strong></td>
<td>Çocuklar için İngilizce ↔ Çince; güçlü oyunlaştırma ve ilerleme sistemi.</td>
</tr>
</tbody>
</table>
<p><strong>Temel fikir:</strong> Cubcoats adası karakter bölgelerine ayrılır (Kali'nin ormanı, başka bir karakterin sahili). Çocuklar, İngilizce ve Çinceyi anlamayı ve kullanmayı gerektiren kısa görevleri tamamlayarak karakterlere yardım eder. İlerleme = &quot;Tohumlar → Fidanlar → Ağaçlar → Altın Ağaç&quot; (bölgedeki ağaç tamamen büyüdüğünde bir sonraki bölgenin kilidi açılır). Günlük &quot;fener&quot; koşusu, koleksiyonluk ifade kartları, karakter &quot;ruh hâli&quot; göstergeleri ve isteğe bağlı ebeveyn paneli. Bir bölge tamamlandığında kısa hikâye anlarının (başlangıç/bitiş karesi tarzında) kilidi açılır. <strong>Üretim süreci:</strong> Karakterler ve duygusal anlar için aynı 3D + video üretim süreci.</p>
<hr>
<h2 id="cubcoats-ada-hikayeleri-—-kısa-bakıs" tabindex="-1">Cubcoats: Ada Hikâyeleri — Kısa bakış <a class="header-anchor" href="#cubcoats-ada-hikayeleri-—-kısa-bakıs" aria-label="Permalink to &quot;Cubcoats: Ada Hikâyeleri — Kısa bakış&quot;"></a></h2>
<table tabindex="0">
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Slogan</strong></td>
<td>Kendi Cubcoats bölümünü oluştur. Hikâyeyi yeniden yorumla. Kendi versiyonunu paylaş.</td>
</tr>
<tr>
<td><strong>Yaş aralığı</strong></td>
<td>3–13 (gruplar: 3–6, 7–10, 11–13)</td>
</tr>
<tr>
<td><strong>Odak</strong></td>
<td>Hikâye oluşturma ve yeniden yorumlama; eğitim deneyime dâhildir ancak ana vaat değildir.</td>
</tr>
</tbody>
</table>
<p><strong>Temel fikir:</strong> Çocukların hikâye dallarını seçtiği bölümlü anlatılar (Kali ne söylüyor? Nereye gidiyor?). Ana etkinlik <strong>yeniden yorumlamadır</strong>: karakteri, mekânı ve 2–3 hikâye adımını seç → kısa bir &quot;bölüm&quot; oluştur (senaryo + basit görseller veya ileride yapay zekâyla üretilen kısa video). Öğrenme fark ettirmeden gerçekleşir (diyalog ve seçimlerdeki kelime dağarcığı ve kalıplar). Sosyal özellikler: bölümünü paylaş, başka birinin versiyonunu oyna, &quot;nazik / komik / şaşırtıcı&quot; olarak değerlendir. <strong>Üretim süreci:</strong> Kullanıcıların oluşturduğu &quot;anlar&quot; için aynı karakter görünümü + iki kareli video üretim süreci; karakter ve dünya tutarlılığı için 3D.</p>
<hr>
<p><em>Bahsedilen Cinevva araçları: Image Generator, Video Generator (Kling 3.0 Pro), 3D Model Generator, otomatik rigleme, Cinevva Engine. &quot;Eskizden videoya ve oynanabilir 3D'ye&quot; (2026-03-04) başlıklı yazıda açıklanan üretim sürecini yansıtır.</em></p>
]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya geliştirmek aslında neler gerektiriyor?]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-03-14-open-world-browser-medium-article</link>
            <guid>https://app.cinevva.com/tr/blog/2026-03-14-open-world-browser-medium-article</guid>
            <pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Cinevva'nın 12 bölümlük mühendislik serisine gazeteci gözüyle bir bakış: çirkin arazi temel ölçümlerinden GPU marching cubes'a, akışlı LOD'a ve Transvoxel birleşim yeri hata ayıklamasına uzanan 24 spike deneyi.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-gelistirmek-aslında-neler-gerektiriyor" tabindex="-1">Tarayıcıda açık dünya geliştirmek aslında neler gerektiriyor? <a class="header-anchor" href="#tarayıcıda-acık-dunya-gelistirmek-aslında-neler-gerektiriyor" aria-label="Permalink to &quot;Tarayıcıda açık dünya geliştirmek aslında neler gerektiriyor?&quot;"></a></h1>
<p><em>Yazan: <a href="/tr/about.html">Mariana Muntean</a>, Cinevva CEO'su</em></p>
<img src="/img/blog/open-world-browser-120fps.png" alt="Tarayıcıda 120 FPS ile çalışan açık dünya — arazi, ağaçlar, fizik ve oyuncu kapsülü; hepsi tek bir sekmede oluşturuluyor" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Cinevva ekibi, yakın dönem oyun geliştirme dünyasının en şeffaf mühendislik günlüklerinden birini kısa süre önce yayımladı: tamamen tarayıcıda çalışan çok oyunculu bir açık dünya geliştirme girişimimizi belgeleyen <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">12 bölümlük bir seri</a>. İndirme yok. Uygulama mağazası yok. Yalnızca bir URL.</p>
<p>Proje, &quot;spike&quot; adını verdiğimiz 24 teknik deneyi kapsıyordu; bunlar, her biri riskli bir soruyu yanıtlamak üzere tasarlanmış kısa ve odaklı prototiplerdi. Her spike, hemen şimdi tarayıcınızda açıp çalıştırabileceğiniz canlı kaynak koduyla birlikte yayımlandı. Seri, Cinevva'nın CTO'su ve kurucu ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından yazıldı ve pazarlama metninden çok, tarayıcıların 2026'da gerçekte neler yapabildiğinin ön saflarından bir saha günlüğü gibi okunuyor.</p>
<p>Seriyi okumaya değer kılan şey — hiçbir zaman arazi sistemleri geliştirmeyi planlamıyor olsanız bile — altında yatan yöntem. Bu, pahalı herhangi bir taahhütte bulunmadan önce iddialı bir projenin risklerini nasıl azaltabileceğinize dair bir vaka çalışması.</p>
<h2 id="once-en-zor-sorudan-baslamak" tabindex="-1">Önce en zor sorudan başlamak <a class="header-anchor" href="#once-en-zor-sorudan-baslamak" aria-label="Permalink to &quot;Önce en zor sorudan başlamak&quot;"></a></h2>
<p>Çoğu açık dünya projesi öngörülebilir bir sırayla başarısız olur. Önce harika bir fikir ortaya çıkar. Ardından güzel bir sahne gelir. Sonra da oynanış daha ortada yokken kare süresi bütçenizin çoktan tükendiğini keşfedersiniz.</p>
<p>Ekibimiz bu sırayı tersine çevirdi. <a href="/tr/blog/2026-02-25-open-world-browser-part-01-risk-first.html">İlk spike</a> özellikle çirkin tasarlanmıştı: 512 metrelik bir arazi ağı, 500 örneklenmiş nesne, prosedürel yükseklik gürültüsü, bir su düzlemi ve sis. Gölge yoktu, görsel iyileştirme geçişi yoktu. Tek soru, kamera dünyada hareket ederken tarayıcının kararlı bir kare hızını koruyup koruyamayacağıydı.</p>
<p>Koruyabildi. Bu &quot;evet&quot; yanıtı, Oleg'in &quot;temel sözleşme&quot; olarak adlandırdığı şeyi oluşturdu: sonraki her özelliğin maliyetini haklı çıkarmak zorunda olduğu, minimal bir sahne için ölçülmüş referans maliyet. Yeni bir efekt harika görünüyor ancak kare bütçesini aşıyorsa yayımlanmıyordu. En azından henüz.</p>
<p>Bu tür bir disiplin kulağa bariz geliyor. Uygulamada ise herkesin bir sonraki görsel başarı için heyecanlandığı hızlı prototipleme ortamlarında nadir görülüyor.</p>
<h2 id="fizik-kumarı" tabindex="-1">Fizik kumarı <a class="header-anchor" href="#fizik-kumarı" aria-label="Permalink to &quot;Fizik kumarı&quot;"></a></h2>
<p><a href="/tr/blog/2026-02-25-open-world-browser-part-02-worker-physics.html">İkinci deney</a>, tarayıcı oyunu geliştiricilerini ikiye bölen mimari bir tartışmayı ele aldı: fizik, daha basit olduğu ana iş parçacığında mı yoksa oluşturmayı engelleyemeyeceği bir Web Worker içinde mi çalışmalı?</p>
<p>Worker tabanlı fizik kâğıt üzerinde daha temizdir. Uygulamada ise korkulan şey gecikmedir. Her giriş olayı mesaj sınırını iki kez geçmek zorundadır: bir kez worker'a ulaşmak, bir kez de sonucu geri getirmek için. Bu gidiş dönüş çok yavaşsa bir tuşa basmanızla karakterinizin hareket ettiğini görmeniz arasındaki süre hantallık hissi yaratır.</p>
<p>Ekip, Rapier fizik motorunu (Rust'tan WebAssembly'ye derlenmiş hâliyle) özel bir worker'a entegre etti, mesaj hattını bağladı ve ölçüm yaptı. Ek yük ihmal edilebilir düzeydeydi. Kontroller hâlâ anında tepki veriyordu. Ancak evrensel bir kuralı değil, belirli bir senaryoyu doğruladığımızı özellikle belirtmeye dikkat ettik. GPU yükü ve veri akışı karmaşıklığı daha sonra değiştiğinde varsayımların yeniden kontrol edilmesi gerekecekti.</p>
<h2 id="projeyi-kurtaran-sıkıcı-spike-lar" tabindex="-1">Projeyi kurtaran sıkıcı spike'lar <a class="header-anchor" href="#projeyi-kurtaran-sıkıcı-spike-lar" aria-label="Permalink to &quot;Projeyi kurtaran sıkıcı spike'lar&quot;"></a></h2>
<p>Serinin <a href="/tr/blog/2026-02-25-open-world-browser-part-03-the-unflashy-spikes.html">üçüncü bölümünde</a> ekran görüntüsü yok. Bölüm, gösterişli görünmeyen ancak ürün düzeyinde sonuçları olan üç deneyi ele alıyor.</p>
<p>İlki, çok oyunculu altyapının temelini oluşturan Cloudflare Durable Objects'in gerçek zamanlı konum yayınlarını oyun benzeri tick hızlarında işleyip işleyemeyeceğini test etti. Bu başarısız olsaydı ağ mimarisinin tek ada sahipliği yerine daha başlangıçta parçalanması gerekecekti.</p>
<p>İkincisi, bir mobil kalite profilini doğruladı: adı değiştirilmiş bir masaüstü ön ayarı değil, aynı arazi temelinden oluşturulmuş ve düşük maliyet için açıkça tasarlanmış bir oluşturma yolu. Soru, oluşturucuyu baştan yazmadan dünyanın mobil GPU kısıtlamaları altında okunaklı ve duyarlı kalıp kalamayacağıydı.</p>
<p>Üçüncüsü, üretici iş akışları için yapay zekâ tarafından oluşturulan davranış betiklerinin üretimde kullanılacak kadar güvenilir olup olmayacağını değerlendirdi.</p>
<p>Bunların hiçbiri tanıtım videoları üretmedi. Ancak üçü de sonrasındaki her mimari kararı şekillendiren kesin sınırlar koydu. Oleg, bu &quot;gösterişsiz spike'ların mimariyi görsel spike'lardan daha hızlı değiştirdiğini&quot; yazıyor.</p>
<h2 id="veri-akısı-guzel-projelerin-dagıldıgı-nokta" tabindex="-1">Veri akışı: güzel projelerin dağıldığı nokta <a class="header-anchor" href="#veri-akısı-guzel-projelerin-dagıldıgı-nokta" aria-label="Permalink to &quot;Veri akışı: güzel projelerin dağıldığı nokta&quot;"></a></h2>
<img src="/img/blog/open-world-chunk-streaming.png" alt="Spike 6: Parça akışı çalışırken — renkli alanların her biri, kamera hareket ettikçe dinamik olarak yüklenen ve kaldırılan bir arazi parçasıdır" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Tek bir sabit karede pek çok şeyi gizleyebilirsiniz. Koşarken bir parça sınırını geçtiğiniz anda oluşan 40 milisaniyelik takılmayı gizleyemezsiniz.</p>
<p>Ekip, sorumlulukları bilinçli olarak ayırıp <a href="/tr/blog/2026-02-25-open-world-browser-part-04-streaming-before-fancy.html">gelişmiş araziyi oluşturmadan önce veri akışını test etti</a>. Spike 6, basit içerikle komşu parçaların yüklenmesini doğruladı. Ancak bu net sonuçtan sonra Spike 11, aşamalı iyileştirmeyle sıkıştırılmış yükseklik haritası akışını devreye soktu: arazi önce 17 örnek çözünürlüğünde, sonra 33 örnekte ve son olarak 65 örnekli tam ızgarada yükleniyordu.</p>
<p>Sıralama beklediğimizden daha önemliydi. Doğrudan sıkıştırılmış yükseklik parçalarıyla başlasaydık her takılmanın nedeni belirsiz olacaktı. Sorun kod çözmede mi, doku yükleme tıkanmasında mı, yoksa geometri güncellemesinde miydi? Önce basit veri akışını test etmek, belirsizlik kategorilerinden birini tamamen ortadan kaldırdı.</p>
<p>Ortaya pratik bir ders çıktı: yükleme tıkanmalarını ortalama FPS üzerinden değil, doğrudan ölçün. Ortalamalar kare sıçramalarını gizler; oyuncuların gerçekten hissettiği şey de bu sıçramalardır.</p>
<h2 id="gorsel-butce-savasları" tabindex="-1">Görsel bütçe savaşları <a class="header-anchor" href="#gorsel-butce-savasları" aria-label="Permalink to &quot;Görsel bütçe savaşları&quot;"></a></h2>
<p>Üç ayrı deney, oluşturma maliyetlerini bir araya toplamak yerine birbirinden bağımsız olarak ele aldı. <a href="/tr/blog/2026-02-25-open-world-browser-part-05-budgeting-the-pretty.html">Bitki örtüsü</a> yoğunluğu ve rüzgâr animasyonu. Uçurum yüzeyleri için üç düzlemli eşlemeye sahip çok katmanlı arazi malzemeleri. Gerçekçi arazi yükü altında basamaklı gölge haritaları.</p>
<p>Bitki örtüsü spike'ı, örnekleri daha az sayıda ağda toplu işlemenin, her bir ot sapındaki poligon sayısını azaltmaktan daha önemli olduğunu gösterdi. Malzeme spike'ı, dikey yüzeylerde üç düzlemli projeksiyonun GPU maliyetine değdiğini ancak beşinci bir doku sıçratma katmanı eklemenin değmediğini ortaya çıkardı. Gölge spike'ı ise 1024 çözünürlükte üç kademenin, GPU süresinde 2 milisaniyeyi aşmadan kabul edilebilir temas gölgeleri sunduğunu belirledi.</p>
<p>Ekip kesin bir kural benimsedi: bir özellik ancak maliyetini ölçülmüş kare süresi verileriyle açıklayabiliyorsa ilerler. Erken belirlenen bu kısıtlama, hacimsel arazi ve clipmap'lerle ilgili sonraki mimari kararları önemli ölçüde sadeleştirdi.</p>
<h2 id="projenin-yonunu-degistiren-donum-noktası" tabindex="-1">Projenin yönünü değiştiren dönüm noktası <a class="header-anchor" href="#projenin-yonunu-degistiren-donum-noktası" aria-label="Permalink to &quot;Projenin yönünü değiştiren dönüm noktası&quot;"></a></h2>
<p>Spike 10'dan önce zihinsel modelimiz &quot;daha büyük dünya, daha fazla geometri demektir&quot; şeklindeydi. <a href="/tr/blog/2026-02-25-open-world-browser-part-06-clipmaps.html">Spike 10'dan</a> sonra bu model &quot;sabit geometri bütçesi, kamera merkezli halka güncellemeleri&quot; hâline geldi.</p>
<p>Geometri clipmap'leri — kameranın etrafında merkezlenmiş ve her biri giderek daha kaba hâle gelen eş merkezli arazi halkaları — çizim mesafesi ne olursa olsun üçgen sayısının yaklaşık olarak sabit kalmasını sağladı. Uygulamadaki püf noktası, halka sınırlarındaki geometri geçişiydi: çözünürlük seviyeleri arasındaki değişimin hareket hâlindeyken görünmemesi için tepe yüksekliklerini shader içinde yumuşak biçimde harmanlamak.</p>
<p>Test yönteminden incelikli bir ders çıktı. Clipmap'ler ekran görüntülerinde iyi görünür. Kusurlarını yalnızca kamera halka sınırlarından sürekli olarak geçerken belli ederler. Ekip, sabit hızlı geçişler yapıp zamansal gürültüyü gözlemlemek için zaman harcadı. Oleg, &quot;Ekran görüntüleri yalan söyledi,&quot; diye yazıyor. &quot;Gerçeği hareket gösterdi.&quot;</p>
<h2 id="yer-altına-inmek" tabindex="-1">Yer altına inmek <a class="header-anchor" href="#yer-altına-inmek" aria-label="Permalink to &quot;Yer altına inmek&quot;"></a></h2>
<p>Yükseklik haritaları mağaraları temsil edemez. Izgaradaki her nokta için tek bir yükseklik değeri saklarlar. Tünellere, çıkıntılara veya oyulmuş kaya yüzeylerine ihtiyaç duyduğunuz anda hacimsel arazi gerekir.</p>
<p><a href="/tr/blog/2026-02-25-open-world-browser-part-07-marching-cubes.html">Spike 12</a>, WebGPU hesaplama shader'larını kullanarak marching cubes'ı GPU üzerinde uyguladı ve 3B işaretli mesafe alanından üçgen ağları çıkardı. Dört adet 64 küplük parça, animasyonlu SDF düzenlemelerinden gelen kare başına ağ güncellemeleriyle aynı anda çalıştı. Hesaplama shader'ı, CPU'ya hiçbir geri okuma yapmadan alanı değerlendirmekten hücreleri sınıflandırmaya ve tepe noktalarını üretmeye kadar her şeyi yönetti.</p>
<p>Zorluk bunu çalıştırmak değildi. Diğer her şeyle birlikte çalışmasını sağlamaktı. Three.js'in sahne grafiğiyle entegrasyon, tampon yaşam döngüsü yönetimi (WebGPU tamponları yeniden boyutlandırılamaz), hâlâ kullanımda olan GPU kaynaklarını yok etmekten kaçınmak için fence yönetimi... Seri, &quot;kademeli sağlamlaştırma&quot; adını verdiğimiz şeye <a href="/tr/blog/2026-02-25-open-world-browser-part-08-webgpu-integration.html">iki</a> tam bölüm ayırıyor: her seferinde tek bir yetenek ekleyip her eklemeden sonra önceki katmanın hâlâ çalıştığını doğrulamaya dayanan gösterişsiz süreç.</p>
<h2 id="birlesim-yeri-kabusu" tabindex="-1">Birleşim yeri kâbusu <a class="header-anchor" href="#birlesim-yeri-kabusu" aria-label="Permalink to &quot;Birleşim yeri kâbusu&quot;"></a></h2>
<p>Serinin teknik açıdan en çetin bölümü, farklı çözünürlüklerdeki arazi parçaları bir araya geldiğinde neler olduğunu ele alan <a href="/tr/blog/2026-02-25-open-world-browser-part-09-transvoxel-first-cut.html">9. Bölüm'den 11. Bölüm'e kadar</a> uzanıyor.</p>
<p>Yüksek ayrıntılı bir parça düşük ayrıntılı bir parçanın yanına geldiğinde, bağımsız olarak oluşturulan ağları sınırda hizalanmaz. Sonuç; görünür çatlaklar, titreyen kenarlar ve ışığın sızdığı T bağlantılarıdır. Transvoxel algoritması, çözünürlük farkları arasında köprü kuran özel geçiş hücreleriyle bu sorunu çözer. Ancak algoritmayı tüm parça yapılandırmalarında tutarlı sarım sırası, doğru tampon yönetimi ve isabetli çizim aralıklarıyla doğru şekilde uygulamak altı ayrı deney gerektirdi.</p>
<p>Ekibin en unutulmaz hata ayıklama hikâyesi şuydu: geçiş mantığından kaynaklandığını düşündüğümüz bir birleşim yeri kusurunun peşinde geçen iki gün. Asıl suçlu eski veriydi. GPU hesaplama shader'ı bir tampona N tepe noktası yazıyordu ancak çizim çağrısı hâlâ önceki kareden kalan N+M tepe noktasını oluşturacak şekilde yapılandırılmıştı. Bu fazladan tepe noktaları, titreşen ve jilet inceliğinde üçgenler üreten bozuk veriler içeriyordu. Tek satırlık çözüm: çizim aralığını atomik sayacın etkin tepe noktası sayısıyla sınırlandırmak.</p>
<p>Oleg, &quot;Oluşturma hataları genellikle ağ oluşturma hatası kılığına girer,&quot; diye belirtiyor. &quot;Geometri başından beri doğruydu.&quot;</p>
<h2 id="kaostan-yonetisime" tabindex="-1">Kaostan yönetişime <a class="header-anchor" href="#kaostan-yonetisime" aria-label="Permalink to &quot;Kaostan yönetişime&quot;"></a></h2>
<p>Birleşim yeri mücadelesinin ardından ekip, plansız parça davranışını <a href="/tr/blog/2026-02-25-open-world-browser-part-11-policy-modes.html">açık bir politika sistemiyle</a> değiştirdi. Artık merkezi bir işlev her parçanın LOD seviyesine, oluşturma moduna (yükseklik haritası veya marching cubes) ve hangi yüzlerde geçiş hücreleri gerektiğine karar veriyordu. Mesafe halkaları temel LOD'u belirliyordu. Komşuluk kısıtlaması, yan yana iki parçanın çözünürlük seviyeleri arasında birden fazla kademe fark olmamasını sağlıyordu. Düzenleme bit eşlemi ise üretici değişiklikleri içeren hacimsel parçaları, mesafeden bağımsız olarak marching-cubes modunda tutuyordu.</p>
<p>Renk kodlu hata ayıklama katmanları — yükseklik haritası parçaları için yeşil, marching cubes parçaları için mavi, geçiş yüzleri için turuncu — &quot;şu sırtın yakınlarında bir yerde hata gördüm&quot; ifadesini &quot;hata kuzeybatıya bakan (142, 12, -67) konumunda görünüyor&quot; ifadesine dönüştürdü.</p>
<p>Oleg, &quot;Politika karmaşıklığı azaltmadı,&quot; diye yazıyor. &quot;Karmaşıklığı düzenledi.&quot;</p>
<h2 id="tum-bunların-ortaya-cıkardıgı-sonuc" tabindex="-1">Tüm bunların ortaya çıkardığı sonuç <a class="header-anchor" href="#tum-bunların-ortaya-cıkardıgı-sonuc" aria-label="Permalink to &quot;Tüm bunların ortaya çıkardığı sonuç&quot;"></a></h2>
<p>Son spike; clipmap halkalarını, parça başına gökyüzü sisini (her arazi parçasının yönündeki gerçek gökyüzü kutusu rengini örnekleyen) ve Three.js modül bağlantılarını birleşik bir gösterimde bir araya getirdi. Sonuç; yakın alanda hacimsel düzenlemeyi, orta alanda yükseklik haritası parçalarını ve uzak alanda clipmap halkalarını; modu, LOD'u ve geçişleri yöneten bir politika katmanı altında birleştiren bir arazi sistemi.</p>
<p>Seri, Oleg'in gelecekteki her projede tekrarlayacağını söylediği <a href="/tr/blog/2026-02-25-open-world-browser-part-12-lessons.html">derslerle</a> sona eriyor:</p>
<ul>
<li><strong>Özellik geliştirmeden önce risk spike'larıyla başlayın.</strong> İçerik işlem hatlarına yatırım yapmadan önce &quot;bunu gerçekten yapabilir miyiz?&quot; sorularını ortadan kaldırın.</li>
<li><strong>Büyük entegrasyon adımlarından önce çalıştığı bilinen temel sürümleri sabitleyin.</strong> Temiz bir kontrol noktası oluşturmak için harcanan bir gün, daha sonra gerilemeleri ikili aramayla bulmak için harcanacak birkaç günü kurtarır.</li>
<li><strong>Uzun optimizasyon süreçlerinden önce politika ve gözlemlenebilirliği zorunlu kılın.</strong> Tetikleme kurallarına sahip adlandırılmış koşullar, gizemli hatalara her zaman üstün gelir.</li>
<li><strong>Ekran görüntülerinde değil, hareket hâlinde test edin.</strong> Ani geçişler, titremeler ve veri akışı takılmalarının tümü sabit karelerde gizlenir.</li>
<li><strong>Ortalama FPS'yi değil, özellik başına kare süresini ölçün.</strong> Ortalamalar, kullanıcıların gerçekten hissettiği sıçramaları gizler.</li>
<li><strong>Dağınık kısımları da yayımlayın.</strong> Yanlış yolları, hayalet avlarını, yanlış sistemi suçlayarak geçen iki günü... İnsanların gerçekten ders çıkarabileceği kısımlar bunlardır.</li>
</ul>
<h2 id="bunun-cinevva-nın-otesinde-tasıdıgı-onem" tabindex="-1">Bunun Cinevva'nın ötesinde taşıdığı önem <a class="header-anchor" href="#bunun-cinevva-nın-otesinde-tasıdıgı-onem" aria-label="Permalink to &quot;Bunun Cinevva'nın ötesinde taşıdığı önem&quot;"></a></h2>
<p>Seri, tek bir şirketin arazi işlem hattının ötesine geçen üç nedenle önem taşıyor.</p>
<p>Birincisi, WebGPU hesaplama shader'larının, WebAssembly fiziğinin ve uçta dağıtılan Durable Objects'in bir eşiği aştığını gösteriyor. Hacimsel araziye, gerçek zamanlı düzenlemeye ve akışlı LOD'a sahip çok oyunculu bir açık dünya, 2026'da bir tarayıcı sekmesinde mimari açıdan uygulanabilir durumda. Bu, iki yıl önce mümkün değildi.</p>
<p>İkincisi, spike yöntemi — her biri canlı ve ölçülebilir sonuçlarla tek bir riskli soruyu yanıtlayan küçük, odaklı deneyler — çalışmayabilecek bir şeyi denemeye girişen her ekip için bir şablon sunuyor. Taahhütte bulunmadan önce ölçme, entegrasyondan önce temel ölçümler oluşturma ve optimizasyondan önce uç durumları adlandırma disiplini, arazi sistemlerinin çok ötesinde geçerlidir.</p>
<p>Üçüncüsü, bu radikal şeffaflık başlı başına amaçtır. Çıkmaz yollar ve iki günlük hata ayıklama sapmaları dâhil olmak üzere 24 deneyin tamamının kaynak kodunu yayımlamak, bunu teknik bir blogdan daha fazlasına dönüştürüyor. Bu, okuyucuya müşteri değil meslektaş gibi davranan, herkese açık bir mühendislik defteri.
Serinin tamamına, her teknik denemenin tarayıcıda canlı olarak çalıştığı <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">seri rehberimizden</a> ulaşabilirsiniz.</p>
<hr>
<p><em>Bu makale ilk olarak <a href="https://vio-202020.medium.com/de-risking-an-ambitious-project-before-committing-to-anything-big-like-an-online-open-world-c94a7c05ee06" target="_blank" rel="noreferrer">Medium'da</a> yayımlandı.</em></p>
]]></content:encoded>
            <enclosure url="https://app.cinevva.com/img/blog/open-world-browser-120fps.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Eskizden videoya ve oynanabilir 3D'ye: karakter, hikâye kareleri ve rig]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-03-04-sketch-to-animated-3d-character</link>
            <guid>https://app.cinevva.com/tr/blog/2026-03-04-sketch-to-animated-3d-character</guid>
            <pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Cinevva'nın Görsel Oluşturucu, Video Oluşturucu ve 3D Model Oluşturucu araçlarıyla kaba bir karakter eskizini yapay zekâyla oluşturulmuş dikey bir kısa videoya ve tarayıcıda hareket ettirebileceğiniz rig'lenmiş bir 3D modele nasıl dönüştürdük?]]></description>
            <content:encoded><![CDATA[<h1 id="eskizden-videoya-ve-oynanabilir-3d-ye" tabindex="-1">Eskizden videoya ve oynanabilir 3D'ye <a class="header-anchor" href="#eskizden-videoya-ve-oynanabilir-3d-ye" aria-label="Permalink to &quot;Eskizden videoya ve oynanabilir 3D'ye&quot;"></a></h1>
<p><em>Cinevva CTO'su <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<p>Bir karakteri düz bir eskizden oynanabilir bir 3D oyuna dönüştürmek eskiden bir konsept sanatçısı, 3D modelleme sanatçısı, rig uzmanı, animatör ve tüm bunları bir oyun motorunda bir araya getirecek birini gerektiriyordu. Bu iş akışının ne kadarını <a href="/tr/tools/">Cinevva'nın yaratıcı araçlarının</a> kendi başlarına üstlenebileceğini görmek istedik. İşte bulduklarımız.</p>
<p>Karakter, bir milyondan fazla pelüş hayvan kapüşonlusunu Nordstrom, Amazon ve Disney Store üzerinden satan çocuk markası <a href="https://thecubcoats.com" target="_blank" rel="noreferrer">Cubcoats</a>'tan <strong>Kedicik Kali</strong>. Cubcoats'un belirli kişiliklere sahip sekiz özgün karakteri, kurgusal bir ada dünyası ve 14 patenti var. Marka, 2026'da lisanslama odaklı bir platform olarak yeniden faaliyete geçiyor. Biz de bu fikrî mülkiyetin fiziksel ürünlerin ötesine taşındığında nasıl göründüğünü göstermek istedik: dikey bir kısa video ve tarayıcıda hareket ettirebileceğiniz rig'lenmiş bir 3D karakter. Aşağıdakilerin tamamı bu çalışmadan elde edilen gerçek çıktılardır.</p>
<p>Yörüngede döndürmek için 3D görüntüleyicileri sürükleyin. Dikey kısa videonun ilk kareden son kareye nasıl ilerlediğini görmek için film şeridini kaydırın.</p>
<h2 id="duz-kitap-ciziminden-cevresinde-dondurebileceginiz-bir-karaktere" tabindex="-1">Düz kitap çiziminden çevresinde döndürebileceğiniz bir karaktere <a class="header-anchor" href="#duz-kitap-ciziminden-cevresinde-dondurebileceginiz-bir-karaktere" aria-label="Permalink to &quot;Düz kitap çiziminden çevresinde döndürebileceğiniz bir karaktere&quot;"></a></h2>
<p>Cubcoats'un zaten güzel 2D illüstrasyonları vardı. Mimi Chao'nun sanat yönetimi, her karaktere hem kapüşonlularda hem de hikâye kitaplarında kusursuz çalışan sıcak, yuvarlak ve elle çizilmiş bir görünüm kazandırmıştı. Ancak düz çizimler 3D iş akışına uygun değildir. Video üretimi, mesh oluşturma ve rig işlemlerinde referans olarak kullanılabilecek, tüm aşamalarda aynı yüzü koruyan yüksek kaliteli bir karaktere ihtiyacımız vardı.</p>
<p>Özgün kitap illüstrasyonlarını <a href="/tr/tools/flux.html">Görsel Oluşturucumuza</a> yükleyip aynı karakterin 3D render edilmiş bir sürümünü üretmesini isteyerek başladık.</p>
<figure class="pipeline-media pipeline-media--single">
<img src="/blog/sketch-to-3d-pipeline/kali-flat-book-art.png" alt="Kedicik Kali'nin özgün düz Cubcoats illüstrasyonları" loading="lazy">
<figcaption><strong>Başlangıç noktası.</strong> Kali'nin özgün 2D kitap illüstrasyonları. Sıcak, etkileyici ve tamamen düz.</figcaption>
</figure>
<p>Oranlar korundu, karakterin kişiliği yansıtıldı ve yumuşak 3D çizgi film görünümü sonraki tüm araçlara tutarlı bir temel sundu. Ardından kesin pozu ve kadrajı tekrar tekrar iyileştirerek sabitlenmiş ana karakter referansını elde ettik.</p>
<div class="pipeline-media pipeline-media--two">
<figure>
<img src="/blog/sketch-to-3d-pipeline/kali-3d-chatgpt.png" alt="Kali için sabitlenmiş 3D tarzı karakter referansı" loading="lazy">
<figcaption><strong>Sabitlenmiş ana karakter referansı.</strong> Videoda ve mesh için görsel dayanak olarak kullanılan tam boy 3D çizgi film görünümü.</figcaption>
</figure>
<figure>
<img src="/blog/sketch-to-3d-pipeline/kali-3d-tpose.png" alt="3D üretimi ve rig işlemi için T-pozu referansı" loading="lazy">
<figcaption><strong>T-pozu sayfası.</strong> Aynı karakter, kolları iki yana açık. Bu görsel hem [3D Model Oluşturucuya](/tr/tools/hunyuan3d) hem de [otomatik rig aracına](/tr/tools/rigger) aktarıldı.</figcaption>
</figure>
</div>
<p>T-pozu önemlidir çünkü rig işlemi, kolların gövdeden uzakta olmasını gerektirir. Bu adımı atlarsanız otomatik rig aracı kolları gövdeyle birleştirir ve işlemi tamamlayamaz. T-pozunu aynı sabitlenmiş karakter görünümünden ürettik; böylece silüet ve oranlar her aşamada tutarlı kaldı.</p>
<h2 id="herhangi-bir-sey-uretmeden-once-hikayeyi-yazın" tabindex="-1">Herhangi bir şey üretmeden önce hikâyeyi yazın <a class="header-anchor" href="#herhangi-bir-sey-uretmeden-once-hikayeyi-yazın" aria-label="Permalink to &quot;Herhangi bir şey üretmeden önce hikâyeyi yazın&quot;"></a></h2>
<p>Video araçlarına geçmeden önce hikâyenin ana vuruşlarını sade bir dille yazdık. Kali'nin Cubcoats evrenindeki kişilik özelliği &quot;Pozitif&quot; olmasıdır. Herkesin kendini gruba dâhil hissetmesini sağlayan ve işler zorlaştığında iyimserliğini koruyan karakter odur. Bu yüzden onun etrafında on saniyelik bir hikâye akışı oluşturduk:</p>
<blockquote>
<p>Kali, gece vakti elinde minik, parlayan bir fenerle karanlık ve sisli bir ormana girer. Korkar, tek başına yere oturur ve neredeyse pes eder. Sonra arkasında ışıldayan büyülü, altın bir ağaç keşfeder. Hayret, neşe ve gökten yağan altın parçacıklar. Tek nefeste korkudan umuda.</p>
</blockquote>
<p>Hikâyenin tamamı bu. Karmaşık olmasına gerek yok. Başlangıç ve bitiş karelerinin gerçekten birbirine bağlanabilmesi için tek bir kesintisiz çekimde tek bir duygusal dönüşe sığması gerekir.</p>
<h2 id="tum-hikayeyi-cevreleyen-iki-kare" tabindex="-1">Tüm hikâyeyi çevreleyen iki kare <a class="header-anchor" href="#tum-hikayeyi-cevreleyen-iki-kare" aria-label="Permalink to &quot;Tüm hikâyeyi çevreleyen iki kare&quot;"></a></h2>
<p>Bu hikâyeden yola çıkarak <a href="/tr/tools/flux.html">Görsel Oluşturucumuzla</a> iki ana sabit kare ürettik. Dikey kısa videoya uyması için portre en-boy oranını kullandık. İstemler, tamamen aynı karakteri iki farklı anda betimliyor.</p>
<p><strong>Başlangıç karesi istemi:</strong></p>
<blockquote>
<p>Kali'nin 3D animasyonlu Pixar tarzı render'ı; iri, yuvarlak, koyu renk gözlere, sivri pembe kulaklara, açık pembe bir karna ve neşeli, yuvarlak bir yüze sahip küçük pembe bir kedicik karakter. Gece vakti, karanlık ve sisli bir ormanın kıyısında duruyor ve iki patisiyle minik, parlayan bir fener tutuyor. Kulakları hafifçe geriye yatmış, ifadesi gergin ama kararlı. Yukarıdan gelen soğuk mavi ay ışığı ve fenerden yayılan sıcak turuncu parıltıyla sinematik aydınlatma. Arka plandaki koyu ağaç gövdelerinin arasında yoğun sis. Kamera açısı: orta çekim, hafif alçak açıdan ona doğru yukarı bakıyor. Metin yok, filigran yok.</p>
</blockquote>
<p><strong>Bitiş karesi istemi:</strong></p>
<blockquote>
<p>Kali'nin 3D animasyonlu Pixar tarzı render'ı; iri, yuvarlak, koyu renk gözlere, sivri pembe kulaklara ve açık pembe bir karna sahip küçük pembe bir kedicik karakter. Parlayan altın çiçeklerle kaplı devasa, büyülü bir ağacın önünde duruyor; kolları iki yana açılmış ve yüzünde kocaman, neşe dolu bir gülümseme var. Altın yapraklar çevresinde havada süzülüyor. Ağaç, orman açıklığının tamamını aydınlatan sıcak, altın bir ışık yayıyor. Yukarıda yıldızlı gece gökyüzü görünüyor. Kamera açısı: hafif alçak açıdan geniş çekim, görkemli açığa çıkış kompozisyonu. Metin yok, filigran yok.</p>
</blockquote>
<div class="pipeline-media pipeline-media--two">
<figure>
<img src="/blog/sketch-to-3d-pipeline/kali-start-frame.png" alt="Dikey yapay zekâ videosunun başlangıç karesi" loading="lazy">
<figcaption><strong>Başlangıç karesi.</strong> Ormanın kıyısında feneriyle duran gergin Kali.</figcaption>
</figure>
<figure>
<img src="/blog/sketch-to-3d-pipeline/kali-end-frame.png" alt="Dikey yapay zekâ videosunun bitiş karesi" loading="lazy">
<figcaption><strong>Bitiş karesi.</strong> Altın ağacın önündeki neşeli Kali.</figcaption>
</figure>
</div>
<p>Seedance bu iki uç kare arasında geçiş oluşturuyor. Modelin ikisinin de aynı kişi olduğunu anlaması için karakter açıklaması her iki istemde de aynı kalıyor. Yalnızca sahne, duygu ve kamera değişiyor.</p>
<h2 id="video-bekledigimizden-daha-iyi-cıktı" tabindex="-1">Video beklediğimizden daha iyi çıktı <a class="header-anchor" href="#video-bekledigimizden-daha-iyi-cıktı" aria-label="Permalink to &quot;Video beklediğimizden daha iyi çıktı&quot;"></a></h2>
<p>Her iki kareyi de Cinevva'nın <a href="/tr/tools/video.html">Video Oluşturucusuna</a> yükledik, Seedance 1.5 Pro'yu seçtik, en-boy oranını 9:16 ve süreyi 15 saniye olarak ayarladık, hikâyeyi hareket istemine yazdık ve Oluştur'a bastık.</p>
<figure class="pipeline-media pipeline-media--single">
<img src="/blog/sketch-to-3d-pipeline/video-generator-setup.png" alt="Başlangıç ve bitiş kareleri yüklenmiş Cinevva Video Oluşturucu" loading="lazy">
<figcaption><strong>Gerçek kurulum.</strong> Başlangıç karesi, bitiş karesi, hareket istemi, 9:16 dikey format, 15 saniye ve ses açık.</figcaption>
</figure>
<p>Klip, iki uç kare arasında geçiş oluşturuyor. Yerel ses de aynı işlem sırasında üretildi. İşte zaman çizelgesinin farklı noktalarından alınan kareler.</p>
<div class="pipeline-filmstrip" aria-label="Oluşturulan dikey videodan kareler">
<img src="/blog/sketch-to-3d-pipeline/seedance-frames/frame_01.jpg" alt="Video karesi 1" loading="lazy">
<img src="/blog/sketch-to-3d-pipeline/seedance-frames/frame_02.jpg" alt="Video karesi 2" loading="lazy">
<img src="/blog/sketch-to-3d-pipeline/seedance-frames/frame_03.jpg" alt="Video karesi 3" loading="lazy">
<img src="/blog/sketch-to-3d-pipeline/seedance-frames/frame_04.jpg" alt="Video karesi 4" loading="lazy">
<img src="/blog/sketch-to-3d-pipeline/seedance-frames/frame_05.jpg" alt="Video karesi 5" loading="lazy">
<img src="/blog/sketch-to-3d-pipeline/seedance-frames/frame_06.jpg" alt="Video karesi 6" loading="lazy">
<img src="/blog/sketch-to-3d-pipeline/seedance-frames/frame_07.jpg" alt="Video karesi 7" loading="lazy">
<img src="/blog/sketch-to-3d-pipeline/seedance-frames/frame_08.jpg" alt="Video karesi 8" loading="lazy">
<img src="/blog/sketch-to-3d-pipeline/seedance-frames/frame_09.jpg" alt="Video karesi 9" loading="lazy">
</div>
<p class="pipeline-caption">Soldan sağa: oluşturulan dikey kısa videodaki ilerleyiş.</p>
<p>Kesin bir kapanış pozuna ulaşmak istediğimizde başlangıç ve bitiş karesi modu doğru seçimdi. Daha uzun duygusal akışlarda tek referans ve istem yöntemi, <a href="/tr/tools/video.html">Video Oluşturucunun</a> Kling 3.0 Pro hikâye panosu moduyla iyi sonuç verdi. Farklı işler için farklı ayarlar.</p>
<h2 id="aynı-karakter-simdi-3d" tabindex="-1">Aynı karakter, şimdi 3D <a class="header-anchor" href="#aynı-karakter-simdi-3d" aria-label="Permalink to &quot;Aynı karakter, şimdi 3D&quot;"></a></h2>
<p>İşin ilginçleştiği yer burası. Video referanslarıyla aynı görsel aileden gelen T-pozu görselini, görselden 3D üretimi için <a href="/tr/tools/hunyuan3d.html">3D Model Oluşturucumuza</a> gönderdik. Oyun mesh'ini videoyla piksel piksel eşleştirmiyorsunuz. Oyuncunun belleğindeki karakterle eşleştiriyorsunuz. Oyundaki karakter, kısa videodakiyle aynı kişiliğe sahipmiş gibi hissettirmeli. Başlangıçta tek bir görsel kimliği sabitlediğimiz için de öyle oldu.</p>
<figure class="pipeline-media pipeline-media--single">
<img src="/blog/sketch-to-3d-pipeline/kali-preview.png" alt="Hunyuan3D mesh'inin render edilmiş önizlemesi" loading="lazy">
<figcaption>Oluşturulan mesh'in önizleme render'ı. Rig işleminden önce dokular ve oranlar.</figcaption>
</figure>
<p><a href="/tr/tools/hunyuan3d.html">3D Model Oluşturucu</a>, dokulu bir GLB çıktısı verir. Oyun için hazır değildir ama Kali olduğu kolayca anlaşılır. Silüet eşleşti. Malzemeler oldukça yakındı. İlerlemek için yeterince iyiydi.</p>
<h2 id="bunları-surukleyerek-dondurun" tabindex="-1">Bunları sürükleyerek döndürün <a class="header-anchor" href="#bunları-surukleyerek-dondurun" aria-label="Permalink to &quot;Bunları sürükleyerek döndürün&quot;"></a></h2>
<p><a href="/tr/tools/hunyuan3d.html">3D Model Oluşturucunun</a> ham çıktısı. Rig yok, yalnızca dokulu bir mesh. Yanında ise otomatik rig işleminden geçirilmiş ve yürüme animasyonu gömülmüş aynı karakter var.</p>
<ClientOnly>
  <SketchPipelineModels />
</ClientOnly>
<h2 id="rig-ve-animasyon" tabindex="-1">Rig ve animasyon <a class="header-anchor" href="#rig-ve-animasyon" aria-label="Permalink to &quot;Rig ve animasyon&quot;"></a></h2>
<p><a href="/tr/tools/hunyuan3d.html">3D Model Oluşturucu</a> size bir mesh verir. Bu mesh'in hareket edebilmesi için bir iskelete ve animasyonlara ihtiyacı vardır. Platformumuz rig işlemini otomatik olarak gerçekleştirir: GLB'yi yükleyin, eksiksiz bir animasyon kitaplığına sahip rig'lenmiş modeli geri alın. Yürüme döngüleri, boşta nefes alma, zıplamalar ve bir oyun karakterinin ihtiyaç duyduğu her şey.</p>
<p>Varsayılan yürüme animasyonu neredeyse doğru görünüyordu ama tam değildi. Kali'nin kolları vücuduna fazla yakındı ve başı hafifçe yanlış bir açıyla eğiliyordu. Her ikisi de genel bir insansı karakter için mantıklıydı ancak yuvarlak bir çizgi film kediciğinde tuhaf görünüyordu. Bu yüzden oyun koduna çalışma zamanı kemik düzeltmeleri ekledik: kolları dışarı iten bir omuz ofseti ve eğimi düzelten bir baş dönüşü düzeltmesi. Küçük ayarlar, büyük fark. Bunlar olmadan sert ve robotik görünüyordu. Bunlarla birlikte yeniden Kali gibi göründü.</p>
<h2 id="karakteri-tarayıcıda-oynamak" tabindex="-1">Karakteri tarayıcıda oynamak <a class="header-anchor" href="#karakteri-tarayıcıda-oynamak" aria-label="Permalink to &quot;Karakteri tarayıcıda oynamak&quot;"></a></h2>
<p>Rig'lenmiş modeli <a href="/tr/engine.html">Cinevva Engine'e</a> aktardık. Üçüncü şahıs kamerası, WASD ile hareket, etrafa dağılmış toplanabilir nesneler ve karakter boşta dururken yörünge kamerası. Animasyon geçişlerini doğru hâle getirmek birkaç deneme gerektirdi: boşta durma ve yürüme arasında yumuşak geçiş, yüksekliği normalleştirme, ileri eksenini düzeltme ve kemik ofsetlerini ayarlama. Karakterin arkasındaki üçüncü şahıs kamerası, eskizden hareket ettirebileceğiniz bir karaktere uzanan süreci tamamlıyor.</p>
<p>Kendiniz deneyin. Hareket etmek için WASD tuşlarını kullanın.</p>
<div class="pipeline-game-embed">
<iframe src="https://api.cinevva.com/games/game-mmbijtzp-d63d/" allow="fullscreen" loading="lazy"></iframe>
</div>
<h2 id="bunu-yarın-yapacak-birine-ne-soylerdim" tabindex="-1">Bunu yarın yapacak birine ne söylerdim? <a class="header-anchor" href="#bunu-yarın-yapacak-birine-ne-soylerdim" aria-label="Permalink to &quot;Bunu yarın yapacak birine ne söylerdim?&quot;"></a></h2>
<p>Herhangi bir üretim aracına dokunmadan önce tek bir karakter görünümünü sabitleyin. Bu referansı doğru hâle getirmek için harcadığınız her dakika, daha sonra tutarlılık peşinde koşacağınız bir saatten tasarruf ettirir.</p>
<p>Önce kısa bir hikâye yazın. Ardından başlangıç ve bitiş karelerinizi <a href="/tr/tools/flux.html">Görsel Oluşturucuyla</a> üretin. Referans görsellerini API boyut sınırları içinde tutun. <a href="/tr/tools/hunyuan3d.html">3D Model Oluşturucuya</a> aktarırken aynı tasarım sisteminden gelen T-pozunu kullanın.</p>
<p>Her iki kareyi de <a href="/tr/tools/video.html">Video Oluşturucuya</a> verin ve aralarındaki geçişi oluşturmasına izin verin. Oyun mesh'i için modeli platform üzerinden rig'leyin ve varsayılan animasyonlar karakterinizin oranlarına tam uymuyorsa çalışma zamanında kemik ofsetlerini ayarlayın.</p>
<p>İki yıl önce bu iş akışı yoktu. Bir ekibe ve bütçeye ihtiyacınız olurdu. Artık bir eskiz ve Cinevva'nın <a href="/tr/tools/">yaratıcı araçları</a> yeterli. Bence bu, kimlerin bir karaktere hayat verebileceği konusunda anlamlı bir değişim.</p>
<hr>
<p><em>Kullanılan Cinevva araçları: <a href="/tr/tools/flux.html">Görsel Oluşturucu</a>, <a href="/tr/tools/video.html">Video Oluşturucu</a>, <a href="/tr/tools/hunyuan3d.html">3D Model Oluşturucu</a>, otomatik rig ve <a href="/tr/engine.html">Cinevva Engine</a>. 2026'nın başındaki durumu yansıtır.</em></p>
]]></content:encoded>
            <enclosure url="https://app.cinevva.com/blog/sketch-to-3d-pipeline/kali-start-frame.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya geliştirmek, bölüm 1: İşe onu bozmaya çalışarak başladık]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-01-risk-first</link>
            <guid>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-01-risk-first</guid>
            <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Mağaralar veya gösterişli shader'lar geliştirmeden önce tatsız bir soruyu yanıtlamamız gerekiyordu: Bu şey gerçekten tarayıcıda çalışabilir mi?]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-gelistirmek-bolum-1-ise-onu-bozmaya-calısarak-basladık" tabindex="-1">Tarayıcıda açık dünya geliştirmek, bölüm 1: İşe onu bozmaya çalışarak başladık <a class="header-anchor" href="#tarayıcıda-acık-dunya-gelistirmek-bolum-1-ise-onu-bozmaya-calısarak-basladık" aria-label="Permalink to &quot;Tarayıcıda açık dünya geliştirmek, bölüm 1: İşe onu bozmaya çalışarak başladık&quot;"></a></h1>
<p><em>Cinevva CTO'su ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p>Tamamen tarayıcıda çalışan çok oyunculu bir açık dünya geliştiriyoruz. Kurulum yok, uygulama mağazası yok; yalnızca bir URL var. Başlangıçtaki en büyük risk açıktı: Bir tarayıcı, oynanış, fizik ve ağ iletişimi için yeterli pay bırakırken kalıcı bir 3D dünyayı oynanabilir kare hızlarında işleyebilir mi?</p>
<p>Çoğu açık dünya projesi öngörülebilir bir sırayla başarısız olur. Önce güzel bir konsept elde edersiniz. Ardından hoş görünen bir sahne oluşturursunuz. Sonra da henüz oynanış ortada yokken kare bütçenizin çoktan tükendiğini fark edersiniz.</p>
<p>Başka herhangi bir şeye yatırım yapmadan önce render bütçesi sorusunu yanıtlamak istedik. Bu yüzden Spike 1, gösterişli fragmanı es geçti ve doğrudan ölçüm yapmaya odaklandı.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/01-terrain/" title="Spike 1 Arazi ve Örnekleme" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/01-terrain/" target="_blank">Spike 1'i yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=01-terrain">Kaynak kodunu görüntüle</a></p>
<p>Kurulum bilerek basit tutuldu. 512 metrelik bir arazi mesh'i, ada kenarlarına doğru alçalan katmanlı sinüs gürültüsüyle oluşturulan prosedürel yükseklik, bir su düzlemi, atmosferik sis ve örneklenmiş 500 nesne. Three.js ile sade WebGL, ACES ton eşleme kullandık ve gölgeleri devre dışı bıraktık.</p>
<p>Nasıl göründüğünü önemsemedik. Kamerayı sahnede hareket ettirirken sahnenin kararlı kalıp kalmadığını önemsedik.</p>
<p>Bu spike'tan tüm projeye yön veren iki sonuç çıktı.</p>
<p>İlk olarak, ilk geçişi disiplinli tuttuğumuz sürece masaüstünde gerçekten yeterli performans payımız olduğunu doğruladık. Bu da daha sonra daha zorlu arazi mimarisini denemek için bize güven verdi.</p>
<p>İkinci olarak, bir temel performans sözleşmesi oluşturduk. Sonraki her spike, maliyetini bu sahneye kıyasla açıklamak zorundaydı. Yeni bir özellik iyi görünüyor ancak maliyeti çok yüksekse bir üst aşamaya geçirilmedi.</p>
<p>Bu temel ölçüm disiplini; daha sonra parça birleşim artefaktları, karma LOD geçişleri ve compute tabanlı mesh üretimiyle karşılaştığımızda kritik önem kazandı. Kararlı bir referans olmadan her hata gerçekte olduğundan daha büyük görünür.</p>
<ol start="2">
<li>bölümde render'dan girdi hissine geçiyoruz. Worker fiziği, mimari belgelerinde kulağa harika gelir. Ancak bir tuşa bastığınızda karakter hâlâ anında tepki veriyorsa anlam taşır.</li>
</ol>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>Heightmap arazisi.</strong> Her hücrenin tek bir yükseklik değeri sakladığı 2D bir ızgaradır. GPU, arazi yüzeyini oluşturmak için düz bir mesh'i vertex shader'da deforme eder. Heightmap'ler kompakttır (65x65'lik bir parça, 16 bitte yaklaşık 8 KB'dir), GPU dostudur ve hızlı işlenir. Sınırlamaları ise mağaraları, çıkıntıları veya kendi üzerine kıvrılan herhangi bir yüzeyi temsil edememeleridir. Heightmap kısıtlamaları ve bunlardan sonra gelen yaklaşımlar hakkında bilgi için <a href="/tr/guides/landscape-generation-browser.html#why-heightmaps-arent-enough">arazi üretimi rehberimize</a> bakın.</p>
<p><strong>Three.js.</strong> Bu proje boyunca kullandığımız render kütüphanesidir. Three.js, WebGL 2'yi (ve daha sonra WebGPU'yu) kameralar, ışıklar, malzemeler ve geometri nesneleri içeren bir sahne grafiği hâlinde soyutlar. Aynı geometrinin çok sayıda kopyasını tek bir draw call ile işlemek için <code>InstancedMesh</code>, görüş hacmi ayıklama, PBR malzemeleri ve son işleme özellikleri sunar. Bkz. <a href="https://github.com/mrdoob/three.js" target="_blank" rel="noreferrer">GitHub'da Three.js</a>. Three.js'in tarayıcı tabanlı açık dünya teknoloji yığınındaki yeri için <a href="/tr/guides/browser-3d-open-world-tech.html#three-js">tarayıcıda 3D teknolojileri rehberimize</a> bakın.</p>
<p><strong>InstancedMesh.</strong> Aynı geometrinin N kopyasını, her biri farklı bir konumda/döndürmede/ölçekte olacak şekilde tek bir draw call ile işleyen bir Three.js özelliğidir. Örnek başına dönüşümler bir matris öznitelik tamponunda saklanır. Spike 1'de 500 nesneyi 500 ayrı draw call kullanmadan bu şekilde işledik. Büyük ölçekli bitki örtüsünde GPU tabanlı örnek ayıklama bu yaklaşımı daha da ileri taşır. <a href="/tr/guides/landscape-generation-browser.html#gpu-driven-vegetation-culling">GPU ile bitki örtüsü ayıklamayı ele alan arazi rehberimize</a> bakın.</p>
<p><strong>Kare bütçesi.</strong> 60 fps'de her karede JavaScript mantığı, fizik, render ve birleştirme dâhil her şey için <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.816ex;" xmlns="http://www.w3.org/2000/svg" width="13.598ex" height="2.773ex" role="img" focusable="false" viewBox="0 -864.9 6010.2 1225.5" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mfrac"><g data-mml-node="mrow" transform="translate(220,394) scale(0.707)"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1000,0)" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1500,0)" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(2000,0)"><path data-c="A0" d="" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(2250,0)"><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(833,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mn" transform="translate(1095.8,-345) scale(0.707)"><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)" style="stroke-width: 3;"/></g><rect width="2658.6" height="60" x="120" y="220"/></g><g data-mml-node="mo" transform="translate(3176.4,0)"><path data-c="2248" d="M55 319Q55 360 72 393T114 444T163 472T205 482Q207 482 213 482T223 483Q262 483 296 468T393 413L443 381Q502 346 553 346Q609 346 649 375T694 454Q694 465 698 474T708 483Q722 483 722 452Q722 386 675 338T555 289Q514 289 468 310T388 357T308 404T224 426Q164 426 125 393T83 318Q81 289 69 289Q55 289 55 319ZM55 85Q55 126 72 159T114 210T163 238T205 248Q207 248 213 248T223 249Q262 249 296 234T393 179L443 147Q502 112 553 112Q609 112 649 141T694 220Q694 249 708 249T722 217Q722 153 675 104T555 55Q514 55 468 76T388 123T308 170T224 192Q164 192 125 159T83 84Q80 55 69 55Q55 55 55 85Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(4232.2,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="2E" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" transform="translate(1000,0)" style="stroke-width: 3;"/><path data-c="37" d="M55 458Q56 460 72 567L88 674Q88 676 108 676H128V672Q128 662 143 655T195 646T364 644H485V605L417 512Q408 500 387 472T360 435T339 403T319 367T305 330T292 284T284 230T278 162T275 80Q275 66 275 52T274 28V19Q270 2 255 -10T221 -22Q210 -22 200 -19T179 0T168 40Q168 198 265 368Q285 400 349 489L395 552H302Q128 552 119 546Q113 543 108 522T98 479L95 458V455H55V458Z" transform="translate(1278,0)" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mfrac><mrow><mn>1000</mn><mtext> </mtext><mtext>ms</mtext></mrow><mn>60</mn></mfrac><mo>≈</mo><mn>16.7</mn></math></mjx-assistive-mml></mjx-container> ms vardır. Bir &quot;bütçe kontrolü&quot; spike'ı, temel sahnenin bu sürenin ne kadarını tükettiğini ölçer; böylece sonradan eklediğiniz her şey için kalan pay <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.357ex;" xmlns="http://www.w3.org/2000/svg" width="22.813ex" height="1.886ex" role="img" focusable="false" viewBox="0 -676 10083.4 833.8" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(394,-150) scale(0.707)"><path data-c="66" d="M273 0Q255 3 146 3Q43 3 34 0H26V46H42Q70 46 91 49Q99 52 103 60Q104 62 104 224V385H33V431H104V497L105 564L107 574Q126 639 171 668T266 704Q267 704 275 704T289 705Q330 702 351 679T372 627Q372 604 358 590T321 576T284 590T270 627Q270 647 288 667H284Q280 668 273 668Q245 668 223 647T189 592Q183 572 182 497V431H293V385H185V225Q185 63 186 61T189 57T194 54T199 51T206 49T213 48T222 47T231 47T241 46T251 46H282V0H273Z" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(306,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(750,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(1250,0)" style="stroke-width: 3;"/><path data-c="75" d="M383 58Q327 -10 256 -10H249Q124 -10 105 89Q104 96 103 226Q102 335 102 348T96 369Q86 385 36 385H25V408Q25 431 27 431L38 432Q48 433 67 434T105 436Q122 437 142 438T172 441T184 442H187V261Q188 77 190 64Q193 49 204 40Q224 26 264 26Q290 26 311 35T343 58T363 90T375 120T379 144Q379 145 379 161T380 201T380 248V315Q380 361 370 372T320 385H302V431Q304 431 378 436T457 442H464V264Q464 84 465 81Q468 61 479 55T524 46H542V0Q540 0 467 -5T390 -11H383V58Z" transform="translate(1639,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(2195,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(2587,0)" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(3031,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3143.6,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(4199.4,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="2E" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" transform="translate(1000,0)" style="stroke-width: 3;"/><path data-c="37" d="M55 458Q56 460 72 567L88 674Q88 676 108 676H128V672Q128 662 143 655T195 646T364 644H485V605L417 512Q408 500 387 472T360 435T339 403T319 367T305 330T292 284T284 230T278 162T275 80Q275 66 275 52T274 28V19Q270 2 255 -10T221 -22Q210 -22 200 -19T179 0T168 40Q168 198 265 368Q285 400 349 489L395 552H302Q128 552 119 546Q113 543 108 522T98 479L95 458V455H55V458Z" transform="translate(1278,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(6199.6,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(7199.8,0)"><g data-mml-node="mi"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(394,-150) scale(0.707)"><path data-c="62" d="M307 -11Q234 -11 168 55L158 37Q156 34 153 28T147 17T143 10L138 1L118 0H98V298Q98 599 97 603Q94 622 83 628T38 637H20V660Q20 683 22 683L32 684Q42 685 61 686T98 688Q115 689 135 690T165 693T176 694H179V543Q179 391 180 391L183 394Q186 397 192 401T207 411T228 421T254 431T286 439T323 442Q401 442 461 379T522 216Q522 115 458 52T307 -11ZM182 98Q182 97 187 90T196 79T206 67T218 55T233 44T250 35T271 29T295 26Q330 26 363 46T412 113Q424 148 424 212Q424 287 412 323Q385 405 300 405Q270 405 239 390T188 347L182 339V98Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(556,0)" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(1056,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(1450,0)" style="stroke-width: 3;"/><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z" transform="translate(1894,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(2172,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(2450,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(3006,0)" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>t</mi><mtext>features</mtext></msub><mo>=</mo><mn>16.7</mn><mo>−</mo><msub><mi>t</mi><mtext>baseline</mtext></msub></math></mjx-assistive-mml></mjx-container> olur. Temel sahne zaten 12 ms tüketiyorsa oynanış, fizik ve ağ iletişiminin tümü için yalnızca yaklaşık 4,7 ms kalır. Bu yaklaşım, <a href="/tr/guides/browser-3d-open-world-tech.html#what-we-can-learn-from-skyrim-and-the-witcher">GTA V, Skyrim ve Elden Ring'in</a> sabit kare bütçeleri içinde kalmak için yoğun LOD ve akış kullandığı AAA açık dünya geliştirme pratiğinden gelir.</p>
<hr>
<p>12 bölümün 1.'si.<br>
Sıradaki: <a href="/tr/blog/2026-02-25-open-world-browser-part-02-worker-physics.html">Bölüm 2 - Worker fiziği ve girdi gecikmesi korkusu</a><br>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya inşa etmek, bölüm 2: Worker üzerinde fizik ve giriş gecikmesi korkusu]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-02-worker-physics</link>
            <guid>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-02-worker-physics</guid>
            <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Rapier'ı bir Web Worker'a taşıdık ve herkesin ilk kaygılandığı şeyi ölçtük: hareket gecikmeli mi hissettiriyor?]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-insa-etmek-bolum-2-worker-uzerinde-fizik-ve-giris-gecikmesi-korkusu" tabindex="-1">Tarayıcıda açık dünya inşa etmek, bölüm 2: Worker üzerinde fizik ve giriş gecikmesi korkusu <a class="header-anchor" href="#tarayıcıda-acık-dunya-insa-etmek-bolum-2-worker-uzerinde-fizik-ve-giris-gecikmesi-korkusu" aria-label="Permalink to &quot;Tarayıcıda açık dünya inşa etmek, bölüm 2: Worker üzerinde fizik ve giriş gecikmesi korkusu&quot;"></a></h1>
<p><em>Cinevva CTO'su ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantılar sunuyor.</p>
<p>Yeterince uzun süre tarayıcı tabanlı çok oyunculu oyun geliştirirseniz, eninde sonunda şu tartışmayla karşılaşırsınız.</p>
<p>&quot;Fiziği bir worker'da çalıştırmak temiz bir mimaridir. Fiziği ana iş parçacığında çalıştırmak daha güvenli hissettirir.&quot;</p>
<p>İkisi de doğru olabilir. Önemli olan, gerçek girdiler altında kontrollerin nasıl hissettirdiği ve gecikmedir.</p>
<p>Spike 2, bu soruyu görüşlerle değil, ölçümlerle yanıtlamak için geliştirildi.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/02-rapier-worker/" title="Spike 2 Rapier Worker" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/02-rapier-worker/" target="_blank">Spike 2'yi yeni bir sekmede açın ↗</a> · <a href="/tr/blog/spike-source?spike=02-rapier-worker">Kaynak kodunu görüntüleyin</a></p>
<p>Spike 1'deki araziyi yeniden kullandık ve Rapier'ı özel bir modül worker'ına entegre ettik. Girdi durumu her karede worker'a gönderildi, simülasyon orada ilerletildi ve yetkili konum verisi render sistemine geri iletildi.</p>
<p>Temel metriklerimiz, girdiden görünür harekete kadar geçen gecikme ile fizik adımının süresiydi. Ayrıca normal hareket, kısa süreli deparlar ve art arda zıplamalar sırasında oluşabilecek titreşimleri de izledik.</p>
<p>Sonuç beklediğimizden daha iyiydi. Kullandığımız mesaj yapısı ve gönderim sıklığıyla worker sınırı, gecikmenin baskın kaynağı olmadı. Kontroller hâlâ anında tepki veriyormuş gibi hissettirdi; oyuncuların önemseyeceği tek şey de buydu.</p>
<p>Bu aşamadaki zorluklardan biri, sonuçları yanlış yorumlama riskiydi. Başarılı bir sonucun ardından ekipler genellikle aşırı genelleme yapar ve mimari sorunun sonsuza dek çözüldüğünü varsayar. Oysa çözülmüş değildi. Yalnızca belirli bir senaryoyu ve donanım profilini doğrulamıştık. Daha sonraki spike'larda GPU ve veri akışı baskısı değiştiğinde varsayımlarımızı yeniden sınamamız gerekecekti.</p>
<p>Bu spike, geliştirme sürecimizi de iyileştirdi. Etkileşimli spike'larda zamanlama telemetrisini varsayılan olarak HUD üzerinde göstermeye başladık. Böylece ekip içindeki konuşmalar &quot;bir tuhaflık var&quot;dan &quot;bu işlem yolu 1,2 ms ekledi&quot;ye dönüştü.</p>
<ol start="3">
<li>bölümde, ileride pahalı sürprizlerle karşılaşmamızı önleyen daha az gösterişli deneyleri ele alıyoruz: yayın yükü, mobil kısıtlamalar ve davranış üretiminin güvenilirliği.</li>
</ol>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>Rapier.</strong> Rust ile yazılmış ve tarayıcıda kullanılmak üzere WebAssembly'ye derlenen bir fizik motorudur. Katı cisimleri, çarpışma şekillerini, eklemleri, karakter kontrolcülerini ve ışın izlemeyi yerel performansın 2-3 katına varan hızlarda işler. Rapier, açık dünyalar için oyuncu karakter kontrolcüleri (arazide yürüme, basamak çıkma ve eğimlerde kayma), nesne çarpışmaları, etkileşimler için ışın izleme ve tetikleyici hacimler sağlar. <a href="https://rapier.rs/" target="_blank" rel="noreferrer">Rapier belgelerine</a> ve <a href="/tr/guides/browser-3d-open-world-tech.html#rapier-rust-wasm">fizik hakkındaki tarayıcı 3D teknoloji rehberimize</a> bakın.</p>
<p><strong>Web Workers.</strong> JavaScript'i (veya Wasm'ı) ana iş parçacığının dışında çalıştıran tarayıcı iş parçacıklarıdır. Fizik simülasyonunu bir worker'da çalıştırmak, ağır bir <code>world.step()</code> çağrısının render işlemini engellememesi anlamına gelir. Ana iş parçacığı, girdi durumunu her karede <code>postMessage</code> aracılığıyla worker'a gönderir ve yetkili konumları geri alır. Gecikme maliyeti, iki mesaj geçişidir (masaüstünde her biri yaklaşık 0,1-0,5 ms). Avantajı ise render iş parçacığının çarpışma algılama nedeniyle hiçbir zaman duraklamamasıdır. Aktarılabilir nesneler (<code>ArrayBuffer</code> aktarımı), büyük konum dizilerindeki kopyalama yükünü ortadan kaldırır.</p>
<p><strong>WebAssembly (Wasm).</strong> Tarayıcılarda yerel uygulamalara yakın hızda çalışan ikili bir komut biçimidir. Rapier, Havok ve Recast'in tümü Wasm'a derlenebilir. Rapier-Wasm'daki fizik adımı, birkaç yüz cisim için genellikle 0,5-2 ms sürerken eşdeğer JavaScript uygulamasında bu süre 5-15 ms'dir. Wasm modülleri, JavaScript bağlayıcı koduyla birlikte getirilen <code>.wasm</code> dosyaları olarak yüklenir. <a href="https://webassembly.org/" target="_blank" rel="noreferrer">WebAssembly spesifikasyonuna</a> bakın.</p>
<p><strong>Girdiden görüntüye gecikme.</strong> Bir tuşa basılması ile bunun sonucunda ekranda oluşan görsel değişiklik arasındaki süredir. Hareketin &quot;anında&quot; gerçekleşiyormuş gibi hissedilmesi için bu sürenin yaklaşık 80 ms'nin altında kalması gerekir. Worker üzerinde çalışan bir fizik düzeninde zincirdeki süreler birbirine eklenir:</p>
<mjx-container tabindex="0" class="MathJax" jax="SVG" display="true" style="direction: ltr; display: block; text-align: center; margin: 1em 0; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.669ex;" xmlns="http://www.w3.org/2000/svg" width="39.876ex" height="2.214ex" role="img" focusable="false" viewBox="0 -683 17625.4 978.7" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(958.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(2014.6,0)"><g data-mml-node="mi"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(394,-150) scale(0.707)"><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(278,0)" style="stroke-width: 3;"/><path data-c="70" d="M36 -148H50Q89 -148 97 -134V-126Q97 -119 97 -107T97 -77T98 -38T98 6T98 55T98 106Q98 140 98 177T98 243T98 296T97 335T97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 61 434T98 436Q115 437 135 438T165 441T176 442H179V416L180 390L188 397Q247 441 326 441Q407 441 464 377T522 216Q522 115 457 52T310 -11Q242 -11 190 33L182 40V-45V-101Q182 -128 184 -134T195 -145Q216 -148 244 -148H260V-194H252L228 -193Q205 -192 178 -192T140 -191Q37 -191 28 -194H20V-148H36ZM424 218Q424 292 390 347T305 402Q234 402 182 337V98Q222 26 294 26Q345 26 384 80T424 218Z" transform="translate(834,0)" style="stroke-width: 3;"/><path data-c="75" d="M383 58Q327 -10 256 -10H249Q124 -10 105 89Q104 96 103 226Q102 335 102 348T96 369Q86 385 36 385H25V408Q25 431 27 431L38 432Q48 433 67 434T105 436Q122 437 142 438T172 441T184 442H187V261Q188 77 190 64Q193 49 204 40Q224 26 264 26Q290 26 311 35T343 58T363 90T375 120T379 144Q379 145 379 161T380 201T380 248V315Q380 361 370 372T320 385H302V431Q304 431 378 436T457 442H464V264Q464 84 465 81Q468 61 479 55T524 46H542V0Q540 0 467 -5T390 -11H383V58Z" transform="translate(1390,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(1946,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(4331.9,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(5332.1,0)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(5832.1,0)"><g data-mml-node="mspace"/></g><g data-mml-node="msub" transform="translate(5999.1,0)"><g data-mml-node="mi"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(394,-150) scale(0.707)"><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(833,0)" style="stroke-width: 3;"/><path data-c="67" d="M329 409Q373 453 429 453Q459 453 472 434T485 396Q485 382 476 371T449 360Q416 360 412 390Q410 404 415 411Q415 412 416 414V415Q388 412 363 393Q355 388 355 386Q355 385 359 381T368 369T379 351T388 325T392 292Q392 230 343 187T222 143Q172 143 123 171Q112 153 112 133Q112 98 138 81Q147 75 155 75T227 73Q311 72 335 67Q396 58 431 26Q470 -13 470 -72Q470 -139 392 -175Q332 -206 250 -206Q167 -206 107 -175Q29 -140 29 -75Q29 -39 50 -15T92 18L103 24Q67 55 67 108Q67 155 96 193Q52 237 52 292Q52 355 102 398T223 442Q274 442 318 416L329 409ZM299 343Q294 371 273 387T221 404Q192 404 171 388T145 343Q142 326 142 292Q142 248 149 227T179 192Q196 182 222 182Q244 182 260 189T283 207T294 227T299 242Q302 258 302 292T299 343ZM403 -75Q403 -50 389 -34T348 -11T299 -2T245 0H218Q151 0 138 -6Q118 -15 107 -34T95 -74Q95 -84 101 -97T122 -127T170 -155T250 -167Q319 -167 361 -139T403 -75Z" transform="translate(1227,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(7886.5,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(8886.7,0)"><g data-mml-node="mi"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(394,-150) scale(0.707)"><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(394,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(783,0)" style="stroke-width: 3;"/><path data-c="70" d="M36 -148H50Q89 -148 97 -134V-126Q97 -119 97 -107T97 -77T98 -38T98 6T98 55T98 106Q98 140 98 177T98 243T98 296T97 335T97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 61 434T98 436Q115 437 135 438T165 441T176 442H179V416L180 390L188 397Q247 441 326 441Q407 441 464 377T522 216Q522 115 457 52T310 -11Q242 -11 190 33L182 40V-45V-101Q182 -128 184 -134T195 -145Q216 -148 244 -148H260V-194H252L228 -193Q205 -192 178 -192T140 -191Q37 -191 28 -194H20V-148H36ZM424 218Q424 292 390 347T305 402Q234 402 182 337V98Q222 26 294 26Q345 26 384 80T424 218Z" transform="translate(1227,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(10813.7,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(11813.9,0)"><g data-mml-node="mi"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(394,-150) scale(0.707)"><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(392,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(836,0)" style="stroke-width: 3;"/><path data-c="64" d="M376 495Q376 511 376 535T377 568Q377 613 367 624T316 637H298V660Q298 683 300 683L310 684Q320 685 339 686T376 688Q393 689 413 690T443 693T454 694H457V390Q457 84 458 81Q461 61 472 55T517 46H535V0Q533 0 459 -5T380 -11H373V44L365 37Q307 -11 235 -11Q158 -11 96 50T34 215Q34 315 97 378T244 442Q319 442 376 393V495ZM373 342Q328 405 260 405Q211 405 173 369Q146 341 139 305T131 211Q131 155 138 120T173 59Q203 26 251 26Q322 26 373 103V342Z" transform="translate(1392,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(1948,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(2392,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(14448.7,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(15449,0)"><g data-mml-node="mi"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(394,-150) scale(0.707)"><path data-c="76" d="M338 431Q344 429 422 429Q479 429 503 431H508V385H497Q439 381 423 345Q421 341 356 172T288 -2Q283 -11 263 -11Q244 -11 239 -2Q99 359 98 364Q93 378 82 381T43 385H19V431H25L33 430Q41 430 53 430T79 430T104 429T122 428Q217 428 232 431H240V385H226Q187 384 184 370Q184 366 235 234L286 102L377 341V349Q377 363 367 372T349 383T335 385H331V431H338Z" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(528,0)" style="stroke-width: 3;"/><path data-c="79" d="M69 -66Q91 -66 104 -80T118 -116Q118 -134 109 -145T91 -160Q84 -163 97 -166Q104 -168 111 -168Q131 -168 148 -159T175 -138T197 -106T213 -75T225 -43L242 0L170 183Q150 233 125 297Q101 358 96 368T80 381Q79 382 78 382Q66 385 34 385H19V431H26L46 430Q65 430 88 429T122 428Q129 428 142 428T171 429T200 430T224 430L233 431H241V385H232Q183 385 185 366L286 112Q286 113 332 227L376 341V350Q376 365 366 373T348 383T334 385H331V431H337H344Q351 431 361 431T382 430T405 429T422 429Q477 429 503 431H508V385H497Q441 380 422 345Q420 343 378 235T289 9T227 -131Q180 -204 113 -204Q69 -204 44 -177T19 -116Q19 -89 35 -78T69 -66Z" transform="translate(922,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(1450,0)" style="stroke-width: 3;"/><path data-c="63" d="M370 305T349 305T313 320T297 358Q297 381 312 396Q317 401 317 402T307 404Q281 408 258 408Q209 408 178 376Q131 329 131 219Q131 137 162 90Q203 29 272 29Q313 29 338 55T374 117Q376 125 379 127T395 129H409Q415 123 415 120Q415 116 411 104T395 71T366 33T318 2T249 -11Q163 -11 99 53T34 214Q34 318 99 383T250 448T370 421T404 357Q404 334 387 320Z" transform="translate(2006,0)" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="block" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; overflow: hidden; width: 100%;"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><mi>L</mi><mo>=</mo><msub><mi>t</mi><mtext>input</mtext></msub><mo>+</mo><mn>2</mn><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><msub><mi>t</mi><mtext>msg</mtext></msub><mo>+</mo><msub><mi>t</mi><mtext>step</mtext></msub><mo>+</mo><msub><mi>t</mi><mtext>render</mtext></msub><mo>+</mo><msub><mi>t</mi><mtext>vsync</mtext></msub></math></mjx-assistive-mml></mjx-container><p>keydown olayı (ana iş parçacığı), worker'a ve ardından geri gönderilen <code>postMessage</code> (<mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.669ex;" xmlns="http://www.w3.org/2000/svg" width="5.276ex" height="2.176ex" role="img" focusable="false" viewBox="0 -666 2332.2 961.7" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(500,0)"><g data-mml-node="mspace"/></g><g data-mml-node="msub" transform="translate(667,0)"><g data-mml-node="mi"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(394,-150) scale(0.707)"><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(833,0)" style="stroke-width: 3;"/><path data-c="67" d="M329 409Q373 453 429 453Q459 453 472 434T485 396Q485 382 476 371T449 360Q416 360 412 390Q410 404 415 411Q415 412 416 414V415Q388 412 363 393Q355 388 355 386Q355 385 359 381T368 369T379 351T388 325T392 292Q392 230 343 187T222 143Q172 143 123 171Q112 153 112 133Q112 98 138 81Q147 75 155 75T227 73Q311 72 335 67Q396 58 431 26Q470 -13 470 -72Q470 -139 392 -175Q332 -206 250 -206Q167 -206 107 -175Q29 -140 29 -75Q29 -39 50 -15T92 18L103 24Q67 55 67 108Q67 155 96 193Q52 237 52 292Q52 355 102 398T223 442Q274 442 318 416L329 409ZM299 343Q294 371 273 387T221 404Q192 404 171 388T145 343Q142 326 142 292Q142 248 149 227T179 192Q196 182 222 182Q244 182 260 189T283 207T294 227T299 242Q302 258 302 292T299 343ZM403 -75Q403 -50 389 -34T348 -11T299 -2T245 0H218Q151 0 138 -6Q118 -15 107 -34T95 -74Q95 -84 101 -97T122 -127T170 -155T250 -167Q319 -167 361 -139T403 -75Z" transform="translate(1227,0)" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>2</mn><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><msub><mi>t</mi><mtext>msg</mtext></msub></math></mjx-assistive-mml></mjx-container>), fizik adımı, render sisteminin yeni konumu uygulaması ve son olarak bir sonraki vsync. Her bir terim tek başına küçüktür (masaüstünde her mesaj geçişi yaklaşık 0,1-0,5 ms), ancak süreler üst üste eklenir. Bu nedenle mimari şemasına güvenmek yerine <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="1.541ex" height="1.545ex" role="img" focusable="false" viewBox="0 -683 681 683" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>L</mi></math></mjx-assistive-mml></mjx-container> değerini doğrudan ölçtük.</p>
<hr>
<p>12 bölümden 2.'si.<br>
Önceki: <a href="/tr/blog/2026-02-25-open-world-browser-part-01-risk-first.html">Bölüm 1 - İşe onu bozmaya çalışarak başladık</a><br>
Sonraki: <a href="/tr/blog/2026-02-25-open-world-browser-part-03-the-unflashy-spikes.html">Bölüm 3 - Bizi kurtaran gösterişsiz spike'lar</a><br>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya inşa etmek, bölüm 3: Bizi kurtaran gösterişsiz spike'lar]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-03-the-unflashy-spikes</link>
            <guid>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-03-the-unflashy-spikes</guid>
            <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Durable Object yayın yükü, mobil kalite kısıtları ve davranış üretiminin güvenilirliği göz alıcı değildi, ancak maliyetli sürprizleri önledi.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-insa-etmek-bolum-3-bizi-kurtaran-gosterissiz-spike-lar" tabindex="-1">Tarayıcıda açık dünya inşa etmek, bölüm 3: Bizi kurtaran gösterişsiz spike'lar <a class="header-anchor" href="#tarayıcıda-acık-dunya-insa-etmek-bolum-3-bizi-kurtaran-gosterissiz-spike-lar" aria-label="Permalink to &quot;Tarayıcıda açık dünya inşa etmek, bölüm 3: Bizi kurtaran gösterişsiz spike'lar&quot;"></a></h1>
<p><em>Yazan: <a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p>Bu bölümde parlak ekran görüntüleri daha az, mimari güvenceler daha fazla.</p>
<p>Spike 1 ve 2'den sonra küçük görünen ancak ürün düzeyinde etkisi olan üç risk kontrolü gerçekleştirdik.</p>
<p>İlki, Durable Objects ile yayın fan-out'ıydı. Oyun benzeri tick hızlarında çok istemcili konum dağıtımını test ettik; gecikme dağılımını, tick başına CPU kullanımını ve iletim bütünlüğünü izledik. Bu başarısız olsaydı her adanın tek bir nesneye ait olması yerine erkenden sharding'e geçerdik.</p>
<p>İkincisi, mobil kısıtların doğrulanmasıydı. Bu, adı mobil olarak değiştirilmiş bir masaüstü ön ayarı değil, aynı temel arazi üzerinden oluşturulmuş, açıkça tanımlı düşük maliyetli bir profildi.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/01-terrain/?quality=mobile" title="Spike 1'i temel alan mobil kalite profili" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/01-terrain/?quality=mobile" target="_blank">Mobil profili yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=01-terrain">Kaynak kodunu görüntüle</a></p>
<p>Segment yoğunluğunu, nesne sayısını, işleme çözünürlüğü üzerindeki baskıyı ve sis mesafesini azalttık. Soru basitti. Bu dünya, tüm işleyiciyi baştan yazmadan mobil sınıfı kısıtlar altında okunabilirliğini ve tepki hızını koruyabilir mi?</p>
<p>Üçüncüsü, içerik üreticilerinin iş akışları için davranış üretiminin güvenilirliğiydi. Geçerli JSON oranını, beklenen temel öğelere göre anlamsal doğruluğu ve yanıt gecikmesini değerlendirdik. Bu başarısız olsaydı katı, form tabanlı davranış yazımına geçerdik.</p>
<p>Bu bölümden çıkardığımız temel ders, bu gösterişsiz spike'ların mimariyi görsel spike'lardan daha hızlı değiştirdiğiydi. Ağ topolojisi, mobil cihazlara yönelik vaatler ve araç kullanıcı deneyimi için kesin sınırlar belirlediler.</p>
<ol start="4">
<li>bölümde görünür arazi çalışmalarına dönüyor ve yalnızca statik yükleme ekran görüntülerini değil, hareket sırasındaki akış davranışını test ediyoruz.</li>
</ol>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>Cloudflare Durable Objects.</strong> Yerleşik kalıcılık ve WebSocket desteğine sahip, uçta dağıtılan durum bilgili sunucusuz örneklerdir. Her Durable Object, bir dünya shard'ının (veya chunk'ının) yetkili durumunu tutar. Oyuncular WebSocket üzerinden bağlanır ve aynı shard'daki diğer oyuncuların konum yayınlarını alır. Oyuncu bitişik bir chunk'a geçtiğinde o chunk'ın Durable Object'ine bağlanır. Durable Objects, durumu otomatik olarak diske kalıcı biçimde kaydeder ve eşzamanlı binlerce örneğe ölçeklenebilir. <a href="https://developers.cloudflare.com/durable-objects/" target="_blank" rel="noreferrer">Cloudflare Durable Objects belgelerine</a> ve <a href="/tr/guides/browser-3d-open-world-tech.html#multiplayer-networking">çok oyunculu ağ iletişimiyle ilgili tarayıcı 3D teknoloji rehberimize</a> bakın.</p>
<p><strong>Mekânsal sharding.</strong> Dünyanın coğrafi bölgelere göre sunucu örnekleri arasında bölünmesidir. Her shard, dünya ızgarasının dikdörtgen bir alanına sahip olur. Oyuncu yoğunluğu değiştikçe shard'lar bölünebilir veya birleşebilir. Shard sınırına yakın oyuncular, shard'lar arası görünürlük sorguları aracılığıyla her iki shard'ın içeriğini de görür. <a href="/tr/guides/browser-3d-open-world-tech.html#server-architecture">EVE Online binlerce oyuncuyu</a> tek bir evrende bu şekilde barındırır.</p>
<p><strong>WebSocket yayın fan-out'ı.</strong> Gerçek zamanlı konum güncellemelerinin tek bir sunucudan bağlı çok sayıda istemciye dağıtılmasıdır. İstemci başına indirme bant genişliği, görebildiğiniz kalabalıkla doğrusal olarak ölçeklenir:</p>
<mjx-container tabindex="0" class="MathJax" jax="SVG" display="true" style="direction: ltr; display: block; text-align: center; margin: 1em 0; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.666ex;" xmlns="http://www.w3.org/2000/svg" width="23.398ex" height="2.236ex" role="img" focusable="false" viewBox="0 -694 10341.8 988.2" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D435" d="M231 637Q204 637 199 638T194 649Q194 676 205 682Q206 683 335 683Q594 683 608 681Q671 671 713 636T756 544Q756 480 698 429T565 360L555 357Q619 348 660 311T702 219Q702 146 630 78T453 1Q446 0 242 0Q42 0 39 2Q35 5 35 10Q35 17 37 24Q42 43 47 45Q51 46 62 46H68Q95 46 128 49Q142 52 147 61Q150 65 219 339T288 628Q288 635 231 637ZM649 544Q649 574 634 600T585 634Q578 636 493 637Q473 637 451 637T416 636H403Q388 635 384 626Q382 622 352 506Q352 503 351 500L320 374H401Q482 374 494 376Q554 386 601 434T649 544ZM595 229Q595 273 572 302T512 336Q506 337 429 337Q311 337 310 336Q310 334 293 263T258 122L240 52Q240 48 252 48T333 46Q422 46 429 47Q491 54 543 105T595 229Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(792,-150) scale(0.707)"><path data-c="63" d="M370 305T349 305T313 320T297 358Q297 381 312 396Q317 401 317 402T307 404Q281 408 258 408Q209 408 178 376Q131 329 131 219Q131 137 162 90Q203 29 272 29Q313 29 338 55T374 117Q376 125 379 127T395 129H409Q415 123 415 120Q415 116 411 104T395 71T366 33T318 2T249 -11Q163 -11 99 53T34 214Q34 318 99 383T250 448T370 421T404 357Q404 334 387 320Z" style="stroke-width: 3;"/><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z" transform="translate(444,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(722,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(1000,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(1444,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(2000,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(2809.1,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(3864.8,0)"><g data-mml-node="mi"><path data-c="1D441" d="M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(836,-150) scale(0.707)"><path data-c="76" d="M338 431Q344 429 422 429Q479 429 503 431H508V385H497Q439 381 423 345Q421 341 356 172T288 -2Q283 -11 263 -11Q244 -11 239 -2Q99 359 98 364Q93 378 82 381T43 385H19V431H25L33 430Q41 430 53 430T79 430T104 429T122 428Q217 428 232 431H240V385H226Q187 384 184 370Q184 366 235 234L286 102L377 341V349Q377 363 367 372T349 383T335 385H331V431H338Z" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(528,0)" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(806,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(1200,0)" style="stroke-width: 3;"/><path data-c="62" d="M307 -11Q234 -11 168 55L158 37Q156 34 153 28T147 17T143 10L138 1L118 0H98V298Q98 599 97 603Q94 622 83 628T38 637H20V660Q20 683 22 683L32 684Q42 685 61 686T98 688Q115 689 135 690T165 693T176 694H179V543Q179 391 180 391L183 394Q186 397 192 401T207 411T228 421T254 431T286 439T323 442Q401 442 461 379T522 216Q522 115 458 52T307 -11ZM182 98Q182 97 187 90T196 79T206 67T218 55T233 44T250 35T271 29T295 26Q330 26 363 46T412 113Q424 148 424 212Q424 287 412 323Q385 405 300 405Q270 405 239 390T188 347L182 339V98Z" transform="translate(1478,0)" style="stroke-width: 3;"/><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z" transform="translate(2034,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(2312,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(6921.8,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(7922.1,0)"><g data-mml-node="mi"><path data-c="1D44F" d="M73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(462,-150) scale(0.707)"><path data-c="70" d="M36 -148H50Q89 -148 97 -134V-126Q97 -119 97 -107T97 -77T98 -38T98 6T98 55T98 106Q98 140 98 177T98 243T98 296T97 335T97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 61 434T98 436Q115 437 135 438T165 441T176 442H179V416L180 390L188 397Q247 441 326 441Q407 441 464 377T522 216Q522 115 457 52T310 -11Q242 -11 190 33L182 40V-45V-101Q182 -128 184 -134T195 -145Q216 -148 244 -148H260V-194H252L228 -193Q205 -192 178 -192T140 -191Q37 -191 28 -194H20V-148H36ZM424 218Q424 292 390 347T305 402Q234 402 182 337V98Q222 26 294 26Q345 26 384 80T424 218Z" style="stroke-width: 3;"/><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z" transform="translate(556,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(834,0)" style="stroke-width: 3;"/><path data-c="79" d="M69 -66Q91 -66 104 -80T118 -116Q118 -134 109 -145T91 -160Q84 -163 97 -166Q104 -168 111 -168Q131 -168 148 -159T175 -138T197 -106T213 -75T225 -43L242 0L170 183Q150 233 125 297Q101 358 96 368T80 381Q79 382 78 382Q66 385 34 385H19V431H26L46 430Q65 430 88 429T122 428Q129 428 142 428T171 429T200 430T224 430L233 431H241V385H232Q183 385 185 366L286 112Q286 113 332 227L376 341V350Q376 365 366 373T348 383T334 385H331V431H337H344Q351 431 361 431T382 430T405 429T422 429Q477 429 503 431H508V385H497Q441 380 422 345Q420 343 378 235T289 9T227 -131Q180 -204 113 -204Q69 -204 44 -177T19 -116Q19 -89 35 -78T69 -66Z" transform="translate(1334,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(1862,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(2306,0)" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="block" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; overflow: hidden; width: 100%;"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><msub><mi>B</mi><mtext>client</mtext></msub><mo>=</mo><msub><mi>N</mi><mtext>visible</mtext></msub><mo>×</mo><msub><mi>b</mi><mtext>player</mtext></msub></math></mjx-assistive-mml></mjx-container><p>Oyun benzeri tick hızlarında (20-30 Hz) her oyuncu saniyede yaklaşık <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.666ex;" xmlns="http://www.w3.org/2000/svg" width="11.885ex" height="2.236ex" role="img" focusable="false" viewBox="0 -694 5253.3 988.2" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D44F" d="M73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(462,-150) scale(0.707)"><path data-c="70" d="M36 -148H50Q89 -148 97 -134V-126Q97 -119 97 -107T97 -77T98 -38T98 6T98 55T98 106Q98 140 98 177T98 243T98 296T97 335T97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 61 434T98 436Q115 437 135 438T165 441T176 442H179V416L180 390L188 397Q247 441 326 441Q407 441 464 377T522 216Q522 115 457 52T310 -11Q242 -11 190 33L182 40V-45V-101Q182 -128 184 -134T195 -145Q216 -148 244 -148H260V-194H252L228 -193Q205 -192 178 -192T140 -191Q37 -191 28 -194H20V-148H36ZM424 218Q424 292 390 347T305 402Q234 402 182 337V98Q222 26 294 26Q345 26 384 80T424 218Z" style="stroke-width: 3;"/><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z" transform="translate(556,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(834,0)" style="stroke-width: 3;"/><path data-c="79" d="M69 -66Q91 -66 104 -80T118 -116Q118 -134 109 -145T91 -160Q84 -163 97 -166Q104 -168 111 -168Q131 -168 148 -159T175 -138T197 -106T213 -75T225 -43L242 0L170 183Q150 233 125 297Q101 358 96 368T80 381Q79 382 78 382Q66 385 34 385H19V431H26L46 430Q65 430 88 429T122 428Q129 428 142 428T171 429T200 430T224 430L233 431H241V385H232Q183 385 185 366L286 112Q286 113 332 227L376 341V350Q376 365 366 373T348 383T334 385H331V431H337H344Q351 431 361 431T382 430T405 429T422 429Q477 429 503 431H508V385H497Q441 380 422 345Q420 343 378 235T289 9T227 -131Q180 -204 113 -204Q69 -204 44 -177T19 -116Q19 -89 35 -78T69 -66Z" transform="translate(1334,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(1862,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(2306,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(2697.6,0)"><path data-c="2248" d="M55 319Q55 360 72 393T114 444T163 472T205 482Q207 482 213 482T223 483Q262 483 296 468T393 413L443 381Q502 346 553 346Q609 346 649 375T694 454Q694 465 698 474T708 483Q722 483 722 452Q722 386 675 338T555 289Q514 289 468 310T388 357T308 404T224 426Q164 426 125 393T83 318Q81 289 69 289Q55 289 55 319ZM55 85Q55 126 72 159T114 210T163 238T205 248Q207 248 213 248T223 249Q262 249 296 234T393 179L443 147Q502 112 553 112Q609 112 649 141T694 220Q694 249 708 249T722 217Q722 153 675 104T555 55Q514 55 468 76T388 123T308 170T224 192Q164 192 125 159T83 84Q80 55 69 55Q55 55 55 85Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(3753.3,0)"><path data-c="38" d="M70 417T70 494T124 618T248 666Q319 666 374 624T429 515Q429 485 418 459T392 417T361 389T335 371T324 363L338 354Q352 344 366 334T382 323Q457 264 457 174Q457 95 399 37T249 -22Q159 -22 101 29T43 155Q43 263 172 335L154 348Q133 361 127 368Q70 417 70 494ZM286 386L292 390Q298 394 301 396T311 403T323 413T334 425T345 438T355 454T364 471T369 491T371 513Q371 556 342 586T275 624Q268 625 242 625Q201 625 165 599T128 534Q128 511 141 492T167 463T217 431Q224 426 228 424L286 386ZM250 21Q308 21 350 55T392 137Q392 154 387 169T375 194T353 216T330 234T301 253T274 270Q260 279 244 289T218 306L210 311Q204 311 181 294T133 239T107 157Q107 98 150 60T250 21Z" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1000,0)" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>b</mi><mtext>player</mtext></msub><mo>≈</mo><mn>800</mn></math></mjx-assistive-mml></mjx-container> bayt konum verisi üretir; dolayısıyla görünümdeki 200 oyuncu, istemci başına <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="15.964ex" height="1.692ex" role="img" focusable="false" viewBox="0 -666 7056 748" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1000,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1722.2,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2722.4,0)"><path data-c="38" d="M70 417T70 494T124 618T248 666Q319 666 374 624T429 515Q429 485 418 459T392 417T361 389T335 371T324 363L338 354Q352 344 366 334T382 323Q457 264 457 174Q457 95 399 37T249 -22Q159 -22 101 29T43 155Q43 263 172 335L154 348Q133 361 127 368Q70 417 70 494ZM286 386L292 390Q298 394 301 396T311 403T323 413T334 425T345 438T355 454T364 471T369 491T371 513Q371 556 342 586T275 624Q268 625 242 625Q201 625 165 599T128 534Q128 511 141 492T167 463T217 431Q224 426 228 424L286 386ZM250 21Q308 21 350 55T392 137Q392 154 387 169T375 194T353 216T330 234T301 253T274 270Q260 279 244 289T218 306L210 311Q204 311 181 294T133 239T107 157Q107 98 150 60T250 21Z" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1000,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4500.2,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(5556,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1000,0)" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>200</mn><mo>×</mo><mn>800</mn><mo>=</mo><mn>160</mn></math></mjx-assistive-mml></mjx-container> KB/s maliyet oluşturur. Basit tümden-tüme yaklaşımında sunucu maliyeti daha da kötüdür ve <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="3.119ex" height="1.887ex" role="img" focusable="false" viewBox="0 -833.9 1378.8 833.9" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msup"><g data-mml-node="mi"><path data-c="1D441" d="M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(975.3,363) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mi>N</mi><mn>2</mn></msup></math></mjx-assistive-mml></mjx-container> oranında büyür. Alaka düzeyi filtrelemesinin (mekânsal ilgi yönetimi) her bağlantıya tick bütçesi içinde veri göndermeden önce <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.357ex;" xmlns="http://www.w3.org/2000/svg" width="6.414ex" height="1.902ex" role="img" focusable="false" viewBox="0 -683 2834.8 840.8" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D441" d="M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(836,-150) scale(0.707)"><path data-c="76" d="M338 431Q344 429 422 429Q479 429 503 431H508V385H497Q439 381 423 345Q421 341 356 172T288 -2Q283 -11 263 -11Q244 -11 239 -2Q99 359 98 364Q93 378 82 381T43 385H19V431H25L33 430Q41 430 53 430T79 430T104 429T122 428Q217 428 232 431H240V385H226Q187 384 184 370Q184 366 235 234L286 102L377 341V349Q377 363 367 372T349 383T335 385H331V431H338Z" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(528,0)" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(806,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(1200,0)" style="stroke-width: 3;"/><path data-c="62" d="M307 -11Q234 -11 168 55L158 37Q156 34 153 28T147 17T143 10L138 1L118 0H98V298Q98 599 97 603Q94 622 83 628T38 637H20V660Q20 683 22 683L32 684Q42 685 61 686T98 688Q115 689 135 690T165 693T176 694H179V543Q179 391 180 391L183 394Q186 397 192 401T207 411T228 421T254 431T286 439T323 442Q401 442 461 379T522 216Q522 115 458 52T307 -11ZM182 98Q182 97 187 90T196 79T206 67T218 55T233 44T250 35T271 29T295 26Q330 26 363 46T412 113Q424 148 424 212Q424 287 412 323Q385 405 300 405Q270 405 239 390T188 347L182 339V98Z" transform="translate(1478,0)" style="stroke-width: 3;"/><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z" transform="translate(2034,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(2312,0)" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>N</mi><mtext>visible</mtext></msub></math></mjx-assistive-mml></mjx-container> değerini sınırlamasının nedeni tam olarak budur. Delta sıkıştırma ile güncelleme sıklığı arasındaki dengeler için <a href="/tr/guides/browser-3d-open-world-tech.html#client-server-communication">ağ iletişimi rehberimize</a> bakın.</p>
<p><strong>Mobil işleme kısıtları.</strong> Mobil GPU'lar, masaüstü GPU'larının 1/5'i ile 1/10'u arasında işlem kapasitesine, yaklaşık 1 GB bellek sınırına (masaüstünde 2-4 GB) sahiptir ve sürekli yük altında termal kısıtlamaya girer. Mobil kalite profili; segment yoğunluğunu, nesne sayısını, işleme çözünürlüğünü, görüş mesafesini ve gölge kalitesini azaltır. Amaç masaüstüyle eşitlik değil, okunabilirliği ve tepki hızını korumaktır. Gerçek GPU karşılaştırmaları için <a href="/tr/guides/browser-3d-open-world-tech.html#browser-3d-performance-real-numbers">tarayıcı 3D performans verilerine</a> bakın.</p>
<hr>
<p>12 bölümün 3. bölümü.<br>
Önceki: <a href="/tr/blog/2026-02-25-open-world-browser-part-02-worker-physics.html">Bölüm 2 - Worker fiziği ve girdi gecikmesi korkusu</a><br>
Sonraki: <a href="/tr/blog/2026-02-25-open-world-browser-part-04-streaming-before-fancy.html">Bölüm 4 - Gösterişli araziden önce akış</a><br>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya oluşturmak, bölüm 4: Gösterişli araziden önce akış]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-04-streaming-before-fancy</link>
            <guid>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-04-streaming-before-fancy</guid>
            <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Önce basit içeriklerle parça yükleme ve değiştirme işlemlerini test ettik, ardından aşamalı yükseklik haritası iyileştirmesine geçtik. Bu sıralama işe yaradı.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-olusturmak-bolum-4-gosterisli-araziden-once-akıs" tabindex="-1">Tarayıcıda açık dünya oluşturmak, bölüm 4: Gösterişli araziden önce akış <a class="header-anchor" href="#tarayıcıda-acık-dunya-olusturmak-bolum-4-gosterisli-araziden-once-akıs" aria-label="Permalink to &quot;Tarayıcıda açık dünya oluşturmak, bölüm 4: Gösterişli araziden önce akış&quot;"></a></h1>
<p><em>Cinevva CTO'su ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p>Akış, &quot;iyi görünüyor&quot; denilen projelerin genellikle dağıldığı noktadır.</p>
<p>Durağan bir karede pek çok şeyi gizleyebilirsiniz. Bir parça sınırını geçerken oluşan 40 ms'lik takılmayı gizleyemezsiniz.</p>
<p>Gelişmiş arazi temsilini oluşturmadan önce akışı özellikle test ettik. Bu, yükleme ve kaldırma davranışları hakkında net veriler elde etmemizi sağladı.</p>
<p>Spike 6, basit parça içerikleriyle komşuluk değişimini doğruladı.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/06-chunk-streaming/" title="Spike 6 Parça Yükleme ve Değiştirme" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/06-chunk-streaming/" target="_blank">Spike 6'yı yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=06-chunk-streaming">Kaynak kodunu görüntüle</a></p>
<p>Ardından Spike 11'de gerçek arazi yaklaşımına geçtik: worker tarafında kod çözme ve 17'den 33'e, ardından 65 örnekli ızgaralara uzanan aşamalı iyileştirmeyle yükseklik parçalarının akışı.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/11-chunk-streaming/" title="Spike 11 Yükseklik Haritası Parça Akışı" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/11-chunk-streaming/" target="_blank">Spike 11'i yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=11-chunk-streaming">Kaynak kodunu görüntüle</a></p>
<p>Sıralama, beklediğimizden daha önemliydi. Doğrudan sıkıştırılmış yükseklik parçalarıyla başlasaydık her takılmanın nedeni belirsiz kalacaktı. Kod çözme sorunu mu, doku yükleme sorunu mu, yoksa geometri güncelleme sorunu mu? Spike 6, Spike 11 karmaşıklık eklemeden önce bir belirsizlik katmanını ortadan kaldırdı.</p>
<p>Bu bölümden çıkardığımız pratik bir ders, sonraki spike'lara da taşındı. Yükleme kaynaklı duraklamalar, ortalama FPS'den çıkarım yapmak yerine doğrudan ölçülmelidir. Ortalama FPS, kare süresi sıçramalarını gizler; kullanıcıların gerçekten hissettiği şey de bu sıçramalardır.</p>
<ol start="5">
<li>bölümde bitki örtüsü, arazi gölgelendiricileri ve kademeli gölgelerin aynı kare bütçesi için yarıştığı görsel maliyet konusuna geçiyoruz.</li>
</ol>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>Parça tabanlı akış.</strong> Dünya, bağımsız parçalardan oluşan bir ızgaraya bölünür (genellikle 64x64 metre). Oyuncu hareket ettikçe arkada kalan kenardaki parçalar kaldırılırken öndeki kenardaki parçalar akışla yüklenir. <a href="/tr/guides/browser-3d-open-world-tech.html#skyrim-s-cell-system">Skyrim'in hücre sistemi</a> bu şekilde çalışır: Oyuncunun etrafında 5x5'lik bir hücre ızgarası yüklenir ve oyuncu hareket ettikçe hücreler değiştirilir. Tarayıcı sürümü bu denkleme ağ gecikmesini de eklediğinden, oyuncunun hızına dayalı öngörülü önceden getirme kritik önem taşır. <a href="/tr/guides/landscape-generation-browser.html#streaming-architecture-for-terrain">Akış mimarisi rehberimize</a> bakın.</p>
<p><strong>Aşamalı yükseklik haritası iyileştirmesi.</strong> Araziyi önce düşük çözünürlükte gönderin, ardından iyileştirin. Izgara boyutları keyfî değildir: Her seviye bir <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="18.385ex" height="2.497ex" role="img" focusable="false" viewBox="0 -853.7 8126.1 1103.7" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msup" transform="translate(389,0)"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(533,363) scale(0.707)"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1562.6,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2562.8,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(3062.8,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(3674.1,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4674.3,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msup" transform="translate(5063.3,0)"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(533,363) scale(0.707)"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(6236.9,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(7237.1,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(7737.1,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo stretchy="false">(</mo><msup><mn>2</mn><mi>k</mi></msup><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo><mo>×</mo><mo stretchy="false">(</mo><msup><mn>2</mn><mi>k</mi></msup><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container> ızgarasıdır; dolayısıyla <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="11.295ex" height="2.09ex" role="img" focusable="false" viewBox="0 -841.7 4992.6 923.7" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/><path data-c="37" d="M55 458Q56 460 72 567L88 674Q88 676 108 676H128V672Q128 662 143 655T195 646T364 644H485V605L417 512Q408 500 387 472T360 435T339 403T319 367T305 330T292 284T284 230T278 162T275 80Q275 66 275 52T274 28V19Q270 2 255 -10T221 -22Q210 -22 200 -19T179 0T168 40Q168 198 265 368Q285 400 349 489L395 552H302Q128 552 119 546Q113 543 108 522T98 479L95 458V455H55V458Z" transform="translate(500,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1277.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="msup" transform="translate(2333.6,0)"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(533,363) scale(0.707)"><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3492.3,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(4492.6,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>17</mn><mo>=</mo><msup><mn>2</mn><mn>4</mn></msup><mo>+</mo><mn>1</mn></math></mjx-assistive-mml></mjx-container>, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="11.295ex" height="2.072ex" role="img" focusable="false" viewBox="0 -833.9 4992.6 915.9" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z" style="stroke-width: 3;"/><path data-c="33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z" transform="translate(500,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1277.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="msup" transform="translate(2333.6,0)"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(533,363) scale(0.707)"><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3492.3,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(4492.6,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>33</mn><mo>=</mo><msup><mn>2</mn><mn>5</mn></msup><mo>+</mo><mn>1</mn></math></mjx-assistive-mml></mjx-container>, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="11.295ex" height="2.072ex" role="img" focusable="false" viewBox="0 -833.9 4992.6 915.9" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" style="stroke-width: 3;"/><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" transform="translate(500,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1277.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="msup" transform="translate(2333.6,0)"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(533,363) scale(0.707)"><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3492.3,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(4492.6,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>65</mn><mo>=</mo><msup><mn>2</mn><mn>6</mn></msup><mo>+</mo><mn>1</mn></math></mjx-assistive-mml></mjx-container>. <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="2.891ex" height="1.692ex" role="img" focusable="false" viewBox="0 -666 1278 748" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(778,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo>+</mo><mn>1</mn></math></mjx-assistive-mml></mjx-container>, komşuların hizalanması için her sınırda ortak bir örnek bulunmasını sağlar ve her adımda örnek sayısı yaklaşık dört katına çıkar (kenar uzunluğu iki katına çıktıkça <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.025ex;" xmlns="http://www.w3.org/2000/svg" width="2.345ex" height="1.912ex" role="img" focusable="false" viewBox="0 -833.9 1036.6 844.9" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msup"><g data-mml-node="mi"><path data-c="1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(633,363) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mi>n</mi><mn>2</mn></msup></math></mjx-assistive-mml></mjx-container> büyür). 17x17'lik bir ızgara (4 m aralıklı 64 m'lik bir parça için gereken minimum boyut), sıkıştırılmış hâlde yaklaşık 200 bayttır ve anında görünür bir yüzey oluşturur. Ardından 33x33 iyileştirmeyi, sonrasında da tam 65x65 çözünürlüğü akışla yükleyin. Her seviye, önceki verilerin yerini almadan yeni örnekler ekler. Bu yaklaşım, uzaktaki arazinin düşük çözünürlüklü, yakındaki arazinin ise tam çözünürlüklü veriler kullandığı geometri clipmap LOD halkalarıyla doğrudan eşleşir. <a href="/tr/guides/landscape-generation-browser.html#progressive-chunk-loading">Aşamalı parça yüklemeye</a> bakın.</p>
<p><strong>Delta kodlama ve sıkıştırma.</strong> Komşu hücrelerin değerleri birbirine benzediği için yükseklik haritası verileri iyi sıkıştırılır. Delta kodlama, her hücrenin tahmin edilen değeriyle (komşularının ortalamasıyla) arasındaki farkı saklayarak değerleri sıfırın yakınında kümeler. Zlib veya brotli ile birlikte kullanıldığında 65x65'lik bir parça, ham hâlde 8,4 KB'den sıkıştırılmış hâlde 1-2 KB'ye düşer. Uzaktaki parçalar için azaltılmış hassasiyette (16 bit yerine 8 bit): 0,5-1 KB. <a href="/tr/guides/landscape-generation-browser.html#terrain-data-compression-for-streaming">Arazi verisi sıkıştırmaya</a> bakın.</p>
<p><strong>Öngörülü önceden getirme.</strong> Parçaları oyuncu ulaşmadan önce yüklemektir. Önden yükleme mesafesi, bir parça yüklenirken oyuncunun katettiği mesafeyi karşılamalıdır: <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.65ex;" xmlns="http://www.w3.org/2000/svg" width="16.701ex" height="2.22ex" role="img" focusable="false" viewBox="0 -694 7381.6 981.2" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(553,-150) scale(0.707)"><path data-c="70" d="M36 -148H50Q89 -148 97 -134V-126Q97 -119 97 -107T97 -77T98 -38T98 6T98 55T98 106Q98 140 98 177T98 243T98 296T97 335T97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 61 434T98 436Q115 437 135 438T165 441T176 442H179V416L180 390L188 397Q247 441 326 441Q407 441 464 377T522 216Q522 115 457 52T310 -11Q242 -11 190 33L182 40V-45V-101Q182 -128 184 -134T195 -145Q216 -148 244 -148H260V-194H252L228 -193Q205 -192 178 -192T140 -191Q37 -191 28 -194H20V-148H36ZM424 218Q424 292 390 347T305 402Q234 402 182 337V98Q222 26 294 26Q345 26 384 80T424 218Z" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(556,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(948,0)" style="stroke-width: 3;"/><path data-c="66" d="M273 0Q255 3 146 3Q43 3 34 0H26V46H42Q70 46 91 49Q99 52 103 60Q104 62 104 224V385H33V431H104V497L105 564L107 574Q126 639 171 668T266 704Q267 704 275 704T289 705Q330 702 351 679T372 627Q372 604 358 590T321 576T284 590T270 627Q270 647 288 667H284Q280 668 273 668Q245 668 223 647T189 592Q183 572 182 497V431H293V385H185V225Q185 63 186 61T189 57T194 54T199 51T206 49T213 48T222 47T231 47T241 46T251 46H282V0H273Z" transform="translate(1392,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(1698,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(2142,0)" style="stroke-width: 3;"/><path data-c="63" d="M370 305T349 305T313 320T297 358Q297 381 312 396Q317 401 317 402T307 404Q281 408 258 408Q209 408 178 376Q131 329 131 219Q131 137 162 90Q203 29 272 29Q313 29 338 55T374 117Q376 125 379 127T395 129H409Q415 123 415 120Q415 116 411 104T395 71T366 33T318 2T249 -11Q163 -11 99 53T34 214Q34 318 99 383T250 448T370 421T404 357Q404 334 387 320Z" transform="translate(2531,0)" style="stroke-width: 3;"/><path data-c="68" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 124T102 167T103 217T103 272T103 329Q103 366 103 407T103 482T102 542T102 586T102 603Q99 622 88 628T43 637H25V660Q25 683 27 683L37 684Q47 685 66 686T103 688Q120 689 140 690T170 693T181 694H184V367Q244 442 328 442Q451 442 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(2975,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3377.6,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(4433.3,0)"><path data-c="1D463" d="M173 380Q173 405 154 405Q130 405 104 376T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Q21 294 29 316T53 368T97 419T160 441Q202 441 225 417T249 361Q249 344 246 335Q246 329 231 291T200 202T182 113Q182 86 187 69Q200 26 250 26Q287 26 319 60T369 139T398 222T409 277Q409 300 401 317T383 343T365 361T357 383Q357 405 376 424T417 443Q436 443 451 425T467 367Q467 340 455 284T418 159T347 40T241 -11Q177 -11 139 22Q102 54 102 117Q102 148 110 181T151 298Q173 362 173 380Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(5140.6,0)"><path data-c="22C5" d="M78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(5640.8,0)"><g data-mml-node="mi"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(394,-150) scale(0.707)"><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(278,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(778,0)" style="stroke-width: 3;"/><path data-c="64" d="M376 495Q376 511 376 535T377 568Q377 613 367 624T316 637H298V660Q298 683 300 683L310 684Q320 685 339 686T376 688Q393 689 413 690T443 693T454 694H457V390Q457 84 458 81Q461 61 472 55T517 46H535V0Q533 0 459 -5T380 -11H373V44L365 37Q307 -11 235 -11Q158 -11 96 50T34 215Q34 315 97 378T244 442Q319 442 376 393V495ZM373 342Q328 405 260 405Q211 405 173 369Q146 341 139 305T131 211Q131 155 138 120T173 59Q203 26 251 26Q322 26 373 103V342Z" transform="translate(1278,0)" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>d</mi><mtext>prefetch</mtext></msub><mo>=</mo><mi>v</mi><mo>⋅</mo><msub><mi>t</mi><mtext>load</mtext></msub></math></mjx-assistive-mml></mjx-container>. Bu nedenle hıza göre ölçeklenir: Yürüme hızında (5 km/sa) 2 parça önden (128 m), koşma hızında (15 km/sa) ise 4 parça önden getirilir. Yükleme halkası, hız vektörünün yönüne göre kayar. Bir öncelik kuyruğu, bekleyen istekleri aciliyetlerine göre sıralar ve oyuncunun uzaklaştığı parçalara yönelik istekleri iptal eder. <a href="/tr/guides/landscape-generation-browser.html#predictive-pre-fetching">Öngörülü önceden getirmeye</a> bakın.</p>
<hr>
<p>12 bölümden 4.'sü.<br>
Önceki: <a href="/tr/blog/2026-02-25-open-world-browser-part-03-the-unflashy-spikes.html">Bölüm 3 - Bizi kurtaran gösterişsiz spike'lar</a><br>
Sonraki: <a href="/tr/blog/2026-02-25-open-world-browser-part-05-budgeting-the-pretty.html">Bölüm 5 - Görsel güzelliklerin bütçelenmesi</a><br>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya oluşturmak, bölüm 5: Görsel zenginlikleri bütçelemek]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-05-budgeting-the-pretty</link>
            <guid>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-05-budgeting-the-pretty</guid>
            <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Bitki örtüsü, arazi malzemeleri ve kademeli gölgeler harika görünüyordu. Asıl iş, bunların kare süresi bütçesine sığabileceğini kanıtlamaktı.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-olusturmak-bolum-5-gorsel-zenginlikleri-butcelemek" tabindex="-1">Tarayıcıda açık dünya oluşturmak, bölüm 5: Görsel zenginlikleri bütçelemek <a class="header-anchor" href="#tarayıcıda-acık-dunya-olusturmak-bolum-5-gorsel-zenginlikleri-butcelemek" aria-label="Permalink to &quot;Tarayıcıda açık dünya oluşturmak, bölüm 5: Görsel zenginlikleri bütçelemek&quot;"></a></h1>
<p><em><a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Bu rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p>Bu bölümde görsel iddialar matematikle yüzleşti.</p>
<p>Bir arada elde edilen sonuçları teşhis etmek zor olduğundan, render maliyetini ayrı spike'lara böldük. Her şeyi aynı anda açarsanız yalnızca karenin yavaş olduğunu öğrenirsiniz. Bütçeyi hangi özelliğin tükettiğini öğrenemezsiniz.</p>
<p>Spike 7, bitki örtüsü yoğunluğunu ve animasyon maliyetini hedefliyordu. Yaklaşımımız, her arazi parçası için 32x32 yoğunluk haritalarından çalışma zamanında dağıtım yaparak büyük <code>InstancedMesh</code> kümelerini beslemekti. Her çimen sapına ve çalı kümesine, kayan bir gürültü dokusuyla yönlendirilen vertex shader tabanlı rüzgâr animasyonu uygulandı. İzlediğimiz temel ölçüt üçgen sayısı değil, orta seviye GPU'lardaki draw call ek yükü ve vertex işleme kapasitesiydi. Örnekleri daha az sayıda mesh içinde toplamanın, çimen sapı başına poligon sayısını azaltmaktan daha önemli olduğunu gördük.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/07-gpu-vegetation/" title="Spike 7 GPU Bitki Örtüsü" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/07-gpu-vegetation/" target="_blank">Spike 7'yi yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=07-gpu-vegetation">Kaynağı görüntüle</a></p>
<p>Spike 8, arazi malzemelerinin karmaşıklığını artırdı. Eğim açısına ve rakıma göre ağırlıklandırılan çok katmanlı harmanlama, uçurum yüzeyleri için isteğe bağlı triplanar projeksiyon ve katman başına normal haritaları kullandık. Shader, dört doku katmanıyla eğim tabanlı splatting yapıyordu ve her katman için bir diffuse ve bir normal örneği gerekiyordu. Bu da herhangi bir aydınlatma eklenmeden önce fragment başına <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="9.176ex" height="1.717ex" role="img" focusable="false" viewBox="0 -677 4056 759" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(722.2,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(1722.4,0)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2500.2,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(3556,0)"><path data-c="38" d="M70 417T70 494T124 618T248 666Q319 666 374 624T429 515Q429 485 418 459T392 417T361 389T335 371T324 363L338 354Q352 344 366 334T382 323Q457 264 457 174Q457 95 399 37T249 -22Q159 -22 101 29T43 155Q43 263 172 335L154 348Q133 361 127 368Q70 417 70 494ZM286 386L292 390Q298 394 301 396T311 403T323 413T334 425T345 438T355 454T364 471T369 491T371 513Q371 556 342 586T275 624Q268 625 242 625Q201 625 165 599T128 534Q128 511 141 492T167 463T217 431Q224 426 228 424L286 386ZM250 21Q308 21 350 55T392 137Q392 154 387 169T375 194T353 216T330 234T301 253T274 270Q260 279 244 289T218 306L210 311Q204 311 181 294T133 239T107 157Q107 98 150 60T250 21Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>4</mn><mo>×</mo><mn>2</mn><mo>=</mo><mn>8</mn></math></mjx-assistive-mml></mjx-container> doku okuması demekti. Sayı, katmanlarla doğrusal olarak arttığından beşinci katman her piksel için 10 okuma anlamına geliyordu. Alt sınırı belirlemek için özellikle tümleşik Intel GPU'larda profil çıkardık. Sonuç olarak, dikey yüzeylerde triplanar projeksiyonun maliyetine değdiğini, ancak beşinci bir splat katmanı eklemenin değmediğini gördük.</p>
<p><a href="/tr/spikes/08-terrain-material/" target="_blank">Spike 8'i yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=08-terrain-material">Kaynağı görüntüle</a></p>
<p>Spike 9, gerçekçi arazi ve nesne yükü altında kademeli gölge haritası maliyetine odaklandı. Üç kademeli CSM temel yapılandırmamızdı. Kademe baskısının en kötü olduğu durum bu olduğundan, özellikle alçak açılı güneş konumlarıyla test yaptık. En uzak kademe, görüş hacminin çok büyük bir bölümünü kapsar ve gölge ayrıntısı texel yoğunluğuyla belirlenir: <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.783ex;" xmlns="http://www.w3.org/2000/svg" width="7.095ex" height="3.009ex" role="img" focusable="false" viewBox="0 -983.7 3135.9 1330" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D70C" d="M58 -216Q25 -216 23 -186Q23 -176 73 26T127 234Q143 289 182 341Q252 427 341 441Q343 441 349 441T359 442Q432 442 471 394T510 276Q510 219 486 165T425 74T345 13T266 -10H255H248Q197 -10 165 35L160 41L133 -71Q108 -168 104 -181T92 -202Q76 -216 58 -216ZM424 322Q424 359 407 382T357 405Q322 405 287 376T231 300Q217 269 193 170L176 102Q193 26 260 26Q298 26 334 62Q367 92 389 158T418 266T424 322Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(794.8,0)"><path data-c="2248" d="M55 319Q55 360 72 393T114 444T163 472T205 482Q207 482 213 482T223 483Q262 483 296 468T393 413L443 381Q502 346 553 346Q609 346 649 375T694 454Q694 465 698 474T708 483Q722 483 722 452Q722 386 675 338T555 289Q514 289 468 310T388 357T308 404T224 426Q164 426 125 393T83 318Q81 289 69 289Q55 289 55 319ZM55 85Q55 126 72 159T114 210T163 238T205 248Q207 248 213 248T223 249Q262 249 296 234T393 179L443 147Q502 112 553 112Q609 112 649 141T694 220Q694 249 708 249T722 217Q722 153 675 104T555 55Q514 55 468 76T388 123T308 170T224 192Q164 192 125 159T83 84Q80 55 69 55Q55 55 55 85Z" style="stroke-width: 3;"/></g><g data-mml-node="mfrac" transform="translate(1850.6,0)"><g data-mml-node="msup" transform="translate(220,394) scale(0.707)"><g data-mml-node="mi"><path data-c="1D445" d="M230 637Q203 637 198 638T193 649Q193 676 204 682Q206 683 378 683Q550 682 564 680Q620 672 658 652T712 606T733 563T739 529Q739 484 710 445T643 385T576 351T538 338L545 333Q612 295 612 223Q612 212 607 162T602 80V71Q602 53 603 43T614 25T640 16Q668 16 686 38T712 85Q717 99 720 102T735 105Q755 105 755 93Q755 75 731 36Q693 -21 641 -21H632Q571 -21 531 4T487 82Q487 109 502 166T517 239Q517 290 474 313Q459 320 449 321T378 323H309L277 193Q244 61 244 59Q244 55 245 54T252 50T269 48T302 46H333Q339 38 339 37T336 19Q332 6 326 0H311Q275 2 180 2Q146 2 117 2T71 2T50 1Q33 1 33 10Q33 12 36 24Q41 43 46 45Q50 46 61 46H67Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628Q287 635 230 637ZM630 554Q630 586 609 608T523 636Q521 636 500 636T462 637H440Q393 637 386 627Q385 624 352 494T319 361Q319 360 388 360Q466 361 492 367Q556 377 592 426Q608 449 619 486T630 554Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(792,363) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mi" transform="translate(377.5,-346.3) scale(0.707)"><path data-c="1D434" d="M208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260Z" style="stroke-width: 3;"/></g><rect width="1045.4" height="60" x="120" y="220"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>ρ</mi><mo>≈</mo><mfrac><msup><mi>R</mi><mn>2</mn></msup><mi>A</mi></mfrac></math></mjx-assistive-mml></mjx-container> (<mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="1.697ex" height="1.62ex" role="img" focusable="false" viewBox="0 -716 750 716" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D434" d="M208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math></mjx-assistive-mml></mjx-container> büyüklüğündeki zemin alanına yayılan, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.048ex;" xmlns="http://www.w3.org/2000/svg" width="1.717ex" height="1.593ex" role="img" focusable="false" viewBox="0 -683 759 704" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D445" d="M230 637Q203 637 198 638T193 649Q193 676 204 682Q206 683 378 683Q550 682 564 680Q620 672 658 652T712 606T733 563T739 529Q739 484 710 445T643 385T576 351T538 338L545 333Q612 295 612 223Q612 212 607 162T602 80V71Q602 53 603 43T614 25T640 16Q668 16 686 38T712 85Q717 99 720 102T735 105Q755 105 755 93Q755 75 731 36Q693 -21 641 -21H632Q571 -21 531 4T487 82Q487 109 502 166T517 239Q517 290 474 313Q459 320 449 321T378 323H309L277 193Q244 61 244 59Q244 55 245 54T252 50T269 48T302 46H333Q339 38 339 37T336 19Q332 6 326 0H311Q275 2 180 2Q146 2 117 2T71 2T50 1Q33 1 33 10Q33 12 36 24Q41 43 46 45Q50 46 61 46H67Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628Q287 635 230 637ZM630 554Q630 586 609 608T523 636Q521 636 500 636T462 637H440Q393 637 386 627Q385 624 352 494T319 361Q319 360 388 360Q466 361 492 367Q556 377 592 426Q608 449 619 486T630 554Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>R</mi></math></mjx-assistive-mml></mjx-container> çözünürlüklü bir gölge haritası). Tüm görüş mesafesini tek bir haritayla kaplamak <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="1.697ex" height="1.62ex" role="img" focusable="false" viewBox="0 -716 750 716" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D434" d="M208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math></mjx-assistive-mml></mjx-container> değerini devasa hâle getirir ve <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.489ex;" xmlns="http://www.w3.org/2000/svg" width="1.17ex" height="1.489ex" role="img" focusable="false" viewBox="0 -442 517 658" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D70C" d="M58 -216Q25 -216 23 -186Q23 -176 73 26T127 234Q143 289 182 341Q252 427 341 441Q343 441 349 441T359 442Q432 442 471 394T510 276Q510 219 486 165T425 74T345 13T266 -10H255H248Q197 -10 165 35L160 41L133 -71Q108 -168 104 -181T92 -202Q76 -216 58 -216ZM424 322Q424 359 407 382T357 405Q322 405 287 376T231 300Q217 269 193 170L176 102Q193 26 260 26Q298 26 334 62Q367 92 389 158T418 266T424 322Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>ρ</mi></math></mjx-assistive-mml></mjx-container> çöker. Kademeler, görüş hacmini bölerek bu sorunu çözer; böylece her bölüm, küçük bir <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="1.697ex" height="1.62ex" role="img" focusable="false" viewBox="0 -716 750 716" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D434" d="M208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>A</mi></math></mjx-assistive-mml></mjx-container> alanı üzerinde kendi <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.048ex;" xmlns="http://www.w3.org/2000/svg" width="6.2ex" height="1.593ex" role="img" focusable="false" viewBox="0 -683 2740.4 704" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D445" d="M230 637Q203 637 198 638T193 649Q193 676 204 682Q206 683 378 683Q550 682 564 680Q620 672 658 652T712 606T733 563T739 529Q739 484 710 445T643 385T576 351T538 338L545 333Q612 295 612 223Q612 212 607 162T602 80V71Q602 53 603 43T614 25T640 16Q668 16 686 38T712 85Q717 99 720 102T735 105Q755 105 755 93Q755 75 731 36Q693 -21 641 -21H632Q571 -21 531 4T487 82Q487 109 502 166T517 239Q517 290 474 313Q459 320 449 321T378 323H309L277 193Q244 61 244 59Q244 55 245 54T252 50T269 48T302 46H333Q339 38 339 37T336 19Q332 6 326 0H311Q275 2 180 2Q146 2 117 2T71 2T50 1Q33 1 33 10Q33 12 36 24Q41 43 46 45Q50 46 61 46H67Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628Q287 635 230 637ZM630 554Q630 586 609 608T523 636Q521 636 500 636T462 637H440Q393 637 386 627Q385 624 352 494T319 361Q319 360 388 360Q466 361 492 367Q556 377 592 426Q608 449 619 486T630 554Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(981.2,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1981.4,0)"><path data-c="1D445" d="M230 637Q203 637 198 638T193 649Q193 676 204 682Q206 683 378 683Q550 682 564 680Q620 672 658 652T712 606T733 563T739 529Q739 484 710 445T643 385T576 351T538 338L545 333Q612 295 612 223Q612 212 607 162T602 80V71Q602 53 603 43T614 25T640 16Q668 16 686 38T712 85Q717 99 720 102T735 105Q755 105 755 93Q755 75 731 36Q693 -21 641 -21H632Q571 -21 531 4T487 82Q487 109 502 166T517 239Q517 290 474 313Q459 320 449 321T378 323H309L277 193Q244 61 244 59Q244 55 245 54T252 50T269 48T302 46H333Q339 38 339 37T336 19Q332 6 326 0H311Q275 2 180 2Q146 2 117 2T71 2T50 1Q33 1 33 10Q33 12 36 24Q41 43 46 45Q50 46 61 46H67Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628Q287 635 230 637ZM630 554Q630 586 609 608T523 636Q521 636 500 636T462 637H440Q393 637 386 627Q385 624 352 494T319 361Q319 360 388 360Q466 361 492 367Q556 377 592 426Q608 449 619 486T630 554Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>R</mi><mo>×</mo><mi>R</mi></math></mjx-assistive-mml></mjx-container> haritasına sahip olur ve <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.489ex;" xmlns="http://www.w3.org/2000/svg" width="1.17ex" height="1.489ex" role="img" focusable="false" viewBox="0 -442 517 658" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D70C" d="M58 -216Q25 -216 23 -186Q23 -176 73 26T127 234Q143 289 182 341Q252 427 341 441Q343 441 349 441T359 442Q432 442 471 394T510 276Q510 219 486 165T425 74T345 13T266 -10H255H248Q197 -10 165 35L160 41L133 -71Q108 -168 104 -181T92 -202Q76 -216 58 -216ZM424 322Q424 359 407 382T357 405Q322 405 287 376T231 300Q217 269 193 170L176 102Q193 26 260 26Q298 26 334 62Q367 92 389 158T418 266T424 322Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>ρ</mi></math></mjx-assistive-mml></mjx-container> yakından uzağa yaklaşık olarak sabit kalır. Önce iki ve dört kademe arasındaki, ardından 1024 ve 2048 gölge haritası çözünürlüğü arasındaki GPU süresi farkını ölçtük. Sonuç olarak 1024 çözünürlükte üç kademe, hedef donanımımızda 2 ms GPU süresini aşmadan kameraya yakın bölgelerde kabul edilebilir temas gölgeleri sağladı.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/09-csm-shadows/" title="Spike 9 CSM Gölgeleri" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/09-csm-shadows/" target="_blank">Spike 9'u yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=09-csm-shadows">Kaynağı görüntüle</a></p>
<p>Bu aşamanın zor kısmı ürün disiplinini korumaktı. Bazı efektler mükemmel görünse de görsel etkilerine kıyasla kare bütçesinin çok büyük bölümünü tükettikleri için sınırlandırılmaları gerekiyordu.</p>
<p>Kuralımız basitti. Bir özellik, ancak maliyetini ölçülmüş kare süresi verileriyle açıklayabiliyorsa ilerler.</p>
<p>Kulağa bariz geliyor. Ancak herkesin bir sonraki görsel kazanım için heyecanlandığı hızlı prototipleme döngülerinde bu yaklaşım yaygın değil. Bu kuralı en baştan uygulamak, daha sonra clipmap'ler ve hacimsel bölgelerle ilgili mimari kararları çok daha anlaşılır hâle getirdi; çünkü aynı 16 ms için yarışan her özelliğin ayrı ayrı maliyetini zaten biliyorduk.</p>
<ol start="6">
<li>bölümde, geometry clipmap'lerle birlikte ilk büyük arazi mimarisi değişikliğine gidiyoruz.</li>
</ol>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>InstancedMesh ve GPU bitki örtüsü.</strong> Three.js'in <code>InstancedMesh</code> sınıfı, aynı geometrinin N kopyasını tek bir draw call ile render eder. Bitki örtüsü için bir yoğunluk haritası (parça başına 32x32), çimen saplarının ve çalı kümelerinin çalışma zamanında dağıtılarak instance buffer'lara yerleştirilmesini sağlar. Rüzgâr animasyonu, kayan bir gürültü dokusu kullanılarak vertex shader içinde çalışır. Büyük ölçekte WebGPU'nun <code>ComputeInstanceCulling</code> özelliği, rasterleştirmeden önce ekran dışındaki ve uzaktaki örnekleri eler; <code>IndirectBatchedMesh</code> ise birden fazla bitki örtüsü türünü, multi-draw indirect ile çizilen tek bir buffer içinde toplar. <a href="/tr/guides/landscape-generation-browser.html#gpu-driven-vegetation-culling">GPU bitki örtüsü ayıklamayla ilgili arazi rehberimize</a> bakın.</p>
<p><strong>Triplanar eşleme.</strong> Standart UV eşlemeli dokular, UV koordinatları sıkıştığı için dik eğimlerde gerilir. Triplanar eşleme, dokuları üç eksenin (X, Y, Z) tamamı boyunca yansıtır ve yüzey normaline göre harmanlar. Uçurum yüzeyleri X veya Z projeksiyonunu alırken (gerilme olmaz), düz zemin Y projeksiyonunu alır. Harmanlama yumuşak ve otomatiktir; UV açılımı gerektirmez. PBR arazilerde aynı harmanlama ağırlıkları albedo, normal, pürüzlülük ve ortam örtme kanallarına uygulanır. <a href="/tr/guides/landscape-generation-browser.html#triplanar-mapping">Triplanar eşleme ayrıntılarına</a> bakın.</p>
<p><strong>Eğim ve rakım tabanlı malzeme splatting'i.</strong> Elle boyanmış splat haritaları yerine malzemeler, arazi özelliklerine göre fragment shader içinde prosedürel olarak atanır. Alçak rakımdaki düz zemine çimen, dik eğimlere kaya, yüksek rakımlara kar (yalnızca birikmeye yetecek kadar düz yüzeylerde), deniz seviyesine yakın bölgelere ise kum atanır. Geçişlerde yumuşak harmanlama için <code>smoothstep</code> kullanılır. Bizim uygulamamızda her arazi parçası, katman başına diffuse ve normal örnekleriyle dört doku katmanını değerlendiriyor; bu da aydınlatmadan önce fragment başına sekiz doku okumasıyla sonuçlanıyor. <a href="/tr/guides/landscape-generation-browser.html#slope-and-altitude-based-material-assignment">Eğim ve rakım tabanlı malzeme atamasına</a> bakın.</p>
<p><strong>Kademeli Gölge Haritaları (CSM).</strong> CSM, kameranın görüş hacmini 3-4 mesafe aralığına (kademeye) böler. Her kademe, mesafesine uygun bir çözünürlükte güneşin perspektifinden bir gölge haritası render eder. Yakın kademeler yüksek çözünürlüklü gölgeler (ağaçların ve binaların altındaki ayrıntılı temas gölgeleri), uzak kademeler ise daha düşük çözünürlüklü gölgeler (geniş dağ gölgeleri) alır. Arazi shader'ı tüm kademeleri örnekler ve her fragment için uygun olanı seçer. Performans maliyeti: 1024x1024 çözünürlükte 3-4 kademe, gölge haritası render'ına yaklaşık 0,5-1 ms, örneklemeye ise yaklaşık 0,2-0,3 ms ekler. <a href="/tr/guides/landscape-generation-browser.html#shadows-for-terrain">Arazi gölgelerine</a> bakın.</p>
<hr>
<p>12 bölümün 5.'si.<br>
Önceki: <a href="/tr/blog/2026-02-25-open-world-browser-part-04-streaming-before-fancy.html">Bölüm 4 - Gösterişli araziden önce streaming</a><br>
Sonraki: <a href="/tr/blog/2026-02-25-open-world-browser-part-06-clipmaps.html">Bölüm 6 - Clipmap'ler gidişatı değiştirdi</a><br>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya oluşturmak, bölüm 6: Clipmap'ler gidişatı değiştirdi]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-06-clipmaps</link>
            <guid>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-06-clipmaps</guid>
            <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Geometri clipmap'leri, çok daha büyük bir dünyada hareket ederken arazi maliyetini öngörülebilir tutmamızı sağladı.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-olusturmak-bolum-6-clipmap-ler-gidisatı-degistirdi" tabindex="-1">Tarayıcıda açık dünya oluşturmak, bölüm 6: Clipmap'ler gidişatı değiştirdi <a class="header-anchor" href="#tarayıcıda-acık-dunya-olusturmak-bolum-6-clipmap-ler-gidisatı-degistirdi" aria-label="Permalink to &quot;Tarayıcıda açık dünya oluşturmak, bölüm 6: Clipmap'ler gidişatı değiştirdi&quot;"></a></h1>
<p><em>Yazan: <a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Bu rehber, spike'ın ne olduğunu açıklar ve tüm bölümlere bağlantı verir.</p>
<p>Spike 10'dan önce zihinsel modelimiz hâlâ &quot;daha büyük dünya, daha fazla geometri demektir&quot; şeklindeydi. Spike 10'dan sonra modelimiz &quot;sabit geometri bütçesi, kamera merkezli halka güncellemeleri&quot; hâline geldi. Bu değişim projenin gidişatını değiştirdi.</p>
<p>Geometri clipmap'lerinin ardındaki fikir basittir. Araziyi, kameranın merkezinde bulunduğu bir dizi eş merkezli halka olarak render edersiniz. En içteki halka en yüksek köşe yoğunluğuna sahiptir. Dışarı doğru her <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.025ex;" xmlns="http://www.w3.org/2000/svg" width="1.179ex" height="1.595ex" role="img" focusable="false" viewBox="0 -694 521 705" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>k</mi></math></mjx-assistive-mml></mjx-container> halkasında köşe aralığı iki katına çıkar, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.375ex;" xmlns="http://www.w3.org/2000/svg" width="10.935ex" height="2.306ex" role="img" focusable="false" viewBox="0 -853.7 4833.4 1019.3" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D460" d="M131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(502,-150) scale(0.707)"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1198.2,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(2254,0)"><g data-mml-node="mi"><path data-c="1D460" d="M131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(502,-150) scale(0.707)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3381.7,0)"><path data-c="22C5" d="M78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msup" transform="translate(3882,0)"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(533,363) scale(0.707)"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>s</mi><mi>k</mi></msub><mo>=</mo><msub><mi>s</mi><mn>0</mn></msub><mo>⋅</mo><msup><mn>2</mn><mi>k</mi></msup></math></mjx-assistive-mml></mjx-container>; dolayısıyla kendisinden içerideki halkanın kapladığı zemin alanının <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="2.891ex" height="1.532ex" role="img" focusable="false" viewBox="0 -677 1278 677" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(500,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>4</mn><mo>×</mo></math></mjx-assistive-mml></mjx-container> katını kapsar.</p>
<p>İşin püf noktası tamamen bu iki katına çıkışta. Görüş mesafesi halka sayısıyla geometrik olarak artarken, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.375ex;" xmlns="http://www.w3.org/2000/svg" width="13.628ex" height="2.288ex" role="img" focusable="false" viewBox="0 -846 6023.5 1011.5" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(553,-150) scale(0.707)"><path data-c="76" d="M338 431Q344 429 422 429Q479 429 503 431H508V385H497Q439 381 423 345Q421 341 356 172T288 -2Q283 -11 263 -11Q244 -11 239 -2Q99 359 98 364Q93 378 82 381T43 385H19V431H25L33 430Q41 430 53 430T79 430T104 429T122 428Q217 428 232 431H240V385H226Q187 384 184 370Q184 366 235 234L286 102L377 341V349Q377 363 367 372T349 383T335 385H331V431H338Z" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(528,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(806,0)" style="stroke-width: 3;"/><path data-c="77" d="M90 368Q84 378 76 380T40 385H18V431H24L43 430Q62 430 84 429T116 428Q206 428 221 431H229V385H215Q177 383 177 368Q177 367 221 239L265 113L339 328L333 345Q323 374 316 379Q308 384 278 385H258V431H264Q270 428 348 428Q439 428 454 431H461V385H452Q404 385 404 369Q404 366 418 324T449 234T481 143L496 100L537 219Q579 341 579 347Q579 363 564 373T530 385H522V431H529Q541 428 624 428Q692 428 698 431H703V385H697Q696 385 691 385T682 384Q635 377 619 334L559 161Q546 124 528 71Q508 12 503 1T487 -11H479Q460 -11 456 -4Q455 -3 407 133L361 267Q359 263 266 -4Q261 -11 243 -11H238Q225 -11 220 -3L90 368Z" transform="translate(1250,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(2275.2,0)"><path data-c="2248" d="M55 319Q55 360 72 393T114 444T163 472T205 482Q207 482 213 482T223 483Q262 483 296 468T393 413L443 381Q502 346 553 346Q609 346 649 375T694 454Q694 465 698 474T708 483Q722 483 722 452Q722 386 675 338T555 289Q514 289 468 310T388 357T308 404T224 426Q164 426 125 393T83 318Q81 289 69 289Q55 289 55 319ZM55 85Q55 126 72 159T114 210T163 238T205 248Q207 248 213 248T223 249Q262 249 296 234T393 179L443 147Q502 112 553 112Q609 112 649 141T694 220Q694 249 708 249T722 217Q722 153 675 104T555 55Q514 55 468 76T388 123T308 170T224 192Q164 192 125 159T83 84Q80 55 69 55Q55 55 55 85Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(3331,0)"><g data-mml-node="mi"><path data-c="1D460" d="M131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(502,-150) scale(0.707)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(4458.7,0)"><path data-c="22C5" d="M78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msup" transform="translate(4959,0)"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" transform="translate(533,363) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z" style="stroke-width: 3;"/></g></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>d</mi><mtext>view</mtext></msub><mo>≈</mo><msub><mi>s</mi><mn>0</mn></msub><mo>⋅</mo><msup><mn>2</mn><mrow data-mjx-texclass="ORD"><mi>L</mi></mrow></msup></math></mjx-assistive-mml></mjx-container>, köşe maliyeti yalnızca doğrusal olarak büyür:</p>
<mjx-container tabindex="0" class="MathJax" jax="SVG" display="true" style="direction: ltr; display: block; text-align: center; margin: 1em 0; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.357ex;" xmlns="http://www.w3.org/2000/svg" width="14.108ex" height="2.357ex" role="img" focusable="false" viewBox="0 -883.9 6235.6 1041.7" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D449" d="M52 648Q52 670 65 683H76Q118 680 181 680Q299 680 320 683H330Q336 677 336 674T334 656Q329 641 325 637H304Q282 635 274 635Q245 630 242 620Q242 618 271 369T301 118L374 235Q447 352 520 471T595 594Q599 601 599 609Q599 633 555 637Q537 637 537 648Q537 649 539 661Q542 675 545 679T558 683Q560 683 570 683T604 682T668 681Q737 681 755 683H762Q769 676 769 672Q769 655 760 640Q757 637 743 637Q730 636 719 635T698 630T682 623T670 615T660 608T652 599T645 592L452 282Q272 -9 266 -16Q263 -18 259 -21L241 -22H234Q216 -22 216 -15Q213 -9 177 305Q139 623 138 626Q133 637 76 637H59Q52 642 52 648Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(616,-150) scale(0.707)"><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(389,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(889,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(1278,0)" style="stroke-width: 3;"/><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z" transform="translate(1778,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(2397.6,0)"><path data-c="2248" d="M55 319Q55 360 72 393T114 444T163 472T205 482Q207 482 213 482T223 483Q262 483 296 468T393 413L443 381Q502 346 553 346Q609 346 649 375T694 454Q694 465 698 474T708 483Q722 483 722 452Q722 386 675 338T555 289Q514 289 468 310T388 357T308 404T224 426Q164 426 125 393T83 318Q81 289 69 289Q55 289 55 319ZM55 85Q55 126 72 159T114 210T163 238T205 248Q207 248 213 248T223 249Q262 249 296 234T393 179L443 147Q502 112 553 112Q609 112 649 141T694 220Q694 249 708 249T722 217Q722 153 675 104T555 55Q514 55 468 76T388 123T308 170T224 192Q164 192 125 159T83 84Q80 55 69 55Q55 55 55 85Z" style="stroke-width: 3;"/></g><g data-mml-node="msup" transform="translate(3453.4,0)"><g data-mml-node="mi"><path data-c="1D441" d="M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(975.3,413) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(5054.4,0)"><path data-c="22C5" d="M78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(5554.6,0)"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="block" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; overflow: hidden; width: 100%;"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><msub><mi>V</mi><mtext>total</mtext></msub><mo>≈</mo><msup><mi>N</mi><mn>2</mn></msup><mo>⋅</mo><mi>L</mi></math></mjx-assistive-mml></mjx-container><p>Burada her biri <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="6.784ex" height="1.545ex" role="img" focusable="false" viewBox="0 -683 2998.4 683" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D441" d="M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1110.2,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(2110.4,0)"><path data-c="1D441" d="M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>N</mi><mo>×</mo><mi>N</mi></math></mjx-assistive-mml></mjx-container> köşeden oluşan <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="1.541ex" height="1.545ex" role="img" focusable="false" viewBox="0 -683 681 683" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>L</mi></math></mjx-assistive-mml></mjx-container> halka bulunur. Görebildiğiniz mesafeyi iki katına çıkarmanın maliyeti, dört kat fazla geometri değil, yalnızca bir halkadır. Dünya boyutu ne olursa olsun üçgen sayısı yaklaşık olarak sabit kalır; çünkü aynı çözünürlükteki aynı <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="1.541ex" height="1.545ex" role="img" focusable="false" viewBox="0 -683 681 683" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>L</mi></math></mjx-assistive-mml></mjx-container> halkayı her zaman render edersiniz.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/10-clipmap-geomorph/" title="Spike 10 Geometri Clipmap'lerinde Geomorphing" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/10-clipmap-geomorph/" target="_blank">Spike 10'u yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=10-clipmap-geomorph">Kaynak kodunu görüntüle</a></p>
<p>Pratikteki püf noktası, halka sınırlarında geomorphing uygulamaktı. Bir köşe bir LOD halkasından diğerine geçtiğinde yüksekliğinin, yüksek çözünürlüklü ve düşük çözünürlüklü örnekler arasında yumuşak biçimde harmanlanması gerekir. Aksi takdirde kamera her hareket ettiğinde ve halkalar kaydığında gözle görülür sıçramalar oluşur. Bunu, köşenin halka kenarına olan uzaklığına dayalı bir harmanlama faktörüyle ve yüksekliği vertex shader'da interpolasyon yaparak çözdük:</p>
<mjx-container tabindex="0" class="MathJax" jax="SVG" display="true" style="direction: ltr; display: block; text-align: center; margin: 1em 0; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="58.451ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 25835.3 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="210E" d="M137 683Q138 683 209 688T282 694Q294 694 294 685Q294 674 258 534Q220 386 220 383Q220 381 227 388Q288 442 357 442Q411 442 444 415T478 336Q478 285 440 178T402 50Q403 36 407 31T422 26Q450 26 474 56T513 138Q516 149 519 151T535 153Q555 153 555 145Q555 144 551 130Q535 71 500 33Q466 -10 419 -10H414Q367 -10 346 17T325 74Q325 90 361 192T398 345Q398 404 354 404H349Q266 404 205 306L198 293L164 158Q132 28 127 16Q114 -11 83 -11Q69 -11 59 -2T48 16Q48 30 121 320L195 616Q195 629 188 632T149 637H128Q122 643 122 645T124 664Q129 683 137 683Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(853.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(1909.6,0)"><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(278,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(722,0)" style="stroke-width: 3;"/><path data-c="70" d="M36 -148H50Q89 -148 97 -134V-126Q97 -119 97 -107T97 -77T98 -38T98 6T98 55T98 106Q98 140 98 177T98 243T98 296T97 335T97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 61 434T98 436Q115 437 135 438T165 441T176 442H179V416L180 390L188 397Q247 441 326 441Q407 441 464 377T522 216Q522 115 457 52T310 -11Q242 -11 190 33L182 40V-45V-101Q182 -128 184 -134T195 -145Q216 -148 244 -148H260V-194H252L228 -193Q205 -192 178 -192T140 -191Q37 -191 28 -194H20V-148H36ZM424 218Q424 292 390 347T305 402Q234 402 182 337V98Q222 26 294 26Q345 26 384 80T424 218Z" transform="translate(1114,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(3579.6,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(3968.6,0)"><g data-mml-node="mi"><path data-c="210E" d="M137 683Q138 683 209 688T282 694Q294 694 294 685Q294 674 258 534Q220 386 220 383Q220 381 227 388Q288 442 357 442Q411 442 444 415T478 336Q478 285 440 178T402 50Q403 36 407 31T422 26Q450 26 474 56T513 138Q516 149 519 151T535 153Q555 153 555 145Q555 144 551 130Q535 71 500 33Q466 -10 419 -10H414Q367 -10 346 17T325 74Q325 90 361 192T398 345Q398 404 354 404H349Q266 404 205 306L198 293L164 158Q132 28 127 16Q114 -11 83 -11Q69 -11 59 -2T48 16Q48 30 121 320L195 616Q195 629 188 632T149 637H128Q122 643 122 645T124 664Q129 683 137 683Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(609,-150) scale(0.707)"><path data-c="66" d="M273 0Q255 3 146 3Q43 3 34 0H26V46H42Q70 46 91 49Q99 52 103 60Q104 62 104 224V385H33V431H104V497L105 564L107 574Q126 639 171 668T266 704Q267 704 275 704T289 705Q330 702 351 679T372 627Q372 604 358 590T321 576T284 590T270 627Q270 647 288 667H284Q280 668 273 668Q245 668 223 647T189 592Q183 572 182 497V431H293V385H185V225Q185 63 186 61T189 57T194 54T199 51T206 49T213 48T222 47T231 47T241 46T251 46H282V0H273Z" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(306,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(584,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(1140,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(5747.6,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(6025.6,0)"><g data-mml-node="mspace"/></g><g data-mml-node="msub" transform="translate(6359.3,0)"><g data-mml-node="mi"><path data-c="210E" d="M137 683Q138 683 209 688T282 694Q294 694 294 685Q294 674 258 534Q220 386 220 383Q220 381 227 388Q288 442 357 442Q411 442 444 415T478 336Q478 285 440 178T402 50Q403 36 407 31T422 26Q450 26 474 56T513 138Q516 149 519 151T535 153Q555 153 555 145Q555 144 551 130Q535 71 500 33Q466 -10 419 -10H414Q367 -10 346 17T325 74Q325 90 361 192T398 345Q398 404 354 404H349Q266 404 205 306L198 293L164 158Q132 28 127 16Q114 -11 83 -11Q69 -11 59 -2T48 16Q48 30 121 320L195 616Q195 629 188 632T149 637H128Q122 643 122 645T124 664Q129 683 137 683Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(609,-150) scale(0.707)"><path data-c="63" d="M370 305T349 305T313 320T297 358Q297 381 312 396Q317 401 317 402T307 404Q281 408 258 408Q209 408 178 376Q131 329 131 219Q131 137 162 90Q203 29 272 29Q313 29 338 55T374 117Q376 125 379 127T395 129H409Q415 123 415 120Q415 116 411 104T395 71T366 33T318 2T249 -11Q163 -11 99 53T34 214Q34 318 99 383T250 448T370 421T404 357Q404 334 387 320Z" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(444,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(944,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(1444,0)" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(1836,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(2230,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(8909.1,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(9187.1,0)"><g data-mml-node="mspace"/></g><g data-mml-node="mi" transform="translate(9520.7,0)"><path data-c="1D6FC" d="M34 156Q34 270 120 356T309 442Q379 442 421 402T478 304Q484 275 485 237V208Q534 282 560 374Q564 388 566 390T582 393Q603 393 603 385Q603 376 594 346T558 261T497 161L486 147L487 123Q489 67 495 47T514 26Q528 28 540 37T557 60Q559 67 562 68T577 70Q597 70 597 62Q597 56 591 43Q579 19 556 5T512 -10H505Q438 -10 414 62L411 69L400 61Q390 53 370 41T325 18T267 -2T203 -11Q124 -11 79 39T34 156ZM208 26Q257 26 306 47T379 90L403 112Q401 255 396 290Q382 405 304 405Q235 405 183 332Q156 292 139 224T121 120Q121 71 146 49T208 26Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(10160.7,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(10549.7,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(10827.7,0)"><g data-mml-node="mspace"/></g><g data-mml-node="mi" transform="translate(12994.4,0)"><path data-c="1D6FC" d="M34 156Q34 270 120 356T309 442Q379 442 421 402T478 304Q484 275 485 237V208Q534 282 560 374Q564 388 566 390T582 393Q603 393 603 385Q603 376 594 346T558 261T497 161L486 147L487 123Q489 67 495 47T514 26Q528 28 540 37T557 60Q559 67 562 68T577 70Q597 70 597 62Q597 56 591 43Q579 19 556 5T512 -10H505Q438 -10 414 62L411 69L400 61Q390 53 370 41T325 18T267 -2T203 -11Q124 -11 79 39T34 156ZM208 26Q257 26 306 47T379 90L403 112Q401 255 396 290Q382 405 304 405Q235 405 183 332Q156 292 139 224T121 120Q121 71 146 49T208 26Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(13912.2,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(14968,0)"><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" style="stroke-width: 3;"/><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(394,0)" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(1227,0)" style="stroke-width: 3;"/><path data-c="6F" d="M28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30Z" transform="translate(1727,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(2227,0)" style="stroke-width: 3;"/><path data-c="68" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 124T102 167T103 217T103 272T103 329Q103 366 103 407T103 482T102 542T102 586T102 603Q99 622 88 628T43 637H25V660Q25 683 27 683L37 684Q47 685 66 686T103 688Q120 689 140 690T170 693T181 694H184V367Q244 442 328 442Q451 442 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(2616,0)" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(3172,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(3566,0)" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(3955,0)" style="stroke-width: 3;"/><path data-c="70" d="M36 -148H50Q89 -148 97 -134V-126Q97 -119 97 -107T97 -77T98 -38T98 6T98 55T98 106Q98 140 98 177T98 243T98 296T97 335T97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 61 434T98 436Q115 437 135 438T165 441T176 442H179V416L180 390L188 397Q247 441 326 441Q407 441 464 377T522 216Q522 115 457 52T310 -11Q242 -11 190 33L182 40V-45V-101Q182 -128 184 -134T195 -145Q216 -148 244 -148H260V-194H252L228 -193Q205 -192 178 -192T140 -191Q37 -191 28 -194H20V-148H36ZM424 218Q424 292 390 347T305 402Q234 402 182 337V98Q222 26 294 26Q345 26 384 80T424 218Z" transform="translate(4399,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(19923,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(20312,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(553,-150) scale(0.707)"><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(556,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(1000,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(1500,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(22252.8,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(22530.8,0)"><g data-mml-node="mspace"/></g><g data-mml-node="msub" transform="translate(22864.5,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(553,-150) scale(0.707)"><path data-c="66" d="M273 0Q255 3 146 3Q43 3 34 0H26V46H42Q70 46 91 49Q99 52 103 60Q104 62 104 224V385H33V431H104V497L105 564L107 574Q126 639 171 668T266 704Q267 704 275 704T289 705Q330 702 351 679T372 627Q372 604 358 590T321 576T284 590T270 627Q270 647 288 667H284Q280 668 273 668Q245 668 223 647T189 592Q183 572 182 497V431H293V385H185V225Q185 63 186 61T189 57T194 54T199 51T206 49T213 48T222 47T231 47T241 46T251 46H282V0H273Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(306,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(806,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(24314.6,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(24592.6,0)"><g data-mml-node="mspace"/></g><g data-mml-node="mi" transform="translate(24926.3,0)"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(25446.3,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="block" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; overflow: hidden; width: 100%;"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><mi>h</mi><mo>=</mo><mi>lerp</mi><mo stretchy="false">(</mo><msub><mi>h</mi><mtext>fine</mtext></msub><mo>,</mo><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><msub><mi>h</mi><mtext>coarse</mtext></msub><mo>,</mo><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mi>α</mi><mo stretchy="false">)</mo><mo>,</mo><mstyle scriptlevel="0"><mspace width="2em"/></mstyle><mi>α</mi><mo>=</mo><mi>smoothstep</mi><mo stretchy="false">(</mo><msub><mi>d</mi><mtext>near</mtext></msub><mo>,</mo><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><msub><mi>d</mi><mtext>far</mtext></msub><mo>,</mo><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mi>d</mi><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container><p>Burada <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.023ex;" xmlns="http://www.w3.org/2000/svg" width="1.176ex" height="1.593ex" role="img" focusable="false" viewBox="0 -694 520 704" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>d</mi></math></mjx-assistive-mml></mjx-container>, köşenin kameraya olan uzaklığıdır. Halkanın içinde (<mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.357ex;" xmlns="http://www.w3.org/2000/svg" width="8.585ex" height="1.927ex" role="img" focusable="false" viewBox="0 -694 3794.4 851.8" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(797.8,0)"><path data-c="2264" d="M674 636Q682 636 688 630T694 615T687 601Q686 600 417 472L151 346L399 228Q687 92 691 87Q694 81 694 76Q694 58 676 56H670L382 192Q92 329 90 331Q83 336 83 348Q84 359 96 365Q104 369 382 500T665 634Q669 636 674 636ZM84 -118Q84 -108 99 -98H678Q694 -104 694 -118Q694 -130 679 -138H98Q84 -131 84 -118Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(1853.6,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(553,-150) scale(0.707)"><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(556,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(1000,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(1500,0)" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>d</mi><mo>≤</mo><msub><mi>d</mi><mtext>near</mtext></msub></math></mjx-assistive-mml></mjx-container>) köşe tam çözünürlüklü yüksekliğini kullanır; bir sonraki halkaya ulaştığında (<mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.357ex;" xmlns="http://www.w3.org/2000/svg" width="7.474ex" height="1.927ex" role="img" focusable="false" viewBox="0 -694 3303.7 851.8" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(797.8,0)"><path data-c="2265" d="M83 616Q83 624 89 630T99 636Q107 636 253 568T543 431T687 361Q694 356 694 346T687 331Q685 329 395 192L107 56H101Q83 58 83 76Q83 77 83 79Q82 86 98 95Q117 105 248 167Q326 204 378 228L626 346L360 472Q291 505 200 548Q112 589 98 597T83 616ZM84 -118Q84 -108 99 -98H678Q694 -104 694 -118Q694 -130 679 -138H98Q84 -131 84 -118Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(1853.6,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(553,-150) scale(0.707)"><path data-c="66" d="M273 0Q255 3 146 3Q43 3 34 0H26V46H42Q70 46 91 49Q99 52 103 60Q104 62 104 224V385H33V431H104V497L105 564L107 574Q126 639 171 668T266 704Q267 704 275 704T289 705Q330 702 351 679T372 627Q372 604 358 590T321 576T284 590T270 627Q270 647 288 667H284Q280 668 273 668Q245 668 223 647T189 592Q183 572 182 497V431H293V385H185V225Q185 63 186 61T189 57T194 54T199 51T206 49T213 48T222 47T231 47T241 46T251 46H282V0H273Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(306,0)" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(806,0)" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>d</mi><mo>≥</mo><msub><mi>d</mi><mtext>far</mtext></msub></math></mjx-assistive-mml></mjx-container>), o halkanın kullanacağı kaba yüksekliğe zaten geçmiş olur. Dolayısıyla sıçrayacak hiçbir şey kalmaz.</p>
<p>Kamera hareketi testlerinden incelikli bir ders çıkardık. Clipmap'leri statik ekran görüntüleri üzerinden değerlendirip geçiş bozulmalarını gözden kaçırmak kolaydır. Halka sınırları boyunca sabit hızla ilerleyen geçişleri uzun süre çalıştırıp zamansal gürültüyü gözlemledik. Ekran görüntüleri yalan söyledi. Hareket gerçeği gösterdi.</p>
<p>Bu spike bize aynı zamanda net bir mimari sınır kazandırdı. Yakın alan arazisi; hacimsel düzenleme, daha yüksek malzeme karmaşıklığı ve fizik etkileşimiyle zaman içinde dinamik ve maliyetli hâle gelebilirdi. Uzak alan arazisi ise kararlı, öngörülebilir ve düşük maliyetli kalabilirdi. Bu ayrım, bu noktadan sonraki tüm mimari kararların omurgasını oluşturdu.</p>
<p>Kendi projeniz için clipmap'leri değerlendiriyorsanız güzel görüntüleri değil, stres döngülerini test edin. Gerçek sorunları ortaya çıkaran şeyler; uzun geçiş rotaları, değişen kamera yüksekliği ve sınırların tekrar tekrar aşılmasıdır.</p>
<ol start="7">
<li>bölümde hacimsel mesh oluşturmayı ekliyor ve &quot;yüzey olarak arazi&quot; yaklaşımından &quot;düzenlenebilir hacim olarak arazi&quot; yaklaşımına geçiyoruz. Projenin bir renderer olmaktan çıkıp dünya editörüne dönüşmeye başladığı nokta buydu.</li>
</ol>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>Geometri clipmap'leri.</strong> Losasso ve Hoppe tarafından SIGGRAPH 2004'te tanıtılan (<a href="https://hhoppe.com/geomclipmap.pdf" target="_blank" rel="noreferrer">makale</a>) geometri clipmap'leri, araziyi kameranın merkezinde bulunduğu eş merkezli kare halkalar olarak render eder. Her halka, bir öncekinin yarısı kadar köşe çözünürlüğüyle iki kat alan kaplar. Toplam köşe sayısı sabittir: yaklaşık <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="6.295ex" height="1.887ex" role="img" focusable="false" viewBox="0 -833.9 2782.2 833.9" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msup"><g data-mml-node="mi"><path data-c="1D441" d="M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(975.3,363) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1601,0)"><path data-c="22C5" d="M78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(2101.2,0)"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mi>N</mi><mn>2</mn></msup><mo>⋅</mo><mi>L</mi></math></mjx-assistive-mml></mjx-container>. <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="8.42ex" height="1.731ex" role="img" focusable="false" viewBox="0 -683 3721.6 765" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D441" d="M234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1165.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2221.6,0)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" transform="translate(1000,0)" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>N</mi><mo>=</mo><mn>256</mn></math></mjx-assistive-mml></mjx-container> ve <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="5.689ex" height="1.731ex" role="img" focusable="false" viewBox="0 -683 2514.6 765" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(958.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2014.6,0)"><path data-c="38" d="M70 417T70 494T124 618T248 666Q319 666 374 624T429 515Q429 485 418 459T392 417T361 389T335 371T324 363L338 354Q352 344 366 334T382 323Q457 264 457 174Q457 95 399 37T249 -22Q159 -22 101 29T43 155Q43 263 172 335L154 348Q133 361 127 368Q70 417 70 494ZM286 386L292 390Q298 394 301 396T311 403T323 413T334 425T345 438T355 454T364 471T369 491T371 513Q371 556 342 586T275 624Q268 625 242 625Q201 625 165 599T128 534Q128 511 141 492T167 463T217 431Q224 426 228 424L286 386ZM250 21Q308 21 350 55T392 137Q392 154 387 169T375 194T353 216T330 234T301 253T274 270Q260 279 244 289T218 306L210 311Q204 311 181 294T133 239T107 157Q107 98 150 60T250 21Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>L</mi><mo>=</mo><mn>8</mn></math></mjx-assistive-mml></mjx-container> seviye için bu, dünya boyutundan bağımsız olarak <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.439ex;" xmlns="http://www.w3.org/2000/svg" width="18.712ex" height="2.394ex" role="img" focusable="false" viewBox="0 -864 8270.6 1058" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msup"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" transform="translate(1000,0)" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(1533,393.1) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(2158.8,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(3159,0)"><path data-c="38" d="M70 417T70 494T124 618T248 666Q319 666 374 624T429 515Q429 485 418 459T392 417T361 389T335 371T324 363L338 354Q352 344 366 334T382 323Q457 264 457 174Q457 95 399 37T249 -22Q159 -22 101 29T43 155Q43 263 172 335L154 348Q133 361 127 368Q70 417 70 494ZM286 386L292 390Q298 394 301 396T311 403T323 413T334 425T345 438T355 454T364 471T369 491T371 513Q371 556 342 586T275 624Q268 625 242 625Q201 625 165 599T128 534Q128 511 141 492T167 463T217 431Q224 426 228 424L286 386ZM250 21Q308 21 350 55T392 137Q392 154 387 169T375 194T353 216T330 234T301 253T274 270Q260 279 244 289T218 306L210 311Q204 311 181 294T133 239T107 157Q107 98 150 60T250 21Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(3936.8,0)"><path data-c="2248" d="M55 319Q55 360 72 393T114 444T163 472T205 482Q207 482 213 482T223 483Q262 483 296 468T393 413L443 381Q502 346 553 346Q609 346 649 375T694 454Q694 465 698 474T708 483Q722 483 722 452Q722 386 675 338T555 289Q514 289 468 310T388 357T308 404T224 426Q164 426 125 393T83 318Q81 289 69 289Q55 289 55 319ZM55 85Q55 126 72 159T114 210T163 238T205 248Q207 248 213 248T223 249Q262 249 296 234T393 179L443 147Q502 112 553 112Q609 112 649 141T694 220Q694 249 708 249T722 217Q722 153 675 104T555 55Q514 55 468 76T388 123T308 170T224 192Q164 192 125 159T83 84Q80 55 69 55Q55 55 55 85Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(4992.6,0)"><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" style="stroke-width: 3;"/><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z" transform="translate(1000,0)" style="stroke-width: 3;"/><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" transform="translate(1500,0)" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(1778,0)" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(2278,0)" style="stroke-width: 3;"/><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" transform="translate(2778,0)" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mn>256</mn><mn>2</mn></msup><mo>×</mo><mn>8</mn><mo>≈</mo><mn>524,000</mn></math></mjx-assistive-mml></mjx-container> köşe demektir. Kamera hareket ettikçe CPU, her halkanın heightmap verilerini günceller. Vertex shader, yüksekliği bir dokudan okur ve düz ızgarayı yerinden oynatır. <a href="/tr/guides/landscape-generation-browser.html#geometry-clipmaps">Geometri clipmap'leri hakkındaki arazi rehberimize</a> ve <a href="https://developer.nvidia.com/gpugems/gpugems2/part-i-geometric-complexity/chapter-2-terrain-rendering-using-gpu-based-geometry" target="_blank" rel="noreferrer">GPU Gems 2, Bölüm 2'ye</a> bakabilirsiniz.</p>
<p><strong>Geomorphing.</strong> Arazi LOD'undaki en belirgin görsel bozulma sıçramadır: Bir parça LOD seviyesini değiştirdiğinde köşeler bir anda yer değiştirir. Geomorphing, bir geçiş bölgesi boyunca köşe konumlarını LOD seviyeleri arasında harmanlayarak bunu ortadan kaldırır. Her köşe hem mevcut LOD yüksekliğini hem de daha kaba LOD yüksekliğini saklar. Kamera mesafesine dayalı bir morph faktörü, ikisi arasında yumuşak bir interpolasyon yapar: <code>morphedHeight = mix(fineLodHeight, coarseLodHeight, smoothstep(lodNear, lodFar, distance))</code>. Geçiş bölgesi genellikle her halkanın dıştaki %20'lik kısmıdır. Normal kamera hızlarında geçiş fark edilmez. <a href="/tr/guides/landscape-generation-browser.html#geomorphing-pop-free-lod-transitions">Geomorphing ayrıntılarına</a> bakabilirsiniz.</p>
<p><strong>CDLOD (Quadtree Uyarlamalı Clipmap'ler).</strong> Strugar'ın sabit halkalı clipmap'ler üzerinde yaptığı bir iyileştirmedir (2014, <a href="https://www.vertexasylum.com/CDLOD/cdlod_latest.pdf" target="_blank" rel="noreferrer">makale</a>). CDLOD, tekdüze çözünürlüğe sahip eş merkezli halkalar yerine arazi karmaşıklığına uyarlanan bir quadtree kullanır. Düz alanlarda kaba düğümler kullanılırken, yüksek ayrıntıya sahip alanlar (uçurumlar, sırtlar) daha ince alt bölümlere ayrılır. Farklı chunk'ların çok farklı karmaşıklık düzeylerine sahip olduğu üretici dünyaları için bu önemlidir. <a href="/tr/guides/landscape-generation-browser.html#cdlod-quadtree-adaptive-clipmaps">Arazi rehberimizdeki CDLOD bölümüne</a> bakabilirsiniz.</p>
<hr>
<p>12 bölümün 6.'sı.<br>
Önceki: <a href="/tr/blog/2026-02-25-open-world-browser-part-05-budgeting-the-pretty.html">Bölüm 5 - Görselliğin bütçesini belirlemek</a><br>
Sonraki: <a href="/tr/blog/2026-02-25-open-world-browser-part-07-marching-cubes.html">Bölüm 7 - Marching cubes ve ilk gerçek mağaralar</a><br>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya oluşturmak, bölüm 7: Marching cubes ve ilk gerçek mağaralar]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-07-marching-cubes</link>
            <guid>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-07-marching-cubes</guid>
            <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spike 12, projeye gerçek zamanlı WebGPU marching cubes teknolojisini getirdi ve araziyle neler yapılabileceğini değiştirdi.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-olusturmak-bolum-7-marching-cubes-ve-ilk-gercek-magaralar" tabindex="-1">Tarayıcıda açık dünya oluşturmak, bölüm 7: Marching cubes ve ilk gerçek mağaralar <a class="header-anchor" href="#tarayıcıda-acık-dunya-olusturmak-bolum-7-marching-cubes-ve-ilk-gercek-magaralar" aria-label="Permalink to &quot;Tarayıcıda açık dünya oluşturmak, bölüm 7: Marching cubes ve ilk gerçek mağaralar&quot;"></a></h1>
<p><em>Yazan: <a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Bu rehber, spike'ın ne olduğunu açıklar ve tüm bölümlere bağlantı verir.</p>
<p>Yükseklik haritaları, çıkıntılara ihtiyaç duyana kadar harikadır.</p>
<p>Oyulmuş tüneller, havada uzanan kaya çıkıntıları veya mağara tavanları istediğiniz anda, yalnızca yükseklik alanına dayanan bir işlem hattı sizi kısıtlamaya başlar. Bir yükseklik haritası, her XZ koordinatı için tek bir Y değeri saklar. Kendi üzerine kıvrılan herhangi bir yüzeyi temsil etmesi fiziksel olarak mümkün değildir. Hacimsel bir temsile ihtiyacımız vardı.</p>
<p>Spike 12, WebGPU compute shader'larını kullanarak GPU üzerinde marching cubes uyguladı. Algoritma, 3B bir ızgara üzerinde işaretli uzaklık alanını (SDF) değerlendirir ve sıfır geçişi yüzeyinde bir üçgen ağı çıkarır. Her hücrenin 8 köşesi vardır ve her köşe yüzeyin ya içinde ya da dışındadır; bu da <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="8.53ex" height="2.072ex" role="img" focusable="false" viewBox="0 -833.9 3770.1 915.9" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msup"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(533,363) scale(0.707)"><path data-c="38" d="M70 417T70 494T124 618T248 666Q319 666 374 624T429 515Q429 485 418 459T392 417T361 389T335 371T324 363L338 354Q352 344 366 334T382 323Q457 264 457 174Q457 95 399 37T249 -22Q159 -22 101 29T43 155Q43 263 172 335L154 348Q133 361 127 368Q70 417 70 494ZM286 386L292 390Q298 394 301 396T311 403T323 413T334 425T345 438T355 454T364 471T369 491T371 513Q371 556 342 586T275 624Q268 625 242 625Q201 625 165 599T128 534Q128 511 141 492T167 463T217 431Q224 426 228 424L286 386ZM250 21Q308 21 350 55T392 137Q392 154 387 169T375 194T353 216T330 234T301 253T274 270Q260 279 244 289T218 306L210 311Q204 311 181 294T133 239T107 157Q107 98 150 60T250 21Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1214.3,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2270.1,0)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="36" d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" transform="translate(1000,0)" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mn>2</mn><mn>8</mn></msup><mo>=</mo><mn>256</mn></math></mjx-assistive-mml></mjx-container> olası işaret örüntüsü verir. Bir arama tablosu, her örüntüyü bir üçgen kümesiyle eşler. Köşe noktaları, alanın sıfırı kestiği noktada hücre kenarları üzerinde yer alır. Alan değerleri <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.464ex;" xmlns="http://www.w3.org/2000/svg" width="2.143ex" height="2.059ex" role="img" focusable="false" viewBox="0 -705 947.1 910" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D453" d="M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(523,-150) scale(0.707)"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>f</mi><mi>a</mi></msub></math></mjx-assistive-mml></mjx-container> ve <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.464ex;" xmlns="http://www.w3.org/2000/svg" width="1.983ex" height="2.059ex" role="img" focusable="false" viewBox="0 -705 876.3 910" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D453" d="M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(523,-150) scale(0.707)"><path data-c="1D44F" d="M73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>f</mi><mi>b</mi></msub></math></mjx-assistive-mml></mjx-container> olan <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.023ex;" xmlns="http://www.w3.org/2000/svg" width="1.197ex" height="1.02ex" role="img" focusable="false" viewBox="0 -441 529 451" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>a</mi></math></mjx-assistive-mml></mjx-container> ve <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.025ex;" xmlns="http://www.w3.org/2000/svg" width="0.971ex" height="1.595ex" role="img" focusable="false" viewBox="0 -694 429 705" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D44F" d="M73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>b</mi></math></mjx-assistive-mml></mjx-container> köşeleri arasındaki bir kenar için doğrusal enterpolasyon, köşe noktasını şu konuma yerleştirir:</p>
<mjx-container tabindex="0" class="MathJax" jax="SVG" display="true" style="direction: ltr; display: block; text-align: center; margin: 1em 0; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -2.016ex;" xmlns="http://www.w3.org/2000/svg" width="37.407ex" height="5.14ex" role="img" focusable="false" viewBox="0 -1381 16534 2272" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D42F" d="M401 444Q413 441 495 441Q568 441 574 444H580V382H510L409 156Q348 18 339 6Q331 -4 320 -4Q318 -4 313 -4T303 -3H288Q273 -3 264 12T221 102Q206 135 197 156L96 382H26V444H34Q49 441 145 441Q252 441 270 444H279V382H231L284 264Q335 149 338 149Q338 150 389 264T442 381Q442 382 418 382H394V444H401Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(884.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(1940.6,0)"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D429" d="M32 442L123 446Q214 450 215 450H221V409Q222 409 229 413T251 423T284 436T328 446T382 450Q480 450 540 388T600 223Q600 128 539 61T361 -6H354Q292 -6 236 28L227 34V-132H296V-194H287Q269 -191 163 -191Q56 -191 38 -194H29V-132H98V113V284Q98 330 97 348T93 370T83 376Q69 380 42 380H29V442H32ZM457 224Q457 303 427 349T350 395Q282 395 235 352L227 345V104L233 97Q274 45 337 45Q383 45 420 86T457 224Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mi" transform="translate(672,-150) scale(0.707)"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3258.8,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(4259.1,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(4620.1,0)"><g data-mml-node="mspace"/></g><g data-mml-node="mo" transform="translate(4787.1,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(5176.1,0)"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D429" d="M32 442L123 446Q214 450 215 450H221V409Q222 409 229 413T251 423T284 436T328 446T382 450Q480 450 540 388T600 223Q600 128 539 61T361 -6H354Q292 -6 236 28L227 34V-132H296V-194H287Q269 -191 163 -191Q56 -191 38 -194H29V-132H98V113V284Q98 330 97 348T93 370T83 376Q69 380 42 380H29V442H32ZM457 224Q457 303 427 349T350 395Q282 395 235 352L227 345V104L233 97Q274 45 337 45Q383 45 420 86T457 224Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mi" transform="translate(672,-150) scale(0.707)"><path data-c="1D44F" d="M73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(6423.6,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(7423.9,0)"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mi"><path data-c="1D429" d="M32 442L123 446Q214 450 215 450H221V409Q222 409 229 413T251 423T284 436T328 446T382 450Q480 450 540 388T600 223Q600 128 539 61T361 -6H354Q292 -6 236 28L227 34V-132H296V-194H287Q269 -191 163 -191Q56 -191 38 -194H29V-132H98V113V284Q98 330 97 348T93 370T83 376Q69 380 42 380H29V442H32ZM457 224Q457 303 427 349T350 395Q282 395 235 352L227 345V104L233 97Q274 45 337 45Q383 45 420 86T457 224Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mi" transform="translate(672,-150) scale(0.707)"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(8519.9,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(8908.9,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(9186.9,0)"><g data-mml-node="mspace"/></g><g data-mml-node="mi" transform="translate(11353.6,0)"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(11992.4,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mfrac" transform="translate(13048.1,0)"><g data-mml-node="mrow" transform="translate(880.4,676)"><g data-mml-node="mo"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(778,0)"><g data-mml-node="mi"><path data-c="1D453" d="M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(523,-150) scale(0.707)"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mrow" transform="translate(220,-686)"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D453" d="M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(523,-150) scale(0.707)"><path data-c="1D44F" d="M73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1098.6,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(2098.8,0)"><g data-mml-node="mi"><path data-c="1D453" d="M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(523,-150) scale(0.707)"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g></g></g><rect width="3245.9" height="60" x="120" y="220"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="block" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; overflow: hidden; width: 100%;"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">v</mi></mrow><mo>=</mo><msub><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">p</mi></mrow><mi>a</mi></msub><mo>+</mo><mi>t</mi><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mo stretchy="false">(</mo><msub><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">p</mi></mrow><mi>b</mi></msub><mo>−</mo><msub><mrow data-mjx-texclass="ORD"><mi mathvariant="bold">p</mi></mrow><mi>a</mi></msub><mo stretchy="false">)</mo><mo>,</mo><mstyle scriptlevel="0"><mspace width="2em"/></mstyle><mi>t</mi><mo>=</mo><mfrac><mrow><mo>−</mo><msub><mi>f</mi><mi>a</mi></msub></mrow><mrow><msub><mi>f</mi><mi>b</mi></msub><mo>−</mo><msub><mi>f</mi><mi>a</mi></msub></mrow></mfrac></math></mjx-assistive-mml></mjx-container><p>Burada <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.025ex;" xmlns="http://www.w3.org/2000/svg" width="0.817ex" height="1.441ex" role="img" focusable="false" viewBox="0 -626 361 637" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>t</mi></math></mjx-assistive-mml></mjx-container>, alanın sıfıra ulaştığı kenar üzerindeki oranı ifade eder. Kesişen bir kenarda <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.464ex;" xmlns="http://www.w3.org/2000/svg" width="2.143ex" height="2.059ex" role="img" focusable="false" viewBox="0 -705 947.1 910" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D453" d="M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(523,-150) scale(0.707)"><path data-c="1D44E" d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>f</mi><mi>a</mi></msub></math></mjx-assistive-mml></mjx-container> ve <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.464ex;" xmlns="http://www.w3.org/2000/svg" width="1.983ex" height="2.059ex" role="img" focusable="false" viewBox="0 -705 876.3 910" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><path data-c="1D453" d="M118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(523,-150) scale(0.707)"><path data-c="1D44F" d="M73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>f</mi><mi>b</mi></msub></math></mjx-assistive-mml></mjx-container> zıt işaretlere sahip olduğundan, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.025ex;" xmlns="http://www.w3.org/2000/svg" width="0.817ex" height="1.441ex" role="img" focusable="false" viewBox="0 -626 361 637" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D461" d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>t</mi></math></mjx-assistive-mml></mjx-container> her zaman <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="4.526ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 2000.7 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="5B" d="M118 -250V750H255V710H158V-210H255V-250H118Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(278,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(778,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(1222.7,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1722.7,0)"><path data-c="5D" d="M22 710V750H159V-250H22V-210H119V710H22Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo stretchy="false">[</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo stretchy="false">]</mo></math></mjx-assistive-mml></mjx-container> aralığında kalır. Bunu aynı anda dört etkin 64 küplük chunk üzerinde çalıştırdık ve kare başına yeniden mesh oluşturma ile animasyonlu SDF düzenlemelerini test ettik.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/12-webgpu-marching-cubes/" title="Spike 12 WebGPU Marching Cubes" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/12-webgpu-marching-cubes/" target="_blank">Spike 12'yi yeni bir sekmede açın ↗</a> · <a href="/tr/blog/spike-source?spike=12-webgpu-marching-cubes">Kaynak kodunu görüntüleyin</a></p>
<p>İlk kazanım, compute işlem hattının kendisine duyduğumuz güvendi. Tek bir dispatch çağrısı; CPU'ya hiçbir veri geri okumadan SDF'yi değerlendirebiliyor, hücreleri sınıflandırabiliyor ve köşe noktalarını bir GPU tamponuna yazabiliyordu. İkinci kazanım ise “çalışıyor” aşamasından görsel bozulma avına ne kadar hızlı geçildiğini keşfetmekti. Eksik üçgenler nadiren marching cubes kuramıyla ilgili bir sorundan kaynaklanıyordu. Genellikle tablo indeksi uyuşmazlıkları, etkin köşe noktası sayısının ötesini okuyan hatalı çizim aralıkları veya komşu SDF örneklerinin bulunmadığı chunk sınırlarına yakın uç durum etkileşimleriydi.</p>
<p>Bu spike, bizi bölgeler hâlinde düşünmeye zorladı. Kameranın yakınında, oyuncuların araziyi oyabilmesi, kazabilmesi ve mağaraları görebilmesi için hacimsel özgürlük istersiniz. Kameradan uzakta ise düz bir yükseklik haritasının daha ucuz ve tamamen yeterli olduğu clipmap verimliliğini istersiniz. Bu ikilik, Spike 13'ten itibaren geliştirmeyi sürdürdüğümüz mimarinin omurgası hâline geldi.</p>
<p>En sevdiğim hata ayıklama anlarından biri, düzenlemeler çalışırken tel kafes görünümünü açıp kapatmaktı. Topolojinin gerçek zamanlı olarak oluşup çözülmesini izlemek, kalite ödünlerini anında görünür kılıyordu. Köşe noktası yoğunluğunun nerede yeterli olduğunu, nerede fazla seyrekleştiğini ve LOD geçişlerinde çatlakları önlemek için tam olarak nerede Transvoxel desteğine ihtiyaç duyulacağını görebiliyordunuz.</p>
<ol start="8">
<li>bölümde entegrasyon zorluğunu ele alıyoruz. Ham, compute güdümlü mesh'leri ve Three.js sahne grafiği mantığını tek ve kararlı bir render işlem hattında bir arada tutmak, bağımsız demonun düşündürdüğünden daha zordu.</li>
</ol>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>Marching cubes.</strong> 3B bir skaler alandan üçgen ağı çıkarmaya yarayan bir algoritmadır (Lorensen ve Cline, 1987). Düzenli bir 3B ızgaradaki her hücre, alanın 8 köşesinde örneklenmesiyle sınıflandırılır. İşaret örüntüsü bir durum indeksi (0-255) üretir ve bir arama tablosu her durumu bir üçgen kümesiyle eşler. Köşe noktaları, iki köşe arasında enterpolasyon yapılarak ızgara kenarlarına yerleştirilir. Her hücre bağımsız olarak işlendiğinden algoritma son derece paraleldir ve bu da onu GPU hesaplamaları için ideal kılar. <a href="/tr/guides/landscape-generation-browser.html#signed-distance-fields-sdfs">SDF'ler ve marching cubes hakkındaki arazi rehberimize</a> göz atın.</p>
<p><strong>İşaretli Uzaklık Alanları (SDF'ler).</strong> 3B uzaydaki her noktada en yakın yüzeye olan işaretli uzaklığı saklayan hacimsel bir temsildir. Pozitif değerler dışarıyı, negatif değerler içeriyi belirtir; sıfır geçişi ise yüzeyi oluşturur. SDF'ler, yükseklik haritalarının ifade edemediği mağaralar, kemerler, çıkıntılar ve havada duran geometriler gibi herhangi bir 3B şekli temsil edebilir. Düzenleme, alan üzerinde doğal küme cebiriyle yapılır. Malzeme ekleme (iki şeklin birleşimi) <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="15.06ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 6656.3 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(797.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1853.6,0)"><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(833,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(1111,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(3520.6,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(3909.6,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(553,-150) scale(0.707)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(4866.1,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(5310.8,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(553,-150) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(6267.3,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>d</mi><mo>=</mo><mo data-mjx-texclass="OP" movablelimits="true">min</mo><mo stretchy="false">(</mo><msub><mi>d</mi><mn>1</mn></msub><mo>,</mo><msub><mi>d</mi><mn>2</mn></msub><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container>, çıkarma (kazma) işlemi oyma şeklinin işareti ters çevrilerek <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.566ex;" xmlns="http://www.w3.org/2000/svg" width="17.259ex" height="2.262ex" role="img" focusable="false" viewBox="0 -750 7628.3 1000" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(797.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1853.6,0)"><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(833,0)" style="stroke-width: 3;"/><path data-c="78" d="M201 0Q189 3 102 3Q26 3 17 0H11V46H25Q48 47 67 52T96 61T121 78T139 96T160 122T180 150L226 210L168 288Q159 301 149 315T133 336T122 351T113 363T107 370T100 376T94 379T88 381T80 383Q74 383 44 385H16V431H23Q59 429 126 429Q219 429 229 431H237V385Q201 381 201 369Q201 367 211 353T239 315T268 274L272 270L297 304Q329 345 329 358Q329 364 327 369T322 376T317 380T310 384L307 385H302V431H309Q324 428 408 428Q487 428 493 431H499V385H492Q443 385 411 368Q394 360 377 341T312 257L296 236L358 151Q424 61 429 57T446 50Q464 46 499 46H516V0H510H502Q494 1 482 1T457 2T432 2T414 3Q403 3 377 3T327 1L304 0H295V46H298Q309 46 320 51T331 63Q331 65 291 120L250 175Q249 174 219 133T185 88Q181 83 181 74Q181 63 188 55T206 46Q208 46 208 23V0H201Z" transform="translate(1333,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(3714.6,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(4103.6,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(553,-150) scale(0.707)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(5060.1,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(5504.8,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(6282.8,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(553,-150) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(7239.3,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>d</mi><mo>=</mo><mo data-mjx-texclass="OP" movablelimits="true">max</mo><mo stretchy="false">(</mo><msub><mi>d</mi><mn>1</mn></msub><mo>,</mo><mo>−</mo><msub><mi>d</mi><mn>2</mn></msub><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container> biçimindedir; yumuşak bir harmanlama ise aşağıdaki gibi bir yumuşak minimum kullanır:</p>
<mjx-container tabindex="0" class="MathJax" jax="SVG" display="true" style="direction: ltr; display: block; text-align: center; margin: 1em 0; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -1.577ex;" xmlns="http://www.w3.org/2000/svg" width="64.842ex" height="4.993ex" role="img" focusable="false" viewBox="0 -1509.9 28660.1 2206.9" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" style="stroke-width: 3;"/><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(394,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(1227,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(1505,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2061,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(2450,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(553,-150) scale(0.707)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3406.6,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(3851.2,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(553,-150) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(4807.8,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(5252.4,0)"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(5773.4,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(6440.2,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(7496,0)"><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(833,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(1111,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(9163,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(9552,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(553,-150) scale(0.707)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(10508.5,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(10953.2,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(553,-150) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(11909.8,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(12521,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mfrac" transform="translate(13521.2,0)"><g data-mml-node="msup" transform="translate(224.2,676)"><g data-mml-node="mi"><path data-c="210E" d="M137 683Q138 683 209 688T282 694Q294 694 294 685Q294 674 258 534Q220 386 220 383Q220 381 227 388Q288 442 357 442Q411 442 444 415T478 336Q478 285 440 178T402 50Q403 36 407 31T422 26Q450 26 474 56T513 138Q516 149 519 151T535 153Q555 153 555 145Q555 144 551 130Q535 71 500 33Q466 -10 419 -10H414Q367 -10 346 17T325 74Q325 90 361 192T398 345Q398 404 354 404H349Q266 404 205 306L198 293L164 158Q132 28 127 16Q114 -11 83 -11Q69 -11 59 -2T48 16Q48 30 121 320L195 616Q195 629 188 632T149 637H128Q122 643 122 645T124 664Q129 683 137 683Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(609,363) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mrow" transform="translate(220,-686)"><g data-mml-node="mn"><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(500,0)"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g></g><rect width="1221" height="60" x="120" y="220"/></g><g data-mml-node="mo" transform="translate(14982.2,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(15260.2,0)"><g data-mml-node="mspace"/></g><g data-mml-node="mi" transform="translate(17426.9,0)"><path data-c="210E" d="M137 683Q138 683 209 688T282 694Q294 694 294 685Q294 674 258 534Q220 386 220 383Q220 381 227 388Q288 442 357 442Q411 442 444 415T478 336Q478 285 440 178T402 50Q403 36 407 31T422 26Q450 26 474 56T513 138Q516 149 519 151T535 153Q555 153 555 145Q555 144 551 130Q535 71 500 33Q466 -10 419 -10H414Q367 -10 346 17T325 74Q325 90 361 192T398 345Q398 404 354 404H349Q266 404 205 306L198 293L164 158Q132 28 127 16Q114 -11 83 -11Q69 -11 59 -2T48 16Q48 30 121 320L195 616Q195 629 188 632T149 637H128Q122 643 122 645T124 664Q129 683 137 683Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(18280.7,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(19336.4,0)"><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(833,0)" style="stroke-width: 3;"/><path data-c="78" d="M201 0Q189 3 102 3Q26 3 17 0H11V46H25Q48 47 67 52T96 61T121 78T139 96T160 122T180 150L226 210L168 288Q159 301 149 315T133 336T122 351T113 363T107 370T100 376T94 379T88 381T80 383Q74 383 44 385H16V431H23Q59 429 126 429Q219 429 229 431H237V385Q201 381 201 369Q201 367 211 353T239 315T268 274L272 270L297 304Q329 345 329 358Q329 364 327 369T322 376T317 380T310 384L307 385H302V431H309Q324 428 408 428Q487 428 493 431H499V385H492Q443 385 411 368Q394 360 377 341T312 257L296 236L358 151Q424 61 429 57T446 50Q464 46 499 46H516V0H510H502Q494 1 482 1T457 2T432 2T414 3Q403 3 377 3T327 1L304 0H295V46H298Q309 46 320 51T331 63Q331 65 291 120L250 175Q249 174 219 133T185 88Q181 83 181 74Q181 63 188 55T206 46Q208 46 208 23V0H201Z" transform="translate(1333,0)" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="OPEN" transform="translate(21197.4,0)"><g data-mml-node="mo" transform="translate(0 -0.5)"><path data-c="28" d="M152 251Q152 646 388 850H416Q422 844 422 841Q422 837 403 816T357 753T302 649T255 482T236 250Q236 124 255 19T301 -147T356 -251T403 -315T422 -340Q422 -343 416 -349H388Q359 -325 332 -296T271 -213T212 -97T170 56T152 251Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mi" transform="translate(21655.4,0)"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(22398.7,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(23398.9,0) translate(0 -0.5)"><path data-c="7C" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(23676.9,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(553,-150) scale(0.707)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(24855.7,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(25855.9,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(553,-150) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(26812.4,0) translate(0 -0.5)"><path data-c="7C" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(27090.4,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(27368.4,0)"><g data-mml-node="mspace"/></g><g data-mml-node="mn" transform="translate(27702.1,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" data-mjx-texclass="CLOSE" transform="translate(28202.1,0)"><g data-mml-node="mo" transform="translate(0 -0.5)"><path data-c="29" d="M305 251Q305 -145 69 -349H56Q43 -349 39 -347T35 -338Q37 -333 60 -307T108 -239T160 -136T204 27T221 250T204 473T160 636T108 740T60 807T35 839Q35 850 50 850H56H69Q197 743 256 566Q305 425 305 251Z" style="stroke-width: 3;"/></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="block" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; overflow: hidden; width: 100%;"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><mi>smin</mi><mo stretchy="false">(</mo><msub><mi>d</mi><mn>1</mn></msub><mo>,</mo><msub><mi>d</mi><mn>2</mn></msub><mo>,</mo><mi>k</mi><mo stretchy="false">)</mo><mo>=</mo><mo data-mjx-texclass="OP" movablelimits="true">min</mo><mo stretchy="false">(</mo><msub><mi>d</mi><mn>1</mn></msub><mo>,</mo><msub><mi>d</mi><mn>2</mn></msub><mo stretchy="false">)</mo><mo>−</mo><mfrac><msup><mi>h</mi><mn>2</mn></msup><mrow><mn>4</mn><mi>k</mi></mrow></mfrac><mo>,</mo><mstyle scriptlevel="0"><mspace width="2em"/></mstyle><mi>h</mi><mo>=</mo><mo data-mjx-texclass="OP" movablelimits="true">max</mo><mrow data-mjx-texclass="OPEN"><mo minsize="1.2em" maxsize="1.2em">(</mo></mrow><mi>k</mi><mo>−</mo><mo data-mjx-texclass="ORD" stretchy="false">|</mo><msub><mi>d</mi><mn>1</mn></msub><mo>−</mo><msub><mi>d</mi><mn>2</mn></msub><mo data-mjx-texclass="ORD" stretchy="false">|</mo><mo>,</mo><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><mn>0</mn><mrow data-mjx-texclass="CLOSE"><mo minsize="1.2em" maxsize="1.2em">)</mo></mrow></math></mjx-assistive-mml></mjx-container><p>Burada <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.025ex;" xmlns="http://www.w3.org/2000/svg" width="1.179ex" height="1.595ex" role="img" focusable="false" viewBox="0 -694 521 705" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>k</mi></math></mjx-assistive-mml></mjx-container>, harmanlama yarıçapını kontrol eder. <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.05ex;" xmlns="http://www.w3.org/2000/svg" width="5.829ex" height="1.62ex" role="img" focusable="false" viewBox="0 -694 2576.6 716" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D458" d="M121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(798.8,0)"><path data-c="2192" d="M56 237T56 250T70 270H835Q719 357 692 493Q692 494 692 496T691 499Q691 511 708 511H711Q720 511 723 510T729 506T732 497T735 481T743 456Q765 389 816 336T935 261Q944 258 944 250Q944 244 939 241T915 231T877 212Q836 186 806 152T761 85T740 35T732 4Q730 -6 727 -8T711 -11Q691 -11 691 0Q691 7 696 25Q728 151 835 230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2076.6,0)"><path data-c="30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>k</mi><mo accent="false" stretchy="false">→</mo><mn>0</mn></math></mjx-assistive-mml></mjx-container> olduğunda bu ifade yeniden katı bir <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="3.771ex" height="1.514ex" role="img" focusable="false" viewBox="0 -669 1667 669" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo"><path data-c="6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(833,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(1111,0)" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo data-mjx-texclass="OP" movablelimits="true">min</mo></math></mjx-assistive-mml></mjx-container> işlemine dönüşür. <a href="/tr/guides/landscape-generation-browser.html#signed-distance-fields-sdfs">SDF arazi temsiline</a> göz atın.</p>
<p><strong>WebGPU compute shader'ları.</strong> Rasterleştirme işlem hattına bağlı olmadan genel amaçlı hesaplama yapan GPU programlarıdır. Bir compute shader, paralel olarak çalışan iş parçacığı çalışma gruplarını yürütür. Marching cubes için her iş parçacığı tek bir ızgara hücresini işler: SDF'yi örnekler, hücreyi sınıflandırır, üçgenleştirmeyi arama tablosundan bulur, kenar köşe noktalarını enterpole eder ve atomik sayaçlar kullanarak bunları bir mesh tamponuna ekler. Çıktı tamponu render için doğrudan köşe noktası verisi olarak kullanıldığından CPU'ya veri geri okumak gerekmez. Will Usher'ın <a href="https://www.willusher.io/webgpu-marching-cubes/" target="_blank" rel="noreferrer">webgpu-marching-cubes</a> projesi, tarayıcıda gerçek zamanlı 256^3 ızgara işlemeyi gösterir. <a href="/tr/guides/landscape-generation-browser.html#gpu-driven-lod-with-webgpu">WebGPU güdümlü LOD hakkındaki arazi rehberimize</a> göz atın.</p>
<p><strong>Hibrit yükseklik haritası + SDF mimarisi.</strong> Tarayıcı tabanlı araziler için pratik yaklaşım şudur: yükseklik haritaları tüm dünyayı kaplarken (ucuz ve kompakt), SDF hacimleri yalnızca mağaralara, çıkıntılara veya içerik üreticilerinin oyduğu özelliklere ihtiyaç duyan chunk'larda (chunk'ların %5-10'u) bulunur. Kameranın yakınında hacimsel özgürlük, oyma işlemlerine ve mağaralara olanak tanır. Uzakta ise yükseklik haritaları, düz araziyi verimli biçimde sağlar. <a href="/tr/guides/landscape-generation-browser.html#hybrid-heightmap-base--volumetric-overlays">Hibrit arazi temsiline</a> göz atın.</p>
<hr>
<p>12 bölümün 7.'si.<br>
Önceki: <a href="/tr/blog/2026-02-25-open-world-browser-part-06-clipmaps.html">Bölüm 6 - Clipmap'ler gidişatı değiştirdi</a><br>
Sonraki: <a href="/tr/blog/2026-02-25-open-world-browser-part-08-webgpu-integration.html">Bölüm 8 - Temel çizgimizi kaybetmeden entegrasyon</a><br>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya oluşturmak, bölüm 8: Temel yapımızı kaybetmeden entegrasyon]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-08-webgpu-integration</link>
            <guid>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-08-webgpu-integration</guid>
            <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[13. ve 14. denemeler, özelliklerden çok süreç disipliniyle ilgiliydi. Temiz bir temel yapıyı sabitledik, ardından katmanları tek tek sağlamlaştırdık.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-olusturmak-bolum-8-temel-yapımızı-kaybetmeden-entegrasyon" tabindex="-1">Tarayıcıda açık dünya oluşturmak, bölüm 8: Temel yapımızı kaybetmeden entegrasyon <a class="header-anchor" href="#tarayıcıda-acık-dunya-olusturmak-bolum-8-temel-yapımızı-kaybetmeden-entegrasyon" aria-label="Permalink to &quot;Tarayıcıda açık dünya oluşturmak, bölüm 8: Temel yapımızı kaybetmeden entegrasyon&quot;"></a></h1>
<p><em>Yazan: <a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Rehber, denemenin ne olduğunu açıklıyor ve tüm bölümlere bağlantılar sunuyor.</p>
<p>Entegrasyon, projelerin karmaşık hâle geldiği aşamadır. Tek başına çalışan parçalarınız vardır. Bunları birbirine bağladığınızda birdenbire her hata, kaynağı her yerde olabilecekmiş gibi görünür.</p>
<ol start="13">
<li>ve 14. denemeler, bu tuzağa verdiğimiz yanıttı. 13. denemede temiz bir Three.js WebGPU temel yapısı oluşturduk. Yalnızca bir işleyici, bir sahne, bir kamera ve basit bir ağ model vardı. Arazi, hesaplama veya efekt yoktu. Three.js'in WebGPU arka ucunun doğru şekilde başlatıldığını, işleme döngüsünün kararlı olduğunu ve TSL (Three.js Shading Language) düğüm malzemelerinin beklendiği gibi çalıştığını doğruladık. Ancak bu kontrol noktasını geçtikten sonra katman eklemeye başladık.</li>
</ol>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/13-threejs-webgpu/" title="13. Deneme: Three.js WebGPU Temel Yapısı" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/13-threejs-webgpu/" target="_blank">13. denemeyi yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=13-threejs-webgpu">Kaynak kodunu görüntüle</a></p>
<ol start="14">
<li>deneme, aşamalı sağlamlaştırma süreciydi. Her seferinde tek bir yetenek ekledik: önce kamera kontrollerini, ardından aydınlatmayı, sonra marching cubes işlem hattında hesaplamayla üretilen ağ modeli ve son olarak GPU çıktısını doğrudan Three.js geometri niteliklerine aktaran tampon bağlantılarını. Her eklemenin ardından önceki katmanın hâlâ doğru davrandığını doğruladık.</li>
</ol>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/14-threejs-webgpu-incremental/" title="14. Deneme: Aşamalı Sağlamlaştırma" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/14-threejs-webgpu-incremental/" target="_blank">14. denemeyi yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=14-threejs-webgpu-incremental">Kaynak kodunu görüntüle</a></p>
<p>Kulağa yavaş geliyor. Tam olarak bir gün boyunca yavaştı ve kısa süre sonra dikiş mantığı ile politika değiştirme karmaşıklaştığında bize birkaç gün kazandırdı.</p>
<p>Bu disiplini haklı çıkaran belirli hata kategorisi, kıl inceliğindeki bozulmalardı. Geometri bozulması gibi görünen ama aslında güncelliğini yitirmiş verilerden kaynaklanan ince parçacıklar. Hesaplama gölgelendiricisi bir tampona N köşe yazıyor, ancak çizim çağrısı hâlâ önceki kareden kalan N+M köşeyi işleyecek şekilde yapılandırılmış oluyordu. Bu fazladan köşeler, eski gönderimden kalan anlamsız veriler içeriyordu. Görsel sonuç, öngörülemez biçimde belirip kaybolan, titreşen ve jilet inceliğinde üçgenlerdi.</p>
<p>Bu tür bir hatayı sezgiyle yenemezsiniz. Son çalışan durum ile mevcut bozuk durum arasında tam olarak neyin değiştiğini bildiğiniz kontrollü farklarla yenebilirsiniz.</p>
<p>WebGPU entegrasyonu bize tampon yaşam döngüsü hakkında da çok şey öğretti. WebGPU'daki GPU tamponları, belirli bir kullanım için eşlendikten sonra değiştirilemez. Marching cubes çıktısı büyüdüğü için bir köşe tamponunu yeniden boyutlandırmanız gerekiyorsa yeni bir tampon oluşturmalı ve bağlamayı güncellemelisiniz. <code>realloc</code> yoktur. Bu yaşam döngüsünü doğru yönetmek ve eski tamponları yürütülmekte olan GPU işleriyle yarışa girmeden yok etmek, WebGL'de bulunmayan açık bariyer yönetimini gerektiriyordu.</p>
<ol start="9">
<li>bölümde Transvoxel dikiş çalışmalarına geçiyoruz. Bu bölüm bilinçli olarak bir iskeletle başlıyor. Bu noktaya geldiğimizde, entegrasyonu aceleye getirmenin gizemli sorunlar; kontrollü kurulumun ise hata ayıklanabilir problemler ürettiği dersini tamamen benimsemiştik.</li>
</ol>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>WebGPU.</strong> WebGL'in halefi olan ve hesaplama gölgelendiricileri ile dolaylı işleme aracılığıyla tarayıcıda düşük seviyeli GPU erişimi sağlayan teknoloji. WebGPU'nun açık dünyalar açısından kritik iki özelliği şunlardır: hesaplama gölgelendiricileri, arazi üretiminin, bitki örtüsü yerleştirmenin ve ayıklamanın GPU tarafında yapılmasını sağlar; dolaylı işleme ise GPU'nun hesaplama çıktısına göre neyi çizeceğine karar vermesine olanak tanıyarak yoğun sahnelerdeki CPU darboğazlarını ortadan kaldırır. Masaüstünde Chrome, Edge ve Firefox'ta kullanılabilir. Bkz. <a href="/tr/guides/browser-3d-open-world-tech.html#webgpu-the-performance-unlock">Performans kilidini açan WebGPU</a>.</p>
<p><strong>Three.js Shading Language (TSL).</strong> Ham GLSL/WGSL'nin yerine birleştirilebilir JavaScript ifadeleri kullanan, Three.js'in düğüm tabanlı gölgelendirici sistemi. <code>texture()</code>, <code>positionWorld</code>, <code>smoothstep()</code> ve <code>fog()</code> gibi TSL düğümleri, çalışma zamanında uygun arka uç için (WebGL GLSL veya WebGPU WGSL) derlenen bir gölgelendirici grafiği oluşturur. TSL, malzeme mantığını bir kez yazıp her iki işleyiciyi de hedeflemeyi mümkün kılar. Düğüm grafiği her karede değerlendirilir; dolayısıyla dinamik uniform değişkenler ve koşullu dallanma doğal biçimde çalışır.</p>
<p><strong>WebGPU'da GPU tamponu yaşam döngüsü.</strong> WebGPU tamponları belirli kullanım bayraklarıyla (<code>VERTEX</code>, <code>STORAGE</code>, <code>COPY_DST</code> vb.) oluşturulur ve oluşturulduktan sonra yeniden boyutlandırılamaz. Bir marching cubes gönderimi tamponun kapasitesinden daha fazla köşe üretirse yeni bir tampon oluşturmanız, bağlamayı güncellemeniz ve eskisini yok etmeniz gerekir. Yürütülmekte olan bir GPU komutunun hâlâ başvurduğu tamponu yok etmek hatalara neden olur. Açık bariyer yönetimi (<code>device.queue.onSubmittedWorkDone()</code> aracılığıyla), eski tamponun GPU tarafından kullanımı tamamlanmadan yok edilmemesini sağlar. Sürücünün belleği örtük olarak yönettiği WebGL'de böyle bir yaşam döngüsü disiplini yoktur.</p>
<p><strong>Aşamalı sağlamlaştırma.</strong> Entegrasyona yönelik bir süreç disiplini: çalıştığı bilinen bir temel yapı oluşturun, her seferinde tek bir yetenek ekleyin ve her eklemeden sonra önceki katmanın hâlâ çalıştığını doğrulayın. Bu yaklaşım bir günlüğüne daha yavaştır, ancak sonraki hata ayıklama çalışmalarında günler kazandırır; çünkü her gerileme belirli ve kontrollü bir değişikliğe kadar izlenebilir. Önce temel yapı, ardından aşamalı ekleme yaklaşımı; riski yönetmek amacıyla sistemlerin belirli bir sırayla entegre edildiği <a href="/tr/guides/browser-3d-open-world-tech.html#what-we-d-build-first">AAA açık dünya geliştirme</a> süreçlerinde yaygındır.</p>
<hr>
<p>12 bölümün 8. bölümü.<br>
Önceki: <a href="/tr/blog/2026-02-25-open-world-browser-part-07-marching-cubes.html">Bölüm 7 - Marching cubes ve ilk gerçek mağaralar</a><br>
Sonraki: <a href="/tr/blog/2026-02-25-open-world-browser-part-09-transvoxel-first-cut.html">Bölüm 9 - Transvoxel bir iskeletle başladı</a><br>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya inşa etmek, bölüm 9: Transvoxel bir iskeletle başladı]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-09-transvoxel-first-cut</link>
            <guid>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-09-transvoxel-first-cut</guid>
            <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Doğrudan eksiksiz dikiş kapsamına geçmedik. Önce bir dikiş test düzeneği kurduk, ardından referans verilerle tek bir yüzü doğruladık.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-insa-etmek-bolum-9-transvoxel-bir-iskeletle-basladı" tabindex="-1">Tarayıcıda açık dünya inşa etmek, bölüm 9: Transvoxel bir iskeletle başladı <a class="header-anchor" href="#tarayıcıda-acık-dunya-insa-etmek-bolum-9-transvoxel-bir-iskeletle-basladı" aria-label="Permalink to &quot;Tarayıcıda açık dünya inşa etmek, bölüm 9: Transvoxel bir iskeletle başladı&quot;"></a></h1>
<p><em>Cinevva CTO'su ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Bu rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p>Dikişler, güvenin ölüp gittiği yerlerdir.</p>
<p>İki farklı çözünürlük buluşana kadar her şey kararlı görünebilir. LOD 0 seviyesindeki bir chunk, LOD 1 seviyesindeki bir chunk'ın yanında durur. Mesh'leri birbirinden bağımsız olarak oluşturulur. Ortak sınırlarında, düşük çözünürlüklü chunk'ın grid yoğunluğu yarı yarıya olduğu için vertex konumları eşleşmez. Sonuçta görünür çatlaklar, T-bağlantıları ve titreyen kenarlar ortaya çıkar.</p>
<p>Transvoxel algoritması, farklı çözünürlüklerdeki iki chunk arasındaki sınır yüzü boyunca özel geçiş hücreleri oluşturarak bu sorunu çözer. Bu hücreler aynı anda hem yüksek hem de düşük çözünürlüklü grid'lerden örnek alır ve iki yüzeyi birbirine diken üçgenler üretir. Algoritma, standart marching cubes tablolarından ayrı kendi lookup tablolarını kullanır ve 512 geçiş hücresi vakası içerir.</p>
<p>Bu noktaya kadar yeterince entegrasyon yarası aldığımızdan, uygulamaya aceleyle girişmememiz gerektiğini biliyorduk.</p>
<p>Spike 15'in tek bir görevi vardı: algoritmanın tamamına dokunmadan önce güvenebileceğimiz bir dikiş test düzeneği kurmak. Bilinen SDF verilerine sahip, farklı çözünürlüklerdeki iki chunk'ın yan yana durduğu kontrollü bir ortam hazırladık. Ana mesh'i, dikiş mesh'ini, wireframe'i ve normalleri birbirinden bağımsız olarak açıp kapatmamızı sağlayan görselleştirme kontrolleri ekledik.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/15-transvoxel-seam/" title="Spike 15 Transvoxel Dikiş İskeleti" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/15-transvoxel-seam/" target="_blank">Spike 15'i yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=15-transvoxel-seam">Kaynak kodunu görüntüle</a></p>
<p>Test düzeneği kararlı hâle geldikten sonra Spike 16, tablo güdümlü geçiş hücresi üretimini tek bir yüz üzerinde doğruladı. Eksenlere hizalı tek bir yüzü (+X sınırı) seçtik, geçiş hücresi değerlendirmesini yalnızca bu yüz için uyguladık ve çıktıyı Transvoxel makalesindeki referans verilerle karşılaştırdık.</p>
<p><a href="/tr/spikes/16-transvoxel-face/" target="_blank">Spike 16'yı yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=16-transvoxel-face">Kaynak kodunu görüntüle</a></p>
<p>Her seferinde tek bir yüzü özellikle test ettik, çünkü geçiş tablolarının bağlanmasında birbirinden bağımsız pek çok hata türü bulunur. Vaka indeksinin hesaplanması, her iki grid'den de doğru vertex'lerin örneklenmesine bağlıdır. Geçiş hücresi içindeki vertex indeksleme, standart marching cubes hücrelerinden farklı bir numaralandırma düzeni kullanır. Sarım sırası ana mesh ile tutarlı olmalıdır; aksi takdirde arka yüz ayıklama, dikiş üçgenlerinizi yok eder. Altı yüzün tamamını aynı anda test ederseniz her belirti rastgele görünür. Tek bir yüzü kapsamlı biçimde test ederseniz anlamlı ve hata ayıklanabilir sorunlar elde edersiniz.</p>
<p>Bu aşamada elde ettiğimiz daha incelikli bir başka kazanım da araçlara yaptığımız yatırımdı. Görünürlük anahtarlarını, yalnızca dikişi gösteren render modunu ve renk kodlu LOD göstergelerini erkenden geliştirdik. O sırada bu kontroller gereksiz yük gibi gelmişti. Daha sonra köşe vakaları çirkinleştiğinde, tam olarak hangi dikiş hücrelerinin hatalı davrandığını izole edebilmemizi sağlayarak kendilerini defalarca amorti ettiler.</p>
<p>Bu bölümün sonunda “dikişleri tamamlamış” değildik. Ancak dikiş hatalarından korkmak yerine onlar hakkında akıl yürütebileceğimiz bir noktaya gelmiştik.</p>
<ol start="10">
<li>bölümde asıl hız treni başlıyor. Karma LOD köşeleri, tersine dönen sarım yönleri, kısmi fazla çizim hayaletleri ve algoritmanın hatalı olduğundan emin olduğunuz hâlde hatanın aslında etkin vertex sayısının ötesini okuyan bir çizim aralığından kaynaklandığını keşfettiğiniz o anlar.</li>
</ol>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>Transvoxel algoritması.</strong> Eric Lengyel tarafından tasarlanan (<a href="https://transvoxel.org/" target="_blank" rel="noreferrer">transvoxel.org</a>) Transvoxel, hacimsel arazi LOD'undaki en zor sorunu çözer: farklı çözünürlüklerdeki chunk'lar arasındaki dikişler. Yüksek çözünürlüklü bir chunk, düşük çözünürlüklü bir chunk'ın yanında yer aldığında marching cubes mesh'leri sınırda hizalanmaz ve görünür çatlaklar oluşturur. Transvoxel, sınır yüzleri boyunca her iki tarafla da eşleşen ek üçgenlerle çözünürlük farkını kapatan özel geçiş hücreleri ekler. Algoritma, 73 eşdeğerlik sınıfına indirgenen 512 geçiş hücresi vakası için standart marching cubes tablolarından ayrı kendi lookup tablolarını kullanır. Patent kısıtlaması yoktur ve yayımlanmış oyunlarda (Space Engineers, Astroneer) kullanılmıştır. <a href="/tr/guides/landscape-generation-browser.html#the-transvoxel-algorithm">Transvoxel hakkındaki arazi rehberimize</a> bakın.</p>
<p><strong>Geçiş hücreleri.</strong> İki LOD seviyesi arasındaki yüzde oluşturulan özel hücrelerdir. Tek bir grid'den 8 köşe örnekleyen standart marching cubes hücrelerinin aksine geçiş hücreleri, yüksek ve düşük çözünürlüklü grid'lerin ikisinden de aynı anda örnek alır. Yüksek çözünürlüklü yüzde <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="9.176ex" height="1.692ex" role="img" focusable="false" viewBox="0 -666 4056 748" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(722.2,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(1722.4,0)"><path data-c="33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2500.2,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(3556,0)"><path data-c="39" d="M352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>3</mn><mo>×</mo><mn>3</mn><mo>=</mo><mn>9</mn></math></mjx-assistive-mml></mjx-container> örnek noktası, düşük çözünürlüklü yüzde ise <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="9.176ex" height="1.717ex" role="img" focusable="false" viewBox="0 -677 4056 759" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(722.2,0)"><path data-c="D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(1722.4,0)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2500.2,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(3556,0)"><path data-c="34" d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>2</mn><mo>×</mo><mn>2</mn><mo>=</mo><mn>4</mn></math></mjx-assistive-mml></mjx-container> örnek noktası bulunur. Bu 9 örnek, algoritmaya <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.186ex;" xmlns="http://www.w3.org/2000/svg" width="8.53ex" height="2.072ex" role="img" focusable="false" viewBox="0 -833.9 3770.1 915.9" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msup"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(533,363) scale(0.707)"><path data-c="39" d="M352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1214.3,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2270.1,0)"><path data-c="35" d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" style="stroke-width: 3;"/><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" transform="translate(1000,0)" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mn>2</mn><mn>9</mn></msup><mo>=</mo><mn>512</mn></math></mjx-assistive-mml></mjx-container> ham vaka kazandırır; rotasyonlar ve yansımalar elendiğinde bunlar 73 farklı üçgenlemeye indirgenir. Hücre sınıflandırması ve üçgenleme, her iki çözünürlükteki vertex'leri birbirine bağlayan üçgenler üreten özel tablolar kullanır. Vertex numaralandırma düzeni standart MC hücrelerinden farklıdır ve bu, yaygın bir uygulama hatası kaynağıdır.</p>
<p><strong>LOD geçiş dikişleri.</strong> Topoloji uyuşmazlığının görsel bozukluklara yol açtığı, iki mesh çözünürlüğü arasındaki sınırdır. Dikiş uygulanmadığında, LOD 1 seviyesindeki bir chunk'ın (2 m grid) yanındaki LOD 0 seviyesinde bir chunk (1 m grid) T-bağlantıları üretir: ince mesh'in sınır boyunca kaba mesh tarafından paylaşılmayan vertex'leri vardır ve bu da ışığın sızdığı çatlaklara neden olur. Transvoxel, geomorphing ve etek geometrisi bu dikişleri düzeltmeye yönelik üç yaklaşımdır. Geomorphing yalnızca yükseklik haritalarında çalıştığı için hacimsel arazide standart çözüm Transvoxel'dir. <a href="/tr/guides/landscape-generation-browser.html#lod-for-volumetric-terrain">Hacimsel arazi için LOD</a> bölümüne bakın.</p>
<hr>
<p>12 bölümün 9. bölümü.<br>
Önceki: <a href="/tr/blog/2026-02-25-open-world-browser-part-08-webgpu-integration.html">Bölüm 8 - Temel sürümümüzü kaybetmeden entegrasyon</a><br>
Sonraki: <a href="/tr/blog/2026-02-25-open-world-browser-part-10-seam-chaos.html">Bölüm 10 - Dikiş kaosu ve köşe bölüm sonu canavarı</a><br>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya inşa etmek, bölüm 10: Dikiş kaosu ve köşe bölümündeki boss savaşı]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-10-seam-chaos</link>
            <guid>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-10-seam-chaos</guid>
            <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[17'den 22'ye kadar olan Spike'larda teori, uç durumlarla karşılaştı. Sarım hatalarının, eksik üçgenlerin, hayalet geometrilerin ve hibrit geri dönüş mantığının peşine düştük.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-insa-etmek-bolum-10-dikis-kaosu-ve-kose-bolumundeki-boss-savası" tabindex="-1">Tarayıcıda açık dünya inşa etmek, bölüm 10: Dikiş kaosu ve köşe bölümündeki boss savaşı <a class="header-anchor" href="#tarayıcıda-acık-dunya-insa-etmek-bolum-10-dikis-kaosu-ve-kose-bolumundeki-boss-savası" aria-label="Permalink to &quot;Tarayıcıda açık dünya inşa etmek, bölüm 10: Dikiş kaosu ve köşe bölümündeki boss savaşı&quot;"></a></h1>
<p><em>Cinevva CTO'su ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Rehber, Spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantılar içeriyor.</p>
<p>Önceki bölümler yöntemli geldiyse bu bölüm tam anlamıyla bir mücadeleydi.</p>
<p>17'den 22'ye kadar olan Spike'lar, uç durumlar dönemimizdi. Aynı anda iki LOD kullanan marching cubes, yükseklik haritası ile MC sınırları arasındaki dikişler, üç veya dört LOD seviyesinin buluştuğu farklı çözünürlüklü köşe chunk'ları, GPU'da dikiş üretimi ve geri dönüş modu davranışları. Her Spike, karşılaştığımız veya karşılaşmayı beklediğimiz belirli bir hata senaryosunu ele aldı.</p>
<p>Spike 17, iki LOD seviyesi aynı anda etkinken çift LOD'lu marching cubes yaklaşımını test etti. Zorluk, tek bir chunk'ın farklı yüzlerindeki komşularının farklı çözünürlüklerde olabilmesiydi. Spike 16'daki geçiş hücresi mantığı tek seferde bir yüz için çalışıyordu ancak bir chunk birden fazla yüzünde geçiş hücrelerine ihtiyaç duyduğunda vertex buffer yönetimi karmaşıklaşıyordu. Her yüzün geçiş hücrelerinin, diğerlerinin üzerine yazılmadan üretilip buffer'a eklenmesi gerekiyordu.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/19-transvoxel-corner-grid/" title="Spike 19 Köşe Grid'i Transvoxel" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/19-transvoxel-corner-grid/" target="_blank">Spike 19'u yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=19-transvoxel-corner-grid">Kaynak kodunu görüntüle</a></p>
<p>Tekrar tekrar karşımıza çıkan ilk kötü karakter sarım sırasıydı. Birkaç kez topoloji sorunları yaşadığımızı düşündük ama aslında bunların yönlendirme sorunları olduğunu keşfettik. Sarım, ana mesh'e göre ters olduğu için arka yüz ayıklama geçerli dikiş üçgenlerini yok ediyordu. Kök neden aynıydı, ancak görsel belirti kamera açısına göre değişiyordu. Çözüm, geçiş hücresi üretim kodunda tutarlı bir sarım kuralını zorunlu kılmak ve bunu çift taraflı materyal geçişiyle doğrulamaktı.</p>
<p>İkinci kötü karakter, kısmi doğruluğun verdiği sahte güvendi. Bir dikiş belirli bir kamera açısından kusursuz görünebilir, ancak yüksek ve düşük çözünürlüklü chunk'lar arasındaki LOD rolleri değiştiğinde bozulabilirdi. Geçiş hücresi asimetriktir. Yüksek çözünürlüklü ve düşük çözünürlüklü taraflardan farklı biçimlerde örnek alır. Bir yapılandırmada “hangi taraf yüksek çözünürlüklü” mantığını ters kurarsanız hatayı yalnızca kamera belirli bir konuma geldiğinde görürsünüz.</p>
<p>Ardından en sevdiğimiz toparlanma anlarından biri geldi. Yükseklik haritası karolarındaki dikişin kesilmesi artefaktını araştırıyor ve geçiş mantığını suçluyorduk. Bunun için iki gün harcadık. Asıl suçlu, önceki çizimden kalan eski geometrilerdi. Chunk daha düşük bir LOD'a geçtiğinde önceki frame'deki yüksek çözünürlüklü geometri hâlâ buffer'ın son kısmında duruyordu. Çizim aralığı ise hâlâ eski ve daha yüksek vertex sayısına ayarlıydı. Çizim aralığını compute shader'ın atomik sayacının bildirdiği etkin vertex sayısıyla sınırlandırınca “gizemli dikiş sorunu” ortadan kayboldu.</p>
<p>Bu, render hatalarının çoğu zaman mesh üretim hataları gibi göründüğünü hatırlatan harika bir örnekti. Geometri başından beri doğruydu. Draw call yalnızca geçerli verilerin sonunu aşarak okuma yapıyordu.</p>
<p>Spike 22'ye geldiğimizde, chunk'ların belirli koşullar altında marching cubes'tan yükseklik haritası moduna geçebildiği hibrit geri dönüş yaklaşımını test ediyorduk. Örneğin chunk'ın hacimsel düzenleme içermemesi ve kameradan yeterince uzakta olması bu koşullar arasındaydı. Bu yaklaşım bize ya hep ya hiç politikasından daha uygulanabilir bir yol sundu. Yakın alandaki düzenlenmiş chunk'lar hacimsel özgürlük için MC kullanırken uzak alandaki düzenlenmemiş chunk'lar verimlilik için yükseklik haritalarını kullanıyordu.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/22-gpu-mc-heightmap-fallback/" title="Spike 22 MC Yükseklik Haritası Geri Dönüşü" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/22-gpu-mc-heightmap-fallback/" target="_blank">Spike 22'yi yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=22-gpu-mc-heightmap-fallback">Kaynak kodunu görüntüle</a></p>
<p>Bu bölüm, hız treninin dik düşüşü gibiydi. Aynı anda hem sinir bozucu hem de üretkendi. Tek tek düzeltmelerin çoğu küçüktü; bazen yalnızca bir karşılaştırma operatörünü veya offset'i değiştiren tek bir satırdan ibaretti. Ancak LOD geçişlerinin, buffer yönetiminin ve çizim aralıklarının nasıl etkileşime girdiğine dair kazandırdıkları anlayış hiç de küçük değildi.</p>
<ol start="11">
<li>bölümde kaosun ardından gelen kararlılık katmanını ele alıyoruz: politika tabanlı chunk modları ve tepkisel hata düzeltmeden açık sistem kurallarına geçiş.</li>
</ol>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>Çift LOD'lu marching cubes.</strong> Marching cubes algoritmasının, sınırı birleştiren geçiş hücreleriyle birlikte iki çözünürlük seviyesinde eşzamanlı çalıştırılmasıdır. Buradaki zorluk, tek bir chunk'ın farklı yüzlerindeki komşularının farklı çözünürlüklerde olabilmesi ve bu nedenle her yüz için bağımsız geçiş hücresi üretimi gerekmesidir. Her yüzün geçiş hücreleri, diğerlerinin üzerine yazılmadan vertex buffer'a eklenir. Atomik sayaçlar, tüm yüzlerdeki toplam etkin vertex sayısını izler.</p>
<p><strong>Sarım sırası.</strong> Her üçgendeki vertex sırası, hangi tarafın “ön” yüz olduğunu belirler. Arka yüz ayıklamanın çalışması için tutarlı bir sarım gerekir; dışarıdan bakıldığında bu genellikle saat yönünün tersidir. Geçiş hücreleri üçgen üretirken sarımın ana mesh'in kuralıyla eşleşmesi gerekir. Sarımın ters olması, arka yüz ayıklamanın geçerli dikiş üçgenlerini yok etmesine neden olur ve bu da belirli kamera açılarından eksik yüzeyler gibi görünür. Yaygın bir hata ayıklama tekniği, artefaktların sarım sorunundan mı yoksa gerçek topoloji boşluklarından mı kaynaklandığını doğrulamak için materyalde <code>side: THREE.DoubleSide</code> ayarını açıp kapatmaktır.</p>
<p><strong>Yükseklik haritasından MC'ye geri dönüş.</strong> Uzaktaki veya düzenlenmemiş chunk'ların yükseklik haritası arazisini (ucuz, düz yüzey), yakındaki veya düzenlenmiş chunk'ların ise marching cubes yaklaşımını (hacimsel, mağaraları destekler) kullandığı hibrit bir chunk modudur. Geri dönüş kararı, kameraya olan mesafeye ve chunk'ın SDF düzenlemeleri içerip içermediğine bağlıdır. Bir yükseklik haritası chunk'ı ile MC chunk'ı arasındaki dikiş, kendine ait bir geçiş geometrisi gerektirir. Bu, Transvoxel'e benzer ancak iki LOD seviyesinden ziyade iki farklı gösterim arasında köprü kurar. Bkz. <a href="/tr/guides/landscape-generation-browser.html#hybrid-heightmap-base--volumetric-overlays">hibrit yükseklik haritası + hacimsel katmanlar</a>.</p>
<p><strong>Çizim aralığı ve atomik sayaçlar.</strong> GPU güdümlü mesh üretiminde compute shader, vertex'leri bir buffer'a yazar ve kaç vertex üretildiğini izlemek için atomik bir sayacı artırır. Draw call, vertex sayısı olarak buffer kapasitesini değil bu sayacı kullanmalıdır. Çizim aralığı etkin sayıyla sınırlandırılmazsa önceki frame'lerden kalan eski vertex'ler —hâlâ buffer'ın son kısmında duran veriler— hayalet geometri üretir: topoloji hataları gibi görünen ancak aslında geçerli verilerin sonunu aşan okumalardan kaynaklanan ince parçalar ve titreyen üçgenler.</p>
<hr>
<p>12 bölümün 10. bölümü.<br>
Önceki: <a href="/tr/blog/2026-02-25-open-world-browser-part-09-transvoxel-first-cut.html">Bölüm 9 - Transvoxel bir iskeletle başladı</a><br>
Sonraki: <a href="/tr/blog/2026-02-25-open-world-browser-part-11-policy-modes.html">Bölüm 11 - Sabit kodlanmış mod değil, politika modu</a><br>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya oluşturmak, bölüm 11: Sabit kodlanmış mod değil, politika modu]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-11-policy-modes</link>
            <guid>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-11-policy-modes</guid>
            <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spike 23 bizi tepkisel düzeltmelerden açık politikalara taşıdı. Mesafeye dayalı LOD, düzenlemeye dayalı HM/MC geçişi ve daha iyi dikiş hata ayıklama kontrolleri.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-olusturmak-bolum-11-sabit-kodlanmıs-mod-degil-politika-modu" tabindex="-1">Tarayıcıda açık dünya oluşturmak, bölüm 11: Sabit kodlanmış mod değil, politika modu <a class="header-anchor" href="#tarayıcıda-acık-dunya-olusturmak-bolum-11-sabit-kodlanmıs-mod-degil-politika-modu" aria-label="Permalink to &quot;Tarayıcıda açık dünya oluşturmak, bölüm 11: Sabit kodlanmış mod değil, politika modu&quot;"></a></h1>
<p><em>Yazan: <a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberine</a> göz atın. Bu rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p>Dikiş kaosu bölümünden sonra tepki vermeyi bırakıp sistemi yönetmeye başlamamız gerekiyordu.</p>
<p>Spike 23, geçici davranışların yerine açık politika kuralları getirdi. Chunk'lar artık yerel durumlarının önerdiği her şeyi yapmak yerine merkezi bir politika sisteminin verdiği kararlara uyuyordu. Bu chunk hangi LOD seviyesini alacak? Yükseklik haritası olarak mı yoksa marching cubes ile mi render edilecek? Geçiş hücrelerine ihtiyacı var mı, varsa hangi yüzlerde? Yanıtlar; kameraya olan mesafeyi, düzenleme geçmişini ve komşu çözünürlük durumlarını değerlendiren bir politika fonksiyonundan geliyordu.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/23-policy-chunk-modes/" title="Spike 23 Chunk Politika Modları" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/23-policy-chunk-modes/" target="_blank">Spike 23'ü yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=23-policy-chunk-modes">Kaynak kodunu görüntüle</a></p>
<p>Mesafeye dayalı LOD ataması, clipmap kavramına benzer biçimde kamera etrafındaki eş merkezli halkaları kullanıyor, ancak bunu chunk ızgarasına uyguluyordu. Halka 0'daki chunk'lar tam çözünürlüklü MC alır. Halka 1, yarı çözünürlüklü MC alır. Halka 2 ve ötesi ise yükseklik haritası modunu kullanır. Komşuluk kısıtı kritik öneme sahipti: komşu herhangi iki chunk için <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.666ex;" xmlns="http://www.w3.org/2000/svg" width="12.84ex" height="2.361ex" role="img" focusable="false" viewBox="0 -749.5 5675.3 1043.7" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo" transform="translate(0 -0.5)"><path data-c="7C" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(278,0)"><g data-mml-node="mi"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(714,-150) scale(0.707)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1508.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(2508.4,0)"><g data-mml-node="mi"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(714,-150) scale(0.707)"><path data-c="1D457" d="M297 596Q297 627 318 644T361 661Q378 661 389 651T403 623Q403 595 384 576T340 557Q322 557 310 567T297 596ZM288 376Q288 405 262 405Q240 405 220 393T185 362T161 325T144 293L137 279Q135 278 121 278H107Q101 284 101 286T105 299Q126 348 164 391T252 441Q253 441 260 441T272 442Q296 441 316 432Q341 418 354 401T367 348V332L318 133Q267 -67 264 -75Q246 -125 194 -164T75 -204Q25 -204 7 -183T-12 -137Q-12 -110 7 -91T53 -71Q70 -71 82 -81T95 -112Q95 -148 63 -167Q69 -168 77 -168Q111 -168 139 -140T182 -74L193 -32Q204 11 219 72T251 197T278 308T289 365Q289 372 288 376Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3563.7,0) translate(0 -0.5)"><path data-c="7C" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4119.5,0)"><path data-c="2264" d="M674 636Q682 636 688 630T694 615T687 601Q686 600 417 472L151 346L399 228Q687 92 691 87Q694 81 694 76Q694 58 676 56H670L382 192Q92 329 90 331Q83 336 83 348Q84 359 96 365Q104 369 382 500T665 634Q669 636 674 636ZM84 -118Q84 -108 99 -98H678Q694 -104 694 -118Q694 -130 679 -138H98Q84 -131 84 -118Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(5175.3,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo data-mjx-texclass="ORD" stretchy="false">|</mo><msub><mi>L</mi><mi>i</mi></msub><mo>−</mo><msub><mi>L</mi><mi>j</mi></msub><mo data-mjx-texclass="ORD" stretchy="false">|</mo><mo>≤</mo><mn>1</mn></math></mjx-assistive-mml></mjx-container> koşulunu zorunlu tutuyoruz. Bir yüz boyunca çözünürlük oranı <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: 0;" xmlns="http://www.w3.org/2000/svg" width="6.754ex" height="2.02ex" role="img" focusable="false" viewBox="0 -893 2985.2 893" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msup"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="TeXAtom" transform="translate(533,363) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mo" transform="translate(0 -0.5)"><path data-c="7C" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(278,0)"><g data-mml-node="mi"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(714,-150) scale(0.707)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1286,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(2064,0)"><g data-mml-node="mi"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(714,-150) scale(0.707)"><path data-c="1D457" d="M297 596Q297 627 318 644T361 661Q378 661 389 651T403 623Q403 595 384 576T340 557Q322 557 310 567T297 596ZM288 376Q288 405 262 405Q240 405 220 393T185 362T161 325T144 293L137 279Q135 278 121 278H107Q101 284 101 286T105 299Q126 348 164 391T252 441Q253 441 260 441T272 442Q296 441 316 432Q341 418 354 401T367 348V332L318 133Q267 -67 264 -75Q246 -125 194 -164T75 -204Q25 -204 7 -183T-12 -137Q-12 -110 7 -91T53 -71Q70 -71 82 -81T95 -112Q95 -148 63 -167Q69 -168 77 -168Q111 -168 139 -140T182 -74L193 -32Q204 11 219 72T251 197T278 308T289 365Q289 372 288 376Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3119.3,0) translate(0 -0.5)"><path data-c="7C" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z" style="stroke-width: 3;"/></g></g></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mn>2</mn><mrow data-mjx-texclass="ORD"><mo data-mjx-texclass="ORD" stretchy="false">|</mo><msub><mi>L</mi><mi>i</mi></msub><mo>−</mo><msub><mi>L</mi><mi>j</mi></msub><mo data-mjx-texclass="ORD" stretchy="false">|</mo></mrow></msup></math></mjx-assistive-mml></mjx-container> değerindedir ve Transvoxel geçiş tabloları yalnızca 2:1 durumu (<mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.666ex;" xmlns="http://www.w3.org/2000/svg" width="12.84ex" height="2.361ex" role="img" focusable="false" viewBox="0 -749.5 5675.3 1043.7" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mo" transform="translate(0 -0.5)"><path data-c="7C" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(278,0)"><g data-mml-node="mi"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(714,-150) scale(0.707)"><path data-c="1D456" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(1508.2,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(2508.4,0)"><g data-mml-node="mi"><path data-c="1D43F" d="M228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(714,-150) scale(0.707)"><path data-c="1D457" d="M297 596Q297 627 318 644T361 661Q378 661 389 651T403 623Q403 595 384 576T340 557Q322 557 310 567T297 596ZM288 376Q288 405 262 405Q240 405 220 393T185 362T161 325T144 293L137 279Q135 278 121 278H107Q101 284 101 286T105 299Q126 348 164 391T252 441Q253 441 260 441T272 442Q296 441 316 432Q341 418 354 401T367 348V332L318 133Q267 -67 264 -75Q246 -125 194 -164T75 -204Q25 -204 7 -183T-12 -137Q-12 -110 7 -91T53 -71Q70 -71 82 -81T95 -112Q95 -148 63 -167Q69 -168 77 -168Q111 -168 139 -140T182 -74L193 -32Q204 11 219 72T251 197T278 308T289 365Q289 372 288 376Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3563.7,0) translate(0 -0.5)"><path data-c="7C" d="M139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(4119.5,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(5175.3,0)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo data-mjx-texclass="ORD" stretchy="false">|</mo><msub><mi>L</mi><mi>i</mi></msub><mo>−</mo><msub><mi>L</mi><mi>j</mi></msub><mo data-mjx-texclass="ORD" stretchy="false">|</mo><mo>=</mo><mn>1</mn></math></mjx-assistive-mml></mjx-container>) için tanımlanmıştır. 2 seviyelik bir sıçrama, tabloların ifade edemeyeceği 4:1 oranında bir geçiş gerektirirdi. Bu nedenle politika, kısıt sağlanana kadar daha düşük ayrıntılı chunk'ı yükseltir.</p>
<p>HM/MC geçiş mantığı, her chunk'ın düzenleme bit eşlemini kontrol ediyordu. Bir chunk'ta herhangi bir hacimsel düzenleme (mağaralar, tüneller, arazi şekillendirmeleri) varsa mesafeden bağımsız olarak MC modunda kalıyordu. Düzenlenmemiş chunk'lar yeterince uzağa gittiklerinde yükseklik haritası moduna geçebiliyordu. Bu hibrit yaklaşım, önemli olduğu yerlerde hacimsel özgürlük, olmadığı yerlerde ise verimlilik sağladı.</p>
<p>Bu spike dışarıdan bakıldığında önceki bazı spike'lardan daha küçük görünüyordu. Pratikte ise geliştirme sürecinde yaşam kalitesini ciddi ölçüde artırdı.</p>
<p>Sisteminiz bir chunk'ın neden mod değiştirdiğini açıklayabildiğinde tahmin yürütmeye daha az zaman harcarsınız. Renk kodlu katmanlar ekledik: yükseklik haritası chunk'ları için yeşil, MC chunk'ları için mavi, geçişin etkin olduğu yüzler için turuncu. Dikiş görünürlüğüne özel render kontrolleri olduğunda görsel hata ayıklamadaki belirsizlik azalır. Çizim aralıkları, politika sisteminden gelen etkin vertex sayılarına açıkça bağlandığında eski geometri hayaletleri öğleden sonranızı boşa harcamayı bırakır.</p>
<p>Bu spike'ta kamera davranışını da baştan elden geçirdik. Önceki spike'larda ekran görüntüleri için yeterli, ancak hataları yeniden üretmek için kullanışsız olan basit yörünge kontrolleri bulunuyordu. Spike 23; yapılandırılabilir hıza, irtifa kilidi açma/kapama seçeneğine ve konum göstergesine sahip WASD uçuş kamerası ekledi. Bu küçük bir ayrıntı gibi gelebilir. Ancak “şu sırtın yakınlarında bir yerde hata gördüm” ile “hata, kuzeybatıya bakarken (142, 12, -67) konumunda ortaya çıkıyor” arasındaki farkı yarattı.</p>
<p>Bu bölümün temel çıkarımı, politikanın karmaşıklığı azaltmadığıdır. Politika, karmaşıklığı düzenledi. Aynı sayıda uç durum hâlâ vardı. Ancak artık her uç durumun bir adı, tetikleme koşulu ve kodda kesme noktası koyabileceğiniz bir yeri bulunuyordu. Bu farklı türde bir kazanımdır ve bir sistemin gelişmeye devam edip edemeyeceğini ya da kendi ağırlığı altında çöküp çökmeyeceğini belirleyen şeydir.</p>
<p>Spike 23'ün sonunda, sürekli etkileşim hatası korkusu yaşamadan uzak alan clipmap halka stratejisine bağlanabilecek kadar öngörülebilir bir yakın alan davranış katmanımız vardı.</p>
<ol start="12">
<li>bölümde; halka geçişlerinin, skybox sisinin ve Three.js sürüm düzeyindeki shader entegrasyonunun projenin bu bölümünü tamamladığı Spike 24'ü ele alıyoruz.</li>
</ol>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>Mesafeye dayalı LOD politikası.</strong> Kameraya olan mesafeyi, düzenleme geçmişini ve komşu durumlarını temel alarak her chunk'a LOD seviyesi ve render modu atayan merkezi bir fonksiyon. Eş merkezli mesafe halkaları temel LOD'u belirler: halka 0 = tam çözünürlüklü MC, halka 1 = yarı çözünürlüklü MC, halka 2+ = yükseklik haritası modu. Politika fonksiyonu, kamera hareket ederken her karede çalışır ve chunk geçişlerini tetikler. Böylece geçici, chunk başına alınan kararların yerini öngörülebilir ve hata ayıklanabilir bir kural sistemi alır. Compute shader karşılığı için <a href="/tr/guides/landscape-generation-browser.html#gpu-driven-lod-with-webgpu">GPU destekli LOD seçimine</a> bakın.</p>
<p><strong>Komşuluk kısıtları.</strong> Transvoxel algoritması yalnızca 2:1 çözünürlük oranlarını işler. İki komşu chunk arasında birden fazla LOD seviyesi farkı varsa (örneğin LOD 0'ın yanında LOD 2), geçiş tabloları geçerli dikiş geometrisi üretemez. Politika sistemi, LOD farkı 1'i aştığında daha düşük ayrıntılı chunk'ı yükselterek bu kısıtı uygular. Bu kısıt yayılımı zincirleme ilerleyebilir: bir chunk'ın yükseltilmesi, komşularının da yükseltilmesini gerektirebilir. Uygulama, tipik ızgara yapılandırmalarında 2-3 yinelemede yakınsayan basit bir yinelemeli geçişten oluşur.</p>
<p><strong>Mod seçimi için düzenleme bit eşlemi.</strong> Her chunk, hacimsel SDF düzenlemeleri (mağaralar, tüneller, şekillendirmeler) içerip içermediğini kaydeden bir bit eşlemi tutar. Herhangi bir düzenleme içeren chunk'lar, üreticinin değişikliklerini korumak için mesafeden bağımsız olarak marching cubes modunda kalır. Düzenlenmemiş chunk'lar kameradan yeterince uzaktayken yükseklik haritası moduna geçerek hesaplama ve bellek tasarrufu sağlar. Bit eşlemi, chunk başına tek bir bayraktan oluşur; ancak daha ayrıntılı mod kararları için düzenleme yoğunluğunu izleyecek şekilde genişletilebilir.</p>
<p><strong>Hata ayıklama görselleştirme katmanları.</strong> Renk kodlu chunk render'ında yeşil = yükseklik haritası modu, mavi = MC modu, turuncu = geçişin etkin olduğu yüzler anlamına gelir. Chunk başına katmanlar; LOD seviyesi numaraları, mod etiketleri ve tel kafes açma/kapama seçenekleri sunar. Bunlar yayınlanan özellikler değil, geliştirme araçlarıdır; ancak LOD geçişleri ile dikiş artefaktlarında hata ayıklarken maliyetlerini defalarca çıkarırlar. Tam dünya konumunu bildiren WASD uçuş kamerasıyla birlikte “bir yerde hata gördüm” ifadesini “hata, bu LOD yapılandırmasıyla (142, 12, -67) konumunda ortaya çıkıyor” ifadesine dönüştürürler.</p>
<hr>
<p>12 bölümün 11. bölümü.<br>
Önceki: <a href="/tr/blog/2026-02-25-open-world-browser-part-10-seam-chaos.html">Bölüm 10 - Dikiş kaosu ve köşe bölüm sonu canavarı</a><br>
Sonraki: <a href="/tr/blog/2026-02-25-open-world-browser-part-12-lessons.html">Bölüm 12 - Halkalar, gökyüzü sisi ve yeniden yapacaklarımız</a><br>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya oluşturmak, bölüm 12: Halkalar, gökyüzü sisi ve yeniden yapacaklarımız]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-12-lessons</link>
            <guid>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-part-12-lessons</guid>
            <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Spike 24; clipmap halka geçişleri, skybox sisi entegrasyonu ve güçlüklerle öğrenilmiş uzun bir dersler listesiyle bu bölümü kapattı.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-olusturmak-bolum-12-halkalar-gokyuzu-sisi-ve-yeniden-yapacaklarımız" tabindex="-1">Tarayıcıda açık dünya oluşturmak, bölüm 12: Halkalar, gökyüzü sisi ve yeniden yapacaklarımız <a class="header-anchor" href="#tarayıcıda-acık-dunya-olusturmak-bolum-12-halkalar-gokyuzu-sisi-ve-yeniden-yapacaklarımız" aria-label="Permalink to &quot;Tarayıcıda açık dünya oluşturmak, bölüm 12: Halkalar, gökyüzü sisi ve yeniden yapacaklarımız&quot;"></a></h1>
<p><em>Yazan: <a href="/tr/about.html">Oleg Sidorkin</a>, Cinevva CTO'su ve Kurucu Ortağı</em></p>
<p>Burada yeni misiniz? <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">Seri rehberini</a> kullanın. Rehber, spike'ın ne olduğunu açıklıyor ve tüm bölümlere bağlantı veriyor.</p>
<p>Spike 24'ün amacı &quot;araziye clipmap halkaları eklemek&quot;ti. Ancak aynı anda render sürecine, shader'lara, modül altyapısına ve görsel entegrasyona dokunan tam kapsamlı bir finale dönüştü.</p>
<p>Temel arazi görevi, vertex shader'da eş merkezli clipmap halkaları oluşturmaktı. Her halka, kameranın merkezinde yer alan ve vertex'leri heightmap örnekleriyle ötelenen düz bir grid mesh'tir. En içteki halka tam çözünürlük kullanır. Sonraki her halka vertex aralığını iki katına çıkarır ve daha geniş bir alanı kapsar. Zor kısım halkalar arasındaki sınırdır: yüksek çözünürlüklü bir halkanın düşük çözünürlüklü bir halkayla buluştuğu yerde, daha ince mesh'in kenar vertex'lerinin daha kaba mesh kenarının orta noktasına hizalanması gerekir. Halka kenarı boyunca grid koordinatı tek sayı olan sınır vertex'lerini tespit edip yüksekliklerini iki çift sayı koordinatlı komşularının orta noktasına, <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.781ex;" xmlns="http://www.w3.org/2000/svg" width="19.274ex" height="2.737ex" role="img" focusable="false" viewBox="0 -864.9 8519.1 1209.9" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="210E" d="M137 683Q138 683 209 688T282 694Q294 694 294 685Q294 674 258 534Q220 386 220 383Q220 381 227 388Q288 442 357 442Q411 442 444 415T478 336Q478 285 440 178T402 50Q403 36 407 31T422 26Q450 26 474 56T513 138Q516 149 519 151T535 153Q555 153 555 145Q555 144 551 130Q535 71 500 33Q466 -10 419 -10H414Q367 -10 346 17T325 74Q325 90 361 192T398 345Q398 404 354 404H349Q266 404 205 306L198 293L164 158Q132 28 127 16Q114 -11 83 -11Q69 -11 59 -2T48 16Q48 30 121 320L195 616Q195 629 188 632T149 637H128Q122 643 122 645T124 664Q129 683 137 683Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(853.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(1909.6,0)"><g data-mml-node="mfrac"><g data-mml-node="mn" transform="translate(220,394) scale(0.707)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(220,-345) scale(0.707)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><rect width="553.6" height="60" x="120" y="220"/></g></g><g data-mml-node="mo" transform="translate(2703.1,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(3092.1,0)"><g data-mml-node="mi"><path data-c="210E" d="M137 683Q138 683 209 688T282 694Q294 694 294 685Q294 674 258 534Q220 386 220 383Q220 381 227 388Q288 442 357 442Q411 442 444 415T478 336Q478 285 440 178T402 50Q403 36 407 31T422 26Q450 26 474 56T513 138Q516 149 519 151T535 153Q555 153 555 145Q555 144 551 130Q535 71 500 33Q466 -10 419 -10H414Q367 -10 346 17T325 74Q325 90 361 192T398 345Q398 404 354 404H349Q266 404 205 306L198 293L164 158Q132 28 127 16Q114 -11 83 -11Q69 -11 59 -2T48 16Q48 30 121 320L195 616Q195 629 188 632T149 637H128Q122 643 122 645T124 664Q129 683 137 683Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(609,-150) scale(0.707)"><path data-c="6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z" style="stroke-width: 3;"/><path data-c="65" d="M28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275Z" transform="translate(278,0)" style="stroke-width: 3;"/><path data-c="66" d="M273 0Q255 3 146 3Q43 3 34 0H26V46H42Q70 46 91 49Q99 52 103 60Q104 62 104 224V385H33V431H104V497L105 564L107 574Q126 639 171 668T266 704Q267 704 275 704T289 705Q330 702 351 679T372 627Q372 604 358 590T321 576T284 590T270 627Q270 647 288 667H284Q280 668 273 668Q245 668 223 647T189 592Q183 572 182 497V431H293V385H185V225Q185 63 186 61T189 57T194 54T199 51T206 49T213 48T222 47T231 47T241 46T251 46H282V0H273Z" transform="translate(722,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(1028,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(4975.3,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(5975.5,0)"><g data-mml-node="mi"><path data-c="210E" d="M137 683Q138 683 209 688T282 694Q294 694 294 685Q294 674 258 534Q220 386 220 383Q220 381 227 388Q288 442 357 442Q411 442 444 415T478 336Q478 285 440 178T402 50Q403 36 407 31T422 26Q450 26 474 56T513 138Q516 149 519 151T535 153Q555 153 555 145Q555 144 551 130Q535 71 500 33Q466 -10 419 -10H414Q367 -10 346 17T325 74Q325 90 361 192T398 345Q398 404 354 404H349Q266 404 205 306L198 293L164 158Q132 28 127 16Q114 -11 83 -11Q69 -11 59 -2T48 16Q48 30 121 320L195 616Q195 629 188 632T149 637H128Q122 643 122 645T124 664Q129 683 137 683Z" style="stroke-width: 3;"/></g><g data-mml-node="mtext" transform="translate(609,-150) scale(0.707)"><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(392,0)" style="stroke-width: 3;"/><path data-c="67" d="M329 409Q373 453 429 453Q459 453 472 434T485 396Q485 382 476 371T449 360Q416 360 412 390Q410 404 415 411Q415 412 416 414V415Q388 412 363 393Q355 388 355 386Q355 385 359 381T368 369T379 351T388 325T392 292Q392 230 343 187T222 143Q172 143 123 171Q112 153 112 133Q112 98 138 81Q147 75 155 75T227 73Q311 72 335 67Q396 58 431 26Q470 -13 470 -72Q470 -139 392 -175Q332 -206 250 -206Q167 -206 107 -175Q29 -140 29 -75Q29 -39 50 -15T92 18L103 24Q67 55 67 108Q67 155 96 193Q52 237 52 292Q52 355 102 398T223 442Q274 442 318 416L329 409ZM299 343Q294 371 273 387T221 404Q192 404 171 388T145 343Q142 326 142 292Q142 248 149 227T179 192Q196 182 222 182Q244 182 260 189T283 207T294 227T299 242Q302 258 302 292T299 343ZM403 -75Q403 -50 389 -34T348 -11T299 -2T245 0H218Q151 0 138 -6Q118 -15 107 -34T95 -74Q95 -84 101 -97T122 -127T170 -155T250 -167Q319 -167 361 -139T403 -75Z" transform="translate(670,0)" style="stroke-width: 3;"/><path data-c="68" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 124T102 167T103 217T103 272T103 329Q103 366 103 407T103 482T102 542T102 586T102 603Q99 622 88 628T43 637H25V660Q25 683 27 683L37 684Q47 685 66 686T103 688Q120 689 140 690T170 693T181 694H184V367Q244 442 328 442Q451 442 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(1170,0)" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(1726,0)" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(8130.1,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>h</mi><mo>=</mo><mstyle displaystyle="false" scriptlevel="0"><mfrac><mn>1</mn><mn>2</mn></mfrac></mstyle><mo stretchy="false">(</mo><msub><mi>h</mi><mtext>left</mtext></msub><mo>+</mo><msub><mi>h</mi><mtext>right</mtext></msub><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container>, hizalayarak 2:1 kenar morflama uyguladık. Bu, kaba halkanın tek kenarının tam olarak yer alacağı noktadır; dolayısıyla ince ve kaba kenarlar aynı çizgiyi tanımlar. Böylece geçiş geometrisine ihtiyaç duymadan aralıksız birleşimler elde edilir.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0;border:1px solid rgba(255,255,255,0.12)">
<iframe src="/tr/spikes/24-gpu-clipmap-rings/" title="Spike 24 Clipmap Halkaları ve Gökyüzü Sisi" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;background:#000" loading="lazy" allowfullscreen></iframe>
</div>
<p><a href="/tr/spikes/24-gpu-clipmap-rings/" target="_blank">Spike 24'ü yeni sekmede aç ↗</a> · <a href="/tr/blog/spike-source?spike=24-gpu-clipmap-rings">Kaynak kodu görüntüle</a></p>
<p>Ardından sis ve gökyüzü entegrasyonu geldi. Uzak arazinin sabit, düz bir renge değil gerçek gökyüzü rengine karışmasını istiyorduk. Bunun için sis shader'ının, her fragment yönünde gökyüzünün hangi renkte olacağını bilmesi gerekiyordu. Eş dikdörtgensel bir HDR skybox dokusu yükledik ve fragment shader'da kameradan fragment'a uzanan görüş yönünü kullanarak bu dokudan örnek aldık; yönü TSL'nin <code>equirectUV</code> node'u aracılığıyla eş dikdörtgensel UV koordinatlarına dönüştürdük. Sis faktörü, kamera uzayındaki derinlik için <code>positionView.z.negate()</code> kullanılarak mesafeye göre hesaplandı ve yakın ile uzak mesafe arasında <code>smoothstep</code> ile harmanlandı.</p>
<p>Modülleri birbirine bağlamak, geometrinin herhangi bir bölümünden daha can sıkıcı çıktı. Derleme çıktılarını yeniden yapılandıran Three.js 0.183.1 sürümüne yükselttik. <code>three/tsl</code> import'unun <code>three.tsl.js</code> dosyasına çözümlenmesi gerekiyordu ve TSL kendi içinde <code>three/webgpu</code> öğesini yalın bir belirteç olarak import ediyordu. Her iki eşlemenin de HTML import map'inde açıkça tanımlanması gerekti. Bunlardan birinin bile eksik olması, hangi eşlemenin yanlış olduğuna dair hiçbir ipucu vermeyen anlaşılmaz &quot;does not provide an export&quot; veya &quot;failed to resolve module specifier&quot; hatalarına yol açıyordu. Her ikisi de import map'e eklendiğinde shader grafiği doğru şekilde yüklendi.</p>
<p>Ayrıca dokunun baş aşağı render edilmesine yol açan bir skybox yönü sorunumuz vardı. Çözüm, eş dikdörtgensel dokuda <code>flipY = true</code> ayarını kullanmaktı. Bu, yüklenen dokular için Three.js'in varsayılanıdır ancak ilk kodumuzda <code>false</code> olarak ayarlanmıştı.</p>
<p>İlk sis uygulaması gökyüzünü neredeyse sabit bir yönden örnekliyor ve doğal bir gradyan yerine ufuk renginde ince bir şerit oluşturuyordu. Çözüm, <code>positionWorld.sub(cameraPosition).normalize()</code> kullanarak her piksel için kameradan fragment'a uzanan gerçek dünya yönünü hesaplamak ve sis rengi aramasında bunu <code>equirectUV</code> içine aktarmaktı. Böylece arazi fragment'ları gerçekten arkalarında bulunan gökyüzü rengine karışmaya başladı ve her kamera açısından doğru bir görünüm elde edildi.</p>
<p>Tüm bu ayrı düzeltmelerin altında temel sonuç değişmedi. Artık yakın alan hacimsel düzenlemeyi (Transvoxel birleşimleri kullanan marching cubes), orta alan heightmap chunk'larını ve uzak alan clipmap halkalarını bir araya getiren bir arazi sistemimiz var. Bunların tümü mod, LOD ve geçiş davranışını belirleyen bir politika katmanı tarafından yönetiliyor.</p>
<p>Bir sonraki projede tekrarlayacağım kalıpları sıralamam gerekseydi şunları seçerdim:</p>
<p>Özellik geliştirmeye başlamadan önce risk spike'larıyla başlayın. Spike 1, içerik pipeline'larına yatırım yapmadan önce &quot;yeterince hızlı render yapabiliyor muyuz?&quot; sorusunu ortadan kaldırdı.</p>
<p>Büyük entegrasyon sıçramalarından önce düzgün çalıştığı bilinen temel sürümleri dondurun. Spike 13 ve 14, regresyonları ikiye bölerek aramakla geçireceğimiz günleri kurtardı.</p>
<p>Uzun optimizasyon süreçlerinden önce politika katmanını ve gözlemlenebilirliği zorunlu kılın. Spike 23, gizemli hataları tetikleme kuralları olan, adlandırılmış koşullara dönüştürdü.</p>
<p>Ekran görüntüleriyle değil, hareket hâlinde test edin. Clipmap sıçramaları, birleşim titremeleri ve streaming takılmaları sabit karelerde gizlenir.</p>
<p>Ortalama FPS'yi değil, özellik başına frame süresi maliyetini ölçün. Ortalamalar, kullanıcıların gerçekten hissettiği sıçramaları gizler.</p>
<p>Ve dağınık kısımları da yayımlayın. Yanlış yolları, güncelliğini yitirmiş buffer hayaletlerini aramayı, draw range yanlışken geçiş mantığını suçlayarak geçirilen iki günü... İnsanların gerçekten ders çıkarabileceği kısımlar bunlardır.</p>
<h2 id="harici-gerceklik-kontrolu-vuntra-city-gelistirme-gunlukleri" tabindex="-1">Harici gerçeklik kontrolü: Vuntra City geliştirme günlükleri <a class="header-anchor" href="#harici-gerceklik-kontrolu-vuntra-city-gelistirme-gunlukleri" aria-label="Permalink to &quot;Harici gerçeklik kontrolü: Vuntra City geliştirme günlükleri&quot;"></a></h2>
<p>Bu seriyi tamamladıktan sonra kendi açık dünya varsayımlarımızı harici bir uygulamayla karşılaştırmak için <code>@VuntraCity</code> geliştirme günlüklerini inceledik. Bu, tarayıcı stack'i değil yerel bir UE5 projesi; ancak sistem kalıpları yeterince örtüştüğü için karşılaştırma faydalı.</p>
<p>İlk işaret, hareket hızının yalnızca oynanışın bir parçası değil, bir streaming kontrolü olarak da ele alınması gerektiği. Vuntra City'de yüksek hızlı ulaşım bilinçli olarak çoğu iç mekânın üzerinden yönlendiriliyor; ayrıntı menzili de nesne oluşturma trafiğini ve takılmaları önlemek için hareket hızına göre ölçekleniyor (<a href="https://www.youtube.com/watch?v=KKeBElJS6-M" target="_blank" rel="noreferrer">ulaşım sistemi</a>, <a href="https://www.youtube.com/watch?v=aPuYXyJet38" target="_blank" rel="noreferrer">performans teknikleri</a>). Bu, politika katmanı yönelimimizle örtüşüyor: hareket modu; chunk yarıçapını, iç mekân etkinleştirmeyi ve kare başına izin verilen iş miktarını doğrudan etkilemeli.</p>
<p>İkinci işaret mimariyle ilgili. Harita ve adres sistemleri, yüklenmemiş bölgelerde de genel sorguların çalışabilmesi için dünya topolojisinin render edilen nesnelerden ayrılmasını gerektirmiş (<a href="https://www.youtube.com/watch?v=6dLn1GQpu2c" target="_blank" rel="noreferrer">haritalar ve adresler</a>). Bu, render'a bağlı veri yollarını zorunlu kılmadan dünya araması, görev rotalama, moderasyon taramaları ve ilgi noktası indeksleme yapabilmek için tarayıcıda ihtiyaç duyduğumuz ayrımla aynı.</p>
<p>Üçüncü işaret, simülasyonun katmanlara ayrılması. Bir milyon NPC'lik tasarımlarında kaba program durumu ucuz ve genel tutuluyor, pahalı davranış bütçesi ise yalnızca oyuncunun yakınında harcanıyor (<a href="https://www.youtube.com/watch?v=nBV0yAAJUf0" target="_blank" rel="noreferrer">bir milyon NPC'ye genel bakış</a>, <a href="https://www.youtube.com/watch?v=eUi7DB1ar3s" target="_blank" rel="noreferrer">sistemin ayrıntılı incelemesi</a>). Bu, yakın alan doğruluğu ile uzak alan determinizminin ayrı bütçelere sahip ayrı meseleler olduğu, AOI öncelikli simülasyon modelimizi destekliyor.</p>
<p>Dördüncü işaret ise ham ölçek değil, tasarım kalitesi. En güçlü keşif anları; sürekli UI katmanları yerine ağırlıklı dağılımlardan, nadir aykırı örneklerden ve oyun dünyasına ait yön bulma ipuçlarından doğuyor (<a href="https://www.youtube.com/watch?v=4MZ5-KQW3pc" target="_blank" rel="noreferrer">prosedürel ortam notları</a>, <a href="https://www.youtube.com/watch?v=ixR1hqZJlv4" target="_blank" rel="noreferrer">mini haritasız oynanış döngüsü</a>). Bizim için bu, teknik sistemlerin yalnızca maksimum verim sağlamak üzere değil, keşfedilebilir çeşitlilik üretecek şekilde ayarlanması gerektiğini hatırlatıyor.</p>
<h2 id="bu-bolumde-deginilen-teknolojiler" tabindex="-1">Bu bölümde değinilen teknolojiler <a class="header-anchor" href="#bu-bolumde-deginilen-teknolojiler" aria-label="Permalink to &quot;Bu bölümde değinilen teknolojiler&quot;"></a></h2>
<p><strong>Clipmap halka geometrisi.</strong> Her halka, kameranın merkezinde yer alan ve vertex'leri heightmap örnekleriyle ötelenen düz bir grid mesh'tir. En içteki halka tam çözünürlük kullanır. Sonraki her halka vertex aralığını iki katına çıkarır ve daha geniş bir alanı kapsar. Zor kısım sınırdır: yüksek çözünürlüklü bir halkanın düşük çözünürlüklü bir halkayla buluştuğu yerde, daha ince mesh'in kenar vertex'leri daha kaba mesh kenarının orta noktasına hizalanır. Teknik, Losasso ve Hoppe'nin SIGGRAPH 2004 makalesinden (<a href="https://hhoppe.com/geomclipmap.pdf" target="_blank" rel="noreferrer">PDF</a>) kaynaklanır ve <a href="https://developer.nvidia.com/gpugems/gpugems2/part-i-geometric-complexity/chapter-2-terrain-rendering-using-gpu-based-geometry" target="_blank" rel="noreferrer">GPU Gems 2, Bölüm 2</a> içinde ayrıntılı olarak açıklanır. <a href="/tr/guides/landscape-generation-browser.html#geometry-clipmaps">Geometri clipmap'leri hakkındaki arazi rehberimize</a> bakın.</p>
<p><strong>2:1 kenar morflama.</strong> İki clipmap halkası arasındaki sınırda, daha ince halkada daha kaba halkanın paylaşmadığı konumlarda vertex'ler bulunur. Halka kenarı boyunca grid koordinatı tek sayı olan sınır vertex'leri tespit edilir ve yükseklikleri, komşu iki çift sayı koordinatlı vertex arasında interpolasyonla hesaplanır. Böylece özel geçiş geometrisine ihtiyaç duymadan aralıksız birleşimler elde edilir. Interpolasyon, vertex shader'da sınır vertex'leri için <code>morphedHeight = mix(heightLeft, heightRight, 0.5)</code> şeklinde çalışır ve <a href="/tr/guides/landscape-generation-browser.html#geomorphing-pop-free-lod-transitions">rehberimizde</a> açıklanan aynı geomorfing çerçevesini kullanır.</p>
<p><strong>Eş dikdörtgensel skybox eşleme.</strong> Boylam-enlem projeksiyonu kullanarak gökyüzündeki tüm yönleri bir küre üzerine eşleyen tek bir 2D görüntüdür. Yatay eksen 0-360 dereceyi, dikey eksen ise 0-180 dereceyi kapsar. Normalize edilmiş bir görüş yönü <mjx-container class="MathJax" jax="SVG" style="direction: ltr; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -0.667ex;" xmlns="http://www.w3.org/2000/svg" width="14.501ex" height="3.07ex" role="img" focusable="false" viewBox="0 -1062 6409.6 1357" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="TeXAtom" data-mjx-texclass="ORD"><g data-mml-node="mover"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(427,268) translate(-250 0)"><path data-c="5E" d="M112 560L249 694L257 686Q387 562 387 560L361 531Q359 532 303 581L250 627L195 580Q182 569 169 557T148 538L140 532Q138 530 125 546L112 560Z" style="stroke-width: 3;"/></g></g></g><g data-mml-node="mo" transform="translate(797.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(1853.6,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(2242.6,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(553,-150) scale(0.707)"><path data-c="1D465" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3250,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(3694.7,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(553,-150) scale(0.707)"><path data-c="1D466" d="M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(4644.2,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(5088.8,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(553,-150) scale(0.707)"><path data-c="1D467" d="M347 338Q337 338 294 349T231 360Q211 360 197 356T174 346T162 335T155 324L153 320Q150 317 138 317Q117 317 117 325Q117 330 120 339Q133 378 163 406T229 440Q241 442 246 442Q271 442 291 425T329 392T367 375Q389 375 411 408T434 441Q435 442 449 442H462Q468 436 468 434Q468 430 463 420T449 399T432 377T418 358L411 349Q368 298 275 214T160 106L148 94L163 93Q185 93 227 82T290 71Q328 71 360 90T402 140Q406 149 409 151T424 153Q443 153 443 143Q443 138 442 134Q425 72 376 31T278 -11Q252 -11 232 6T193 40T155 57Q111 57 76 -3Q70 -11 59 -11H54H41Q35 -5 35 -2Q35 13 93 84Q132 129 225 214T340 322Q352 338 347 338Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(6020.6,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="inline" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; width: auto; overflow: hidden;"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow data-mjx-texclass="ORD"><mover><mi>d</mi><mo stretchy="false">^</mo></mover></mrow><mo>=</mo><mo stretchy="false">(</mo><msub><mi>d</mi><mi>x</mi></msub><mo>,</mo><msub><mi>d</mi><mi>y</mi></msub><mo>,</mo><msub><mi>d</mi><mi>z</mi></msub><mo stretchy="false">)</mo></math></mjx-assistive-mml></mjx-container>, boylamı ve enlemi alınarak UV koordinatlarına dönüştürülür:</p>
<mjx-container tabindex="0" class="MathJax" jax="SVG" display="true" style="direction: ltr; display: block; text-align: center; margin: 1em 0; position: relative;"><svg style="overflow: visible; min-height: 1px; min-width: 1px; vertical-align: -1.577ex;" xmlns="http://www.w3.org/2000/svg" width="48.882ex" height="4.982ex" role="img" focusable="false" viewBox="0 -1505 21605.8 2202" aria-hidden="true"><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="mi"><path data-c="1D462" d="M21 287Q21 295 30 318T55 370T99 420T158 442Q204 442 227 417T250 358Q250 340 216 246T182 105Q182 62 196 45T238 27T291 44T328 78L339 95Q341 99 377 247Q407 367 413 387T427 416Q444 431 463 431Q480 431 488 421T496 402L420 84Q419 79 419 68Q419 43 426 35T447 26Q469 29 482 57T512 145Q514 153 532 153Q551 153 551 144Q550 139 549 130T540 98T523 55T498 17T462 -8Q454 -10 438 -10Q372 -10 347 46Q345 45 336 36T318 21T296 6T267 -6T233 -11Q189 -11 155 7Q103 38 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(849.8,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mfrac" transform="translate(1905.6,0)"><g data-mml-node="mn" transform="translate(220,676)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(220,-686)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><rect width="700" height="60" x="120" y="220"/></g><g data-mml-node="mo" transform="translate(3067.8,0)"><path data-c="2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mfrac" transform="translate(4068,0)"><g data-mml-node="mrow" transform="translate(220,710)"><g data-mml-node="TeXAtom" data-mjx-texclass="OP"><g data-mml-node="mi"><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" style="stroke-width: 3;"/><path data-c="74" d="M27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" transform="translate(889,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(1389,0)" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(2111.7,0)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(2611.7,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(3000.7,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(553,-150) scale(0.707)"><path data-c="1D467" d="M347 338Q337 338 294 349T231 360Q211 360 197 356T174 346T162 335T155 324L153 320Q150 317 138 317Q117 317 117 325Q117 330 120 339Q133 378 163 406T229 440Q241 442 246 442Q271 442 291 425T329 392T367 375Q389 375 411 408T434 441Q435 442 449 442H462Q468 436 468 434Q468 430 463 420T449 399T432 377T418 358L411 349Q368 298 275 214T160 106L148 94L163 93Q185 93 227 82T290 71Q328 71 360 90T402 140Q406 149 409 151T424 153Q443 153 443 143Q443 138 442 134Q425 72 376 31T278 -11Q252 -11 232 6T193 40T155 57Q111 57 76 -3Q70 -11 59 -11H54H41Q35 -5 35 -2Q35 13 93 84Q132 129 225 214T340 322Q352 338 347 338Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3932.5,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(4210.5,0)"><g data-mml-node="mspace"/></g><g data-mml-node="msub" transform="translate(4544.1,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(553,-150) scale(0.707)"><path data-c="1D465" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(5551.6,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mrow" transform="translate(2655.3,-686)"><g data-mml-node="mn"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(500,0)"><path data-c="1D70B" d="M132 -11Q98 -11 98 22V33L111 61Q186 219 220 334L228 358H196Q158 358 142 355T103 336Q92 329 81 318T62 297T53 285Q51 284 38 284Q19 284 19 294Q19 300 38 329T93 391T164 429Q171 431 389 431Q549 431 553 430Q573 423 573 402Q573 371 541 360Q535 358 472 358H408L405 341Q393 269 393 222Q393 170 402 129T421 65T431 37Q431 20 417 5T381 -10Q370 -10 363 -7T347 17T331 77Q330 86 330 121Q330 170 339 226T357 318T367 358H269L268 354Q268 351 249 275T206 114T175 17Q164 -11 132 -11Z" style="stroke-width: 3;"/></g></g><rect width="6140.6" height="60" x="120" y="220"/></g><g data-mml-node="mo" transform="translate(10448.6,0)"><path data-c="2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" style="stroke-width: 3;"/></g><g data-mml-node="mstyle" transform="translate(10726.6,0)"><g data-mml-node="mspace"/></g><g data-mml-node="mi" transform="translate(12893.3,0)"><path data-c="1D463" d="M173 380Q173 405 154 405Q130 405 104 376T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Q21 294 29 316T53 368T97 419T160 441Q202 441 225 417T249 361Q249 344 246 335Q246 329 231 291T200 202T182 113Q182 86 187 69Q200 26 250 26Q287 26 319 60T369 139T398 222T409 277Q409 300 401 317T383 343T365 361T357 383Q357 405 376 424T417 443Q436 443 451 425T467 367Q467 340 455 284T418 159T347 40T241 -11Q177 -11 139 22Q102 54 102 117Q102 148 110 181T151 298Q173 362 173 380Z" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(13656,0)"><path data-c="3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" style="stroke-width: 3;"/></g><g data-mml-node="mfrac" transform="translate(14711.8,0)"><g data-mml-node="mn" transform="translate(220,676)"><path data-c="31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" style="stroke-width: 3;"/></g><g data-mml-node="mn" transform="translate(220,-686)"><path data-c="32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" style="stroke-width: 3;"/></g><rect width="700" height="60" x="120" y="220"/></g><g data-mml-node="mo" transform="translate(15874,0)"><path data-c="2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z" style="stroke-width: 3;"/></g><g data-mml-node="mfrac" transform="translate(16874.3,0)"><g data-mml-node="mrow" transform="translate(220,755)"><g data-mml-node="mi"><path data-c="61" d="M137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106Z" style="stroke-width: 3;"/><path data-c="72" d="M36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36Z" transform="translate(500,0)" style="stroke-width: 3;"/><path data-c="63" d="M370 305T349 305T313 320T297 358Q297 381 312 396Q317 401 317 402T307 404Q281 408 258 408Q209 408 178 376Q131 329 131 219Q131 137 162 90Q203 29 272 29Q313 29 338 55T374 117Q376 125 379 127T395 129H409Q415 123 415 120Q415 116 411 104T395 71T366 33T318 2T249 -11Q163 -11 99 53T34 214Q34 318 99 383T250 448T370 421T404 357Q404 334 387 320Z" transform="translate(892,0)" style="stroke-width: 3;"/><path data-c="73" d="M295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316Z" transform="translate(1336,0)" style="stroke-width: 3;"/><path data-c="69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z" transform="translate(1730,0)" style="stroke-width: 3;"/><path data-c="6E" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z" transform="translate(2008,0)" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2564,0)"><path data-c="2061" d="" style="stroke-width: 3;"/></g><g data-mml-node="mo" transform="translate(2564,0)"><path data-c="28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z" style="stroke-width: 3;"/></g><g data-mml-node="msub" transform="translate(2953,0)"><g data-mml-node="mi"><path data-c="1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z" style="stroke-width: 3;"/></g><g data-mml-node="mi" transform="translate(553,-150) scale(0.707)"><path data-c="1D466" d="M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mo" transform="translate(3902.5,0)"><path data-c="29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z" style="stroke-width: 3;"/></g></g><g data-mml-node="mi" transform="translate(2080.7,-686)"><path data-c="1D70B" d="M132 -11Q98 -11 98 22V33L111 61Q186 219 220 334L228 358H196Q158 358 142 355T103 336Q92 329 81 318T62 297T53 285Q51 284 38 284Q19 284 19 294Q19 300 38 329T93 391T164 429Q171 431 389 431Q549 431 553 430Q573 423 573 402Q573 371 541 360Q535 358 472 358H408L405 341Q393 269 393 222Q393 170 402 129T421 65T431 37Q431 20 417 5T381 -10Q370 -10 363 -7T347 17T331 77Q330 86 330 121Q330 170 339 226T357 318T367 358H269L268 354Q268 351 249 275T206 114T175 17Q164 -11 132 -11Z" style="stroke-width: 3;"/></g><rect width="4491.5" height="60" x="120" y="220"/></g></g></g></svg><mjx-assistive-mml unselectable="on" display="block" style="top: 0px; left: 0px; clip: rect(1px, 1px, 1px, 1px); -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: absolute; padding: 1px 0px 0px 0px; border: 0px; display: block; overflow: hidden; width: 100%;"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><mi>u</mi><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mo>+</mo><mfrac><mrow><mrow data-mjx-texclass="OP"><mi>atan</mi><mn>2</mn></mrow><mo stretchy="false">(</mo><msub><mi>d</mi><mi>z</mi></msub><mo>,</mo><mstyle scriptlevel="0"><mspace width="0.167em"/></mstyle><msub><mi>d</mi><mi>x</mi></msub><mo stretchy="false">)</mo></mrow><mrow><mn>2</mn><mi>π</mi></mrow></mfrac><mo>,</mo><mstyle scriptlevel="0"><mspace width="2em"/></mstyle><mi>v</mi><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mo>−</mo><mfrac><mrow><mi>arcsin</mi><mo data-mjx-texclass="NONE">⁡</mo><mo stretchy="false">(</mo><msub><mi>d</mi><mi>y</mi></msub><mo stretchy="false">)</mo></mrow><mi>π</mi></mfrac></math></mjx-assistive-mml></mjx-container><p>Three.js'te <code>texture.mapping = EquirectangularReflectionMapping</code> ayarını <code>SRGBColorSpace</code> ile birlikte kullanmak, bunu sahne arka planı olarak etkinleştirir. TSL'de <code>equirectUV(direction)</code> aynı dönüşümü uygular ve 3D görüş yönünü dokudan örnek almak için kullanılan 2D UV koordinatlarına dönüştürür.</p>
<p><strong>Gökyüzünden fragment başına sis rengi.</strong> Standart sis, fragment'ları tek bir sabit renge doğru harmanlar. Ayrıntılı bir skybox'a sahip sahnede bu yanlış görünür çünkü gökyüzü rengi yöne göre değişir. Çözüm, her piksel için kameradan fragment'a uzanan dünya yönünü (<code>positionWorld.sub(cameraPosition).normalize()</code>) hesaplamak ve sis rengi için skybox'ı bu yönde örneklemektir. Her fragment gerçekten arkasında bulunan gökyüzü rengine doğru solar ve böylece her kamera açısından doğru harmanlama elde edilir. Sis faktörü, kamera uzayındaki derinlik için <code>positionView.z.negate()</code> ve <code>smoothstep(nearDist, farDist, viewDepth)</code> kullanır.</p>
<p><strong>ES modülleri için import map'ler.</strong> Yalın modül belirteçlerini (<code>three/tsl</code> gibi) gerçek URL'lerle eşleyen, tarayıcıya özgü bir mekanizmadır (<code>&lt;script type=&quot;importmap&quot;&gt;</code>). Three.js 0.183.1 derleme çıktılarını yeniden yapılandırdığında <code>three/tsl</code> öğesinin <code>three.tsl.js</code> dosyasına çözümlenmesi gerekti ve TSL kendi içinde <code>three/webgpu</code> öğesini yalın bir belirteç olarak import etti. Her iki eşlemenin de import map'te açıkça tanımlanması gerekiyordu; aksi hâlde tarayıcı &quot;does not provide an export&quot; veya &quot;failed to resolve module specifier&quot; hataları üretiyordu.</p>
<h2 id="ek-okumalar" tabindex="-1">Ek okumalar <a class="header-anchor" href="#ek-okumalar" aria-label="Permalink to &quot;Ek okumalar&quot;"></a></h2>
<p>Bu seri boyunca kullanılan teknolojiler hakkında daha ayrıntılı bilgi için tamamlayıcı rehberlerimize bakın:</p>
<ul>
<li><a href="/tr/guides/landscape-generation-browser.html">Tarayıcı Açık Dünyaları İçin Dinamik LOD ve Streaming ile Arazi Üretimi</a>; heightmap'leri, SDF'leri, marching cubes'ı, Transvoxel'i, geometri clipmap'lerini, geomorfingi, streaming mimarisini, arazi materyallerini ve bitki örtüsü render sürecini kapsar.</li>
<li><a href="/tr/guides/browser-3d-open-world-tech.html">Çok Oyunculu Üretici Dünyaları İçin Tarayıcıda 3D Açık Dünya Teknolojileri</a>; render stack'lerini, WebGPU'yu, fiziği, ağ iletişimini, çok oyunculu mimariyi ve Skyrim, The Witcher 3, Breath of the Wild ile GTA V'ten çıkarılan dersleri kapsar.</li>
</ul>
<p>On iki bölümlük bu yolculuğu takip ettiğiniz için teşekkür ederiz.</p>
<p>Bölüm 1: <a href="/tr/blog/2026-02-25-open-world-browser-part-01-risk-first.html">Onu bozmaya çalışarak başladık</a><br>
Bölüm 2: <a href="/tr/blog/2026-02-25-open-world-browser-part-02-worker-physics.html">Worker fiziği ve input gecikmesi korkusu</a><br>
Bölüm 3: <a href="/tr/blog/2026-02-25-open-world-browser-part-03-the-unflashy-spikes.html">Bizi kurtaran gösterişsiz spike'lar</a><br>
Bölüm 4: <a href="/tr/blog/2026-02-25-open-world-browser-part-04-streaming-before-fancy.html">Gösterişli araziden önce streaming</a><br>
Bölüm 5: <a href="/tr/blog/2026-02-25-open-world-browser-part-05-budgeting-the-pretty.html">Görsel güzellikler için bütçe ayırmak</a><br>
Bölüm 6: <a href="/tr/blog/2026-02-25-open-world-browser-part-06-clipmaps.html">Clipmap'ler gidişatı değiştirdi</a><br>
Bölüm 7: <a href="/tr/blog/2026-02-25-open-world-browser-part-07-marching-cubes.html">Marching cubes ve ilk gerçek mağaralar</a><br>
Bölüm 8: <a href="/tr/blog/2026-02-25-open-world-browser-part-08-webgpu-integration.html">Temel sürümümüzü kaybetmeden entegrasyon</a><br>
Bölüm 9: <a href="/tr/blog/2026-02-25-open-world-browser-part-09-transvoxel-first-cut.html">Transvoxel bir iskeletle başladı</a><br>
Bölüm 10: <a href="/tr/blog/2026-02-25-open-world-browser-part-10-seam-chaos.html">Birleşim kaosu ve köşe bölüm sonu canavarı</a><br>
Bölüm 11: <a href="/tr/blog/2026-02-25-open-world-browser-part-11-policy-modes.html">Sabit kodlanmış mod değil, politika modu</a></p>
<hr>
<p>14 bölümün 12.'si.<br>
Önceki: <a href="/tr/blog/2026-02-25-open-world-browser-part-11-policy-modes.html">Bölüm 11 - Sabit kodlanmış mod değil, politika modu</a><br>
Sonraki: <a href="/tr/blog/2026-04-13-open-world-browser-part-13-terrain-sculpting.html">Bölüm 13 - Arazi şekillendirme ve matematik fonksiyonunun ölümü</a><br>
Seri rehberi: <a href="/tr/blog/2026-02-25-open-world-browser-series-guide.html">/tr/blog/2026-02-25-open-world-browser-series-guide</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tarayıcıda açık dünya serisi rehberi]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-series-guide</link>
            <guid>https://app.cinevva.com/tr/blog/2026-02-25-open-world-browser-series-guide</guid>
            <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[29 bölümlük tarayıcıda açık dünya serisinin okuma sırası, sade bir spike sözlüğü ve canlı demo haritası.]]></description>
            <content:encoded><![CDATA[<h1 id="tarayıcıda-acık-dunya-serisi-rehberi" tabindex="-1">Tarayıcıda açık dünya serisi rehberi <a class="header-anchor" href="#tarayıcıda-acık-dunya-serisi-rehberi" aria-label="Permalink to &quot;Tarayıcıda açık dünya serisi rehberi&quot;"></a></h1>
<p><em>Cinevva CTO'su ve Kurucu Ortağı <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<p>Bu sayfa, serinin tamamı için gezinme merkezidir.</p>
<p>Buraya serinin rastgele bir bölümünden geldiyseniz buradan başlayın.</p>
<p>Mart 2026 güncellemesi: <a href="/tr/blog/2026-02-25-open-world-browser-part-12-lessons.html">12. Bölüme</a> Vuntra City geliştirici günlüklerinden harici bir uygulama karşılaştırması ekledik ve eşlik eden <a href="/tr/guides/browser-3d-open-world-tech.html">tarayıcıda açık dünya teknoloji rehberini</a> aynı bulgularla genişlettik.</p>
<p>Nisan 2026 güncellemesi: 13-14. Bölümler arazi şekillendirmeyi (Spike 25-27) ve görsel/oynanış katmanını ele alıyor: çok malzemeli dokulama, örneklenmiş bitki örtüsü ve HM+SDF çarpışmasına sahip bir karakter kontrolcüsü (Spike 28-30).</p>
<p>Mayıs 2026 güncellemesi: seri 29 bölüme ulaştı. 15-29. Bölümler; geliştirme sürecinin uzun orta bölümünü, çok oyunculu arazi ve suyu, kod yapısı yeniden düzenlemesini, animasyonları ve yapay zekâ destekli dağıtımı, imposter'ları ve paralaksı, karşılığını vermeyen görünürlük tamponunu, bulutları ve meshlet ayıklamayı, toplu avatarları ve yakınlık tabanlı sesli iletişimi, dünya kalıcılığını ve GPU rüzgârını, evrensel karakterleri, suya yönelik üç yaklaşımı, prosedürel bir adayı, çim ve örtülmeyi ve her türlü gövdeyi yöneten takılabilir bir karakter kontrolcüsünü ele alıyor (Spike 31-60).</p>
<p>Haziran 2026 güncellemesi: 30. Bölüm, çarpışmaları hesaba katan bir kamera ekliyor; takılabilir bir çarpıştırıcı sözleşmesine sahip yaylı bir kamera kolu ve görüntünün yalnızca tepelere değil, çıkıntılara ve mağara tavanlarına da girmesini engelleyen işaretli mesafe sondası kullanıyor.</p>
<h2 id="bu-seride-spike-ne-anlama-geliyor" tabindex="-1">Bu seride &quot;spike&quot; ne anlama geliyor? <a class="header-anchor" href="#bu-seride-spike-ne-anlama-geliyor" aria-label="Permalink to &quot;Bu seride &quot;spike&quot; ne anlama geliyor?&quot;"></a></h2>
<p>Spike, kısa ve odaklı bir deneydir.</p>
<p>Her spike, riskli bir soruyu sınar. Kapsamı dar tutar, önemli olanı ölçer ve bir sonraki adımda ne yapacağımıza karar veririz. Bunu tamamlanmış bir özellik değil, öğrenme aracı olarak düşünün.</p>
<p>Bu projedeki spike'lar çoğunlukla <code>/spikes/*</code> altında bulunan ve canlı olarak çalıştırabileceğiniz bağımsız sayfalardır.</p>
<h2 id="seriyi-sırayla-okuyun" tabindex="-1">Seriyi sırayla okuyun <a class="header-anchor" href="#seriyi-sırayla-okuyun" aria-label="Permalink to &quot;Seriyi sırayla okuyun&quot;"></a></h2>
<ol>
<li><a href="/tr/blog/2026-02-25-open-world-browser-part-01-risk-first.html">1. Bölüm: İşe onu bozmaya çalışarak başladık</a></li>
<li><a href="/tr/blog/2026-02-25-open-world-browser-part-02-worker-physics.html">2. Bölüm: Worker fiziği ve girdi gecikmesi korkusu</a></li>
<li><a href="/tr/blog/2026-02-25-open-world-browser-part-03-the-unflashy-spikes.html">3. Bölüm: Bizi kurtaran gösterişsiz spike'lar</a></li>
<li><a href="/tr/blog/2026-02-25-open-world-browser-part-04-streaming-before-fancy.html">4. Bölüm: Gösterişli araziden önce akış</a></li>
<li><a href="/tr/blog/2026-02-25-open-world-browser-part-05-budgeting-the-pretty.html">5. Bölüm: Görsel güzellikler için bütçe ayırmak</a></li>
<li><a href="/tr/blog/2026-02-25-open-world-browser-part-06-clipmaps.html">6. Bölüm: Clipmap'ler hikâyenin yönünü değiştirdi</a></li>
<li><a href="/tr/blog/2026-02-25-open-world-browser-part-07-marching-cubes.html">7. Bölüm: Marching cubes ve ilk gerçek mağaralar</a></li>
<li><a href="/tr/blog/2026-02-25-open-world-browser-part-08-webgpu-integration.html">8. Bölüm: Temel seviyemizi kaybetmeden entegrasyon</a></li>
<li><a href="/tr/blog/2026-02-25-open-world-browser-part-09-transvoxel-first-cut.html">9. Bölüm: Transvoxel bir iskeletle başladı</a></li>
<li><a href="/tr/blog/2026-02-25-open-world-browser-part-10-seam-chaos.html">10. Bölüm: Dikiş kaosu ve köşe bölüm sonu canavarı</a></li>
<li><a href="/tr/blog/2026-02-25-open-world-browser-part-11-policy-modes.html">11. Bölüm: Sabit kodlanmış mod değil, politika modu</a></li>
<li><a href="/tr/blog/2026-02-25-open-world-browser-part-12-lessons.html">12. Bölüm: Halkalar, gökyüzü sisi ve yeniden yapacaklarımız</a></li>
<li><a href="/tr/blog/2026-04-13-open-world-browser-part-13-terrain-sculpting.html">13. Bölüm: Arazi şekillendirme ve matematik fonksiyonunun sonu</a></li>
<li><a href="/tr/blog/2026-04-13-open-world-browser-part-14-world-comes-alive.html">14. Bölüm: Dünya canlanıyor</a></li>
<li><a href="/tr/blog/2026-04-13-open-world-browser-part-15-multiplayer-and-water.html">15. Bölüm: Temeli değiştir, ardından eşitle</a></li>
<li><a href="/tr/blog/2026-04-28-open-world-browser-part-16-structure-and-authoring.html">16. Bölüm: Büyümeye devam eden bir dünya için yapı</a></li>
<li><a href="/tr/blog/2026-05-01-open-world-browser-part-17-animations-and-search.html">17. Bölüm: Yeniden hedefleme gerektirmeyen animasyonlar ve canlı varlık araması</a></li>
<li><a href="/tr/blog/2026-05-02-open-world-browser-part-18-ai-scattering.html">18. Bölüm: Yapay zekâ yerleştirmiş gibi hissettiren bir dağıtım fırçası</a></li>
<li><a href="/tr/blog/2026-05-04-open-world-browser-part-19-imposters.html">19. Bölüm: Bir ormanda ayakta kalması gereken imposter</a></li>
<li><a href="/tr/blog/2026-05-05-open-world-browser-part-20-parallax-occlusion.html">20. Bölüm: Düz bir yüzeyde derinlik yanılsaması yaratmak</a></li>
<li><a href="/tr/blog/2026-05-06-open-world-browser-part-21-visibility-buffer.html">21. Bölüm: Daha hızlı olmayan, daha hızlı bir işleyici</a></li>
<li><a href="/tr/blog/2026-05-07-open-world-browser-part-22-clouds-and-meshlets.html">22. Bölüm: Işıklandırabileceğiniz bulutlar ve beslenmesi gereken ayıklama sistemi</a></li>
<li><a href="/tr/blog/2026-05-08-open-world-browser-part-23-avatars-and-voice.html">23. Bölüm: Elli avatar ve odadaki bir ses</a></li>
<li><a href="/tr/blog/2026-05-09-open-world-browser-part-24-persistence-and-wind.html">24. Bölüm: Bir dünyayı kaydetmek ve görebildiğiniz rüzgâr</a></li>
<li><a href="/tr/blog/2026-05-10-open-world-browser-part-25-universal-characters.html">25. Bölüm: Tek iskelet, her kıyafet</a></li>
<li><a href="/tr/blog/2026-05-12-open-world-browser-part-26-water.html">26. Bölüm: Su yapmanın üç yolu</a></li>
<li><a href="/tr/blog/2026-05-13-open-world-browser-part-27-island-and-terrain.html">27. Bölüm: Gürültüden bir ada, gerçekten zemine benzeyen bir zemin</a></li>
<li><a href="/tr/blog/2026-05-14-open-world-browser-part-28-grass-and-occlusion.html">28. Bölüm: Ufka kadar çim ve kendini gizleyen zemin</a></li>
<li><a href="/tr/blog/2026-05-15-open-world-browser-part-29-pluggable-character.html">29. Bölüm: Tek kontrolcü, her gövde</a></li>
<li><a href="/tr/blog/2026-06-04-open-world-browser-part-30-collision-aware-camera.html">30. Bölüm: Duvarlara saygı duyan bir kamera</a></li>
</ol>
<h2 id="canlı-spike-haritası" tabindex="-1">Canlı spike haritası <a class="header-anchor" href="#canlı-spike-haritası" aria-label="Permalink to &quot;Canlı spike haritası&quot;"></a></h2>
<p>Teknik zaman çizelgesinde doğrudan ilerlemek istiyorsanız bunlarla başlayın.</p>
<p><a href="/tr/spikes/01-terrain/" target="_blank">Spike 1</a> arazi ve örnekleme · <a href="/tr/blog/spike-source?spike=01-terrain">kaynak</a><br>
<a href="/tr/spikes/02-rapier-worker/" target="_blank">Spike 2</a> worker fiziği · <a href="/tr/blog/spike-source?spike=02-rapier-worker">kaynak</a><br>
Spike 3 Durable Object yayın yükü testi, bağımsız bir sayfa olarak değil hizmet betiği olarak çalıştırıldı<br>
Spike 4 mobil kalite kısıtlamaları, Spike 1 sorgu parametresi aracılığıyla test edildi<br>
Spike 5 LLM davranış güvenilirliği, bağımsız bir sayfa olarak değil betik olarak çalıştırıldı<br>
<a href="/tr/spikes/06-chunk-streaming/" target="_blank">Spike 6</a> parça yükleme ve değiştirme · <a href="/tr/blog/spike-source?spike=06-chunk-streaming">kaynak</a><br>
<a href="/tr/spikes/07-gpu-vegetation/" target="_blank">Spike 7</a> yoğunluk haritalarından bitki örtüsü · <a href="/tr/blog/spike-source?spike=07-gpu-vegetation">kaynak</a><br>
<a href="/tr/spikes/08-terrain-material/" target="_blank">Spike 8</a> arazi malzemesi maliyeti · <a href="/tr/blog/spike-source?spike=08-terrain-material">kaynak</a><br>
<a href="/tr/spikes/09-csm-shadows/" target="_blank">Spike 9</a> kademeli gölge bütçesi · <a href="/tr/blog/spike-source?spike=09-csm-shadows">kaynak</a><br>
<a href="/tr/spikes/10-clipmap-geomorph/" target="_blank">Spike 10</a> clipmap'ler ve geomorphing · <a href="/tr/blog/spike-source?spike=10-clipmap-geomorph">kaynak</a><br>
<a href="/tr/spikes/11-chunk-streaming/" target="_blank">Spike 11</a> yükseklik haritası parçalarını akışla yükleme · <a href="/tr/blog/spike-source?spike=11-chunk-streaming">kaynak</a><br>
<a href="/tr/spikes/12-webgpu-marching-cubes/" target="_blank">Spike 12</a> WebGPU marching cubes · <a href="/tr/blog/spike-source?spike=12-webgpu-marching-cubes">kaynak</a><br>
<a href="/tr/spikes/13-threejs-webgpu/" target="_blank">Spike 13</a> WebGPU entegrasyon temeli · <a href="/tr/blog/spike-source?spike=13-threejs-webgpu">kaynak</a><br>
<a href="/tr/spikes/14-threejs-webgpu-incremental/" target="_blank">Spike 14</a> kademeli sağlamlaştırma · <a href="/tr/blog/spike-source?spike=14-threejs-webgpu-incremental">kaynak</a><br>
<a href="/tr/spikes/15-transvoxel-seam/" target="_blank">Spike 15</a> dikiş iskeleti · <a href="/tr/blog/spike-source?spike=15-transvoxel-seam">kaynak</a><br>
<a href="/tr/spikes/16-transvoxel-face/" target="_blank">Spike 16</a> ilk Transvoxel yüzü · <a href="/tr/blog/spike-source?spike=16-transvoxel-face">kaynak</a><br>
<a href="/tr/spikes/17-dual-mc-lod/" target="_blank">Spike 17</a> ikili MC LOD · <a href="/tr/blog/spike-source?spike=17-dual-mc-lod">kaynak</a><br>
<a href="/tr/spikes/18-transvoxel-heightmap-seam/" target="_blank">Spike 18</a> yükseklik haritası dikişi · <a href="/tr/blog/spike-source?spike=18-transvoxel-heightmap-seam">kaynak</a><br>
<a href="/tr/spikes/19-transvoxel-corner-grid/" target="_blank">Spike 19</a> karma çözünürlüklü köşe · <a href="/tr/blog/spike-source?spike=19-transvoxel-corner-grid">kaynak</a><br>
<a href="/tr/spikes/20-gpu-transvoxel-corner/" target="_blank">Spike 20</a> GPU köşe dikişi · <a href="/tr/blog/spike-source?spike=20-gpu-transvoxel-corner">kaynak</a><br>
<a href="/tr/spikes/21-gpu-mc-transvoxel-corner/" target="_blank">Spike 21</a> GPU MC köşe dikişi · <a href="/tr/blog/spike-source?spike=21-gpu-mc-transvoxel-corner">kaynak</a><br>
<a href="/tr/spikes/22-gpu-mc-heightmap-fallback/" target="_blank">Spike 22</a> MC'den HM'ye geri dönüş · <a href="/tr/blog/spike-source?spike=22-gpu-mc-heightmap-fallback">kaynak</a><br>
<a href="/tr/spikes/23-policy-chunk-modes/" target="_blank">Spike 23</a> politika tabanlı parça modları · <a href="/tr/blog/spike-source?spike=23-policy-chunk-modes">kaynak</a><br>
<a href="/tr/spikes/24-gpu-clipmap-rings/" target="_blank">Spike 24</a> clipmap halkaları ve gökyüzü sisi · <a href="/tr/blog/spike-source?spike=24-gpu-clipmap-rings">kaynak</a><br>
<a href="/tr/spikes/25-heightmap-brush/" target="_blank">Spike 25</a> örneklenmiş veriler üzerinde yükseklik haritası fırçası · <a href="/tr/blog/spike-source?spike=25-heightmap-brush">kaynak</a><br>
<a href="/tr/spikes/26-sdf-brush/" target="_blank">Spike 26</a> GPU hesaplama üzerinden SDF fırçası · <a href="/tr/blog/spike-source?spike=26-sdf-brush">kaynak</a><br>
<a href="/tr/spikes/27-hm-mc-brush/" target="_blank">Spike 27</a> HM + MC + fırça entegrasyonu · <a href="/tr/blog/spike-source?spike=27-hm-mc-brush">kaynak</a><br>
<a href="/tr/spikes/28-multi-material/" target="_blank">Spike 28</a> çok malzemeli dokulama · <a href="/tr/blog/spike-source?spike=28-multi-material">kaynak</a><br>
<a href="/tr/spikes/29-vegetation/" target="_blank">Spike 29</a> bitki örtüsü ve gölgelendirici tabanlı çim · <a href="/tr/blog/spike-source?spike=29-vegetation">kaynak</a><br>
<a href="/tr/spikes/30-physics/" target="_blank">Spike 30</a> arazi fiziği ve karakter kontrolcüsü · <a href="/tr/blog/spike-source?spike=30-physics">kaynak</a><br>
<a href="/tr/spikes/31-multiplayer-sync/" target="_blank">Spike 31</a> çok oyunculu arazi eşitleme · <a href="/tr/blog/spike-source?spike=31-multiplayer-sync">kaynak</a><br>
<a href="/tr/spikes/32-water-swimming/" target="_blank">Spike 32</a> su ve yüzme · <a href="/tr/blog/spike-source?spike=32-water-swimming">kaynak</a><br>
<a href="/tr/spikes/33-code-structure/" target="_blank">Spike 33</a> kod yapısını yeniden düzenleme · <a href="/tr/blog/spike-source?spike=33-code-structure">kaynak</a><br>
<a href="/tr/spikes/34-world-authoring/" target="_blank">Spike 34</a> dünya içinde içerik oluşturma · <a href="/tr/blog/spike-source?spike=34-world-authoring">kaynak</a><br>
<a href="/tr/spikes/35-combat-animations/" target="_blank">Spike 35</a> savaş animasyonları ve yeniden hedefleme · <a href="/tr/blog/spike-source?spike=35-combat-animations">kaynak</a><br>
<a href="/tr/spikes/36-polyhaven-models/" target="_blank">Spike 36</a> canlı Poly Haven varlık araması · <a href="/tr/blog/spike-source?spike=36-polyhaven-models">kaynak</a><br>
<a href="/tr/spikes/37-ai-scattering/" target="_blank">Spike 37</a> yapay zekâ destekli nesne dağıtımı · <a href="/tr/blog/spike-source?spike=37-ai-scattering">kaynak</a><br>
<a href="/tr/spikes/38-imposters/" target="_blank">Spike 38</a> oktahedral imposter'lar · <a href="/tr/blog/spike-source?spike=38-imposters">kaynak</a><br>
<a href="/tr/spikes/39-parallax-pom/" target="_blank">Spike 39</a> paralaks örtülme eşleme · <a href="/tr/blog/spike-source?spike=39-parallax-pom">kaynak</a><br>
<a href="/tr/spikes/40-visibility-buffer/" target="_blank">Spike 40</a> görünürlük tamponu işleyicisi · <a href="/tr/blog/spike-source?spike=40-visibility-buffer">kaynak</a><br>
<a href="/tr/spikes/41-imposter-forest/" target="_blank">Spike 41</a> bir ormandaki imposter'lar · <a href="/tr/blog/spike-source?spike=41-imposter-forest">kaynak</a><br>
<a href="/tr/spikes/42-imposter-flicker/" target="_blank">Spike 42</a> imposter titreşimi düzeltmesi · <a href="/tr/blog/spike-source?spike=42-imposter-flicker">kaynak</a><br>
<a href="/tr/spikes/43-clouds-atmosphere/" target="_blank">Spike 43</a> atmosfer ve hacimsel bulutlar · <a href="/tr/blog/spike-source?spike=43-clouds-atmosphere">kaynak</a><br>
<a href="/tr/spikes/44-meshlet-clusters/" target="_blank">Spike 44</a> meshlet Hi-Z ayıklama · <a href="/tr/blog/spike-source?spike=44-meshlet-clusters">kaynak</a><br>
<a href="/tr/spikes/45-avatar-network-sync/" target="_blank">Spike 45</a> toplu avatar iskelet deformasyonu ve ağ eşitleme · <a href="/tr/blog/spike-source?spike=45-avatar-network-sync">kaynak</a><br>
<a href="/tr/spikes/46-proximity-voice/" target="_blank">Spike 46</a> yakınlık tabanlı sesli sohbet · <a href="/tr/blog/spike-source?spike=46-proximity-voice">kaynak</a><br>
<a href="/tr/spikes/47-world-persistence/" target="_blank">Spike 47</a> sunucu yetkili dünya kalıcılığı · <a href="/tr/blog/spike-source?spike=47-world-persistence">kaynak</a><br>
Spike 48 avatar donanımı entegrasyonu, sonraki spike'lar tarafından paylaşılan kod olarak yeniden kullanıldı (bağımsız sayfası yok)<br>
<a href="/tr/spikes/49-gpu-wind-props/" target="_blank">Spike 49</a> nesneler ve yapraklar üzerinde GPU rüzgârı · <a href="/tr/blog/spike-source?spike=49-gpu-wind-props">kaynak</a><br>
<a href="/tr/spikes/50-universal-characters/" target="_blank">Spike 50</a> evrensel karakterler ve giyilebilir öğeler · <a href="/tr/blog/spike-source?spike=50-universal-characters">kaynak</a><br>
<a href="/tr/spikes/51-water-ssr-caustics/" target="_blank">Spike 51</a> ekran uzayı yansımalı su · <a href="/tr/blog/spike-source?spike=51-water-ssr-caustics">kaynak</a><br>
<a href="/tr/spikes/52-water-planar/" target="_blank">Spike 52</a> düzlemsel aynalı su · <a href="/tr/blog/spike-source?spike=52-water-planar">kaynak</a><br>
<a href="/tr/spikes/53-water-pro/" target="_blank">Spike 53</a> üretime hazır su kütüphanesi · <a href="/tr/blog/spike-source?spike=53-water-pro">kaynak</a>
<a href="/tr/spikes/54-procgen-island/" target="_blank">Spike 54</a> prosedürel ada üretimi · <a href="/tr/blog/spike-source?spike=54-procgen-island">kaynak</a><br>
<a href="/tr/spikes/55-terrain-shading/" target="_blank">Spike 55</a> arazi gölgelendirme ve döşeme tekrarlarını giderme · <a href="/tr/blog/spike-source?spike=55-terrain-shading">kaynak</a><br>
<a href="/tr/spikes/56-grass/" target="_blank">Spike 56</a> GPU tabanlı çapraz dörtgen çimler · <a href="/tr/blog/spike-source?spike=56-grass">kaynak</a><br>
<a href="/tr/spikes/57-terrain-occlusion/" target="_blank">Spike 57</a> arazi örtülme ayıklaması · <a href="/tr/blog/spike-source?spike=57-terrain-occlusion">kaynak</a><br>
<a href="/tr/spikes/58-pluggable-character/" target="_blank">Spike 58</a> takılabilir karakter kontrolcüsü · <a href="/tr/blog/spike-source?spike=58-pluggable-character">kaynak</a><br>
<a href="/tr/spikes/59-pluggable-with-avatar/" target="_blank">Spike 59</a> gerçek avatarlı kontrolcü · <a href="/tr/blog/spike-source?spike=59-pluggable-with-avatar">kaynak</a><br>
<a href="/tr/spikes/60-polygon-animations/" target="_blank">Spike 60</a> Synty poligon animasyonları · <a href="/tr/blog/spike-source?spike=60-polygon-animations">kaynak</a></p>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/why-webgpu-engine-hero.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[A Breaker Belt: Snake ile Arkanoid buluşuyor, üç günde vibe kodlamayla geliştirildi]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-02-18-a-breaker-belt</link>
            <guid>https://app.cinevva.com/tr/blog/2026-02-18-a-breaker-belt</guid>
            <pubDate>Wed, 18 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Kozmik bir yılan; tepkisel müzik, yapay zekâ anlatımı ve 23 tuğla türü eşliğinde 50 dalga boyunca tuğlaları kırıyor. İki kişi. Üç gün. Web, mobil ve PC.]]></description>
            <content:encoded><![CDATA[<h1 id="a-breaker-belt-snake-ile-arkanoid-bulusuyor-uc-gunde-vibe-kodlamayla-gelistirildi" tabindex="-1">A Breaker Belt: Snake ile Arkanoid buluşuyor, üç günde vibe kodlamayla geliştirildi <a class="header-anchor" href="#a-breaker-belt-snake-ile-arkanoid-bulusuyor-uc-gunde-vibe-kodlamayla-gelistirildi" aria-label="Permalink to &quot;A Breaker Belt: Snake ile Arkanoid buluşuyor, üç günde vibe kodlamayla geliştirildi&quot;"></a></h1>
<p><em>Cinevva CEO'su <a href="/tr/about.html">Mariana Muntean</a> tarafından</em></p>
<img src="https://cdn.cinevva.com/blog/breaker-belt-cover.webp" alt="A Breaker Belt oynanışı: uzayda tuğlaları kıran neon kozmik bir yılan" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Yılanınızın raket olduğu ve tuğlaların karşılık verdiği bir oyun yaptık. Web, mobil ve PC için yayınlandı. İkimizin yaklaşık üç gününü aldı. Aralıklı çalıştık, yoğun mesai yapmadık. Üstelik oynaması gerçekten eğlenceli.</p>
<p>Dikkat etmeye değer olan da bu son kısım.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:8px;margin:1.5rem 0">
<iframe src="https://www.youtube.com/embed/VaFkfCT3OuU" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0" allow="accelerometer;autoplay;clipboard-write;encrypted-media;gyroscope;picture-in-picture" allowfullscreen></iframe>
</div>
<h2 id="kimsenin-istemedigi-birlesim" tabindex="-1">Kimsenin istemediği birleşim <a class="header-anchor" href="#kimsenin-istemedigi-birlesim" aria-label="Permalink to &quot;Kimsenin istemediği birleşim&quot;"></a></h2>
<p>Snake; büyüme ve mekânsal farkındalık üzerine kurulu. Arkanoid ise refleksler ve açı tahminiyle ilgili. Tamamen farklı tasarım felsefelerinden geliyorlar ve ikisini bir araya getirmek, kibarca reddedilecek türden bir fikir gibi görünüyor.</p>
<p>Ama <a href="https://app.cinevva.com/engine" target="_blank" rel="noreferrer">A Breaker Belt</a> bunu başarıyor. Sürüklenme metali omurlar ve kuyruklu yıldız ipeğinden örülmüş, yaşayan bir neon akım yayı olan kozmik bir yılansınız; kırılabilir bloklarla dolu bir asteroit kuşağında ilerliyorsunuz. Başınız raket görevi görüyor. Uzayan kuyruğunuz hem en güçlü silahınız hem de en sürekli tehdidiniz. Küreler gövdenizden sekerek tuğlaları parçalıyor, ancak tek bir yanlış dönüşle kendi kuyruğunuza çarparsanız oyun bitiyor.</p>
<p>Bu, genellikle kimse oynama fırsatı bulamadan rafa kaldırılan türler arası tuhaf deneylerden biri. Çünkü sıra dışı bir fikrin işe yarayıp yaramadığını anlamanın geliştirme maliyeti geleneksel olarak aylarla ölçülüyordu. Burada ise birkaç öğleden sonrayla ölçüldü.</p>
<h2 id="gercekte-neler-yayınlandı" tabindex="-1">Gerçekte neler yayınlandı? <a class="header-anchor" href="#gercekte-neler-yayınlandı" aria-label="Permalink to &quot;Gerçekte neler yayınlandı?&quot;"></a></h2>
<p>Bunu ilginç kılan şey kapsamı. Bu, geçici dikdörtgenlerden oluşan ve sesi bile olmayan bir game jam prototipi değil.</p>
<p>Oyun 50 dalga boyunca devam ediyor. Üstelik bunlar aynı tuğla duvarının 50 farklı çeşidi değil. Dizilimler, oyuncuyu oyuna alıştıran yumuşak kavislerden başlayıp yanlardaki boşluklardan açılı atışlar yapmayı gerektiren kale halkalarına, ardından hassas yönlendirme isteyen tek kare genişliğindeki açıklıklara sahip katmanlı çapraz labirentlere dönüşüyor. Patlayıcı tuğlalar komşularını havaya uçuruyor. Hayalet tuğlalar yanıp sönerek var olup yok oluyor. Yenilenen tuğlalar kırıldıktan sonra kendilerini onarıyor ve sizi soldan sağa ilerlemek yerine hedeflerinizi önceliklendirmeye zorluyor. Portal tuğlaları kürelerinizi arenanın bir ucundan diğerine ışınlıyor. Kütleçekim kuyuları atışlarınızı yavaş, kıvrımlı ilahilere dönüştürüyor. Lazer yayıcılar boşlukta kırmızı çizgiler çiziyor. Taklitçi tuğlalar, aksine karar verene kadar zararsız görünüyor. 15. dalgaya geldiğinizde, bir bulmacadan çok alışkanlıklarınızı öğrenen canlı bir sistem gibi hissettiren bir ortamda yolunuzu buluyorsunuz.</p>
<p>Müzik basit bir döngüden ibaret değil. Oynanışınıza göre gelişen tepkisel bir müzik sistemi. Altyapı; 140 BPM'de Mi minör tonunda bas hattı, solo synthesizer, pad, kick, trampet ve hi-hat kullanıyor. Aksiyon yoğunlaştıkça ek perküsyon ve synthesizer katmanları yavaşça devreye giriyor. Dalgalar arasında ortam sakinleştiğinde ise ambiyans pad'leri öne çıkıyor. Müzik sizinle birlikte nefes alıyor. Profesyonel bir besteci bu düzeyde bir duyarlılığı ayarlamak için haftalar harcardı. Burada ise yaratıcı akışın doğal bir parçasıydı.</p>
<p>Ses efektleri ücretsiz bir paketten alınmış örnekler değil. Her tuğla parçalanması, güçlendirme kazanımı, küre sekmesi ve çarpışma gerçek zamanlı olarak sentezleniyor. Başa ve kuyruğa çarpıldığında farklı perdeler kullanılıyor. Uzay atmosferi için sıcak bir yankı var. Seslerin sertleşmeden tatmin edici kalması için alçak geçiren filtre uygulanıyor. Bir kombo zinciri yaptığınızda bunu ekrandan önce ses size bildiriyor.</p>
<p>Bir de hikâye anlatımı var. Her dalga, yapay zekâ tarafından üretilen bir sesin aktardığı anlatı bölümüyle açılıyor. Metinlerin gerçekten kendine özgü bir karakteri var. Birinci dalga: &quot;Ona Kırıcı Kuşak diyorlar: eski yıldızın çevresinde bir uyarı gibi dönen, tasarlanmış bir enkaz şeridi.&quot; 38. dalgaya geldiğinizde: &quot;Kuşak artık bir duvar gibi değil, bir zihin gibi hissettiriyor. Reflekslerinizi değil, alışkanlıklarınızı sınıyor. Alışkanlığınızı kırıyorsunuz. Kuşak bunu fark ediyor.&quot; Uzayda neden tuğla kıran bir yılan olduğunuzu önemsemenizi sağlayan, 50 bölümlük bir kozmik mitoloji.</p>
<p>Arka planlar da gelişiyor. İlk dalgalarda hafif meteor yağmurlarıyla sakin çivit mavisi yıldız alanları var. Oyunun ortalarına gelindiğinde kutup ışığı şeritleri ve bulutsu bulutları beliriyor. Oyunun sonlarında ise neredeyse siyah uzayın önünde keskin camgöbeği izleriyle tam anlamıyla bir İyon Fırtınası yaşanıyor. 15. dalga ve sonrasında Olay Ufku bölgesindesiniz: yavaşça hareket eden bulutsu lifleri ve belli belirsiz kara delik merceklenmeleriyle bölünen derin bir boşluk. Oyun, ilerlemeyi zorluk kadar atmosfer aracılığıyla da aktarıyor.</p>
<p>Tüm bunlar klavye, gamepad veya dokunmatik ekranla çalışıyor. Tek bir kod tabanından web, mobil ve PC için yayınlandı. Ayrı derlemeler yok. Portlama yok.</p>
<h2 id="ihtiyac-duyulmayan-ekip" tabindex="-1">İhtiyaç duyulmayan ekip <a class="header-anchor" href="#ihtiyac-duyulmayan-ekip" aria-label="Permalink to &quot;İhtiyaç duyulmayan ekip&quot;"></a></h2>
<p>İşte her oyun geliştiricisinin durup düşünmesini gerektirecek kısım.</p>
<p>Bu içerik derinliğine sahip bir oyun için normalde bir oyun tasarımcısı, birkaç programcı, bir 2D sanatçısı, bir ses tasarımcısı, bir besteci, bir seviye tasarımcısı, bir anlatı yazarı ve kalite güvence uzmanları gerekirdi. Yani sekiz veya dokuz kişi. Mütevazı bir bağımsız oyun geliştirme temposuyla üç ila altı aylık koordineli bir çalışmadan söz ediyoruz. Günlük toplantılar, Jira görevleri, varlık üretim hatları ve platforma özel hata ayıklama süreçleri.</p>
<p>İkimiz bunu uzun bir hafta sonunda <a href="https://app.cinevva.com/engine" target="_blank" rel="noreferrer">Cinevva Engine</a> üzerinde yaptık.</p>
<p>Gereken yetenek değişmedi. Değişen, yaratıcı niyet ile uygulama yükü arasındaki orandı. Zamanımızı bunu gerçekleştirmek için araçlarla boğuşmaya değil, oyunun nasıl hissettirmesi gerektiğine karar vermeye harcadık.</p>
<h2 id="bir-seyler-uretiyorsanız-bu-neden-onemli" tabindex="-1">Bir şeyler üretiyorsanız bu neden önemli? <a class="header-anchor" href="#bir-seyler-uretiyorsanız-bu-neden-onemli" aria-label="Permalink to &quot;Bir şeyler üretiyorsanız bu neden önemli?&quot;"></a></h2>
<p>İlginç soru, yapay zekâ araçlarının oyunları daha hızlı yapmaya yardımcı olup olamayacağı değil. Bu zaten yanıtlandı. Asıl ilginç soru, eskiden denenemeyecek kadar riskli olan fikirlere ne olacağı.</p>
<p>&quot;Bir Arkanoid arenasında raket olduğunuz bir Snake oyunu&quot; hiçbir yapımcının yeşil ışık yakacağı türden bir fikir değil. Birkaç bağımsız geliştirici itch.io üzerinde bu birleşimin farklı çeşitlerini denedi (<a href="https://newdron.itch.io/breaksnake" target="_blank" rel="noreferrer">BreakSnake</a>, <a href="https://neop87.itch.io/snakeout" target="_blank" rel="noreferrer">SnakeOut</a>, <a href="https://merrak.itch.io/snake-break" target="_blank" rel="noreferrer">Snake Break</a>), ancak bunların hepsi küçük game jam deneyleri. Bu tür birleşimi daha önce tepkisel müzik, yapay zekâ anlatımı, düzinelerce tuğla türü ve giderek zorlaşan 50 dalgalık seviye tasarımıyla gerçek bir üretim sürecinden geçirilmedi. Geleneksel geliştirme süreçlerinde, riskli bir konsepte bu düzeyde incelik kazandırma fikri daha kimse tek satır kod yazmadan bir toplantıda elenirdi.</p>
<p>Tuhaf bir şeyi denemek üç aylık bütçe yerine bir öğleden sonraya mal olduğunda, sıra dışı fikirler hayata geçiriliyor. Bazıları da gerçekten iyi çıkıyor. A Breaker Belt bunlardan biri.</p>
<h2 id="oynayın-ya-da-kendinizinkini-yapın" tabindex="-1">Oynayın. Ya da kendinizinkini yapın. <a class="header-anchor" href="#oynayın-ya-da-kendinizinkini-yapın" aria-label="Permalink to &quot;Oynayın. Ya da kendinizinkini yapın.&quot;"></a></h2>
<p><a href="https://app.cinevva.com/engine" target="_blank" rel="noreferrer">A Breaker Belt</a> şu anda web, mobil ve PC'de oynanabilir. Sizde de bir şeyler geliştirme isteği uyandırırsa <a href="https://app.cinevva.com/engine" target="_blank" rel="noreferrer">Cinevva Engine</a> ücretsiz. Ne istediğinizi tarif edin, ortaya çıkanı yineleyerek geliştirin ve hazır olduğunda yayınlayın. <a href="https://app.cinevva.com/tools/music" target="_blank" rel="noreferrer">Müzik</a>, <a href="https://app.cinevva.com/tools/sfx" target="_blank" rel="noreferrer">ses efektleri</a>, <a href="https://app.cinevva.com/tools/flux" target="_blank" rel="noreferrer">görseller</a> ve <a href="https://app.cinevva.com/tools/hunyuan3d" target="_blank" rel="noreferrer">3D modeller</a> için gereken her şey yerleşik olarak sunuluyor.</p>
<p>Tuhaf oyun fikrinizin gerçeğe dönüşmesine yalnızca üç gün kalmış olabilir.</p>
<hr>
<p><em><a href="https://app.cinevva.com/engine" target="_blank" rel="noreferrer">A Breaker Belt'i oyna</a> | <a href="https://app.cinevva.com/engine" target="_blank" rel="noreferrer">Kendi oyununu geliştir</a> | <a href="https://cinevva.com/charts" target="_blank" rel="noreferrer">Topluluk oyunlarına göz at</a></em></p>
<p><strong>İlgili içerikler:</strong></p>
<ul>
<li><a href="/tr/signals/2026-03-13-vibe-coding-new-game-jam.html">Vibe kodlama yeni game jam'dir</a> — yapay zekâ araçlarının fikir ile prototip arasındaki mesafeyi nasıl ortadan kaldırdığı</li>
<li><a href="/tr/guides/game-jams-hackathons.html">Game Jam'ler ve Hackathon'lar</a> — sıra dışı birleşimleri mümkün kılan jam formatı</li>
<li><a href="/tr/guides/web-game-engines-comparison.html">Web Oyun Motorları Karşılaştırması</a> — web, mobil ve PC için oyun yayınlamaya uygun motorlar</li>
</ul>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/open-world-browser-series-cover.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Bir radyo istasyonu kuracağımızı beklemiyorduk]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-02-17-we-didnt-expect-a-radio-station</link>
            <guid>https://app.cinevva.com/tr/blog/2026-02-17-we-didnt-expect-a-radio-station</guid>
            <pubDate>Tue, 17 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Cinevva'da oyun geliştiricilerinin müzikler oluşturabilmesi için bir müzik üreticimiz var. İnsanlar sırf yapabildikleri için müzik üretmeye başladı. 362 parçanın ardından Cinevva Radio yayında.]]></description>
            <content:encoded><![CDATA[<h1 id="bir-radyo-istasyonu-kuracagımızı-beklemiyorduk" tabindex="-1">Bir radyo istasyonu kuracağımızı beklemiyorduk <a class="header-anchor" href="#bir-radyo-istasyonu-kuracagımızı-beklemiyorduk" aria-label="Permalink to &quot;Bir radyo istasyonu kuracağımızı beklemiyorduk&quot;"></a></h1>
<p><em><a href="/tr/about.html">Mariana Muntean</a>, Cinevva CEO'su</em></p>
<img src="https://cdn.cinevva.com/blog/cinevva-radio-lofi-cafe.png" alt="Soundstage, Voltage, Lo-Fi Cafe, Main Stage, Ivory Tower ve Electric Dreams dâhil 8 istasyonlu Cinevva Community Radio; şu anda Quiet Flute Drone çalıyor" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<p>Cinevva platformunda, oyun geliştiricilerinin lisans sorunlarıyla uğraşmadan oyun müzikleri ve ses efektleri oluşturabilmesi için bir <a href="https://app.cinevva.com/tools/music" target="_blank" rel="noreferrer">müzik üreticimiz</a> var. Sonrasında yaşananlarıysa hiç planlamamıştık. İnsanlar müzik yapmak istedikleri için müzik üretmeye başladı. Oyunlar veya projeler için değil. Sadece müzik üretmek için.</p>
<h2 id="bella-bay-iki-haftada-100-den-fazla-parca-yaptı" tabindex="-1">Bella Bay iki haftada 100'den fazla parça yaptı <a class="header-anchor" href="#bella-bay-iki-haftada-100-den-fazla-parca-yaptı" aria-label="Permalink to &quot;Bella Bay iki haftada 100'den fazla parça yaptı&quot;"></a></h2>
<p>Abartmıyorum. İçerik üreticilerimizden Bella Bay, yaklaşık iki haftada 100'den fazla parça üretti. Bunları <a href="https://cinevva.com/radio" target="_blank" rel="noreferrer">Cinevva Radio'da</a> dinlediğinizde gelişimi duyabiliyorsunuz. İlk parçalar birer deney. Sonrakilerse kendi tarzını bulmuş birinin eserleri gibi geliyor. Araçlarınızla boğuşurken bu tür bir yaratıcı ivme yakalanmaz. Araçlar aradan çekildiğinde yakalanır.</p>
<p>Bella Bay, yaklaşım bakımından aykırı bir örnek değil; yalnızca üretim miktarıyla öne çıkıyor. Platformun dört bir yanında insanlar müzik üreticisini oyun varlıkları hazırlamaya yarayan bir araç olarak değil, yaratıcı bir enstrüman olarak görmeye başladı. Daha önce hiç denemedikleri türleri keşfeden prodüktörler. Aradıkları sesi bulana kadar tekrar tekrar deneyen insanlar. Daha önce eksiksiz bir prodüksiyon araç setine erişememiş bağımsız sanatçılar bir anda bu imkâna kavuştu ve kendilerini bütünüyle müziğe verdi.</p>
<h2 id="biz-de-bir-radyo-kurduk" tabindex="-1">Biz de bir radyo kurduk <a class="header-anchor" href="#biz-de-bir-radyo-kurduk" aria-label="Permalink to &quot;Biz de bir radyo kurduk&quot;"></a></h2>
<p>Bunu yapmamız gerekiyordu.</p>
<p>İnsanların hesaplarında duran bunca parça vardı ama bunların bir araya geldiği ortak bir alan yoktu. Başkalarının neler ürettiğini keşfetmenin bir yolu yoktu. Gününüzün gidişatını değiştirecek bir parçaya tesadüfen rastlama imkânı yoktu.</p>
<p><a href="https://cinevva.com/radio" target="_blank" rel="noreferrer">Cinevva Radio</a> artık yayında. Sekiz istasyon. Topluluk tarafından oluşturulan 362 parça ve bu sayı her geçen gün artıyor. Şarkıların her biri platformdaki biri tarafından yapıldı. Radyoyu açtığınız anda bir şeyler çalıyor. Arama yapmanız gerekmiyor. Karar vermeniz gerekmiyor. Yalnızca dinliyorsunuz.</p>
<p><strong><a href="https://cinevva.com/radio#cinematic" target="_blank" rel="noreferrer">Soundstage</a></strong> en büyük istasyonumuz. Sinematik ve destansı müziklerden oluşan 111 parça var. Açıkçası bunu beklemiyordum. İnsanlar dramatik, film tarzı müzikler yapmaya bayılıyor.</p>
<p><strong><a href="https://cinevva.com/radio#mixed" target="_blank" rel="noreferrer">Discovery</a></strong> hiçbir türe tam olarak uymayan her şeyi bir araya getiriyor. 78 parça. Latin ritimlerinin yanında Afrobeats, onun yanında country, hemen ardındaysa tanımlaması imkânsız bir şey. Bu istasyon çılgınca.</p>
<p><strong><a href="https://cinevva.com/radio#pop" target="_blank" rel="noreferrer">Main Stage</a></strong> pop ve vokalli parçalara ayrıldı. Eksiksiz şarkı sözleri ve vokalleri olan 56 parça var. İnsanlar aşk şarkıları, ayrılık şarkıları, ilahiler ve baladlar yazıyor. Bazıları gerçekten akılda kalıcı.</p>
<p><strong><a href="https://cinevva.com/radio#rock" target="_blank" rel="noreferrer">Voltage</a></strong> rock ve metal istasyonumuz. 53 parça var. Gitar riffleri, punk enerjisi, grunge ve hard rock. Çalışırken bu istasyonu açık tutuyorum.</p>
<p><strong><a href="https://cinevva.com/radio#lofi" target="_blank" rel="noreferrer">Lo-Fi Cafe</a></strong> tam da adından bekleyeceğiniz gibi. Ders çalışırken, iş yaparken veya yalnızca keyifli vakit geçirirken dinleyebileceğiniz 25 sakin ambient parça.</p>
<p><strong><a href="https://cinevva.com/radio#electronic" target="_blank" rel="noreferrer">Electric Dreams</a></strong> 22 elektronik ve synth parça içeriyor. Synthwave, techno, EDM, drum and bass.</p>
<p><strong><a href="https://cinevva.com/radio#classical" target="_blank" rel="noreferrer">Ivory Tower</a></strong> klasik ve orkestral müzik istasyonumuz. 10 parça var. Piyano eserleri, yaylı düzenlemeleri ve senfonik çalışmalar. Küçük ama büyüyor.</p>
<p><strong><a href="https://cinevva.com/radio#hiphop" target="_blank" rel="noreferrer">The Cipher</a></strong> hip-hop ve rap istasyonumuz. Şimdilik 7 parça var. En yeni istasyonumuz ve hâlâ kendi sesini buluyor.</p>
<h2 id="dinlerken-ne-goruyorsunuz" tabindex="-1">Dinlerken ne görüyorsunuz? <a class="header-anchor" href="#dinlerken-ne-goruyorsunuz" aria-label="Permalink to &quot;Dinlerken ne görüyorsunuz?&quot;"></a></h2>
<p><a href="https://cinevva.com/radio" target="_blank" rel="noreferrer">Cinevva Radio'yu</a> açtığınızda canlı bir yayınla karşılaşıyorsunuz. Onu bir çalma listesi uygulamasından çok gerçek bir radyo istasyonu gibi düşünün. Parçalar kesintisiz çalıyor. Gerçek zamanlı tepki verebilir, diğer dinleyicilerle sohbet edebilir ve her parçayı kimin yaptığını görebilirsiniz.</p>
<p>İçerik üreticilerinin parçaları çalarken adları ekranda gösteriliyor. Adları, istemleri ve parçanın türü. Hoşunuza giden bir şey duyarsanız onu kimin yaptığını biliyorsunuz. Bu, üzerine bir keşif katmanı eklenmiş, topluluk tarafından oluşturulan içerik. Neyin dinlenmeye değer olduğuna karar veren algoritmalar yok. Aracılar yok. Bir parça yaparsınız, türüne uygun istasyona eklenir ve insanlar onu dinler.</p>
<h2 id="bu-bir-ozellikten-daha-fazlası" tabindex="-1">Bu, bir özellikten daha fazlası <a class="header-anchor" href="#bu-bir-ozellikten-daha-fazlası" aria-label="Permalink to &quot;Bu, bir özellikten daha fazlası&quot;"></a></h2>
<p>Müzik prodüksiyonu onlarca yıl boyunca pahalı yazılımlar, yıllarca eğitim ve çoğu insanın karşılayamayacağı ekipmanlara erişim gerektirdi. Şimdiyse farklı türde bir içerik üreticisinin ortaya çıktığını görüyoruz. Notalar ve ölçüler yerine betimlemeler ve duygularla düşünen insanlar.</p>
<p>&quot;Bozuk bir piyanoyla yağmurlu gece cazı&quot; yaratıcı bir yönlendirmedir. Bu istemi yazan kişi sanatsal bir seçim yaptı. Atmosferi, enstrümanları ve duygusal tonu yönlendirdi. Sadece piyano çalmıyor.</p>
<p>Bunun, ürettikleri eseri daha az geçerli kıldığını düşünmüyorum. Bence bu, &quot;müzisyen&quot; tanımının genişlediği anlamına geliyor. Bella Bay gibi birinin iki haftada sıfırdan yüz parçaya ulaşmasını görmek, yaratma arzusunun hep orada olduğunu gösteriyor. Eksik olan yalnızca araçlardı.</p>
<h2 id="sırada-ne-var" tabindex="-1">Sırada ne var? <a class="header-anchor" href="#sırada-ne-var" aria-label="Permalink to &quot;Sırada ne var?&quot;"></a></h2>
<p>Prodüktörlerin kataloglarını sergileyip takipçi kitlesi oluşturabileceği topluluk profilleri üzerinde çalışıyoruz. <a href="https://cinevva.com/charts" target="_blank" rel="noreferrer">Listeler sayfası</a> şimdiden tüm araçlarda oluşturulan topluluk eserlerini gösteriyor ve aynı enerjiyi özellikle müziğe de taşımak istiyoruz.</p>
<p>Ama şu anda radyo yayında. <a href="https://cinevva.com/radio" target="_blank" rel="noreferrer">Gidin, dinleyin</a>. Kendi parçalarınızı yapmak isterseniz <a href="https://app.cinevva.com/tools/music" target="_blank" rel="noreferrer">müzik üreticisini</a> ücretsiz kullanabilirsiniz. Belki sizin parçanız da yayına girer.</p>
<hr>
<p><em><a href="https://cinevva.com/radio" target="_blank" rel="noreferrer">Cinevva Radio'yu dinleyin</a> | <a href="https://app.cinevva.com/tools/music" target="_blank" rel="noreferrer">Müzik yapın</a> | <a href="https://cinevva.com/charts" target="_blank" rel="noreferrer">Topluluk eserlerine göz atın</a></em></p>
<p><strong>İlgili içerikler:</strong></p>
<ul>
<li><a href="/tr/guides/frontier-gen-ai-models.html">Öncü Açık Kaynak Üretken Yapay Zekâ Modelleri</a> — perde arkasındaki yapay zekâ müzik ve ses modelleri</li>
<li><a href="/tr/tutorials/web-audio-api-games.html">Oyunlar için Web Audio API</a> — tarayıcıda etkileşimli ses geliştirme</li>
<li><a href="/tr/signals/2026-03-13-vibe-coding-new-game-jam.html">Vibe coding yeni game jam'dir</a> — niyeti tarif etmenin nasıl başlıca yaratıcı girdiye dönüştüğü</li>
</ul>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/cinevva-radio-lofi-cafe.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Yapay zekâ çağında sezgisel zihin]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-02-10-the-intuitive-mind</link>
            <guid>https://app.cinevva.com/tr/blog/2026-02-10-the-intuitive-mind</guid>
            <pubDate>Tue, 10 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Jensen Huang, salt matematik becerilerinin artık sıradan bir meta olduğunu söylüyor. İşte bunun SAT sınavında başarısız olan, kuralları göz ardı eden ve insanların gerçekten istediği bir şey geliştiren biri için neden anlamlı olduğu.]]></description>
            <content:encoded><![CDATA[<h1 id="yapay-zeka-cagında-sezgisel-zihin" tabindex="-1">Yapay zekâ çağında sezgisel zihin <a class="header-anchor" href="#yapay-zeka-cagında-sezgisel-zihin" aria-label="Permalink to &quot;Yapay zekâ çağında sezgisel zihin&quot;"></a></h1>
<p><em>Cinevva CEO'su <a href="/tr/about.html">Mariana Muntean</a> tarafından</em></p>
<img src="https://cdn.cinevva.com/blog/game-jam-houston-2018.png" alt="Mariana Muntean, 2018'de Houston'da düzenlenen 48 saatlik bir game jam sırasında sınıf arkadaşlarıyla" style="width:100%;border-radius:8px;margin:1.5rem 0" />
<small>2018'de Houston'da düzenlenen 48 saatlik bir game jam sırasında sınıf arkadaşlarıyla</small>
<p>Yapay zekâ, salt mantığı ve hesaplama becerisini esasen sıradan bir metaya dönüştürdü. Eskiden yücelttiğimiz becerilerin tümünü — zihinden hesaplama, örüntü tanıma, karmaşık algoritmalar üzerinde yılmadan çalışma yeteneği — artık yapay zekâ yapıyor. Daha hızlı. Daha iyi. Yorulmadan. Bunları hâlâ bilmemiz gerekiyor mu? Kesinlikle, ancak algılar değişiyor. Artık herkesin yeni çağa, sezgisel etkileşim ve sonuçlar çağına uyum sağlaması gerekiyor.</p>
<p>NVIDIA CEO'su <a href="https://business.columbia.edu/insights/digital-future/nvidia-ceo-jensen-huang-reveals-keys-ai-and-leadership" target="_blank" rel="noreferrer">Jensen Huang'a</a> göre artık önemli olan, veriler ortaya çıkmadan önce bir “hissi” sezebilmek ve köşenin ardını görebilmek. Teknik okuryazarlık ile derin empatinin kesişimi. Silikonun erişemeyeceği sezgisel anlayış.</p>
<p>Onun kadar güvenilir birinin, tüm yaşam yolculuğumu bu kadar doğrudan doğrulayan bir şey söylediğini daha önce hiç duymamıştım.</p>
<h2 id="sat-ve-benim-icin-kurulmamıs-sistem" tabindex="-1">SAT ve benim için kurulmamış sistem <a class="header-anchor" href="#sat-ve-benim-icin-kurulmamıs-sistem" aria-label="Permalink to &quot;SAT ve benim için kurulmamış sistem&quot;"></a></h2>
<p>Birkaç yıl önce SAT'ye girdim ve başarısız oldum. Bununla gurur duymuyorum ama bir daha da denemedim. Bütün bu süreçte temelden yanlış gelen bir şey vardı ve insanlar ne kadar çok “daha sıkı çalış, tekrar gir” dese de bu duygudan kurtulamadım.</p>
<p>Geriye dönüp baktığımda haklı olduğumu düşünüyorum.</p>
<p>SAT, Amerikan eğitim sistemi için tasarlanmıştır. Kulağa bariz geliyor ama bunun sonuçları oldukça derin. Amerikan liselerinde belirli örüntüler, soru türleri ve problemleri çerçeveleme biçimleri öğretilir. Öğrenciler, ilkokuldan itibaren bu standartlaştırılmış sınav tarzının içinde büyür. SAT'ye girdikleri zamana kadar sınavın ritmini içselleştirmiş olurlar.</p>
<p>Uluslararası öğrenciler bu avantaja sahip değil. Farklı eğitim felsefelerine sahip sistemlerden geliyoruz. Avrupa'daki okullar genellikle kapsam yerine derinliği, çoktan seçmeli sınavlar yerine yazılı sınavları, optik formlar yerine sözlü savunmayı öne çıkarır. Asya sistemlerinin kendi standartlaştırılmış sınavları vardır ancak bunlar farklı şeyleri farklı şekillerde ölçer. Güney Amerika, Afrika ve Orta Doğu'daki eğitim geleneklerinin her biri kendi mantığını taşır.</p>
<p>Uluslararası bir öğrenciyi SAT'ye soktuğunuzda yalnızca bilgisini ölçmezsiniz. İçeriğe hâkim olduğunu göstermeye çalışırken yabancı bir sınav kültürüne ne kadar hızlı uyum sağlayabildiğini de ölçersiniz. Akademik becerisi kadar kültürel akıcılığını da sınarsınız.</p>
<p>Bütün bir yaz boyunca buna hazırlanmam ve sınavdan kusursuz bir sonuç almam bekleniyordu. Baştan sona yeni bir sınav kültürünü öğrenmek, kendi eğitimsel içgüdülerimi unutmak ve Amerikalı kabul görevlilerini etkileyecek bir düzeyde performans göstermek. Hem de yalnızca birkaç ay içinde.</p>
<p>Bunu yapmamayı seçtim.</p>
<p>Gençken farklı şekillerde zekisinizdir. Sezgisel şekillerde. O sırada nedenini tam olarak ifade edemesem de kendime bir yol açıyordum. İçimdeki bir şey bu sistemin bana ait olmadığını biliyordu.</p>
<h2 id="bunun-yerine-yaratıcı-cizgiyi-izlemek" tabindex="-1">Bunun yerine yaratıcı çizgiyi izlemek <a class="header-anchor" href="#bunun-yerine-yaratıcı-cizgiyi-izlemek" aria-label="Permalink to &quot;Bunun yerine yaratıcı çizgiyi izlemek&quot;"></a></h2>
<p>Oyun geliştirme ve tasarımı okudum çünkü insanların oynayıp etkileşime girebileceği sanal dünyalar oluşturmak için yaratıcılığı ve görsel efektleri kullanma fikrine bayılıyordum. Sanat ile teknolojinin, hikâye anlatıcılığı ile etkileşimin kesişimini seviyordum.</p>
<p>Karşılaştığım şey beni şaşkına çevirdi.</p>
<p>Oyunlar ciddi bir teknik derinlik gerektiriyor. Fizik simülasyonları, çarpışma algılama, vektör matematiği, aydınlatma hesaplamaları, optimizasyon. Başlarken bunu biliyordum. Matematik ve mühendislik, oyun geliştirmenin önündeki engeller değil. Oyunların çalışmasını sağlayan unsurların bir parçası.</p>
<p>Sorun, yaratıcı vizyon ile uygulama arasındaki uçurumdu. Sektöre hâkim motorlar ve araçlar, mühendisler tarafından mühendisler için tasarlanmıştı. Her şey “eğer”ler, “o zaman”lar ve düğüm tabanlı görsel betikler üzerinden yürüyordu. Bir girdap efekti mi istiyorsunuz? Gölgelendirici programlamayı öğrenin. Belirli bir aydınlatma atmosferi mi? Malzeme grafiklerinin derinliklerine inin. Doğru hissettiren bir karakter hareketi mi? Karakter denetleyicisindeki veya fizik parametrelerindeki hataları ayıklamak için saatler harcayın.</p>
<p>Görsel düşünen biriyseniz, canlı renkler ve hareketli görüntülerle düşünüyorsanız, fikirler size ses, doku ve duygusal ağırlıkla tamamlanmış sahneler hâlinde geliyorsa herhangi birini geliştirmeden önce bütün bunları teknik dile çevirmek zorundaydınız. Zihninizde aydınlatmasıyla, atmosferiyle ve karakterlerin mekânda hareket edişiyle tamamlanmış bir dünya görürsünüz. Sonra bilgisayarınızın başına oturup karakterinizin neden zeminin içinden düştüğünü ayıklamak için sonraki altı saati harcarsınız.</p>
<p>Teknik temel önemlidir. Ancak araçlar bu karmaşıklığı soyutlamak yerine içerik üreticilerini uygulama ayrıntılarıyla yaşamaya zorluyordu. Oyun oluşturmak, insanların katılabildiği bir hikâye anlatmak veya film yönetmek gibi hissettirmeli. Bu ortamın büyüsü burada. Bunun yerine, daha başlamadan önce bir mühendislik sınavına girmek gibi hissettiriyordu.</p>
<p>Film yönetmenleri vizyonlarını ifade edebilmek için yıllarca fizik motorlarını öğrenmez. Bir bütçeleri ve teknik uygulamayı üstlenen ekipleri vardır. Ancak bağımsız oyun geliştirmede nadiren bütçeniz olur. Sahip olduğunuz şey zaman ve araçlara erişimdir. Teknik biriyseniz harika bir oyun geliştirebilirsiniz. Ama yalnızca öyleyseniz.</p>
<p>Limbo gibi, tekil bir sanatsal vizyona ve bunu hayata geçirecek teknik becerilere sahip küçük bir ekip tarafından yapılan oyunlara böyle kavuştuk. Ya da yaratıcı içgüdü ile programlama becerisinin doğru birleşimine sahip tek bir kişi tarafından büyük ölçüde geliştirilen Undertale'e. Veya Eric Barone'un piksel sanatından müzik bestelemeye ve C# programlamaya kadar her şeyi kendi kendine öğrenmek için yıllarını harcadığı Stardew Valley'e.</p>
<p>Bu oyunlar muazzam zorluklara rağmen başarılı oldu. Ancak her Limbo'ya karşılık, araçlar içerik üreticilerinin sahip olmadığı teknik akıcılığı talep ettiği için yok olup giden milyonlarca yaratıcı vizyon var. Bağımsız oyun geliştiricilerinin %3'ünden azı kayda değer bir başarıya ulaşabiliyor. İçerik üreticileri “eğer”ler ve “o zaman”lardan oluşan bir duvara çarpıp vazgeçtiği için kaç muhteşem oyun hiç geliştirilemedi?</p>
<p>Giriş engeli yaratıcılık değildi. Araçların içine yerleştirilmiş teknik kapı bekçiliğiydi.</p>
<h2 id="var-olması-gereken-seyi-gelistirmek" tabindex="-1">Var olması gereken şeyi geliştirmek <a class="header-anchor" href="#var-olması-gereken-seyi-gelistirmek" aria-label="Permalink to &quot;Var olması gereken şeyi geliştirmek&quot;"></a></h2>
<p>Bu nedenle 5 yıl önce farklı bir şey geliştirmeye başladım.</p>
<p>Fikir basitti: Oyun geliştirme, yaratıcı vizyonu olan herkes için erişilebilir olmalı. Kendinizi etkileşimli medya aracılığıyla ifade etmek için bilgisayar bilimi diplomasına ihtiyacınız olmamalı. Yaratıcı insanlar araçlara uyum sağlamak zorunda kalmamalı; araçlar onların gerçekte nasıl düşündüğüne uyum sağlamalı.</p>
<p>Sequoia, Pear, Draper ve onlarca başka firmadaki girişim sermayedarları bunun işe yaramayacağını söyledi. Bu bir B2C işi. Böyle bir pazar yok. Bağımsız geliştiriciler hiçbir şeye para ödemez. Yeteneklerden ödün vermeden oyun geliştirmeyi basitleştiremezsiniz. Oyuncular karmaşık oyunlar ister ve karmaşık oyunlar karmaşık araçlar gerektirir. Pazar analizi kılığına bürünmüş milyonlarca bahane.</p>
<p>İnsanlar bana deli olduğumu söyledi. Belki de öyleydim. Ama aynı soruya dönüp duruyordum: Yaratıcı ifade için neden milyonlarca dolarlık bütçeler ön koşul olsun? Film yönetmenlerinin ve ünlü oyun yapımcılarının ekipleri ve kaynakları var. Geriye kalan herkese ise bir kod editörü ve dua etmek düşüyor. Bu uçurumu kapatacak şeyi geliştirmek istedim. Ne istediğinizi tarif ediyorsunuz ve gözlerinizin önünde gerçekleşiyor. İçimdeki her şey bunun doğru olduğunu biliyordu. Bunu bedenimin her hücresinde hissedebiliyordum.</p>
<p>Bugün binlerce kişi 3D oyun varlıkları, oyunlar, müzikler, seviyeler ve deneyimler için her gün Cinevva'yı kullanıyor. Şimdiye kadar oluşturulan projeler milyonlarca kez görüntülendi. Her geçen gün büyüyor. Sand Hill Road'da yapılan iki dakikalık bir sunum, “SAT'de başarısız oldum ama sezgilerime güvenin” demek için pek de uygun bir format değil.</p>
<h2 id="sezginin-gercek-anlamı" tabindex="-1">Sezginin gerçek anlamı <a class="header-anchor" href="#sezginin-gercek-anlamı" aria-label="Permalink to &quot;Sezginin gerçek anlamı&quot;"></a></h2>
<p><a href="https://singjupost.com/transcript-jensen-huangs-interview-cisco-ai-summit-2026/" target="_blank" rel="noreferrer">Huang</a> yalnızca felsefi bir noktaya değinmiyordu. Değerli zekânın ne olduğuna ilişkin gerçek bir değişimi tarif ediyordu.</p>
<p>Onlarca yıl boyunca yanlış şeyleri optimize ettik. Ezberleme ve hesaplamayı ödüllendiren eğitim sistemleri kurduk. Daha önce görülmüş problemlerle örüntü eşleştirme becerisini ölçen standartlaştırılmış sınavlar tasarladık. İnsanları, dört yıllık akademik kapı bekçiliğinden sağ çıkabildiklerini kanıtlayan diplomalara göre işe aldık. Yapay zekâ bütün bunları artık daha az özel hâle getirdi.</p>
<p>Yapay zekânın, en azından henüz, yapamadığı şey neyin eksik olduğunu sezmek. Bir şeylerin ters gittiğini hissetmek. İnsanların kendileri ifade edemeden önce neye ihtiyaç duyduklarını sezgisel olarak anlamak. Ortamın havasını okumak. Hiçbir veri kümesinde yer almayan bağlamı anlamak.</p>
<p>Cinevva'yı geliştirirken zamanımı, uluslararası yaşam deneyimimi, paramı ve sezgisel bilgilerimi ortaya koydum. Bu, üniversitede edinilmesi zor bir karışım. SAT ile ölçülmesi zor. Yapay zekâ salt bilişsel gücü bol bulunan bir kaynağa dönüştürmeden önce tasarlanmış herhangi bir yeterlilik sistemine sığdırılması zor.</p>
<p>On altı veya yirmi yıl önce bilgisayar bilimcileri araçların nasıl görünmesi ve çalışması gerektiğine karar verdi. Araçları kendileri ve kendileri gibi düşünen insanlar için geliştirdiler. Geri kalanımızın uyum sağlaması bekleniyordu. O dönem sona eriyor. Bundan sonrasını şekillendirecek kişiler, insanların gerçekte ne istediğini anlayanlar olacak. Bir şeyin ne zaman yanlış, ne zaman doğru olduğunu hissedebilenler. Teknik zarafet için değil, insanlar için geliştirenler.</p>
<p>Sistemin değersiz olduğunu söylediği içimdeki bir şeye güvendim. Ve haklıydım.</p>
<hr>
<p><strong>İlgili içerikler:</strong></p>
<ul>
<li><a href="/tr/blog/2026-01-18-skills-over-degrees.html">İş piyasası dönüşüyor — diplomalardan becerilere</a></li>
<li><a href="/tr/guides/game-dev-courses.html">Çevrimiçi Oyun Geliştirme Kursları</a> — geleneksel kapı bekçiliğini aşan, beceri odaklı yollar</li>
<li><a href="/tr/signals/2026-03-04-everyone-wants-ai-game-engine.html">Artık herkes yapay zekâ oyun motoru olmak istiyor</a> — insanların düşünme biçimine uyum sağlayan araçlara yönelik sektörel dönüşüm</li>
</ul>
]]></content:encoded>
            <enclosure url="https://cdn.cinevva.com/blog/game-jam-houston-2018.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Oyunlarda yapay zekâ tartışması, güven ve yapay zekâ sonrası ekonomi]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-01-18-ai-controversy-and-post-ai-economy</link>
            <guid>https://app.cinevva.com/tr/blog/2026-01-18-ai-controversy-and-post-ai-economy</guid>
            <pubDate>Sun, 18 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Pratik bir bakış: Asıl mesele yapay zekâ değil, güven. Etiketleme, filtreler ve adil dağıtım neden yapay zekâ yanlısı ve karşıtı tartışmalardan daha önemli?]]></description>
            <content:encoded><![CDATA[<h1 id="oyunlarda-yapay-zeka-tartısması-guven-ve-yapay-zeka-sonrası-ekonomi" tabindex="-1">Oyunlarda yapay zekâ tartışması, güven ve yapay zekâ sonrası ekonomi <a class="header-anchor" href="#oyunlarda-yapay-zeka-tartısması-guven-ve-yapay-zeka-sonrası-ekonomi" aria-label="Permalink to &quot;Oyunlarda yapay zekâ tartışması, güven ve yapay zekâ sonrası ekonomi&quot;"></a></h1>
<p><em>Cinevva CTO'su <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<p>Oyunlarda yapay zekâ, 2024'ün ortaları civarında gerçek bir mayın tarlasına dönüştü. Ortadan kalkan işler. Sıranın kendilerine geleceğine inanan insanlar. Avukatların bile içinden çıkamadığı telif hakkı meseleleri. Dönüp dolaşıp aynı yere gelen bitmek bilmez estetik tartışmaları. Steam'in kimsenin istemediği içeriklere boğulması. Ve tüm bunların altında, artık her üreticinin zihnini kurcalayan o endişe: &quot;Burada gerçekten bir şey mi üretiyorum, yoksa sadece... prompt mu yazıyorum?&quot;</p>
<p>Bir platform işletiyoruz. Bunu yaparken bir şeyi çok hızlı öğreniyorsunuz.</p>
<p><strong>Kimse kandırılmış hissetmekten hoşlanmaz.</strong></p>
<h2 id="bu-rakamlar-bizi-sasırttı" tabindex="-1">Bu rakamlar bizi şaşırttı <a class="header-anchor" href="#bu-rakamlar-bizi-sasırttı" aria-label="Permalink to &quot;Bu rakamlar bizi şaşırttı&quot;"></a></h2>
<p>Yapay zekâ kullanımının artacağını tahmin ediyorduk. Ama bu kadarını değil. 2025'in sonlarına gelindiğinde tablo şöyleydi:</p>
<table tabindex="0">
<thead>
<tr>
<th>Takip ettiğimiz ölçüt</th>
<th>2024</th>
<th>2025</th>
<th>Değişim</th>
</tr>
</thead>
<tbody>
<tr>
<td>Yapay zekâ kullandığını açıklayan Steam oyunları</td>
<td>~1.000</td>
<td>7.818</td>
<td>7 kat artış</td>
</tr>
<tr>
<td>Yapay zekâ kullanan yeni Steam oyunları</td>
<td>~%3</td>
<td>~%20</td>
<td>Her beş oyundan biri</td>
</tr>
<tr>
<td>Yapay zekânın kaliteye zarar verdiğini düşünen geliştiriciler</td>
<td>%34</td>
<td>%47</td>
<td>On üç puan artış</td>
</tr>
<tr>
<td>Yapay zekânın kaliteyi artırdığını düşünen geliştiriciler</td>
<td>—</td>
<td>%11</td>
<td>Pek fazla değil</td>
</tr>
<tr>
<td>Yapay zekâ kullanımını açıklayan oyunların geliri</td>
<td>—</td>
<td>660 milyon $</td>
<td>On iki oyun sekiz haneli gelire ulaştı</td>
</tr>
</tbody>
</table>
<p>Kaynaklar: Tom's Hardware / Totally Human Media analizi, GDC 2025 Developer Survey, Unity 2025 Gaming Report</p>
<h2 id="oyuncuları-bu-kadar-kuskucu-hale-getiren-neydi" tabindex="-1">Oyuncuları bu kadar kuşkucu hâle getiren neydi? <a class="header-anchor" href="#oyuncuları-bu-kadar-kuskucu-hale-getiren-neydi" aria-label="Permalink to &quot;Oyuncuları bu kadar kuşkucu hâle getiren neydi?&quot;"></a></h2>
<p>Bu kuşku durduk yere ortaya çıkmadı. Gerçekten yanlış giden şeyler oldu. Ve insanlar bunları hatırlıyor.</p>
<h3 id="seslendirme-sanatcıları-klonlandıklarını-cıkıs-gununde-ogrendi" tabindex="-1">Seslendirme sanatçıları klonlandıklarını çıkış gününde öğrendi <a class="header-anchor" href="#seslendirme-sanatcıları-klonlandıklarını-cıkıs-gununde-ogrendi" aria-label="Permalink to &quot;Seslendirme sanatçıları klonlandıklarını çıkış gününde öğrendi&quot;"></a></h3>
<p><em>Tomb Raider 4-6 Remastered</em>, orijinal seslendirmelerin yapay zekâyla oluşturulmuş sürümleriyle piyasaya çıktı. Oyuncular bunu ne zaman öğrendiyse oyuncular da aynı anda öğrendi: çıkış gününde. Yasal baskı arttıktan sonra yayıncı, sesleri sonunda bir yamayla kaldırdı. On bir ay süren SAG-AFTRA grevinin ardındaki nedenlerden biri tam olarak bu senaryoydu.</p>
<h3 id="yapay-zeka-coplugu-artık-kullanılan-bir-ifadeye-donustu" tabindex="-1">&quot;Yapay zekâ çöplüğü&quot; artık kullanılan bir ifadeye dönüştü <a class="header-anchor" href="#yapay-zeka-coplugu-artık-kullanılan-bir-ifadeye-donustu" aria-label="Permalink to &quot;&quot;Yapay zekâ çöplüğü&quot; artık kullanılan bir ifadeye dönüştü&quot;"></a></h3>
<p><em>Call of Duty: Black Ops 6</em>, Steam sayfasına sessiz sedasız bir yapay zekâ açıklaması ekledi. Üstelik oyun çıktıktan sonra. Oyuncular tuhaflıkları zaten fark etmişti: her yere dağılmış görsel hatalar vardı. Yükleme ekranındaki karakterlerden birinin altı parmağı bulunuyordu. &quot;Yapay zekâ çöplüğü&quot;, bir şekilde... yanlış görünen her şeyin kısa adı hâline geldi. Ruhsuz. Sanki kimse kontrol edecek kadar önemsememiş gibi.</p>
<h3 id="bir-odul-adaylıgı-ortadan-kalktı" tabindex="-1">Bir ödül adaylığı ortadan kalktı <a class="header-anchor" href="#bir-odul-adaylıgı-ortadan-kalktı" aria-label="Permalink to &quot;Bir ödül adaylığı ortadan kalktı&quot;"></a></h3>
<p><em>Clair Obscur: Expedition 33</em>'ün Indie Game Awards'daki Yılın Oyunu adaylığı geri çekildi. Oysa yayımlanan oyunda yapay zekâ kullanılmamıştı. Sorun, geliştirme sırasında kullanılan yapay zekâ üretimi geçici içeriklerdi; oyunculara hiç ulaşmayan şirket içi materyaller. Nihai varlıkların tamamı insanlar tarafından yapılmıştı. Fark etmedi. Sınırın tam olarak nerede çizilmesi gerektiği haftalarca tartışıldı.</p>
<h3 id="yapay-zekaya-hic-dokunmamıs-ekipler-bile-bunu-kanıtlamak-zorunda-kaldı" tabindex="-1">Yapay zekâya hiç dokunmamış ekipler bile bunu kanıtlamak zorunda kaldı <a class="header-anchor" href="#yapay-zekaya-hic-dokunmamıs-ekipler-bile-bunu-kanıtlamak-zorunda-kaldı" aria-label="Permalink to &quot;Yapay zekâya hiç dokunmamış ekipler bile bunu kanıtlamak zorunda kaldı&quot;"></a></h3>
<p><em>Chessplus</em> ve <em>Peak</em>, yapay zekâ kullandıkları yönünde suçlamalarla karşılaştı. İkisi de hiç kullanmamıştı. İkisi de ödül adayıydı. Her iki geliştirme ekibi de çalışmalarının elle yapıldığını kanıtlamak için eski ekran görüntülerini ve katman dosyalarını bulup çıkarmak zorunda kaldı. <em>Peak</em> ekibi durumu en iyi şekilde özetledi: &quot;Çöp olabiliriz ama insan yapımı, yerel kaynaklı, zanaatkâr işi çöpüz.&quot;</p>
<h3 id="studyolar-tamamen-zıt-yonlere-gitti" tabindex="-1">Stüdyolar tamamen zıt yönlere gitti <a class="header-anchor" href="#studyolar-tamamen-zıt-yonlere-gitti" aria-label="Permalink to &quot;Stüdyolar tamamen zıt yönlere gitti&quot;"></a></h3>
<p><strong>SNK</strong> — <em>Fatal Fury: City of the Wolves</em> fragmanında yapay zekâ ürünü gibi görünen görseller ortaya çıkınca Discord moderatörleri görevi bıraktı. <strong>Games Workshop</strong> — tüm Warhammer yapımlarında yapay zekâyı tamamen yasakladı. <strong>Larian Studios</strong> — Baldur's Gate 3'te yapay zekâyı yalnızca çok erken aşamadaki konsept eskizleri için kullandıklarını, nihai oyunda hiçbir yapay zekâ içeriğinin bulunmadığını söyledi. <strong>Tim Sweeney</strong> — Steam'in yapay zekâ etiketlerinin değersiz olduğunu ve kaldırılması gerektiğini ilan etti. <strong>Valve</strong> — yapay zekâ etiketlerinden şikâyet eden geliştiricilerin genellikle işlerinin &quot;özensiz&quot; görünmesinden endişe ettiğini söyleyerek karşılık verdi.</p>
<h2 id="oyun-kesfetmek-bir-guven-sorununa-donustu" tabindex="-1">Oyun keşfetmek bir güven sorununa dönüştü <a class="header-anchor" href="#oyun-kesfetmek-bir-guven-sorununa-donustu" aria-label="Permalink to &quot;Oyun keşfetmek bir güven sorununa dönüştü&quot;"></a></h2>
<p>Artık içerikler, herhangi birinin doğru düzgün değerlendirebileceğinden daha hızlı üretiliyor. Sorular değişti:</p>
<p>Ben burada tam olarak neye bakıyorum?
Bunu kim yaptı?
Buna harcadığım zamandan pişman olacak mıyım?
Bunların herhangi biri fragmanda vaat edilenlerle uyuşuyor mu?</p>
<p>Muhtemelen büyük bir uzlaşma gelmeyecek. Yapay zekâ ile insan yapımı içerikler konusunda kesin bir hüküm de çıkmayacak.</p>
<p>Daha olası olan şu: <strong>filtreler, gerçek şeffaflık ve dürüstlüğü teşvik eden yapılar</strong>.</p>
<h2 id="tum-bunların-ortasında-kalan-kucuk-studyolar" tabindex="-1">Tüm bunların ortasında kalan küçük stüdyolar <a class="header-anchor" href="#tum-bunların-ortasında-kalan-kucuk-studyolar" aria-label="Permalink to &quot;Tüm bunların ortasında kalan küçük stüdyolar&quot;"></a></h2>
<p>Bağımsız geliştiriciler kendilerini tuhaf bir konumda buldu.</p>
<p><strong>Avantajları gerçekten göz ardı etmek zor:</strong>
Daha hızlı yineleme yapabiliyorsunuz. Dört kişi her şeyi üretirken maliyetler düşüyor. Tek başına çalışan geliştiriciler artık projelerini gerçekten tamamlayabiliyor. Yerelleştirme artık tüm bütçenizi tüketmiyor.</p>
<p><strong>Dezavantajları da bir o kadar gerçek:</strong>
Jenerik hissettiren çıktılar. Avukatların henüz dokunmak istemediği eğitim verileri ve fikrî mülkiyet sorunları. Tam olarak anlamadığınız sistemleri yayımlamak; bazıları buna kavrama borcu diyor. Düşük emekli oyun seliyle aynı kefeye konmak. Ankete katılan geliştiricilerin neredeyse yarısı, yapay zekânın oyunları genel olarak kötüleştirdiğini düşünüyor.</p>
<p>Unity'nin 2025 raporuna göre geliştiricilerin %79'u yapay zekâ araçlarına olumlu bakıyor. Bu oldukça kesin bir sonuç gibi görünüyor. Gerçek ise daha karmaşık. Bunu iyi yapan ekipler, yapay zekâyı genellikle sıkıcı kısımlar için kullanıyor: angarya işler, kaba taslaklar, kalite güvencesinin monoton görevleri. Yaratıcı yönetim mi? O, insanda kalıyor.</p>
<h2 id="cinevva-nın-durusu-yapay-zeka-konusunda-tarafsız-durustluk-konusunda-katı" tabindex="-1">Cinevva'nın duruşu: yapay zekâ konusunda tarafsız, dürüstlük konusunda katı <a class="header-anchor" href="#cinevva-nın-durusu-yapay-zeka-konusunda-tarafsız-durustluk-konusunda-katı" aria-label="Permalink to &quot;Cinevva'nın duruşu: yapay zekâ konusunda tarafsız, dürüstlük konusunda katı&quot;"></a></h2>
<p>Yapay zekâ kullandıkları için oyunları geri çevirmiyoruz. Onlara özel muamele de yapmıyoruz.</p>
<p>Kural basit: <strong>yapay zekâ kullanıldıysa bunu söyleyin.</strong> Oyuncular neyi önemsediklerine kendileri karar versin. Böylece filtreler gerçekten işe yarar.</p>
<ul>
<li><a href="/tr/ai-content.html">Yapay zekâ üretimi içerik politikası</a></li>
</ul>
<h2 id="filtreler-tartısmalardan-daha-iyi-calısır" tabindex="-1">Filtreler tartışmalardan daha iyi çalışır <a class="header-anchor" href="#filtreler-tartısmalardan-daha-iyi-calısır" aria-label="Permalink to &quot;Filtreler tartışmalardan daha iyi çalışır&quot;"></a></h2>
<p>Oyunlardaki yapay zekâ tartışması yakın zamanda bir uzlaşmaya varmayacak. Muhtemelen hiçbir zaman varmayacak. Ancak bireysel tercihler yeterince net.</p>
<p>Bazı oyuncular özellikle insan yönetiminde üretilmiş sanat eserleri istiyor. Bir insanın kaleminden çıkmış metinler. Görünür bir zanaatkârlık.</p>
<p>Bazılarıysa gerçekten umursamıyor. Eğlence eğlencedir.</p>
<p>Filtreler, her iki grubun da aradığını bulmasını sağlar. Kimsenin kazanması gerekmez.</p>
<h2 id="odeme-modelleri-herkesin-fikrinden-daha-onemlidir" tabindex="-1">Ödeme modelleri herkesin fikrinden daha önemlidir <a class="header-anchor" href="#odeme-modelleri-herkesin-fikrinden-daha-onemlidir" aria-label="Permalink to &quot;Ödeme modelleri herkesin fikrinden daha önemlidir&quot;"></a></h2>
<p>Gelir, birim satış yerine <strong>oynama süresine</strong> bağlandığında para kazanmak için şunları yaparsınız:</p>
<p>Oyuncuların ilgisini hızla çekmek. Dikkatlerini korumak. Pazarlamanızda vadettiğiniz şeyi sunmak.</p>
<p>Kalite, izlenecek en bariz yol hâline gelir. Oyunu nasıl yaptığınızın önemi azalır.</p>
<p>Fragmanınızda yerine getiremeyeceğiniz vaatlerde mi bulundunuz? Oyuncular hemen gider. Oyuncu tutma oranı dibe vurur. Onlara ne alacaklarını aynen mi gösterdiniz? Oynamaya devam ederler. Oynama süresi artar. Gelir gelir. Ekonomi kendi dengesini bulur.</p>
<h2 id="_2026-muhtemelen-neler-getirecek" tabindex="-1">2026 muhtemelen neler getirecek? <a class="header-anchor" href="#_2026-muhtemelen-neler-getirecek" aria-label="Permalink to &quot;2026 muhtemelen neler getirecek?&quot;"></a></h2>
<p><strong>Daha fazla düzenleme</strong> — AB Yapay Zekâ Yasası genişlemeye devam ediyor. Özellikle SAG-AFTRA'nın ardından ABD'de ses ve görünüş haklarına yönelik korumalar artıyor.</p>
<p><strong>Uzmanlaşmış araçlar</strong> — Özellikle küçük ekipler için geliştirilmiş yapay zekâ. Kontrolün insanlarda kalması için tasarlanmış araçlar.</p>
<p><strong>Daha akıllı etiketler</strong> — &quot;Yapay zekâyla yapıldı&quot; ifadesi fazla kaba bir ayrım. Yapay zekâ destekli iş akışları ile yapay zekâ üretimi nihai varlıklar arasında ayrımlar görmeyi bekleyin.</p>
<p><strong>Kitlelerin ayrışması</strong> — Bazı oyuncular bilinçli olarak geleneksel yöntemlerle yapılmış oyunları arayacak. Bazılarıysa bunu hiç düşünmeyecek. Her iki grup da kendileri için ürün geliştirmeye yetecek kadar büyük.</p>
<p><strong>Platform rekabeti</strong> — Mağazaların şeffaflık ve keşif süreçlerini nasıl yönettiği gerçek bir farklılaştırıcı hâline gelecek.</p>
<h2 id="isleri-gercekten-ileriye-tasıyan-ne" tabindex="-1">İşleri gerçekten ileriye taşıyan ne? <a class="header-anchor" href="#isleri-gercekten-ileriye-tasıyan-ne" aria-label="Permalink to &quot;İşleri gerçekten ileriye taşıyan ne?&quot;"></a></h2>
<p>Tartışmak, yapay zekâ meselesini çözüme kavuşturmayacak. Şunlar kavuşturabilir:</p>
<ol>
<li><strong>Oyuncuların</strong> kendileri için gerçekten önemli olan şeylere göre seçim yapması</li>
<li><strong>Üreticilerin</strong> nasıl çalıştıkları konusunda dürüst olması</li>
<li><strong>Platformların</strong> iki grubun birbirini bulmasına yardımcı olacak araçlar geliştirmesi</li>
</ol>
<p>Yapay zekâ sonrası ekonomi budur. Birbiriyle savaşan kamplar değil. Her şeyi bir arada tutan güven.</p>
<hr>
<p><strong>İlgili içerikler:</strong></p>
<ul>
<li><a href="/tr/ai-content.html">Yapay zekâ üretimi içerik politikası</a></li>
<li><a href="/tr/creators.html">Oyun üreticileri için</a></li>
<li><a href="/tr/faq.html">SSS</a></li>
<li><a href="/tr/guides/frontier-gen-ai-models.html">Öncü açık kaynak üretken yapay zekâ modelleri</a> — belirli modeller ve nasıl çalıştıkları</li>
<li><a href="/tr/signals/2026-03-06-open-source-ai-pollution.html">Açık kaynak dünyasında bir yapay zekâ kirliliği sorunu var</a> — yapay zekâ çıktıları açık kaynak projelerini istila ettiğinde neler oluyor</li>
</ul>
]]></content:encoded>
            <enclosure url="https://app.cinevva.com/img/blog/ai-controversy-trust.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[İş piyasası dönüşüyor — diplomalardan becerilere]]></title>
            <link>https://app.cinevva.com/tr/blog/2026-01-18-skills-over-degrees</link>
            <guid>https://app.cinevva.com/tr/blog/2026-01-18-skills-over-degrees</guid>
            <pubDate>Sun, 18 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Şirketlerin %90'ı artık diplomalardan çok becerilere öncelik veriyor. Bunun teknoloji ve oyun geliştirme sektörüne adım atan yeni mezunlar için anlamı ne?]]></description>
            <content:encoded><![CDATA[<h1 id="is-piyasası-donusuyor-—-diplomalardan-becerilere" tabindex="-1">İş piyasası dönüşüyor — diplomalardan becerilere <a class="header-anchor" href="#is-piyasası-donusuyor-—-diplomalardan-becerilere" aria-label="Permalink to &quot;İş piyasası dönüşüyor — diplomalardan becerilere&quot;"></a></h1>
<p><em>Cinevva CTO'su <a href="/tr/about.html">Oleg Sidorkin</a> tarafından</em></p>
<p>Kuzenimin 2023'te onur derecesiyle mezun oluşunu izledim. İyi bir devlet üniversitesinden bilgisayar bilimi diploması vardı. Not ortalaması da iyiydi. Bir işe girmeden önce on dört ay boyunca başvurular yaptı. Bu sırada, bağımsız oyunlar geliştirmek için ikinci sınıfta üniversiteyi bırakan bir arkadaşım iş aramaya karar verdikten sonraki bir ay içinde üç teklif aldı.</p>
<p>Bu artık sıra dışı bir durum değil. Genel eğilim bu.</p>
<h2 id="rakamlar-sonunda-bir-suredir-hissettiklerimizi-dogruladı" tabindex="-1">Rakamlar sonunda bir süredir hissettiklerimizi doğruladı <a class="header-anchor" href="#rakamlar-sonunda-bir-suredir-hissettiklerimizi-dogruladı" aria-label="Permalink to &quot;Rakamlar sonunda bir süredir hissettiklerimizi doğruladı&quot;"></a></h2>
<p>2025 itibarıyla <strong>İK liderlerinin %90'ı</strong>, geleneksel dört yıllık üniversite diploması olmayan adayları da işe aldıklarını bildirdi (<a href="https://fortune.com/2025/07/01/90-percent-hr-leaders-looking-to-hire-outside-of-traditional-college-degrees-as-they-prioritize-skills/" target="_blank" rel="noreferrer">Fortune</a>). ABD'deki şirketlerin dörtte biri lisans diploması şartını tamamen kaldırdı (<a href="https://www.hrdive.com/news/employer-eliminate-degree-requirements-2025/748998/" target="_blank" rel="noreferrer">HR Dive</a>). Eğitim kredilerinizi daha yeni ödediyseniz canınızı sıkacak kısım ise şu: <strong>İşverenlerin %94'ü, becerileri temel alınarak işe alınanların diplomalarına göre işe alınanlardan daha iyi performans gösterdiğini söylüyor</strong> (<a href="https://www.forbes.com/sites/cynthiapong/2024/12/26/90-of-companies-make-better-hires-based-on-skills-over-degrees/" target="_blank" rel="noreferrer">Forbes</a>).</p>
<p>Verizon artık pozisyonlarının %99'u için üniversite diploması gerekmediğini söylüyor. Sergey Brin, Google'ın lisans diploması olmayan &quot;tonlarca&quot; kişiyi işe aldığını kabul etti. IBM ise &quot;New Collar&quot; programıyla ABD'deki açık pozisyonlarının yarısında diploma şartını isteğe bağlı hâle getirdi.</p>
<p>Bunun nedeni şirketlerin yardımsever davranması değil. Diplomaların, birinin işinde gerçekten iyi olup olmayacağını öngörmediğini fark ettiler.</p>
<h2 id="eski-sistem-neden-bozuldu" tabindex="-1">Eski sistem neden bozuldu? <a class="header-anchor" href="#eski-sistem-neden-bozuldu" aria-label="Permalink to &quot;Eski sistem neden bozuldu?&quot;"></a></h2>
<p>Dürüst cevap mı? Diplomalar kolaycı bir eleme aracına dönüştü.</p>
<p>İşe alım yaparken önünüzde 400 başvuru varsa lisans diploması istemek yığını yarıya indirir. Ama size işi gerçekten kimin yapabileceğini söylemez. Yalnızca dört yıl boyunca sınıflarda oturacak parası, zamanı ve aile düzeni olanları gösterir. Bunun yetenekle ilişkisi, her zaman varsaydığımızdan daha zayıftı.</p>
<p>Şimdiyse aynı anda üç şey oldu:</p>
<p><strong>Beceriler çok hızlı değişti.</strong> Oyun motorları, yapay zekâ araçları, web framework'leri... Bir müfredat komitesi herhangi bir konuda dersi onaylayana kadar o konu çoktan güncelliğini yitirmiş oluyor. Dört yıllık bir program size dört yıl öncesinin teorisini öğretiyor. Teknoloji dünyasında bu, tarih öncesi demek.</p>
<p><strong>Portföyler görmezden gelinemeyecek hâle geldi.</strong> Birinin kod yazıp yazamadığını GitHub hesabına bakarak görebilecekken neden tahminde bulunasınız? itch.io sayfasında oyuncu yorumları bulunan beş tamamlanmış proje varken bir oyunu yayımlayıp yayımlayamayacağını neden merak edesiniz?</p>
<p><strong>Şirketler çaresiz kaldı.</strong> Yetenek açığı gerçek. Diploması olmayan herkesi elemek, tam da ihtiyacınız olan kişileri dışarıda bırakmak anlamına geliyor. Bazı işe alım yöneticileri, kendi kendini yetiştirmiş geliştiricilerin diplomalı çalışanlarına fark attığını gördükten sonra bunu zor yoldan öğrendi.</p>
<h2 id="oyun-sektoru-bunun-gelecegini-gordu" tabindex="-1">Oyun sektörü bunun geleceğini gördü <a class="header-anchor" href="#oyun-sektoru-bunun-gelecegini-gordu" aria-label="Permalink to &quot;Oyun sektörü bunun geleceğini gördü&quot;"></a></h2>
<p>Oyun sektörünün bu konuda diğerlerinden ileride olduğunu düşünüyorum ve nedenini anlamaya değer.</p>
<p>Stüdyolar hangi okulda okuduğunuzla hiçbir zaman gerçekten ilgilenmedi. Hangi projeleri yayımladığınızla ilgilendiler. İyi işlenmiş, 48 saatlik bir game jam oyunu, bir işe alım yöneticisine dört yıllık oyun tasarımı diplomasından çok daha fazlasını anlatır. Baskı altında işleri tamamlayabildiğinizi kanıtlar. Kapsam konusunda zor kararlar alabildiğinizi gösterir. Oyunun yalnızca teoride kalmadığını, gerçekten oynanabilir olduğunu kanıtlar.</p>
<p>2026'da oyun sektörüne girmeye çalışıyorsanız gerçekten önemli olanlar şunlar (<a href="https://www.dice.com/career-advice/aspiring-video-game-designers-in-2025-what-you-need-to-know" target="_blank" rel="noreferrer">Dice</a>, <a href="https://combinegr.com/2025-global-gaming-employment-outlook-trends-talent-strategy/" target="_blank" rel="noreferrer">CombineGR</a>): iyi işlenmiş ve oynanabilir iki veya üç demo. Ne yaptığınızı ve neden yaptığınızı açıklayan vaka çalışmaları. Başladığınız işleri bitirdiğinize dair kanıtlar. Gerçek projelerle sergilenen, en az bir önemli oyun motoruna hâkimiyet.</p>
<p>İşe alım yöneticileri potansiyel aramıyor. Kanıt arıyorlar.</p>
<h2 id="kimsenin-konusmadıgı-rahatsız-edici-gercek" tabindex="-1">Kimsenin konuşmadığı rahatsız edici gerçek <a class="header-anchor" href="#kimsenin-konusmadıgı-rahatsız-edici-gercek" aria-label="Permalink to &quot;Kimsenin konuşmadığı rahatsız edici gerçek&quot;"></a></h2>
<p>Araştırmaları incelerken beni hayal kırıklığına uğratan bir şey oldu.</p>
<p>Harvard/Burning Glass araştırması, diploma şartını kaldıran şirketlerin çoğu zaman diplomasız adayları daha fazla işe almadığını ortaya koydu. Artış yalnızca yaklaşık 3,5 yüzde puandı (<a href="https://www.forbes.com/sites/jenamcgregor/2024/02/14/companies-are-dropping-diploma-requirements-for-more-jobs-but-hiring-few-non-degreed-workers-to-fill-them/" target="_blank" rel="noreferrer">Forbes</a>). Politika değişti. İşe alım uygulamaları ise geride kaldı.</p>
<p>Bu, geleneksel olmayan bir yol izliyorsanız hâlâ daha çok çalışmanız gerektiği anlamına geliyor. Kapı eskisinden daha açık, ancak henüz diğerleriyle eşit koşullarda içeri girmiyorsunuz. Portföyünüzün görmezden gelinemeyecek kadar güçlü olması gerekiyor. Projeleriniz, bir başkasının diplomasından daha yüksek sesle konuşmalı.</p>
<p>Bu adil değil. Ancak bunu bilmek hazırlanmanıza yardımcı olur.</p>
<h2 id="su-anda-yolun-basında-olan-birine-ne-soylerdim" tabindex="-1">Şu anda yolun başında olan birine ne söylerdim? <a class="header-anchor" href="#su-anda-yolun-basında-olan-birine-ne-soylerdim" aria-label="Permalink to &quot;Şu anda yolun başında olan birine ne söylerdim?&quot;"></a></h2>
<p>Okuyorsanız okulunuzu bırakmayın. Ancak diplomanın artık tek başına yeterli olmadığını anlayın. Bir yandan projeler geliştirin. Game jam'lere katılın. Bir <a href="https://grow.google/certificates/" target="_blank" rel="noreferrer">Google Kariyer Sertifikası</a> veya Unity sertifikası alın. Diplomanızı tek geçerli belge olarak değil, sahip olduğunuz birkaç yeterlilik belgesinden biri olarak görün.</p>
<p>Üniversite diploması almıyorsanız farklı bir yolunuz var ama bu yol mutlaka daha zor değil. Yoğun biçimde üretin. Projelerinizi yayımlayın. Her şeyi belgeleyin. <a href="https://github.com" target="_blank" rel="noreferrer">GitHub</a> hesabınız, <a href="https://itch.io" target="_blank" rel="noreferrer">itch.io</a> sayfanız ve kişisel siteniz... Artık yeterlilik belgeniz bunlar.</p>
<p>Hangi yolu seçerseniz seçin, çalışmalarınızı açıklama pratiği yapın. Yalnızca ne geliştirdiğinizi değil, yaptığınız seçimleri neden yaptığınızı da anlatın. Neleri farklı yapardınız? Neler öğrendiniz? Mülakat yapanlar, düşünce süreçlerini açıkça ifade edebilen kişileri hatırlar.</p>
<h2 id="bu-ise-alımdan-daha-buyuk-bir-degisim" tabindex="-1">Bu, işe alımdan daha büyük bir değişim <a class="header-anchor" href="#bu-ise-alımdan-daha-buyuk-bir-degisim" aria-label="Permalink to &quot;Bu, işe alımdan daha büyük bir değişim&quot;"></a></h2>
<p>Burada yaşananlar yalnızca şirketlerin pozisyonları doldurma biçimindeki bir değişim değil. Toplum olarak nelere değer verdiğimiz de değişiyor.</p>
<p>Yeterlilik belgeleri onlarca yıl boyunca bir filtre işlevi gördü. Pahalı ve zaman alıcıydılar ama anlaşılması kolaydı. Birinin diploması varsa onun hakkında belirli varsayımlarda bulunabiliyordunuz. Bu, doğrudan bir ölçüm değil bir sinyaldi ama yeterince işe yarıyordu.</p>
<p>Şimdiyse bu sinyal zayıflıyor. Teknoloji, birinin gerçekten neler yapabildiğini görmeyi mümkün kılıyor. Uzaktan çalışma, nerede oturduğunuzdan çok ortaya koyduğunuz sonuçların önemli olduğunu kanıtladı. Yapay zekâ, teorik bilgiyi pratik uygulamadan daha az değerli hâle getiriyor.</p>
<p>Geçiş süreci karmaşık olsa da bunu gerçekten umut verici buluyorum. Eskiden &quot;Nerede okudun?&quot; diye sorulurdu. Şimdiyse &quot;Ne geliştirebilirsin?&quot; diye soruluyor.</p>
<p>Bu daha iyi bir soru.</p>
<hr>
<h2 id="kaynaklar" tabindex="-1">Kaynaklar <a class="header-anchor" href="#kaynaklar" aria-label="Permalink to &quot;Kaynaklar&quot;"></a></h2>
<ul>
<li><a href="https://fortune.com/2025/07/01/90-percent-hr-leaders-looking-to-hire-outside-of-traditional-college-degrees-as-they-prioritize-skills/" target="_blank" rel="noreferrer">Fortune: İK liderlerinin %90'ı geleneksel diplomaların dışından işe alım yapıyor</a></li>
<li><a href="https://www.forbes.com/sites/cynthiapong/2024/12/26/90-of-companies-make-better-hires-based-on-skills-over-degrees/" target="_blank" rel="noreferrer">Forbes: Şirketlerin %90'ı becerilere dayalı işe alımlarda daha iyi sonuç alıyor</a></li>
<li><a href="https://www.forbes.com/sites/jenamcgregor/2024/02/14/companies-are-dropping-diploma-requirements-for-more-jobs-but-hiring-few-non-degreed-workers-to-fill-them/" target="_blank" rel="noreferrer">Forbes: Şirketler diploma şartını kaldırıyor ancak diplomasız çalışanları çok az işe alıyor</a></li>
<li><a href="https://www.hrdive.com/news/employer-eliminate-degree-requirements-2025/748998/" target="_blank" rel="noreferrer">HR Dive: İşverenler diploma şartlarını kaldırıyor</a></li>
<li><a href="https://www.computerworld.com/article/1623286/no-degree-no-problem-tech-firms-move-away-from-college-requirement-for-new-hires.html" target="_blank" rel="noreferrer">Computerworld: Teknoloji şirketleri üniversite şartından uzaklaşıyor</a></li>
<li><a href="https://www.dice.com/career-advice/aspiring-video-game-designers-in-2025-what-you-need-to-know" target="_blank" rel="noreferrer">Dice: 2025'te oyun tasarımcısı olmayı hedefleyenler</a></li>
<li><a href="https://combinegr.com/2025-global-gaming-employment-outlook-trends-talent-strategy/" target="_blank" rel="noreferrer">CombineGR: 2025 Küresel Oyun Sektörü İstihdam Görünümü</a></li>
</ul>
<hr>
<p><strong>İlgili içerikler:</strong></p>
<ul>
<li><a href="/tr/guides/game-jams-hackathons.html">Game jam'lerde nasıl başarılı olunur?</a></li>
<li><a href="/tr/guides/game-dev-courses.html">Çevrimiçi Oyun Geliştirme Kursları</a> — her bütçeye uygun, beceri odaklı öğrenme yolları</li>
<li><a href="/tr/tutorials/agentic-code-tools.html">Ajan tabanlı yapay zekâ kodlama araçları</a> — hangi becerilerin önemli olduğunu yeniden şekillendiren araçlar</li>
<li><a href="/tr/blog/2026-02-10-the-intuitive-mind.html">Sezgisel zihin</a> — sezginin neden yeterlilik belgelerinden daha önemli olduğu</li>
</ul>
]]></content:encoded>
            <enclosure url="https://app.cinevva.com/img/blog/skills-over-degrees.jpg" length="0" type="image/jpg"/>
        </item>
    </channel>
</rss>