클라이언트·그래픽스 · 25편
게임 클라이언트, 컴퓨터 그래픽스에 대한 글입니다.
-
[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 땅따먹기 프로토타입에서 플레이어 이동을 상태로 관리하고, 기존 경계와 새 경로로 두 후보 영역을 만든 뒤 교차 횟수로 보스 포함 여부를 판단하고 외적으로 점령 면적을 계산해 점령률에 반영한 설계와 구현 흐름을 정리합니다.
-
[Vulkan] 커맨드 풀 설계: 스왑체인 기반과 프레임 기반 구조 비교 분석
업데이트:Vulkan 학습 과정에서 접하는 두 가지 커맨드 풀 설계(스왑체인 이미지 기반, 프레임 인 플라이트 기반)를 비교 분석합니다. 각 구조의 장단점을 통해, 복잡한 애플리케이션을 위해 프레임 인 플라이트 기반 설계가 왜 더 효율적이고 확장성 있는 선택인지 설명합니다.
-
[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을 출발점으로, 네 가지 최적화 시도의 측정값과 손익을 정리합니다.
-
[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] 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 라이브러리를 사용한 일반적인 초기화 흐름을 다룹니다.