학습 노트
[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
텍셀 해상도가 달라져도 같은 속도로 흐르게 하려면
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