2. 들어가기 전
발표자 소개
김영희
현 NATgames TA
- 모바일 RPG HIT Animation Part
- 모바일 RPG HIT Technical Artist
- TV 애니메이션 뽀롱뽀롱 뽀로로 스리즈 리깅,R&D 담당
- TV 애니메이션 서커스쇼 리깅,R&D 담당
- TV 애니메이션 꼬마버스 타요 3기 리깅,R&D 담당
3. INDEX
1
Chapter
PC플랫폼 VS 모바일 플랫폼
2
Chapter
Unreal4의 모바일 제작
3
Chapter
최적화 / 패키지 용량 이슈
4
Chapter
HIT에서는…
5
Chapter
기타 Unreal4 프로젝트 제작 팁
5. 1
PC플랫폼 VS 모바일 플랫폼
PC Platform
PC Platform
• 화려한 Post processing
• 품질 좋은 Texture 압축(DXT1 / DTX5)
• GPU 제조사별 제약 없음
• DX11 이후부터는 Pipeline 구조 변화로 Tessellation등 을 쉽게 구현
• Throttling / Battery 무관
6. 1
PC플랫폼 VS 모바일 플랫폼
Mobile Platform
Mobile Platform
•ETC1 , ETC2 , ASTC , ATC , PVRTC … 지원하는 Texture압축이 천차만별
• Post processing 의 기능 제약 있음
• GPU 제조사별 그래픽 제약이 있음
•Throttling / Battery 등의 제약이 있음
• Memory 등 하드웨어 능력의 제약이 있음
7. 1
PC플랫폼 VS 모바일 플랫폼
모바일 플랫폼의 가능성
모바일은 개발환경이 너무 좋지 않다.
하지만…
•4.13 – Custom Post processing
•4.12 – Dynamic Planner Reflection
•4.12 – GPU Particle
•4.12 – Temporal A.A
•4.12 – Dynamic cascade Shadow
•4.12 – Depth Of Field
•4.11 – Mobile refraction
•4.9 – Dynamic Lighting
•4.9 – Mobile Decal
•4.8 – Mobile Preview
10. 2
Unreal4의 모바일 제작
Unreal4의 Mobile Features
Unity / Unreal과 같은 차세대 게임엔진은 모두 크로스 플랫폼을
지원함에 따라 PC Platform의 Features를 일부를 사용하는 식으로
Mobile Platform에 적용
Unreal4 Mobile에서 지원되는
Feature를 살펴보자!
11. 2
Unreal4의 모바일 제작
Unreal4의 Mobile Features
• 이하 내용은 Unreal 4.8.3 버전 기준
• 최신버전과 기능이 다른 부분은 따로 언급
모바일에서 지원되는 기능과 안되는 기능을 확실히 구별하여 사용하자
Light / Shadow PostProcessing Material Particles System
Movable Light White Balance Scene Color GPU Sprites
Stationay Light는 1개만 ColorGrading Refraction
Light Min Roughness Film Tone Mapper Tessellation
Light Function Light Propagation Volume Subsurface Scattering
Light Shafts Ambient Cubemap Ambient Occlusion
Dynamic Shadow Auto Exposure Noise Node
Atomospheric Fog Lens Flares Particles Position Node
Ambient Occlusion Particle Speed Node
Global Illumination Particle Size Node
Motion Blur Particle Direction Node
AntiAliasing (Temporal AA만지원)
Screen Space Reflections
Mobile프로젝트에서 지원하지 않는 사항
12. 2
Unreal4의 모바일 제작
Shader & Material
Traditional Shading Model VS Physical based Shading Model
•Shading Model을 새로 개발해서 사용할 것인가!
•기본 Unreal PBR을 사용할 것인가!
13. 2
Unreal4의 모바일 제작
Shader & Material
• PBR은 비싼거 아닌가?
• 과연 PBR을 아티스트가 다루기 직관적 일까?
• 우리 게임에 PBR까지는 필요 없을지도…
• 완전히 다른 Shading Model로 개발하면 좋지 않을까?
흔한 초보 TA의 의미 없는 생각
코… 코드를 보자!
14. 2
Unreal4의 모바일 제작
Shader & Material
PBR은 비싸다?
그럴 줄 알고 모바일용 Environment BRDF Model은 근사 코드로 준비해 뒀지롱-!
EngineShaders BRDF.usf
15. 2
Unreal4의 모바일 제작
Shader & Material
PBR은 비싸다?
Directional Light 연산도 따로 준비해 놨지롱~!
EngineShaders BasePassForForwardShadingPixelShader.usf
16. 2
Unreal4의 모바일 제작
Shader & Material
PBR은 비싸다?
Rough가 필요없어? 그럼 미리 상수화 시켜놓았지롱~!
EngineShaders BasePassForForwardShadingPixelShader.usf
그리고 또…
아무튼 랜더링레벨 별로 Shading 코드가 다르다.
ES2레벨에서의 퀄리티도 만족스러우며, Instruction도 비교적 적다.
17. 2
Unreal4의 모바일 제작
Shader & Material
Material Editor에서 Vertex Shader 연산도 가능함에
따라 GPU자원을 더 효율적으로 사용 할 수 있음
18. 2
Unreal4의 모바일 제작
Shader & Material
•PBR이 비싸지 않을까?
• 렌더링 레벨별로 Shading Code가 적절히 나눠져 있음.
•과연 PBR을 아티스트가 다루기 직관적 일까?
• Parameter가 적고 랜더링 레벨별로 다르지 않아서 큰 어려움이 없음
• 우리 게임에 PBR까지는 필요 없을지도…
•상황에 따라 Fully Rough / Unlit을 사용
DX11 OpenGL ES2
20. 3
최적화 / 패키지 용량 이슈
Optimization
HIT 프리뷰 단계에서는…
• 탑다운 뷰 때문에 상대적으로 Overdraw가 적게 발생.
• Opacity가 들어간 Material 사용 안함.
• 고정된 뷰로 Mesh를 아낄 수 있음.
• CPU자원 > GPU자원
그럼 일단 최적의 Draw Call을 측정하는 것을 중점을 두자!
21. 3
최적화 / 패키지 용량 이슈
Optimization
모바일 퍼포먼스 체크할 때 염두 해야 할 점
•모바일 개발에서는 실제 디바이스에서 퍼포먼스를 측정하는 것을 습관화하자.
• 용량측정은 쿠킹이 완료된 Pak파일로 분석하자.
• 따라서 레퍼런스가 될 타겟을 지정해 놓자.
•GPU 프로파일러를 활용하자!
HIT의 테스트 타겟은 갤럭시S4 (Adreno 320)!
24. 3
최적화 / 패키지 용량 이슈
Optimization
적정 Draw Call
• 몬스터 스폰 하지 않았을 때 120±10
• 몬스터 스폰 + 전투 시 180±20
• 로비화면에서 200±20
제약사항
• Bone 최대 75개 제한
• Vertex 캐릭터당 12000개 가량 사용
• Mesh LOD는 사용하지 않음
• Particle System의 Bounding Box FIX 하여 Update 비용 절감
• 퀄리티 옵션별로 Particle System Detail Mode 사용
• 퀄리티 옵션별로 Material Quality Level 사용
• 퀄리티 옵션별로 HDR 사용
• 퀄리티 옵션별로 Shading Model 변화 (Lambert – PBR)
다음과 같은 결과가 도출
25. DrawCall을 낮추기 위해서는 Merge Actor 기능을 잘 활용하자. 꼬옥!
3
최적화 / 패키지 용량 이슈
Optimization
26. 3
최적화 / 패키지 용량 이슈
용량 이슈
HIT는 상대적으로 작은 용량으로 시작했으나, 업데이트
규모가 커 상당히 데이터 크기가 커질 것으로 예상
타 게임들과 비교 - 꾸준히 오르긴 하지만 실제는 약간 완만하게 올라가고 있음
용량 이슈
27. 3
최적화 / 패키지 용량 이슈
용량 이슈
리소스 변화 추이를 관찰한 결과
배경(레벨) 관련 리소스가 가장 많이 늘어나고 있다!
28. 3
최적화 / 패키지 용량 이슈
용량 이슈
배경 리소스의 구성
- Static Mesh
- Material Instance
- Texture
- Level
- Light Map / Shadow Map
- Vertex Color Data
- Blocking Volume
- Reflection Capture
배경 리소스 제작 시 Light UV를 효율적으로 할당하는 것이 가장 중요하
다!!
29. 3
최적화 / 패키지 용량 이슈
용량 이슈
• AOS에서만 ShadowMap이 ETC1으로 압축 안됨.
• 이를 압축하여 사용하면 용량이 훨씬 절감됨.
• 아래 경로에 TEXTUREGROUP_Shadowmap관련 압축
방식을 지정
EngineSourceDeveloperAndroidAndroidTargetPlatformPrivate AndroidTargetPlatform.inl
31. 3
최적화 / 패키지 용량 이슈
용량 이슈
• ETC1 에서는 Alpha Channel 이 있는 Texture 사용을 자제
• Shadow Map이 압축이 안되는 현상 수정
• Material에 Switch Parameter를 사용하면 Instance의 용량 증가
• Texture Size는 512 이하 제한
• 레벨이 늘어나는 것은 어쩔 수 없음(…)
• 결국 용량이슈는 잘못된 데이터가 들어가지
않게끔 하는 것이 관건!
• 쿠킹 데이터 분석, 관련 Commandlet을 통해
잘못된 데이터를 수시로 체크!
33. 2
Unreal4의 모바일 제작
Shader & Material
HIT에서는…
그러나…
하나의 Stationary Light로는 캐릭터와 배경을 동시에 풍부하게 표현하는 것이 힘듦!
Reflection Capture의 환경이 좋지 않아 풍부한 PBR Shader의 표현이 좋지 않음!
• Lighting / Shadow
• Stationary Light 1개 배치
• Static Light 다수 배치
• Reflection Capture 1개 배치
•Dynamic Shadow는 Modulate 로 자체 구현
39. 4
HIT에서는…
Lighting / Material
Phong Approx
half a2 = a * a;
float rcp_a2 = rcp(a2);
half c = 0.72134752 * rcp_a2 + 0.39674113;
return min(rcp_a2 * exp2( c * RoL - c ),50);
roughness flicker Issue
일반적인 Cos , Pow를 사용한 Phong
45. 4
HIT에서는…
Lighting / Material
BG Material
• 배경용 Material은 대부분 Fully Rough
• 기능별로 Material을 다수 제작
• Unlit 사용
• Translucent은 자제
• 용량이슈로 인해서 Switch Parameter를 사용하기보다
Material을 나눠서 제작
(위와같이 동일한 기능의 Material들이 퀄리티별로 다수 존재)
47. 5
기타 Unreal4 프로젝트 제작 팁
기타 Unreal4 프로젝트 제작 팁
Mali GPU에서만 발생하던 UV 정밀도 문제
48. 5
기타 Unreal4 프로젝트 제작 팁
기타 Unreal4 프로젝트 제작 팁
sRGB를 Mask Map에 사용하지 말자
이전에 잘못 사용하던 Character Material
• Clamp 0.4 – 1.0
• SRGB값으로 인해 0.6의 값을 칠해도 0.4로 표현됨!
• 0.7 = 0.456
• 0.8 = 0.612
.....
• 직관적이지 않은 값으로 아티스트가 표현하기가 매우 까다롭다!
49. 5
기타 Unreal4 프로젝트 제작 팁
기타 Unreal4 프로젝트 제작 팁
sRGB사용 여부는 Texture와 Material 모두 수정하자!
ES2에서는 아무리 Texture에 sRGB를 꺼놓아도 위와 같
이 Sampling되면 말짱 헛빵!
50. 5
기타 Unreal4 프로젝트 제작 팁
기타 Unreal4 프로젝트 제작 팁
sRGB를 잘못 on / off 해서 Texture를 그렸다면?
Photoshop에서 Curve 조절을 통해 돌려놓을 수 있다!
Pow(2.2) 혹은 Pow(1/2.2)
51. 5
기타 Unreal4 프로젝트 제작 팁
기타 Unreal4 프로젝트 제작 팁
Alpha Channel이 있을 때 PNG는 피하자
52. 5
기타 Unreal4 프로젝트 제작 팁
기타 Unreal4 프로젝트 제작 팁
Alpha Channel이 있을 때 PNG는 피하자
Alpha영역에 Color정보가 없으면 흰색으
로 채워짐
PNG Targa
Alpha영역의 어떠한 정보도
무시되어 번짐
53. 5
기타 Unreal4 프로젝트 제작 팁
기타 Unreal4 프로젝트 제작 팁
Alpha Channel이 있을 때 PNG는 피하자
54. 5
기타 Unreal4 프로젝트 제작 팁
기타 Unreal4 프로젝트 제작 팁
ETC1의 압축은 다른 채널까지 영향을 끼치는 방식이다.
55. 5
기타 Unreal4 프로젝트 제작 팁
기타 Unreal4 프로젝트 제작 팁
ETC1의 압축은 다른 채널까지 영향을 끼치는 방식이다.
Pow 나 Clamp를 사용하여 작은 값 줄여서 사용..
56. 5
기타 Unreal4 프로젝트 제작 팁
기타 Unreal4 프로젝트 제작 팁
ETC1의 압축은 다른 채널까지 영향을 끼치는 방식이다.
Mali Texture Compression Tool 으로 Cooking 전에 확인 가능
(ASTC/ETC1/ETC2)
http://malideveloper.arm.com/resources/tools/mali-gpu-texture-compression-tool/