Category Archives: Series

[RT in One Weekend Series 8] Diffuse Materials (번역)

목차: Series 1: Index and Overview (Link) 이전 글: Series 7: Anti-aliasing (Link) 다음 글: Series 9: Metal (Link) MK: 이 장을 여러 번 읽었지만 이해를 정확하게 하지 못한 부분이 몇 군데 존재한다. 추가로 Diffuse (Matte) Material은 무광택 물체를 의미하는 것 같다. 이번 글에서 Diffuse (Matte) Material을 무광택 물체(Object)로 작성하였다. 추가로 출처 2에서 Diffuse Lighting이란 개념을 소개한다. Diffuse Material과… Read More »

[RT in One Weekend Series 7] Anti-aliasing (번역)

목차: Series 1: Index and Overview (Link) 이전 글: Series 6: Surface Normals and Multiple Objects (Link) 다음 글: Series 8: Diffuse Materials (Link) 이번 장에서는 Anti-Aliasing에 대한 설명을 작성한다. 예전에 Anti-Aliasing에 대한 글을 작성한 적이 있다 (출처 2). Anti-Aliasing을 간단히 설명하면 Object(물체)의 Edge 부분을 부드럽게 만드는 방법이다. 예를 들어 사진을 찍을 경우 물체의 Edge가 부드럽게 표현된다. Object Edge… Read More »

[RT in One Weekend Series 6] Surface Normals and Multiple Objects (번역)

목차: Series 1: Index and Overview (Link) 이전 글: Series 5: Adding a Sphere (Link) 다음 글: Series 7: Antialiasing (Link) 이번 글에서는 구의 표면 색상값을 Normal Vector 값으로 변경하는 코드를 작성한다. MK: 그래픽에서 Normal Vector 값은 아주 많이 사용된다. 특히 Light (빛) 색상을 결정하는 단계에서 아주 기본적인 개념이다. 그림 1: 구의 Normal Vector 값을 계산하는 방법 그림1은 구에서… Read More »

[RT in One Weekend Series 5] Adding a Sphere (번역)

목차: Series 1: Index and Overview (Link) 이전 글: Series 4: Rays, a Simple Camara, and Background (Link) 다음 글: Series 6: Surface Normals and Multiple Objects (Link) Ray Tracer 예제에서 구(sphere)를 사용하는 경우가 많다고 한다. 가장 큰 이유는 Ray가 Travel을 할 때 구에 Hit을 했는지 여부를 판단하는 데 있어서 계산식이 아주 직관적이기 때문이다. 예를 들어서 특정 포지션 (cx, cy, cz)에 구가… Read More »

[RT in One Weekend Series 4] Rays, a Simple Camara, and Background (번역)

목차: Series 1: Index and Overview (Link) 이전 글: Series 3: The “vec3” Class (Link) 다음 글: Series 5: Adding a Sphere (Link) Ray Tracer의 가장 기본은 Ray이다. 보통 모든 Ray Tracer은 Ray Class를 가진다. Ray Class는 Ray가 도달하는 위치의 최종 색상 값을 계산한다. 출처 1의 기사(Article)에서는 Ray를 p(t) = A + t*B 함수로 정의하였다. p는 3D Position(위치)을 의미하며, t는 Float Number를… Read More »

[RT in One Weekend Series 3] The “vec3” Class (번역)

목차: Series 1: Index and Overview (Link) 이전 글: Series 2: Output an Image (Link) 다음 글: Series 4: Rays, a Simple Camara, and Background (Link) 이번 글에서는 효율적으로 Vector 연산을 수행하기 위해서 한개의 Vector Class와 여러개의 Vector Operator 함수를 작성한다. 그래픽 연산에서는 4D Vector를 아주 많이 사용한다. 예를 들어 좌표를 나타내기 위해서 4D (3D + Homogeneous Coordinate)를… Read More »

[RT in One Weekend Series 2] Output an Image (번역)

목차: Series 1: Index and Overview (Link) 이전 글: Series 1: Index and Overview (Link) 다음 글: Series 3: The “vec3” Class (Link) 글을 작성(번역)하기 이전에 먼저 개발 환경에 대해서 정리하였다. OS: macOS Mojave Version 10.14.4 G++: 4.2.1 Image Viewer: Mac Preview 10.1 C/C++ 등의 언어를 처음 배우면 가장 먼저 Hello World를 출력하는 코드를 작성한다.… Read More »

[RT in One Weekend Series 1] Index and Overview (번역)

“Ray Tracing (RT) in One Weekend”은 Peter Shirley가 작성한 자료이다 (출처 1). 해당 글은 누구나 읽을 수 있도록 공개되어 있다 (출처 3). Ray Tracing 기법이 궁금해서 찾아보는 과정에서 “RT in One Weekend”를 찾게 되었다. 좋은 자료라고 판단되어서 공부를 하는 차원에서 정리를 할 계획이다. 단순히 번역을 목표로 하고 있지만, 개인적으로 찾아본 자료를 중간중간 추가로 작성할 계획이다. 번역이라고 하니 엄청난 일인… Read More »

[GPGPU Series 9] Memory Hierarchy on GPUs

GPU의 메모리 구조에 대해서 정리를 해보았다. 최근 GPU는 CPU와 비슷한 메모리 계층 구조를 가지고 있다.  GPGPU를 지원하는 초창기 GPU는 CPU와는 다소 다른 메모리 계층 구조를 가졌던 것으로 알려져 있다. 하지만 GPU를 General Purpose 연산 목적으로 많이 사용하면서 점차 CPU와 비슷한 메모리 계층 구조로 바뀌게 된 것 같다. 그림 1: CPU, GPU Memory 구조 (출처 1, 2)… Read More »

[GPGPU Series 8] Branch Divergence

GPU는 Thread를 32 또는 64개씩 묶어서 하나의 같은 Instruction을 수행한다. Branch Divergence는 Warp에 속한 Thread가 서로 다른 연산을 수행해야 하는 경우 발생한다. 예를 들어 Warp에 속한 짝수 ID를 가진 Thread는 IF 문에 해당하는 코드를 실행해야 하고, 홀수 ID를 가진 Thread는 ELSE에 해당하는 코드를 실행해야 하는 경우 Branch Divergence가 발생한다. 아래 코드는 Thread ID의 홀수 짝수 여부를 확인하여… Read More »