SlideShare a Scribd company logo
1 of 56
Download to read offline
IGC(INVEN GAME CONFERENCE) 2018
포트나이트 배틀로얄
멀티플랫폼 지원
신광섭
디벨로퍼 릴레이션스 리드
에픽게임즈 코리아
IGC(INVEN GAME CONFERENCE) 2018
INTRODUCTION
IGC(INVEN GAME CONFERENCE) 2018
소개
PC, Mac, PS4, Xbox One, iOS, 안드로이드, 닌텐도 스위치
모든 유저들이 같이 크로스 플레이 가능!
● 같은 콘텐츠 – 콘솔/PC 부터 모바일까지 아주 넓은 영역의 하드웨어 지원
● 게임 콘텐츠도 같이 계속 업데이트
○ 새로운 기능들 (자동차, 코스튬, 새로운 게임 모드)
도전 과제들 - 멀티플랫폼 지원
IGC(INVEN GAME CONFERENCE) 2018
소개
● 포트나이트 배틀로얄 멀티플랫폼 지원의 Key point
PC/콘솔 <-> 모바일(iOS, Android)을 넘나드는
최적화, 최적화, 최적화
IGC(INVEN GAME CONFERENCE) 2018
소개
● Significance manager
● Ticking & 블루프린트
● 스트리밍
● 서버 퍼포먼스
● 프로파일링
● HLOD
● 콘솔 @ 60Hz
● CPU
● GPU
● 모바일 – IOS/Android
언리얼 엔진 4의 포트나이트 배틀로얄 최적화 중요 영역들
IGC(INVEN GAME CONFERENCE) 2018
SIGNIFICANCE
IGC(INVEN GAME CONFERENCE) 2018
● 게임 플레이어들을 아래에 기초해 Significance Bucket 에 할당:
○ 거리
○ 화면에서의 크기
○ 보이는지 여부
● 많은 스케일러빌티티(scalability) 시스템을 컨트롤
● 엔진 기능!
○ 하지만 게임에 의존적
SIGNIFICANCE MANAGER
플레이어
중요도 높음
중요도 낮음
다른 플레이어
IGC(INVEN GAME CONFERENCE) 2018
애니메이션 - UPDATE RATE OPTIMIZATION
● 애니메이션 계산을 줄이는 엔진 기능
● Significance 에 의해서 컨트롤됨
URO 없음 URO 4 URO 10 URO 4 – 보간 없음
IGC(INVEN GAME CONFERENCE) 2018
TICKING
IGC(INVEN GAME CONFERENCE) 2018
애니메이션 – 모듈형 캐릭터
● 5개의 메쉬로 이루어진 모듈형 캐릭터
● 각 파츠가 애님 블루프린트를 따로 가지고 있음!
1 – 기본 스켈레톤
2 - 머리
3 - 몸
4 - 가방
5 - 무기
IGC(INVEN GAME CONFERENCE) 2018
애니메이션 – 네이티브 코드화 작업
● 매 Tick 마다 일어나는 이벤트 그래프의 블루프린트를 C++로 변경
최적화 전
0.93 ms
최적화 후
0.19 ms
IGC(INVEN GAME CONFERENCE) 2018
TICKING - 액터
● ‘Dumpticks’ 콘솔 명령어로 사용 분석
● Tick 이벤트를 사용하는 블루프린트들
● Overlaps은 느린 것 중에 하나
○ 문열기
○ 회전하는 토마토 머리
IGC(INVEN GAME CONFERENCE) 2018
SPAWNING
● 많은 액터들이 생성됨(Spawning)
○ 벽 건설
○ 보물상자 열기
○ 플레이어 제거
○ 네트워크 관련성(Network relevancy)
○ 발사되는 총알들
● 파티클 풀링(Pooling) 시스템 추가!
○ 이펙트를 생성하는 비용 절감
■ ParticleSystemComponent 생성
■ ParticleSystem 설정
○ Spawn Emitter 함수에 Pooling Method 옵션
IGC(INVEN GAME CONFERENCE) 2018
TICKING - HUD
● Slate HUD가 ~2.6ms 비용 소요
● ~1ms 정도로 최적화
○ 느린 블루프린트 제거
○ 위젯들을 캐쉬하기 위해서 invalidation panels 사용
○ 느린 위젯들 최적화
● 추가적인 Slate 최적화 계획 중
IGC(INVEN GAME CONFERENCE) 2018
TICKING – 하루의 변화 시스템
● MaterialParameterCollection에서 많은 라이팅 관련 변수들 변경
● 프레임당 하나의 변경만 업데이트 하도록 시스템 최적화
IGC(INVEN GAME CONFERENCE) 2018
레벨 스트리밍
IGC(INVEN GAME CONFERENCE) 2018
레벨 스트리밍
● 포트나이트 2.2.0 버전부터 사용 (2018 1월쯤)
● 왜?
○ 메모리 사용량 줄이기
○ 맵의 퀄리티 높이기
○ 코스튬등의 다양성 늘리기 (스킨, 가방, 무기등등)
○ 렌더링 최적화
○ 게임플레이 최적화
● 관련한 기술적 부분들
○ IO 스레드
○ Asynchronous deserialize
○ 메인 스레드에서 여러 프레임으로 나누어 로딩
○ Texturestreaming 참여도 조절하기
IGC(INVEN GAME CONFERENCE) 2018
레벨 스트리밍 – 컴포넌트 등록
● Adaptive Time Slicing 사용
○ 스카이 다이빙: 5ms
○ 지면: 1ms
● 남는 GT 시간을 로딩에 사용
IGC(INVEN GAME CONFERENCE) 2018
서버 퍼포먼스
IGC(INVEN GAME CONFERENCE) 2018
서버 퍼포먼스 - 리플리케이션
- ~50,000 리플레케이트되는 액터들
- 100 개의 연결
- 400+ 스트리밍 레벨들
- 20 Hz tick 속도
- 최대한 낮은 빈도의 net 업데이트/ForceNetUpdate()
- 관련성(relevancy) 거리를 최대한 줄이기
- 관련 없는 상태를 최대한 정확히 걸러내기
IGC(INVEN GAME CONFERENCE) 2018
● 네트워크 관련성(network relevancy)을 다시 정의
○ IsNetRelevantFor과 GetNetPriority가 사용되지 않음
● 그래프로 관련이 있는 액터들만 필터링
○ 공간 그리드(Spatial grid)
○ 스트리밍
○ 항상 관련있음(Always Relevant)
(팀/연결된 것들/모두)
서버 퍼포먼스 - 리플리케이션 그래프(REPLICATION GRAPH)
IGC(INVEN GAME CONFERENCE) 2018
데디케이티드 서버 - REPLICATED STATE 공유
- 자주 같은 state가 많은 클라이언트에 보내짐
- State를 따로 만들지 않고, 최대한 캐쉬/재사용하는 기능 추가
Actor
Actor
State
Client
Actor
State
Client
Actor
State
Client
Actor
Client
Actor
State
Client Client
IGC(INVEN GAME CONFERENCE) 2018
서버 퍼포먼스 - 게임플레이
● 클라이언트 최적화가 많은 도움이 됨
● 클라이언트 캐릭터 이동을 합쳐 처리하도록 노력
○ 높은 FPS에서 너무 많은 RPC 호출 피하기
○ 공격적으로 최소 프레임으로 처리 (약 20 Hz)
○ 레이턴시(latency)를 줄이기 위해 중요 이동의 경우 바로 보냄
● 애니메이션
○ 서버에서는 애니메이션 처리하지 않음
○ 플레이어 컬리젼 비활성화
○ 모든 불필요한 보여주기를 위한 컴포넌트들 제거
IGC(INVEN GAME CONFERENCE) 2018
프로파일링
IGC(INVEN GAME CONFERENCE) 2018
프로파일링
● QA 팀은 데일리 100인 플레이 테스트에서 프로파일 데이터를 수집
● 하나의 완벽한 게임 플레이에서 얻어진 프로파일 데이터로 게임에서
발생한 각각의 히치/느려지는 구간 분석 가능
○ 히치가 60ms 이상으로 걸리는 경우 버그로 등록
○ 성능 관련 버거는 크래쉬 다음으로 중요도가 높은 버그로 대응
● 게임을 Reply 시스템으로 레코딩해서 확인 및 다른 플랫폼에서 테스트 가능
IGC(INVEN GAME CONFERENCE) 2018
리플레이 시스템을 사용한 A/B 테스트
IGC(INVEN GAME CONFERENCE) 2018IGC(INVEN GAME CONFERENCE) 2018
콘솔에서 60 FPS
스위치에서 30 FPS
IGC(INVEN GAME CONFERENCE) 2018
이슈
30fps 게임을 60fps 으로 만드는 것은 여러 도전 이슈들이 생김
핵심 솔루션들:
● GPU Dynamic Resolution & Temporal AA
● GPU 디바이스 프로파일을 통한 스케일링
○ 그려지는 거리, 그림자 퀄리티, AO, 폴리지 밀도, 최소/최대 dynamic resolution
● CPU 스케일링
○ 모바일 CPU 개선을 사용 (Ticking, LOD, 드로콜)
IGC(INVEN GAME CONFERENCE) 2018
Spatial Upscale
Spatial Upscale
● UI 전에 업스케일링
● r.screenpercentage 으로 해상도 변경시
IGC(INVEN GAME CONFERENCE) 2018
Temporal Upsampling & Dynamic Resolution
● 해상도를 조절하는 옵션으로 UE4.19 추가됨
● Temporal Upsampling
○ Temporal upsampling은 높은 퀄리티의 업샘플링 가능
○ TemporalAA 패스에서 업샘플링
● Dynamic Resolution
○ GPU 부하에 따라서 자동으로 해상도가 변경되고, Temporal Upsampling을 통해 그 변화가
거의 느껴지지 않음
IGC(INVEN GAME CONFERENCE) 2018
Temporal Anti-Aliasing Upsample
Temporal Upsample (TAAU)
• TemporalAA에서 업샘플링
• 모션블러 블룸이 고해상도에서 처리되어서 Spatial Upscale에서
부하가 더 있음
• Dynamic Resolution 해상도가 여기서 변경됨
IGC(INVEN GAME CONFERENCE) 2018
Temporal AA Upscale Settings
● Temporal upsample로 해상도 변경
○ 차이가 거의 느껴지지 않음
○ 매 8 프레임마다 정한 GPU 허용량에 맞도록 동작
Xbox One X 예제 @ 65% 화면 비율
1: 렌더링 해상도 = 2080x1170
2: 버퍼 해상도 = 3200x1800
IGC(INVEN GAME CONFERENCE) 2018
GPU: 23.5ms
Dynamic Res: 100%
30 FPS
IGC(INVEN GAME CONFERENCE) 2018
GPU: 15.9ms
Dynamic Res: 83.4%
60 FPS
IGC(INVEN GAME CONFERENCE) 2018
IGC(INVEN GAME CONFERENCE) 2018
닌텐도 스위치
도킹 및 휴대용 모든 모드에서 GPU 사용을 최대화 하기 위해서
Dynamic resolution과 TAAU + 디퍼드 렌더러 사용. 그래도 30Hz 고정
최근에 Clustered Forward Renderer로 변경을 통해 10% 더 빠른 퍼포먼스
핸드헬드 모드에서는 배터리 사용량을
위해서 100% 퍼포먼스를 사용하지 않음
IGC(INVEN GAME CONFERENCE) 2018
캐릭터 최적화
● 캐릭터 4 LOD, 무기 3 LOD
● LOD에서는 얼굴본 제거
● 모바일에서는 LOD 1 최소 LOD
● 캐릭터 LODs
○ LOD0 30,000 tris
○ LOD1 15,000 tris
○ LOD2 3,000 tris
○ LOD3 300 tris
IGC(INVEN GAME CONFERENCE) 2018
풀(GRASS) 최적화
● 풀(Grass) 최적화는 중요 요소 중에 하나
○ LOD 추가
○ 회전 제거등으로 버텍스 셰이더 최적화
○ 모바일에서는 버텍스 셰이더 제거
○ 게임에 영향을 주지 않는 풀의
Density scale 조정
IGC(INVEN GAME CONFERENCE) 2018
Hierarchical LOD – 엄청난 기능, But 캐릭터에 가까이 있는 것에는 적용 불가능
IGC(INVEN GAME CONFERENCE) 2018
다이나믹 HLOD를 통한 부서지는 건물
● 틸티드 타워 지역은 15개의 빌딩과
오브젝트들로 약 2000개의 드로콜이였음
● 새로운 다이나믹 HLOD로 하나의 전체
빌딩을 1개의 드로콜로 줄임
● 렌더타켓 이용
● 각 벽들의 부서진 여부를 처리하기 위해서
부서진 벽에 대한 인덱스를 렌더타켓에
검은 텍셀로 표시
● UV와 버텍스컬러를 이용해서 RT를 읽어서
버텍스 셰이더에서 처리
IGC(INVEN GAME CONFERENCE) 2018
DHLOD 비교
원본 메시 HLOD level 0 (다이나믹 HLOD) HLOD level 1 (프록시 HLOD)
~70,000 tris, 100s drawcall 5,462 tris, 1 drawcall 1,150 tris, 1 drawcall
항상 로드됨스트리밍된
부서지는 요소들
스트리밍됨
IGC(INVEN GAME CONFERENCE) 2018
다아나믹 HLOD 적용 전
~1800 draw calls, 484k tris (w/o shadows)
IGC(INVEN GAME CONFERENCE) 2018
다이나믹 HLOD 적용 후
~800 draw calls, 375k tris (w/o shadows)
IGC(INVEN GAME CONFERENCE) 2018
나무 임포스터
● Hemi-octahedral 캡쳐 레이아웃
● 각 프레임을 2D texture atlas로 만듬
● Vector->Octahedron 변환을 사용해서
프레임 인덱싱
● UV 공간에서 +X, +Y, +XY 주변 좌표를 통한
간단한 주변 프레임 접근
● 추가적인 정보:
https://shaderbits.com/blog/octahedra
l-impostors
IGC(INVEN GAME CONFERENCE) 2018
HLOD + 나무 임포스터
IGC(INVEN GAME CONFERENCE) 2018IGC(INVEN GAME CONFERENCE) 2018
모바일
하나의 게임 – 모든 플랫폼
IGC(INVEN GAME CONFERENCE) 2018
하나의 게임, 모든 플랫폼
크로스 플레이 지원을 위한 필수 조건들:
● 하나의 같은 맵으로 모든 플랫폼 지원
● 게임플레이에 영향을 주는 모든 요소들이 똑같이 지원되어야 함
● 전투가 가능한 거리가 모든 플랫폼에서 같아야 함
모바일 포팅이나 새로운 맵 추가가 아닌
하나의 같은 맵!
IGC(INVEN GAME CONFERENCE) 2018
하나의 게임, 모든 플랫폼
PC (최대 퀄리티)
IGC(INVEN GAME CONFERENCE) 2018
하나의 게임, 모든 플랫폼
PC (중간 퀄리티)
IGC(INVEN GAME CONFERENCE) 2018
하나의 게임, 모든 플랫폼
iPhone 8+ iOS (최대 퀄리티)
IGC(INVEN GAME CONFERENCE) 2018
하나의 게임, 모든 플랫폼
모바일 지원 중요 이슈들
● CPU - Thermal throttling
● 메모리
● 드로콜 줄이기 - HLOD
● GPU 속도 및 GPU 드라이버 – 해상도 줄이고 업스케일링
IGC(INVEN GAME CONFERENCE) 2018
THERMAL THROTTLING
가장 높은 수준의 퀄리티로 30fps 을 원했음. 하지만..
CPU와 GPU를 최대치로 사용하는 것은 열을 발생했고, 결국 디바이스
다운클럭(downclock) 발생
해결을 위한 키 포인트:
CPU 코어들이 시간의 약 50%는 idle 상태로
있도록 했음. 그래서 60fps 타켓으로 최적화
하고, 30fps에 vsync 했음
IGC(INVEN GAME CONFERENCE) 2018
메모리: 타켓
iOS에서 피지컬 메모리 GB당 700MB을 허용 버짓으로 잡음
● 2GB 디바이스에서 <1.4 GB (대부분의 폰들)
● 3GB 디바이스에서 <2.1 GB (“+” 폰들)
● 4GB 디바이스에서 <2.8 GB (큰 iPadPro)
안드로이드에서 메모리 상황은 디바이스마다 더 복잡함
● 2GB 디바이스에서 <500 MB (아직 작업중)
● 3GB 디바이스에서 <1.4 GB (대부분의 경우 괜찮음)
● 4GB 디바이스 중에 특정 디바이스들 <1.4 GB (구글 픽셀폰!!!!)
안드로이드에서는 정확한 메모리 정보를 얻어오기 힘듬...
IGC(INVEN GAME CONFERENCE) 2018
디바이스별 튜닝 – 스케일러빌리티(SCALABILITY)
애플/iOS
● 알고 있는 제한된 디바이스 종류만 존재, 디바이스별로 값들 세팅
● 메모리 허용량 – 폴리지 사용여부 (3GB 이상의 디바이스에서만)
● 디바이스별 설정 – 스케일러빌리티 세팅(해상도, 그림자 on/off, LOD 거리 등등)
안드로이드
● 엄청나게 많은 종류의 디바이스들 (10,000+). 일반적으로 그래픽 API가 iOS만큼 빠르지 않음.
● 알려진 특정 디바이스나 테스트한 디바이스들은 각각에 맞는 튜닝
● GPU 타입(Adreno 6xx 또는 Mali G7x등등)에 따른 세팅(Lowest, Low, Med, High 등등)
● 낮은 사양의 안드로이드 폰에는 특별히 낮은 FPS(20Hz) 사용
● Vulkan은 현재 가장 높은 스펙의 삼성 디바이스에서만 더 빠름 (Adreno 630)
안드로이드 지원을 위해서 3월부터 8월초까지 최적화 및 안정화 작업이 필요했음!
IGC(INVEN GAME CONFERENCE) 2018
모바일 개선 사항들
안드로이드
Program Binary Cache와 shader precompilation을
통한 시작 시간 계산
Shader LRU Cache 를 통한 엄청난 메모리 절약
셰이더 사이즈 줄이기 위한 Emulated Uniform
Buffers 개선
Vulkan 호환성 개선 및 최적화
CPU core thread affinity 조정
디바이스별 Mobile PIE 개선
안드로이드 Occlusion Query 개선
디바이스 프로파일 개선
Virtual Keyboard 수정
많은 버그들 수정
IOS
Web Browser Widget UObject 바인딩 지원
iPhone XS/XSMax/XR 지원
버그들 수정
모바일
GPU particle 시뮬레이션 성능 개선
dithered LOD transitions 수정
Sky cubemap 반사 수정
터레인 웨이트맵 텍스처 압축
IGC(INVEN GAME CONFERENCE) 2018IGC(INVEN GAME CONFERENCE) 2018
감사합니다!
UNREALENGINE.COM

More Related Content

What's hot

전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
devCAT Studio, NEXON
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
devCAT Studio, NEXON
 
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
Jubok Kim
 
Unity3D로 풀3D web mmorpg 만들기
Unity3D로 풀3D web mmorpg 만들기Unity3D로 풀3D web mmorpg 만들기
Unity3D로 풀3D web mmorpg 만들기
JP Jung
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
devCAT Studio, NEXON
 

What's hot (20)

[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
 
AAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxAAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptx
 
[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능
 
NDC 2011 영웅전 런칭팀 박영준
NDC 2011 영웅전 런칭팀 박영준NDC 2011 영웅전 런칭팀 박영준
NDC 2011 영웅전 런칭팀 박영준
 
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
 
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
 
어서와 게임기획은 처음이지?
어서와 게임기획은 처음이지?어서와 게임기획은 처음이지?
어서와 게임기획은 처음이지?
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1
 
[IGC 2016] 이경혁 - 대중매체로서의 게임: 세상과의 상호작용
[IGC 2016] 이경혁 - 대중매체로서의 게임: 세상과의 상호작용[IGC 2016] 이경혁 - 대중매체로서의 게임: 세상과의 상호작용
[IGC 2016] 이경혁 - 대중매체로서의 게임: 세상과의 상호작용
 
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
 
Unity3D로 풀3D web mmorpg 만들기
Unity3D로 풀3D web mmorpg 만들기Unity3D로 풀3D web mmorpg 만들기
Unity3D로 풀3D web mmorpg 만들기
 
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
 
게임제작개론: #1 게임 구성 요소의 이해
게임제작개론: #1 게임 구성 요소의 이해게임제작개론: #1 게임 구성 요소의 이해
게임제작개론: #1 게임 구성 요소의 이해
 
마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
 
[IGC2018] 펄어비스 김광삼 - 대면 커뮤니케이션 주도의 게임 디자인과 게임 개발법
[IGC2018] 펄어비스 김광삼 - 대면 커뮤니케이션 주도의 게임 디자인과 게임 개발법[IGC2018] 펄어비스 김광삼 - 대면 커뮤니케이션 주도의 게임 디자인과 게임 개발법
[IGC2018] 펄어비스 김광삼 - 대면 커뮤니케이션 주도의 게임 디자인과 게임 개발법
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
 
게임 인공지능 설계
게임 인공지능 설계게임 인공지능 설계
게임 인공지능 설계
 

Similar to [IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원

니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4
민웅 이
 
[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기
진현 조
 
증강현실을 통한 두더지잡기 게임
증강현실을 통한 두더지잡기 게임증강현실을 통한 두더지잡기 게임
증강현실을 통한 두더지잡기 게임
Junhee Han
 
[0820 석재호]게임 입력의 기록 및 재생
[0820 석재호]게임 입력의 기록 및 재생[0820 석재호]게임 입력의 기록 및 재생
[0820 석재호]게임 입력의 기록 및 재생
Jaeho Seok
 
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp
진현 조
 

Similar to [IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원 (20)

유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석
 
니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4
 
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화
 
[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기
 
Gametech2015
Gametech2015Gametech2015
Gametech2015
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 
증강현실을 통한 두더지잡기 게임
증강현실을 통한 두더지잡기 게임증강현실을 통한 두더지잡기 게임
증강현실을 통한 두더지잡기 게임
 
3D Engine (ICON 2007)
3D Engine (ICON 2007)3D Engine (ICON 2007)
3D Engine (ICON 2007)
 
Direct x 11 입문
Direct x 11 입문Direct x 11 입문
Direct x 11 입문
 
Gamebryo LightSpeed (Korean)
Gamebryo LightSpeed (Korean)Gamebryo LightSpeed (Korean)
Gamebryo LightSpeed (Korean)
 
[0820 석재호]게임 입력의 기록 및 재생
[0820 석재호]게임 입력의 기록 및 재생[0820 석재호]게임 입력의 기록 및 재생
[0820 석재호]게임 입력의 기록 및 재생
 
증강현실을 통한 두더지잡기 게임
증강현실을 통한 두더지잡기 게임증강현실을 통한 두더지잡기 게임
증강현실을 통한 두더지잡기 게임
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기
 
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp
 
증강현실을 통한 두더지잡기 게임
증강현실을 통한 두더지잡기 게임증강현실을 통한 두더지잡기 게임
증강현실을 통한 두더지잡기 게임
 
게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
 

More from 강 민우

More from 강 민우 (20)

[IGC2018] 엔씨소프트 이경종 - 심층강화학습을 활용한 프로게이머 수준의 AI 만들기
[IGC2018] 엔씨소프트 이경종 - 심층강화학습을 활용한 프로게이머 수준의 AI 만들기[IGC2018] 엔씨소프트 이경종 - 심층강화학습을 활용한 프로게이머 수준의 AI 만들기
[IGC2018] 엔씨소프트 이경종 - 심층강화학습을 활용한 프로게이머 수준의 AI 만들기
 
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
 
[IGC2018] SUB 윤민 - 나만의 사운드—제작하고 연출하기
[IGC2018] SUB 윤민 - 나만의 사운드—제작하고 연출하기[IGC2018] SUB 윤민 - 나만의 사운드—제작하고 연출하기
[IGC2018] SUB 윤민 - 나만의 사운드—제작하고 연출하기
 
[IGC2018] 이락디지털문화연구소 남기덕 - 게임 디자인의 시작, 테마
[IGC2018] 이락디지털문화연구소 남기덕 - 게임 디자인의 시작, 테마[IGC2018] 이락디지털문화연구소 남기덕 - 게임 디자인의 시작, 테마
[IGC2018] 이락디지털문화연구소 남기덕 - 게임 디자인의 시작, 테마
 
[IGC2018] 왓스튜디오 방영훈 - 놀면서공부하기
[IGC2018] 왓스튜디오 방영훈 - 놀면서공부하기[IGC2018] 왓스튜디오 방영훈 - 놀면서공부하기
[IGC2018] 왓스튜디오 방영훈 - 놀면서공부하기
 
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
 
[IGC2018] TeamHoray 문지환 - 던그리드, 이랬으면 더 좋았을 텐데
[IGC2018] TeamHoray 문지환 - 던그리드, 이랬으면 더 좋았을 텐데[IGC2018] TeamHoray 문지환 - 던그리드, 이랬으면 더 좋았을 텐데
[IGC2018] TeamHoray 문지환 - 던그리드, 이랬으면 더 좋았을 텐데
 
[IGC2018] 잔디소프트 윤세민 - HTML5 게임 어디까지 가능한가
[IGC2018] 잔디소프트 윤세민 - HTML5 게임 어디까지 가능한가[IGC2018] 잔디소프트 윤세민 - HTML5 게임 어디까지 가능한가
[IGC2018] 잔디소프트 윤세민 - HTML5 게임 어디까지 가능한가
 
[IGC2018] 해피툭 김봉균 - 대만 게임 시장 진출시 유의해야 할 점
[IGC2018] 해피툭 김봉균 - 대만 게임 시장 진출시 유의해야 할 점[IGC2018] 해피툭 김봉균 - 대만 게임 시장 진출시 유의해야 할 점
[IGC2018] 해피툭 김봉균 - 대만 게임 시장 진출시 유의해야 할 점
 
[IGC2018] 산타모니카스튜디오 에이브 타라키 - 게임의 컨셉 디자인과 세계를 만드는 법
[IGC2018] 산타모니카스튜디오 에이브 타라키 - 게임의 컨셉 디자인과  세계를 만드는 법[IGC2018] 산타모니카스튜디오 에이브 타라키 - 게임의 컨셉 디자인과  세계를 만드는 법
[IGC2018] 산타모니카스튜디오 에이브 타라키 - 게임의 컨셉 디자인과 세계를 만드는 법
 
[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법
[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법
[IGC2018] 펄어비스 강건우 - 펄어비스에서 기획자가 일하는 방법
 
[IGC2018] 스튜디오EIM 정사인 - 좋은 소리는 무엇인가
[IGC2018] 스튜디오EIM 정사인 - 좋은 소리는 무엇인가[IGC2018] 스튜디오EIM 정사인 - 좋은 소리는 무엇인가
[IGC2018] 스튜디오EIM 정사인 - 좋은 소리는 무엇인가
 
[IGC2018] 유유자적라이프 김윤정 - SunShine 베를린을 밝게 비추다
[IGC2018] 유유자적라이프 김윤정 - SunShine 베를린을 밝게 비추다[IGC2018] 유유자적라이프 김윤정 - SunShine 베를린을 밝게 비추다
[IGC2018] 유유자적라이프 김윤정 - SunShine 베를린을 밝게 비추다
 
[IGC2018] 자라나는 씨앗 김효택 - MazM 시리즈로 바라본 스토리 게임의 가능성
[IGC2018] 자라나는 씨앗 김효택 - MazM 시리즈로 바라본 스토리 게임의 가능성[IGC2018] 자라나는 씨앗 김효택 - MazM 시리즈로 바라본 스토리 게임의 가능성
[IGC2018] 자라나는 씨앗 김효택 - MazM 시리즈로 바라본 스토리 게임의 가능성
 
[IGC2018] 인플루전 곽노진 - 인디게임이 망할 수 밖에 없는 현실과 이유
 [IGC2018] 인플루전 곽노진 -  인디게임이 망할 수 밖에 없는 현실과 이유 [IGC2018] 인플루전 곽노진 -  인디게임이 망할 수 밖에 없는 현실과 이유
[IGC2018] 인플루전 곽노진 - 인디게임이 망할 수 밖에 없는 현실과 이유
 
[IGC2018] 라운드8 박성준 - 블레스 언리쉬드 우리는 왜 모든것을 재설계했나
[IGC2018] 라운드8 박성준 - 블레스 언리쉬드  우리는 왜 모든것을 재설계했나[IGC2018] 라운드8 박성준 - 블레스 언리쉬드  우리는 왜 모든것을 재설계했나
[IGC2018] 라운드8 박성준 - 블레스 언리쉬드 우리는 왜 모든것을 재설계했나
 
[IGC2018] 아이봉 정봉재 - 아직 아이 망하니
[IGC2018] 아이봉 정봉재 - 아직 아이 망하니[IGC2018] 아이봉 정봉재 - 아직 아이 망하니
[IGC2018] 아이봉 정봉재 - 아직 아이 망하니
 
[IGC2018] 퍼니파우 최재영 - 감성을 위한 개발요소
[IGC2018] 퍼니파우 최재영 - 감성을 위한 개발요소[IGC2018] 퍼니파우 최재영 - 감성을 위한 개발요소
[IGC2018] 퍼니파우 최재영 - 감성을 위한 개발요소
 
[IGC2018] 유니티 함영호 - 디바이스를 통해 본 모바일 게임 마켓 인사이트
[IGC2018] 유니티 함영호 - 디바이스를 통해 본 모바일 게임 마켓 인사이트[IGC2018] 유니티 함영호 - 디바이스를 통해 본 모바일 게임 마켓 인사이트
[IGC2018] 유니티 함영호 - 디바이스를 통해 본 모바일 게임 마켓 인사이트
 
[IGC2018] 선본네트워크 우중 - 매력 넘치는 캐릭터 메이킹 노하우
[IGC2018] 선본네트워크 우중 - 매력 넘치는 캐릭터 메이킹 노하우[IGC2018] 선본네트워크 우중 - 매력 넘치는 캐릭터 메이킹 노하우
[IGC2018] 선본네트워크 우중 - 매력 넘치는 캐릭터 메이킹 노하우
 

[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원

  • 1. IGC(INVEN GAME CONFERENCE) 2018 포트나이트 배틀로얄 멀티플랫폼 지원 신광섭 디벨로퍼 릴레이션스 리드 에픽게임즈 코리아
  • 2. IGC(INVEN GAME CONFERENCE) 2018 INTRODUCTION
  • 3. IGC(INVEN GAME CONFERENCE) 2018 소개 PC, Mac, PS4, Xbox One, iOS, 안드로이드, 닌텐도 스위치 모든 유저들이 같이 크로스 플레이 가능! ● 같은 콘텐츠 – 콘솔/PC 부터 모바일까지 아주 넓은 영역의 하드웨어 지원 ● 게임 콘텐츠도 같이 계속 업데이트 ○ 새로운 기능들 (자동차, 코스튬, 새로운 게임 모드) 도전 과제들 - 멀티플랫폼 지원
  • 4. IGC(INVEN GAME CONFERENCE) 2018 소개 ● 포트나이트 배틀로얄 멀티플랫폼 지원의 Key point PC/콘솔 <-> 모바일(iOS, Android)을 넘나드는 최적화, 최적화, 최적화
  • 5. IGC(INVEN GAME CONFERENCE) 2018 소개 ● Significance manager ● Ticking & 블루프린트 ● 스트리밍 ● 서버 퍼포먼스 ● 프로파일링 ● HLOD ● 콘솔 @ 60Hz ● CPU ● GPU ● 모바일 – IOS/Android 언리얼 엔진 4의 포트나이트 배틀로얄 최적화 중요 영역들
  • 6. IGC(INVEN GAME CONFERENCE) 2018 SIGNIFICANCE
  • 7. IGC(INVEN GAME CONFERENCE) 2018 ● 게임 플레이어들을 아래에 기초해 Significance Bucket 에 할당: ○ 거리 ○ 화면에서의 크기 ○ 보이는지 여부 ● 많은 스케일러빌티티(scalability) 시스템을 컨트롤 ● 엔진 기능! ○ 하지만 게임에 의존적 SIGNIFICANCE MANAGER 플레이어 중요도 높음 중요도 낮음 다른 플레이어
  • 8. IGC(INVEN GAME CONFERENCE) 2018 애니메이션 - UPDATE RATE OPTIMIZATION ● 애니메이션 계산을 줄이는 엔진 기능 ● Significance 에 의해서 컨트롤됨 URO 없음 URO 4 URO 10 URO 4 – 보간 없음
  • 10. IGC(INVEN GAME CONFERENCE) 2018 애니메이션 – 모듈형 캐릭터 ● 5개의 메쉬로 이루어진 모듈형 캐릭터 ● 각 파츠가 애님 블루프린트를 따로 가지고 있음! 1 – 기본 스켈레톤 2 - 머리 3 - 몸 4 - 가방 5 - 무기
  • 11. IGC(INVEN GAME CONFERENCE) 2018 애니메이션 – 네이티브 코드화 작업 ● 매 Tick 마다 일어나는 이벤트 그래프의 블루프린트를 C++로 변경 최적화 전 0.93 ms 최적화 후 0.19 ms
  • 12. IGC(INVEN GAME CONFERENCE) 2018 TICKING - 액터 ● ‘Dumpticks’ 콘솔 명령어로 사용 분석 ● Tick 이벤트를 사용하는 블루프린트들 ● Overlaps은 느린 것 중에 하나 ○ 문열기 ○ 회전하는 토마토 머리
  • 13. IGC(INVEN GAME CONFERENCE) 2018 SPAWNING ● 많은 액터들이 생성됨(Spawning) ○ 벽 건설 ○ 보물상자 열기 ○ 플레이어 제거 ○ 네트워크 관련성(Network relevancy) ○ 발사되는 총알들 ● 파티클 풀링(Pooling) 시스템 추가! ○ 이펙트를 생성하는 비용 절감 ■ ParticleSystemComponent 생성 ■ ParticleSystem 설정 ○ Spawn Emitter 함수에 Pooling Method 옵션
  • 14. IGC(INVEN GAME CONFERENCE) 2018 TICKING - HUD ● Slate HUD가 ~2.6ms 비용 소요 ● ~1ms 정도로 최적화 ○ 느린 블루프린트 제거 ○ 위젯들을 캐쉬하기 위해서 invalidation panels 사용 ○ 느린 위젯들 최적화 ● 추가적인 Slate 최적화 계획 중
  • 15. IGC(INVEN GAME CONFERENCE) 2018 TICKING – 하루의 변화 시스템 ● MaterialParameterCollection에서 많은 라이팅 관련 변수들 변경 ● 프레임당 하나의 변경만 업데이트 하도록 시스템 최적화
  • 16. IGC(INVEN GAME CONFERENCE) 2018 레벨 스트리밍
  • 17. IGC(INVEN GAME CONFERENCE) 2018 레벨 스트리밍 ● 포트나이트 2.2.0 버전부터 사용 (2018 1월쯤) ● 왜? ○ 메모리 사용량 줄이기 ○ 맵의 퀄리티 높이기 ○ 코스튬등의 다양성 늘리기 (스킨, 가방, 무기등등) ○ 렌더링 최적화 ○ 게임플레이 최적화 ● 관련한 기술적 부분들 ○ IO 스레드 ○ Asynchronous deserialize ○ 메인 스레드에서 여러 프레임으로 나누어 로딩 ○ Texturestreaming 참여도 조절하기
  • 18. IGC(INVEN GAME CONFERENCE) 2018 레벨 스트리밍 – 컴포넌트 등록 ● Adaptive Time Slicing 사용 ○ 스카이 다이빙: 5ms ○ 지면: 1ms ● 남는 GT 시간을 로딩에 사용
  • 19. IGC(INVEN GAME CONFERENCE) 2018 서버 퍼포먼스
  • 20. IGC(INVEN GAME CONFERENCE) 2018 서버 퍼포먼스 - 리플리케이션 - ~50,000 리플레케이트되는 액터들 - 100 개의 연결 - 400+ 스트리밍 레벨들 - 20 Hz tick 속도 - 최대한 낮은 빈도의 net 업데이트/ForceNetUpdate() - 관련성(relevancy) 거리를 최대한 줄이기 - 관련 없는 상태를 최대한 정확히 걸러내기
  • 21. IGC(INVEN GAME CONFERENCE) 2018 ● 네트워크 관련성(network relevancy)을 다시 정의 ○ IsNetRelevantFor과 GetNetPriority가 사용되지 않음 ● 그래프로 관련이 있는 액터들만 필터링 ○ 공간 그리드(Spatial grid) ○ 스트리밍 ○ 항상 관련있음(Always Relevant) (팀/연결된 것들/모두) 서버 퍼포먼스 - 리플리케이션 그래프(REPLICATION GRAPH)
  • 22. IGC(INVEN GAME CONFERENCE) 2018 데디케이티드 서버 - REPLICATED STATE 공유 - 자주 같은 state가 많은 클라이언트에 보내짐 - State를 따로 만들지 않고, 최대한 캐쉬/재사용하는 기능 추가 Actor Actor State Client Actor State Client Actor State Client Actor Client Actor State Client Client
  • 23. IGC(INVEN GAME CONFERENCE) 2018 서버 퍼포먼스 - 게임플레이 ● 클라이언트 최적화가 많은 도움이 됨 ● 클라이언트 캐릭터 이동을 합쳐 처리하도록 노력 ○ 높은 FPS에서 너무 많은 RPC 호출 피하기 ○ 공격적으로 최소 프레임으로 처리 (약 20 Hz) ○ 레이턴시(latency)를 줄이기 위해 중요 이동의 경우 바로 보냄 ● 애니메이션 ○ 서버에서는 애니메이션 처리하지 않음 ○ 플레이어 컬리젼 비활성화 ○ 모든 불필요한 보여주기를 위한 컴포넌트들 제거
  • 24. IGC(INVEN GAME CONFERENCE) 2018 프로파일링
  • 25. IGC(INVEN GAME CONFERENCE) 2018 프로파일링 ● QA 팀은 데일리 100인 플레이 테스트에서 프로파일 데이터를 수집 ● 하나의 완벽한 게임 플레이에서 얻어진 프로파일 데이터로 게임에서 발생한 각각의 히치/느려지는 구간 분석 가능 ○ 히치가 60ms 이상으로 걸리는 경우 버그로 등록 ○ 성능 관련 버거는 크래쉬 다음으로 중요도가 높은 버그로 대응 ● 게임을 Reply 시스템으로 레코딩해서 확인 및 다른 플랫폼에서 테스트 가능
  • 26. IGC(INVEN GAME CONFERENCE) 2018 리플레이 시스템을 사용한 A/B 테스트
  • 27. IGC(INVEN GAME CONFERENCE) 2018IGC(INVEN GAME CONFERENCE) 2018 콘솔에서 60 FPS 스위치에서 30 FPS
  • 28. IGC(INVEN GAME CONFERENCE) 2018 이슈 30fps 게임을 60fps 으로 만드는 것은 여러 도전 이슈들이 생김 핵심 솔루션들: ● GPU Dynamic Resolution & Temporal AA ● GPU 디바이스 프로파일을 통한 스케일링 ○ 그려지는 거리, 그림자 퀄리티, AO, 폴리지 밀도, 최소/최대 dynamic resolution ● CPU 스케일링 ○ 모바일 CPU 개선을 사용 (Ticking, LOD, 드로콜)
  • 29. IGC(INVEN GAME CONFERENCE) 2018 Spatial Upscale Spatial Upscale ● UI 전에 업스케일링 ● r.screenpercentage 으로 해상도 변경시
  • 30. IGC(INVEN GAME CONFERENCE) 2018 Temporal Upsampling & Dynamic Resolution ● 해상도를 조절하는 옵션으로 UE4.19 추가됨 ● Temporal Upsampling ○ Temporal upsampling은 높은 퀄리티의 업샘플링 가능 ○ TemporalAA 패스에서 업샘플링 ● Dynamic Resolution ○ GPU 부하에 따라서 자동으로 해상도가 변경되고, Temporal Upsampling을 통해 그 변화가 거의 느껴지지 않음
  • 31. IGC(INVEN GAME CONFERENCE) 2018 Temporal Anti-Aliasing Upsample Temporal Upsample (TAAU) • TemporalAA에서 업샘플링 • 모션블러 블룸이 고해상도에서 처리되어서 Spatial Upscale에서 부하가 더 있음 • Dynamic Resolution 해상도가 여기서 변경됨
  • 32. IGC(INVEN GAME CONFERENCE) 2018 Temporal AA Upscale Settings ● Temporal upsample로 해상도 변경 ○ 차이가 거의 느껴지지 않음 ○ 매 8 프레임마다 정한 GPU 허용량에 맞도록 동작 Xbox One X 예제 @ 65% 화면 비율 1: 렌더링 해상도 = 2080x1170 2: 버퍼 해상도 = 3200x1800
  • 33. IGC(INVEN GAME CONFERENCE) 2018 GPU: 23.5ms Dynamic Res: 100% 30 FPS
  • 34. IGC(INVEN GAME CONFERENCE) 2018 GPU: 15.9ms Dynamic Res: 83.4% 60 FPS
  • 36. IGC(INVEN GAME CONFERENCE) 2018 닌텐도 스위치 도킹 및 휴대용 모든 모드에서 GPU 사용을 최대화 하기 위해서 Dynamic resolution과 TAAU + 디퍼드 렌더러 사용. 그래도 30Hz 고정 최근에 Clustered Forward Renderer로 변경을 통해 10% 더 빠른 퍼포먼스 핸드헬드 모드에서는 배터리 사용량을 위해서 100% 퍼포먼스를 사용하지 않음
  • 37. IGC(INVEN GAME CONFERENCE) 2018 캐릭터 최적화 ● 캐릭터 4 LOD, 무기 3 LOD ● LOD에서는 얼굴본 제거 ● 모바일에서는 LOD 1 최소 LOD ● 캐릭터 LODs ○ LOD0 30,000 tris ○ LOD1 15,000 tris ○ LOD2 3,000 tris ○ LOD3 300 tris
  • 38. IGC(INVEN GAME CONFERENCE) 2018 풀(GRASS) 최적화 ● 풀(Grass) 최적화는 중요 요소 중에 하나 ○ LOD 추가 ○ 회전 제거등으로 버텍스 셰이더 최적화 ○ 모바일에서는 버텍스 셰이더 제거 ○ 게임에 영향을 주지 않는 풀의 Density scale 조정
  • 39. IGC(INVEN GAME CONFERENCE) 2018 Hierarchical LOD – 엄청난 기능, But 캐릭터에 가까이 있는 것에는 적용 불가능
  • 40. IGC(INVEN GAME CONFERENCE) 2018 다이나믹 HLOD를 통한 부서지는 건물 ● 틸티드 타워 지역은 15개의 빌딩과 오브젝트들로 약 2000개의 드로콜이였음 ● 새로운 다이나믹 HLOD로 하나의 전체 빌딩을 1개의 드로콜로 줄임 ● 렌더타켓 이용 ● 각 벽들의 부서진 여부를 처리하기 위해서 부서진 벽에 대한 인덱스를 렌더타켓에 검은 텍셀로 표시 ● UV와 버텍스컬러를 이용해서 RT를 읽어서 버텍스 셰이더에서 처리
  • 41. IGC(INVEN GAME CONFERENCE) 2018 DHLOD 비교 원본 메시 HLOD level 0 (다이나믹 HLOD) HLOD level 1 (프록시 HLOD) ~70,000 tris, 100s drawcall 5,462 tris, 1 drawcall 1,150 tris, 1 drawcall 항상 로드됨스트리밍된 부서지는 요소들 스트리밍됨
  • 42. IGC(INVEN GAME CONFERENCE) 2018 다아나믹 HLOD 적용 전 ~1800 draw calls, 484k tris (w/o shadows)
  • 43. IGC(INVEN GAME CONFERENCE) 2018 다이나믹 HLOD 적용 후 ~800 draw calls, 375k tris (w/o shadows)
  • 44. IGC(INVEN GAME CONFERENCE) 2018 나무 임포스터 ● Hemi-octahedral 캡쳐 레이아웃 ● 각 프레임을 2D texture atlas로 만듬 ● Vector->Octahedron 변환을 사용해서 프레임 인덱싱 ● UV 공간에서 +X, +Y, +XY 주변 좌표를 통한 간단한 주변 프레임 접근 ● 추가적인 정보: https://shaderbits.com/blog/octahedra l-impostors
  • 45. IGC(INVEN GAME CONFERENCE) 2018 HLOD + 나무 임포스터
  • 46. IGC(INVEN GAME CONFERENCE) 2018IGC(INVEN GAME CONFERENCE) 2018 모바일 하나의 게임 – 모든 플랫폼
  • 47. IGC(INVEN GAME CONFERENCE) 2018 하나의 게임, 모든 플랫폼 크로스 플레이 지원을 위한 필수 조건들: ● 하나의 같은 맵으로 모든 플랫폼 지원 ● 게임플레이에 영향을 주는 모든 요소들이 똑같이 지원되어야 함 ● 전투가 가능한 거리가 모든 플랫폼에서 같아야 함 모바일 포팅이나 새로운 맵 추가가 아닌 하나의 같은 맵!
  • 48. IGC(INVEN GAME CONFERENCE) 2018 하나의 게임, 모든 플랫폼 PC (최대 퀄리티)
  • 49. IGC(INVEN GAME CONFERENCE) 2018 하나의 게임, 모든 플랫폼 PC (중간 퀄리티)
  • 50. IGC(INVEN GAME CONFERENCE) 2018 하나의 게임, 모든 플랫폼 iPhone 8+ iOS (최대 퀄리티)
  • 51. IGC(INVEN GAME CONFERENCE) 2018 하나의 게임, 모든 플랫폼 모바일 지원 중요 이슈들 ● CPU - Thermal throttling ● 메모리 ● 드로콜 줄이기 - HLOD ● GPU 속도 및 GPU 드라이버 – 해상도 줄이고 업스케일링
  • 52. IGC(INVEN GAME CONFERENCE) 2018 THERMAL THROTTLING 가장 높은 수준의 퀄리티로 30fps 을 원했음. 하지만.. CPU와 GPU를 최대치로 사용하는 것은 열을 발생했고, 결국 디바이스 다운클럭(downclock) 발생 해결을 위한 키 포인트: CPU 코어들이 시간의 약 50%는 idle 상태로 있도록 했음. 그래서 60fps 타켓으로 최적화 하고, 30fps에 vsync 했음
  • 53. IGC(INVEN GAME CONFERENCE) 2018 메모리: 타켓 iOS에서 피지컬 메모리 GB당 700MB을 허용 버짓으로 잡음 ● 2GB 디바이스에서 <1.4 GB (대부분의 폰들) ● 3GB 디바이스에서 <2.1 GB (“+” 폰들) ● 4GB 디바이스에서 <2.8 GB (큰 iPadPro) 안드로이드에서 메모리 상황은 디바이스마다 더 복잡함 ● 2GB 디바이스에서 <500 MB (아직 작업중) ● 3GB 디바이스에서 <1.4 GB (대부분의 경우 괜찮음) ● 4GB 디바이스 중에 특정 디바이스들 <1.4 GB (구글 픽셀폰!!!!) 안드로이드에서는 정확한 메모리 정보를 얻어오기 힘듬...
  • 54. IGC(INVEN GAME CONFERENCE) 2018 디바이스별 튜닝 – 스케일러빌리티(SCALABILITY) 애플/iOS ● 알고 있는 제한된 디바이스 종류만 존재, 디바이스별로 값들 세팅 ● 메모리 허용량 – 폴리지 사용여부 (3GB 이상의 디바이스에서만) ● 디바이스별 설정 – 스케일러빌리티 세팅(해상도, 그림자 on/off, LOD 거리 등등) 안드로이드 ● 엄청나게 많은 종류의 디바이스들 (10,000+). 일반적으로 그래픽 API가 iOS만큼 빠르지 않음. ● 알려진 특정 디바이스나 테스트한 디바이스들은 각각에 맞는 튜닝 ● GPU 타입(Adreno 6xx 또는 Mali G7x등등)에 따른 세팅(Lowest, Low, Med, High 등등) ● 낮은 사양의 안드로이드 폰에는 특별히 낮은 FPS(20Hz) 사용 ● Vulkan은 현재 가장 높은 스펙의 삼성 디바이스에서만 더 빠름 (Adreno 630) 안드로이드 지원을 위해서 3월부터 8월초까지 최적화 및 안정화 작업이 필요했음!
  • 55. IGC(INVEN GAME CONFERENCE) 2018 모바일 개선 사항들 안드로이드 Program Binary Cache와 shader precompilation을 통한 시작 시간 계산 Shader LRU Cache 를 통한 엄청난 메모리 절약 셰이더 사이즈 줄이기 위한 Emulated Uniform Buffers 개선 Vulkan 호환성 개선 및 최적화 CPU core thread affinity 조정 디바이스별 Mobile PIE 개선 안드로이드 Occlusion Query 개선 디바이스 프로파일 개선 Virtual Keyboard 수정 많은 버그들 수정 IOS Web Browser Widget UObject 바인딩 지원 iPhone XS/XSMax/XR 지원 버그들 수정 모바일 GPU particle 시뮬레이션 성능 개선 dithered LOD transitions 수정 Sky cubemap 반사 수정 터레인 웨이트맵 텍스처 압축
  • 56. IGC(INVEN GAME CONFERENCE) 2018IGC(INVEN GAME CONFERENCE) 2018 감사합니다! UNREALENGINE.COM