본문 바로가기

DX

Ray-Tracing

레이 트레이싱

카메라에서 화면의 픽셀에서 가상의 광선을 발사해 오브젝트에 부딪히는 과정을 시뮬레이션하여 최종 색상을 결정하는 방식

 

주요 요소

  1. 반사

  2. 굴절

  3. 그림자
  4. 전역 조명

 

아주 간단한 레이 트레이싱을 활용하여 구체를 표현해보자

 

미리 보는 결과물

 

 

https://en.wikipedia.org/wiki/Line%E2%80%93sphere_intersection

 

Line–sphere intersection - Wikipedia

From Wikipedia, the free encyclopedia The three possible line-sphere intersections: 1. No intersection. 2. Point intersection. 3. Two point intersection. In analytic geometry, a line and a sphere can intersect in three ways: No intersection at all Intersec

en.wikipedia.org

출처 : 위키피디아

 

 

위의 사이트 들어가보면 먼저 구체 방정식을 볼 수 있다.

 

x 는 구체 위의 임의의 점을 의미한다. 즉, 중앙에서 특정 거리만큼 벗어나 있는 점들의 집합을 구체라고 표현할 수 있다.

 

 

다음은 라인트레이스이다. 라인트레이스에서 x 도 이 선 위의 임의의 점을 의미한다. 여기서 라인트레이스를 특정 하나의 레이 트레이싱으로 취급할 수 있다. o 는 시작 점, u 는 방향이다.

 

 

그러니까 결국 선 위의 임의의 점이 구체 위의 점과 같다면 ? 그렇다면 충돌한 것을 의미하는 것이다.

그리고 구체의 충돌에는 3가지 경우가 있는데

 

 

 

1. 충돌 안함

2. 1번 충돌

3. 2번 충돌

 

그래서 충돌 식의 스칼라 값이 0>, 0==. 0< 에 따라 답이 다르게 나온다.

 

밑에 식은 구체의 방정식에 라인 트레이스 방정식을 대입 한 공식이다. x 를 라인 트레이스 공식으로 치환했다 생각하면 된다.

그리고 특정 거리 변수 d 에 따른 2차 방정식으로 정리하면 아래와 같다. 여기서 우리는 거리 d 를 알면 임의의 점 x 를 알 수 있다고 가정한다.

 

 

 

 

d 를 정리해서 식으로 나타내면 아래와 같다. 이 식에서 u는 방향인데 사실 방향을 단위 벡터를 사용하므로 없는 셈 칠 수 있다. 그리고 nabla 의 값이 +- 로 2가지 형태로 나타나는 것은

 

  1. nabla > 0 이면 2번 충돌 한 것이기 때문에 거리 d 가 충돌 2지점에 따른 각각의 d 값이 나오기 때문이다. 여기서 구체는 타원이 아닌것으로 한다.
  2. nabla == 0 1번 충돌 한 것 이기에 d 값이 1가지만 나온다.
  3. nabla < 0  d 값을 보면 nabla 에 루트를 씌웠다. nabla 가 음수면 d 가 허수가 되므로 부딪히지 않은것으로 간주한다.

 

그럼 위의 구체는 어떻게 렌더링 된걸까?

쉽게 설명하면 임의의 구체와 레이 트레이스로 인해 충돌하면서 생긴 화면과 구체 사이 거리를 셰이더에게 전달하여 Color 에 영향을 끼치게 하면 위와 같이 그려진다.

 

 

그러니 위키피디아의 nabla 값을 실제 코드로 나타내면

아래와 같고 이 값의 양수 음수를 비교해서 최종 충돌 지점과 거리를 판별 할 수 있다.

 

레이 트레이스를 쐈을 때 nabla 가 >0 인지 확인 한 후 임팩트 포인트와 노멀 벡터 등을 구해준다.

'DX' 카테고리의 다른 글

그림자 표현  (0) 2025.03.31
원근 투영을 이용한 물체 표현  (0) 2025.03.31
블러, 블룸 효과  (0) 2025.03.05
DX11 용어 간단 정리  (0) 2025.03.04
렌더링 파이프라인에서 좌표 변환에 대해서  (0) 2024.11.02