1. Day40
- 알고리즘 코드카타
- C++과 Unreal Engine으로 3D 게임 개발
- 스탠다드 클래스
- TA 클래스
2. CH3 - C++과 Unreal Engine으로 3D 게임 개발(Day40)
3. 알고리즘 코드카타
- 최소직사각형(초기 코드)
- sort를 이용 백터들의 원소를 [큰값, 작은값] 으로 전부 정렬한다음 큰값 중의 최대값과 작은값 중의 최대값을 곱한값을 반환
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<vector<int>> sizes) {
int maxW = 0;
int maxH = 0;
for (auto& v : sizes)
{
sort(v.begin(), v.end(), greater<>());
maxW = max(maxW, v[0]);
maxH = max(maxH, v[1]);
}
return maxW * maxH;
}
- 최소직사각형(개선코드)
- sort 대신 max(maxW, max()) 로 배열안의 큰수들중 큰수를 가져오고 max(maxH, min())으로 배열안의 짧은 수중 큰 수를 가져와서 곱함
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<vector<int>> sizes) {
int maxW = 0;
int maxH = 0;
for (auto& v : sizes)
{
maxW = max(maxW, max(v[0], v[1]));
maxH = max(maxH, min(v[0],v[1]));
}
return maxW * maxH;
}
4. 스탠다드 클래스
- 컴퓨터 구조를 알아야 하는 이유
- 데이터의 표현 - 비트와 인코딩
- 소스코드와 명령어
5. TA 클래스
- 렌더링 파이프라인
- 렌더링 파이프라인 흐름 정리
CPU (준비)
├── 메시, 텍스처, 셰이더 등 리소스 로드
├── 어떤 오브젝트를 그릴지 결정
└── GPU한테 "렌더링" 명령 (Draw Call)
↓
GPU (렌더링 파이프라인 실행)
├── Input Assembler (정점 데이터 조립)
├── Vertex Shader (좌표 변환) ← Local→World→View→Clip
├── Rasterizer (삼각형 → 픽셀) ← Clipping, NDC, Screen 변환
├── Pixel Shader (픽셀 색상 계산)
└── Output Merger (최종 출력)
↓
Frame Buffer → 모니터 출력
Local Space
↓ Model Matrix (월드 배치)
World Space
↓ View Matrix (카메라 기준 정렬)
View Space
↓ Projection Matrix (Frustum 정의 + w에 깊이 저장)
Clip Space
↓ Clipping (시야 밖 잘라냄) ← GPU가 자동 처리
↓ w로 나누기 (원근감 적용)
NDC (-1 ~ 1)
↓ Viewport Transform (해상도에 맞게)
Screen Space (픽셀 좌표)
- 최종 Defferd Rendering 흐름 정리
CPU (준비)
├── 메시, 텍스처, 셰이더 등 리소스 로드
├── 어떤 오브젝트를 그릴지 결정
└── GPU한테 "렌더링" 명령 (Draw Call)
↓
========================================
Deferred 렌더링 시작
========================================
↓
GPU 파이프라인(렌더링 파이프라인) 1회차: Geometry Pass
├── Input Assembler (정점 데이터 조립)
├── Vertex Shader (좌표 변환) ← Local→World(Model)→View(View)→Clip(Projection)
├── Rasterizer (삼각형 → 픽셀) ← Clipping, NDC, Screen 변환
├── Pixel Shader (표면 속성 계산)
└── Output → G-Buffer에 저장 (화면 출력 X)
↓
G-Buffer (여러 텍스처)
├── Diffuse (기본 색)
├── Normal (법선)
├── Metallic / Roughness
├── Specular
└── Depth (깊이)
↓
GPU 파이프라인(렌더링 파이프라인) 2회차: Lighting Pass
├── Input Assembler (화면 전체 quad)
├── Vertex Shader (단순 좌표 전달)
├── Rasterizer (픽셀화)
├── Pixel Shader (G-Buffer 읽고 조명 계산)
└── Output → 중간 렌더 타겟에 저장
↓
GPU 파이프라인(렌더링 파이프라인) 3회차: Post Process
├── Input Assembler (화면 전체 quad)
├── Vertex Shader (단순 좌표 전달)
├── Rasterizer (픽셀화)
├── Pixel Shader (블룸, 색보정, SSAO 등)
└── Output Merger (최종 출력)
↓
Frame Buffer → 모니터 출력
6. 다음주 : CH3 강의 학습, 알고리즘 문제 집중 CS50x 2주차 진행, 베이직 실전 클래스 과제 진행