모르는 분들은 모릅니다
VKD3D vs. DXVK

사실 이 둘은 경쟁관계라고 볼 수 있습니다
VKD3D는 Wine환경에서 D3D를 Vulkan으로 돌리기위해 만들어진 라이브러리이고 DXVK는 DirectX환경에서 D3D를 Vulkan으로 돌리기위한 라이브러리입니다

이렇게보면 둘이 직접경쟁하는것 같지 않을겁니다. 하지만 이 둘은 경쟁중입니다. 바로 SteamDeck에서 구동하는 방식이지요.

저 위에 문구에서 D3D를 Vulkan으로라는 문구가 겹치는것이 보일겁니다. 사실 이게 이 둘의 핵심입니다만 구동방식이 약간 다릅니다.

DXVK는 DirectX환경. 즉, 윈도우환경을 전제로 합니다. 그런데 Wine은 윈도우와 호환되는 환경이기에 Wine에서도 구동이 이루어졌습니다.
VKD3D는 Wine환경에서 구동이 전제이고 실제 윈도우에서 구동되는건 신경쓰지 않았습니다.

그럼 SteamDeck에선 어떨까요? 당연히 SteamDeck은 네이티브 리눅스용이 아니면 Proton으로 구동되고 이는 사실 게임에 최적화된 Wine입니다. 그러다보니 DXVK나 VKD3D를 쓰게 되었고 둘이서 성능에 관해 경쟁하게 되었습니다.

써본결과 둘 다 성능차이는 크게 없지만 특정게임에 한해 DXVK가 더 낫기도하고 VKD3D가 더 낫기도하고 그렇습니다. 이는 D3D11을 Vulkan으로 구동하냐와 D3D12를 Vulkan으로 구동하냐의 차이입니다. D3D12를 잘쓰는곳은 VKD3D가 훨씬 성능이 좋지만 D3D12보다 D3D11이 더 괜찮은 게임은 DXVK가 더 나은 상황입니다.

그리고 계속 SteamDeck이라고 하고 있지만 일반PC리눅스의 스팀도 동일한 방식을 쓰고 있으니 같은 방식 차이가 생길거라는 생각을 할 수가 있습니다.

밸브의 선택은
DirectX11은 DXVK
DirectX12는 VKD3D로 잡은것 같습니다만 모르지요. 나중엔 어떻게 될지...

참고로 DXVK는 윈도우환경을 전제로 했기에 DirectX11에서 느린게임(라데온이 보통 그렇습니다)을 Vulkan으로 구동해서 빠르게 구동할 수 있지만 VKD3D는 윈도우에서 구동을 보장하고 있지 않습니다. 이쪽은 애초에 리눅스나 유닉스에서 돌리는것으로 만든 Wine팀 작품이니까요.

,

광고는 짜증나는 존재입니다
하지만 인터넷의 콘텐츠 제공자로서 수익을 얻을 몇 안되는 방법이지요

특히 광고제공계의 거인인 구글은 광고차단을 참 싫어합니다

하지만 웃기게도 구글외의 다른 회사들은 광고차단을 마케팅포인트로 삼고있습니다. 거기에 Adguard라던가 AdBlock plus라던가 ublock origin같은 광고차단플러그인들도 있지요.

최근 유튜브광고차단 플러그인 사용시 영상재생이 느려지는 일이 일어났습니다. 프리미엄 서비스를 쓰지 않으면 느려지게 하겠다는 의미인데 며칠 뒤에 이걸 또 해결해버리더군요.

거기에 유튜브앱을 수정해서 프리미엄기능을 활성화하거나 버전업을 막아서 서비스를 못 하게 막으니 앱버전을 Spoofing해버린다던지 합니다.

이쯤되니 구글vs해커가 되는 기분인데 과연 승자는 누구일까요.

,

Kinnect 요즘은 실패한 발명품 취급 받고 있지요.

그래도 이만한 모션 인식 시스템을 이 가격에 찾기 힘듭니다. 모션 카메라인데 10만원 남짓에 구할 수 있다는게 보통 물건이 아니란 거지요.

 

그리고 재밌게도 초기 물건인 Xbox360용 키넥트는 USB커넥터로 PC에 바로 연결이 가능합니다. 윈도우용 키넥트도 따로 있긴 한데 리눅스에선 이게 더 인식이 잘 됩니다.

 

리눅스에서는 보통 https://github.com/OpenKinect/libfreenect

 

GitHub - OpenKinect/libfreenect: Drivers and libraries for the Xbox Kinect device on Windows, Linux, and OS X

Drivers and libraries for the Xbox Kinect device on Windows, Linux, and OS X - GitHub - OpenKinect/libfreenect: Drivers and libraries for the Xbox Kinect device on Windows, Linux, and OS X

github.com

이 라이브러리를 사용하게 됩니다. 그리고 키넥트 관련 솔루션은 OS문제가 없는 대부분 이걸 사용합니다.

 

그리고 최근 https://github.com/meshonline/kinect-openni-bvh-saver

 

GitHub - meshonline/kinect-openni-bvh-saver: This project is based on OpenNI2, NITE2, and OpenCV2, it will automatically save ma

This project is based on OpenNI2, NITE2, and OpenCV2, it will automatically save many skeleton animation clips to bvh files. - GitHub - meshonline/kinect-openni-bvh-saver: This project is based on ...

github.com

이걸 사용해보려고 했는데 Readme에는 리눅스가 없지만 그냥 OpenNI2폴더와 NiTE2폴더를 만들고 여기에 그냥 빌드된걸 넣으면 되는 거였습니다. OpenNI2와 NiTE2는 https://github.com/suiwenfeng/Ubuntu_x64_Openni2.2_NiTE2.2_FreenectDriver

여기 있었는데 날아가버렸네요. 이건 뭐...어떻게든 되겠죠.

 

그리고 g++ main.cpp -I OpenNI2_Include -I NiTE2_Include -L./ -lOpenNI2 -lNiTE2 `pkg-config opencv4 --cflags --libs` -Wl,-rpath='$ORIGIN'

이렇게 명령 내려서 빌드하면 a.out으로 멀쩡히 나오는군요.

 

딱 하나 문제가 있는데 OpenNI2/Drivers에 libFreenectDriver.so 파일이 시스템 업그레이드 할때마다 세그멘테이션 오류를 일으킨다는 겁니다. 그래서 libfreenect를 일일이 빌드해서 build/lib/OpenNI2-FreenectDriver/에 있는 so 파일을 가져와서 넣어줘야 합니다. 귀찮은데 이대로면 정상적으로 잘 돌아갑니다. libusb나 기타 문제겠제요.

 

libfreenect빌드 명령은 다음과 같습니다.

sudo apt-get install git-core cmake pkg-config build-essential libusb-1.0-0-dev
sudo adduser $USER video

cd libfreenect
mkdir build
cd build
cmake -L .. -DBUILD_PYTHON3=ON -DBUILD_OPENNI2_DRIVER=ON -DBUILD_EXAMPLES=OFF
make

 

그런데 또 문제가 하나 있습니다.

권한 문제로 키넥트 접속 할때마다 root로 해야한다는겁니다. 이건 udev문제인데

 

/etc/udev/rules.d 경로에 다음 파일을 만들어서 넣습니다

# ATTR{product}=="Xbox NUI Motor"
SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02b0", MODE="0666"
# ATTR{product}=="Xbox NUI Audio"
SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02ad", MODE="0666"
# ATTR{product}=="Xbox NUI Camera"
SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02ae", MODE="0666"

# Kinect for Windows
SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02c2", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02be", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02bf", MODE="0666"

 

파일명은 대충 51-kinnect.rules 정도로 하면 되겠죠.

 

그리고 lsusb를 치면 보통 Xbox NUI Motor, Xbox NUI Audio, Xbox NUI Camera 이 세가지가 모두 떠야 하는데 하나만 뜨는 경우가 있습니다. 이경우 원인은 두가지 있습니다.

명령을 내리면 아래같이 뜨는게 정상이지만 하나만 뜨거나 하나도 안 뜨는경우가 있습니다.

lsusb | grep Xbox                                                
Bus 001 Device 021: ID 045e:02ae Microsoft Corp. Xbox NUI Camera
Bus 001 Device 019: ID 045e:02b0 Microsoft Corp. Xbox NUI Motor
Bus 001 Device 020: ID 045e:02ad Microsoft Corp. Xbox NUI Audio

 

1. Autosuspend 문제

전력 문제로 USB장치의 전력을 제한 하는 경우가 있습니다. 보통 노트북이 그렇죠.

간단하게 autosuspend를 끄면 됩니다.

echo -1 | sudo tee -a /sys/module/usbcore/parameters/autosuspend

 

위 명령을 쓰고 키넥트를 다시 연결하면 잘 뜹니다.

 

2. 그냥 어댑터 전력 문제

2023년 현재 키넥트가 나온지 오래된 관계로 어댑터들이 상태가 안 좋습니다. 그래서 전력문제를 호소하는 경우가 있더군요.

간단하게 어댑터를 바꾸거나 선을 잘라서 12V를 직접 넣어주면 됩니다.

 

https://www.reddit.com/r/kinect/comments/g7nlei/tips_for_making_your_own_kinect_360_power_adapter/

 

From the kinect community on Reddit

Explore this post and more from the kinect community

www.reddit.com

레딧을 보면 선 형태가  대충 나오는데 이런식으로 잘라서 가공하면 됩니다. 12V어댑터와 USB2.0케이블이 하나 필요합니다.

일단 이렇게 만들면 거의 문제는 해결 됩니다.

 

키넥트라는게 원래 게임용인걸 다른 용도로 쓰려다 이렇게 된거니 뭐...

 

삽질은 어쩔 수 없겠지요. 

,