Karmaşık ses scapes oluşturmak için küresel harmonikleri kullanma


16

Bugün işyerinde oda akustik modellemesinin nasıl geliştirileceği hakkında bir tartışma yapıyordum. Konuyla ilgili çok az iş yapıldığı, grafiklerde ise tonlarca iş yapıldığı ileri sürüldü. Ayrıca, ses ve ışık sadece dalga formları olduğu için, iyi bir yaklaşım elde etmek için ışın izleme ve radyolar gibi şeyleri kullanmak mümkün olabilir.

Bu noktada, bu davranışı simüle etmek için küresel harmonikleri düşünmeye başladım. Aynı anda speküler-esque yansımaları ve dağınık yansımalar olarak modellenen ses saçılımı yapabilirsiniz. Bonus olarak ses aktarımını engelleyen engeller de alırsınız. Tek sorun, çoklu frekansların zayıflamasının nasıl ele alınacağıydı. Elbette bu, ses spektrumuna (FFT) bir tür dönüşüm uygulanarak modellenebilir.

Her neyse, bu konuda herhangi bir makale, özellikle de gerçek zamanlı olarak nasıl gerçekleştirileceği hakkında herkes biliyor. Kimse herhangi bir tavsiye veya yararlı genel bilgi almak başarısız?


1
Bu bana indie oyunu Devil's Tuning Fork'u hatırlatıyor: indiegames.com/blog/2009/11/freeware_game_pick_devils_tuni.html (bunun için iyi bir fikir edinmek için videoyu izleyin!)
Ricket

Yanıtlar:


5

Evet, iyi bir fikir. Malham zaten Menzies'in bazı yorumlarına dayanan bir makale yazdı (1999'da!).

Ayrıca Nosal'in akustik için radyiteyi tartışan MASc tezini not edin .

Aydınlatma konusunda, (biri R, biri G, diğeri B için olmak üzere 3 işlev kümesi yapar) temsil etmek istediğiniz her kaba frekans bandı için farklı bir SH işlevi kümesi yapmanız gerekir ( düşük frekans, 60Hz-1kHz, biri orta 1kHz-2kHz için, biri yüksek 10kHz-20kHz için, vb.). 60Hz altındaki her şeyin her şeyden geçmesine izin verin (bu, sesin gerçek hayatta yaptığı şeydir)

Bununla birlikte, her bir malzemenin akustik yansıtma özelliklerini modellemeniz gerekir, ancak ışıklı malzemelerin her biri RGB'ye farklı tepki verir.


3

İlginç bir sorun gibi görünüyor, ancak insanların söyleyemeden önce ne kadar hassasiyete ihtiyacınız olacağını merak ediyorum. Her neyse, bu cevap "gerçek zamanlı" kısma odaklanıyor, ama araştırdığım bir şey olmadığı için herhangi bir makale bilmiyorum.

Açıkçası bunu gerçek zamanlı olarak doğru bir şekilde hesaplamak istiyorsanız, mobil ses kaynakları ile, grafik kartı kullanarak yansımanın hesaplanması en hızlı olacaktır. Örneğin, aynı anda çalışan dünyanın basitleştirilmiş bir sürümüne sahipseniz, bunu bir dokuya veya kübapa "yansıma desenleri" oluşturmak ve bu dokudan sesi nasıl çıkarmanız gerektiğini çıkartabilirsiniz. Bu modeldeki sesler (veya ayrı frekans bantları) nokta ışık kaynakları olacaktır. Sadece temel (1 sıçrama) yansımalarla, daha fazla hassasiyete ihtiyacınız olmadığını fark edebilirsiniz, ancak bu özellikle basitleştirilmiş geometri ve düşük çözünürlükle çok hızlı olmalıdır. Yine de, bir grafik kartında birden fazla sahnede performans sorunları olup olmadığından emin değilim.

Az bildiğim alanlara doğru ilerlerken, bir BSP ağacı, köşeleri büken dalgalar için (sanırım) hacimleri ve diğer hacimlere olan bağlantılarını tanımladığı için faydalı gibi görünüyor.

Duruma bağlı olarak, yukarıdaki testlerin sonuçlarını önbelleğe almak için başka bir optimizasyon olacaktır. Örneğin, oyuncuların yönüne göre döndürülebilen ancak tamamen yeniden hesaplanamayan bir ses kubbesinin veya oyuncunun konumuna göre aralarında arayabileceğiniz birkaç kübemapın depolanması.


Speküler ve dağınık yansımaların yanı sıra "yuvarlak köşeleri bükme" ve tıkayıcıları bir şekilde küresel harmonikleri kullanarak hemen hemen ücretsiz olarak alabileceğinize rağmen ...
Goz

Tamam, aslında küresel harmoniklerin ne olduğunu ve nasıl uygulandıklarını anlamaya başladıktan sonra, grafik kartı bölümü (paragraf 2) oldukça önemsizdir. Bir BSP ağacının etrafındaki bit, genellikle bir seviye için basitleştirilmiş bir geometri olduğu için oldukça 3. kişi / 1. kişi oyununuz olduğu varsayılarak hala yararlı olabilir. (AShelly bağlantılı kağıttaki "hücre bitişik grafiğine" benzer). Her karenin yeniden hesaplanmaması bazı işlemleri de kurtarabilir.
Toeofdoom


2

Bunu gerçekten denemedim, ama her zaman ışık yayılım hacimleri gibi bir yaklaşımın ses için kullanılabileceğini merak ettim. Işık yayılma hacimlerinde, ışık sıçramalarının ve oklüzyonlarının 3d dokuyu dolduran sel tarafından simüle edildiği küçük bir 3d doku kullanılır (32x32x32 inanıyorum). Küresel harmonikler kullandığı için bunu sesle de yapabilir. Ben bir ses uzmanı değilim


2

Cornell'in bilgisayar grafik programından Doug James, bir ortamdaki seslerin doğru modellenmesinde çok çalışmıştır. Bununla birlikte, makalelerinin çoğu belirli ses üreteçlerini (ince kabuklu nesneler, alevler, vb.) Ele alırlar.

Ancak, bazılarını okumanız yararlı olabilir. Bu yaklaşımın daha sert ve gerçek zamanlı performans için yeterince verimli olma yolunda nasıl ilerleyeceği ve / veya değiştirileceği hakkında fikir verebilir.

Sitesi burada:

http://www.cs.cornell.edu/~djames/

Özellikle ilgi çekici olan "Harmonik Sıvılar" ve "Harmonik Kabuklar" kağıtları olabilir.


1

Ben de bunu biraz düşündüm. Öncelikli endişenin (gerçekçilik / performans değiş tokuşu açısından) uzamsal olarak kulaklarınızın gözlerinizden daha aşağı olduğu ve gözlerinizin ihtiyaç duyduğu kadar gerçekçi olmayabilecek bir şeyi kolayca kabul edebileceğimi hissettim. Sesi yerel ortamda mükemmel bir şekilde modellemeye çalışmanın gereğinden fazla olması çok iyi bir şans - EAX muhtemelen 'yeterince iyi'.

Kapalı bir ortamda (örn. Quake) ilk önce her oda hakkında iki özellik hesaplayacağım: 'transfer' ve daldırma:

Transferrance , sesin bu odadan geçerek nasıl etkileneceğini ve büyük olasılıkla parametrik bir EQ'ya sayar (ideal olarak her odadan yankı / yankı eklersiniz, ancak EAX çipinizde bu kadar bant genişliği olmayabilir). Parametrik EQ ayrıca ses zayıflamasını simüle eder.

Daldırma , odayı dokuz küpe bölerek (muhtemelen, sadece bir tane bile yeterince iyi olabilir) ve yerel ses özelliklerini bu perspektiften hesaplayarak olurdu. Bu parametreler EAX ortamında kullanılacaktır.

Son olarak, odalarınızın her biri bir grafikle birbirine bağlanır; buradaki grafikteki her nokta, her odayı birbirine bağlayan portallardır.

Ses tetiklendiğinde bir taşkın dolgusu yaparsınız (A * araması olmaz) ve aktarılan aktarım ve mesafeyi takip edersiniz. Ses müzikçalara ulaştığında, ileride bir noktada çalmak için sıraya sokarsınız; kat edilen mesafeye göre. Geçen grafik noktalarının sayısını ve nihayetinde sesi `` kes '' (başka bir deyişle, sürekli bir taşkın dolgusu) takip edebilirsiniz. CPU'yu bağlayabileceği için bunu yapmak için CUDA kullanmanız gerekebilir.

Bir ses çaldığında, bir 3D ses API'sini (OpenAL) kullanır ve girdiği portala yerleştirirsiniz, daha sonra oynatıcının şu anda dokuz küpün hangisinde olduğunu öğrenir ve bu EAX ortamını uygularsınız.

Buradaki temiz şey, ortamınız yeterince karmaşıksa, özgür 'küresel' yankılar elde edeceğiniz ve oyuncuların doğru yönden gelen sesi algılayacağıdır; ve eğer EAX ortamının doğru olmasını umarsanız, etki beynin kabul edeceği kadar ikna edici olur.

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.