UE4 모바일렌더링개요 에픽게임즈코리아박창현
Agenda 모바일 GPU 모바일디바이스 Tile-Based GPU / Early Z Test 단편화 UE4 모바일씬렌더러 ( 최신 4.19.2 기준 ) Feature Level 렌더러분석 라이팅과그림자 UE4 모바일렌더링관련 Tips
모바일 GPU 모바일디바이스 / Tile-Based GPU / Early Z Test / 단편화
모바일 AP Mobile Application Processor System-on-Chip 여러 GPU 제조사 & 여러아키텍쳐 Arm - Mali ( Utgard / Midgard / Bifrost ) ImgTec Power VR ( SGX / Rogue ) Apple A11 Bionic Qualcomm Adreno Etc 이후내용들은널리통용되는기종들위주로 < 이미지출저 : https://www.anandtech.com/show/7846/the-difference-between-snapdragon-800-and-801-clearing-up-confusion >
모바일 AP 갤럭시시리즈 : Exynos Adreno / Mali GPU iphone 시리즈 ( 6S, SE, 7 ) : A9, A10 Fusion Power VR GPU iphone 시리즈 ( 8, X ) : A11 Bionic 자체개발 GPU ( Metal 2 지원 )
모바일 GPU Unified Shader Architecture 모든 Shader Processing Unit 이어떤타입의셰이딩연산이든처리 VS, GS, TS, PS, CS, < 이미지출저 : https://community.arm.com/graphics/b/blog/posts/the-mali-gpu-an-abstract-machine-part-3---the-midgard-shader-core >
< 이미지출저 : http://www.embedded-computing.com/embedded-computing-design/understand-the-mobile-graphics-processing-unit
모바일 GPU Unified Memory Architecture CPU 와같은 Physical Memory CPU 와다른 Logical Memory 과거에는 GPU 만접근가능한 Window 를지정 GPU <-> CPU 메모리접근 : 복사발생 CPU MMU 와 GPU 의 MMU 가같은주소공간을사용
모바일하드웨어 Battery 같은성능이라도저전력이라면더선호 메인메모리도 DDR 이아닌 LPDDR 을사용 메모리대역폭사용이많으면, 배터리소모도크다 Device Temperature 발열이심하면자동으로성능 Throttling CPU / GPU 의성능을크게낮춰기기가쉴수있게한다
모바일성능 다른플랫폼대비낮은 Memory Bandwidth Fillrate (Pixel/Texel) GFLOPS 성능을올리기위해 Tile-Based GPU Early Z Testing
모바일 GPU Tile-Based 일반적인 GPU 한장면 을그리기위해필요한리소스를 GPU 메모리에올려놓는다 리소스 : SceneColor / DepthStencil / Tile-based GPU 모든렌더링을타일단위로진행 Ex. 1024 x 768 (32 x 32) 768 Tiles Tile 크기는제조사마다다름 < 이미지출저 : https://www.imgtec.com/powervr/graphics/architecture/ >
모바일 GPU Tile-Based Tile-based GPU 한타일 을그리기위해필요한리소스만을 in-chip 메모리 에올려놓는다 In-chip 메모리와 ShaderCore 간의데이터전송은아주저렴 단점 한장면을여러타일로나누고관리하기위한추가적인관리비용 < 이미지출저 : https://www.anandtech.com/show/8234/arms-mali-midgard-architecture-explored/4 >
모바일 GPU Early Z Test < 이미지출저 : https://www.imgtec.com/powervr/graphics/architecture/ >
모바일 GPU Early Z Test Z Test = Depth Test 일반적인 Depth Test PS 후렌더링결과물을타겟에블렌딩할지결정 Test 실패시 Drop Early Z Test 일반적인 Depth Test Pixel Shading 전에미리 Drop 여부판단 Vendor/Architecture 마다다른접근법을추가 Mali GPU Forward Pixel Kill PowerVR GPU Hidden Surface Removal < 이미지출저 : https://www.imgtec.com/powervr/graphics/architecture/ >
모바일 GPU 단편화 Ex. 같은 ES3.1 인데, 어느기종은되고다른기종은안되고 Ex. 같은제조사같은모델이지만, 어느디바이스는되고다른디바이스는안되고 GPU 제조사 GPU Architecture 모바일 AP / 디바이스제조사 그래픽스드라이버스택 Ex. GPU 는 ES3.1 을지원하지만, 드라이버가지원 X Ex. 빌드버전 A 에서는안되었지만, B 에서는동작
모바일 GPU 단편화 Metal 단편화가거의없음. 하나의제조사가모든것을관리 OpenGL ES glgetstring( ) GL_VENDOR / GL_RENDERER / GL_VERSION / GL_SHADING_LANGUAGE_VERSION / GL_EXTENSIONS UE4 FPlatformOpenGLDevice::Init() / FOpenGLBase::ProcessExtensions( ) UE4 렌더링그래픽스 API 결정 : Ex. OpenGL ES2.0 과 ES3.1 UE4 디바이스별 Feature 결정 : Ex. GL_OES_texture_half_float ES2 fallback
UE4 모바일씬렌더러 Feature Level / 렌더러분석 / 라이팅과그림자
플랫폼별지원그래픽스렌더링 API Desktop Windows = D3D / OpenGL / Vulkan macos = Metal / OpenGL / Vulkan Linux = OpenGL / Vulkan Mobile Android = OpenGL ES / Vulkan ios = Metal / OpenGL ES 3.0 / Vulkan HTML = WebGL
UE4 지원그래픽스렌더링 API Desktop Windows = D3D / OpenGL / Vulkan(Experimental) macos = Metal / OpenGL / Vulkan Linux = OpenGL / Vulkan(Experimental) Mobile Android = OpenGL ES / Vulkan(Experimental) ios = Metal / OpenGL ES 3.0 / Vulkan HTML = WebGL
UE4 지원그래픽스렌더링 API 언리얼엔진에서관리법 플랫폼및버전을떠나지원되는기능단위구분 Feature Level ES2 : OpenGL ES2.0 ES3_1 : OpenGL ES3.1 & Metal & Vulkan SM4 : DX10 & OpenGL 3 SM5 : DX11+ & OpenGL 4+
UE4 렌더러 렌더러? 렌더링파이프라인 하나의 Geometry 를그리는과정 RenderState 설정 Draw Call 로시작 최종결과물 RenderTarget 은텍스쳐혹은프레임버퍼 < 이미지출저 : https://open.gl/drawing >
UE4 렌더러 렌더러? 렌더링패스 여러지오메트리를엔진레벨에서한데묶어그리는것. Ex. BasePass Pass / Light Pass / Translucency Pass 즉, 하나의패스에서여러 DrawCall 을요청. Rendering Pass < 이미지출저 : http://vispy.org/modern-gl.html>
UE4 렌더러 렌더러? 여러패스와연산을통해, 데이터로이루어진씬을그려내는역할 Rendering Pass A Renderer Rendering Pass B Rendering Pass C 각 Geometry 을그리는방식에따라크게두가지로구분 Deferred / Forward Shading
UE4 렌더러 Deferred Shading For each mesh Render albedo/normal/etc into G-buffer Render each light Read infos from G-buffer Accumulate lighting Forward Shading For each mesh For each light Accumulate lighting
UE4 렌더러 Deferred Shading Gbuffer 사용을기반으로합성 지연된패스에서 Shading 계산 다이나믹라이팅렌더링에좋음 Surface attribute 변경불편 기능비활성화에유연 Forward Shading 하나의패스에서 Shading 계산 Translucent Surface 렌더링에좋음 동적라이트추가시성능부하가크다 Surface Attribute 에유연 하드웨어 MSAA 를사용할수있음
UE4 렌더러 Deferred Shading in UE4 PC / Console 용 (SM4 이상지원 ) Deferred Scene Renderer Forward Shading in UE4 Mobile 용 (ES3_1 이하 ) Mobile Scene Renderer
UE4 렌더러 Mobile Deferred Shading? G-buffer 를위해 Multiple Render Target 기능이필요 OpenGL ES 3.0 / Metal Specification 현재지원하지않고있다. G-buffer 사용시많은대역폭요구 / 복잡한연산필요 현세대의디바이스에서게임을플레이가능할정도의성능이나오지않음 언젠가디바이스가더발전을한다면? 대안 : Desktop-Class Forward Renderer (ios only) 모바일에서높은퀄리티요구에대한대안 메탈세이더를데스크탑포워드렌더러기준으로컴파일
Mobile Scene Renderer 동작방식분석 프로젝트 Sun Temple = Mobile Features 쇼케이스 RenderDoc 그래픽스디버거 독립프로그램 UE4 플러그인통합제공 패스별결과분석에용이 다운로드 : https://developer.nvidia.com/ue4-sun-temple
Mobile Scene Renderer 사용법
Mobile Scene Renderer 위 아래 중요함수 / 렌더패스순차나열 패스내 DrawCall 각각확인가능 중요한부분만간추리면 InitViews MobileBasePass Translucency PostProcessing
Mobile Scene Renderer InitViews 그려질 Geometry 를선별 Mobile Base Pass 불투명한 Geometry 를그린다 Translucency Pass 반투명한 Geometry 를그린다 PostProcessing 후처리를한다
Mobile Scene Renderer 1. 그려질 Geometry 를선별 FSceneRenderer::initView( ) 불필요한 Geometry 를그리지않는것은성능을아끼기에좋은방법 가시성 Visibility 확인 보이는것만목록에추가 Triangle 이아닌객체단위
UE4 모바일씬렌더러 1. 그려질 Geometry 를선별 가시성 Visibility 확인 in Mobile Distance Culling Frustum Culling Precomputed Visibility
Distance Culling
Frustum Culling
Precomputed Visibility
Mobile Scene Renderer 1. 그려질 Geometry 를선별 가시성 Visibility 확인 in Mobile Distance Culling Frustum Culling Precomputed Visibility Occlusion Culling (4.20 지원예정 ) Software Occlusion culling Hareware Occlusion queries 이어지는 < 포트나이트 > 모바일 : 오클루전컬링 by Dmitriy Dyomin 세션을참고하세요. 렌더링파이프라인레벨컬링 : Clipping, Back-face culling
Mobile Scene Renderer 1. 그려질 Geometry 를선별 관련콘솔커맨드 stat initviews FreezeRendering 후 Fly 나 Ghost 활용
stat initviews
FreezeRendering 후 Fly / Ghost
Mobile Scene Renderer 2. 불투명한 Geometry 를그린다 FMobileSceneRenderer::RenderMobileBasePass( ) 각 Geometry 에대해 라이팅 Lighting & 그림자 Shadows 제일중요하고제일복잡한패스 라이팅 & 그림자 는두가지접근이존재 Dynamic / Static
Mobile Scene Renderer 2. 불투명한 Geometry 를그린다 Dynamic Lighting & Shadows 라이팅 라이트는타입 ( 포인트, 스포트 ) 에따라다른모양의바운드를갖는다 바운드내에존재하는지오메트리는라이팅받는다고판단 지오메트리셰이딩연산시영향을주는라이트에추가 그림자 주로 Shadow Map 사용 픽셀에서주어진라이트가보이는지보이지않는지판단 라이트에서씬을바라보는깊이정보가필요
Mobile Scene Renderer 2. 불투명한 Geometry 를그린다 Dynamic Lighting & Shadows 장점 라이트의색, 위치, 추가 / 제거를마음대로할수있다. 지오메트리를그리기위해추가적인준비를할필요가없다. 단점 그림자는성능에큰영향을준다 라이트를추가하는것도성능에큰영향을준다
Mobile Scene Renderer 2. 불투명한 Geometry 를그린다 Dynamic Lighting & Shadows in UE4 Mobile 라이팅 Movable 디렉셔널라이트지원 ( 기본값 : False) 포인트라이트제한된 Movable 지원 ( 최대 4 개 ) 스포트라이트 Movable 미지원 그림자 Cascaded Shadow Map 만지원
Mobile Scene Renderer 2. 불투명한 Geometry 를그린다 Static Lighting & Shadows 라이팅결과가변하지않는다면, 미리계산해놓고필요할때가져다쓸수있다. Real-time 에성능세이브 + Offline 에시간을충분히쓸수있어퀄리티도더좋다 즉, Dynamic Lighting & Shadows 보다적은비용으로높은퀄리티를얻을수있다.
Mobile Scene Renderer 2. 불투명한 Geometry 를그린다 Static Lighting & Shadows 장점 실시간에엄청빠르다 복잡한라이팅시나리오를계산할수있다. 실제같은그림자표현이가능하다. 단점 추가적인메모리를차지한다 라이팅빌드시시간이많이든다 무언가변경이있을때마다라이트재빌드를해야한다
UE4 Precomputed / Precalculated 라이트매스 Directional LightMap ShadowMap Precomputed Radiance Transfer Indirect Lighting Cache Volumetric Lightmap 리플렉션캡쳐 Image Based Lighting 메시디스턴스필드 DF Shadows DF Indirect Shadows DF Ambient Occlusion
UE4 Precomputed / Precalculated 라이트매스 Directional LightMap ShadowMap Precomputed Radiance Transfer Indirect Lighting Cache Volumetric Lightmap (SM4) 리플렉션캡쳐 Image Based Lighting 메시디스턴스필드 DF Shadows DF Indirect Shadows (SM5) DF Ambient Occlusion (SM5) 모바일에서는위와같은, 미리계산된라이팅 / 정보지원
Mobile Scene Renderer 2. 불투명한 Geometry 를그린다 Static Lighting & Shadows in UE4 Mobile 라이팅 모든타입 ( 디렉셔널, 포인트, 스포트 ) 의 Static Mobility 라이트지원 Stationary Directional Light 지원 Indirect 라이팅지원 그림자 구워진라이트맵혹은셰도우맵사용 스태틱메시에대해 Distance Field Shadow 사용가능
Mobile Scene Renderer 2. 불투명한 Geometry 를그린다 최고의방법은, Dynamic 과 Static 을잘섞어쓰는것 Static 방식 원거리의약한라이팅을표현할때사용하여성능을아낌 실시간간접광을얻어올수있는유일한방법 Dynamic 방식 씬이플레이어의행동에반응하는것처럼만들기위한방법 정적인라이팅 / 그림자에동적인형태를덧입혀현실감을추가 Stationary Directional Light = Directional Lightmap + CSM
UE4 모바일씬렌더러 2. 불투명한 Geometry 를그린다 정리! 모바일지원라이팅기능 Directional Lightmaps Indirect Light Cache Image based specular lighting Linear HDR Lighting Distance field shadows + analytical specular on the sun Baked Shadow 혹은 Cascaded Shadow Map Dynamic Mesh 는라이팅받음.
UE4 모바일씬렌더러 2. 불투명한 Geometry 를그린다 Color Range 변경
UE4 모바일씬렌더러 3. 반투명한 Geometry 를그린다 FMobileSceneRenderer::RenderTranslucency( ) 반투명한물체들은뒤에비춰보일수있는배경이필요 Geometry 를그리는것은크게다르지않으나 덮어쓰기가아닌 Alpha Blending 진행
UE4 모바일씬렌더러 3. 반투명한 Geometry 를그린다
UE4 모바일씬렌더러 4. 후처리를한다 FPostProcessing::ProcessES2( ) 후처리 : 렌더링과정제일마지막에적용되는비주얼이펙트 Off-screen 렌더타겟들 (SceneColor/SceneDepth/etc) 사용 픽셀셰이더바운드 모바일과다른플랫폼의기능 / 퀄리티차이가가장많이나는부분
UE4 모바일씬렌더러 4. 후처리를한다 UE4 의모바일포스트프로세싱 퀄리티를조금희생하더라도, 성능을확보하도록구현 필수 : Mobile HDR True
UE4 포스트프로세싱 In Deferred Renderer ColorGrading WhiteBalance Global Shadows Midtones Highlights Misc Film MobileTonemapper Lens Chromatic Aberration Bloom Dirt Mask Camera Exposure Lens Flares Image Effects Depth of Field Rendering Features Post Process Material Ambient Cubemap Ambient Occlusion Global Illunmination Motion Blur Light Propagation Volume Screen Space Reflection Misc
UE4 모바일포스트프로세싱 r.mobilehdr 1 & r.mobile.tonemapperfilm 1 ColorGrading WhiteBalance Global Shadows Midtones Highlights Misc Film MobileTonemapper Lens Chromatic Aberration Bloom (Limited) Dirt Mask Camera (Limited) Exposure (Limitied) Lens Flares Image Effects Depth of Field (Limited) Rendering Features Post Process Material Ambient Cubemap Ambient Occlusion Global Illunmination Motion Blur Light Propagation Volume Screen Space Reflection Misc
UE4 모바일포스트프로세싱 r.mobilehdr 1 & r.mobile.tonemapperfilm 0 ColorGrading WhiteBalance Global Shadows Midtones Highlights Misc Film MobileTonemapper Lens Chromatic Aberration Bloom (Limited) Dirt Mask Camera (Limited) Exposure (Limitied) Lens Flares Image Effects (Limited) Depth of Field (Limited) Rendering Features Post Process Material Ambient Cubemap Ambient Occlusion Global Illunmination Motion Blur Light Propagation Volume Screen Space Reflection Misc 참조 : https://docs.unrealengine.com/en-us/platforms/mobile/postprocesseffects
UE4 모바일씬렌더러 4. 후처리를한다
Tips UE4 모바일프리뷰 / Tips / 모바일최적화
UE4 모바일프리뷰 모바일플랫폼개발을돕기위한편의기능 모바일 Feature 시뮬레이션 모바일그래픽스렌더링 API : OpenGL ES / Metal / Vulkan PC 는 Metal / OpenGL ES 지원하지않음 어떻게? D3D11 / OpenGL 의일부 Feature 만사용 시뮬레이션 실제디바이스에서와동일한셰이딩퀄리티를보장하지않음.
모바일렌더링 Tips 모바일 GPU 에서 Read back 은엄청느리다 GPU 메모리위의 FrambeBuffer 에대한 ReadPixel 발생시 모든타일이완료된후에원하는 Pixel 정보를돌려준다 즉, 그래픽스파이프라인이멈추게되어성능이크게떨어진다 드라이버레벨최적화 Ex. Opaque 가한번도그려지지않은타일에대해깊이버퍼초기화생략 깊이정보를가져다쓰는연출에서문제를일으키기도.. 성능쓰로틀링 Silver Bullet 은없다. CPU / GPU 를자주쉬게해주어야한다.
모바일최적화 Application Processor 최적화 API Level 최적화 Vertex Processing 최적화 Fragment Processing 최적화 Bandwidth 최적화 Misc. 최적화 https://developer.arm.com/docs/dui0555/b/miscellaneous-optimizations
UE4 모바일최적화 Draw call 최소화 드로우콜발생시어떤지오메트리를그리냐에무관하게 항상 메모리할당, 데이터복사등 프로세스진행 최대한메시가배칭되도록컨텐츠를구성하세요 RenderState 변경최소화 그래픽스파이프라인은상태머신 / 상태변경하나하나가오버헤드 이전상태가남아서다음지오메트리그릴때영향을주는형태 UE4 는패스별지오메트리특성별로그룹화시킴.. 렌더러수정시유의 성능을올리려면그래픽스파이프라인이쉬지않도록
UE4 모바일최적화 Vertex Processing LOD 를적극적으로사용하세요 세세한지오메트리는노멀맵으로대체 객체단위컬링을대충하고, Triangle Clipping 에기댄다면그래픽스파이프라인에게큰부담 Pixel Processing Overdraw 를최대한줄이세요. 성능버짓에따라가용할만한복잡도의 Pixel Shader 사용 전체해상도를줄여연산할픽셀수조절 : r.screenpercentage {%}
UE4 모바일최적화 메모리대역폭 데스크탑 GPU 대비많이부족한스펙 : 모바일플랫폼의주된병목 대역폭은공유자원 CPU 등에서크고빈번한데이터접근시, GPU 가사용할대역폭이부족 GPU 에서너무많이메모리대역폭사용시, CPU 가제성능을못냅니다 메모리대역폭절약 = 배터리소모최소화 캐시의활용은성능확보및배터리절약에도도움이됩니다. 텍스쳐밉맵 / 텍스쳐압축 / 가능한낮은 Bit depth / LOD
감사합니다. QnA