Fizik mükemmel (veya yakın bir yerde) 3d ses motoru [kapalı]


11

Konsol / web geliştirme konusunda uzun yıllara dayanan tecrübem olmasına rağmen, oyun programlamasında yeniyim. Benim sorunum o kadar da değil, aradığım şeyi bulamıyorum, sadece başarılı bir arama yapmak için terminolojiye sahip değilim.

Seslere odaklanan bir fizik motoru arıyorum. Aslında, başka hiçbir şey umurumda değil. Demek istediğim daha iyi bir örnekle açıklanmıştır:

Diyelim ki 1 kişilik bir oyun. Kuzeye bakıyorsunuz ve çevrenizdeki bir kişi size bir flüt atıyor (durumun saçmalıklarına nevermind). Flüt yoldayken döner, deliklerinden ses çıkarır. Bir rüzgar var, 5 deniz mili güney.

Bir fizik motorunun flütün yörüngesini ve vurduktan sonra aldığı yönü hesaplayabileceğini hayal ediyorum. İstediğim şey, fizik motorunun herhangi bir dinleyicinin bakış açısından yapacağı kesin sesleri hesaplaması.

Böyle bir motor var mı? Birkaç tane varsa, yukarıdaki örnek için hangisi daha iyi olurdu?

Yanıtlar:


10

Yanlış soruyu soruyorsun. Birçok yeni oyun programcının yaptığı hatayı yapıyorsunuz. Oyun vardır değil onlar bile yakın değiliz, mükemmel simülasyonlar. Oyunlar eğlenceli / ilginç olacak kadar simüle eder. Diğer her şey sahte.

Burada örnek:
Goo Dünyası: kütle, çekme mukavemeti ve esnekliği simüle eder. Gerisi sahte çünkü oyunun hissini katmıyor. Örneğin, yerçekimini simüle etmez. Tüm nesneler sabit bir kuvvetle hızlanır. Boyancy sahte. Balonlar sabit bir kuvvetle yukarı çekilir ve su altındaki goo topları da sürekli bir yukarı doğru kuvvet yaşar. Bu oyun için harika çalışıyor. Bununla birlikte, World of Goo'nun fizik motorunu kullanarak bir uzay asansörü yapmaya çalışırsanız bu bozulur.

Neredeyse mükemmel fizik tabanlı bir ses motoru düşünelim. Çevresel etkiler ne olacak? Flüt mağarada veya tarlada. Motor önceden tanımlanmış bir ortam kümesi sağlıyor mu (kaç tane?) Ya da gerçek fiziksel topografyayı (evet doğru) hesaplayarak çözüyor mu? Oyuncunun yönlü kulakları (ala insan) ya da sadece kulak delikleri (ala yunus ya da uzaylı) ya da bir hayvan gibi çok yönlü var mı? Hava sıcak mı? Ne kadar nemli. Bu liste hızla kontrolden çıkabilir.

Bir an için böyle bir fizik ses motorunun var olduğunu varsayın. Gerçekten bir oyun yapmak için kullanmak ister misiniz? Havada uçan flüt sesini tanımlamanız ne kadar sürer? Doğru olmak için kaç parametreniz var (100'ler?).

Sormanız gereken şey şöyledir:
Müzikçaların üzerinden geçtiğinde sesi bir flüt nasıl simüle edebilirim?

OpenAL ne istersen yapabilir.

  • Yönlü dinleyici
  • Yönlü ses kaynakları
  • kaynak hızları ve doppler etkileri.

Dönen bir flütün tekrarlayan bir ses efektine sahip olmasını öneririm. Oynatıcı konumunu ve flütün konumunu / hızını girin. Şimdilik yönlü şeyleri atla.
Hava akarken bir oluğun her iki ucundan gelen sesi kaydedebilir ve oluğun iki ses kaynağı kullanmasını sağlayabilirsiniz. Ama tüm oyun mekaniği atılan ve dönen flütler etrafında dönmedikçe çabaya değeceğinden şüpheliyim.


Tüm oyun fikri, hareketli nesnelerin ses çıkarması etrafında dönüyor. Verilen örnek, amaç için aşırı karmaşıktır, ancak oyun fikri, hareket halinde gerçekçi görünen nesneleri içerir.
Félix Saparelli

Çoğu parametre gerçekten kontrol edilir: kapalı (mühürlü), belirli bir malzemenin duvarları (özelliklerini tanımladığım), hava sıcaklığı, basınç, nem vb. Kulaklar insandır. Vücudun geri kalanını düşünmeme bile gerek yok. Aslında, kara liste yerine, tam olarak hangi parametreleri kullandığımı belirtebilir ve geri kalanını tanımlayabilirim (sabit). Bu benim (sanal) dünyam: Bunu olmasını istediğim gibi tanımlıyorum.
Félix Saparelli

Demek istediğim, böyle bir ses motorunun genel durumda gerektireceği çaba miktarının buna değmemesidir. Özellikle yetenekli ses mühendisleri ihtiyacınız olan etkileri çok inandırıcı bir şekilde taklit edebildiklerinde. Doppler yerleşik. Yankı, sönümleme, vb filtreleme ile yapılabilir.
deft_code

8

Fiziksel modelleme mi istiyorsunuz? Sentez Araç Setini deneyin:

https://ccrma.stanford.edu/software/stk/classstk_1_1Flute.html .

Rüzgar hızını / genliğini kendiniz ayarlayan tutkal kodunu yazmanız gerekir.

İstediğin şey henüz icat edilmedi. Yine de yaklaşıyoruz - şuna bir bak, geçen gün gördüm:

http://www.physorg.com/news198351307.html


İlginç şeyler. Demek istediğim bu ve henüz yapılmaması beni engellemiyor. 1-2 yıl önce üzerinde gerçek (kavramsal olmayan) çalışmaya başlamayı planlamıyorum.
Félix Saparelli

4

Bir fizik-ses motoru bulacağınızdan şüpheliyim. Daha muhtemel olan, istediğiniz herhangi bir fizik motorunu ( Bullet gibi ) kullanmak ve ses için OpenAL kullanmaktır . Flütün pozisyonunu hesaplayın ve bunu Kaynağın pozisyonu olarak kullanın.


Yine de biraz daha fazlasını istiyorum.
Félix Saparelli

1
Daha fazla İstediğiniz ne? Benim önerim ile sesin konumunu her karede değiştirebilirsin. Sanırım bir şey eksik.
Komünist Ördek

6
Bence sesleri üretmek için hava dalgalarını ve diğer titreşimleri simüle etmek anlamına geliyor. Ve bu mümkün, ancak hiçbir bilgisayar (belki de bazı süper bilgisayar kümeleri hariç) herhangi bir yararlı boyut alanı için gerçek zamanlı olarak hesaplayamaz, bu yüzden hayır, eğer böyle bir şey (yani gerçek bir ihtiyaç yok, kullanın) fizik motoru ve uygun bir örnek çalmak için çarpışma verilerini okumak "yeterince yakın").
Elva

3
Eğer bunu ilerletmek istiyorsanız, sadece orada değil a) Yourdoom'un dediği gibi, normal bir bilgisayarın bunu yapmasının hiçbir yolu yoktur ve b) hiç kimse farkı söyleyemez.
Komünist Ördek

3
Modern oyunların, OpenAL'ın yapamayacağı veya en azından kutudan çıkamayacağı (ek olarak takılabilecek (geometrik) hacim tabanlı efektörler gibi) yapamayacağı (ve FMOD gibi daha üst düzey API'lerin) hala çok şey var birden fazla odadan geçen sesi simüle etmek için portallara. Bu yaygın değildir, ancak yapılır ve farkı söyleyebilirsiniz.

4

Phya, bir oyun fizik motoru tarafından sürülebilen "fiziksel örnekleme" tabanlı bir çarpışma ses sentezi kütüphanesidir. (Örneklerde madde işareti kullanılmıştır)

http://www.zenprobe.com/phya/

En son sürümün ne olduğundan emin değilim, son site güncellemesi şimdi bir yıldan uzun bir süre önce.

Bir hacimdeki havanın rezonansını modellemeye çok fazla yönelik değildir, ancak belki de fizikten gerçek zamanlı ses sentezinin nasıl sürüleceğine iyi bir örnek olabilir.

Bunun imkansız bir cpu-pahalı girişim olması gerekmediğini düşünüyorum, Belirtilen sorun tamamen belirleyicidir ve modern donanımda ulaşılabilir olmalıdır. (en azından bir eğlence / öğrenme ürünü için uygun bir seviyeye.)

Cevaplanacak soru, ne kadar tam olarak simüle etmeniz gerektiğidir ve ne kadar sahte olabilirsiniz? Ses için, makul bir şekilde ikna edici bir şekilde sesin bir çeşit gerçek zamanlı modülasyonuna sahip olmak, moleküle akustik titreşimleri modellemek zorunda kalmadan çok şey alır.

Belki bu yardımcı olur. Güzel soru btw.

-j


Ben çok taklit edebilirim. Sadece ... çağdaş video oyunlarından çok daha az. Mesele şu: Bir video oyunu değil, bir ses oyunu oluşturuyorum. Tür.
Félix Saparelli

3

Aslında burada yer alan fiziğin doğru bir simülasyonunu yapmak Havok veya Bullet gibi değirmen fizik sisteminden çok daha karmaşık (ve hesaplama açısından pahalı) olacaktır. Geleneksel bir fizik sistemi, her ikisi de hız nedenleriyle örgü karmaşıklığı ile sınırlı olan sert cisimler ve yumuşak cisimler için optimize edilmiştir.

Ses ise, dalgaların havadan yayılmasıdır ve örneğiniz gibi bir şeyin ürettiği frekanslar tonlarca ve tonlarca özelliğe bağlıdır. Hangi malzemeden yapılmış? Bu materyalle etkileşen hava parçacıkları için hangi matematiksel modeli kullanmalıyız? Bir tüp şekli ise, tüpün boyutları nelerdir? (Bu rezonans frekansını belirler.) Vb.

Tüm bunların yanı sıra, havayı modellemek için oldukça sofistike bir parçacık simülasyonu çalıştırmanız ve ayrıca kulak zarlarınıza çarpan ses dalgaları olan parçacık hareket dalgalarını çıkarmanız gerekir. Ve kulak zarlarından bile bahsetmeyelim, çünkü kulak kanalınızdaki dalgaların rezonansı duyduklarınızı da etkiler.

Sonuçta, özellikle interaktif bir kare hızı umudunuz varsa, mevcut bir oyunun gerçekleştirmesi için çok fazla simülasyon. Becerikli_code'un belirttiği gibi, oyunlar nadiren doğru simülasyonlardır, ancak görkemli sahte olanlardır. Buna yaklaşmanın en iyi yolu muhtemelen büyük bir ses örnek seti ile başlamak ve bu seslerin etkisini nasıl etkileyebileceğinizi kavrayana kadar bir DSP aracılığıyla bir şeyler yayınlamaya başlamak olacaktır. DSP'ler gerçek zamanlı oyunlar için kesinlikle yeterince hızlıdır ve ses büyük bir bileşen olacaksa, ses işlemeye çerçeve sürenizin iyi bir parçasını ayırmak mantıklıdır.

tl; dr: Doğru simülasyon muhtemelen uzun yıllar boyunca söz konusu olmayacak. Harika oyunlar sahte. Yeterince büyük bir örnek seti ve yeterli DSP tweaking ile muhtemelen sahte olabilirsiniz.


2

Yaklaşımımızı kontrol edin.

http://dsp.agh.edu.pl/en:research:rayav

Geliştirilmiş kütüphane, kullanıcıya gerçekçi ses işitselleştirmesi sağlamak için ışın izlemeyi kullanır. Tüm ses efektleri, belirli bir oyun seviyesinin gerçek geometrisinin yanı sıra akustik özelliklerine (akustik malzemeler, hava zayıflaması) göre hesaplanır. Ses, oyun karakteri ve ses kaynaklarının hareketi ile birlikte dinamik olarak değişir. Ses yolu oluşturma algoritması, speküler yansımalar, dağınık yansımalar ve kenar kırınımı gibi olayları desteklerken, ses işleme sinyal filtrelemeyi (modelleme hava boşaltma, yansıma / kırınım etkisi vb.), Doppler etkisi modelleme ve uzaysal efektleri destekler. Son olarak, her ses yolu için HRTF kullanılarak yönlü ses uygulanır.


0

Bunun eski bir soru olduğunun farkındayım, ancak son birkaç yıldır işler ilerliyor ve tanımladığınız şey hesaplama yoluyla giderek daha uygulanabilir hale geliyor.

Synthesis Toolkit gibi araçlar aşağıdaki soruları cevaplamak için kullanılır: "Fizik motorum bana flütün böyle ve titreşen bir şekilde titreştiğini söyledi. Bu hangi notu üretiyor?"

Yine de cevaplanması gereken bir başka önemli soru daha var: "Bu nota dinleyicinin konumundan nasıl geliyor?"

OpenAL gibi ses API'lerinin bununla ilgilenmesi yaygın bir yanlış anlamadır. Aslında yaptıkları tek şey konumsal ses olarak adlandırılan şeydir . Ses yayılımını modellemezler : ses dalgaları ve çevre arasındaki etkileşimler. Ses yayılımı aşağıdaki gibi soruları yanıtlamayı içerir:

  • Bu oda gözle görülür bir yankı olacak kadar büyük mü?
  • Yoksa odadaki mobilyalar sesin çoğunu emiyor mu?
  • Açık havada dururken, uzak bir tepeden yankılar duymalı mıyım? Yakındaki bir bina?
  • Ses uzun mesafelerde dağılıyor mu?
  • Ses kaynağı dinleyiciden tıkalı mı (gizli)?
  • Öyleyse, ses dalgalarının dinleyiciye ulaşmak için kullanabileceği alternatif yollar var mı? Belki kapalı bir kapının altından, bir koridor köşesinden mi, yoksa bir havalandırma deliğinden mi?

Phonon bu soruları cevaplayan bir ses-fizik motorudur. (Tam açıklama: Phonon geliştirmeye katılıyorum.) Phonon ile kullanıcının çok küçük bir parametre kümesi belirtmesi gerekir (emilim ve saçılma katsayıları). Phonon daha sonra dinleyici için ses yayma efektlerini ikna edici bir şekilde yeniden yaratabilmek için yeterli hesaplama yapar .

Phonon şu anda Unity için bir eklenti olarak mevcuttur. PC ve mobil cihazların dışında Phonon, Oculus Rift gibi VR platformlarında da çalışabilir ve orada da fark edilir bir fark yaratır.

Bu yardımcı olur umarım!


0

Sorunuzu okurken, iki şekilde çevirebilirim.

  1. Fiziksel simülasyonlara dayalı sesler yaratabilen bir motor var mı? Bir saz boyunca hava üfleme veya bir ipe çarpan çekiç gibi?

Oyun mu? duyduğumdan değil.

  1. Önceden var olan sesleri çalan ancak "surround ses deneyimini" simüle etmek için mikrofona olan mesafe gibi fiziksel bilgilere göre değiştiren bir motor var mı?

Evet! bunlara "3D ses motorları" denir ve iyi bilinen bir OpenAL'dir .

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.