kwan's note

전역 조명( global illumination) - 레이 트레이싱 (ray tracing), cube mapping 본문

graphics VR AR/Computer Graphics -Korea Univ

전역 조명( global illumination) - 레이 트레이싱 (ray tracing), cube mapping

kwan's note 2021. 7. 1. 22:06
반응형

본 학습노트는 2021년 1학기 고려대학교 한정현 교수님의 컴퓨터 그래픽스 강의를 수강하고 이 내용을 기반으로작성하였습니다.

 

이전노트:https://reminder-by-kwan.tistory.com/142

 

이번 시간에는 global 조명 모델과 texturing에 대해 추가적으로 다루어 보겠습니다.

지금까지 다룬 simple phong model에서는 다른 물체들과의 상호작용에 대해서는 다루지 않았다.

a는 가려져있음에도 빛이 오는것 처럼 보인다.

b는 s3로부터 반사되는 빛이 무시되었다.

c가 실제 와 유사하다고 볼 수 있다.

 

따라서 c와같은 빛 표현을 하기 위해서는 global illumination 표현이 필요하다.

이러한 global illumination 모델중 대표적인 모델이 ray tracing과 radiosity 기법이다.

 

뷰 프로스텀에서 projection line이 w*h 의 갯수만큼(해상도와 동일) 존재했다.

이러한 projection line을 이용한 방식이 ray tracing이다.

카메라에서 쏘는 projection line의 반대방향 광선(ray)을 primary ray라고 한다.

primary ray와 물체가 만나는 점을 먼저 계산한다. 물체와 만나면 그 지점에서 ray를 쏘는데 이를 secondary ray라고 한다.

secondary ray에는 shadow ray, reflection ray, transmitted/ refraction ray의 3가지 ray가 있다.

이제 p1으로 부터 발사된 secondary ray가 다른 물체들과의 교차검사를 진행한다.

먼저 p1과 광원을 직선으로 이은 shadow ray와 다른 물체가 부딛힌다면 p1점은 그림자에 있는것으로 판단한다.

여기서 shadow ray  s1이 물체와 부딛혔으므로 p1은 그림자에있다.

다른 secondary ray인 reflection ray는 p1의 normal 을 중심으로 primal ray가 반사된 것이다.

또다른 secondary ray는 반투명인 경우 primal ray이 굴절되어 전해진다.(굴절의 법칙에 따라 정해짐)

 

이 두 secondary ray는 recursive 한 방식으로 tracing 된다. 즉 primary ray와 동일하게 거동한다. 이러한 ray는 더이상 아무 물체에 부딛히지 않거나 밝기 low bound 에 도달할 때 까지 혹은 recursive 의 특정레벨(미리 정해둔 level)에 도달할 때 까지 반복된다.

 

이러한 레이트레이싱은 전통적으로 runtime에 구현되지 않는다고 여겨졌다. 매우 많은 연산을 필요로 했기 때문에 영화와 같은 non realtime render에는 많이 사용됐으나 게임과 같은 real time 환경에서는 사용되지 않았다.

하지만 그래픽카드의 빠른 발전과 엔비디아의 RTX 시리즈, AMD Ray accelerator등의  공식적인 지원덕분에 최근에는 runtime에 사용가능한 raytracing이 점점 늘고 있다.

 

또다른 글로벌 라이팅 알고리즘인 radiosity 알고리즘은 diffuse surface를 가진 물체들 사이에서 반사되는 빛을 계산한다. 표면에 부딛힌 빛은 반사되어 다른물체를 비추므로 장면을 구성하는 모든 표면은 광원의 역할을 하게된다.

여기서는 radiosity algorithm을 자세히 다루지는 않겠다.

 

이제 환경 매핑 그중에서 가장 간단한 cube mapping을 보도록 하겠다.

거울 뿐 아니라 금속등으로 만들어진 매끈한 물체는 주변 환경을 반사한다.

주변 환경을 반사하는 매끄러운 물체를 렌더링하는것을 환경매핑이라고 하는데 cubemap은 물체 안에서 큐브를 보는것 처럼 랜더링한다.

큐브맵을 먼저 생성하기 위해서는 물체 내부에서 6방향으로 사진을 찍는다(랜더링을 한다) 90도의 시야각으로 사진을 찍으면 주변 환경을 mapping하는 6개의 map이 만들어지고 이를 각각 사진을 찍은 방향의 정육면체 내부에 붙여놓는다.

cube map은 다 준비 되었다. 

 

이제 실제로 카메라가 보는 물체를 구라고 생각하고 카메라가 보는점을 p라고 하자.

이때 구위의점 p에서 반사되는 방향을 R이라고 한다. 큐브맵은 이를 둘러싼 큐브의 내부면이므로 R과 큐브맵의 교차점을 구한다. 이 교차점을 이용해 해당면의 이미지 텍스처를 필터링한다. 즉 이 점이 p점에 mapping되는 점이다.

 

이러한 방식은 simplified ray tracing이라고 부르기도 한다.

이 방식의 가장 큰 단점은 물체의 모양에 따른 환경매핑의 변화가 발생하지 않는다는것이다.

즉 위에서 사진을보면 빨간색 원 안에 주둥이가 반사되어 표현되지 않았다.

이러한 단점에도 불구하고 cube mapping은 빠른 렌더링 속도와 간편함으로 실제로는 많이 사용된다.

 

지금까지 컴퓨터 그래픽스에 대해서 중요한 부분들에 대해 배웠다.

반응형