연도/월별로 정리된 전체 글 목록입니다.
-
[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로 바꿔 에이전트 작업 상태를 낮은 피로도로 확인하는 실험을 정리합니다.
-
[Emberlit] Quaternion 곱 순서: 같은 회전이 왼쪽·오른쪽에 따라 월드·로컬이 되는 이유
쿼터니언 곱 순서가 회전의 공간 기준을 결정하는 원리를 수식으로 전개하고, GLM 기반 FPS 카메라 예시로 월드 축 yaw와 로컬 축 pitch가 왜 다른 쪽에 곱해지는지 정리했습니다.
-
[Emberlit] Normal Mapping: TBN 행렬과 Vulkan 구현기
노멀 매핑의 탄젠트 공간과 TBN 행렬 수학, Vulkan + ASSIMP 환경에서의 구현과 UV 컨벤션 이슈를 정리한 학습 기록입니다.
-
[Emberlit] Normal Transform: 비균일 스케일에서 역전치행렬이 필요한 이유
비균일 스케일에서 노멀 벡터에 모델 행렬을 그대로 곱하면 면과의 수직 관계가 깨지는 이유를 정리하고, 수직 조건에서 역전치행렬을 유도하여 GLSL 코드와 1:1로 대응시킨 과정을 기록했습니다.
-
[Emberlit] Camera: worldUp hint로 right를 복원할 수 있는 이유
lookAt 함수의 worldUp hint가 roll 없는 카메라에서 정확한 right 벡터를 복원하는 이유를 카메라 모델 정의에서 출발하여 수학적으로 증명하고, roll이 들어가면 왜 부족한지 정리했습니다.
-
[Emberlit] CPU 레이트레이서 (2): 삼각형 충돌과 그림자
광선-삼각형 충돌을 평면 교점 + 내부 판별 2단계로 구현하고, shadow ray로 그림자를 추가하는 과정을 정리합니다.
-
[Emberlit] CPU 레이트레이서 (1): 광선이 구를 만나는 순간
매개변수 직선으로 광선을 표현하고, 판별식으로 구와의 충돌을 판정한 뒤, Phong 조명으로 입체감을 만드는 과정을 정리합니다.
-
[Vulkan] renderFinished 세마포어는 왜 프레임이 아니라 이미지에 묶어야 하는가
frames-in-flight를 줄였더니 Validation Layer 에러가 발생했습니다. fence와 semaphore가 각각 뭘 보장하는지, renderFinished를 이미지 인덱스로 관리해야 하는 이유를 정리합니다.
-
[Emberlit] 가우시안 블러 이해하기: 수식에서 GPU Compute까지
가우시안 함수의 수식을 분해하고, separable convolution의 원리를 증명한 뒤, Vulkan compute shader로 구현하고 GPU 결과를 수학으로 검증하는 과정을 정리했습니다.
-
[Emberlit] 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 라이브러리를 사용한 일반적인 초기화 흐름을 다룹니다.