PART 2 · 강의 7/7
TSR/FSR 업스케일링
템포럴 업스케일링으로 고해상도 렌더링 최적화
01
업스케일링 기술 개요
낮은 해상도에서 고해상도 출력 생성
업스케일링은 낮은 내부 해상도로 렌더링한 후 고해상도로 재구성하는 기술입니다. 성능을 크게 향상시키면서 품질 손실을 최소화합니다.
| 기술 | 제공사 | 특징 | 하드웨어 요구 |
|---|---|---|---|
| TSR | Epic Games | UE5 기본, Nanite/Lumen 최적화 | 모든 GPU |
| DLSS | NVIDIA | AI 기반, 최고 품질 | RTX 20xx+ |
| FSR | AMD | 오픈 소스, 크로스 플랫폼 | 모든 GPU |
| XeSS | Intel | AI 가속 (옵션) | Intel Arc / 모든 GPU |
02
TSR (Temporal Super Resolution)
UE5 기본 업스케일러
Project Settings
// Project Settings > Engine > Rendering > Default Settings
Anti-Aliasing:
Anti-Aliasing Method: TSR (Temporal Super Resolution)
// 또는 콘솔
r.AntiAliasingMethod 4 // 4 = TSR
TSR 품질 프리셋
콘솔 변수
// Screen Percentage (내부 렌더링 해상도)
r.ScreenPercentage 100 // 100% = 네이티브
r.ScreenPercentage 66 // 66% = 품질 모드
r.ScreenPercentage 50 // 50% = 성능 모드
// TSR 품질 설정
r.TSR.History.ScreenPercentage 200 // 히스토리 버퍼 품질
r.TSR.ShadingRejection.Flickering 1 // 깜빡임 감소
// 프리셋
// Quality: r.ScreenPercentage 66, TSR.History.ScreenPercentage 200
// Balanced: r.ScreenPercentage 58, TSR.History.ScreenPercentage 175
// Performance: r.ScreenPercentage 50, TSR.History.ScreenPercentage 150
💡 TSR과 Nanite
TSR은 Nanite와 최적화되어 있어, Nanite 사용 시 TSR이 권장됩니다. DLSS/FSR보다 Nanite 지오메트리 재구성 품질이 우수합니다.
03
AMD FSR
크로스 플랫폼 오픈 소스 업스케일러
FSR 활성화
// Project Settings 또는 플러그인 활성화 필요
// Edit > Plugins > AMD FidelityFX Super Resolution
// 콘솔 변수
r.FidelityFX.FSR.Enabled 1
r.FidelityFX.FSR.QualityMode 1 // 0: Ultra Quality, 1: Quality, 2: Balanced, 3: Performance
// FSR 2.x (템포럴)
r.FidelityFX.FSR2.Enabled 1
r.FidelityFX.FSR2.QualityMode 1
| FSR 모드 | 스케일 | 1440p에서 렌더링 |
|---|---|---|
| Ultra Quality | 1.3x | 1107p |
| Quality | 1.5x | 960p |
| Balanced | 1.7x | 847p |
| Performance | 2.0x | 720p |
04
C++ 동적 제어
런타임에서 업스케일링 조절
C++
#include "Engine/Engine.h"
// 스크린 퍼센티지 동적 조절
void UGraphicsSettings::SetScreenPercentage(float Percentage)
{
// 30 ~ 100 범위로 클램프
Percentage = FMath::Clamp(Percentage, 30.0f, 100.0f);
static IConsoleVariable* ScreenPercentageCVar =
IConsoleManager::Get().FindConsoleVariable(
TEXT("r.ScreenPercentage"));
if (ScreenPercentageCVar)
{
ScreenPercentageCVar->Set(Percentage);
}
}
// 업스케일러 전환
void UGraphicsSettings::SetUpscaler(EUpscalerType Type)
{
static IConsoleVariable* AAMethodCVar =
IConsoleManager::Get().FindConsoleVariable(
TEXT("r.AntiAliasingMethod"));
if (AAMethodCVar)
{
switch (Type)
{
case EUpscalerType::TSR:
AAMethodCVar->Set(4); // TSR
break;
case EUpscalerType::TAA:
AAMethodCVar->Set(2); // TAA
break;
case EUpscalerType::FXAA:
AAMethodCVar->Set(1); // FXAA
break;
}
}
}
// FPS 기반 동적 해상도
void UGraphicsSettings::UpdateDynamicResolution(float CurrentFPS, float TargetFPS)
{
static float CurrentScreenPercentage = 100.0f;
if (CurrentFPS < TargetFPS * 0.9f)
{
// 성능 부족 - 해상도 낮춤
CurrentScreenPercentage = FMath::Max(
CurrentScreenPercentage - 5.0f, 50.0f);
}
else if (CurrentFPS > TargetFPS * 1.1f)
{
// 여유 있음 - 해상도 높임
CurrentScreenPercentage = FMath::Min(
CurrentScreenPercentage + 2.0f, 100.0f);
}
SetScreenPercentage(CurrentScreenPercentage);
}
05
품질 vs 성능 가이드
상황별 업스케일러 선택
TSR 권장 상황
- Nanite 사용 프로젝트
- 크로스 플랫폼 (콘솔 포함)
- 일관된 품질 필요
- Lumen 사용 시
DLSS 권장 상황
- NVIDIA RTX GPU 타겟
- 최고 품질 요구
- 레이 트레이싱 사용
- 4K 해상도 목표
FSR 권장 상황
- AMD GPU 타겟
- 구형 하드웨어 지원
- 오픈 소스 필요
- 폭넓은 호환성
⚠️ 업스케일링 주의사항
- 고스팅 — 빠르게 움직이는 오브젝트에서 잔상 발생 가능
- 텍스트 — UI 텍스트는 업스케일링 후 렌더링 권장
- 샤프닝 — 과도한 샤프닝은 아티팩트 유발
SUMMARY
핵심 요약
- TSR — UE5 기본, Nanite/Lumen 최적화, 모든 GPU
- DLSS — NVIDIA RTX 전용, AI 기반, 최고 품질
- FSR — AMD 제공, 오픈 소스, 크로스 플랫폼
- Screen Percentage — 내부 렌더링 해상도 (50~100%)
- 동적 해상도 — FPS 기반 자동 조절 가능
PRACTICE
도전 과제
배운 내용을 직접 실습해보세요
실습 1: TSR 기본 설정 및 비교
Project Settings > Rendering에서 Anti-Aliasing Method를 TSR로 설정하세요. r.TSR.History.ScreenPercentage를 50%, 67%, 100%로 변경하면서 해상도와 화질 차이를 비교하세요.
실습 2: TSR vs FSR 성능 비교
동일한 오픈월드 씬에서 TSR과 FSR 2.x를 전환하면서 FPS, GPU 시간, 화질을 비교하세요. stat GPU로 업스케일링 패스의 비용을 측정하고, r.ScreenPercentage를 조정하여 최적점을 찾으세요.
심화 과제: 오픈월드 RPG 최적 업스케일링 전략
카메라 이동이 빠른 전투 씬과 정적인 NPC 대화 씬에서 TSR의 고스팅(ghosting) 아티팩트를 분석하세요. 씬 유형에 따라 동적으로 Screen Percentage를 조절하는 Blueprint/C++ 시스템을 구현하세요.