강좌 소개 - 리얼타임 렌더링 기본 (epicgames.com)
실시간 렌더링은 복잡하고 요구사항이 많다.
따라서 우리는 가능한 한 많은 것을 사전에 계산된 단계로 오프로드하려고 한다.
또한 우리는 종종 도전을 극복하기 위해 다양한 해결책의 조합이 필요하다.
Scalability
렌더링의 두 가지 방법
GBuffer
Pixel and Vertex Shaders
Deffered Rendering과 Forward Rendering은 렌더링 파이프라인에서 사용되는 두 가지 주요 방법입니다.
Deffered Rendering은 렌더링 과정을 두 단계로 나눕니다. 첫 번째 단계에서는 각 픽셀의 기본 정보(위치, 색상, 노멀, 스펙큘러 등)만을 기록하는 G-Buffer를 생성합니다. 이후 두 번째 단계에서는 이 G-Buffer에 기록된 데이터를 사용하여 조명 계산을 합니다. 이 방식의 장점은 여러 조명을 효율적으로 처리할 수 있다는 것입니다. 많은 수의 동적 라이트가 존재할 때 특히 유리하며, 각 조명에 대한 계산을 픽셀 단위로 분리하여 수행하기 때문에 복잡한 조명 효과를 구현할 수 있습니다. 그러나 G-Buffer를 사용함으로써 많은 메모리와 대역폭을 필요로 하며, 특히 고해상도에서는 이 문제가 더욱 심각해집니다.
Forward Rendering은 더 전통적인 렌더링 방식으로, 객체를 화면에 그릴 때 각 객체의 모든 라이팅 계산을 한 번에 수행합니다. 이 방식은 각 픽셀에 대해 적용될 조명을 미리 알고 있어야 하며, 조명의 수가 증가할수록 성능에 더 큰 영향을 미칩니다. 하지만, 메모리 사용량과 대역폭 요구사항이 Deffered Rendering보다 낮고, 투명한 물체나 다양한 쉐이더 효과를 구현하기에 더 적합합니다.
Unreal Engine 5.3에서는 Deffered Rendering을 기본적으로 사용하지만, 사용자의 필요에 따라 Forward Rendering을 선택할 수도 있습니다. 두 방식 모두 다양한 장단점이 있으며, 개발자는 자신의 프로젝트 요구사항과 성능 목표에 따라 가장 적합한 렌더링 방법을 선택해야 합니다.
Frame time is in milliseconds (ms)
stat fps
명령어로 프레임 시간을 확인할 수 있다.t.maxfps 600
명령어로 fps 제한을 없앨 수 있다. 퍼포먼스를 테스트할 때는 보통 프레임 속도 제한을 제거하는 것이 좋다. 실제 작업한(최적화) 효과를 확인할 수 있기 때문이다.stat unit
명령어로 더 많은 정보를 확인할 수 있다. 여기서 Frame은 총 프레임 시간이다. 가장 중요한 것은 Game과 GPU이다.CPU (Game)
⇒ 무언가의 위치/회전을 변경하는 모든 것
GPU
⇒ 렌더링과 관련된 모든 것