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ó.