Bir program girdi almalı, işlemden geçirmeli ve çıktı vermelidir. Peki, bir fizik motoru tam olarak ne girer ve verilmiş olarak sağlar?
Bir program girdi almalı, işlemden geçirmeli ve çıktı vermelidir. Peki, bir fizik motoru tam olarak ne girer ve verilmiş olarak sağlar?
Yanıtlar:
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.
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) .
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
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:
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.
Bir Fizik Motoru temelde fizik cisimlerinin bir simülatörüdür.
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.
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.
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.