최신 글

[CS] A* 알고리즘(최단거리 탐색 알고리즘)
·
Algorithm
서론이전 글에서 다익스트라 알고리즘을 다뤘다. 다익스트라는 출발 노드로부터 모든 노드까지의 최단거리를 보장하는 강력한 알고리즘이다. 그런데 게임 AI 길찾기 상황을 생각해보자.캐릭터가 맵의 좌측 끝에서 우측 끝으로 이동해야 한다. 다익스트라는 목적지에 도달하기 전에 출발점을 기준으로 사방으로 탐색을 퍼트린다. 맵 전체를 샅샅이 뒤지는 셈이다. 결국 목적지에 도달했을 때, 이미 탐색한 노드의 절반 이상이 "가지 않아도 될 방향"이었다는 것이다.이 낭비를 없앨 수 없을까? "목적지가 오른쪽에 있다는 걸 알고 있으니, 왼쪽은 덜 살펴봐도 되지 않을까?" — 이 직관이 A* 알고리즘의 시작점이다.A* 알고리즘이란?A* 알고리즘은 출발 노드에서 목적 노드까지의 최단 경로를 찾는 알고리즘이다. 다익스트라와의 결정적..
[C++] C++의 Rule of 3/5/0
·
Study
서론C++에서 리소스 관리 코드를 작성할 때 가장 자주 마주치는 질문은 이것이다."특수 멤버 함수를 어디까지 직접 작성해야 안전하고, 또 빠를까?"이 질문에 대한 대표적인 가이드가 바로 Rule of Three, Rule of Five, Rule of Zero다. 이름은 단순하지만, 실제로는 객체 수명, 복사/이동 비용, 예외 안전성, 유지보수성까지 함께 다루는 설계 원칙이다.이번 글에서는 세 규칙을 단순 암기가 아니라, "왜 등장했는지"와 "언제 어떤 규칙을 선택해야 하는지" 관점으로 연결해서 정리해보자.Rule of Three: 왜 복사 제어 3종 세트가 필요했을까?고전 C++(C++11 이전)에서는 자원 소유 객체를 만들면 보통 아래 세 함수를 같이 고려해야 했다.소멸자(~T())복사 생성자(T(c..
[C++] C++의 Move semantics, forwarding
·
Study
서론C++11 이후 현대적 C++ 설계의 중심에는 항상 성능과 자원 관리가 있다. 그 핵심 도구가 바로 std::move와 std::forward다.우리의 교과서 모던 C++에서 이 move와 forward에 대한 중요성을 잘 다루고있다. 오늘은 이 두 함수가 왜 존재하며, 내부적으로는 어떤 원리로 동작하는지, 주로 하는 실수에 대해 정리해보자.값 카테고리(Value Category): lvalue와 rvalue의 본질move와 forward를 논하기 전에 반드시 짚고 넘어가야 할 것이 값 카테고리다. 단순히 "이름이 있으면 lvalue, 없으면 rvalue"라는 식의 암기보다 수명(Lifetime)과 정체성(Identity) 관점에서 접근하는 것이 정확하다.lvalue (left value): 지속적인..
2. [Unreal 5] 언리얼 엔진의 가비지 컬렉션(Garbage Collection, GC)
·
Study
서론이전 글에서 언리얼 엔진의 가비지 컬렉션(GC)이 Mark & Sweep 방식을 사용한다는 것을 알아보았다. 이는 개발자에게 메모리 관리의 편리함을 제공하지만, 실시간 게임 환경에서는 치명적인 단점이 될 수 있다. 바로 GC가 수행되는 동안 모든 게임 로직이 멈추는 Stop-the-World 현상 때문이다.특히 오픈 월드나 대규모 멀티플레이어 게임처럼 UObject의 수가 수십만 개에 달하는 환경에서는, GC 수행 시간이 길어져 프레임 드랍(Hitch)을 유발할 가능성이 높다. 이를 해결하기 위해 오브젝트 풀링(Object Pooling) 같은 기법을 사용하기도 하지만, 언리얼 엔진 자체적으로도 이러한 GC 오버헤드를 분산시키기 위한 최적화 기술을 제공한다.그것이 바로 점진적 도달 가능성 분석(Inc..
[CS] 데이터 지향 프로그래밍(DOP)
·
Computer Science
서론"객체 지향 프로그래밍(OOP)은 만능일까?" 학교나 학원에서 C++을 배우면 캡슐화, 상속, 다형성과 모든 것을 객체(Object)로 모델링하는 법을 우선적으로 배운다. 일반적인 상황에서는 OOP의 철학대로 설계를 하는것이 바람직하지만 최적화가 중요한 프로젝트에서는 OOP가 CPU 캐시를 괴롭히는 주범이라며 이를 피하려 한다. 오늘은 성능 최적화의 핵심 패러다임인 데이터 지향 프로그래밍(Data-Oriented Programming, DOP)에 대해 알아보자.데이터 지향 프로그래밍(DOP)이란?DOP는 데이터가 메모리에 어떻게 배치되는가를 최우선으로 고려하는 프로그래밍 기법이다.OOP가 현실 세계를 코드로 모델링하는 것에 집중한다면, DOP는 하드웨어(CPU, 캐시, 메모리)가 데이터를 효율적으로 ..

인기 글

1. [Unreal 5] 언리얼 엔진의 렌더링 파이프라인 (Rendering Pipeline)
·
Computer Graphics
서론 게임에서 무언가가 모니터 화면에 보여지고 있다는 것(렌더링)은 게임 엔진이 렌더링 파이프라인 이라는 정해진 과정을 열심히 수행하고 있다는 증거이다. 게임 엔진은 일반적으로 렌더링 파이프라인 이라는 것을 수행해 이미지 또는 프레임을 화면에 렌더링 한다. 본 게시글은 Unreal Engine에서 이 렌더링 파이프라인이 어떤 방식으로 이루어지고 어떻게 플레이어의 화면에 무언가를 렌더링 할 수 있는지에 대해 다루도록 하겠다.Rendering Pipeline? 렌더링 파이프라인의 과정에 대해 설명한 글은 정말 많다. 하지만 그 글들을 보면 과정이 조금씩 다르거나 똑같은 과정이라도 지칭하는 이름이 다르다. 렌더링 파이프라인은 렌더링의 목적에 따라 여러가지 종류의 렌더링 파이프라인이 존재하고, 설명하는 주체가 ..
1. [Unreal 5] Epic Online Service - 초기 설정
·
EOS
Epic Online Service?언리얼 엔진에서 멀티플레이를 구현하는 방법으로 데디케이티드 서버(Dedicated Server), 리슨 서버(Listen Server) 등의 방식이 있지만, 실제로 이를 불특정 다수의 플레이어가 접속할 수 있도록 만들려면 NAT 우회, 포트 포워딩 등의 네트워크 설정이 필요하다. 이는 우리가 일반적으로 접하는 상용 멀티플레이 게임과는 차이가 있다.EOS 소개 영상규모가 큰 멀티플레이 게임은 자체 전용 서버를 구축하거나 하이브리드 방식(P2P + 매치메이킹 서버 활용)을 사용하지만, 인디 게임이나 규모가 작은 멀티플레이 게임의 경우 언리얼 엔진 개발사인 Epic Games에서 제공하는 EOS(Epic Online Services)를 활용할 수 있다.EOS는 로그인, 클라..
[Unreal 5] C++ 클래스가 언리얼 에디터에서 보이지 않거나 삭제하고 싶을 때
·
Troubleshooting
언리얼 에디터에서는 C++ 클래스를 직접 삭제할 수 없기 때문에, 사용하지 않는 C++ 클래스를 삭제하려면 다음과 같은 과정을 따라야 한다.C++ 소스 삭제하고 싶을 때언리얼 에디터 종료Visual Studio 솔루션 탐색기의 프로젝트에서 해당 .cpp와 .h 파일 제거파일 탐색기에서 프로젝트 폴더 → Source 폴더 내의 Public에 존재하는 .h 파일과 Private에 존재하는 .cpp 파일 삭제Visual Studio에서 솔루션 우클릭 → 솔루션 다시 빌드빌드가 완료되면 언리얼 에디터 실행C++로 만든 클래스가 보이지 않을 때언리얼 에디터 종료Visual Studio에서 솔루션 우클릭 → 솔루션 다시 빌드빌드가 완료되면 언리얼 에디터 실행이 과정을 통해 삭제된 C++ 클래스 문제를 해결하거나, ..
2. [Unreal 5] 언리얼 엔진의 렌더링 파이프라인 (Rendering Pipeline)
·
Computer Graphics
서론 이전 시간에 Unreal Engine에서의 렌더링 파이프라인에 알아보기 전에 기초적인 하드웨어(GPU)관점에서의 렌더링 파이프라인에 대해서 알아보았다. 이번 시간에는 Unreal Engine에서 사용하는 렌더링 파이프라인은 어떤 방식이며 그것에 대해서 알아보도록 하자.Forward rendering Unreal Engine에서 사용하는 파이프 라인은 기본적으로 디퍼드 렌더링(Deferred rendering)과 포워드 렌더링(Forward rendering)을 선택하여 사용하고 디폴트는 디퍼드 렌더링을 사용한다고 한다. 우선 디퍼드 렌더링에 대해 알기 전에 포워드 렌더링에 대해 간략하게 알아보자. 이전 시간에 GPU의 관점에서의 렌더링 파이프라인에 대해 알아보았다. 포워드 파이프라인은 이것에서 조금..
[Unreal 5] 언리얼 엔진 C++ 개발 환경 설정과 기본 구조 익히기
·
Study
언리얼 프로젝트 생성 시 폴더 구조.vs 폴더Visual Studio가 자동 생성하는 디버깅·솔루션 설정 관련 폴더.일반적으로 직접 수정할 일은 없다.Binaries 폴더C++ 코드를 빌드하면 생성되는 실행 파일(.exe, .dll 등)이 저장된다.삭제 시, 다음 빌드에서 처음부터 다시 빌드하므로 시간이 더 걸릴 수 있다.Config 폴더게임플레이, 렌더링, 입력 등의 설정을 담은 .ini 파일들이 위치.에디터나 코드로 특정 설정을 변경하면 이 폴더의 파일이 수정된다.Content 폴더언리얼 에디터의 Content Browser와 연결된 폴더로, 모든 에셋(모델, 머티리얼, 사운드 등)이 포함된다.새 에셋을 생성하거나 불러오면 이 폴더에 저장된다.DerivedDataCache 폴더에셋, 쉐이더 등의 캐시..