Sử dụng sóng hài hình cầu để xây dựng hình dạng âm thanh phức tạp


16

Tôi đã có một cuộc thảo luận tại nơi làm việc hôm nay về cách cải thiện mô hình âm thanh phòng. Có ý kiến ​​cho rằng rất ít công việc dường như đã được thực hiện về chủ đề này nhưng hàng tấn đã được thực hiện trong đồ họa. Nó đã được đề xuất thêm rằng vì âm thanh và ánh sáng chỉ là dạng sóng, có thể sử dụng những thứ như dò tia và radio để có được xấp xỉ tốt.

Lúc này tôi bắt đầu nghĩ về sóng hài hình cầu để mô phỏng hành vi này. Bạn có thể đồng thời thực hiện các phản xạ đặc biệt cũng như tán xạ âm thanh được mô hình hóa như các phản xạ khuếch tán. Như một phần thưởng, bạn cũng sẽ nhận được vật cản chặn chuyển âm thanh. Vấn đề duy nhất là làm thế nào để xử lý sự suy giảm của nhiều tần số. Chắc chắn điều này có thể được mô hình hóa bằng cách áp dụng một số dạng biến đổi cho phổ âm thanh (FFT).

Dù sao, có ai biết bất kỳ bài báo nào về chủ đề này, đặc biệt là về cách nó sẽ được thực hiện trong thời gian thực. Không có ai có lời khuyên hoặc thông tin chung hữu ích?


1
Điều này làm tôi nhớ đến trò chơi độc lập Devil's Tune Fork: indiegames.com/blog/2009/11/freeware_game_pick_devils_tuni.html (xem video để có cảm giác tốt về nó!)
Ricket

Câu trả lời:


5

Vâng, đó là một ý tưởng tốt. Malham đã viết một bài báo về vấn đề này, được dựa trên một số ý kiến của Menzies (trở lại vào năm 1999!).

Cũng lưu ý luận điểm MASc của Nosal thảo luận về việc sử dụng tính phóng xạ cho âm học.

Đối với chiếu sáng, (có 3 bộ chức năng, một cho R, một cho G, một cho B), bạn sẽ cần thực hiện một "bộ" chức năng SH khác nhau cho mỗi dải tần số thô mà bạn muốn biểu diễn (giả sử một cho tần số thấp, 60Hz-1kHz, một cho tần số trung bình 1kHz-2kHz, một cho tần số cao 10kHz-20kHz, v.v.). Hãy để mọi thứ dưới 60Hz vượt qua mọi thứ (gần như là âm thanh trong cuộc sống thực)

Tuy nhiên, bạn cần mô hình hóa khả năng phản xạ âm thanh của từng vật liệu, giống như các vật liệu được chiếu sáng mỗi loại phản ứng với RGB khác nhau.


3

Nghe có vẻ là một vấn đề thú vị, mặc dù tôi tự hỏi bạn sẽ cần bao nhiêu độ chính xác trước khi mọi người không thể nói. Dù sao, câu trả lời này tập trung vào phần "thời gian thực", nhưng tôi không biết bất kỳ bài báo nào vì đó không phải là điều tôi đã điều tra.

Rõ ràng nếu bạn muốn tính toán chính xác điều này trong thời gian thực, với các nguồn âm thanh di động, việc tính toán phản xạ sẽ nhanh nhất bằng cách sử dụng card đồ họa. Ví dụ: nếu bạn có một phiên bản đơn giản hóa của thế giới đang chạy đồng thời, bạn có thể sử dụng nó để kết xuất "các mẫu phản chiếu" thành một kết cấu hoặc sơ đồ khối và suy ra kết cấu đó như thế nào bạn nên phát ra âm thanh. Âm thanh (hoặc các dải tần số riêng biệt của âm thanh) trong mô hình đó sẽ là nguồn sáng điểm. Chỉ với các phản xạ cơ bản (1 lần nảy), bạn có thể thấy rằng bạn không cần bất kỳ độ chính xác nào nữa, trong khi điều này sẽ rất nhanh, đặc biệt là với hình học đơn giản và độ phân giải giảm. Mặc dù vậy, tôi không hoàn toàn chắc chắn nếu có vấn đề về hiệu suất với nhiều cảnh trên một card đồ họa.

Đi sâu hơn vào các khu vực mà tôi biết rất ít, một cây BSP có vẻ như có thể hữu ích cho các sóng uốn quanh các góc vì (tôi nghĩ) nó xác định các tập và kết nối của chúng với các tập khác.

Tùy thuộc vào tình huống, tối ưu hóa thêm sẽ là kết quả bộ đệm từ các thử nghiệm trên. Ví dụ: lưu trữ một sơ đồ khối âm thanh có thể được xoay dựa trên hướng của người chơi nhưng không được tính toán lại hoàn toàn hoặc một vài hình khối mà bạn có thể nội suy giữa dựa trên vị trí của người chơi.


Nó gây ấn tượng với tôi mặc dù bạn có thể nhận được các phản xạ đặc biệt & khuếch tán cũng như "các góc uốn cong" và tất cả đều cho, khá nhiều, miễn phí sử dụng các sóng hài hình cầu trong một số thời trang ...
Goz

Được rồi, sau khi thực sự bắt đầu hiểu hài hòa hình cầu là gì và cách chúng áp dụng, phần card đồ họa (đoạn 2) khá không liên quan. Một chút về cây BSP có thể vẫn hữu ích, giả sử bạn có một trò chơi người thứ 3 / người thứ nhất khá phổ biến, vì nó thường là một hình học đơn giản cho một cấp độ. (tương tự như "biểu đồ kề kề tế bào" trong bài báo AShelly được liên kết). Không tính toán lại mọi khung hình cũng có thể tiết kiệm một số xử lý.
Toeofdoom


2

Tôi thực sự đã không thử điều này, nhưng tôi luôn tự hỏi liệu một phương pháp như khối lượng truyền ánh sáng có thể được sử dụng cho âm thanh hay không. Trong khối lượng truyền ánh sáng, một kết cấu 3d nhỏ được sử dụng (32x32x32 tôi tin) trong đó ánh sáng bị dội lại và chẩm được mô phỏng bằng cách lấp đầy kết cấu 3d. Vì nó sử dụng sóng hài hình cầu, nên nó cũng có thể làm điều này với âm thanh. Tôi không phải là một chuyên gia âm thanh tuy nhiên


2

Doug James của chương trình đồ họa máy tính của Cornell đã thực hiện rất nhiều công việc trong việc mô hình hóa chính xác âm thanh trong một môi trường. Tuy nhiên, hầu hết các bài báo của anh ấy xử lý các trường hợp cụ thể của máy phát âm thanh (vật thể vỏ mỏng, ngọn lửa, v.v.) Chúng có lẽ không đủ hiệu quả để thực hiện trong thời gian thực cùng với các nhiệm vụ khác mà trò chơi của bạn phải thực hiện.

Tuy nhiên, nó có thể được sử dụng để bạn đọc qua một số trong số họ. Nó có thể cung cấp cho bạn các ý tưởng về cách tiến hành và / hoặc sửa đổi các cách tiếp cận của anh ấy để trở thành kẻ phá hoại nhưng đủ hiệu quả để thực hiện thời gian thực.

Trang web của anh ấy ở đây:

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

Quan tâm đặc biệt có thể là các bài báo "Chất lỏng hài hòa" và "Vỏ sóng hài" của anh ấy.


1

Tôi cũng đã đưa ra một số suy nghĩ. Tôi cảm thấy mối quan tâm hàng đầu (về mặt thực tế / đánh đổi hiệu suất) là đôi tai của bạn kém hơn đôi mắt của bạn - và khá dễ dàng chấp nhận một cái gì đó có thể không thực tế như mắt bạn cần. Có một cơ hội rất tốt khi cố gắng mô hình hóa hoàn hảo âm thanh trong môi trường địa phương là quá mức cần thiết - EAX có lẽ là 'đủ tốt'.

Trong một môi trường khép kín (ví dụ Quake), trước tiên tôi sẽ tính hai thuộc tính về mỗi phòng: 'sự chuyển giao' và sự chìm đắm:

Sự chuyển đổi sẽ cho biết âm thanh sẽ bị ảnh hưởng như thế nào khi đi qua phòng này và rất có thể sẽ được tính vào EQ tham số (lý tưởng là bạn sẽ thêm tiếng vang / hồi âm từ mỗi phòng, nhưng chip EAX của bạn có thể không có nhiều băng thông này). EQ tham số cuối cùng cũng sẽ mô phỏng sự suy giảm âm thanh.

Ngâm sẽ được tính bằng cách chia phòng thành chín khối (có thể, thậm chí chỉ một khối có thể đủ tốt) và tính toán các thuộc tính âm thanh cục bộ theo quan điểm đó. Các tham số này sẽ được sử dụng trong môi trường EAX.

Cuối cùng, mỗi phòng của bạn sẽ được kết nối bằng một biểu đồ, trong đó mỗi điểm trong biểu đồ là các cổng kết nối mỗi phòng.

Khi âm thanh kích hoạt, bạn sẽ thực hiện lấp lũ (không tìm kiếm A *) và theo dõi sự chuyển đổi và khoảng cách di chuyển. Khi âm thanh đến người chơi, bạn sẽ xếp hàng để phát vào một thời điểm nào đó trong tương lai; dựa trên quãng đường đã đi Bạn có thể theo dõi số lượng điểm đồ thị được truyền và cuối cùng là 'loại bỏ' âm thanh (nói cách khác, lấp đầy lũ liên tục). Bạn có thể phải sử dụng CUDA để làm điều này vì nó có thể khiến CPU bị ràng buộc.

Khi âm thanh phát, bạn sẽ sử dụng API âm thanh 3D (OpenAL) để đặt nó tại cổng thông tin mà nó nhập vào, sau đó bạn sẽ tìm ra khối nào trong chín khối mà trình phát hiện đang sử dụng và áp dụng môi trường EAX đó.

Điều gọn gàng ở đây là nếu môi trường của bạn đủ phức tạp, bạn sẽ có được tiếng vang 'toàn cầu' miễn phí và người chơi sẽ cảm nhận được âm thanh phát ra từ đúng hướng; và nếu bạn có được môi trường EAX chính xác, hy vọng hiệu ứng sẽ đủ thuyết phục để bộ não chấp nhận nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.