OpenLabWorkAbone ol
Tüm notlar
N° 002Araştırmalar· 3 dk okuma

Karakterlerimiz merdivenden koşarak çıkabiliyordu. Yürüyerek çıkamıyorlardı.

BeeMaster Engine'den Lab Log #001: 4 m/s'de geçen bir merdiven testi, ilk basamağı hiç aşamayan yürüyen bir karakter, arkasındaki geometri ve düzeltmeden sonra ölçtüklerimiz.

Proje: BeeMaster Engine

▶ Bölümü izle: Lab Log #001 YouTube’da

Merdiven aslında hiçbir zaman asıl konu değil. Bir oyun dünyasında karakter etrafındaki şeylerle kendiliğinden baş edebilmeli: bir basamak, bir çıkıntı, bir kapı, taşınacak bir kutu, oturulacak bir sandalye. Pek çok projede bunların her biri kendi başına küçük bir projeye dönüşür: bir animasyon, bir tetikleyici, bir betik ve elle ayarlanmış sayılar. Biz şeylerin ne olduğunu ve bir bedenin onlarla nasıl buluştuğunu anlamaya çalışan bir motor geliştiriyoruz; doğal olan varsayılan olarak gerçekleşsin, derine yalnızca istediğinde in. Merdiven bu fikrin ilk ve en basit sınavı.

Motorun gri kutu test sahnesindeki merdiven düzeneği ve yürüyen karakteri temsil eden kapsül
Gri kutu test sahnemizdeki merdiven düzeneği. Test geometrisi, bitmiş görsel değil.

Geçen test

Çarpışma için çoğu motor yürüyen bir karakteri kapsül olarak ele alır: iki yarım küreli bir silindir. Bir basamağı çıkmak için her karede üç şey yapar: en yüksek basamak yüksekliği kadar yükselir, ileri gider, altındaki zemine geri iner. BeeMaster’da bir basamak en fazla 0,30 m olabilir; daha yükseği duvardır.

Basamaktaki üç hareketin tebeşir çizimi: yüksel, ileri git, geri in
Yüksel, ileri git, geri in: her karede.

İlk merdiven senaryomuz (bir oyuncu ve bir NPC’nin yukarı çıkıp aşağı inmesi ve fazla yüksek bir çıkıntıda durması) geçti. 4 m/s’de geçti. Bu bir koşu hızı.

Yalnızca yürüme hızında var olan hata

Bir gün sonra altı karakter küçük bir test seviyesinde dolaştı. 1,4 ve 1,15 m/s ile yürüyen ikisinin merdiveni çıkması gerekiyordu. İkisi de ilk basamağın kenarında durdu ve bir daha hiç ilerlemedi.

Motorda merdivenin yanındaki kutu biçimli test karakterleri
Motordaki altı karakterli test seviyesi.

Motor saniyede 60 adım atıyor; yani karakter her karede Δx = v / 60 kadar ilerliyor: yürürken yaklaşık 2,3 cm, koşarken 6,7 cm. Bu kadar küçük bir hareketten sonra kapsülün yuvarlak tabanı basamağın üstüne değil, kenarına indi. Bir köşeye değen küre, köşeden merkezine giden doğru boyunca itilir: n = (−d, √(r² − d²)) / r; burada d merkezin kenarın ne kadar gerisinde olduğu. Merkez kenarın gerisindeyken bu itişin geriye doğru bir bileşeni var. Kapsül geri kaydı, basamak reddedildi ve bir sonraki karede aynısı oldu. Sonrakinde de.

Kapsülün basamak köşesinde, temas normali ve geriye bakan bileşeniyle tebeşir çizimi
Merkez kenarın gerisindeyken temas normali kısmen geriye bakar.

4 m/s’de her hareket yaklaşık üç kat büyüktü ve senaryomuzda bu, basamağın kabul edilmesine yetiyordu. Kutu biçimli bir karakterde bu sorun hiç yoktu: kare köşeye oturan düz taban dümdüz yukarı itilir. Testimiz geçti, çünkü kimsenin gerçekte yürümediği bir hızda yürüyordu.

Düzeltme ve ardından ayaklar

Düzeltme küçüktü: basamağın üstü karakterin taban izinin altına girmişse ve bir basamak yüksekliği içindeyse, karakteri oraya indir; tıpkı bir kutunun duracağı gibi. Climber ve Courier yukarı çıktı.

Sonra ayaklarına kare kare baktık. Merdivende, yere basılı kalması gereken bir ayak tek karede 12,5 cm sıçradı ve bacağı 31° döndü. Bunu bir ekran görüntüsünde asla göremezsin; hareket hâlinde ise karakterin ağırlığı varmış gibi hissettirmeyi bıraktığı an budur. Ayağın nereye basması gerektiğini animasyona soruyorduk; ayağın gerçekte nerede olduğuna ve bacağın oraya hâlâ uzanıp uzanamadığına bakmıyorduk. Artık ayak gerçekten olduğu yere ve yalnızca bacağının erişebildiği yere basıyor; erişim dışındaysa kalkıyor, adım atıyor ve yeniden basıyor. Çarpıştırıcının düz taban izi, kalça hâlâ önceki basamağın üstündeyken bir sonraki basamakta durabildiği için gövde düzeltmeleri de artık gövdenin altındaki zeminden ölçülüyor.

Animasyonun ayağı gösterdiği yer ile ayağın gerçek yerini karşılaştıran tebeşir çizimi
Animasyonun ayağı gösterdiği yer ve ayağın gerçek yeri.

Ölçtüklerimiz

Doğrudan motordan, saniyede 60 örnekle (kalça, diz, ayak bileği), altı karakter, her biri 600 adım, hata ayıklama derlemesi:

  • 3.880 basılı ayak adımı; basılı bir ayak 0 m kaydı.
  • Hiçbir ayak zemine girmedi.
  • Merdivende alttaki ayak, önceden kabaca dört adımda üçünde kendi basamağındaydı (82’de 61, 100’de 83); şimdi her adımda (184’te 184, 220’de 220).
  • Karakter başına kare başına yaklaşık 50 µs.
Kaydedilmiş motor verisinden çizilen, merdiveni çıkan Climber
Bugünkü Climber, kaydedilmiş motor verisinden çizildi. Basamaktaki her işaret, bir ayağın bastığı an.

Ders

Uygun tek bir hızda geçen test, diğer hızlar hakkında hiçbir şey söylemez. BeeMaster’da hareket eden her şey artık bir oyunun gerçekten kullandığı hızlarda, yavaş uç dahil, karakterin gerçek biçimiyle test ediliyor; yalnızca gövdenin varıp varmadığına değil, ayaklara da bakılarak.

Geometriyi, ölçüm yöntemini ve sınırlarını içeren ayrıntılı yazı aşağıda PDF olarak duruyor.

BeeMaster Engine’i OpenLabWork geliştiriyor. Her perşembe yeni bir Lab Log.

Daha fazlası

Bu notun arkasındaki ayrıntılı yazı; çevrimdışı oku ya da paylaş.

Dil seçin