Video oyunlarında madde işaretleri nasıl simüle edilir?


86

Son zamanlarda MW2 gibi oyunlar oynuyorum ve bir programcı olarak, oyunu nasıl bu kadar sürükleyici hale getirdiklerini kendime sormaya meyilliyim. Örneğin, mermi hızını nasıl taklit ettikleri.

  1. Bir NPC silahından bir mermi attığında, mermi silahından verilen hedefe gerçekten mi gidiyor ya da bu kısmı tamamen görmezden mi geliyorlar ve sadece hedefe kurşun deliği mi koyuyorlar?

  2. Eğer mermi silahtan hedefe gerçekten gidiyorsa, gerçekte hangi hızda hareket eder?


25
Kanlı ekran, çok gerçek!
AttackHobo

6
sürgünler : BOOOOORRRIIIING
mahen23 18

1
Megaman Legend'in mermilerine mermi diyebilir misiniz emin değilim, ama Megaman'da mermiler için yavaş mermiler kullanıyorlar. Bunlarda, çekim sırasında daireler halinde koşarsanız (bir coriolis efekti) net bir şekilde kavisli çekim görebilirsiniz.
Yalan Ryan

Yanıtlar:


84

FPS oyunlarının çoğu gerçek oyun için yeniden yayın kullanıyor; Mermiler anında hareket eder ve atış sırasında hedefi vurur.

Ancak çoğu oyun aynı zamanda "sahte" izleyicilerin kullanımını da kullanır. Her 3 atışta veya başka bir aralıkta, bir mermi ile birlikte bir izleyici ateşlenecek, izleyici çok hızlı olacak, ancak ani olmayacak. Bu sadece görsel efekt olarak yapılır ve doğrudan oyun oynamayı etkilemez, ancak atıcıya, atıcıya ipucu vermede yardımcı olur ve izleyicilere silah atışlarına yön referansı verir.

Bu tür mermi fiziğini kullanan çoğu oyun gerçekçi değildir, çünkü ricochets, mermi parçaları yoktur ve herhangi bir nüfuz varsa genellikle doğrusaldır.

ARMA II, STALKER (tüm seri) gibi bazı oyunlar, seyahat süresi, ricochets ve sapma açılarıyla penetrasyon ile daha gerçekçi mermi fiziği kullanır. Bu sistemlerin raycasting kullandığını, ancak merminin hızıyla belirlenen bir sınırladığını düşünüyorum. Bu oyunlarda namlu çıkış hızı ARMA II'deki gibi gerçekçi olabilir veya STALKER'deki gibi görünür.

Silahları mermileri ateşlerken, lazerleri değil gerçekçi mermi fiziğine sahip olmayı tercih ederim.


1
Bahsedilen oyunlardan hiçbirini oynamamak, oyun oynamayı nasıl etkiler? Yani, Call of Duty gibi bir oyunda mermi fiziği kullanırsanız, gerçekten fark edilebilir bir fark görüyor musunuz? Penetrasyon açıları oyun değiştiriyor mu? Oyuncular, karakterlerinin, atıcıya göre kurşun deliği ile aynı hizada olmadıklarının farkında bile mi? Sadece ek yükü haklı çıkarmak için ne gibi faydalar olduğunu merak ediyorum. Şimdiden teşekkürler.
Dutchie432,

Hoş bulduğum çekim mekaniğine tahmin edilemezlik ve derinlik katmanı ekliyor. Mermiler anlık değil !!! chuckhawks.com/rifle_ballistics_table.htm 600 feet için saniyede 2644 fit giden bir sümük ek yavaşlama için hesaba katılmayacak şekilde hedefi vurmak için 0,2 saniye sürüyor. Doğrudan hedef alırsanız, çalışan bir hedef kaçırılmış olur. Başka bir mesafe, sümüklüböceklerin ses hızından daha yavaş gitmelerine izin verecek ve insanların atışları duydukları takdirde yere ya da başkalarına atlamasına izin verecektir.
AttackHobo

Bu cevapta birkaç yanlış ifade var ve silinmesi gerekiyor. Aşağıdaki cevabımı kontrol et.
EddieV223

1
ArmA 2'deki mermiler simüle edilmiş mermilerdir; uçuş sırasında değiştirilebilir (hız değişti, yön değişikliği) ve seyahat ederken nesnelerle çarpışabilirler. Bunun ışın dökümü ile yapılıp yapılmadığı önemli değildir, gerçek fizik nesneleri gibi davranırlar.
yavaşlatılmış

yani mw2? raycasting ya da değil? Çünkü açıkça kurşun delikleri ve onun tarafından tahrip edilen ortamların simülasyonunda harika bir iş çıkarıyorlar
mahen23

51

Mermiler için, genellikle havada hareket eden mermiyi simüle etmekte sıkıntı çekmezler ve ateşlendiği anda hedefe bir kurşun deliği koyarlar. Roketler gibi diğer şeyler daha yavaştır * ve oyun aslında onlara havada yolculuk yaptıklarını gösterir.

Kısa mesafelerde, mermiler hareket eder, çerçeveler arasındaki zaman atlamasıyla birlikte, atıcıdan hedefe yine de 1 kare arasında veya içinde olurlar.

* Oyuncunun onları havada uçarken görmesini sağlamak için gerçek hayatta roketlerden daha yavaştır.


44

PlanetSide için madde işareti yazdım. Birkaç 'hitscan' mermisi vardı, fakat çoğunlukla mermileri CPU kısıtlamaları ve herhangi bir zamanda oyundaki çok sayıda mermi verebileceğimiz en iyi şekilde simüle etti.

Hitscan durumunda, etki, genellikle tek bir raycast kullanılarak, girişle aynı çerçevede belirlenir. Bu, lazerler veya diğer son derece hızlı mermiler gibi silahlar için uygundur. Sadece mermi üzerindeki başlangıç ​​hızını, oyun tahtasını tek bir tıklamayla geçecek kadar yükselterek hitscan yaptık.

Hitscan olmayan mermiler, grafik çerçeve zamanına veya sabit bir zaman dilimine, hızlanma (düşünce roketleri), yerçekimi, hava sürtünmesi, rehberlik (ısı arayan mermileri düşün) hesaplamaları vb. İle işaretlenir. Amaç, merminin timestep için terminal konumunu oluşturmak. Başlangıç ​​ve bitiş noktaları oluşturulduktan sonra, uçuş yoluna yaklaşmak ve uçuş sırasında meydana gelebilecek herhangi bir çarpışmayı tespit etmek için bir veya daha fazla ışın fırlatılabilir.

Hem hitscan hem de hitscan olmayan mermilerde, bir çarpışmada gerçekleşen olay mermilerinizin özelliklerine ve çarptığınız yüzeye bağlıdır. Örneğin, sert bir yüzeye çarpabilirsiniz; bu durumda hemen çıkma sayınızı kontrol edebilir ve yansıma başına konumunu ve hızını ayarlayabilir veya maksimum geri dönme sayınıza çarptığınızda mermiyi patlatabilirsiniz. Bu sistemde bir roketin maksimum sıçrama sayısı 0'dır. Yumuşak bir yüzeye çarpabilir ve ardından merminin malzemeden geçip geçmeyeceğini belirlemek için delici gücünüzü kontrol edebilirsiniz.

Yazmak eğlenceli bir koddu. Ayrıca, ne olup bittiğine dair iyi hata ayıklama görselleştirmesi yazmak, böylece uçuş yollarını, olayları vb. Görsel olarak inceleyebilmeniz son derece yararlıdır.


2
Güzel bir oyun programlamaya başlamadan önce Planetside'ı oynamıştım ve kodlama eğlenceli olurdu.
Anthony,

18

Oyuna ve doğruluk / gerçekçilik seviyesine bağlıdır.

Çok oyunculu ayarlarda çekim ve hasar modellerini senkronize etmek oldukça zordur, çünkü tam olarak nerede ve ne zaman bir merminin ateşlendiğini, bir hedefe isabet edip etmediğini ve yoldan başka bir şey geçip geçmediğini doğru olarak belirlemeniz gerekir.

Bu nedenle, mümkün olduğunda oyun tasarımcılarının bazı çekimleri anlık olarak değerlendirerek (böylece sadece bir anda herkesin konumunu düşünmeniz yeterlidir) veya mermi menzilini kısıtlayarak işleri basitleştirdiğinden şüpheleniyorum. Neyse ki, bu genellikle gerçek hayat fiziğine karşılık gelir. Örneğin, keskin nişancı tüfeği yüksek hızlı mermiler ateşler.

Pek çok oyun, yavaş hareket eden bir nesnenin (toplar, bombalar, işaret mermileri, vb.) Çok adımlı çok anlık bir yolunu simüle edebilir, ancak bu çok maliyetlidir ve senkronizasyon sorunları daha yaygındır ve komik youtube videolarına yol açar.

Bir başka endişe, daha büyük bir alan yanılsaması yaratmak için daha küçük "ortamlar" (örneğin, her oda ayrı ayrı simüle edilmiştir) sağlayan oyunlarla ilgilidir. Bu durumlarda, bir “oda” sınırları dahilindeki şeyler doğru şekilde simüle edilebilir, böylece odadaki herkes, merminin yaptığı alandaki geçişler dizisi hakkında güncellenir, ancak o ortamın dışındaki diğerleri değildir.


14

Gözün görebildiğinden daha hızlı hareket eden mermiler için, tekrarlanma genellikle kullanılır - namludan bir ışın uygun yönde hesaplanır ve neyin vurulduğunu belirlemek için potansiyel hedef nesnelere karşı test edilir. Eğer mermi damlası gibi şeyleri simüle etmek istiyorsanız, bu çoklu ışınlarla ve bazı ekstra hesaplamalarla karmaşık olabilir. Ayrıca projelere hız verebilir ve bu hesaba ek gerçekçilik eklemek için kullanabilirsiniz (bu yüzden kurşunlar anında değildir).


11

Uygulamaya bağlı, ancak Source Engine'in hiç fiziksel mermi (mermi nesnesi) kullanmadığını biliyorum, sadece oyuncudan rasgele bir "vuruş bölgesi" çemberi (daha büyük veya daha küçük yarıçaplara bağlı) hedef alarak bir ışın dökümü yaptılar. Silahın ne kadar hızlı ateş ettiği ve oyuncu ateş düğmesini basılı tutuyorsa, merkezi, oyuncunun hedeflediği noktaydı, o zaman oyuncudan rastgele belirlenen noktaya kadar olan gerçek ışını belirledikten ve diğer faktörlere bağlı olarak (örneğin kurşun "ağırlık" ve namlu çıkış hızı (tüm dahili sayılar), nesne vuruşu, vb.) Işın atımı birden çok nesneden veya araziye çarpıncaya kadar atıldı.

Çevirme tarafında, Torque 3D Engine DID, gerçek mermi nesnelerini kullanır ve tasarımcı, bireysel hızlarını, kütlelerini ve yerçekimi değiştiricilerini etkileyebilir. Motorun yaptığı her 32 milisaniyede bir değerleri güncellemekti.

DÜZENLE

Mermi cisimlerinin kullanılmasına ek olarak, Torque 3D Engine, alternatif olarak ışın atmalarının kullanımına da izin verdi. (“Merminin” aslında, mermi nesnelerinin yaptığı bir ışını almanın gerekli olduğu hiçbir desteğine sahip olmayan bir parçacık efekti olduğu birkaç oyun yaptım.)


harika hikaye kardeşim. Ancak, Torque 3D motorunun tüm bu fiziği hesaplamak için daha fazla işlem gücü gerektirdiğinden eminim.
mahen23

@ mahen23 Şaşırdın. Kısmen Softbody çarpışmalarını ele almadığı için, sadece basit sınırlama ve çarpışma kutularını Kaynak Motorundan yapılan LESS fizik hesaplamalarına sahipti.
Casey,

10

Team Fortress 2 wiki'de mermilerinin ve hitscan silahlarının davranışları üzerine oldukça havalı bir yazı var.

http://wiki.teamfortress.com/wiki/Mechanics#Hit_detection


2
Bu wiki iyi bir okuma.
mgiuca

Bu bölüm kısa olsa da, hem hitscan'a karşı hem de hitscan olmayanları açıklar ve hitbox'ların ne olduğunu ve nasıl kullanıldığını açıklar.
jhocking

Bu bölümün başlığının altındaki "Projeksiyon" ve "Hitscan" alt yazılarını okumayı unutmayın
lunixbochs

5

Aslında birçok oyun bir gpu render hit test algoritması kullanıyor. İşte işe yaraması gereken temel yol:

1) Off-screen, tüm arazinin siyah olduğu ve her karakterin siyah olmayan bir renk olduğu mevcut görünümün bir görüntüsünü oluşturur. 2) Haç altındaki pikselin rengini alın. > oyuncu haritalama ve o hedefe isabet uygulama.

Bu yöntem yıllarca oyunlarda kullanılmış, çünkü pikseller mükemmel. Oyuncunun şapkasının tek pikseli bir duvarın arkasından yapışıyorsa, ona vurabilirsiniz. IE eğer görebilirsen, vurabilirsin. Bu tür hassasiyet, basit ışın döküm teknikleriyle imkansızdır. İkincisi, bu tür bir test son derece hızlıdır ve GPU'da yapılabilir.


Renk-> oyuncu araması acı veriyor mu? Eğer ışın attıysanız, aynı verimlilik olmaz mıydı?
yavaşladı

Aslında, çok hızlı. Renderde harcanan zamanın büyük kısmı gerçek poligonların gölgelenmesinden kaynaklanmaktadır. Hit-testin gerçekleştirilmesi durumunda, yalnızca düz renkli çokgenler kullanılır. Ek olarak, bu vuruş testi tamamen GPU'da yapılabilir ve piksel kusursuzdur. Hiçbir şey bir oyuncuya bir hedefi mükemmel bir vuruş yapmaktan daha fazla zorlayamaz ve daha sonra vuruş testinin bir özlem olduğunu söyleyemez.
Timothy Baldridge

Ama piksel alanını dünya alanına, vurduğunuz karşılık gelen nesneye nasıl dönüştürebilirsiniz.
yavaşlatılmış

@Daniel: Cevabın dediği gibi, vurulan hedef renkle tanımlanır. Her karakter farklı (düz) bir renk olarak işlenir, böylece sadece rengi kontrol edebilir ve siyah = özledim, başka bir şey = o rengin işlendiğini görebilirler, çünkü vuruldular.
Dave Sherohman

@Dave Sherohman, bunun yanlış başlangıçta, sizin açıklama okuduktan sonra o ... alkış ne anlama geldiğini çok açık görünüyordu okumak olmalı
deceleratedcaviar

4

Bazı oyunlar şüphesiz mermi yolculuğu süresi ve düşüşünü hesaba katarak gerçekçi mermi fiziği kullanır, ancak çoğu oyunun en azından NPC'ler için yapmadığını tahmin ediyorum.

Doğrudan anında mermi yolculuğu yapan (düşme olmayan) bir oyun için, oyun varilin ileri noktasından hayali bir çizgi (vektör) izler. Daha sonra bu çizginin neyle kesiştiğini hesaplar ve bu noktada bir kurşun isabetini kaydeder. Bir etkinin, kurşun isabet çıkartması ve bir duman / enkaz "puf" gibi bir etkiye neden olduğu duvar gibi sağlam bir nesne olabilir. Kırılabilir bir nesneyi kırmasına neden olabilir veya bir fizik nesnesini etkileyebilir ve "tekme" verebilir. Veya elbette müzikçalara veya başka bir NPC'ye çarpabilir ve sağlık riskine neden olabilir. Sert çekirdekli simülasyonlar duvardan geçen mermiyi modelleyecek ve çıkış tarafında bir çarpma etkisine neden olacak ve muhtemelen çıkış sırasında merminin zarar görmesine neden olacaktır.

NPC'lerin kusursuz bir amacı olmadığı için birçok oyun mermi yayılmasını modellemek için vektöre bir tür rasgele ekleme ekler. Gerçek hayatta göreceğiniz şey, mermilerin hepsinin sadece istediğiniz yere vurmadığı, ancak amaç noktasının etrafında ortalanmış bir düzende vurduğu yer.

Mermi yayılımını görselleştirmek için, düz bir çizgi (vektör) yerine silahtan çıkan bir koninin düşünün. Gerçek kurşun yönü, bu koninin içinde bir yerde olacak şekilde randomize edilir. Atıcı gerçekten hedefe yakınsa, yayılma küçük ve doğruluk yüksektir. Hedef uzaktaysa, koni daha fazla yayılır, böylece atıcının hedefi vurması daha az olasıdır.

Atış konisi fikri, atıcı doğruluğunu (beceri), silah doğruluğunu ve diğer koşulları modellemek için kullanılabilir. Örneğin, düşük seviyeli bir NPC'ye düşük doğrulukta bir atış konisi verilebilir, oysa ki yüksek vasıflı bir NPC yüksek seviyede bir doğruluğa sahip olacaktır. Kalçasından ateşlenen hafif makineli tüfekle çalışan bir oyuncu, koşmayı bırakıp durursa düşürecek geniş bir atış konisine sahip olur. Keskin nişancı tüfeği, tabanca söylemek yerine, doğada daha sıkı atış konileri olacaktır.


+1 iyi bilgi. Ancak AI'nın daha büyük bir koni yerine oyuncuya nişan alma konusunda kötü olmasının görsel olarak daha hoş olacağını düşünüyorum. Ya da koniyi büyütmek istiyorsanız geri tepmeye göre değişken boyutta yapın ve daha düşük seviye düşmanlarına daha hızlı bir boyut artış oranı verin, bu yüzden deneyimsiz görünüyorlar.
AttackHobo

1

Baktığım andan itibaren Nexuiz kaynak kodundan bahsetmişken, aslında A noktasından B noktasına bir 'kurşun' nesnesi göndermediler. Doğru hatırlıyorsam, bu sadece bazı silahlara özgüdür - diğer silahlar değil Silahlar ateşlendiğinde anında vurulur, kod silahınızın işaret ettiği yere bakar. Eğer 'ateş'i tıkladığınızda bir kişiye (ve anında açılan bir silah) yönelikse, o zaman bir vuruş yaptın.

Aynı zamanda, Nexuiz'in istemcideki veya sunucudaki isabetleri hesaplamak için sunucu tarafında nasıl bir seçenek olduğu da dikkat çekiyor. İstemcilerin hile yaptığını düşünüyorsanız, bunu azaltmaya yardımcı olmak için sunucu tarafı isabet hesaplamalarına geçebilirsiniz.


1

Diğer bir strateji de her şeyi gerçekleştirme ve her şeyi ışın izleme karmaşığıdır. Her kurşunu yapmak zorunda değilsin. Örnek olarak, silahınız 30 mermi / saniyede ateş ederse, bir atış birkaç yüz parçacık üretebilir ... bir "izleyici efekti" kullanarak görüntüyü azaltabilirsiniz, her 3. vuruşta, diğer iki ışında iz izi bırakabilirsiniz. Oyuncu hala 10 tur / saniye düşmana ateş ediyor.

Kendi durumunuz için ince ayar yapın, daha düşük ateş silahı oranı için daha fazlasını yapın, daha yüksek için daha düşük yapın.


Her üç atışta neden izleyiciye sahip olacağına dair bazı bilgiler içermelisiniz. Bu bir oyun geliştirici gelişimi değil. Askeriydi. Sümüklü böcek arkasına gömülü fosforlu izler. Yuvarlak vurulduğunda, barut mermi arkasında parlak bir iz yaratarak fosforu ateşler. İzleyici mermileri normal mermilerden daha pahalıdır, bu yüzden daha kolay nişan almayı amaçlayan etkisine sahipken, para kazanmak için sadece X atışlarında kullanılırlar.
AttackHobo

Ayrıca, oluşturma işleminde ve dediğiniz gibi güncelleştirmelerde ayrılmak istemezsiniz. Tüm mermi fiziğinin tamamen güncelleme yöntemiyle yapılmasını istiyorsunuz. Her X çekiminin, mermiden çok daha yavaş olan, hareket ve yön göstermesi için daha yavaş olan bir izleyici efekt oluşturmasını istersiniz.
Saldırı

@AttackingHobo Özellikle fosfor mermilerini düşünmüyordum, mermilerin uçtuğu görsel bir ipucu. Fikir seçici sıkıştırma kullanmaktı ... oyuncunun asla "eksik" olarak kaydetmeyeceği bir ayrıntı seviyesini kaldırarak sistemdeki yükü hafifletti. "Her 3 mermi" biti keyfidir ... neyin iyi çalıştığını görmek için deney yapman gerekir. Cevabınızı "sahte izleyiciler" dedin, ki bu da çok mantıklı.
Stephen,

1

Kurşun hızına karşı kare hızının bir sorun olabileceğini unutmayın, bazı durumlarda fizik motorunuzu yeterince kodlamamışsanız, kurşun çarpmadan nesneden geçebilir. Çok iyi hatırlayamadığım bir konu var.

Her neyse, gecikme süresi 30 veya 50 ms'den daha uzun olmaya başlarsa imkansız olmasa da, çok oyunculu bir ortamda gerçekçi mermileri telafi etmenin çok problemli olabileceğini düşünüyorum.

Yine de bir gün, ISS gecikmeyi biraz daha fazla önemseyebilir ve farklı teklifler sunabilir ... ama FTTH olmadan, hala bir rüya ...


1

Kötü şirket, savaş 3 ve takipçiler gibi oyunlarda, merminin "roket" gibi ateşlenmiş gerçek bir tekil varlık olduğuna inanıyorum. Ben sadece ışın hedefi anında vuracaksa ışın izlemenin gerekli olduğunu düşünüyorum. Varlık kendi kendine gerçekçi mermilerde olduğunda, birisine isabet edip etmediğini görmek için geçiyor olacaktır.


0

Aslında, Call of Duty'deki video tekrarlarına bakarsanız, havada hafifçe hedeflenen hedefe uçan turuncu bir ipi görebilirsiniz ve aslında saldıran oyuncunun çoğu için doğru cevabı bulmuş olursunuz.

Hobo gibi bir bekar efekti istiyorsanız, sadece gidip Halo oyunlarından birini oynayın. Metal bir duvara yakın bir konumdan çekim yaparsanız, metalin üzerinden geçen mermileri görebilirsiniz. İçindeki keskin nişancı isabet ettiği yere iz bırakıyor.

Gecikmiş cevap bitti, düzeltmek için daha sonra geri dönebilirim.


-5

Sinsi oyun serisindeki mermiler ve tüm fizik, "Açık Dynamics Motoru" adlı açık kaynaklı bir kütüphane kullanır.

http://en.wikipedia.org/wiki/Open_Dynamics_Engine

Mermiler yerçekimi ile düşer ve duvarlar arasında zıplar ve yeterince zekiyseniz bile çok doğru bir şekilde zıplarsa, göremediğiniz ama konumlarını bilen birini vurmak için bir mermiyi bile kıvrılabilirsiniz. Madde işareti, gerçek bir nesne modelidir. Yaptığım en gerçekçi yol budur, geniş alanlarda hareket etmeye başladığınızda ışın izleme yöntemi pratik değildir. Ancak bir lazer silahı çekmek için iyi olurdu.

Onu kullanan diğer oyunlar BloodRayne 2, Juarez'nin Çağrısı, Goo Dünyası, X-Moto ve OpenSimulator.

Bir başka iyi seçenek de fizik kütüphanesi "Bullet" olacaktır. http://en.wikipedia.org/wiki/Bullet_%28software%29

Grand hırsızlık otomobili 4, kırmızı ölü itfa ve daha fazlasında kullanıldı.

ps arma 2 evde fizik motoru kullanıyor, bir sonraki oyun arma 3 physX fizik motoru kullanacak


3
ODE'yi mermilerle ilgisi olmayan amaçlarla kullanan oyunları listelemek yanıltıcıdır.
saat

4
Ayrıca, avcının mermiler için ODE'yi kullandığı, aslında oyunun kendine ait çarpışma testlerini yaptığı, ancak yalnızca ODE çözücüsünü kullandığı yanıltıcıdır.
AttackHobo
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.