SpinTires: MudRunner’ın Çamur Fizikleri Teknik Olarak Açıklandı!

1

SpinTires: MudRunner’ın Çamur Fizikleri Teknik Olarak Açıklandı!

Geliştirici Pavel Zagrebelnyy yeni blog yazısında MudRunner’ın yenilenen çamur fiziklerini anlatıyor.

Yazı teknik bilgiler içermekte ve gerçekçi toprak dokusu ile çamur fiziklerininin çalışma mantığını anlatmaktadır.

post-processing devre dışı bırakmakla başlanıyor: SSAO (ambiyans gölgeleri), FXAA (obje kenarlarını yumuşatır), DOF (ön plan bulanıkları/blurs foreground), Keskinleştirme efekti yani Sharpen Effect ve Renk düzeltmesi/Color Correction:

Şimdi ise bir çerçeve oyunda işlenirken oluşan tüm katmanları ters sırayla kaldıralım.

1. Arazi Çamur Çıkartmaları(buna geri dönülecek)

2. Tekerlek İzleri (sonradan bunu geri alacak)

3. Çamur Parçacıkları
Bu cisimler çamurun üstünde yüzer ve araç tekerleklerinden etkilenir (hatta onlara yapışabilir), sadece dekorasyon görevir görürler ve fizikleri etkilemezler. Çamur parçacıkları CPU tarafından ayrı bir başlıkta simüle edilir. Kilitli olmayan senkronizasyon tekniği tüm bu efekti performans bakımından çok kolay hale getirir.

4. Çamur Topakları
Bunlar büyük çamur parçacıklarıdır ve her biri tam teşekküllü katı bir vücuda sahip olup fizik dünyasıyla düzgün bir şekidle etkileşime girer ve araçlar sürüldüklerinde daha küçük parçalara bile dönüşebilirler. Bu çamur topakları oyundaki diğer bitki türlerini simüle eden ve işleyen aynı sistemler tarafından sağlanmaktadır.(Bir “plant” arazide kayalar veya ağaçlar gibi büyük miktarlarda dağıtılmış cisimdir.)

5. Paralax efekti ile yol kaplamaları

Harita editörünün Level Editor ile yerleştirdiği yollar oyunun verimli bir şekilde çizilmesi için kullanıdığı özel bir veriye dönüştürülür. Ayrı bir katman olarak oluşturulmazlar ve arazi gölgelendiricilerine yerleştirilirler.

Şimdi ise basit bir yükseklik alanı ile bırakılan çamurun kendisi  (gerçekte bir 2d mesh):

Wireframe olarak bakalım;

Oyunun arazi seviyesinin çoğu aslında daha düşük bir çözünürlükte oluşturulmuştur. Yani eğer araziler deforme olmasa wireframe şöyle olacaktı;

Şimdi her katmana yakından göz atalım…

Çamur Yükseklik Alanı
MudRunner’da oyun bölümleri(harita) 1km x 1km boyutunda olabilir. 16m x 16m bloklardan oluşan bir ızgaraya bölünür. Her blok bitki (ağaçlar, kayalar, vb.), taban arazi verileri, çamur verileri (isteğe bağlı) ve diğer verilerin bir listesini içerir. Oyun sadece “frustum” kamerası içindeki blokları çiziyor. Sadece oyuncunun sürdüğü kamyonun yakınındaki bloklar “aktif” oluyor. Doğal olarak oyun sadece “aktif” olan bloklar için bitki fizikleri simülasyonu, çamur simülasyonu ve su simülasyonunu gerçekleştiriyor.

Çamur simülasyonu çamur-araç fizikleri işlenmesinden(CPU tarafından gerçekleştirilir) ve çamurun renderlanmasından oluşur(GPU tarafından gerçekleştirilir). Birkaç nedenden dolayı (CPU ve GPU, PC üzerinde senkronize değildir, fizik vb. render için gerekli olan yüksek ayrıntı seviye gerekli değildir) bu iki görev tamamen farklı veri kümeleri çalışır. Burada fizik simülasyonunun ayrıntılarına girilmeyecek kısacası roket bilimi yok ancak Havok (MudRunner’daki fizik motoru) kutudan çıkarımayacak bir şey değildir.

Çamur çizmek için vertex shader, basit bir 2D vertislerin ızgaralarını alır, ondan sonra aşağıdaki iki A8R8G8B8 dokuları gibi görünür.


Doku 1. her bir blok için 25×25 boyutunda ve hem düşük çözünürlüklü taban arazisi hem de yüksek çözünürlüklü çamur oluşturmak için kullanılır.
R (red) channel – paketlenmiş yükseklik (elevation). Bu gerçek dünya yüksekliğine küçük bir matematikli açılır.
G (green) channel – çimen/kir materyallerinin karışım faktörüdür. Şu anda her blok sadece 2 materyal karıştırabilir.
B (blue) channel – “tint-renk tonu” faktörü. Tint çevreye bir miktar renk değişikliği ekler ve fizik özelliklerini gösterir(“tinted/renklendirilmiş”  arazi daha yumuşaktır).
A (alpha) channel – çamurla değiştirilen taban arazilerin bölümlerini işaretler, bu araçlar araziyi deforme ederken dinamik olarak güncellenen tek kanaldır.


Doku 2. 128×128 boyutundadır, ve sadece çamurlu bloklar için tahsis edilir.
R (red) channel – “çamur yüksekliği”, taban arazinin yüksekliğine göre değişiri. Bu basit bir çarpma ile kayan noktalı bir değere açılır.
GB (green, blue) channels – “çamur dengelemesi” efektinde kullanılır (araçların tekerlekleri hareket ederken çamurlar kayar)
A (alpha) channel – “çamur izleri”, arazi gölgelendiricisinin çamur gölgelendiricisine karışma faktörü, Doku 1’in A kanalı ile kombinasyonu halinde çamurun arazide fark edilmeden geçişisini yapar. 

Çamur simülasyonunun görsel parçası Doku 2’yi düzgün şekilde güncellemek için kaynar:

Tekerlekler ve şasi pozisyonları bilgisi ile onların boyutları ve hızları, ve onların şu anki çamur nüfuz derinliği, CPU çeşitli formlar “ilkelleri” oluşturur ve bunları Doku 2’ye(RT – render target/işleme hedefi) çeker ve GPU tarafından geri okunur. Bu bir yaklaşımdır ve gerçek dünya fizikleri ile çok belirsiz bir bağlantıya sahiptir!

Çamur piksek gölgelendiricisinin kendisi bir fantezi değildir ve bu basitçe yükseklik alanı verilerinden türetilen normaline dayanan birkaç dağınık dokuyu harmanlar.

Şimdi daha ilginç şeyler bulalım;

TEKERLEK İZLERİ
Başka bir ekran görüntüsünde tekerlek izlerinin oluşturma adımlarını görelim:

Çevrenin çoğu ve araziden sonra tekerlek izleri renderlanır/işlenir. Wheel tracks are rendered after terrain and most of the environment. Yani o zamana kadar ekran normallerin sahip oluruz ve “tekerlek izleri ekran maskesi”(ekranın bir bölümünü maskeleyen ve üstünde izleri oluşturmayan) var tabii Z-arabelleğine ek olarak. Mesh(örgü) bir tekerleğin yolunu izleyen basit trapez dizisidir. Fakat paralax efekti için bu lastik dişlerine harika bir hacimsel görünür verir, öncelikle bizim tekerlek izleri “yükseklik” oluşturmamıza(render) ihtiyacımız var:

Bir paralax efekti için tekerlek izleri yükseklikleri gereklidir. Dokular Z-ara belleği kullanarak araziye yansıtılır. Zor kısım ise izleri düzgün şekilde sıralamaktır(daha yeni izler eski izleri kaplar). Bunu yapmak için birkaç yaklaşım vardır, biz sadece GPU’ya özel bir yöntem olan izleri kendi z-arabelleği işleme yöntemini kullanıyoruz ve metodunu ve vertex gölgelendiricide kameraya doğru daha yeni izleri denkleştirir.  Sahne karşısında Z-testi piksel gölgelendiricisinin içerisinde manuel olarak gerçekleştirilir. 

Tekerlek izleri mesh/örgüsü daha sonra 2. final, pass için yeniden çzilir:

 

Geleneksel paralaks efektleri ilişkili “yükseklik” dokularından çoklu örnekler alır ve doku koordinatlarını buna göre offset/denkleştirir(bunun matematik detaylarına girilmeyecek). Sorun ise eğer Z-buffer içine z-yansıtıyorsanız sözü geçen örnekleri yapmak için kolay bir yol yoktur. Bu nedenle tekerlek izleri 2 geçişle yapılır. Görsel eseler bu yaklaşımla ihmal edilebilirler; tekerlek izleri yükseklik bilgisinin olmadığı dokulardan örneklemediğinizden emin olmanız yeterlidir(tekerlek izi yükseklik dokusunun yeşil işareti budur-yukarıdaki resmen bakın).

 

 

ARAZİ ÇAMUR ÇIKARTMALARI

Aracın şasisi veya tekerlekleri çamurda yüksek hızda hareket ettiğinde ya da bir tekerlek çamur içinde spin attığında çamur parçacıklarını fırlatır. Çamur parçacıkları çevre varlıklarının çoğunu per-vertex çamur verilerini etkiler ve arazi çamurlarının çıkartmalarını oluşturur.

 

Her arazi çamur çıkartmasının kendine ait bir yönlendirilmiş mesh kutusu vardır:

Tekerlek izleri ile aynı şekilde araziden sonra ve çevrenin çoğu işlenmektedir(buna “Color Pass” denir ve bu MRT – çoklu render hedefleri kullanır), ekran normallerimiz (aydınlatmaya hesaplamak için kullanılır) ve arazi çıkarmaları ekran maskesine sahibiz(objeleri maskeleyen bu çıkartmalar üzerinde renderlanmamalıdır). Color Pass ayrıca arazi çıkartmaları(decals) için oklüzyon faktörü yazar ve daha doğal olarak aydınlanabilirler. Sahnelerin üstünde çıkartmaların(decals) z-projeksiyonu vardır. 

Oyunların çoğunda z-projeksiyon çıkartmaları vardır ve bu nedenle gerçekten süslü bir şey yoktur. Ancak MudRunner’da arazi çamur çıkartması/desen(decals) üreten aynı sistemde 3 farklı desen(decals/çıkartma) türü de üretilir: Arazi ıslaklık desenleri, arazi/su yağı desenleri ve Arazi/Su ıslaklık desenleri! Ama bu başka bir günün konusu….

10/10/2017
Pavel.


 

Geliştiricinin çamur fiziklerine teknik olarak açıklaması yukarıdaki çeviri gibidir. Anlayarak çevirmeye çalıştık zira teknik bilgi çok fazla o yüzden bazı cümlelerde karışıklık olabilir.

Etkilendiniz mi? 😀

 

Not: Konuyu kopyalamayın. Kaynak belirterek buraya yönlendirin aksi halde bizim yapacağımız düzenlemeleri kaçıracaksınız. Yanlış yönlendireceksiniz.

SimülasyonTÜRK

Kimler Neler Demiş?

1 Yorum - "SpinTires: MudRunner’ın Çamur Fizikleri Teknik Olarak Açıklandı!"

Bildir
avatar
Sıralama:   En Yeniler | Eskiler | Beğenilenler
Yakup
Ziyaretçi

Çamur simülasyonu diyordum da… Hakikaten çamur simülasyonu çıktı 🙂

wpDiscuz