Làm thế nào để các nhà thiết kế trò chơi tạo ra các mô hình rung động?


13

Tôi tò mò về việc tạo và triển khai các kiểu rung cho bộ điều khiển bảng điều khiển (đối với bộ điều khiển PS4, nếu nó tạo ra sự khác biệt).

Có một độ trễ và thông số tốc độ động cơ phải không? Nhưng chúng ta cũng có thể mờ dần từ động cơ bên trái sang bên phải, hoặc làm cho chúng hoạt động cùng nhau ....

Có một cách tiêu chuẩn để tạo ra các mẫu đó?

Ví dụ, tôi nghĩ về việc tạo chúng với âm thanh wav âm thanh nổi trong trình chỉnh sửa âm thanh và đọc tệp wav trong mã của tôi để chuyển đổi chúng thành độ trễ và tốc độ.

Làm thế nào điều này được thực hiện trong ngành công nghiệp game?


Tôi đã thấy các hệ thống ầm ầm được điều khiển qua đường ống âm thanh của trò chơi, vì vậy bạn có thể đang đi đúng hướng. Mặc dù vậy, tôi không thể nói từ kinh nghiệm cá nhân về các chi tiết - dù có một đoạn nhạc ầm ầm cụ thể hay nếu tiếng ầm ầm được suy ra từ âm lượng hiệu ứng âm thanh, hoặc nếu kết nối hoàn toàn để kích hoạt âm thanh & tiếng ầm ầm qua một giao diện nhất quán trong khi chúng được sử dụng hoàn toàn riêng biệt định dạng dữ liệu nguồn.
DMGregory

Bạn không có quyền kiểm soát chính xác đối với ầm ầm. Ngoài ra, trong DualShock, rumbler bên trái nặng và bên phải nhẹ, do đó bạn nhận được tần số thấp từ bên trái. (Tôi có thể có trái / phải lùi, nhưng bạn có ý tưởng).
Almo

@ Almo Còn hệ thống rumble HD của Nintendo. Bạn chắc chắn có một số hình thức kiểm soát điều đó
Bálint

Mà sẽ tiết lộ câu hỏi là quá rộng. Tôi thực sự không biết về hệ thống của họ.
Almo

1
@DMGregory Các công cụ âm thanh Tôi biết rằng xử lý rumble / haptics chỉ sử dụng cùng một kích hoạt, phong bì, vv - không phải dạng sóng âm thanh. Giống như Almo nói, bạn không thực sự có mức kiểm soát đó ở cấp API. Tôi không thể tưởng tượng hệ thống của Nintendo khác nhiều - bạn sẽ không muốn cập nhật bất kỳ hệ thống ầm ầm nào với tần suất cao như vậy trong đó dữ liệu âm thanh thực tế là một lựa chọn tốt.
Richard Byron

Câu trả lời:


8

Bộ điều khiển dualshock PS4 có các giá trị 1 byte cho các gói rumble trái và phải, do đó, điều này về cơ bản hoạt động như âm nhạc 8 bit.

Hầu hết trong số này đứng sau một NDA, vì vậy rất khó để có được bất kỳ thông tin nào về điều này (ngay cả thông tin ở trên cũng khó có được, tôi chỉ tìm ra nó từ SDK của bên thứ ba cho node.js). Đây là những thông tin tôi chắp ghép:

Quá trình này thực sự giống như tạo ra âm nhạc stereo 1 byte (và nó được tạo ra bởi một nghệ sĩ âm nhạc). Nó liên quan đến việc kết nối bộ điều khiển PS4 với máy tính và sử dụng chương trình để tạo các mẫu rumble. Họ làm một cái dựa trên việc đoán, sau đó chạy nó, sau đó tinh chỉnh nó và lặp lại các bước này cho đến khi mô hình cảm thấy tốt.

Một số tiếng nổ được tạo ra theo chương trình (như khi xe đi trên đường), nhưng đây thường là một chức năng đơn giản (như xoang) hoặc giá trị không đổi tương tự như cách điện thoại làm điều đó. Ngay cả các hiệu ứng phức tạp nhất bao gồm nhân một mô hình rumble bình thường hóa với sức mạnh bạn muốn.

SDK PS4 cũng đi kèm với một số mẫu được xác định trước. Một số ví dụ là: mô hình răng cưa (tăng liên tục, sau đó tăng từ 255 xuống 0), sóng xoang và hình tam giác (nó tăng lên 255 tuyến tính, sau đó giảm xuống 0 tuyến tính).

Tôi không thể tìm thấy bất kỳ chi tiết nào về các bộ điều khiển khác (đặc biệt là rumble HD của Switch, thậm chí không có bằng sáng chế mô tả cách thức hoạt động của nó). Nhưng có lẽ họ đang sử dụng một cách tiếp cận tương tự với các gói rumble chính xác hơn.

Nguồn:


Tôi đã tìm thấy bài viết này một thời gian trước trong đó đưa ra cấu trúc báo cáo để liên lạc qua lại với bộ điều khiển , bao gồm các byte bù của các kênh ầm ầm và cờ điều khiển chúng. Nó có thể là toàn diện nhất có sẵn trên Internet công cộng, mà không cần truy cập vào tài liệu & API của Sony.
DMGregory

@DMGregory Bạn có phiền nếu tôi thêm nó vào phần nguồn không?
Bálint

Vui lòng làm. :) Tôi chia sẻ nó hy vọng sẽ được sử dụng.
DMGregory

4

Không có cách tiêu chuẩn hóa.

Các thiết bị khác nhau có khả năng và giới hạn rumble khác nhau.

Phần lớn các thiết bị không hỗ trợ "phản hồi lực" thực tế (ví dụ: Vô lăng khi va vào lề đường / ổ gà sẽ cho phép lập trình viên đẩy lùi về một góc cụ thể) nhưng chỉ ầm ầm theo một hướng không kiểm soát / tùy ý.

Vì vậy, hầu hết các lực lượng phản hồi các tính năng nêu trên MSDN / DirectX và các API khác chưa bao giờ thực sự cụ thể hóa trong thực tế trên thị trường sử dụng hoặc có kém và / hoặc như phi di động triển khai các nút điều khiển "thông minh" (phong bì, lặp lại, vv) như không thể sử dụng đến mức trong thực tế, các nhà phát triển thường bị buộc chỉ sử dụng các điều khiển BẬT / TẮT trực tiếp với việc thực hiện hiệu ứng của riêng họ.

Các thiết bị tiên tiến hơn cho phép phản hồi lực điều khiển bằng servo cần API tùy chỉnh vì API đầu vào chung không hỗ trợ các tham số cần thiết (góc chính xác, lực chính xác, giới hạn, v.v.).

Việc thêm các công nghệ mới nổi như găng tay cảm giác VR vào hỗn hợp làm cho các API chung đó thậm chí còn thiếu hơn.


Việc thực hiện phổ biến nhất là với hai động cơ DC có tải không cân bằng mỗi cái, một động cơ nặng hơn động cơ kia và không có điều khiển tốc độ chính xác.

Tối thiểu bạn có quyền điều khiển bật / tắt đối với chúng và có thể thực hiện một số điều khiển công suất giới hạn PWM nhưng không điều khiển tốc độ chính xác. Bạn không biết tốc độ và độ rung kết quả sẽ là bao nhiêu. Các bộ điều khiển khác nhau có động cơ và trọng lượng khác nhau sẽ chạy ở tốc độ khác nhau cho cùng một cài đặt.

Các động cơ phải quay lên đầu tiên và yêu cầu toàn bộ sức mạnh trong một chút thời gian sau đó có thể được chuyển sang chế độ thấp hơn. Độ trễ spin up hạn chế rất nhiều khả năng đáp ứng.

Các bộ điều khiển thường được cập nhật một lần trên mỗi khung hình cho bạn tần số cập nhật khoảng 20Hz đến 100Hz. Điều này giới hạn độ phân giải của điều khiển PWM của bạn vì bạn không muốn động cơ bị đình trệ ở cài đặt thấp nhất. Và bạn không biết động cơ của bộ điều khiển người dùng cuối có thể đi thấp đến mức nào trước khi ngừng (dừng) để bạn cần có mức an toàn tốt.

Một số yêu cầu hệ thống đặt giới hạn hơn nữa về những gì bạn có thể làm với chúng.

Các thiết bị di động thường chỉ có 1 động cơ rung và PWM có thể không thực hiện được do quán tính thấp từ kích thước của trọng lượng và tốc độ cập nhật chậm. Hệ thống có thể lọc thêm để tránh lạm dụng hoặc thậm chí có thể làm hỏng (giới hạn bóng bán dẫn trình điều khiển công suất và gai cảm ứng) hoặc chỉ là một hệ thống con GPIO thực sự chậm.

Trên thiết bị di động, bạn có thể bị giới hạn hoặc muốn giới hạn bản thân "rung trong khoảng X * 50 mili giây" mà không có PWM.

Một số thiết bị và bộ điều khiển mới hơn có một điện từ được điều khiển như loa bởi sóng âm thanh tốc độ mẫu thấp. Chúng cung cấp cho bạn nhiều quyền kiểm soát hơn nhưng hoàn toàn khác biệt với các bộ điều khiển phổ biến hơn.


Vì tất cả những khác biệt này bạn có thể muốn trừu tượng hệ thống rung để chơi một số hạn chế về trình độ cao vĩ mô ảnh hưởng bởi tên trong một-và-quên chụp hình thời trang: PlayVibration(player, "Got Loot");, PlayVibration(player, "Heavy Fall");, StopAllVibrationFor(player);, ...

Sau đó, bạn sẽ phải tạo hiệu ứng rung ở mức độ thấp và mã điều khiển rung thích ứng với từng nền tảng riêng lẻ .

Ngay cả đối với một trò chơi âm nhạc, việc gọi một lần PlayVibrationcho mỗi nhịp cũng dễ quản lý và kiểm soát hơn khi bao thanh toán tạm dừng trò chơi và các vấn đề về đồng bộ hóa lại một trình tạo hiệu ứng định kỳ thông minh.

Mặc dù các thiết bị có tiếng ầm ầm điều khiển bằng điện từ thực tế có thể được xử lý như thiết bị âm thanh và sử dụng API âm thanh do lo ngại về pin, điều này có thể chạy theo quy định của hệ thống nếu điện từ liên tục được cấp nguồn / hoạt động . "Mức năng lượng 0" có thể không giống như "Tắt điện từ" vì vậy ngay cả khi đó cần có sự chăm sóc đặc biệt.


3

Từ André LaMothe trong Thủ thuật lập trình trò chơi Windows Gurus:

Lập trình các thiết bị này rất phức tạp. Không chỉ là một sự hiểu biết tốt về lực, mùa xuân và chuyển động cần thiết, mà các thiết bị và các sự kiện hoặc hiệu ứng lực, có mối quan hệ rất chặt chẽ với các nốt nhạc. Đó là, họ có thể có một phong bì điều chỉnh các lực khi chúng được áp dụng cho các động cơ và bộ truyền động khác nhau trên cần điều khiển. Do đó, các giá trị như tốc độ, tần suất, thời gian, v.v ... đều đóng vai trò trong việc sử dụng và lập trình phản hồi lực.

Mặc dù văn bản đó khá cũ, một tìm kiếm nhanh thông qua MSDN để tìm phản hồi lực cho thấy các khái niệm được đề cập không thay đổi nhiều; đây là một bản tóm tắt các chủ đề được nêu trong các khái niệm cơ bản về phản hồi lực lượng của họ :

  • Lực không đổi: Một lực ổn định theo một hướng
  • Lực dốc: Một lực tăng dần hoặc giảm độ lớn.
  • Hiệu ứng định kỳ: Một lực dao động theo một mẫu sóng xác định.
  • Điều kiện: Phản ứng với chuyển động hoặc vị trí dọc theo trục.
  • Phong bì: Một phong bì xác định giá trị tấn công và giá trị mờ dần, điều chỉnh độ lớn bắt đầu và kết thúc của hiệu ứng.
  • Offset: Xác định mức độ mà dạng sóng được dịch chuyển lên hoặc xuống từ mức cơ sở.
  • Tỷ lệ: Một giá trị khuếch đại duy nhất có thể được áp dụng cho tất cả các hiệu ứng cho một thiết bị.

Về mặt PS4, điều duy nhất tôi bật lên là một số tài liệu Unreal Engine 4 , trong đó nêu rõ:

Những (định danh) này sẽ được ánh xạ theo triển khai cụ thể của nền tảng. Ví dụ: PS4 chỉ nghe các kênh XXX_LARGE và bỏ qua phần còn lại, trong khi XBox One có thể ánh xạ XXX_LARGE tới các động cơ xử lý và XXX_SMALL cho các động cơ kích hoạt. Và iOS có thể ánh xạ LEFT_SMALL vào động cơ duy nhất của nó.

Như câu trả lời của Stephane Hockenhull chỉ ra, mỗi nền tảng là khác nhau. Và như được đề xuất trong trò chuyện GDSE , có thể các chi tiết cho API phản hồi lực lượng PS4 bị hạn chế NDA.

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.