T: tema · Z: kodu büyüt · S: konuşmacı notları · F: tam ekran · Esc: genel bakış · ⌂ ders haritası
OYUNLARDA YAPAY ZEKÂ · HAFTA 9
NavMesh
Gezinti ağları, funnel, Recast — 3B dünyada “nereye yürüyebilirim?”
PRESS ▶ TO START

Bu derste oyunun haritası 🗺️

  1. Neden navmesh? — yol noktalarının beş kusuru (Tozour, World of Warcraft örnekleri)
  2. Navmesh üzerinde yol bulma — çokgen grafında A*, koridor
  3. Funnel algoritması — koridordan en kısa yola (adım adım)
  4. Üretim — Recast: rasterleştir, aşındır, böl
  5. Dinamik dünya — kapılar, engeller, atlama bağlantıları, alan maliyetleri
  6. Kod — Unity NavMeshAgent, Unreal, Godot + iki laboratuvar
  7. Motorlarda — NavMeshSurface, Nav Modifier, NavigationRegion, Recast & Detour
🎮 Bu dersin sonunda…

…bir navmesh’in ne olduğunu ve neden yol noktalarından iyi olduğunu açıklayabilecek, çokgen koridorundan en kısa yolu çıkaran funnel algoritmasını izleyebilecek, Unity/Unreal/Godot’da navmesh pişirip ajan yürütebilecek ve kapı, engel, atlama gibi durumları doğru kurabileceksiniz.

🤔 ISINMA: Y8’DEKİ IZGARA 3B DÜNYADA YETER Mİ?

Merdivenleri, rampaları, köprüleri, masaların altını olan bir 3B seviyeyi kare ızgaraya nasıl bölersiniz?

  • Izgara katları ve eğimleri bilmez; ince kareler milyonlarca düğüm, kaba kareler kaba yollar demektir.
  • 2000’lerin oyunları elle yerleştirilmiş yol noktaları kullandı: karakterler noktadan noktaya zikzak çizdi, ortadaki kutuya takıldı.
  • Bugünün çözümü: yürünebilir zemini dışbükey çokgenlerle örtmek. Az düğüm, tam kapsama, her çokgenin içinde serbest hareket. Unity, Unreal ve Godot’nun hepsi bunu kullanır.

🎯 Bu konu için bilmeniz gerekenler

Yeşil = gerekli · kesikli = faydalı ama şart değil. Tıklayınca ilgili sunuma gider.

Neden?Navmesh, Y8’deki A*’ın çalıştığı graftır; sadece düğümler kare değil çokgen. Funnel algoritması tek bir geometri aracı kullanır: Y0’daki çapraz çarpımın işareti (“bu nokta çizginin solunda mı sağında mı?”).
🧰 Kodlamadan korkuyorsanızMotorlarda navmesh tek tıkla pişirilir (Unity: NavMeshSurface → Bake; Unreal: NavMeshBoundsVolume; Godot: NavigationRegion → Bake). Bu sunumun “Motorlarda navmesh” bölümünü önce okuyup oyununuza ekleyebilir, algoritmaları sonra öğrenebilirsiniz.

Mini sözlük

navigation mesh (navmesh)gezinti ağıYürünebilir zemini örten dışbükey çokgenler kümesi
convex polygondışbükey çokgenİçindeki herhangi iki noktayı birleştiren doğru içinde kalır: içinde düz yürümek her zaman güvenli
portal · corridorkapı kenarı · koridorİki çokgenin ortak kenarı · yolun geçtiği çokgen dizisi
funnel algorithmhuni algoritmasıKoridordan en kısa (köşelere teğet) yolu çıkarır (“string pulling”)
voxel · erosion · agent radiushacim hücresi · aşındırma · ajan yarıçapıRecast’ın adımları: dünyayı küplere böl, duvarlardan yarıçap kadar uzaklaş
tilekaroBüyük haritada navmesh’i parça parça üretme/güncelleme birimi
off-mesh link / NavMeshLinkağ dışı bağlantıAtlama, merdiven, ışınlanma: çokgenlerle bağlı olmayan iki noktayı bağlar
carving / dynamic obstacleoyma / dinamik engelHareket eden kutunun navmesh’ten delik açması
area costalan maliyetiSu, çamur, tehlikeli bölge gibi alanları pahalı yapmak
LEVEL 0
Neden navmesh?
yol noktalarının beş kusuru
  • neden navmesh?
  • navmesh üzerinde yol bulma
  • funnel algoritması
  • navmesh üretimi
  • dinamik dünya
  • kod ve laboratuvarlar
  • motorlarda navmesh

Hikâye: “Fixing Pathfinding Once and For All” (Paul Tozour, 2008)

Deneyimli YZ programcısı Paul Tozour, o yıllarda bilgisayarında kurulu olan çok satan oyunların en son yamalı sürümlerinde karakterlerin duvarlara toslayıp, takılıp, zikzak çizdiği sahnelerden bir video derledi ve şunu yazdı: “Bu oyunların çoğu bildiğim kadarıyla yol noktası grafları kullanıyor. Yol noktası grafları artık modası geçmiş bir yöntem.”

Örnekleri World of Warcraft’tan: Stormwind şehrinin bir parçası ve Halaa kasabası. Açık bir kasaba alanını kapsamak için çok sayıda yol noktası gerekirken, aynı alan birkaç büyük dışbükey çokgenle anlatılabiliyordu.

Tozour’un beş nedeni: yol noktaları…
  1. Bazı dünyalarda gülünç sayıda nokta gerektirir (açık alanlar).
  2. Karakterleri zikzak çizdirir.
  3. Yol düzeltmeye izin vermez: grafın dışını bilmediği için köprüdeki bir sandığın solundan mı sağından mı geçileceğini bilemez.
  4. Farklı hareket eden karakterler için sağlam çalışmaz (büyük, küçük, uçan…).
  5. Yol bulmanın ötesinde YZ’nin ihtiyaç duyduğu veriyi taşımaz (nereye siper alınır, nerede saklanılır…).

Izgara, yol noktası, navmesh

Izgara: çok düğüm, basamaklı yol Yol noktası: az düğüm, zikzak, dışı bilinmez Navmesh: 4 çokgen, köşelere teğet yol

Navmesh’te her çokgen dışbükey olduğu için çokgen içinde düz çizgide yürümek her zaman güvenli; engelin “kenarını” bildiğimiz için yol köşelere tam teğet geçebilir ve ajan çokgenden çıkmadığı sürece yolu serbestçe düzeltebilir.

LEVEL 1
Navmesh üzerinde yol bulma
çokgen grafında A* ve koridor
  • neden navmesh?
  • navmesh üzerinde yol bulma
  • funnel algoritması
  • navmesh üretimi
  • dinamik dünya
  • kod ve laboratuvarlar
  • motorlarda navmesh

Çizimle: navmesh’te yol üç adımda bulunur

duvarABCD🧍🏁① Konum bulBaşlangıç A çokgeninde, hedef D çokgeninde.② Çokgenler arasında A*Düğüm = çokgen, kenar = ortak kenar (turuncu kesikli: “portal”).Sonuç bir koridor: A → B → C → D.③ Koridorun içinde yolGri kesikli: portalların ortasından geçmek (zikzak, uzun).Yeşil: huni (funnel) algoritmasının bulduğu yol;duvarın köşesine teğet geçer, en kısadır.Çokgenin içinde her yere düz yürünebilir;düşünmek gereken tek yer çokgenler arasındaki geçişlerdir.

Navmesh üzerinde yol bulmanın üç adımı

1) Konum bulBaşlangıç ve hedef hangi çokgende? “Nokta dışbükey çokgenin içinde mi?” testi (laboratuvar!). Büyük ağlarda önce uzamsal ızgara/ağaç ile adaylar daraltılır.
2) Çokgen grafında A*Düğüm = çokgen, kenar = portal (ortak kenar). Maliyet genelde portal orta noktaları arası mesafe; sezgi Öklid. Sonuç bir koridor: geçilecek çokgenler dizisi.
3) Koridordan yolPortalların orta noktalarından geçmek zikzak çizer. Funnel algoritması koridorun içinde kalan en kısa yolu bulur: köşelere teğet, gerektiği kadar dönüş.

Sonra yolu Y7’deki gibi steering (arrive, kaçınma) ile izleriz. Unity’nin NavMeshAgent’ı bu dördünü birden yapar.

Canlı: tıkla, git 🧭

  1. Farklı odalara tıklayın. Mavi çokgenler koridor; A* bu dikdörtgenler üzerinde çalışıyor (12 düğüm!). Y8’deki ızgara aynı alan için yüzlerce düğüm gerektirirdi.
  2. “Yol”u portal orta noktaları yapın: kırmızı zikzak. Sonra funnel: mor çizgi köşelere teğet geçiyor ve daha kısa (alttaki uzunluğa bakın).
  3. “Kapı açık”ı kapatın: ortadaki dikey geçit kapanır; A* başka bir koridor bulur. Dinamik engel böyle işlenir.
  4. “Ada”ya tıklayın: yol yok. “Atlama bağlantısı”nı açın: ajan kenardan adaya atlıyor (turuncu). Bu bir off-mesh link.
  5. Çokgenleri gizleyin: oyuncu bunların hiçbirini görmez, sadece akıllı yürüyen bir karakter görür.
  6. 🔗 Gerçeğini görün: Unity AI Navigation belgeleri (NavMeshSurface → Bake) · funnel’ın kaynağı: Mikko Mononen — Simple Stupid Funnel Algorithm · navmesh üzerinde A* oynanabilir anlatım: Red Blob Games.
🔎 DEMODA DENEYİN
  1. Farklı odalara tıklayın. Mavi çokgenler koridor; A* bu dikdörtgenler üzerinde çalışıyor (12 düğüm!). Y8’deki ızgara aynı alan için yüzlerce düğüm gerektirirdi.
  2. “Yol”u portal orta noktaları yapın: kırmızı zikzak. Sonra funnel: mor çizgi köşelere teğet geçiyor ve daha kısa (alttaki uzunluğa bakın).
  3. “Kapı açık”ı kapatın: ortadaki dikey geçit kapanır; A* başka bir koridor bulur. Dinamik engel böyle işlenir.
  4. “Ada”ya tıklayın: yol yok. “Atlama bağlantısı”nı açın: ajan kenardan adaya atlıyor (turuncu). Bu bir off-mesh link.
  5. Çokgenleri gizleyin: oyuncu bunların hiçbirini görmez, sadece akıllı yürüyen bir karakter görür.
  6. 🔗 Gerçeğini görün: Unity AI Navigation belgeleri (NavMeshSurface → Bake) · funnel’ın kaynağı: Mikko Mononen — Simple Stupid Funnel Algorithm · navmesh üzerinde A* oynanabilir anlatım: Red Blob Games.

🔗 Başka gözle: etkileşimli anlatımlar ve yazılar

Aynı konuyu başka bir anlatımla, kendi elinizle oynayarak görmek çok işe yarar. Kartlar yeni sekmede açılır; çoğu İngilizce ama görsel ve etkileşimli.

Quiz 1 · yol bulma
Navmesh’teki çokgenlerin dışbükey olması neden önemlidir?
Dışbükeylik, “bu çokgendeyken düz git” kararını güvenli yapar: içbükey (ör. L şeklinde) bir çokgende düz çizgi duvara çarpabilir. Böylece yol bulma sadece çokgenler arasında yapılır; içeride serbest hareket edilir.
LEVEL 2
Funnel algoritması
koridordan en kısa yola
  • neden navmesh?
  • navmesh üzerinde yol bulma
  • funnel algoritması
  • navmesh üretimi
  • dinamik dünya
  • kod ve laboratuvarlar
  • motorlarda navmesh

Huni fikri

  • Bir tepe noktası (apex; başta başlangıç noktası) ve ondan çıkan iki kenar düşünün: sol kenar ve sağ kenar. Bu bir huni.
  • Sırayla her portala bakın. Portalın sol ucu huninin içindeyse sol kenarı oraya daralt; sağ uç için de aynısı.
  • Bir kenar diğerinin üstünden geçerse huni kapanmış demektir: o köşe yolun bir dönüş noktası olur ve yeni tepe noktası oradan başlar.
  • Hedefe gelince bitti. Sonuç: en az sayıda köşe, en kısa yol.

Mikko Mononen (Recast’ın yazarı) 2010’da bunun kısa bir sürümünü “Simple Stupid Funnel Algorithm” adıyla blogunda yayımladı; birçok motor ve eklentide (ör. A* Pathfinding Project) kullanılır.

🎒 Tek geometri aracı: çapraz çarpıma, b, c noktaları için (b − a) × (c − a) = (bx − ax)(cy − ay) − (cx − ax)(by − ay). İşareti, c’nin a→b çizgisinin solunda mı sağında mı olduğunu söyler (sıfırsa aynı çizgide). Y0’daki çapraz çarpımın aynısı; funnel, nokta-çokgen testi ve görüş hattı hepsi bunu kullanır.

Funnel adım adım

Quiz 2 · funnel
Neden portal orta noktalarından geçen yol yerine funnel kullanırız?
Orta noktalar her zaman koridorun içinde kalır (güvenlidir) ama karakter gereksiz yere sağa sola salınır. Funnel, aynı koridorun içinde kalarak köşelere teğet en kısa yolu bulur. A*’ı ortadan kaldırmaz: önce A* koridoru bulur, sonra funnel o koridoru düzleştirir.
LEVEL 3
Navmesh üretimi
Recast: voxel’den çokgene
  • neden navmesh?
  • navmesh üzerinde yol bulma
  • funnel algoritması
  • navmesh üretimi
  • dinamik dünya
  • kod ve laboratuvarlar
  • motorlarda navmesh

Recast: navmesh’i otomatik üretmek

Mikko Mononen’in açık kaynak Recast kütüphanesi (yol bulma kısmı Detour) bugün endüstrinin ortak dili: Unreal Engine’in navmesh’i Recast/Detour tabanlıdır; birçok stüdyo ve motor kullanır. Adımlar:

  1. Rasterleştirme: seviye geometrisi küçük küplere (voxel) bölünür.
  2. Yürünebilirlik filtresi: eğimi fazla yüzeyler, tavanı alçak yerler (ajan boyu), basamak yüksekliği kontrolü.
  3. Aşındırma: ajan yarıçapı kadar duvarlardan geri çekil. Kalan alan = ajanın merkezinin gidebileceği yerler.
  4. Bölgeler: kalan alan su seviyesi (watershed) benzeri bir yöntemle bölgelere ayrılır.
  5. Konturlar ve çokgenler: bölge sınırları sadeleştirilip dışbükey çokgenlere bölünür; çokgenler arası portallar çıkarılır.
Ajan boyutu bir parametreNavmesh belirli bir ajan için üretilir: yarıçap, boy, en büyük eğim, basamak yüksekliği. Dev bir golem için başka, kedi için başka navmesh pişirilir (Unity: “Agent Types”). Y8’deki Dragoon sorununun navmesh çözümü budur.
Karolar (tiles)Açık dünyada navmesh tek parça değil, karolar hâlinde üretilir: oyuncu yaklaştıkça yüklenir, bir duvar yıkılınca sadece o karo yeniden pişirilir.

Canlı: 2B’de Recast fikri

🔎 DEMODA DENEYİN
  1. Dört düğmeye sırayla basın: geometri → yürünebilir hücreler → aşındırma (turuncu: ajanın merkezi buraya giremez) → çokgenler.
  2. Ajan yarıçapını 0’dan 6’ya çıkarın. Sütun ile duvar arasındaki dar geçit hangi yarıçapta kapanıyor? Bu, büyük bir karakterin oradan geçmemesi gerektiği anlamına gelir.
  3. Çokgen sayısına bakın: yarıçap büyüdükçe artıyor mu, azalıyor mu? Gerçek Recast dikdörtgen değil, keyfi dışbükey çokgenler üretir; sayı çok daha azdır.

Bu demo Recast’ın 2B ve sadeleştirilmiş bir taklidi (açgözlü dikdörtgen birleştirme). Gerçek boru hattı 3B’dir, eğim ve yükseklik de içerir ve konturları sadeleştirir.

🎬 Ara: navigasyon ağı nasıl çalışır?

How A Navigation Mesh Works in 3D Games
AI and Games (Tommy Thompson) · 16 dk 14 sn · YouTube’da aç

Navmesh’in gerçek oyunlardaki yolculuğu: seviyeden yürünebilir alanı çıkarmak, çokgenler üzerinde yol aramak ve yolu düzleştirmek. Bu sunumun bütün parçalarının tek videoda birleşimi.

🤔 İzlerkenVideoda yürünebilir alan hangi adımlarla çıkarılıyor? Karakterin yarıçapı navmesh’e nasıl yansıyor? Kapı açılınca ya da köprü yıkılınca navmesh’e ne oluyor?
LEVEL 4
Dinamik dünya
kapılar, engeller, atlamalar, maliyetler
  • neden navmesh?
  • navmesh üzerinde yol bulma
  • funnel algoritması
  • navmesh üretimi
  • dinamik dünya
  • kod ve laboratuvarlar
  • motorlarda navmesh

Statik navmesh, dinamik dünya

Hareketli engeller
  • Kaçınma (Unity NavMeshObstacle, carve kapalı): ajanlar engelin etrafından yerel olarak dolaşır; yol değişmez. Hareket eden şeyler (araba, yuvarlanan kaya) için.
  • Oyma (carve açık): engel navmesh’te delik açar, yollar yeniden hesaplanır. Duran şeyler için (kapatılan kapı, bırakılan sandık). Pahalıdır; sürekli hareket eden şeyde kullanmayın.
Ağ dışı bağlantılar (off-mesh links)Atlama, aşağı inme, merdiven, tırmanma, ışınlanma: çokgenlerle bağlı olmayan iki noktayı bir “kenarla” bağlarsınız. Ajan oraya varınca özel bir animasyon oynatılır (Unity NavMeshLink, Unreal Nav Link Proxy, Godot NavigationLink).
Alan türleri ve maliyetlerNavmesh’in bölgeleri “yürünebilir”, “su”, “çamur”, “tehlikeli” gibi alan türleriyle işaretlenir; her türün maliyeti var ve ajan türüne göre bazıları tamamen yasak olabilir. Unity: NavMeshModifier + alan maliyetleri; Unreal: Nav Modifier Volume + Nav Area sınıfları.
⚠️ Sık hataKapıyı fiziksel olarak kapatıp navmesh’e haber vermemek: ajan kapıya kadar yürür, orada sonsuza kadar iter. Ya kapıya oyan bir engel koyun ya da kapalıyken portalı/alanı yasaklayın (demodaki “kapı açık” kutusu).

Navmesh yetmediğinde: uçan ve tırmanan

3B uçuş: seyrek voxel ağaçlarıNavmesh bir zemin temsilidir. Uzayda, havada ya da su altında hareket eden düşmanlar için 3B uzay gerekir. Warframe ekibi (Daniel Brewer, Game AI Pro 3, 21. bölüm) uçan düşmanlar için uzayı seyrek voxel octree ile temsil edip üstünde A* çalıştırdı: boş büyük bölgeler tek düğüm, engel kenarları ince ayrıntılı.
Eğilmek, sürünmek, yüzmekVoxel tabanlı navmesh normalde sadece “ayakta durulabilen” yerleri içerir. Kevin Kirst (Game AI Pro 2, 32. bölüm): üretimi genişletip eğilerek, sürünerek, yan yan ya da yüzerek geçilebilen alanları da işaretlemek; ajan yolu izlerken bu bilgiyle duruşunu değiştirir.

Taktik yol bulma (tehlikeli alanlardan kaçınmak, siper siper ilerlemek) navmesh üzerinde maliyetleri değiştirerek yapılır: Daniel Brewer, “Tactical Pathfinding on a NavMesh” (Game AI Pro, 27. bölüm) — Y12’de.

Quiz 3 · dinamik
Oyunda sürekli yuvarlanan dev bir kaya var. Unity’de ona hangi ayar uygun?
Sürekli hareket eden şeyler için oyma pahalıdır ve sürekli yeniden yol hesaplatır; yerel kaçınma yeterlidir. Oyma, bir süre yerinde duran engeller içindir (Unity’nin “Carve Only Stationary” seçeneği de bunu yapar). Static işaretlemek ise kayayı hiç hareket etmeyecekmiş gibi navmesh’e gömer.
LEVEL 5
Kod ve laboratuvarlar
geometri ve motor API’leri
  • neden navmesh?
  • navmesh üzerinde yol bulma
  • funnel algoritması
  • navmesh üretimi
  • dinamik dünya
  • kod ve laboratuvarlar
  • motorlarda navmesh

Geometri araçları

Dikkat: ekranda y aşağı doğru büyür; bu “sol” ve “sağ”ın anlamını değiştirir. Nokta-çokgen testi yönden bağımsızdır (işaretlerin aynı olması yeter); funnel’da ise tutarlı bir yön seçmek gerekir.

Unity: NavMeshAgent ile ajan

  1. Package Manager → AI Navigation paketini kurun.
  2. Zemin nesnesine NavMeshSurface ekleyin → Bake. Mavi örtü = navmesh.
  3. Karaktere NavMeshAgent bileşeni: yarıçap, boy, hız, ivme, dönme hızı, durma mesafesi.
  4. Kapı/sandık: NavMeshObstacle (carve). Su/çamur: NavMeshModifier ile alan türü.
  5. Atlama/merdiven: NavMeshLink; ajan bağlantıya gelince isOnOffMeshLink olur, animasyonu siz oynatırsınız.

Unreal ve Godot

Godot örneğinde dil GDScript; renklendirme Python sözdizimiyle. Web’de Recast’in WebAssembly sürümü recast-navigation-js da var.

🌱 Isınma kodu: ajan bu çokgende mi?

Navmesh’te yol bulmanın ilk adımı: “ajan ve hedef hangi çokgende?” Canlı demodaki çokgenler dikdörtgen olduğu için bu dört karşılaştırma yeter. Keyfi dışbükey çokgenler için birazdan çapraz çarpımlı sürümünü yazacaksınız.

🌱 Isınma kodu: portalın orta noktası

En basit navmesh yolu: koridordaki her portalın orta noktasından geç. Her zaman güvenlidir (koridorun içinde kalır) ama zikzak çizer; funnel bunu düzeltir. A* da çokgenler arası mesafeyi genelde bu orta noktalarla ölçer.

🧪 Canlı laboratuvar: ajan hangi çokgende?

Başlangıç kodu sadece köşeleri belli bir yönde sıralı çokgenlerde çalışır. Çokgen ters yönde sıralanmışsa hep false verir. Düzeltin: ilk sıfır olmayan işareti hatırlayın ve farklı işaret görürseniz false döndürün. Sonra fareyi soldaki çokgenlerin üstünde gezdirin.

🐍 Laboratuvar: sol mu, sağ mı?

Funnel, görüş hattı ve nokta-çokgen testinin ortak taşı. Formül: (bx − ax)(cy − ay) − (cx − ax)(by − ay). Testlerde aynı çizgi üstündeki ve a = b olan durumlar da var.

🐍 Laboratuvar: çokgen alanı

Ayakkabı bağı formülü. Navmesh araçları alanı, çok küçük (ajanın sığamayacağı) çokgenleri temizlemek ve rastgele bir noktayı (ör. devriye hedefi) çokgenin alanıyla orantılı seçmek için kullanır.
LEVEL 6
Motorlarda navmesh
araçlar, tuzaklar, entegrasyon
  • neden navmesh?
  • navmesh üzerinde yol bulma
  • funnel algoritması
  • navmesh üretimi
  • dinamik dünya
  • kod ve laboratuvarlar
  • motorlarda navmesh

🧰 Kütüphaneler ve araçlar

adplatformne yapar / sınırlarınasıl eklenir
Unity AI NavigationUnity · resmî paketNavMeshSurface (pişirme, çalışma anında da), NavMeshAgent (yol + funnel + kaçınma), NavMeshObstacle (oyma), NavMeshLink, NavMeshModifier (alan türü), birden çok ajan türü.Package Manager → AI Navigation
A* Pathfinding ProjectUnity · ücretsiz + ProKendi navmesh/recast grafları, ızgara ile karıştırma, çok iş parçacığı, funnel ve yumuşatma; Unity navmesh’inin yetmediği yerlerde.Asset Store / UnityPackage
Unreal Navigation SystemUnreal · yerleşikRecast/Detour tabanlı; NavMeshBoundsVolume, Nav Modifier Volume, Nav Area, Nav Link Proxy, dinamik yeniden üretim (Runtime Generation).Seviyeye NavMeshBoundsVolume
Godot NavigationGodot 4 · yerleşikNavigationRegion2D/3D (pişirme), NavigationAgent (yol + kaçınma), NavigationLink, NavigationObstacle.Sahneye NavigationRegion3D → Bake
Recast & DetourC++ · açık kaynakNavmesh üretimi + sorgu + kalabalık (DetourCrowd). Kendi motorunuz için endüstri standardı.CMake
recast-navigation-jsJavaScript (WebAssembly)Recast/Detour’un web sürümü; three.js ve diğer web motorlarıyla.npm install recast-navigation
three-pathfindingJavaScriptHazır bir navmesh geometrisinde A* + funnel; küçük web oyunları için hafif.npm install three-pathfinding

🧩 Projenize navmesh eklerken: kontrol listesi

  1. Ajan ölçülerini önce belirleyin: yarıçap, boy, eğim, basamak. Karakter modeli değişirse yeniden pişirin.
  2. Pişirilecek geometriyi seçin: sadece zemin ve duvarlar; süs objeleri, çimen, küçük çakıllar navmesh’i parçalar.
  3. Görselleştirin: Unity Scene görünümünde navmesh, Unreal’da P tuşu. Delik, kopuk ada, merdivende boşluk var mı?
  4. Bağlantıları ekleyin: atlama, inme, merdiven, kapılar.
  5. Hedefi navmesh’e yapıştırın: tıklanan nokta navmesh dışındaysa SamplePosition ile en yakın noktayı kullanın.
  6. Steering ile birleştirin: ajanın hız ve dönüşünü animasyonla eşleyin (kayan ayaklar!).
“Ajan takılıyor” sorunlarının çoğu…
  • Navmesh’te görünmeyen bir boşluk (iki çokgen bağlı değil)
  • Yarıçap pişirmedekinden büyük ajan
  • Fizik çarpıştırıcısı navmesh’e dahil edilmemiş bir engel
  • Rigidbody ile NavMeshAgent’ın aynı anda konumu değiştirmesi
  • Hedefin navmesh dışında olması
⚙️ PerformansBüyük dünyada karolu, çalışma anında üretim; yalnızca değişen karoyu yeniden pişirin. Çok sayıda ajan için yol isteklerini sıraya koyun (Unity bunu kendi yapar, “Pathfinding Iterations Per Frame”).

🤖 Bu konuyu bir YZ kod asistanıyla yazarken

Sık yapılan hatalar — kontrol edin
  • Eski Unity “Navigation” penceresi talimatları (2022 öncesi; artık NavMeshSurface)
  • OffMeshLink yerine NavMeshLink karışıklığı
  • NavMeshAgent varken transform.position’ı elle değiştirmek (Warp kullanın)
  • Hedefi navmesh dışında vermek ve “yol bulamıyor” sanmak
  • Godot 3 ile 4 navigasyon API’lerini karıştırmak
İyi bir istek (prompt) örneği

“Unity 6, AI Navigation 2.x. Bir zombi için: NavMeshSurface çalışma anında yeniden pişirilebilsin (oyuncu barikat kurunca). Zombi NavMeshAgent ile oyuncuyu kovalasın; SetDestination’ı her karede değil, oyuncu 1 m’den fazla hareket edince çağırsın. Barikatlar NavMeshObstacle (carve, yalnızca dururken). Pencerelerden atlama için NavMeshLink; bağlantıdayken 0.6 sn süren bir atlama animasyonu oynat, sonra CompleteOffMeshLink. Hız büyüklüğünü Animator “Speed”e gönder. Gizmos ile agent.path köşelerini çiz.”

  • Motoru ve sürümünü (Unity 6 AI Navigation, UE 5.x, Godot 4.x) açıkça yazın: API’ler sürümler arasında çok değişti
  • Ajan ölçülerini ve hangi nesnelerin navmesh’e dahil olacağını söyleyin
  • Kapı, atlama, su gibi özel durumları tek tek listeleyin
  • Hata ayıklama görselleştirmesi (yol çizgisi, hedef) isteyin

🔬 Araştırma ucu

Prosedürel dünyalarHer oyunda yeniden üretilen haritalarda (Y15) navmesh’in hızla, karolar hâlinde, yükleme ekranını uzatmadan üretilmesi. Hangi parametreler ne kadar süre kazandırıyor?
Yıkılabilir ortamDuvarlar patlayınca navmesh’in yerel güncellenmesi ve bu sırada yolu izleyen ajanların “kör” kalmaması; D* Lite (Y8) gibi artımlı yöntemlerle birleşim.
Öğrenilmiş hareket + navmeshPekiştirmeli öğrenmeyle eğitilmiş bir ajan (Y13) navmesh yolunu “rehber” olarak kullanıp zıplama, kayma gibi hareketleri kendisi seçebilir mi? Parkur oyunları için ilginç.

💬 Tartışma soruları

Yanınızdakiyle 2 dakika konuşun, sonra sınıfça tartışalım
  1. Oynadığınız bir oyunda bir karakterin bir kapıya, merdivene ya da köşeye takılıp kaldığını gördünüz mü? Bu derste öğrendiklerinizle sebebini tahmin edin: navmesh’te delik mi, haber verilmeyen kapı mı, birim boyu mu?
  2. Aynı seviyede hem bir fare hem bir dev dolaşacak. Tek navmesh yeter mi? Dev, farenin geçtiği delikten geçmeye çalışırsa ne olur?
  3. Oyuncu bir duvarı patlatıp yeni bir geçit açtı. Navmesh’in bunu “öğrenmesi” için ne yapılmalı? Bütün haritayı yeniden üretmek neden kötü bir fikir?
  4. Uçan bir ejderha ya da yüzen bir köpekbalığı için navmesh işe yarar mı? Yaramazsa ne kullanılır?

🚀 Proje ve araştırma önerileri

  1. [kolay] Tıkla-git — Unity ya da Godot’da bir oda + NavMeshSurface + tıklanan yere yürüyen karakter. Navmesh’i ve yolu ekranda çizin.
  2. [kolay] Kapı anahtarı — Oyuncu bir şalteri çekince kapı açılsın; kapalıyken NavMeshObstacle (carve) ile geçit kapansın. Düşman başka yoldan dolaşıyor mu?
  3. [orta] Parkur düşmanı — Platformlar arası atlama ve aşağı inme bağlantıları; düşman oyuncuyu bağlantıları kullanarak kovalasın.
  4. [orta] p5.js navmesh — Bu sunumdaki dikdörtgen navmesh + funnel’ı kendi seviye editörünüzle yazın.
  5. [zor] Mini Recast — 2B bir haritadan otomatik navmesh: rasterleştirme, aşındırma, bölgeler, kontur sadeleştirme, üçgenleme.
  6. [araştırma] Navmesh vs ızgara — Aynı 3B seviyede ızgara A* ve navmesh A* + funnel’ı düğüm sayısı, süre ve yol kalitesiyle karşılaştırın.

Neler öğrendik? 🎒

  • Navmesh: yürünebilir zemini örten dışbükey çokgenler; yol noktalarının beş kusurunu çözer (Tozour).
  • Yol bulma: konum bul → çokgen grafında A* → koridor → funnel.
  • Funnel: tepe, sol/sağ kenar, çapraz çarpım; köşelere teğet en kısa yol.
  • Üretim (Recast): rasterleştir, filtrele, aşındır (ajan yarıçapı), bölgele, çokgenleştir; karolar.
  • Dinamik: kaçınma vs oyma, ağ dışı bağlantılar, alan maliyetleri; uçuş için voxel octree (Warframe).
  • Araçlar: Unity AI Navigation, Unreal Navigation, Godot Navigation, Recast/Detour, three-pathfinding.
  • Sonraki: grup YZ’si — formasyonlar, sürüler, takım koordinasyonu.

🎮 Bu sunumdaki oyunlar

Adı geçen oyunu tanımıyorsanız: oyuncuların kullandığı wiki sayfası ve oyunu kısaca gösteren bir video. ▶ video slaydın üstünde açılır (Esc ile kapanır); 🎯 işaretli bağlantılar doğrudan bu sunumdaki konuya gider.

World of Warcraft 2004 · MMO
Milyonlarca oyunculu çevrimiçi rol yapma oyunu.
Warframe 2013 · eşli aksiyon
Uzay ninjalarıyla oynanan ücretsiz çevrimiçi nişancı.

Kaynaklar: videolar ve okumalar 🎬

📄 Akademik okumalar

Sturtevant 2013 · Choosing a Search Space Representation (Game AI Pro, Bölüm 18)
Izgara, yol noktası, navmesh: artılar ve eksiler.
Brewer 2013 · Tactical Pathfinding on a NavMesh (Game AI Pro, Bölüm 27)
Navmesh üzerinde taktik maliyetler (Y12).
Kirst 2015 · Extending the Spatial Coverage of a Voxel-Based Navigation Mesh (Game AI Pro 2, Bölüm 32)
Eğilme, sürünme, yüzme alanları.
Brewer 2017 · 3D Flight Navigation Using Sparse Voxel Octrees (Game AI Pro 3, Bölüm 21)
Warframe’de uçan düşmanlar.
Hale & Youngblood 2013 · Creating High-Order Navigation Meshes through Iterative Wavefront Edge Expansions (Game AI Pro, Bölüm 19)
Daha az çokgenli navmesh üretimi.
NEXT LEVEL ▶
Grup Yapay Zekâsı
Formasyonlar, takımlar, koordinasyon: birlikte hareket etmek
SONRAKİ SUNUM ▶