SlideShare a Scribd company logo
1 of 31
Forward / Deferred
Rendering
데브루키 쿵쾅
Unreal Engine 4 Forward / Deferred Rendering
00
주제 선정 이유
때는 2016년 대학시절...
시작해요 언리얼 2016 전국 투어 부산에 참여.
포워드 렌더링은 신기술이라고 생각해버린
무지했던 그 시절… (이불킥)
(퀄리티가 개선된 포워드 렌더링임)
Unreal Engine 4 Forward / Deferred Rendering
00
주제 선정 이유
만들어만 봤기에 리마인드
Unreal Engine 4 Forward / Deferred Rendering
00
주제 선정 이유
언리얼 엔진에서는 기본적으로 Deferred, 모바일 디바이스에서는 Forward를 사용.
왜 그런지 좀 더 깊이 이해보자!
Unreal Engine 4 Forward / Deferred Rendering
00
주제 선정 이유
언리얼 서밋에서 나왔던 내용을 공부해서 발표하기 위한 선행 발표
가 필요하다는 느낌으로 준비.
Unreal Engine 4 Forward / Deferred Rendering
01
Forward Rendering?
전통적인 렌더링 방식 (신기술 아님)
오브젝트 하나를 그리는데 다음과 같은 과정을 거친다
(렌더링 파이프라인)
즉시 Back Buffer에 그린다.
Unreal Engine 4 Forward / Deferred Rendering
01
Forward Rendering
과거의 게임들은 Forward Rendering
하드웨어의 지원을 받는 안티 앨리어싱 처리
반투명 처리
Unreal Engine 4 Forward / Deferred Rendering
01
Forward Rendering 문제점
많은 조명을 연산하는데 부하가 크다 (Object * Light)
보여지지 않는 부분도 조명 연산을 한다.
조명 연산 부하. 아래의 그림에서 조명이 100개라면 300번의 조명 연산을 하게 된다.
조명 연산 x 2 조명 연산 x 4 조명 연산 x 6
Unreal Engine 4 Forward / Deferred Rendering
02
Deferred Rendering
Forward Rendering의 조명 연산 문제를 해결하기 위해 나온 렌더링 기법
필요한 장면들을 먼저 그린 후 GBuffer라는 곳에 저장
GBuffer의 장면을 합성하여 최종 결과물을 렌더링하는 기법
Unreal Engine 4 Forward / Deferred Rendering
02
GBuffer
GBuffer (Geometry Buffer)는 렌더 타겟(Texture)들을 모아둔 버퍼
MRT (Multi Render Target)을 이용하여 그린 후 GBuffer라 불리는 메
모리 상에 저장한다.
색상만 그려놓은 Albedo
조명 연산을 위한 Normal
장면에서 위치 값을 얻기 위한 Depth
재질을 표현할 수 있는 Sepcular
등 필요한 정보들을 기본적으로 기록한다.
Unreal Engine 4 Forward / Deferred Rendering
02
GBuffer
MRT는 DX9에서는 최대 4장 DX11에서는 최대 8장을 세팅하여 그릴 수 있다.
1 Pass에 연산에 필요한 장면들을 그리고 GBuffer에 저장.
2 Pass에 GBuffer의 텍스처를 가져와서 연산이 완료된 장면을 그린 후
Back Buffer에 합성하여 최종 장면을 그린다.
Unreal Engine 4 Forward / Deferred Rendering
02
Deferred 조명 연산
각 필요 장면을 그리고
조명의 개수만큼 Normal과 Depth에 연산
(조명 개수 * 픽셀수)
오브젝트 수는 조명 연산과 관계없다.
다수의 동적인 라이트 사용에 유리하다.
GBuffer
Unreal Engine 4 Forward / Deferred Rendering
03
Deferred Rendering
필요한 정보를 그려 GBuffer에 저장 후 그것을 이용하여 필요 연산을 지
연하여 그리기 때문에 지연(Deferred) 렌더링 또는 후처리 렌더링 이라고
한다.
Unreal Engine 4 Forward / Deferred Rendering
03
Deferred Rendering 단점
하드웨어 안티 앨리어싱 처리의 도움을 받을 수 없다.
반투명 처리가 힘들다. (Forward로 따로 그리는 방법을 사용)
Unreal Engine 4 Forward / Deferred Rendering
04
하드웨어 앨리어싱 지원을 못받는 이유는?
먼저 엘리어싱이 무엇이고 어떻게 처리하는지 본다.
엘리어싱 현상은 모니터 화면을 그릴 때 정점 데이터를 이용하여 레스터라이즈 단계에서
화면에 그릴 수 있는 픽셀이 부족하여 계단 처럼 보이는 현상이다.
Unreal Engine 4 Forward / Deferred Rendering
04
하드웨어 앨리어싱 지원을 못받는 이유는?
이때 Back Buffer에 그릴 때에는 하드웨어의 지원을 받아 안티 앨리어싱을 해준다.
안티 앨리어싱 기법으로 현재 픽셀과 주변 픽셀을 비교하여 중간색으로 만들어주는
색을 뭉개는 기법으로 계단 현상을 완화해 주는 것이다.
Unreal Engine 4 Forward / Deferred Rendering
04
하드웨어 앨리어싱 지원을 못받는 이유는?
만일 Deferred Rendering을 위해 GBuffer에 저장할 Texture에 하드웨어 안티 앨리어싱 처
리를 하여 뭉게 지는 경우 정확한 최종 장면 연산을 할 수 없을 것이다. 그렇기 때문에 렌
더 타겟에 그릴 때에는 하드웨어 안티 앨리어싱을 지원하지 않는다.
그래서 디퍼드에서 안티 앨리어싱을 하기 위해서는 직접 최종 장면에서 구현해야한다.
현세대 고성능 PC 게임은 디퍼드로 그리면서 다양한 안티 앨리어싱 옵션을 제공한다.
그것을 보고 디퍼드에서 사용할 수 있는 안티 앨리어싱 기법들을 찾아보면 좋을 것이다.
Unreal Engine 4 Forward / Deferred Rendering
05
반투명 처리가 힘든 이유?
우선 캐릭터가 반투명 창문 뒤에 있다고 생각한다.
이때 캐릭터가 보이도록 창문을 그린 것 까지는 좋았다. Albedo는 잘 그릴 것이다.
Unreal Engine 4 Forward / Deferred Rendering
05
반투명 처리가 힘든 이유?
그런데 Normal과 Depth를 그릴 경우 문제가 생긴다.
마지막으로 그려진 창문의 Normal과 Depth 값으로 캐릭터가 가려진채로 그려진다.
이렇게 되면 캐릭터는 정상적인 조명 연산 처리를 할 수 없다.
그렇기 때문에 반투명 처리가 힘들어 Deferred로 그린 후 반투명은 Forward로 그리는 처리를 해준다.
Unreal Engine 4 Forward / Deferred Rendering
06
언리얼이 모바일 또는 VR에서 다시 Forward를 사용하는 이유
모바일의 경우 하드웨어 특성상 CPU와 GPU가 결합된 형태이고 메모리를 많이 사용할 수록 발열과 배
터리 소모가 심해진다. 또 하드웨어 적으로 Tile Based Rendering을 지원하여 타일을 나눠 변경된 부분
만 새로 그리는 방법으로 메모리를 절약하고 있다.
그런 폰 위에서 Deferred Rendering을 사용한다면 메모리 과사용으로 스마트폰으로 장시간 게임을 할
수 없기 때문에 Forward를 택했을 것이다.
Unreal Engine 4 Forward / Deferred Rendering
06
언리얼이 모바일 또는 VR에서 다시 Forward를 사용하는 이유
VR의 경우 Oculus 기준으로 정해진 최소 사양에서 90FPS 이상 나오지 않을 경우 게임을 업로드 할 수
없다. 사용자 경험을 망친다는 이유에서 이다. 그리고 VR 화면은 2개의 화면을 그리고 또 그 해상도도
매우 높기 때문에 Deferred Rendering을 사용할 경우 성능이 저하 될 것이다.
그렇기에 Unreal Engine 4에서는 VR을 위해 모바일용이 아닌 Forward Rendering를 지원하기 시작하
였다.
Unreal Engine 4 Forward / Deferred Rendering
07
DX9에서 구현했던 방법
GBuffer에서 사용할 Render Target Texture를 생성
https://github.com/4roring/KK1_Eternal_Crusade/blob/master/Engine/Utility/Code/Renderer.cpp
Unreal Engine 4 Forward / Deferred Rendering
07
DX9에서 구현했던 방법
장치에 연산에 필요한 장면을 그리기 위한 렌더 타겟 세팅
Unreal Engine 4 Forward / Deferred Rendering
07
DX9에서 구현했던 방법
Vertex 연산 후 Pixel 연산에서 Out에 각 연산에 필요 정보를 나눠 그리는 것을 볼 수 있다.
각 렌더 타겟에 그리는 것.
Unreal Engine 4 Forward / Deferred Rendering
07
DX9에서 구현했던 방법
이제 GBuffer에 있는 텍스처들을 쉐이더에 세팅.
Unreal Engine 4 Forward / Deferred Rendering
07
DX9에서 구현했던 방법
GBuffer의 정보를 이용하여 조명 연산.
Unreal Engine 4 Forward / Deferred Rendering
07
DX9에서 구현했던 방법
최종적으로 장면 연산
Unreal Engine 4 Forward / Deferred Rendering
부록
UE4 Insight
원래는 좀 더 언리얼 엔진 내부에서 렌더링할 때 일어나는 일을 정리하고 싶었으나
다음 기회에 진행하도록 하고 부록으로 Unreal 4.23부터 사용할 수 있는 프로파일링 데이터
시각화 툴이 있다는 것을 소개한다.
아직 한글화된 공식 문서는 없기에 영어 문서만 존재하고 아래의 경로에서 실행하거나
Github에서 엔진 풀소스를 받으면 프로젝트 중 UnrealInsight가 있어서 직접 빌드하여 사용
하면 된다.
https://docs.unrealengine.com/en-US/Engine/Performance/UnrealInsights/index.html
Unreal Engine 4 Forward / Deferred Rendering
UE4 Insight
엔진 또는 게임보다 툴을 먼저 켠다.
부록
Unreal Engine 4 Forward / Deferred Rendering
UE4 Insight
그 후 프로파일링을 진행할 UE4로 만들어진 게임 또는 언리얼 엔진을 켜면 기록이 시작된다.
부록
THANK
YOU

More Related Content

What's hot

나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019devCAT Studio, NEXON
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술henjeon
 
아티스트에게 사랑받는 3DS Max 우버쉐이더
아티스트에게 사랑받는 3DS Max 우버쉐이더아티스트에게 사랑받는 3DS Max 우버쉐이더
아티스트에게 사랑받는 3DS Max 우버쉐이더포프 김
 
[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머포프 김
 
Ue4 에서의 환경변화 구현
Ue4 에서의 환경변화 구현Ue4 에서의 환경변화 구현
Ue4 에서의 환경변화 구현kyuil choi
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11민웅 이
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow MappingSukwoo Lee
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .YEONG-CHEON YOU
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipelinechangehee lee
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPUYEONG-CHEON YOU
 
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기Madumpa Park
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5YEONG-CHEON YOU
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑Sukwoo Lee
 
언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링TonyCms
 
Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더동석 김
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법YEONG-CHEON YOU
 
언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.Wuwon Yu
 

What's hot (20)

나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
 
아티스트에게 사랑받는 3DS Max 우버쉐이더
아티스트에게 사랑받는 3DS Max 우버쉐이더아티스트에게 사랑받는 3DS Max 우버쉐이더
아티스트에게 사랑받는 3DS Max 우버쉐이더
 
[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머
 
Ue4 에서의 환경변화 구현
Ue4 에서의 환경변화 구현Ue4 에서의 환경변화 구현
Ue4 에서의 환경변화 구현
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow Mapping
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
 
High dynamic range
High dynamic rangeHigh dynamic range
High dynamic range
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑
 
Ndc11 이창희_hdr
Ndc11 이창희_hdrNdc11 이창희_hdr
Ndc11 이창희_hdr
 
언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링
 
Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
 
언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.
 

Similar to 191019 Forward / Deferred Rendering

NDC2015 유니티 정적 라이팅 이게 최선인가요
NDC2015 유니티 정적 라이팅 이게 최선인가요  NDC2015 유니티 정적 라이팅 이게 최선인가요
NDC2015 유니티 정적 라이팅 이게 최선인가요 Wuwon Yu
 
2015.12.10 defferd renderring_
2015.12.10 defferd renderring_2015.12.10 defferd renderring_
2015.12.10 defferd renderring_재현 최
 
20140929 vr for_slideshare
20140929 vr for_slideshare20140929 vr for_slideshare
20140929 vr for_slideshareSunghyeon Hwang
 
[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개진현 조
 
[0326 박민근] deferred shading
[0326 박민근] deferred shading[0326 박민근] deferred shading
[0326 박민근] deferred shadingMinGeun Park
 
[IGC 2016] 에픽게임스코리아 신광섭 - 언리얼 엔진4, VR과 AR
[IGC 2016] 에픽게임스코리아 신광섭 - 언리얼 엔진4, VR과 AR[IGC 2016] 에픽게임스코리아 신광섭 - 언리얼 엔진4, VR과 AR
[IGC 2016] 에픽게임스코리아 신광섭 - 언리얼 엔진4, VR과 AR강 민우
 
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 [KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 JiUng Choi
 
Unreal summit 2014 다시 보기
Unreal summit 2014 다시 보기Unreal summit 2014 다시 보기
Unreal summit 2014 다시 보기Dong Chan Shin
 
유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석SangYun Yi
 
gametech 2012 Gladius project
gametech 2012 Gladius projectgametech 2012 Gladius project
gametech 2012 Gladius projectWuwon Yu
 
[박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱
[박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱[박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱
[박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱MinGeun Park
 
유니티 Rpg게임배경 스타트업 4번째 스터디자료
유니티 Rpg게임배경 스타트업 4번째 스터디자료유니티 Rpg게임배경 스타트업 4번째 스터디자료
유니티 Rpg게임배경 스타트업 4번째 스터디자료Je Lyoung Kim
 
Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Minsu Park
 
190720 언리얼 서밋 2일차 리뷰
190720 언리얼 서밋 2일차 리뷰190720 언리얼 서밋 2일차 리뷰
190720 언리얼 서밋 2일차 리뷰KWANGIL KIM
 

Similar to 191019 Forward / Deferred Rendering (17)

NDC2015 유니티 정적 라이팅 이게 최선인가요
NDC2015 유니티 정적 라이팅 이게 최선인가요  NDC2015 유니티 정적 라이팅 이게 최선인가요
NDC2015 유니티 정적 라이팅 이게 최선인가요
 
2015.12.10 defferd renderring_
2015.12.10 defferd renderring_2015.12.10 defferd renderring_
2015.12.10 defferd renderring_
 
Gametech2015
Gametech2015Gametech2015
Gametech2015
 
20140929 vr for_slideshare
20140929 vr for_slideshare20140929 vr for_slideshare
20140929 vr for_slideshare
 
[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개
 
[0326 박민근] deferred shading
[0326 박민근] deferred shading[0326 박민근] deferred shading
[0326 박민근] deferred shading
 
[IGC 2016] 에픽게임스코리아 신광섭 - 언리얼 엔진4, VR과 AR
[IGC 2016] 에픽게임스코리아 신광섭 - 언리얼 엔진4, VR과 AR[IGC 2016] 에픽게임스코리아 신광섭 - 언리얼 엔진4, VR과 AR
[IGC 2016] 에픽게임스코리아 신광섭 - 언리얼 엔진4, VR과 AR
 
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 [KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
 
Unreal summit 2014 다시 보기
Unreal summit 2014 다시 보기Unreal summit 2014 다시 보기
Unreal summit 2014 다시 보기
 
Devtree illu
Devtree illuDevtree illu
Devtree illu
 
Start unreal
Start unrealStart unreal
Start unreal
 
유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석
 
gametech 2012 Gladius project
gametech 2012 Gladius projectgametech 2012 Gladius project
gametech 2012 Gladius project
 
[박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱
[박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱[박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱
[박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱
 
유니티 Rpg게임배경 스타트업 4번째 스터디자료
유니티 Rpg게임배경 스타트업 4번째 스터디자료유니티 Rpg게임배경 스타트업 4번째 스터디자료
유니티 Rpg게임배경 스타트업 4번째 스터디자료
 
Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)
 
190720 언리얼 서밋 2일차 리뷰
190720 언리얼 서밋 2일차 리뷰190720 언리얼 서밋 2일차 리뷰
190720 언리얼 서밋 2일차 리뷰
 

More from KWANGIL KIM

210320 웹 통신
210320 웹 통신210320 웹 통신
210320 웹 통신KWANGIL KIM
 
191221 unreal engine 4 editor 확장하기
191221 unreal engine 4 editor 확장하기191221 unreal engine 4 editor 확장하기
191221 unreal engine 4 editor 확장하기KWANGIL KIM
 
190406 신입 클라이언트 프로그래머 1개월차까지 이야기
190406 신입 클라이언트 프로그래머 1개월차까지 이야기190406 신입 클라이언트 프로그래머 1개월차까지 이야기
190406 신입 클라이언트 프로그래머 1개월차까지 이야기KWANGIL KIM
 
190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁KWANGIL KIM
 
181215 MS SQL로 알아보는 데이터베이스
181215 MS SQL로 알아보는 데이터베이스181215 MS SQL로 알아보는 데이터베이스
181215 MS SQL로 알아보는 데이터베이스KWANGIL KIM
 
포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++KWANGIL KIM
 
OnePointLesson PriorityQueue 우선순위 큐
OnePointLesson PriorityQueue 우선순위 큐OnePointLesson PriorityQueue 우선순위 큐
OnePointLesson PriorityQueue 우선순위 큐KWANGIL KIM
 

More from KWANGIL KIM (7)

210320 웹 통신
210320 웹 통신210320 웹 통신
210320 웹 통신
 
191221 unreal engine 4 editor 확장하기
191221 unreal engine 4 editor 확장하기191221 unreal engine 4 editor 확장하기
191221 unreal engine 4 editor 확장하기
 
190406 신입 클라이언트 프로그래머 1개월차까지 이야기
190406 신입 클라이언트 프로그래머 1개월차까지 이야기190406 신입 클라이언트 프로그래머 1개월차까지 이야기
190406 신입 클라이언트 프로그래머 1개월차까지 이야기
 
190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁
 
181215 MS SQL로 알아보는 데이터베이스
181215 MS SQL로 알아보는 데이터베이스181215 MS SQL로 알아보는 데이터베이스
181215 MS SQL로 알아보는 데이터베이스
 
포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++
 
OnePointLesson PriorityQueue 우선순위 큐
OnePointLesson PriorityQueue 우선순위 큐OnePointLesson PriorityQueue 우선순위 큐
OnePointLesson PriorityQueue 우선순위 큐
 

191019 Forward / Deferred Rendering

  • 2. Unreal Engine 4 Forward / Deferred Rendering 00 주제 선정 이유 때는 2016년 대학시절... 시작해요 언리얼 2016 전국 투어 부산에 참여. 포워드 렌더링은 신기술이라고 생각해버린 무지했던 그 시절… (이불킥) (퀄리티가 개선된 포워드 렌더링임)
  • 3. Unreal Engine 4 Forward / Deferred Rendering 00 주제 선정 이유 만들어만 봤기에 리마인드
  • 4. Unreal Engine 4 Forward / Deferred Rendering 00 주제 선정 이유 언리얼 엔진에서는 기본적으로 Deferred, 모바일 디바이스에서는 Forward를 사용. 왜 그런지 좀 더 깊이 이해보자!
  • 5. Unreal Engine 4 Forward / Deferred Rendering 00 주제 선정 이유 언리얼 서밋에서 나왔던 내용을 공부해서 발표하기 위한 선행 발표 가 필요하다는 느낌으로 준비.
  • 6. Unreal Engine 4 Forward / Deferred Rendering 01 Forward Rendering? 전통적인 렌더링 방식 (신기술 아님) 오브젝트 하나를 그리는데 다음과 같은 과정을 거친다 (렌더링 파이프라인) 즉시 Back Buffer에 그린다.
  • 7. Unreal Engine 4 Forward / Deferred Rendering 01 Forward Rendering 과거의 게임들은 Forward Rendering 하드웨어의 지원을 받는 안티 앨리어싱 처리 반투명 처리
  • 8. Unreal Engine 4 Forward / Deferred Rendering 01 Forward Rendering 문제점 많은 조명을 연산하는데 부하가 크다 (Object * Light) 보여지지 않는 부분도 조명 연산을 한다. 조명 연산 부하. 아래의 그림에서 조명이 100개라면 300번의 조명 연산을 하게 된다. 조명 연산 x 2 조명 연산 x 4 조명 연산 x 6
  • 9. Unreal Engine 4 Forward / Deferred Rendering 02 Deferred Rendering Forward Rendering의 조명 연산 문제를 해결하기 위해 나온 렌더링 기법 필요한 장면들을 먼저 그린 후 GBuffer라는 곳에 저장 GBuffer의 장면을 합성하여 최종 결과물을 렌더링하는 기법
  • 10. Unreal Engine 4 Forward / Deferred Rendering 02 GBuffer GBuffer (Geometry Buffer)는 렌더 타겟(Texture)들을 모아둔 버퍼 MRT (Multi Render Target)을 이용하여 그린 후 GBuffer라 불리는 메 모리 상에 저장한다. 색상만 그려놓은 Albedo 조명 연산을 위한 Normal 장면에서 위치 값을 얻기 위한 Depth 재질을 표현할 수 있는 Sepcular 등 필요한 정보들을 기본적으로 기록한다.
  • 11. Unreal Engine 4 Forward / Deferred Rendering 02 GBuffer MRT는 DX9에서는 최대 4장 DX11에서는 최대 8장을 세팅하여 그릴 수 있다. 1 Pass에 연산에 필요한 장면들을 그리고 GBuffer에 저장. 2 Pass에 GBuffer의 텍스처를 가져와서 연산이 완료된 장면을 그린 후 Back Buffer에 합성하여 최종 장면을 그린다.
  • 12. Unreal Engine 4 Forward / Deferred Rendering 02 Deferred 조명 연산 각 필요 장면을 그리고 조명의 개수만큼 Normal과 Depth에 연산 (조명 개수 * 픽셀수) 오브젝트 수는 조명 연산과 관계없다. 다수의 동적인 라이트 사용에 유리하다. GBuffer
  • 13. Unreal Engine 4 Forward / Deferred Rendering 03 Deferred Rendering 필요한 정보를 그려 GBuffer에 저장 후 그것을 이용하여 필요 연산을 지 연하여 그리기 때문에 지연(Deferred) 렌더링 또는 후처리 렌더링 이라고 한다.
  • 14. Unreal Engine 4 Forward / Deferred Rendering 03 Deferred Rendering 단점 하드웨어 안티 앨리어싱 처리의 도움을 받을 수 없다. 반투명 처리가 힘들다. (Forward로 따로 그리는 방법을 사용)
  • 15. Unreal Engine 4 Forward / Deferred Rendering 04 하드웨어 앨리어싱 지원을 못받는 이유는? 먼저 엘리어싱이 무엇이고 어떻게 처리하는지 본다. 엘리어싱 현상은 모니터 화면을 그릴 때 정점 데이터를 이용하여 레스터라이즈 단계에서 화면에 그릴 수 있는 픽셀이 부족하여 계단 처럼 보이는 현상이다.
  • 16. Unreal Engine 4 Forward / Deferred Rendering 04 하드웨어 앨리어싱 지원을 못받는 이유는? 이때 Back Buffer에 그릴 때에는 하드웨어의 지원을 받아 안티 앨리어싱을 해준다. 안티 앨리어싱 기법으로 현재 픽셀과 주변 픽셀을 비교하여 중간색으로 만들어주는 색을 뭉개는 기법으로 계단 현상을 완화해 주는 것이다.
  • 17. Unreal Engine 4 Forward / Deferred Rendering 04 하드웨어 앨리어싱 지원을 못받는 이유는? 만일 Deferred Rendering을 위해 GBuffer에 저장할 Texture에 하드웨어 안티 앨리어싱 처 리를 하여 뭉게 지는 경우 정확한 최종 장면 연산을 할 수 없을 것이다. 그렇기 때문에 렌 더 타겟에 그릴 때에는 하드웨어 안티 앨리어싱을 지원하지 않는다. 그래서 디퍼드에서 안티 앨리어싱을 하기 위해서는 직접 최종 장면에서 구현해야한다. 현세대 고성능 PC 게임은 디퍼드로 그리면서 다양한 안티 앨리어싱 옵션을 제공한다. 그것을 보고 디퍼드에서 사용할 수 있는 안티 앨리어싱 기법들을 찾아보면 좋을 것이다.
  • 18. Unreal Engine 4 Forward / Deferred Rendering 05 반투명 처리가 힘든 이유? 우선 캐릭터가 반투명 창문 뒤에 있다고 생각한다. 이때 캐릭터가 보이도록 창문을 그린 것 까지는 좋았다. Albedo는 잘 그릴 것이다.
  • 19. Unreal Engine 4 Forward / Deferred Rendering 05 반투명 처리가 힘든 이유? 그런데 Normal과 Depth를 그릴 경우 문제가 생긴다. 마지막으로 그려진 창문의 Normal과 Depth 값으로 캐릭터가 가려진채로 그려진다. 이렇게 되면 캐릭터는 정상적인 조명 연산 처리를 할 수 없다. 그렇기 때문에 반투명 처리가 힘들어 Deferred로 그린 후 반투명은 Forward로 그리는 처리를 해준다.
  • 20. Unreal Engine 4 Forward / Deferred Rendering 06 언리얼이 모바일 또는 VR에서 다시 Forward를 사용하는 이유 모바일의 경우 하드웨어 특성상 CPU와 GPU가 결합된 형태이고 메모리를 많이 사용할 수록 발열과 배 터리 소모가 심해진다. 또 하드웨어 적으로 Tile Based Rendering을 지원하여 타일을 나눠 변경된 부분 만 새로 그리는 방법으로 메모리를 절약하고 있다. 그런 폰 위에서 Deferred Rendering을 사용한다면 메모리 과사용으로 스마트폰으로 장시간 게임을 할 수 없기 때문에 Forward를 택했을 것이다.
  • 21. Unreal Engine 4 Forward / Deferred Rendering 06 언리얼이 모바일 또는 VR에서 다시 Forward를 사용하는 이유 VR의 경우 Oculus 기준으로 정해진 최소 사양에서 90FPS 이상 나오지 않을 경우 게임을 업로드 할 수 없다. 사용자 경험을 망친다는 이유에서 이다. 그리고 VR 화면은 2개의 화면을 그리고 또 그 해상도도 매우 높기 때문에 Deferred Rendering을 사용할 경우 성능이 저하 될 것이다. 그렇기에 Unreal Engine 4에서는 VR을 위해 모바일용이 아닌 Forward Rendering를 지원하기 시작하 였다.
  • 22. Unreal Engine 4 Forward / Deferred Rendering 07 DX9에서 구현했던 방법 GBuffer에서 사용할 Render Target Texture를 생성 https://github.com/4roring/KK1_Eternal_Crusade/blob/master/Engine/Utility/Code/Renderer.cpp
  • 23. Unreal Engine 4 Forward / Deferred Rendering 07 DX9에서 구현했던 방법 장치에 연산에 필요한 장면을 그리기 위한 렌더 타겟 세팅
  • 24. Unreal Engine 4 Forward / Deferred Rendering 07 DX9에서 구현했던 방법 Vertex 연산 후 Pixel 연산에서 Out에 각 연산에 필요 정보를 나눠 그리는 것을 볼 수 있다. 각 렌더 타겟에 그리는 것.
  • 25. Unreal Engine 4 Forward / Deferred Rendering 07 DX9에서 구현했던 방법 이제 GBuffer에 있는 텍스처들을 쉐이더에 세팅.
  • 26. Unreal Engine 4 Forward / Deferred Rendering 07 DX9에서 구현했던 방법 GBuffer의 정보를 이용하여 조명 연산.
  • 27. Unreal Engine 4 Forward / Deferred Rendering 07 DX9에서 구현했던 방법 최종적으로 장면 연산
  • 28. Unreal Engine 4 Forward / Deferred Rendering 부록 UE4 Insight 원래는 좀 더 언리얼 엔진 내부에서 렌더링할 때 일어나는 일을 정리하고 싶었으나 다음 기회에 진행하도록 하고 부록으로 Unreal 4.23부터 사용할 수 있는 프로파일링 데이터 시각화 툴이 있다는 것을 소개한다. 아직 한글화된 공식 문서는 없기에 영어 문서만 존재하고 아래의 경로에서 실행하거나 Github에서 엔진 풀소스를 받으면 프로젝트 중 UnrealInsight가 있어서 직접 빌드하여 사용 하면 된다. https://docs.unrealengine.com/en-US/Engine/Performance/UnrealInsights/index.html
  • 29. Unreal Engine 4 Forward / Deferred Rendering UE4 Insight 엔진 또는 게임보다 툴을 먼저 켠다. 부록
  • 30. Unreal Engine 4 Forward / Deferred Rendering UE4 Insight 그 후 프로파일링을 진행할 UE4로 만들어진 게임 또는 언리얼 엔진을 켜면 기록이 시작된다. 부록

Editor's Notes

  1. http://minheeblog.tistory.com/category/PPT