| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
- Unreal Engine
- UI
- os
- 언리얼 엔진
- 보안
- ability task
- gas
- Replication
- 언리얼엔진
- Aegis
- animation
- MAC
- 게임 개발
- 유니티
- photon fusion2
- 게임개발
- Multiplay
- widget
- gameplay tag
- C++
- attribute
- gameplay effect
- CTF
- rpc
- linear regression
- local prediction
- gameplay ability system
- listen server
- unity
- stride
- Today
- Total
Replicated
[Graphics] 그래픽스 성능 최적화 본문
Draw Call
- CPU가 GPU에 렌더링 명령을 보내는 단위, 이 오브젝트를 이렇게 그려줘
많은 경우
- CPU 병목 발생 및 렌더링 성능 저하 -> FPS 하락
줄이는 방법
1. 배칭(Batching)
- 여러 개의 오브젝트를 하나의 드로우 콜로 묶어서 렌더링하는 방식
- Static Batching: 위치가 고정된 오브젝트들을 미리 합쳐서 렌더링
- Dynamic Batching: 움직이는 오브젝트지만 조건이 맞으면 하나로 묶어서 처리
2. 인스턴싱(Instancing)
- 같은 메시를 여러 위치에 배치할 때 GPU가 한 번에 그릴 수 있도록 처리
- ex. 100개의 동일한 나무 -> 인스턴싱으로 드로우 콜 한 개로 처리 가능
3. 머티리얼 합치기, 쉐이더 최적화
- 서로 다른 머티리얼을 사용하는 오브젝트는 각각 드로웈 콜 필요
- 동일한 쉐이터, 머티리얼을 여러 오브젝트에 공유 시 배칭될 수 있어 드로우 콜 감소
4. Texture Atlas
- 여러 텍스처를 하나의 큰 텍스처에 모아두면 머티리얼도 공유할 수 있어 드로우 콜이 줄어듦
5. LOD와 컬링
- 멀리 있는 오브젝트는 아예 렌더링하지 않거나 간단하게
Instancing과 그 장점
- 동일한 메시를 여러 번 화면에 그릴 때 사용하는 GPU 최적화 기법. 여러 개의 동일한 오브젝트를 한 번에 그릴 수 있도록 하여 드로우 콜을 크게 줄일 수 있음
언제 사용하는가?
1. 같은 메시를 여러 번 사용
2. GPU가 많은 개체를 동시에 렌더링해야 할 때 성능 병목이 드로우 콜에서 발생 시
3. 동일한 애니메이션 또는 상태 기반 시스템을 GPU에서 처리하려고 할 때
장점
- 드로우 콜 감소
-> CPU 부하 감소
-> GPU 처리 효율 향상
-> 대규모 오브젝트 표현 가능
주의사항
- 동일한 머티리얼을 사용하는 오브젝트만 인스턴싱 가능
- GPU Instancing을 지원하는 쉐이더여야 함
- 각 인스턴스의 개별 속성(위치, 회전, 색상)은 추가 데이터로 GPU로 전달해야 함
- 동적 오브젝트 수가 너무 많으면 GPU 메모리나 업데이트 비용이 병목이 될 수 있음
Frustum Culling, Occlusion Culling
렌더링 최적화를 위한 오브젝트 제거(Culling) 기법들.
보이지 않는 것을 렌더링하지 않겠다는 건데, 보이지 않는 이유가 다름
프러스텀 컬링(Frustum Culling)
- 카메라 시여각 안에 없는 오브젝트는 렌더링 하지 않는 기법
- CPU가 처리
- 계산 비용이 작고 효과가 큼
* 클리핑이란 같은 개념은 아님
- 클리핑은 GPU 파이프라인 내에서 처리, 보이는 부분만 잘라서 화면에 그림
- 프러스텀 컬링은 오브젝트 단위로 렌더링 자체 생략, 드로우 콜도 생략임. 렌더링 전처리
- 클리핑은 렌더링 시도 이후에 발생
오클루전 컬링(Occlusion Culling)
- 다른 오브젝트에 가려서 보이지 않는 오브젝트는 렌더링하지 않는 기법
- 비용이 더 크고 복잡, GPU 또는 CPU에서 가시성 테스트
GPU 병목
GPU가 처리할 작업이 너무 많아 렌더링 속도가 떨어지는 상황,
GPU가 화면 출력을 따라가지 못해서 프레임 드랍이나 지연이 발생하는 상태
주요 상황
1. 과도한 폴리곤 수
2. 복잡한 프래그먼트 쉐이더, 머티리얼
3. 고해상도
4. 과도한 파티클, 이펙트, 후처리
5. 그냥 드로우 콜이 너무 많음 -> CPU 병목도 있긴 한데 GPU도 그거 다 렌더링 해야 됨
6. 인스턴싱, 컬링 등의 최적화 미사용
7. VRAM 부족, VRAM 스와핑 발생
- 데이터를 GPU-RAM 간 교환하며 성능이 저하됨
8. LOD 제대로 안씀
LOD
거리나 중요도에 따라 모델의 디테일 수준을 조절하여 렌더링 성능을 최적화하는 기술
가까운 오브젝트는 고품질 모델을, 멀리 있는 오브젝트는 저품질 모델을 사용
구현 방식
1. 여러 해상도의 모델을 준비
- LOD0, LOD1, LOD2, LOD3..
2. 거리 기반 전환 조건 설정
전환 기준 종류
- 거리 기반
- 화면 점유율 기반 (화면에서 오브젝트가 차지하는 픽셀 비율로 판단)
- 중요도 기반
주의사항
- LOD 간 차이가 커지면 팝핑 현상 가능 -> Fade 전환, CrossFade 사용
- 애니메이션 메시 -> 리깅, 본 구조 유지되어야 함
- 카메라 이동 속도가 빠른 게임일수록 전환 타이밍을 조절해서 이질감 줄여야 함
* 팝핑 현상
- 게임이나 그래픽 장면에서 오브젝트가 갑자기 툭 바뀌거나 나타나는 현상
Auto LOD
LOD 모델을 자동으로 생성, 관리해주는 시스템
툴이나 엔진이 자동으로 저해상도 모델을 생성해서 적용
'지식' 카테고리의 다른 글
| [Graphics] 그래픽스 트러블 슈팅 (0) | 2025.05.30 |
|---|---|
| [Graphics] 텍스처, 실시간 그림자 처리 (0) | 2025.05.30 |
| [Graphics] 좌표 변환 및 카메라 처리 (0) | 2025.05.30 |
| [Graphics] Shader와 조명, 재질 처리 (0) | 2025.05.29 |
| [Graphics] 렌더링 파이프라인 및 클리핑, 컬링 (0) | 2025.05.29 |