티스토리 뷰
https://interplayoflight.wordpress.com/2017/10/25/how-unreal-renders-a-frame-part-3/
How Unreal Renders a Frame part 3
This is part 3 of the “How Unreal Renders a Frame” series, you can access part 1 and part 2 as well. In this blog post we are wrapping up the exploration of Unreal’s renderer with…
interplayoflight.wordpress.com
해당 게시물을 보고 공부한 내용입니다.
입자 시뮬레이션 → Z-prepass (Prepass 렌더 패스)→ 폐색 테스트→ Hi-Z 버퍼 생성→ 섀도우 맵 렌더링 →
라이트 그리드 생성 → Volumetric 안개 → G-프리패스 → 파티클 재검토 → 속도 (움직이는 물체) 렌더링 → AO → 조명 → 이미지 공간 조명 → 안개 및 대기 효과 → 투명도 렌더링 → 후처리
💡 13. 이미지 공간 조명
화면 공간 반사(screen space reflections - 줄여서 SSR)는 전체 화면(RGBA16_FLOAT 렌더 타겟 형식)에서 계산
셰이더는 프레임 시작 부분에서 계산된 Hi-Z 버퍼를 사용하여 표면 거칠기를 기반으로 레이마칭 중에 Hi-Z 밉을 선택함으로써 교차 계산 속도를 높인다. (반사 세부 사항이 표시되지 않는 거친 표면에 대해 레이 트레이싱을 더 거칠게 만든다.)
마지막으로 모든 프레임에서 광선 시작 위치가 지터링되어 시간적 안티앨리어싱과 결합되어 반사 이미지 품질이 향상된다. 셰이더는 레이마칭 중에 적중이 결정될 때 색상 샘플링을 위해 이전 프레임의 렌더 타겟을 사용.
위의 이미지에 표시한 부분을 보면 아직 파티클을 그리지 않았음에도 불 파티클이 존재하는 모습을 볼 수 있다.
화면 공간 반사는 컴퓨팅 셰이더( ReflectionEnvironment 패스) 를 사용하여 기본 렌더 대상에 적용된다. 셰이더는 장면의 두 반사 프로브에 의해 캡처된 환경 반사도 적용합니다. 반사는 밉매핑된 큐브맵에 저장.
환경 반사 프로브는 게임 시작 중에 생성되며 정적 형상만 캡쳐하여 동적 물체는 반사가 이루어지지 않는다.
위의 장면에서 의자 사이에 있는 꺼먼 물체가 동적 물체인 돌이다. 아래 이미지에서는 밉매핑된 큐브맵에서 돌의 모습을 확인할 수 없음을 보여준다.
💡 14. 안개 및 대기 효과
안개와 대기 효과가 다시 나타난다.
셰이더는 몇 번의 패스 전에 생성된 볼류메트릭 포그(Volumetric Fog) 볼륨 텍스처를 사용하며 솔리드 지오메트리 위치를 사용하여 샘플링한다. 위에서 계산한 라이트샤프트 마스크도 적용된다.
💡 15. 투명도 렌더링
솔리드 소품에 안개를 적용한 후 렌더러는 반투명 지오메트리와 효과를 처리.
투명도 렌더링을 활성화 시키기 위해 투명한 오브젝트를 추가.
화면에 반투명 조각상을 설치. 조각상은 조명, 환경 반사, 안개 등에 영향을 받음.
기본적으로 렌더러는 고품질 셰이더를 사용하여 미리 계산된 대기 시뮬레이션을 샘플링하는 투명 소품을 렌더링 한다.
입자 효과는 렌더러가 별도의(전체 해상도) 렌더 대상에 기록한다.
투명한 소품과 마찬가지로 대기 산란 및 안개는 버텍스 셰이더에서 계산하고, 파티클 시스템 설정에 따라 렌더러는 반투명 조명 볼륨을 사용하여 파티클에 조명을 비출 수 있다.
렌더러는 굴절을 계산하기 위해 투명도 렌더링 과정이 끝나기 전에 또 다른 패스를 수행한다. 투명한 소품과 파티클은 모두 다시 렌더링 되어 나중에 굴절을 계산하는 데 사용될 왜곡 벡터가 포함된 전체 해상도 버퍼를 작성한다.
굴절 계산 단계( DistortionApply ) 동안 렌더러는 기본 렌더 대상(지금까지)의 내용과 왜곡 벡터를 읽고 이상한 굴절 텍스처를 작성한다.
최종 굴절 패스는 이미 언급한 대로 스텐실을 사용하여 굴절 텍스처를 기본 렌더 대상에 복사한다.
다음 패스( BokehDOFRecombine )에서는 마지막으로 파티클을 장면에 적용.
💡 16. 후처리
후처리는 가장 시간이 오래 걸리는 과정이다.
안티 앨리어싱, 모션 블러, 가우시안 필터링의 과정에 대해서만 설명한다.
안티 앨리어싱
언리얼의 시간적 안티앨리어싱은 히스토리 버퍼를 사용하여 시간이 지남에 따라 샘플을 축적하고 두 번의 패스로 렌더링.
- 첫 번째 패스히스토리 버퍼와 현재 렌더 타겟 사이의 블렌드 팩터(피드백)를 사용.
- 재투영을 위한 메인 렌더 타겟, 히스토리 버퍼 및 속도 버퍼를 사용하여 스텐실 되지 않은 픽셀에 대한 임시 AA구현.
- 두 번째 패스고정된 혼합 계수 0.25를 사용
- 스텐실된 비트에 대해 유사한 임시 AA패스가 수행되어 최종 안티 앨리어싱된 이미지 생성.
모션 블러
속도 평탄화 및 확장 패스가 이어진다.
자동 노출(눈 적응)을 구현하기 위해 렌더러는 컴퓨팅 셰이더를 사용하여 현재 장면 광도의 히스토그램 생성.
각 강도 빈에 속하는 픽셀 수를 계산. 매우 어두운 값이나 매우 밝은 값을 갖는 이미지 영역을 쉽게 건너뛰고 평균 장면 휘도에 대한 보다 합리적인 근사치를 생성가능. 평균 휘도를 사용하여 그에 따라 노출을 조정하여 눈 적응 계산 완료.
가우시안 필터링 ,
PostProcessCombineLUT 패스 는 지오메트리 셰이더와 상당히 긴 픽셀 셰이더를 사용하여 톤 매핑 중에 사용될 컬러 그레이딩 LUT(32x32x32 RGB10A2 볼륨 텍스처)를 생성.
프레임의 최종 패스인 Tonemapper 는 위에서 계산한 블룸을 기본 렌더 대상과 결합하고 색상 등급 LUT를 통해 색상을 전달하기 전에 계산된 눈 적응을 사용하여 이미지의 노출을 조정하여 최종 픽셀 색상을 생성.
'Unreal' 카테고리의 다른 글
[UE] 언리얼 스마트 포인터 (0) | 2023.09.06 |
---|---|
[UE] 동적 해상도 (0) | 2023.09.01 |
Unreal - RenderDoc 사용 (1) | 2023.08.31 |
[UE] 언리얼이 프레임을 렌더링하는 방법 2 (0) | 2023.08.30 |
[UE] 언리얼이 프레임을 렌더링하는 방법 1 (0) | 2023.08.28 |
- Total
- Today
- Yesterday
- 스택/큐
- sort
- 탐욕법
- 채팅서버
- UE5
- 고득점 Kit
- 누적합
- 고득점kit
- Heap
- DFS
- 프로그래머스
- 너비우선탐색
- 힙
- C++
- 데디케이티드
- 완전탐색
- 디자인 패턴
- level3
- Unreal 5.1
- LV2
- LV3
- Ue
- FPS
- 재귀
- IMGUI
- BFS
- 개인공부
- 해시
- 정렬
- greedy
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |