일상
Fresnel Coefficient 적용해보기 -01 본문
https://raytracing.github.io/books/RayTracingInOneWeekend.html#dielectrics/
Now we can change our main to use this: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight #include "color.h" #include "vec3.h" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
raytracing.github.io
이전 포스트에서는 Ray Tracing in One Weekend에서 제공된 소스코드로 굴절, 반사에 대해 프레넬 방정식을
적용시키려고 했는데 실패했다.
실패한 이유를 곰곰히 생각해보니
1. c++ 실력의 부족함
2. 제공된 소스코드 이해 부족
3. 무지성 소스코드 작성
이 3가지가 가장 큰 실패의 요인이라고 생각된다.
실패 후 저녁을 먹고 생각을 해 봤는데 우선 문제를 단순화할 필요가 있다고 생각했다.
맨 위의 사이트에서 제공되는 소스코드의 경우 diffuse material, metal, dielectric 등의 material등을 생성할 때
reculsive를 이용한다. reculsive를 제한하기위해 depth 변수를 이용하는데 아무래도 이것 때문에 머리가 많이 복잡했다.
더구나 c++ 실력이 부족하다 보니 악재가 더더욱 겹치게 되었다.
그래서, 프레넬 방정식을 적용할 수 있는 material을 제외하고는 다 그냥 단색으로만 생성을 하기로 결정했다.
이럴 경우, 프레넬 방정식을 적용한 material을 제외하고는 reculsive가 필요가 없어진다.
우선 맨 위 사이트의 7장까지는 그대로 소스코드를 사용을 하였다.
위의 구체들의 색은 구체의 normal에 따라 변하게 된다. 우선 이걸 조정하여서 각 구체마다 고유의 단색을 설정을 하였다.
그 다음은 제공된 소스코드의 metal 부분을 참고하여 반사관련 소스코드를 작성하였다.
생각보다 수월하게 되어서 좀 놀랍기도 했다. 하지만 이 동작이 맞는지 확신이 가지 않아 제공된 소스코드와 똑같은
구체 이미지를 구성을 해 봤다.
맨 위의 사이트에 있는 이미지와 비교해볼 때 일치한다는것을 알 수 있다.
불투명 구체의 경우 제공된 소스코드의 경우 diffuse material에 대해서도 다루지만
나의 경우는 그냥 단색으로 처리가 되기 때문에 차이가 있다는것을 감안해주길 바란다.
반사도 구현을 했고 다음은 굴절 관련 소스코드를 작성해봤다.
10.4의 경우는 정확한 동작인지 의구심이 좀 들지만 사이트와 비교해볼 떄 10.2, 10.3의 이미지와 내가 생성한 이미지가
일치한다는것을 볼 수 있었다.
이 결과들을 꽤 빨리 얻게 되었다. 이전 포스트에서 실패를 해서 시간이 너무 낭비가 되었다고 생각을 했었는데 다르게 생각하면 시도조차 하지 않아 실패를 하지 않았다면 이 결과를 지금 얻지는 못했을것 같다. 우선 시도를 하는게 중요하다는것을 다시한번 알게 되었다.
사실, Ray Tracing in One Weekend 사이트에 있는 이론과 소스코드를 공부할 떈 그렇게 재미있진 않았다. 결국 내가 직접 하는것은 없기 때문이었다. 그런데 이번에 내가 직접 코드를 작성해보고 이미지를 비교해보고 새로운 이미지를 생성해보니 너무 재미있었다. 확실히 직접 해보는게 더 재미있다. 남보여주기 부끄러운 소스코드이긴 하지만 그래도 직접 해본다는게 너무 좋았다.
지금까지의 코드를 이용하여 다음은 프레넬 방정식을 적용한 이미지를 생성하기 위해 소스코드를 작성할 예정이다. 다음에는 소스코드를 작성하기 전에 큰 그림을 한번 그려보고 해야겠다. 다음 결과가 기대된다.
'computer graphics' 카테고리의 다른 글
Cornell box 만들어보기 (0) | 2021.11.06 |
---|---|
Fresnel Coefficient 적용해보기 -03 (0) | 2021.10.08 |
Fresnel Coefficient 적용해보기 -02 (0) | 2021.10.03 |
프레넬 방정식 적용해보기 (0) | 2021.09.30 |
Ray Tracing in One Weekend (0) | 2021.09.28 |