개발동기#
18년도 초 몬스터헌터 월드가 플스로 발매될 때 워낙 유명한 게임이기도 하고 추천을 받아서 한번은 플레이를 해보고자 매제로부터 PS4를 빌린 후 게임을 예약 구입해서 첫 PS4 게임 플레이를 해보았습니다.
당시 게이밍 환경은 PS4를 PC용 모니터에 연결하여 사용을 하였고, 지인들과 협동 플레이를 위해서 디스코드를 사용했었는데 몇가지 개인적으로 아쉬운 점이나 불편한점이 존재했습니다.
패드 그립감#
게임은 주로 PC와 XBOX 컨트롤러를 사용했기 때문에 여기에 너무 익숙해져버린 탓에 듀얼쇼크는 그립감이나 트리거 부분에 대한 아쉬움이 많이 느껴졌습니다. 별도의 컨버터를 통하여 연결이 가능했지만 빌린 콘솔을 위해서 컨버터를 구입할 수는 없었습니다.
사운드 출력 스위칭#
모니터를 디스플레이 장치로 사용하다보니 모니터 스피커나 AUX 아웃을 통하여 사운드 출력이 가능했습니다. PC에는 DAC 내장 인티앰프와 패시브 스피커를 사용하고 있었기 때문에 가능하면 DAC과 스피커를 활용하고 싶었습니다. 하지만 이럴 경우에는 게임 시 마다 광케이블을 PC에서 분리해서 PS4에 꼽아야 했는데, 물론 광 출력 분배기를 사용하는 방법도 있겠으나 이 또한 잠깐을 위해서 비용 지출을 해야하니 선뜻 할 수는 없었습니다. 그리고 스위칭을 하게 되면 PC에서 나오는 소리는 출력을 할 수 없기 때문에 게임을 하면서 동시에 유튜브 공략 영상을 본다거나 PC 기반 음성 채팅용 애플리케이션을 이용할 수 없었습니다.
음성대화 불편#
당시 PS4에서는 친구끼리 음성대화 채널 기능을 제공하지 않아서 인 게임(In-Game) 채널과 친구 음성 채널이 구분되지 못해서, 게임 내 채널이 나뉘거나 일시적으로 게임을 벗어나는 경우(홈 화면으로 진입 시) 연속적인 대화가 불가했기 때문에, PC 또는 휴대폰 디스코드를 사용하여 게임 사운드와 음성을 별도의 기기로 출력하고 이를 동시에 듣기 위해서는 이어폰을 별도로 사용해야했습니다.
그래서 이를 일부 해결하기 위해서 변칙적인 게이밍 환경을 구성했습니다.
- 일단 PS4 게임 화면은 PC에 있는 2개의 모니터중 하나에 직접 출력
- 나머지 하나의 모니터에는 PC로 리모트 플레이를 켜서 사운드만 PC에 연결된 DAC과 스피커를 통해 출력
위와 같은 환경으로 구성했을 경우 2, 3번에 대한 불편함을 일부 해결 할 수 있었습니다. PS4 이더넷을 유선으로 연결하였고, 집 내 네트워크 환경이라서 그런지 다행히도 사운드가 끊기거나 체감될 정도로 딜레이 되는 것은 느끼지 못했습니다.
그럼 남은 문제는 1번인데 ViGEmBus1라는 것을 이용하면 PC상에서 XBOX 컨트롤러를 DualShock 4로 인식시킬 수 있다는 것을 알게 되었습니다. 그래서 해당 드라이버를 설치하고 해당 드라이버와 같이 공개된 매핑을 도와주는 애플리케이션을 사용해서 XBOX 컨트롤러를 DS4로 에뮬레이션하여 리모트 플레이를 실행하고 사용 할 수 있게 되었습니다.
그래서 결론적으로 화면 출력은 네이티브(Native) 출력으로 컨트롤러 입력과 사운드 출력은 리모트 플레이를 이용한 변칙적인 게이밍 환경을 구축하게 되었고, 다행히도 체감될만한 네트워크 지연 이슈는 거의 겪지 않았기 때문에 몬스터 헌터 월드를 즐기는데는 큰 문제를 겪지 않았습니다.
다만 사소한 불편한 점이 하나 남아있었는데, 기존에 공개된 앱에서는 DS4 터치패드의 클릭을 매핑을 지원하지 않았습니다. 일부 게임의 경우 맵을 열거나 또는 필수적으로 해당 버튼이 필요한 경우가 있었기 때문에 결국 별도의 매핑 애플리케이션을 실행해서 해결해야 했습니다. 그런데 맵을 열때마다 컨트롤러를 놓고 컴퓨터 마우스나 키보드에 손을 대야하다보니 불편함이 점점 크게 느껴졌습니다.
그 와중에 이를 해결할 방법을 찾던 중 ViGEmBus 드라이버에 접근할 수 있는 Client SDK2가 별도로 있는 것을 발견하게 되었고, 기왕 이렇게된거 마지막 남은 불편한 점을 개선하기 위해서 직접 개발을 하기로 결심하게 됩니다. (목마른 사람이 우물을 팝니다)
프로토타입 개발#
SharpDX3라는 DirectX API wrapper를 이용하여 XBOX 컨트롤러 상태와 입력값을 받아서 ViGEmBus를 통해 DS4 입력 값으로 컨버팅하는 프로그램 프로토타입을 만들었습니다. 어차피 혼자(?)만 사용할거라 단순하게 만들어졌습니다.


(혼자 사용할거라 공개 예정도 없었는데 메일주소는 왜 넣었는지..)
기존 앱이 처리하지 못했던 터치패드 클릭이나 PS Home 버튼 기능은 게임내에서 전혀 같이 눌리지 않을 것 같은 범퍼와 아날로그 스틱 클릭의 조합으로 구현되도록 했고, SharpDX에서 XBOX 컨트롤러 배터리 레벨 상태 정보도 가져올 수 있었으므로 progress 컴포넌트로 간단하게 배터리 잔량 표시와 기존 앱이 지원하지 않던 포스 피드백 진동도 지원되도록 했습니다.
결론적으로는 처음 불편했던 점을 모두 개선하게 되었고, 갓 오브 워나 라스트 오브 어스, 레드 데드 리뎀션을 플레이하는데 전혀 문제가 없었습니다. 불편함을 개선하겠다고 먼길을 돌아왔지만 PS4 빌려쓰는 기간동안 유용하게 잘 사용했습니다.
다만 혼자 쓰기 아까워서 공개를 하려고 했으나 빌린 플스는 돌려준 상태였고 나중으로 미루다보니 2년을 방치했습니다.
그러다가 만든게 아깝기도 하고 개인 프로젝트로 정리해서 남겨놓으면 좋을 것 같아 최근 개선작업을 시작했습니다.
XI2DS#
공개를 목적으로 시작하였기 때문에 정식 프로젝트화를 위해서 XInput to DualShock 4의 약어로써 XI2DS라는 이름으로 브랜딩 하고 아이콘을 그려서 적용하였습니다.


기능 개선#
기존 앱이 이미 충분한 기능을 제공하기 때문에 마이너한 개선만 진행 했습니다. 우선 하나만 인식가능했던 컨트롤러를 최대 4개가 인식되도록 확장했습니다.
하지만 현재 PC용 리모트 플레이에는 단 하나의 패드만 인식 가능합니다?? (그런데 플스가 없어서 이걸 다 만들고놓고 나서야 알았습니다)
결론적으로 현재 상황에서는 크게 개선된 기능으로 보긴 어렵고, 다중으로 컨트롤러가 연결되어 있으면 그 중에서 골라서 쓸 수 있는 정도의 기능으로만 의미가 있을 것 같습니다.

배터리 상태 표시(오직 무선만)를 그래픽으로 표시하도록 했고, 일반 USB 연결의 경우 유선여부도 구분될 수 있도록 하였습니다.

기존에 포스 피드백 기능은 당연히 그대로 유지가 되었고, 특수 버튼 누르는 조합을 좀 더 단순화 시켜서 Select 버튼을 기본으로 하는 조합으로 변경되었습니다. (프로토타입은 아날로그 스틱 클릭에 범퍼, 트리거까지 동시에 눌러야하는… 만든 사람도 며칠지나면 까먹는 버튼 조합이었습니다)
특수 키 조합은 다음과 같습니다.
조합 | 매핑 |
---|---|
Select + Left Bumper | Share |
Select + Right Bumper | Touchpad Press |
Select + Start | PS Home |
그리고 기존에는 프로그램을 닫는 경우 곧바로 종료가 되었으나, 현재는 실수로 종료 되는 것을 방지하기 위해 종료대신 트레이에 유지되도록 했습니다. 완전 종료는 트레이 또는 앱 메뉴에서 Exit를 선택하면 됩니다.
프로그램이 중복 실행되는 것도 방지하도록 했습니다.

Github 공개 및 다운로드#
이렇게 만들어진 프로그램은 빌드된 실행파일만 배포하는 대신 Github에 public repository로 공개 배포하였습니다. 가급적 많은 사람들에게 공개가 되길 바라면서 부족한 영작과 번역기의 도움으로 영문 README를 작성하여 공개하였습니다.
https://github.com/micro-artwork/xi2ds
실행파일 릴리즈는 불완전성을 감안하여 v0.9 버젼으로 지정하고 릴리즈 하였습니다. 그러나 릴리즈 후 자체 테스트 하자마자 트리거 버튼이 인식이 안되는 버그를 발견해서, (에일로이 왜 활을 쏘지 못하는거야) 버그 수정과 마이너한 업데이트를 거쳐서 v0.9.2로 판올림하여 일단 첫 릴리즈를 마무리 하였습니다.
다운로드는 아래의 경로에서 가능하고 초기 실행 시 Microsoft Defender SmartScreen에 의해 ‘알 수 없는 게시자’ 경고 화면이 나올 수 있습니다. 참고로 이 앱은 여러분 PC를 해치지 않으니 믿고(?) 실행하시면 됩니다.
[직접 다운로드] https://github.com/micro-artwork/xi2ds/releases/download/v0.9.2/XI2DS_0.9.2.exe
테스트 및 데모#
현재 윈도우 10의 PS4 리모트 플레이 환경에서만 테스트 되었습니다. PS5 리모트 플레이나 윈도우 11 등 환경에서는 동작을 보증하지 않습니다.
아래는 간단한 데모 영상입니다. https://gamepad-tester.com/에 방문하시면 XBOX 컨트롤러 입력이 DS4로 변환되어 입력되는 상태를 확인 하실 수 있습니다.
ViGEmBus https://github.com/ViGEm/ViGEmBus ↩︎
ViGEm.NET https://github.com/ViGEm/ViGEm.NET ↩︎
SharpDX http://sharpdx.org/ ↩︎