QuantDialectic

Yeni üye
28 Eki 2015
10
0
0
(31) Hatay
Merhabalar daha önce konusu açıldı mı açılmadı mı bilmiyorum açıldıysa da özür dilerim siteye yeni geldim aklımda bir soru var sizinle paylaşmak isterim.Fizik Motoru ile Oyun Motoru aynı mı yoksa ayrı şeyler mi? Birazda Fizik Motoruyla ilgili kısaca bilgilendirirseniz sevinirim
 
Basitçe söylemek gerekirse; Physics Engine, Graphics(Rendering) Engine, Game Engine'in bileşenleridir. Bir oyun motoru bu bileşenlerin, 3. parti araçlar ve en önemlisi bütün bunları bir araya getirecek yazılım bir araya getirilmesi ile oluşan araçtır.

3 boyut için oyun motorunda fizik motoru, grafik işlemci üzerinde çalışan alt seviye bir/birkaç fizik motorunun oyun motoruna uyarlanmasıdır. Örneğin NVidia PhysX alt seviye bir fizik motorudur. UE4 bu fizik motorunu kendi yapısına uyarlayarak kendi fizik motorunu oluşturmuştur. Aynı zamanda UE4 fizik motoru başka fizik motorlarını da kullanır, uyarlar. Düşündüğünüzde her PC NVidia PhysX içermez.

2 boyut için fizik motoru grafik işlemci kullanmaz, CPU'da çalışır ve genellikle doğrudan oyun motoru geliştiricileri tarafından yazılır. GPUda çalışmadığı için, 3 boyutlu fiziklere göre daha az karmaşık olmasına rağmen çoğunlukla daha yavaş çalışır. UE4 için 2D fizik motoru baştan sona kendileri tarafından yazılmıştır.
 
Anladığım kadarıya açıklama getireyim.Fizik Motoru,Oyunlarda yüksek performans ve uyum için Grafik Kartına uyarlanan bir sistem mi anladığım kadarıya
 
Fizik motoru, oyun içerisindeki nesnelerin birbiriyle etkileşim durumlarını inceler. Nesneler fiziksel anlamda birbirlerine temas ediyorlar mı, iç içeler mi gibi soruların cevabını verir. Ayrıca dinamik konusunu da inceler. Dış kuvvet uygulanan yada kütlesinden kaynaklı olarak yerçekimi tarafından uygulanan kuvvet ve ivmeleri basit anlamda F = m.a formülü ile hesaplar. Oyun motorunda bütün bu fiziksel hesaplamaların yapıldığı modüle Fizik Motoru denir.

Fizik motorunun yaptığı hesaplamaları GPU'da da yapabilir CPU'da da. 3B için GPU, 2B için CPU tercih edilir.

Bir örnek verelim. Pozisyonu v1 vektörü yarıçarpı r1 olan bir çemberin, pozisyonu v2 vektörü ve yarıçapı r2 olan başka bir çemberin çarpışma durumu aşağıdaki matematiksel işlemle ve kodla kontrol edilebilir.

|v1-v2|<r1+r2


Kod:
if (abs(v1-v2)<r1+r2)
{
   OnBeginOverlap...
}


Bu şekilde, 2 boyutlu için dikdörtgen, çember ve konveks poligonlar ve 3 boyutlu için dikdörtgen prizma, küre, silindir ve konveks meshlerin birbirleri ile etkileşimlerini denetleyen bir kod modülü yazdığınızda bir fizik motoru yazmış oluyorsunuz. Fizik motorunuzun gelişmişliği ise bu işlemleri farklı senaryolarda, çok sayıda nesne ile ne kadar hızlı yaptığı ile ölçülebilir.
 
Güzel. Bir ekleme daha yapalım o halde. Fizik hesaplamaları render işlemine göre masraflıdır, daha çok işlemci gücü (CPU yada GPU farketmez) gerektirir. Bu yüzden model ve collider ayrı olarak verilir ve collider şekli olabildiğince basit tutulur. Fizik işlemlerinin basitten karmaşığa doğru sıralanışı aşağıdaki gibidir.
Sphere > Capsule > Cylinder > Box > Convex Mesh

Dikkat: Sphere grafiksel anlamda karmaşık bir yapıdadır. Eğri yüzeyleri üçgen model olarak ifade etmek daha çok sayıda polygon gerektirirken; fizik hesaplaması bir önceki gönderimde de söylediğim şekilde en basit fizik hesaplamasıdır.

Not: Fizik implementasyonu GPU destekli olmak zorunda değil. Mesela Unity3D, platform ne olursa olsun GPU kullanmaz. UE4 ise çoğunlukla kullanır. Üstelik PhysX geliştiricileri kaynak kodları Epic Games geliştiricilerine açmıştır.