연도/월별로 정리된 전체 글 목록입니다.
-
[C++] Templates: 기초부터 컴파일 타임 타입 검증까지
C++17 템플릿의 개념과 기본 문법을 알아봅니다.
-
[C++] Service Host: 패킷과 서비스 로직을 연결하는 공통 파이프라인
업데이트:Packet Tool을 이용해 패킷 생성을 자동화해도 실제 서비스에 반영하기 위해 필요한 분기 처리, 검증, 패킷 전달과 응답의 과정을 Service Host의 공통 파이프라인으로 모은 과정을 정리합니다.
-
[C++] Packet Tool: JSON 스키마 기반 패킷 코드 자동화
패킷을 추가할 때마다 새로운 코드를 매번 작성하던 기존 구조에서, Protobuf의 코드 생성 구조를 참고한 JSON 기반 Packet Tool의 도입 과정을 살펴봅니다.
-
[C++] 결과 반환과 상세 진단을 위한 공통 파이프라인
PrivateServer에서 새로운 계층마다 결과 타입을 반복해 작성했던 경험을 돌아보고, Vulkan의 VkResult를 참고해 결과 반환과 상세 진단을 TkResult와 TkDiagnostic으로 분리한 공통 계층을 설계하고 Packet Tool에 적용한 과정을 정리합니다.
-
[C++] C++ 객체를 C#에 전달하기
C++ IOCP NetworkRuntime을 Godot C#에서 사용하기 위해 C ABI 브리지, 불투명 핸들, P/Invoke, SafeHandle과 페이로드 소유권을 설계한 과정을 정리합니다.
-
[C++] 게임 클라이언트 동작 흐름
업데이트:서버 권위형 온라인 게임에서 전송 지연을 클라이언트 예측과 보간으로 흡수하고, 충돌 후보 탐색과 관심 영역으로 서버 연산과 상태 전송을 줄이는 흐름을 정리합니다.
-
[C++] 고정 블록 메모리 풀: 메모리 풀은 더 빠를까?
고정 블록 메모리 풀을 new/delete와 비교합니다.
-
[C++] World Server 2: Double Buffer 도입기
업데이트:비동기 Runtime event를 authoritative tick 입력으로 확정하기 위해 Double Buffer를 도입하고, publication 병목을 Outbound Triple Buffer로 개선한 과정을 정리합니다.
-
[C++] World Server 3: 게임 로직의 계산과 상태 반영을 분리하다
업데이트:네트워크 event를 tick 전용 input으로 변환하고, 읽기 전용 상태를 계산한 typed result만 Coordinator가 반영하도록 게임 로직의 mutation 경계를 분리한 과정을 정리합니다.
-
[C++] IOCP 2: NrRuntime의 Winsock I/O Pipeline과 Lifetime
NrRuntime이 AcceptEx와 ConnectEx로 연결을 만들고, IOCP completion을 Session Actor에 전달해 partial receive와 send, 종료 시 pending I/O lifetime을 관리하는 구조를 정리합니다.
-
[C++] World Server 1: Fixed-Step과 Bounded Catch-Up
업데이트:World Server가 tick을 유지하고, 밀린 simulation의 event와 state 발행을 구분하는 과정을 정리합니다.
-
[C++] Actor Scheduling: Lost Wakeup을 막는 Admission Protocol
업데이트:Producer와 Consumer가 구분되어 있는 환경에서 발생할 수 있는 Lost Wakeup 에 대해 알아보고, 어떻게 해결할 수 있었는지 알아봅니다.
-
[C++] MPSC Queue: Atomic은 MutexLock보다 빠른가
Private Server의 bounded MPSC queue를 MutexLock과 Atomic으로 구현하고 비교하면서, CAS 경합과 캐시 공유, lock-free 진행 보장, 동기화 방식의 선택 기준을 다시 검토한 과정을 정리합니다.
-
[C++] IOCP 1: OVERLAPPED I/O와 Completion Port
Windows OVERLAPPED I/O의 요청과 완료 구조를 먼저 살펴보고, Winsock 비동기 API의 주요 파라미터와 IOCP의 handle 연결 및 completion 처리 방식을 정리합니다.
-
[WinAPI] 메탈슬러그 모작: 충돌 이벤트와 지형 보정
WinAPI 메탈슬러그 모작에서 충돌 그룹을 선택적으로 검사하고, 축 정렬 박스와 회전 박스를 분리해 판정한 뒤 이전 프레임 상태로 진입·유지·종료 이벤트를 만들고 경사 지형 위 위치를 보정해 점프와 낙하에 연결한 흐름을 정리합니다.
-
[WinAPI] 메탈슬러그 모작: 프레임 루프와 버퍼 합성
WinAPI 메탈슬러그 모작에서 메시지 처리와 게임 프레임을 분리하고, 씬·충돌·이벤트 갱신 순서를 구성한 뒤 GDI 비트맵 복사와 백 버퍼를 이용해 일반·반전·회전 스프라이트를 최종 화면에 합성한 흐름과 선택 이유를 정리합니다.
-
[WinAPI] 메탈슬러그 모작: 데이터 기반 파트 애니메이션
WinAPI 메탈슬러그 모작에서 불규칙한 스프라이트의 프레임 영역·투명색·피벗을 파일 데이터로 분리하고, 런타임에서 상체·하체·전체 애니메이션으로 분류해 상태 전환과 렌더링에 연결하고 일회성 동작을 스택으로 복귀시킨 설계를 정리합니다.
-
[Unity] Project Ellie: UGUI 바인딩과 인벤토리 슬롯 교환
Unity Project Ellie에서 UIManager, enum 기반 UIBase.Bind, UIEventHandler로 UGUI 생성과 입력 연결을 공통화하고, 인벤토리 슬롯 드래그·교환 상태를 처리한 설계와 선택 이유를 정리합니다.
-
[Unity] Project Ellie: Event Channel로 입력과 UI 연결하기
7인 Unity 팀 프로젝트 Project Ellie에서 씬별 Event Channel과 Ticket을 구성하고, 플레이어 입력을 인벤토리 UI 갱신으로 전달한 과정과 직접 참조를 나누어 사용한 설계 기준을 정리합니다.
-
[WinAPI] 땅따먹기: 경로 병합과 점령 영역 선택
WinAPI 땅따먹기 프로토타입에서 플레이어 이동을 상태로 관리하고, 기존 경계와 새 경로로 두 후보 영역을 만든 뒤 교차 횟수로 보스 포함 여부를 판단하고 외적으로 점령 면적을 계산해 점령률에 반영한 설계와 구현 흐름을 정리합니다.
-
[Godot] Terrain TileSet: Constraint로 이해하는 Autotiling
Godot 4 Terrain TileSet이 타일을 고르는 과정을 center terrain, peering bit, match mode, constraint, penalty 관점에서 정리합니다.
-
[Marching Cubes] 2D에서 3D로: Metaball 렌더링 최적화 일지
2D Marching Squares를 3D Marching Cubes로 확장하다 마주친 FPS 1 baseline을 출발점으로, 네 가지 최적화 시도의 측정값과 손익을 정리합니다.
-
일러스트풍 3D가 FPS 카메라에서 버티는 조건: 외곽선 두 번, 텍스처 다섯 번, 그림자 한 번 갈아엎고 남은 것
정지 이미지가 아니라 FPS 카메라에서 살아남는 일러스트풍 3D 룩을 만들기 위해 외곽선·텍스처·머티리얼·그림자·LUT를 단계별로 검증하고 폐기·채택한 기록입니다.
-
[LLM Workbench] btwin Memory: 세션 밖에 맥락 남기기
LLM 세션이 바뀌어도 작업 맥락을 이어가기 위해 btwin에서 사용한 파일 기반 기록, TLDR 임베딩, 검증 구조를 정리합니다.
-
[LLM Workbench] btwin Orchestration: 에이전트 작업 흐름을 작게 제어하기
무거운 agent framework 대신 thread, protocol, phase, guard, hook으로 LLM 에이전트 작업 흐름을 관리한 과정을 정리합니다.
-
[LLM Workbench] Hooklusion: 에이전트 상태를 작은 신호로 보기
Claude Code와 Codex hook event를 desktop character state로 바꿔 에이전트 작업 상태를 낮은 피로도로 확인하는 실험을 정리합니다.
-
[Vulkan] Normal Mapping: TBN 행렬과 Vulkan 구현기
노멀 매핑의 탄젠트 공간과 TBN 행렬 수학, Vulkan + ASSIMP 환경에서의 구현과 UV 컨벤션 이슈를 정리한 학습 기록입니다.
-
[Vulkan] Quaternion 곱 순서: 같은 회전이 왼쪽·오른쪽에 따라 월드·로컬이 되는 이유
쿼터니언 곱 순서가 회전의 공간 기준을 결정하는 원리를 수식으로 전개하고, GLM 기반 FPS 카메라 예시로 월드 축 yaw와 로컬 축 pitch가 왜 다른 쪽에 곱해지는지 정리했습니다.
-
[Vulkan] Camera: worldUp hint로 right를 복원할 수 있는 이유
lookAt 함수의 worldUp hint가 roll 없는 카메라에서 정확한 right 벡터를 복원하는 이유를 카메라 모델 정의에서 출발하여 수학적으로 증명하고, roll이 들어가면 왜 부족한지 정리했습니다.
-
[Vulkan] Normal Transform: 비균일 스케일에서 역전치행렬이 필요한 이유
비균일 스케일에서 노멀 벡터에 모델 행렬을 그대로 곱하면 면과의 수직 관계가 깨지는 이유를 정리하고, 수직 조건에서 역전치행렬을 유도하여 GLSL 코드와 1:1로 대응시킨 과정을 기록했습니다.
-
[Vulkan] CPU 레이트레이서 (1): 광선이 구를 만나는 순간
매개변수 직선으로 광선을 표현하고, 판별식으로 구와의 충돌을 판정한 뒤, Phong 조명으로 입체감을 만드는 과정을 정리합니다.
-
[Vulkan] CPU 레이트레이서 (2): 삼각형 충돌과 그림자
광선-삼각형 충돌을 평면 교점 + 내부 판별 2단계로 구현하고, shadow ray로 그림자를 추가하는 과정을 정리합니다.
-
[Vulkan] renderFinished 세마포어는 왜 프레임이 아니라 이미지에 묶어야 하는가
frames-in-flight를 줄였더니 Validation Layer 에러가 발생했습니다. fence와 semaphore가 각각 뭘 보장하는지, renderFinished를 이미지 인덱스로 관리해야 하는 이유를 정리합니다.
-
[Vulkan] 가우시안 블러 이해하기: 수식에서 GPU Compute까지
가우시안 함수의 수식을 분해하고, separable convolution의 원리를 증명한 뒤, Vulkan compute shader로 구현하고 GPU 결과를 수학으로 검증하는 과정을 정리했습니다.
-
[Vulkan] Vulkan Compute로 블룸 만들기: threshold, blur, composite, 그리고 이미지 전이
Vulkan compute shader로 블룸 후처리를 구현하며 threshold, blur, composite 3단계 파이프라인과 이미지 레이아웃 전이, 디스크립터 바인딩을 정리한 학습 기록입니다.
-
[Unity] UI Toolkit 도입기: UGUI에서 UITK으로의 전환
Unity 게임 프로젝트에 UI Toolkit(UITK)을 도입한 과정을 정리합니다. UGUI와의 렌더링·스타일·레이아웃 구조적 차이, 디자인 시스템 구축 과정에서 겪은 과제와 장점, LLM 활용 가능성과 하이브리드 접근 방향을 기록합니다.
-
[Unity] UseCase Pattern: EditMode 테스트 가능한 비즈니스 로직 분리
Unity에서 `MonoBehaviour`와 싱글턴에 결합된 구매 로직이 `EditMode` 테스트를 막는 이유를 정리하고, `UseCase`·`Port`·`Adapter` 분리로 테스트 가능한 구조로 전환한 과정을 기록합니다.
-
[Vulkan] 커맨드 풀 설계: 스왑체인 기반과 프레임 기반 구조 비교 분석
업데이트:Vulkan 학습 과정에서 접하는 두 가지 커맨드 풀 설계(스왑체인 이미지 기반, 프레임 인 플라이트 기반)를 비교 분석합니다. 각 구조의 장단점을 통해, 복잡한 애플리케이션을 위해 프레임 인 플라이트 기반 설계가 왜 더 효율적이고 확장성 있는 선택인지 설명합니다.
-
[Vulkan] MoltenVK 종료 시 메모리 할당 메시지 분석
MoltenVK 사용 시 프로그램 종료 시점에 나타나는 'GPU memory still allocated' 로그의 원인을 여러 가설과 실험을 통해 분석하고, 이것이 실제 메모리 누수가 아닌 macOS 디스플레이 컴포지터의 정상 동작임을 확인하는 과정을 정리했습니다.
-
[Vulkan] 좌표계의 Y축은 왜 아래를 향할까?
Vulkan의 Y축이 아래를 향하는 이유를 그래픽스 파이프라인의 좌표 변환 과정을 통해 설명합니다. 특히, NDC(정규화된 장치 좌표) 공간이 뷰포트 변환을 거쳐 프레임버퍼 좌표로 매핑될 때 Y축이 반전되는 원리를 Vulkan 명세를 기반으로 분석합니다.
-
[Vulkan] 초기화: 창, 인스턴스, 디바이스
Vulkan 초기화 과정, 특히 창(Window), 인스턴스(Instance), 디바이스(Device) 설정 흐름을 다룹니다. 각 구성요소의 역할과 올바른 생성 및 파괴 순서를 정리했습니다.
-
[Vulkan] WSI: GLFW를 이용한 창과 서피스 연결
GLFW를 사용하여 Vulkan 렌더링을 위한 창을 생성하고, 이를 Vulkan 인스턴스와 연결하여 `VkSurfaceKHR`를 만드는 방법을 설명합니다. 또한 `VkSurfaceKHR`가 물리 디바이스 선택, 창 크기 변경 처리, 리소스 소멸 순서에 미치는 영향을 다룹니다.
-
[Vulkan] WSI: 창과 프레젠테이션의 관계
이 문서는 Vulkan 렌더링 파이프라인에서 운영체제의 창(Window)과 화면 출력(Presentation)이 어떻게 상호 작용하는지 설명합니다. `VkSurfaceKHR`, 스왑체인, WSI(Window System Integration)의 핵심 개념과 GLFW 라이브러리를 사용한 일반적인 초기화 흐름을 다룹니다.