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.