벤치리뷰·뉴스·정보/아키텍처·정보분석

[분석정보] GDC 2016 Unreal Engine 4를 통합형 그래픽 기능으로 움직이다

tware 2016. 3. 19. 19:00

 

 

 

Jeff Rous 씨 (Graphics Software Engineer, Intel)

 

 

Intel은 최근 몇 년 Game Developers Conference에서 다수의 세션을 주최하고, 게임 개발자에 Intel CPU를 위한 다양한 최적화 기법을 설명했다. GDC 2016에서도 마찬가지로, 세션이나 이벤트를 통해 정보 제공에 대처하는 상황이다.

 

 본고에서는 그런 Intel 주최 세션에서 " In the Trenches : Optimizing UE4 for Intel "를 꼽고 싶다. "Unreal Engine 4"(언리얼 엔진 4. 이하 UE4)를 Intel CPU의 통합형 그래픽 기능 (이하 통합형 GPU)에 최적화하기 위해 극복해야 할 문제점이나 DirectX 12에 의한 성능 향상을 설명한다 라는 흥미로운 내용 이었기 때문이다.

 

세션을 담당한 것은 Intel에서 그래픽 소프트웨어 엔지니어를 맡고있는 Jeff Rous 씨이다.

 


통합형 GPU가 안고있는 세 가지 약점을 극복하라

 

 UE4라 말하면, 선진적인 그래픽 표현에 대응하는 게임 엔진으로 유명하지만, 그만큼 UE4를  이용하는 게임에서는 고성능 GPU가 필요하다는 인상을 가진 사람도 있을지도 모른다.

 

 그러나 현재는 하이엔드 GPU를 탑재하지 않는 플랫폼에서도 UE4를 사용한 게임이 작동하도록 되어 있다. Intel의 통합형 GPU도 마찬가지로, UE4 릴리스 당초는 대응하지 않았지만, 현재는 통합 GPU용으로 최적화를 입히는 것으로, 게임을 작동시키게 되었다.

 

 Rous 씨에 의하면, UE4가 작동하도록 최적화하는 것에, 통합 GPU에는 몇 가지 약점이 있었다고 한다. 제 1의 문제점이 그래픽 메모리 버스 대역폭이다.

 

 "통합형 GPU는 단독 GPU 처럼 고속 GDDR5 메모리를 사용하는 것은 아닌데다, CPU와 통합 GPU가 같은 메모리를 공유하고 있다"고 Rous는 말했는데, 이 부분은 4Gamer 독자라면 모두 아는 사실일 것이다.

 

 이러한 제약이 있는 것에서 오는, UE4에서 자주 이용되는 "Deferred Rendering "에서 쓰는 지오메트리 버퍼 "GBuffer "가 매우 큰 메모리 대역폭을 필요로 하는 문제가 되었다고 한다.

 

 다행히도, UE4 에서는 GBuffer의 데이터 형식을 변경할 수 있기 때문에 이를 이용하여 메모리 대역폭을 억제하는 것이 가능해 졌다고 한다.

 

 

메모리 대역폭 제한은 통합형 GPU의 약점이다.

UE4에서는 메모리를 대량으로 먹는 GBuffer의 데이터 형식을 변경하는 것으로 대처했다

 

 두 번째 약점은, 방대하며 복잡한 지오메트리를 처리하려 하면, 파이프 라인이 스톨하는 것이다. 구체적으로는, 지오메트리 쉐이더가 복잡한 형상을 처리 할 수 없게되어 스톨해 버리는 한편, 버텍스 쉐이더가 놀아 버리는 상태가 되기에, 렌더링이 조각 보내기가 되어 버리는 것이라고 한다.

 

 이 같은 상황을 만들지 않기 위해서는 "지오메트리를 절감하는 것"이 필요하다고 Rous 씨는 지적한다. 예를 들면, Level of Detail (LoD)을 사용하거나, 시야 외의 3D 오브젝트를 잘라내는 "Occlusion Culling"을 한다던가 라는 대책을 이용할 수 있다고 한다.

 

 

합형 GPU는 방대한 지오메트리를 처리하려고 하면, 파이프 라인이 스톨되어 버릴 수 있다고 한다. LoD나 오쿨루션 컬링의 사용으로 대응할 수 있다는 것

 

 세 번째 약점은 쉐이더의 캐시 경계에 있다. Rous 씨에 따르면 "통합형 GPU의 그래픽 메모리는, CPU의 메인 메모리와 마찬가지로 캐시 경계가 64byte 단위로 되어있다"고 말했다. 메인 메모리와 공유이기 때문에 당연하다고 말하면 당연하지만, 단독 GPU와는 다른 거동을 나타내는 것이다. "특히 작은 루프 내에서 잘게 데이터를 로드하는 것은 캐시 경계 처벌을 받기 쉽다"고 Rous 씨는 지적한다.

 

 따라서 캐시의 64byte 경계를 의식해서 동작하는 쉐이더를 만들면 처리 효율이 올라간다는  것이다.

 

 

래픽 메모리 캐시 경계는 메인 메모리와 같이 64byte. 성능을 올리려면 이 캐시 경계를 걸치지 않도록 쉐이더 코드를 작성할 필요가 있다

 


DirectX 12에서 통합 GPU의 실효 성능은 향상

 

 

UE4 데모로는 초기에 등장한 Elemental의 한 장면


 여러가지 약점을 안고 있는 통합 GPU 이지만, 밝은 화제도 있다. 그것은 DirectX 12의 혜택이 큰 것이라고 Rous 씨는 말한다.

 

 UE4에서 가장 효과를 발휘한 예로서 꼽은 것이, DirectX 12의 "CreateCommittedResource" API를 사용할 때 "D3D12_CLEAR_VALUE"로서 1bit의 색상 값을 선택적으로 전달하는 기술이다. "통합형 GPU는 1bit의 색상 지우기는 극히 고속으로 한다 (Rous 씨) 그래서, 실제로 UE4 데모인 "Elemental "에서는 최대 9%의 고속화가 가능했다고 한다.

 

 

CreateCommittedResource를 사용할 때, D3D12_CLEAR_VALUE로 1bit의 색상 값을 지정하면 극히 효과적 이라고 한다. 또한 슬라이드 중에는 D3D12_CLEAR_COLOR라고 쓰여져 있는데 이곳은 D3D12_CLEAR_VALUE 실수라 생각된다

 

 또 하나, DirectX 12에서 효과적이라고 한 것이 "Root Signature" 이라는 구조다. 이것은 무언가를 쉽게 설명하면 셰이더가 사용하는 상수를 레지스터에 바인딩하는, DirectX 12에서 구현된 기능인데 이를 이용하는 것으로 쉐이더의 최적화가 되도록 한다고 말한다.

 

DirectX11까지는 이러한 섬세한 지정은 할 수 없었다. 정확하게는 DirectX 측이 자동으로 해주고 있었으므로, 응용 프로그램에서 최적화 하는 것이 애초부터 불가능했다는 것이다. 그것이, DirectX 12에서는 지정할 수 있게 되었기 때문에, 쉐이더의 효율을 올릴 수있게 된 셈이다.

 

 

Root Signature에 의해서, DirectX 12에서는 셰이더를 보다 효율적으로 사용할 수 있게 되었다. 이것도 통합형 GPU는 효과적인 것이라고 한다

 

또 UE4의 통합형 GPU로의 최적화에는 Intel이 개발자에게 배포하고 있는 최적화 도구 "Intel Graphics Performance Analyzers"(이하 GPA)와 UE4의 "ProfileGPU"명령, Microsoft에서 제공하는 "Windows Performance Analyzer"등을 활용한 것. 특히 렌더링 파이프 라인의 최적화에는 GPA를 많이 썼다고 Rous 씨는 회고했다.

 

 

EU4의 최적화는 GPA 등의 최적화 도구를 이용

 


ASTC의 장점을 역설하는 Epic Games

 

 

 

Niklas Smedberg 씨 (Senior Developer Relations Engineer, Epic Games). 다른 세션 에 등단했을 때와 어째서 직함이 다르다. 복수의 직함을 가진 사람 같다

 

그런데, 세션 후반에는 UE4의 개발원인 Epic Games에서 수석 엔지니어인 Niklas Smedberg 씨가 게스트로 등단. Intel 제 SoC (System-on-a-Chip) 탑재 Android 태블릿 - 구체적으로는 Acer의 "Predator 8 "과 Lenovo의 "YOGA Tab 3"- 에 UE4를 대응시킨 이야기와 그것에 과련된 작은 이야기를 재료를 소개했다.

 

 Intel제 SoC를 탑재한 Android 장치에서 작동하는 UE4는 OpenGL ES 3.1와 Google의 확장 "Android Extension Pack"을 사용하여 구현되어 있다고 한다. 미래에는 이것을 Vulkan에도 대응시켜 간다고, Smedberg 씨는 설명했다.

 

 

Intel제 SoC를 탑재한 Android 타블렛 용으로 OpenGL ES 3.1와 Android Extension Pack을 사용하여 UE4를 이식

 

 이 Android 버전에서는 텍스처 압축 기술인 "ASTC"(Adaptive Scalable Texture Compression)를 사용하고 있다고 한다. ASTC의 자세한 내용은 2012년 니시카와 젠지 씨의 OpenGL ES 3.0 해설 기사를 참조해 주었으면 하는데, 간단히 말하면 최고품위인 텍스처 압축 기법이다.

 

OpenGL이나 Vulkan에도 채용되고 있어, Android 장치용 SoC의 통합형 GPU의 다수가 지원하는 기능이다.

 

 

UE4는 ASTC를 이용하고 있다

 

 

ASTC의 효과를 나타낸 슬라이드. 사진 왼쪽이 원본 데이터로, 중앙이 기존의 방법 "ETC 1"으로 압축된 텍스처, 우측이 ASTC를 사용한 것이다. ASTC는 분명히 품질이 높고, 게다가 압축율도 높다.

 

Smedberg 씨 왈 "ASTC는 높은 압축률을 실현 가능한 한편, 압축에 터무니 없는 시간이 걸린다는 결점이 있다." 하지만, Intel이 초고속 ASTC 압축 도구를 공개하고 있기에, 그것이 큰 도움이 된다고 한다. "버튼을 누르면 끝나 있다고 말할 정도로 빠르다" 라고 Smedberg 씨가 극찬하는 ASTC 압축 도구는 Intel이 GitHub (관련 링크)에서 공개하고 있다. 흥미있는 개발자는  시험해 보면 좋을 것이다.

 

약간 여담이지만, Smedberg 씨는 "보도 자료에서 읽은 사람이 있을지도 모르지만, Intel은 지금까지 Vulkan 대응 드라이버 소프트는 Linux 용 밖에 발표하지 않았다. 하지만, 어제 (북미 시간 3월 17일), Windows 용 드라이버 소프트웨어를 공개했다"라고 말했다 (관련 링크). 이쪽도 관심이 있는 사람은 시도해 보면 어떨까.

 

 강연 요약 보고서는 이상이다. Rous 씨는 강연의 마지막에 "UE4에 의해서, 단독 GPU를 사용하지 않아도 풍부한 그래픽의 게임을 즐길 수 있게 됐다"고 강조했다. 이것은 개발자뿐만 아니라 게이머들에게도 환영되는 이야기다. 향후 Intel의 노력에도 기대하고 싶다.

 

 

DirectX 12와 Vulkan의 가장 큰 차이는 Directx 12는 윈도 10이상에서 지원,

Vulkan은 다양한 운영체제 지원

 

2016년 3월 19일 기사

 

MS build Directx 12 관련 동영상

 

 

Haswell과 Broadwell, DirectX 12관련의 중요한 차이가 있다

 

 

[분석정보] GDC 2014 미국 MS DirectX 12를 발표

 

 

[분석정보] GPU의 진화에 대응한 Microsoft의 차세대 API DirectX 12의 배경

 

 

Khronos, 신세대 그래픽스 API Vulkan을 정식 발표

 

 

[분석정보] GDC 2014 OpenGL 드라이버 오버헤드는 맨틀과 싸울 수준

 

 

[분석정보] IDF 2013 베이징 Intel 프로세서에서 가능한 것은 Windows 만이 아니다

 

 

[정보분석] GDC 2013 하스웰 탑재 울트라북 지금보다 게임이 잘된다? 인텔 확장 설명

 

 

[분석정보] PC 게임에 힘을 쏟는 인텔