Tam olarak bir fizik motoru nedir?


57

Bir program girdi almalı, işlemden geçirmeli ve çıktı vermelidir. Peki, bir fizik motoru tam olarak ne girer ve verilmiş olarak sağlar?


36
Birçok terminoloji insanı sorguluyor. Temel soruları, sadece temel oldukları için indirmeye gerek yok.
MichaelHouse

16
Bir programın "girdi alması, işlemesi ve çıktısı vermesi" şeklinde tanımlanması, saçma sapan bir şekilde düşüncesizce basitleştirilmiş ve indirgemeci bir düşünce tarzıdır. "Bir programın girdi alması, işlemesi ve çıktı vermesi" sorusunu nasıl cevaplayacağınızı düşünün. Peki, oyun tam olarak ne girdi ve çıktı olarak alsın? " oyun.
Jack Aidley

10
@JackAidley Amacınızı anlıyorum ama gerçekten bir oyun buna çok benziyor: input: tuş vuruşları ve fare / oyun çubuğu hareketleri, çıktı: ekrandaki eğlenceli görüntüler ve hoparlörlerden gelen eğlenceli sesler. Bu basit, evet, ancak bir "oyun" un hesaplamalı olduğunu ve deneyimlerime göre kod mimarisi, varlık tasarımı, proje yönetimi vb. Hakkında düşünmenin son derece yararlı bir yoludur (ama elbette tek yol değil).
wjl

Yanıtlar:


58

Bir fizik motoru, nesnelerin hareketlerini simüle etmekten ve gerçek dünya (veya gerçek dünyaya benzer) fizik kısıtlamaları altındaymış gibi tepki vermekten sorumludur. Genelde, bağımsız bir program değil, daha büyük, daha ilginç bir programın (oyun gibi) bir bileşeni olduğunu belirtmeliyim.

Bir fizik simülasyonuna girdi, genellikle özellikleri (sert veya yumuşak olmaları, kütleleri, şekilleri vb. Gibi) yanı sıra bu bedenlere etkiyen kuvvetlerin toplandığı bir nesne koleksiyonudur ("beden").

Bu girdiye dayanarak, motor gövdelerin güncellenmiş konumlarını ve yönlerini simüle eder ve bunları uygular ("çıktılar"). Genel olarak, nesneler çarpıştığında veya çakıştığında, bu bir çarpma aşamasına ilişkin özel bir oyun mantığıyla başa çıkmak için müşteri kodunun bağlayabileceği bir geri çağırma biçimindeki bir simülasyon adımının çıktısına dahil edilir.


6

Giriş hızı, kütle ve zaman, çıkış yeni hızlardır. Bazen dönme / açısal momentum da bir girdi ve çıktıdır.

Temel olarak Fizik motorları, yerçekimi ve çarpışmaların etkilerini simüle etmeye çalışır. Daha iyi fizik motorları için, nesneleri birden çok nesneye bölme ve nesnelerin açısal momentumunu içeren nesnelerin kalıcı ve geçici deformasyonu anlamına gelir. İdeal olarak stresi simüle ederlerdi, örneğin kaç tane kamyon çökene kadar bu köprüyü geçebilir, ama bu oldukça nadirdir. Hava direnci gibi diğer simülasyon değişkenleri de fizik motoru olarak sayılır, ancak bildiğim kadarıyla bunların henüz herhangi bir oyuna girmediğini biliyorum.

Çoğu fizik motoru bir dereceye kadar uzmanlaşmıştır ve fiziği oyun için gerekli olan noktaya benzetecektir. Araba oyunları için fizik motorları, 3D atıcılar için fizik motorlarından genellikle oldukça farklıdır. Ve bir golf oyununun fizik motoru, golf topunun ve bireysel çim yapraklarının etkileşimleri hakkında aşırı hesaplamalara sahip olabilir, oysa yüksek hızda çarpışmaların ele alınması ve arabanın deformasyonu tamamen eksik (bir golf topunun çarpması durumunda) .


1
Hava direncinin aslında fizik motorlarının ortak bir özelliği olduğunu belirtmek isterim. Düşen nesnelere bir terminal hız uygulayan herhangi bir oyun, hava direncini modellemektedir.
Patrick Roberts

@PatrickRoberts Terminal Velocity, hava direncinden bahsettiğimde tam olarak düşündüğüm şey değildi. Bu, Pong'un kinetik etkileri modelleyen bir fizik motoruna sahip olduğunu söylemek gibi bir şey.
Peter,

12
Adil olmak gerekirse, gevşek anlamda. Ağırlıksız bir ortamda mükemmel elastik çarpışmalar oluşturur. Modellerin basit olabileceğini anlıyorum ama bu yüzden model olarak adlandırılıyorlar çünkü gerçeklikte deneyimlediğimiz olayların pratik yaklaşımları.
Patrick Roberts

4

Tipik olarak bir fizik motoru, bir oyundaki nesneyi, her olası senaryo için belirli animasyonlar tasarlamak zorunda kalmadan çevrelerine göre gerçekçi bir şekilde davranmasını sağlamak için kullanılır.

Spesifik olarak bir fizik motoru, bir dizi özelliğe (kütle, eklemler vb.) Sahip bir model alır ve onu bir dizi parametreye göre oyunda işler.

Buna erken bir örnek, rampdoll motorlarıydı (örneğin Unreal'de );

Mevcut teknolojide fizik motorları genellikle AI, oyun içi kullanıcı arayüzü, cutscene oluşturma vb. İle birlikte genel bir oyun ayrıntısı paketine yakın bir şekilde entegre edilecektir.

Fizik motorlarının oyun tasarımının başlangıcına geri döndüğünü kesinlikle iddia edebilirsiniz; örneğin, pong ham bir fizik motoru sayılabilir. Bununla birlikte ana nokta, bir fizik motorunun, yalnızca hareket yakalama veya manuel animasyondan önceden belirlenmiş animasyon sekanslarını kullanmak yerine, bir dizi parametreye dayanarak anında animasyon noktaları üretme yeteneğine sahip olmasıdır.

Diğer cevaplarda da belirtildiği gibi, sürüş veya uçuş simülasyonu gibi bazı sınıflarda veya oyunlarda, fizik motoru oyun oynamak için temel olabilir ve bu nedenle ekrandaki animasyonu yönlendiren ana girdi olacaktır. Her ne kadar tipik olarak terim, zeminden inşa edilmiş çok özel bir simülatör yerine, geliştirici tarafından söz konusu içerik hakkında özel bir bilgi veya analiz gerektirmeden çeşitli durumlara uygulanabilen genel amaçlı bir araç için kullanılmasına rağmen belirli bir uygulama için


4

Bir fizik motoru, "dünyadaki" nesnelerin hareketini simüle etmekten sorumludur (motorun anlamı ne olursa olsun). Günümüzde çoğu fizik motoru, bunu yapmak için Newton mekaniğini kullanıyor, çünkü simulasyonu yapmak için nispeten basit ve bir alan sim yapmıyorsanız çoğu amaç için "yeterince doğru".

Teoride, "saf" bir fizik motoru üç girdi alacaktır:

  • Dünyanın durumu (nesneler, konumları ve hızları) son "keneler" (motorun modellemesi gereken zamanın son anında)
  • Son kene gerçekleştiğinden beri ne kadar zaman geçti
  • Son tiktan bu yana dünyanın çeşitli nesnelerine etki eden kuvvetlerin listesi

Atalet ve kuvvetleri hesaba katan motor, nesneleri hareket ettirir. Fizik motorunun çıktısı , oyunun daha sonra okuyup gerektiği şekilde değiştirebildiği "dünya" nın yeni halidir .

Uygulamada, fizik motorları mutlaka o kadar "saf" değildir . Nesnelerin yaratılması ve imha edilmesi gerekir ve bazen fizik motorunun yasalarının izin vermeyeceği şekilde hareket ettirilmeleri gerekir. Bu bazen motorun dışında da yapılabilir, ancak bazen içeride yapılır ve bunun için motorun daha fazla girişe ihtiyacı vardır. Ancak yukarıda belirtilen üç girdi temelleri kapsar.

Örneğin, bir joystick kullanarak oyundaki bir karakteri hareket ettirmeniz gerektiğini varsayalım. Fizik motoru kullanmıyorsanız, bu oldukça basittir: kullanıcının joystick'i hareket ettirdiğini gördüğünüzde, nesneyi buna göre hareket ettirirsiniz. Fizik motoruyla nesneyi doğrudan hareket ettirmezsiniz: nesnenin gitmesini istediğiniz yöne karşılık gelen bir kuvvet uygular ve motorun gerçekte hareket etmesine izin verir .

Fark ne? Dünyada başka hiçbir şey olmasa bile, nesnenin tamamen aynı şekilde hareket etmesi pek mümkün değildir, çünkü fizik motoru gerçekçi hızlanma gibi şeylerle başa çıkacaktır. Ancak aynı zamanda atalet gibi diğer kuvvetlerin de nesneye aynı anda etki etmesi ve motorun hepsini hesaba katması da mümkündür . Örneğin, nesneye kuzeye bir kuvvet uygularsanız, ancak başka bir şey batıya doğru bir kuvvet uyguluyorsa (veya nesne zaten batıya doğru hareket ediyordu ve hiçbir şey bunu yavaşlatmıyor), o zaman motor nesneyi kuzeybatıya hareket ettirir.

Bir fizik motorunun seni aldığı şey budur: Nesneleri, konumlarını ve hızlarını ve üzerlerine etki eden kuvvetleri izler. Mekaniğin yasaları sayesinde, çarpışmalar, sürtünme ve yerçekimi gibi şeyleri otomatik olarak ele almak için, sensiz, oyun geliştiricisi, ekstra bir şey yapmak zorunda kalmadan kendi başına bazı güçler yaratabilir.


1

Bir Fizik Motoru temelde fizik cisimlerinin bir simülatörüdür.

Giriş

Kütle, boyut, yoğunluk vb. Gibi fizik özelliklerini belirten bir vücut (veya çoklu) yaratmanıza izin verir.

Ayrıca simülasyonun gerçekleştiği fizik dünyasının özelliklerini tanımlamanıza izin verir (örn. Yerçekimi).

Sonunda, kuvvetler uygulamanıza veya bedenler arasında eklemler oluşturmanıza olanak sağlar.

Çıktı

Tüm bunları tanımladıktan sonra simülasyonu başlatabilirsiniz ve Fizik Motoru size her vücudun bir sonraki zaman dilimine (genellikle oyununuzdaki bir sonraki kareye karşılık gelir) nerede yerleştirileceğini söyleyecektir . Ve bir sonraki, ve diğerleri ...

Sprite'ların ekranda hareket ettiğini görüyorsunuz, çünkü Oyun Motorunun her karesi Fizik Motoruna soruyor

Bu vücut şimdi nerede?

ve Game Engine buna göre grafik gösterimini günceller.

hususlar

Genelde Fizik Motorunu fizik yasalarını bildirimsel bir şekilde uygulamak için bir araç gibi görmeyi seviyorum .

Bir vücudun bir sonraki zaman diliminde nerede olacağını belirlemek için hangi hesaplamaların yapılması gerektiğini kodlamak yerine kod yazmanın yerine, sadece bedenlerin (ve fizik dünyasının kendisinin) özelliklerini belirleyen fizik dünyasını tanımlarım ve fizik motorunun cevap vermesine izin verdim bu soru benim için.


'Düşünceler' bölümünüz hiç belli değil (bana göre). Bunu daha net ve somut / pratik olması için geliştirirseniz (örneğin, gözlemlediğiniz, inşa ettiğiniz gerçek sistem örneklerini verin), o zaman size bir + 1 vereceğim.
code_dredd 12:16

@ray: Öneriniz için teşekkür ederiz. En kısa sürede düzelteceğim!
Luca Angeletti

İşiniz bittiğinde bana bir yorum yaptığınızdan emin olun ve acele etmeyin. Daha sonra diğerleri için yararlı olmalıdır.
code_dredd
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.