개요
본 문서는 크래프톤 게임 테크랩 2기를 이수하며 진행한 자체 게임 엔진 프로젝트를 정리한 문서입니다. 본 프로젝트는 14주간 크래프톤 정글 캠퍼스에서 합숙하며 진행되었고, 매주 이전 주차에 구현한 엔진 코드에 새로운 기능을 추가하는 방식으로 과제가 진행되었습니다.
다만 매주 팀원이 새롭게 구성되었기 때문에, 해당 주차의 개발은 팀원 4명 중 한 명의 코드베이스를 기준으로 진행해야 했습니다. 그 결과 매주 새로운 코드 구조를 빠르게 분석하고 이해해야 했으며, 자연스럽게 코드 리뷰와 분석 능력, 협업 역량을 기를 수 있었습니다.
다음은 각 주차의 과제 수행 내역을 정리한 내용입니다.
1주차
주제: Gamejam
과제: 3일 동안 DirectX 11을 사용하여 간단한 게임 제작
목적: 본격적인 엔진 구현에 앞서, 게임을 직접 만들어 봄으로써 게임이 어떤 요소들로 구성되어 있고 어떠한 기술들을 필요로 하는지 체득하기
담당 파트: 캐릭터 바운스 동작 구현, 스프라이트 파티클 효과 구현
시연 영상
2주차
주제: Break into 3D in 2D Space
목적: 게임 엔진의 기본적인 기능인 3D Primitive Render, Gizmo, Camera Control, Scene Save/Load 기능을 구현한다. 이를 통해 2D에서 3D로의 공간 확장을 위한 수학, 기하학적 의미를 학습한다.
과제
- 프리미티브 생성 및 배치
- Mouse Picking 기반 오브젝트 선택
- Gizmo 및 Property 창 기반 Transform(Location/Rotation/Scale) 조작
- 카메라 이동
- 씬을 JSON의 형태로 저장/불러오기
- UObject 기반 코어 시스템 구현 시작
학습 키워드
- MVP(Model-View-Projection)
- Local/World/View/Projection Space
- Homogeneous Coordinates(FVector4)
- Vertex Shader 상수 버퍼
담당 파트
- Mouse Picking 기반 오브젝트 선택
- 콘솔 창 구현
- MVP 행렬을 사용한 Primitive 렌더, 카메라 시스템
시연 영상
3주차
주제: Editor & Rendering (눈에 보이는 세상)
목적
- Texture Atlas를 이해한다.
- Screen-Aligned Quad 개념을 이해한다.
- BatchLine을 이해한다.
과제
- Billboard 문자열(텍스처 아틀라스 기반) 렌더링
- Batch Line 구현
- World Grid 및 AABB Box 렌더링
- D3D(y-up left hand)에서 UE(z-up left hand)로 좌표계 변환
- 윈도우 리사이즈 대응
- View Mode를 사용하여 Primitive, Wireframe 간 전환
- Show Flag(Primitive on/off) 구현
- 카메라 감도 조절,
editor.ini파일에 설정 저장/복원 - FName 구현
- SubUV 구현
학습 키워드
- Texture Atlas
- UV Mapping
- Billboard/Sprite
- AABB
- View Mode
- Show Flag
담당 파트
- Billboard 구현
- 좌표계 변환
- 카메라 감도 조절, 파일 형식으로 설정 저장/복원 기능 구현
- FName 구현
- SubUV 구현
시연 영상
4주차
주제: Static Mesh & Multi Viewport
목적: 정적 메시 렌더링 파이프라인과 에디터 다중 뷰포트 구조를 구현해 에디터 확장성과 리소스 운용 기반을 강화한다.
과제
- StaticMesh 구현 및 렌더링
- OBJ 리소스 로드 및 에셋 할당(프로퍼티 연동)
- 다중 재질(Section) 지원
- 4분할 다중 뷰포트 및 스플리터 구현
- Perspective/Orthogonal 뷰 동시 렌더링
- Binary File Caching을 통해 obj 파일 로드 속도 최적화
- Overlay Stat 렌더링(
stat fps,stat memory)
학습 키워드
- Resource Pipeline
- Static Mesh
- Multiple Material(Section)
- Multi Viewport
- FViewport / FViewportClient
- OBJ Parsing & Binary Bake
- Editor Serialization
담당 파트
- Obj Parser 구현
- Binary File Caching 구현
- Static Mesh 변환 기능 구현
시연 영상
5주차
주제: Game Jam 2nd - Brute Force Competition
목적: Massive StaticMesh 씬에서 병목 지점을 분석하고, Realtime Rendering 환경에서의 성능 최적화 역량을 강화한다.
과제
- Massive Static Mesh 씬을 열었을 때 아래를 최적화할 것
- FPS 및 프레임 시간(ms)
- Picking 1회 소요 시간(ms) 및 누적 횟수 / 누적 시간(ms)
제한사항
- Instanced Rendering을 사용하지 말 것(각각의 StaticMesh 마다 Draw Call 할 것)
- 반드시 실시간(RealTime) 연산으로 구현해야 함
- 카메라가 움직이지 않을 때 이전에 계산된 (Cache)를 사용하여 렌더링하는 방식으로 구현하지 말 것.
- 배치되어 있는 오브젝트가 실시간으로 카메라 안과 밖으로 움직일 수 있는 상황을 가정할 것
구현한 최적화 기법
- Frustum Culling
- CPU Occlusion Culling
- SIMD
- Octree 기반 공간 분할
- Picking 최적화(Octree Broad + BVH Narrow)
- Material 및 Render State 정렬을 통해 파이프라인 상태 전환 비용을 최소화
학습 키워드:
- Bottleneck Analysis
- Real-time Optimization
- Performance Profiling
- Picking Performance
- Massive StaticMesh Scene
담당 파트
- Frustum Culling
- Tree 기반 공간 분할

5만개의 static mesh가 존재하는 massive static mesh scene
5주차+
주제: Component 구조 확장
목적: 기존 기능을 컴포넌트 중심 구조로 재편해 재사용성과 레벨 단위 관리 구조를 강화한다.
과제
- PIE(Play In Editor) 구현
UWorld,ULevel클래스 구현 및AActor배열 기반 레벨 오브젝트 관리Actor,Component기반 계층 구조 구현TextRenderComponent클래스 구현(기존 UUID 텍스트 렌더링 로직 컴포넌트화)BillboardComponent클래스 구현
학습 키워드:
- Component Architecture
- Text Rendering Componentization
- Billboard Component
- ULevel / Actor Collection
담당 파트
TextRenderComponent,BillboardComponent구현
시연 영상
6주차
주제: Decal & Fake Spot Light
목적: Forward Rendering 방식의 Decal 렌더링 파이프라인을 추가한다.
과제
- Projection Decal 렌더링 구현(Forward Rendering)
- Decal Fade In/Out 구현
- Decal Show Flag 구현
- Decal Stat 구현(시간/개수 등)
- Billboard/Decal 기반 Fake Spot Light 구현
학습 키워드
- Projection Decal
- Forward Rendering Pass
- Decal Component/Actor
- Depth Test / Depth Write
- AABB/OBB Intersection
담당 파트
- Projection Decal 구현
- Decal Fade In/Out 구현
- Decal Show Flag 구현
- Decal Stat 구현(시간/개수 등)
시연 영상
6주차+
주제: Post Process Multi-Pass
목적: Post Process 패스를 통해 멀티패스 렌더링 구조를 학습하고, 화면 품질 개선 기법을 엔진 파이프라인에 확장한다.
과제
- ViewMode Scene Depth 구현
- RotationMovementComponent 구현
- ProjectileMovementComponent 구현
- FireballComponent 구현
- HeightFogComponent 구현
- Post Process Pass 구현
- Multi-Pass Rendering 구조 적용
- FXAA(Fast Approximate Anti-Aliasing) 구현
학습 키워드
- Post Process
- Multi-Pass Rendering
- FXAA
담당 파트
- ViewMode Scene Depth 구현
- RotationMovementComponent
시연 영상
MovementComponent, FireballComponent 시연
SceneDepth 시연
HeightFogComponent 시연
7주차
주제: Let There Be Light
목적: Forward Rendering 방식의 Lighting Pass를 추가하며 다양한 Lighting Model에 대해 학습한다.
과제
- Ambient/Directional/Point/Spot Light 컴포넌트 구현
- 광원 가시화용 와이어프레임 렌더링(방향/반경/콘)
- UberLit 셰이더 1개로 다중 라이팅 모델(Gouraud/Lambert/Blinn-Phong) 구현
- View Mode 확장(Lit_Gouraud, Lit_Lambert, Lit_Phong, Unlit)
- Normal Mapping 구현(텍스처 노멀 반영)
- ViewMode Normal 구현
- Tile-based Light Culling 구현
학습 키워드
- Forward Shading
- Uber Shader
- Lighting Model
- Normal Mapping
- Tile-based Light Culling
담당 파트
- Light 컴포넌트(Ambient/Directional/Point/Spot) 구현
- 광원 가시화용 와이어프레임 렌더링(방향/반경/콘)
- Normal Mapping 구현
- ViewMode Normal 구현
시연 영상
Light culling 및 디버그 시각화 시연
Lighting, View mode noraml 시연
8주차
주제: Shadow Mapping
목적: PSM 기반 그림자 렌더링을 구현하고, 품질 개선 및 메모리/성능 제어 기법까지 통합한다.
과제
- PSM(Perspective Shadow Mapping) 구현
- Shadow Artifact(Acne/Peter Panning/Bias) 개선
- Shadow Depth Map 디버그 시각화
- 라이트 시점 카메라 전환(Override camera with light perspective)
- PCF(Percentage-Closer Filtering) 구현(그림자 경계 소프트닝)
- VSM 필터 구현
- Shadow Atlas 구현
- Cascade Shadow Map 구현
학습 키워드
- PSM
- PCF / VSM
- Shadow Atlas
- Cascaded Shadow Map
- Shadow Bias
담당 파트
- Shadow Artifact(Acne/Peter Panning/Bias) 개선
- Shadow Depth Map 디버그 시각화
- Shadow Atlas 구현
- Cascade Shadow Map 구현
시연 영상
Shadowing 시연
Cascade shadow map 시연
9주차
주제: Lua Integration & Gameplay Scripting
목적: LuaJIT 기반 스크립팅 파이프라인을 엔진에 통합한다. 또한, 구현한 스크립트 시스템을 사용하여 간단한 게임을 구현한다(GameJam).
과제
- LuaJIT 엔진 통합
- Lua 스크립트 생성/편집/실행 워크플로우 구현
- BeginPlay, EndPlay, Tick, OnOverlap 등의 공통 이벤트 지원
- Coroutine 구현
- Delegate 구현
- 충돌 이벤트 지원을 위한 Box, Capsule, Sphere Component 구현
학습 키워드
- LuaJIT
- Script Runtime
- Event-driven Gameplay
- Coroutine
- Sol2
담당 파트
엔진 관련
- LuaJIT 엔진 통합
- Lua 스크립트 생성/편집/실행 워크플로우 구현
- BeginPlay, EndPlay, Tick, OnOverlap 등의 공통 이벤트 지원
게임 관련 - 랜덤 맵 생성
- 오브젝트, 장애물 스폰
시연 영상
9주차+
주제: Light, Camera, Action
목적: 9주차에 구현한 게임에 시네마틱 카메라 연출과 타격감 연출을 결합해 플레이 체감 품질을 향상한다.
과제
-
각종 카메라 연출 구현
- Camera Shake
- Letter Box
- Fade In/Out
- Vinetting
- Camera Transition
-
Spring Arm 기반 카메라 동작 구현
-
Hit Stop 구현
-
Slomo(GlobalTimeDilation) 구현
학습 키워드
- Cinematic Camera
- Camera Shake
- Time Dilation
- Hit Stop
- Post Process
담당 파트
- Curve/Perlin/Bezier 데이터 타입 처리 구현
- CameraShake, FadeInOut, Vignetting 구현
시연 영상
10주차
주제: Skeletal Mesh Rendering
목적: Skeletal Mesh 파이프라인을 구축하고 CPU Skinning 기반 본 변형 렌더링 및 에디터 뷰어 기능을 구현한다.
과제
- FBX 형식 파일을 Parsing하여 Skeletal Mesh로 읽을 수 있을 것
- Vertex Skinning/Bone/Weight 구조 이해 및 적용
- CPU Skinning 구현
- SkeletalMesh Viewer 구현
학습 키워드
- Skeletal Mesh
- CPU Skinning
- Bone Hierarchy
- FBX Import
- Viewer Tooling
담당 파트
- Skeletal Mesh 렌더 구조 구현(
USkeletalMesh,USkeletalMeshComponent,Bone,ASkeletalMeshActor등) - CPU Skinning 구현
- Skeletal Mesh Viewer 일부 구현
시연 영상
11주차
주제: Animation System & GPU Skinning
목적: 애니메이션 재생 시스템을 확장하고 CPU/GPU Skinning 전환 구조를 구현해 성능과 유연성을 함께 확보한다.
과제
- Animation Sequence Viewer 구현
- Time Line을 사용한 재생 컨트롤 구현
- Anim Notify 구현
- Animation State Machine 구현
- Animation Blending 구현
- GPU Skinning 구현
- CPU/GPU Skinning 성능 비교 Stat 구현
- 콘솔 명령어 기반 CPU/GPU Skinning 전환
- Reverse Play Animation 구현
- MiniDump 기반 크래시 리포트 시스템 구현
학습 키워드
- Animation State Machine
- GPU Skinning
- Animation Instance
- Reverse Playback
- Lua-driven Animation
담당 파트
- Animation State Machine 구현
- Anim Notify 구현
- GPU/CPU Skinning 통계(
stat skinning) 구현 - MiniDump 기반 크래시 리포트 시스템 구현
시연 영상
12주차
주제: Particle System
목적: 언리얼 엔진의 캐스케이드 파티클을 모작하여 대량의 파티클을 높은 성능으로 처리하는 방법을 학습한다.
과제
- Particle System Editor 구현
- Sprite Emitter, Mesh Emitter를 지원한다.
- Sprite/Mesh Particle 렌더링 구현
- Particle System Component 구현
- 파티클과 다른 Component와의 충돌처리를 구현
- Beam Emitter 구현
- Ribbon Emitter 구현
- 심볼 서버(Symbol server) 구현
학습 키워드
- Translucent Rendering
- Particle System Component
- Particle LOD
- Beam/Ribbon Emitter
- Particle Module
담당 파트
- Sprite 및 Mesh Particle System 구축, Particle System Component 구현
- 파티클 모듈 기능 확장(SpawnRate/Lifetime/Velocity/Color/Size/Location Curve 등)
시연 영상
13주차
주제: Physics Asset & Post Depth Effect
목적: 게임에서의 물리 법칙 구현과 Depth of Field를 구현한다.
과제
Physics
- Physics Asset Editor 구현(PhysX SDK 기반)
- Ragdoll Simulation 구현
- Vehicle Simulation 구현
- Cloth Simulation 구현(NvCloth 기반)
Depth of field - Depth of field 구현
학습 키워드
- Physics Asset
- Depth of Field
- Post Process
- Cloth Simulation
담당 파트
- Depth of field 구현
- Cloth Simulation 구현
시연 영상
Physics Asset Editor, Ragdoll Simulation, Vehicle Simulation, Depth of field, Cloth Simulation 순
14주차
주제: Final Game Implementation
목적: 지금까지 구현한 엔진 기능을 종합해 시연용 최종 게임을 완성하고 콘텐츠 완성도를 높인다.
과제
- 지난 주차에서 구현한 모든 Component를 활용한 최종 게임 구현
제한사항
- 게임 룰/로직 구현은 최대한 Lua 스크립팅 시스템을 활용할 것
- 게임의 시작, 끝, 재시작, 스코어가 존재할 것
- 키보드, 마우스, 게임패드를 지원할 것
- 크레딧(정글/기수/팀원)이 존재할 것
- Editor Build와 Standalone Build를 둘 다 제출할 것
학습 키워드:
- Final Integration
- Lua Gameplay Logic
- Credit Content
- Cut Scene
담당 파트
- 무한 랜덤 맵 생성 기능 구현
- 아이템, 몬스터 배치 기능 구현
- 몬스터 행동 패턴, 피격 구현
- 게임 UI 및 사운드 구현
시연 영상