[RT in One Weekend Series 10] Dielectrics + Snell’s Law (번역)

목차: Series 1: Index and Overview (Link) 이전 글: Series 9: Metal (Link) 다음 글: Series 11: Positionable Camera (Link) 투명한 Surface를 가진 물체 (물, 다이아몬드, 컵 등)을 Dielectric(유전체)이라고 한다. Ray가 투명한 Surface를 가진 물체와 Intersection(부딪히게) 되면 Ray는 Reflection(반사)와 Refraction(굴절)이 발생한다. 우리가 구현하고 있는 Ray Tracer에서는 Ray가 투명한 Surface를 가진 물체를 만나면 Ray를 반사하거나, 굴절시키는

[Python] namedtuple (네임드튜플) 사용 (Struct like C)

namedtuple은 C언어 Struct와 같이 Value를 여러 개 저장해서 Variable 이름으로 접근이 가능하다. 개인적으로 C Struct와 비슷해서 사용하게 되었다. 출처 1에 따르면 namedtuple은 Python 기본자료형이 아니라고 한다. namedtuple을 사용하기 위해서는 아래와 같이 Collections를 추가해야 한다. from collections import namedtuple namedtuple 사용하기 출처 1에 제공하는 예제를 조금 변경하여서 아래 예제 코드를 하나 작성하였다. [crayon-5d5bc7dab67da950452662/] 그림1: namedtuple Example

[RT in One Weekend Series 9] Metal (번역)

목차: Series 1: Index and Overview (Link) 이전 글: Series 8: Diffuse Materials (Link) 다음 글: Series 10: Dielectrics (Link) 이제 여러 개의 다른 Material을 가진 Object를 그려볼 차례이다. Material이 다른 여러 종류의 Object를 그리기 위해서는 Design Decision이 필요하다. 한 가지 방법은 Universal Material Class를 생성하고 필요 없는 Parameter를 0으로 설정하는 방법이다. 다른 방법은 Abstract Material Class를 생성하고 해당 클래스는 Ray의 반사

[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과

[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

[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은 구에서

[Android] Systrace를 사용하여 SurfaceFlinger 동작 원리 확인하기

Android System Trace (Systrace (출처1))를 사용하여 GPU가 Rendering 한 결과 이미지를 SurfaceFlinger을 통해서 Display 되는 순서를 확인하는 방법에 대해서 정리하였다. Systrace를 사용하여 순서를 확인하기 전에 Android에서 Producer, Consumer, BufferQueue에 대한 이해가 필요하다. 솔직히 완전히 이해하진 못하지만, 간단히 이해한 내용을 정리하였다. 다음에 알게 되는 내용을 추가하거나,  또는 잘못된 내용을 찾게 되면 수정할 계획이다. 그림 1: Producer/Buffer

[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)에 구가

[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를

[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)를