개요

본 문서는 크래프톤 게임 테크랩 2기를 이수하며 진행한 자체 게임 엔진 프로젝트를 정리한 문서입니다. 본 프로젝트는 14주간 크래프톤 정글 캠퍼스에서 합숙하며 진행되었고, 매주 이전 주차에 구현한 엔진 코드에 새로운 기능을 추가하는 방식으로 과제가 진행되었습니다.

다만 매주 팀원이 새롭게 구성되었기 때문에, 해당 주차의 개발은 팀원 4명 중 한 명의 코드베이스를 기준으로 진행해야 했습니다. 그 결과 매주 새로운 코드 구조를 빠르게 분석하고 이해해야 했으며, 자연스럽게 코드 리뷰와 분석 능력, 협업 역량을 기를 수 있었습니다.

다음은 각 주차의 과제 수행 내역을 정리한 내용입니다.


1주차

github

주제: Gamejam

과제: 3일 동안 DirectX 11을 사용하여 간단한 게임 제작

목적: 본격적인 엔진 구현에 앞서, 게임을 직접 만들어 봄으로써 게임이 어떤 요소들로 구성되어 있고 어떠한 기술들을 필요로 하는지 체득하기

담당 파트: 캐릭터 바운스 동작 구현, 스프라이트 파티클 효과 구현

시연 영상


2주차

github

주제: 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주차

github

주제: 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주차

github

주제: 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주차

github

주제: 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)를 사용하여 렌더링하는 방식으로 구현하지 말 것.
  • 배치되어 있는 오브젝트가 실시간으로 카메라 안과 밖으로 움직일 수 있는 상황을 가정할 것

구현한 최적화 기법

  1. Frustum Culling
  2. CPU Occlusion Culling
  3. SIMD
  4. Octree 기반 공간 분할
  5. Picking 최적화(Octree Broad + BVH Narrow)
  6. 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주차+

github

주제: 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주차

github

주제: 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주차+

github

주제: 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주차

github

주제: 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주차

github

주제: 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주차

github

주제: 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주차+

github

주제: 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주차

github

주제: 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주차

github

주제: 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주차

github

주제: 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주차

github

주제: 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주차

github

주제: Final Game Implementation

목적: 지금까지 구현한 엔진 기능을 종합해 시연용 최종 게임을 완성하고 콘텐츠 완성도를 높인다.

과제

  • 지난 주차에서 구현한 모든 Component를 활용한 최종 게임 구현

제한사항

  • 게임 룰/로직 구현은 최대한 Lua 스크립팅 시스템을 활용할 것
  • 게임의 시작, 끝, 재시작, 스코어가 존재할 것
  • 키보드, 마우스, 게임패드를 지원할 것
  • 크레딧(정글/기수/팀원)이 존재할 것
  • Editor Build와 Standalone Build를 둘 다 제출할 것

학습 키워드:

  • Final Integration
  • Lua Gameplay Logic
  • Credit Content
  • Cut Scene

담당 파트

  • 무한 랜덤 맵 생성 기능 구현
  • 아이템, 몬스터 배치 기능 구현
  • 몬스터 행동 패턴, 피격 구현
  • 게임 UI 및 사운드 구현

시연 영상