2세대로 진입한 PS4의 SDK

 

PS4의 시스템 소프트웨어는 2.0으로 바뀌며 기능이 대폭 확장되었습니다. 여기에 맞춰 소프트웨어 개발자용 SDK도 2세대로 강화됐습니다. SDK 2.0부터는 시스템 소프트웨어 2.0에서 추가된 새 기능을 쓸 수 있습니다.

 

구체적으로는 네트워크를 통한 협동 플레이를 가능하게 하는 Share Play나, 시스템 소프트웨어의 배경 화면이나 아이콘을 커스터마이즈 할 수 있는 PlayStation 4 테마, 동영상 편집 프로그램인 SHAREfactory, 게임 플레이 동영상을 유튜브에 올릴 수 있는 YouTube Share 등의 기능을 SDK에서도 지원하게 됐습니다.

 

1.jpg

 

2.jpg

 

3.jpg

 

4.jpg

 

5.jpg

 

6.jpg

 

7.jpg

 

SDK 2.0 이후에서 시스템 소프트웨어 2.0의 기능을 지원

 

이러한 버전 2.x 세대의 SDK 기능은 9월에 개최된 게임 개발자 컨퍼런스 CEDEC에서 공개됐는데, 당시엔 PS4 SDK의 다른 흥미로운 라이브러리에 대해서도 설명했습니다. 특히 SCE-소니 컴퓨터 엔터테인먼트-만의 특징이 나오는 분야가 이미지 인식 계열의 라이브러리입니다.

 

 

다양한 이미지 인식 라이브러리를 제공 

 

PS4는 옵션으로 2개의 카메라가 달린 PS4 카메라를 판매합니다. SCE는 이 카메라에 맞춘 이미지 인식 SDK를 제공하고 있습니다. 2개의 카메라에서 피사체의 위치의 심도(Depth)정보를 얻는 libDepth 라이브러리, 이미지를 인식계의 Vision Library 등이 있습니다. 이들 라이브러리에 따라 PS4에서는 카메라를 이용해 다양한 인식 처리를 쉽게 쓸 수 있게 됩니다.

 

libDepth 라이브러리는 PS4의 옵션 카메라를 사용한 위치 정보 생성 라이브러리입니다. 2개의 카메라로 촬영한 영상을 통해 카메라 간의 시차를 얻어 물체까지의 거리를 산출합니다. 거리(=심도/Depth) 데이터 생성은 소프트웨어 처리입니다. Xbox One의 키넥트처럼 하드웨어로 구현한 심도 탐지 장치나 로직 회로는 없기 때문입니다.

 

일반적으로 2개 카메라에서 데이터를 얻어 거리를 측정하는 과정을 CPU의 소프트웨어에서 처리하게 되면 딜레이가 늘어나 실시간 처리가 힘듭니다. 그래서 libDepth에서는 연산 능력이 높은 GPU 코어에 거리 계산을 맞겨 깊이 관련 데이터를 생성하는 지연 시간을 1.5ms에 정도로 억제했습니다. 60fps 화면 표시의 경우 1프레임당 시간은 16.7ms이니 libDepth에 의한 심도 탐지는 1프레임에 걸리는 시간의 약 1/10으로 실행됩니다.

 

8.jpg

 

9.jpg

 

10.jpg

 

지연이 매우 낮은 libDepth의 GPU 처리

 

데모 세션에서는 카메라에서 640×400의 이미지 데이터를 받는 것부터 160×100 해상도의 심도 데이터로 출력하는 데모를 공개해 탐지 시간이 1.5ms까지 줄어들었음을 시연했습니다.

 

PS4 APU를 활용하는 소프트웨어 처리의 장점은 유연하고 확장이 가능하다는 것입니다. 특수한 심도 탐지 하드웨어를 쓰지 않기에 가격도 저렴합니다. 하지만 단점도 있습니다.

 

PS4의 libDepth는 카메라의 이미지를 사용해 심도를 계산하기에 마이크로소프트 키넥트의 심도 측정과는 다르게 카메라 광원에서 따로 탐지를 하진 않습니다. 현재 키넥트는 카메라에서 쬐는 적외선을 반사시켜 심도 측정에 사용하기에 측정하는 장소의 밝기에 영향을 받지 않습니다. 그에 비해 PS4의 libDepth의 처리는 카메라의 이미지 정보만 사용하기에 어두운 곳에서는 심도 측정의 정확도가 떨어진다는 약점이 있습니다.

 

초기의 SDK에선 10lux 정도의 조명 가지고선 실용적인 깊이 데이터를 얻지 못했다고 합니다. 10lux는 매우 어두운 광량이긴 하나 유럽의 거실에선 이 정도 밝기에서 게임 플레이를 하는 경우도 많으니 문제가 됩니다. 그러나 현재의 SDK에선 알고리즘이 개선돼 충분한 심도를 계산할 수 있다네요.

 

11.jpg

 

12.jpg

 

알고리즘의 개선으로 어두운 곳에서도 성능이 대폭 업그레이드

 

 

UI에 사용하기 쉬운 피크 트래커

 

libDepth는 카메라 기반의 사용자 인터페이스에 응용이 가능합니다. 하나는 손을 검출하고 추적하는 것. 사용자가 내민 손의 심도 정보가 가장 절정에 달하는 순간이 언제인지를 추적해 탐지합니다. 즉 심도 데이터에서 가장 두드러지는 부분을 탐지해 추적합니다. 이 경우에는 최대 값만 찾아내면 되니까 탐지가 매우 쉽다는 장점이 있습니다.

 

최대 값을 탐지하는 건 단순하기에 어두워도 탐지가 가능합니다. CEDEC에서 강연한 토요 테이지(주식회사 소니 컴퓨터 엔터테인먼트)는 "최대 값만 추적한다면 방의 조명을 다 끄고 TV에서 나오는 조명만으로도 알아낼 수 있습니다. 높은 프레임 레이트로 안정적인 값을 낼 수 있으며 매우 부드러운 사용자 인터페이스가 될 것"이라고 설명했습니다. 손을 포인터로 사용해 제스처를 취하면 매우 쉽게 유저 인터페이스로 쓸 수 있습니다.

 

13.jpg

 

14.jpg

 

15.jpg

 

16.jpg

 

심도가 최대 값을 낼 때를 탐지해 추적

 

UI로 쓸 수 있는 또 다른 라이브러리 기능은 헤드 트래커입니다. 깊이 정보를 이용해 머리의 크기와 형태를 감지해 추적합니다. 얼굴을 인식하는 수준이 아니라 단순히 머리의 형태와 크기를 판단하는 것으로, 상당히 과격하게 머리를 움직여도 확실하게 추적 가능했다네요.

 

17.jpg

 

18.jpg

 

머리의 형태를 추적해 추적 성능이 높은 처리를 실현

 

 

AR에서도 응용할 수 있는 화상 인식 라이브러리

 

SCE이 제공하는 카메라 계열의 라이브러리에는 심도를 탐지하는 libDepth 만 있는 게 아닙니다. 이미지를 인식하는 Vision Library에 다양한 라이브러리가 제공됩니다.

 

얼굴을 인식하는 libFace는 사람의 얼굴 부분을 인식합니다. libDepth의 머리를 추적하는 라이브러리가 심도 데이터로 머리의 형태를 인식하는 데 비해 libFace는 머리의 각 요소를 이미지에서 인식합니다. 사용자 얼굴의 위치나 방향, 그리고 눈, 코, 입 등의 각 부분, 미소 같은 표정이나 연령, 성별 등의 속성도 인식합니다. SCE는 PS3 시절부터 꾸준히 얼굴을 인식하는 시연을 했지만 PS4의 비전 라이브러리에서 그 결신을 맺었습니다. 사용자 얼굴의 특징을 추출해 개인을 특정할 뿐 아니라, 인식한 데이터를 사용해서 사용자와 얼굴이 비슷한 게임 캐릭터를 자동 생성하는 등 게임에서 사용하는 것도 가능하고, 표정을 통해 사용자의 상태를 탐지하고 게임에 반영하는 걸 염두에 두고 있다네요.

 

libDepth의 추적 장치는 심도 데이터를 받아 손 끝을 탐지하지만 이미지를 받아 손의 형태를 인식하는 라이브러리도 libHand란 이름으로 제공됩니다. 주먹이나 손바닥 등의 형태까지 인식할 수 있다네요. 이로서 보다 정확하게 손을 인식할 수 있습니다.

 

19.jpg

 

재미있는 라이브러리로는 평면의 형태를 검지하는 libSmart가 있습니다. 카메라 영상에서 평면 물체를 인식하고 그 위치와 기울기 등의 자세의 데이터를 산출합니다. libSmart는 실제로 AR(증강 현실)계열의 라이브러리입니다. 예를 들면 실제 세계의 평면 바닥 위치를 탐지해 바닥 위에서 움직이는 가상 AR 캐릭터의 정확한 동작을 생성하고 카메라 영상에 표시할 수 있습니다.

 

이 라이브러리의 응용 분야로 소개한 건 AR 다이나믹 라이팅이라 불리는 기술입니다. 카메라에서 스캔한 실제 이미지에 AR의 CG를 겹쳐 리얼한 이미지를 만들어 내는 방법입니다. AR에 표시되는 오브젝트의 그림자가 실제 세계의 빛과 다르다면 AR 화면에 위화감이 생깁니다. CG가 붕 떠있는 것처럼 보이는 부자연스러운 영상입니다.

 

20.jpg

 

그래서 실제 세계의 이미지에서 실존하는 광원의 위치나 강도, 색깔 등을 추정해서 그것을 실제 세계의 이미지에 겹치는 AR의 CG에 반영합니다. 실제 세계에 맞춴 광원으로 쉐이딩해 실제 이미지와 위화감 없이 융화되는 AR이 가능합니다. 다만 이것도 처리가 무거우면 사용하기 어렵습니다. 그래서 매우 간단하고 효율적인 알고리즘을 고안했다고 합니다.


구체적으로는 현실 세계의 바닥을 기울기까지 포함해 탐지한 후, 바닥을 3x3으로 분할해 평균을 잡아 밝기가 높은 쪽에 광원이 있다고 판단합니다. 또 색상의 평균을 내서 광원의 색으로 간주합니다. 실제 환경에서는 조명을 쉽게 탐지하기 위해 손전등으로 바닥을 비추도록 사용자에게 요청하게 됩니다.

 

21.jpg

 

22.jpg

 

23.jpg

 

24.jpg

 

25.jpg

 

26.jpg

 

현실에서 바닥을 비추는 광원을 가지고 가상의 광원을 생성

 

 

2개의 카메라를 결합한 이종 듀얼 카메라

 

PS4의 카메라엔 이런 풍부한 라이브러리가 제공됩니다. 또 2개의 카메라는 시차에 따른 심도 정보를 얻을 뿐만 아니라 다른 사용법이 있습니다. 그 중 하나가 이종 듀얼 카메라로 좌우의 카메라 설정을 바꿔 특수 촬영을 가능하게 하는 것입니다.


구체적으로는 좌우 카메라의 노출을 다르게 찍는 것이 있습니다. 예를 들면 움직임이 빠른 물체를 촬영할 경우 한쪽 카메라 셔터 속도를 빠르게 해서 빠른 움직임을 포착하고 다른 카메라는 일반적인 촬영을 해서 합치는 것입니다. 빠른 움직임을 포착하기 위해 셔터 속도를 빠르게 하면 이미지가 어두워지지만 일반적인 사진도 같이 찍으니 움직임과 이미지 모두 포착할 수 있습니다.


또 두 카메라의 설정을 바꾸면 사용자의 인식도 보다 쉬워집니다. 한개의 카메라는 일반적인 설정으로 해서 PS4 컨트롤러를 가진 플레이어의 얼굴을 인식해 누구인지를 파악하고, 다른 카메라로 라이트 블러를 검출해 컨트롤러의 위치를 정확하게 잡아냅니다.


참고로 PS4의 카메라는 이러한 인식 처리를 쉽게 하기 위해 하드웨어적인 추가가 있었습니다. 피라미드 스케일러를 하드웨어로 구현해 여러 해상도의 영상을 낮은 딜레이로 가져옵니다. 구체적으로는 카메라의 최고 해상도 1280×800에서 절반인 640×400 해상도, 거기에서 한번 더 화소 수를 단계적으로 스케일 다운할 수 있습니다. 그래서 인식 처리처럼 모든 픽셀을 대상으로 연산하면 부하가 높은 경우에, 별다른 리소스를 소모하지 않고 저해상도 영상을 사용할 수 있습니다. 최적의 픽셀 수로 줄여 효율적으로 소프트웨어 처리가 가능한 것입니다.

 

 

PS4를 위한 물리 시뮬레이션 라이브러리

 

PS SDK는 PS4 아키텍처에 최적화된 물리 시뮬레이션 라이브러리도 제공합니다. 메모리에 압박을 주지 않도록 게임 개발에선 매우 작은 규모의 로우레벨 API를 쓰는 게 특징입니다. 외부에서 도입한 것이 아니라 소니 내부에서 전부 개발해서 PS4에 딱 맞게 최적화했습니다. 또 라이브러리의 알고리즘도 매우 특수한 것이라네요.


SDK는 GPU 기반의 물리 시뮬레이션과 CPU 기반의 물리 시뮬레이션을 조합해 제공합니다. 게임 로직에 관한 세밀한 제어가 필요한 물리 시뮬레이션을 하는 경우는 CPU, 특수 효과처럼게임 로직과 직접 관련되지 않으며 방대한 물체의 시뮬레이션이 필요한 부분에 GPU를 사용합니다. 두 물리 시뮬레이션을 연계시켜 쓸 수도 있습니다.

 

27.jpg

 

GPU 물리 시뮬레이션인 GPU Physics는 솔리드 시뮬레이션의 모든 파이프 라인을 GPU에 탑재하고 있습니다. 보통은 GPU를 비롯해서 병렬 프로세서에서 효율적으로 도입하기 어려운 부분까지도 GPU에서 처리합니다. 폭발과 붕괴 같은 효과에 사용하며 방대한 연산이 필요한 대규모 시뮬레이션을 위한 솔루션입니다. GPU의 쉐이더 프로세서를 사용한 것을 CPU와 비교하면 10배 이상 빨라집니다.

 

28.jpg

 

CEDEC의 세션에서 공개한 데모는 단순한 박스 형태의 솔리드 콜리젼 시뮬레이션이었습니다. CPU는 천개의 오브젝트를 30fps로 연산했습니다. 반면 GPU는 그 10배인 만개를 1/3의 시간인 10ms로 연산해 60fps를 간단하게 유지했습니다. 물론 파티클 컴플렉스로 복잡한 형태의 물리 시뮬레이션도 가능합니다. PS의 데모에서 자주 등장하는 러버 덕은 4천 마리를 시뮬레이트할 수 있다고 합니다.

 

29.jpg

 

30.jpg

 

31.jpg

 

32.jpg

 

이 밖에도 지형 같은 복잡한 형상에 적용하기 쉬운 Signed Distance Field도 라이브러리에서 제공합니다. 이들 시뮬레이션은 SDK의 샘플로 소스 코드가 개발자에게 제공됩니다.

 

 

PS4 아키텍처와 물리 시뮬레이션 엔진

 

CPU 물리 시뮬레이션 Physics Effects는 게임 로직, 즉 게임에 직접 관여한는 물리 시뮬레이션에 사용합니다. 현재 게임에서 오픈 월드, 즉 광대한 게임 공간에서 유저가 자유롭게 플레이할 수 있는 타입의 게임에 대응하기 위해 넓은 공간에서도 연산 정밀도를 유지할 수 있도록 했다고 합니다. 또 물리적으로 상호 작용하는 게임 내 오브젝트가 서로 충돌할 때 그 충돌 판정이 발생하지 않는 일을 막기 위해 컨티뉴어스 콜리전 디텍션을 구현했습니다.

 

33.jpg

 

PS4의 GPU 물리 시뮬레이션은 PS4가 APU(Accelerated Processing Unit) 아키텍처를 채용하면서 쓰기 쉬워졌습니다. 말하자면 PS4 아키텍처의 구체적인 성과입니다. PS3에선 GPU를 범용 컴퓨팅에 사용할 수 없었기에 CPU인 Cell Broadband Engine(Cell BE)의 연산 프로세서 SPU(Synergistic Processor Unit)를 물리 시뮬레이션에 사용했었습니다. 그에비해 PS4에서는 AMD가 개발한 GCN(Graphics Core Next) GPU 코어를 범용 컴퓨팅에 쓸 수 있습니다.

 

34.jpg

 

35.jpg

 

PS4의 GPU

 

AMD GPU 아키텍처에서 GPU 코어는 CU(Compute Unit)로 구성됩니다. 소니는 "PS3의 SPU에 해당하는 것이 GPU의 CU이며, 그래픽 뿐만 아니라 물리 연산에 사용할 수 있습니다"라고 설명했습니다. PS3보다 프로그래밍을 쉽게 하는 데 신경을 썼다고 합니다.


SCE는 PS4 전용으로 GPU 코어를 커스터마이즈하고 더욱 범용으로 쓰도록 범용 작업 페치&관리 유닛인 ACE(Asynchronous Compute Engine)을 확장하고 있습니다. PS4의 GPU 코어는 1.8TFLOPS의 단정밀도 부동 소수점 연산 성능을 지녔으며 그걸 세밀한 물리 시뮬레이션에 쓸 수 있습니다. PS3 시절에 비해 훨씬 강력한 연산 능력을 범용으로 쓸 수 있게 됐습니다.

 

36.jpg

 

PS4의 APU

 

또 PS3에서는 CPU와 GPU의 메모리가 물리적으로 분리됐으나 PS4에선 통합 메모리를 사용하면서 CPU와 GPU가 자유롭게 메모리를 사용할 수 있음을 강조했습니다. "PS4에서는 메모리의 어떤 부분이건 모두 빠르게 쓸 수 있습니다. 이를 위해 비싸지만 GDDR5를 썼습니다. 이것이 PS4의 장점입니다"라고도 말했습니다.


그리고 APU 기반 아키텍처의 PS4는 CPU와 GPU가 가상 메모리 공간을 공유하고 있으며 CPU와 GPU사이의 데이터의 교환이 포인터에서 가능합니다. 그래서 CPU와 GPU의 두 물리 시뮬레이션을 연계시키기가 쉬워집니다. 또 AMD GPU 아키텍처에서는 물리 콤퓨트와 그래픽 렌더링의 혼합 실행이 가능하고 게임에서 쓰기 쉽다는 장점이 있습니다.

 

 

음성 인식 라이브러리도 제공

 

이 밖에 PS4는 음성 인식 라이브러리인 PSVR도 SDK로 제공합니다. 이것은 카메라를 지향성을 갖춘 마이크에 대응시키는 라이브러리입니다. 이것도 물리 시뮬레이션 엔진처럼 자체 개발한 라이브러리입니다.


음성 명령에 최적화되어 있으며 개발자는 인식시키고 싶은 단어를 미리 정의하게 됩니다. 즉 특정 음성을 무슨 단어로 인식해야 할지를 정의합니다. 마이크에서 입력된 음성 데이터를 받아 인식된 단어를 들려주는 구조입니다. 이를 위한 툴도 SDK로 제공합니다.


여기에 대응하는 언어는 일본어, 미국 영어, 영국 영어, 프랑스어, 이태리어, 독일어 스페인어가 있습니다. 서버에서 인식하는 게 아니라 로컬에서 100% 동작합니다. PS4 시스템 소프트웨어 자체의 음성 명령 인식에 사용되는 것이 이 라이브러리입니다.

 

37.jpg

 

PS의 발전사는 라이브러리 축적의 역사이기도 합니다. PS가 출범했던 당시에 소니는 라이브러리를 비롯한 소프트웨어 개발력이 매우 약했습니다. PS2에서도 라이브러리는 엉망이었습니다. PS3돠 Xbox 360에 비해 라이브러리가 부족하다는 지적이 많았습니다. 그러나 PS4가 되면서 라이브러리를 우선 개발할 수 있게 됐습니다. 

기글하드웨어(http://gigglehd.com/zbxe)에 올라온 모든 뉴스와 정보 글은 다른 곳으로 퍼가실 때 작성자의 허락을 받아야 합니다. 번역한 뉴스와 정보 글을 작성자 동의 없이 무단 전재와 무단 수정하는 행위를 금지합니다.