게임 엔진 Component 기반 구조 완벽 이해
최근 게임 엔진 구조가 지금과 같은 방향으로 발전한 이유와 왜 Component, ECS, Data Oriented Design 같은 기법들이 등장하게 되었는지를 정리했습니다.
시리즈 열기Game Engine Framework Notes
C++와 실제 엔진 사례를 바탕으로 메모리, 자료구조, Unreal/Unity 내부 구조를 설명하는 기술 블로그입니다.
최근에 직접 정리한 허브 글을 기준으로, 먼저 읽으면 좋은 시리즈를 모아 둡니다.
최근 게임 엔진 구조가 지금과 같은 방향으로 발전한 이유와 왜 Component, ECS, Data Oriented Design 같은 기법들이 등장하게 되었는지를 정리했습니다.
시리즈 열기게임 엔진 Transform 구조를 정리한 시리즈 글입니다. Position, Rotation, Scale부터 Local 좌표와 World 좌표, Parent/Child 구조, 행렬까지 게임 엔진의 공간 계산 구조를 함께 설명합니다.
시리즈 열기게임 렌더링 구조와 Rendering Pipeline의 전체 흐름을 입문자 기준으로 정리한 시리즈입니다. GPU가 Vertex 데이터를 어떻게 화면 픽셀로 변환하는지, Vertex Shader와 Rasterizer, Pixel Shader, Output Merger 단계는 왜 필요한지, 그리고 CPU와 GPU는 어떤 방식으로 협력하면서 화면 이미지를 만들어내는지를 전체 흐름 기준으로 설명합니다.
시리즈 열기함수 포인터, callback, std::function, delegate, multicast delegate까지 엔진 관점으로 이어서 읽을 수 있게 정리한 시리즈 허브 글입니다.
시리즈 열기fixed timestep, variable timestep, hybrid loop, deltaTime, FPS 제어를 엔진 관점에서 이어서 정리한 게임 루프 시리즈 허브 글입니다.
시리즈 열기allocator 설계, memory pool, placement new까지 C++ 게임 엔진 메모리 흐름으로 이어서 읽을 수 있게 정리한 시리즈 허브 글입니다.
시리즈 열기C++ RTTI의 기초부터 custom RTTI, Unreal 스타일 reflection 흐름까지 한 번에 따라갈 수 있게 정리한 시리즈 허브 글입니다.
시리즈 열기stack, heap, cache miss, AoS, SoA, ECS까지 게임 메모리 구조 관점에서 이어서 읽을 수 있게 모아 둔 시리즈 허브 글입니다.
시리즈 열기최근에 올린 글을 시간순으로 확인할 수 있습니다.
프로그램에서 사용하는 모든 데이터가 같은 방식으로 생성되고 사라지는 것은 아닙니다. 함수 안에 선언한 지역 변수는 일반적으로 함수 호출과 함께 생성되고 함수가 끝나면 자동으로 정리됩니다. void Function() { int…
앞선 글에서는 같은 타입의 여러 데이터를 배열에 저장하는 방법과 배열 이름이 대부분의 표현식에서 첫 번째 원소를 가리키는 포인터로 변환되는 과정을 알아보았습니다. 문자열도 이러한 배열과 포인터의 개념을 바탕으로 표현할…
같은 타입의 데이터를 여러 개 저장해야 할 때 각 변수를 하나씩 선언하면 코드가 길어지고 관리하기도 어렵습니다. int score1 = 100; int score2 = 90; int score3 = 80;…
함수의 매개변수를 일반 변수로 선언하면 호출할 때 전달한 값이 매개변수에 복사됩니다. void ChangeValue(int value) { value = 20; } 함수 안에서 복사본인 value를 변경해도 호출한 쪽의 원본 변수에는…
앞선 글에서는 포인터에 변수의 메모리 주소를 저장하고, 역참조 연산자 *를 사용해 원래 값에 접근하는 방법을 알아보았습니다. int number = 5; int* pointer = &number; *pointer = 10; C++에서는…
프로그램에서 사용하는 변수와 객체는 메모리의 특정 위치에 저장됩니다. 일반 변수에는 정수나 문자와 같은 값이 저장되지만, 포인터(Pointer)에는 다른 데이터가 위치한 메모리 주소를 저장할 수 있습니다. int number = 10;…
C++에서는 변수를 선언할 때 일반적으로 변수의 타입을 직접 작성합니다. int number = 10; double speed = 5.5; const char* npcName = "Toto"; 하지만 변수의 초기화 값만 보아도 타입을…
C++ 코드를 작성하다 보면 같은 타입을 여러 곳에서 반복해서 사용하거나, 함수 포인터처럼 선언이 복잡한 타입을 다뤄야 할 때가 있습니다. 예를 들어 다음과 같은 함수 포인터 선언은 한눈에 의미를…