학습 노트
카메라는 왜 Target을 가질까?
카메라의 기본 상태인 Position과 Orientation, LookAt과 Orbit Camera에서 Target이 관심점으로 쓰이는 이유
Series 카메라 개념 1 / 2
Ax = b를 연립방정식이 아닌 함수로 보기
Ax=b를 입력과 출력을 잇는 선형변환으로 바라보고, 무엇을 미지수로 두느냐에 따른 문제의 차이
Series Ax = b 다시 보기 1 / 3
선형변환은 왜 정보를 잃는가?
선형변환의 Null Space와 Projection을 통해 살펴보는 정보 손실, 역변환의 한계와 역문제
Series Ax = b 다시 보기 2 / 3
왜 수치해석 문제는 Ax = b가 되는가?
연속적인 물리 문제를 유한한 변수와 차분식으로 이산화해 Ax=b 선형 시스템으로 구성하는 과정
Series Ax = b 다시 보기 3 / 3
[C++] 로컬 반환에서 std::move가 RVO/NRVO를 막는 이유
로컬 변수를 반환할 때 std::move가 RVO/NRVO를 막아 오히려 손해가 되는 경우와 대안
텍셀 해상도가 달라져도 같은 속도로 흐르게 하려면
DistanceWeight의 상대 거리 보정과 실제 이동 속도를 구분하고, 전달량과 해상도 사이의 관계를 살펴본다.
Normal Map에서 Height Field 복원하기: 최소제곱 적분과 PCG
Normal Map의 기울기를 이산 높이차 제약으로 구성해 최소제곱과 PCG로 Height Field 복원
Phong에서 PBR까지 (1) - 우리는 반짝임을 어떻게 계산했을까?
Phong Reflection Model을 통해 실시간 렌더링에서 Diffuse와 Specular를 계산하는 가장 고전적인 방법을 살펴봅니다.
Series Phong에서 PBR까지 1 / 6
Phong에서 PBR까지 (2) - Half Vector는 왜 등장했을까?
Phong의 Reflection Vector 대신 Half Vector를 사용하는 Blinn-Phong을 살펴보고, 이 개념이 Microfacet Model로 어떻게 이어지는지 알아봅니다.
Series Phong에서 PBR까지 2 / 6
Phong에서 PBR까지 (3) - BRDF란 무엇인가?
Diffuse와 Specular를 단순한 조명 항이 아니라, 입사광을 반사하는 표면의 함수인 BRDF 관점에서 다시 살펴봅니다.
Series Phong에서 PBR까지 3 / 6
Phong에서 PBR까지 (4) - 표면은 수많은 작은 거울이다
현대 PBR의 핵심인 Microfacet Model의 아이디어와 Cook-Torrance BRDF의 D, G, F가 무엇을 의미하는지 살펴봅니다.
Series Phong에서 PBR까지 4 / 6
Phong에서 PBR까지 (5) - GGX, Smith, Schlick은 무엇일까?
Cook-Torrance Microfacet BRDF를 구성하는 GGX, Geometry, Fresnel 항의 역할과 Roughness의 의미를 살펴봅니다.
Series Phong에서 PBR까지 5 / 6
Phong에서 PBR까지 (6) - PBR과 Unreal Engine
Phong에서 시작한 조명 모델이 현대 PBR과 Unreal Engine의 Base Color, Metallic, Roughness, Specular로 어떻게 이어지는지 정리합니다.
Series Phong에서 PBR까지 6 / 6
실시간 렌더링은 왜 빛을 캐싱하는가
GI 계산을 모든 픽셀에서 반복하는 대신, 계산한 빛을 저장하고 재사용할 수는 없을까?
빛을 어디에 저장할 것인가: Texel, Voxel, Probe
표면의 UV, 공간의 셀, 공간의 대표 지점에 빛을 저장할 때 생기는 차이.
Light Probe: 공간에 빛을 저장한다는 것
Probe는 주변 빛을 저장하는 측정점이다. 하지만 어느 표면에 그 빛을 나눠줘도 되는지는 별도의 문제다.
Surfel: 공간이 아니라 표면에 빛을 저장한다면
빛이 필요한 표면에 조명 샘플을 붙이면 어떤 정보가 필요하고 어떤 문제가 남을까?
Surfel GI는 어떻게 동작하는가 — EA GIBS 뜯어보기
장면 표면의 원판들이 G-buffer, ray tracing, persistent cache를 연결하는 조명 샘플이 되는 과정.
한 프레임의 빛을 다음 프레임에서 써도 될까?
이전 결과를 오래 믿으면 안정적이지만 늦게 반응한다. 캐시의 유효성과 noise를 함께 다루는 방법.
결국 GI는 캐시 문제다: Lightmap부터 Radiance Cache까지
새로운 GI 기술을 만났을 때, 어디에 무엇을 저장하고 어떻게 읽고 갱신하는지부터 묻는다.
카메라는 왜 Target을 가질까?
카메라의 기본 상태인 Position과 Orientation, LookAt과 Orbit Camera에서 Target이 관심점으로 쓰이는 이유
Series 카메라 개념 1 / 2
Ax = b를 연립방정식이 아닌 함수로 보기
Ax=b를 입력과 출력을 잇는 선형변환으로 바라보고, 무엇을 미지수로 두느냐에 따른 문제의 차이
Series Ax = b 다시 보기 1 / 3
선형변환은 왜 정보를 잃는가?
선형변환의 Null Space와 Projection을 통해 살펴보는 정보 손실, 역변환의 한계와 역문제
Series Ax = b 다시 보기 2 / 3
왜 수치해석 문제는 Ax = b가 되는가?
연속적인 물리 문제를 유한한 변수와 차분식으로 이산화해 Ax=b 선형 시스템으로 구성하는 과정
Series Ax = b 다시 보기 3 / 3
[C++] 로컬 반환에서 std::move가 RVO/NRVO를 막는 이유
로컬 변수를 반환할 때 std::move가 RVO/NRVO를 막아 오히려 손해가 되는 경우와 대안
[C++] Most vexing parse
C++의 고전적인 문법 모호성(ambiguity) 문제인 'Most vexing parse'의 원인과 해결방법
[C++] Compile-time 분기 vs Runtime 분기 (if constexpr)
C++ Template를 사용할 때 흔히 겪는 분기 처리 오류 사례를 통한 Compile-time 분기와 Runtime 분기의 개념을 정리
[CG] Premultiplied Alpha & Straight Alpha
Computer Graphics에서 Alpha(투명도) 값을 표현하는 두 방식
[CG] Depth, Z and W, and Clip Space
3D 공간을 2D로 옮기는데 있어 제4의 좌표축 z, 그리고 clip space의 역할
The water effects in Super Mario Sunshine: Implementation
The reverse engineering of water effects in SuperMario Sunshine
The water effects in Super Mario Sunshine: How it works
게임 'Super Mario Sunshine(2002)'은 하드웨어적 한계 속에서 어떻게 혁신적인 물 그래픽을 구현했는가: 기술적 원리와 구현 트릭 분석
[CPython] Type & Metaclass (PyType_Type)
Python 자료형의 특징과 클래스 계층 구조, metaclass 'type'의 구현
[CPython] Python Object Model (PyObject)
Python에서 정의하는 Object(객체)의 개념과 CPython 내부 구현 모델
[C] variadic function: Implementation
variadic function의 공식 API 'va_list'의 구현과 설계 분석
Series variadic-function 1 / 2
[C] variadic function: Calling Convention
variadic function 구현에 있어 Low-level behavior가 갖는 의미와 표준, Calling convention(호출 규약)
Series variadic-function 2 / 2