[CUDA RT Series 1] Index + Methodology

CUDA RT Series Index Ray Tracing (RT) in One Weekend(출처2)의 내용을 혼자 공부하면서 번역(출처 1)을 해보았다. 지난 RT 시리즈를 작성하면서 CUDA를 사용한 병렬화에 아주 적합한 코드인듯하여서 인터넷에 검색해 보니 역시나 병렬화 코드가 공개되어 있다 (출처 3). 개인적으로 CUDA 코드를 작성하는 방법에 대한 시리즈를 한번 작성해보고 싶었는데 출처 3에 좋은 내용이 있어서 역시나 공부를 하면서 번역을 해볼… Read More »

[RT in One Weekend Series 13] Where Next? (번역)

목차: Series 1: Index and Overview (Link) 이전 글: Series 12: Defocus Blur (Link) 먼저 Random 하게 많은 Sphere(구)를 그려서 이번 글에 사용할 표지 이미지를 만들어본다. 아래 코드 1은 Random 하게 많은 구를 그리기 위한 Main 코드이다. 코드 1: 많은 수의 구를 그리기 위한 Main 코드

위 코드를 실행하면 아래 그림 1과 같은 결과 이미지를 확인… Read More »

[RT in One Weekend Series 12] Defocus Blur (번역)

목차: Series 1: Index and Overview (Link) 이전 글: Series 11: Poisionable Camera (Link) 다음 글: Series 13: Where Next? (Link) 이번 RT 시리즈의 마지막 Feature는 Defocus Blur이다. Photographers(사진사?)는 Defocus Blur Feature를 보통 “Depth of Field”라고 한다. 실제 카메라를 사용해서 사진을 찍으면 Defocus Blur 현상이 나타나는 이유는 카메라 렌즈가 구멍(Big Hole)으로 만들어져있기 때문이다 (현재 우리가 구현한 코드는 아주 작은… Read More »

[RT in One Weekend Series 11] Positionable Camera (번역)

목차: Series 1: Index and Overview (Link) 이전 글: Series 10: Dielectrics (Link) 다음 글: Series 12: Defocus Blur (Link) 이전 글에서 작성한 Diselectrics와 동일하게 Camera 역시 Debugging 하는데 어려움이 많다고 한다. 그래서 출처 1에서는 Camera 코드를 순차적으로 작성하여서 Debugging Overhead를 최소화하였다. 가장 먼저 FOV (Field Of View/Field Of Vision)을 조절하는 코드를 작성한다. 대부분의 게임과 동일하게 우리가 그리는… Read More »

[Python] argparse 사용 예제

Python으로 작성한 코드를 실행할 때 특정 Argument를 추가해야만 실행이 가능하도록 코드를 작성하고 싶은 경우가 발생한다. Python에서 “argparse”를 사용하면 쉽게 Argument를 추가할 수 있다. Argparse 사용하기 아래 코드1은 Argparse를 사용하는 예제 코드이다. argparse.ArgumentParser(…): argparse를 사용하기 위해서 가장 먼저 해당 코드를 사용해서 Variable을 생성한다. VARIABLE.add_argument(…): 생성된 Variable에 add_argument(..)를 사용해서 Argument 옵션을 하나씩 추가한다. 위 2가지가 Argparse를 사용하는… Read More »

[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를 반사하거나, 굴절시키는… Read More »

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

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

그림1: namedtuple Example… Read More »

[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의 반사… Read More »

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