게임 디자이너는 진동 패턴을 어떻게 만듭니 까?


13

콘솔 컨트롤러 (PS4 컨트롤러의 경우 차이가있는 경우)의 진동 패턴을 생성하고 구현하는 것이 궁금합니다.

지연 및 모터 속도 매개 변수가 있습니까? 또한 왼쪽 모터에서 오른쪽으로 페이드 인하거나 함께 작동시킬 수 있습니다 ....

이러한 패턴을 만드는 표준화 된 방법이 있습니까?

예를 들어 오디오 편집기에서 스테레오 wav 오디오로 파일을 만들고 지연 및 속도로 변환하기 위해 코드에서 wav 파일을 읽는 것에 대해 생각했습니다.

이것이 게임 산업에서 어떻게 이루어 집니까?


게임의 오디오 파이프 라인을 통해 럼블 시스템이 구동되는 것을 보았습니다. 특정 럼블 트랙이 있었는지 또는 럼블이 사운드 효과 볼륨에서 추론되었는지, 또는 연결이 완전히 분리되어 사용되는 동안 일관된 인터페이스를 통해 소리와 럼블을 연결하는 것이 었는지 여부에 대한 개인적인 경험으로는 말할 수 없습니다. 소스 데이터 형식.
DMGregory

당신은 럼블을 정확하게 제어 할 수 없습니다. 또한 DualShock에서는 왼쪽 럼블 러가 무겁고 오른쪽이 가벼우므로 왼쪽에있는 주파수에서 낮은 주파수를 얻습니다. (왼쪽 / 오른쪽을 뒤로했을 수도 있지만 아이디어가 있습니다.)
Almo

@Almo Nintendo의 HD 럼블 시스템은 어떻습니까? 당신은 확실히 그것에 대해 어떤 형태의 통제권을 가지고 있습니다
Bálint

질문이 너무 광범위하다는 것을 알 수 있습니다. 나는 그들의 시스템에 대해 실제로 모른다.
Almo

1
@DMGregory 내가 알고있는 오디오 엔진은 오디오 파형이 아닌 동일한 트리거, 엔벨로프 등을 사용합니다. Almo가 말했듯이 API 레벨에는 실제로 그 레벨의 제어가 없습니다. 나는 Nintendo의 시스템이 많이 다르다는 것을 상상할 수 없다-실제 오디오 데이터가 좋은 선택 인 고주파수에서 럼블 시스템을 업데이트하고 싶지 않을 것이다.
Richard Byron

답변:


8

PS4 듀얼 쇼크 컨트롤러는 왼쪽 및 오른쪽 럼블 팩에 대해 1 바이트 값을 가지므로 기본적으로 8 비트 음악처럼 작동합니다.

이것들 대부분은 NDA 뒤에 있기 때문에 이것에 대한 정보를 얻기가 매우 어렵습니다 (위의 정보를 얻기가 어려웠더라도 node.js의 타사 SDK에서만 알아 냈습니다). 이것들은 내가 함께 한 정보입니다.

이 과정은 말 그대로 1 바이트 스테레오 음악을 만드는 것과 같습니다 (음악 아티스트가 만든 것). 여기에는 PS4 컨트롤러를 컴퓨터에 연결하고 프로그램을 사용하여 럼블 패턴을 만드는 과정이 포함됩니다. 그들은 추측에 기초하여 하나를 만들고, 실행하고, 조정하고 패턴이 좋아질 때까지이 단계를 반복합니다.

럼블 중 일부는 프로그래밍 방식으로 생성되지만 (차가 도로를 떠날 때와 같이) 일반적으로 단순한 기능 (부비동과 같은)이거나 전화의 작동 방식과 유사한 상수 값입니다. 가장 복잡한 효과조차도 정규화 된 럼블 패턴에 원하는 강도를 곱하는 것으로 구성됩니다.

PS4 SDK는 또한 미리 정의 된 패턴과 함께 제공됩니다. 톱니 패턴 (일정하게 증가한 다음 255에서 0으로 이동), 부비동 파 및 삼각형 (선형으로 255로 증가한 다음 다시 선형으로 0으로 증가)이 있습니다.

다른 컨트롤러에 대한 세부 정보를 찾을 수 없었습니다 (특히 스위치의 HD 럼블, 특허조차도 작동 방식을 설명하지 않음). 그러나 그들은 아마도 더 정확한 럼블 팩과 비슷한 접근법을 사용하고있을 것입니다.

출처 :


이 기사 는 럼블 채널의 바이트 오프셋과 제어하는 ​​플래그를 포함하여 컨트롤러와 통신하기위한 보고서 구조를 설명하는 잠시 동안 발견되었습니다 . Sony의 자체 설명서 및 API에 액세스하지 않고도 공용 인터넷에서 가장 포괄적으로 제공 될 수 있습니다.
DMGregory

@DMGregory 소스 섹션에 추가하겠습니까?
Bálint

제발. :) 나는 그것이 사용되기를 바라고 그것을 공유했다.
DMGregory

4

표준화 된 방법이 없습니다.

장치마다 다른 럼블 기능과 제한이 있습니다.

대부분의 장치는 실제 "힘 피드백"을 지원하지 않습니다 (예 : 커브 / 포트홀에 부딪 칠 때 프로그래머가 특정 각도로 뒤로 밀릴 수 있도록하는 스티어링 휠). 그러나 제어되지 않은 / 임의의 방향으로 울립니다.

따라서 MSDN / DirectX 및 기타 API에 언급 된 대부분의 Force Feedback 기능은 실제로 사용자 시장에서 실제로 실현되지 않았거나 "스마트"컨트롤 (봉투, 반복 등)의 구현이 불량하거나 이식 불가능한 방식으로 구현 되지 않았습니다. 실제로는 개발자가 종종 자신의 효과 구현과 함께 직접 ON / OFF 컨트롤을 사용하도록 강요 할 수 없습니다 .

서보 제어력 피드백을 허용하는 고급 장치에는 일반 입력 API가 필요한 매개 변수 (정확한 각도, 정확한 힘, 한계 등)를 지원하지 않기 때문에 맞춤형 API가 필요합니다.

VR 느낌 장갑과 같은 새로운 기술을 혼합하여 추가하면 이러한 일반 API가 훨씬 부족합니다.


가장 일반적인 구현은 각각 불균형 부하를 갖는 두 개의 DC 모터를 사용하는 것입니다. 하나는 다른 것보다 무겁고 정확한 속도 제어는 없습니다.

최소한 당신은 그들에 대한 켜기 / 끄기 제어를하고 제한된 PWM을 수행 할 수 전력 제어 있지만 정확한 속도 제어 없습니다. 속도와 결과 진동이 실제로 무엇인지 알 수 없습니다. 컨트롤러마다 모터와 무게가 다르므로 동일한 설정에서 다른 속도로 작동합니다.

모터는 먼저 회전해야하며 약간의 시간 동안 최대 전력을 소비해야하며, PWM을 낮게 설정하면됩니다. 스핀 업 지연은 응답 성을 크게 제한합니다.

컨트롤러는 종종 프레임 당 한 번씩 업데이트되어 대략 20Hz ~ 100Hz의 업데이트 주파수를 제공합니다. 이는 모터가 최저 설정에서 정지되는 것을 원하지 않기 때문에 PWM 제어의 해상도를 제한합니다. 그리고 최종 사용자 컨트롤러의 모터가 정지하기 전에 얼마나 낮은 지 알 수 없으므로 안전 마진이 필요합니다.

일부 시스템 요구 사항에 따라 수행 할 수있는 작업이 더 제한됩니다.

모바일 장치에는 일반적으로 진동 모터가 1 개만 있으며 무게의 크기에서 관성이 낮고 업데이트 속도가 느려 PWM이 불가능할 수 있습니다. 시스템은 남용 또는 손상 (파워 드라이버 트랜지스터 제한 및 유도 스파이크) 또는 GPIO 하위 시스템의 속도를 늦추기 위해 추가로 필터링 할 수 있습니다.

모바일에서는 PWM이 없으면 "거의 X * 50 밀리 초 동안 진동"하도록 제한하거나 자신을 제한하려고 할 수 있습니다.

일부 최신 장치 및 컨트롤러에는 낮은 샘플링 속도의 오디오 웨이브로 스피커처럼 구동되는 솔레노이드가 있습니다. 이것들은 더 많은 제어권을 제공하지만 더 일반적인 컨트롤러와는 완전히 다릅니다.


때문에 추상적 인 진동 시스템에 당신이 할 수있는 모든 이러한 차이의 촬영 앤 잊지 방식으로 이름 높은 수준의 매크로 효과의 제한된 수를 재생하려면 PlayVibration(player, "Got Loot");, PlayVibration(player, "Heavy Fall");, StopAllVibrationFor(player);, ...

그런 다음 각 플랫폼에 개별적으로 적용되는 저수준 진동 효과 및 진동 제어 코드를 작성해야합니다 .

게임 PlayVibration일시 정지 할 때 와 스마트 한주기 효과 생성기를 다시 동기화하는 문제를 고려할 때 모든 비트에 대해 원샷 을 호출하는 음악 게임의 경우보다 쉽게 ​​관리하고 제어 할 수 있습니다.

실제 솔레노이드 구동 럼블이있는 장치는 오디오 장치처럼 취급 할 수 있지만 배터리 문제로 인해 오디오 API를 사용할 수 있지만 솔레노이드의 전원이 지속적으로 켜져 있거나 활성화 된 경우 시스템 규정에 위배 될 수 있습니다 . "Power Level 0"은 "Solenoid Off"와 같지 않을 수 있으므로 특별한주의가 필요합니다.


3

Windows 게임 프로그래밍 전문가의 간계에있는 André LaMothe :

이러한 장치를 프로그래밍하는 것은 매우 복잡합니다. 힘, 스프링 및 운동에 대한 올바른 이해뿐만 아니라 장치와 힘 이벤트 또는 효과는 음표와 매우 밀접한 관계가 있습니다. 즉, 조이스틱의 다양한 모터 및 액츄에이터에 적용될 때 힘을 조절하는 엔벨로프를 가질 수 있습니다. 따라서 속도, 주파수, 타이밍 등과 같은 값은 모두 힘 피드백을 사용하고 프로그래밍하는 데 중요한 역할을합니다.

그 텍스트는 다소 오래되었지만, MSDN을 통해 강제 피드백을 빠르게 검색하면 언급 된 개념이 크게 변하지 않았 음을 알 수 있습니다. 다음 은 힘 피드백기본 개념 에서 다루는 주제를 요약 한 것입니다 .

  • 일정한 힘 : 단일 방향으로 일정한 힘
  • 램프 힘 : 크기가 꾸준히 증가하거나 감소하는 힘.
  • 주기적 효과 : 정의 된 파동 패턴에 따라 맥동하는 힘.
  • 조건 : 축을 따라 동작 또는 위치에 대한 반응.
  • 엔벌 로프 : 엔벨로프는 공격의 시작 값과 페이드 값을 정의하여 효과의 시작 및 끝 크기를 수정합니다.
  • 오프셋 : 기본 레벨에서 파형이 위 또는 아래로 이동하는 양을 정의합니다.
  • 스케일 : 단일 게인 값을 장치의 모든 효과에 적용 할 수 있습니다.

PS4와 관련하여 내가 밝힌 유일한 것은 Unreal Engine 4 documentation 였습니다 .

이러한 (식별자)는 플랫폼 별 구현에 따라 매핑됩니다. 예를 들어 PS4는 XXX_LARGE 채널 만 수신하고 나머지는 무시합니다. XBox One은 XXX_LARGE를 핸들 모터에, XXX_SMALL을 트리거 모터에 매핑 할 수 있습니다. 그리고 iOS는 LEFT_SMALL을 단일 모터에 매핑 할 수 있습니다.

Stephane Hockenhull의 답변에서 알 수 있듯이 각 플랫폼은 다릅니다. 또한 GDSE 채팅에서 제안한 대로 PS4 포스 피드백 API에 대한 세부 정보는 NDA로 제한 될 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.