레이 트레이싱
카메라에서 화면의 픽셀에서 가상의 광선을 발사해 오브젝트에 부딪히는 과정을 시뮬레이션하여 최종 색상을 결정하는 방식
주요 요소
- 반사
- 굴절
- 그림자
- 전역 조명
아주 간단한 레이 트레이싱을 활용하여 구체를 표현해보자
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가지 형태로 나타나는 것은
- nabla > 0 이면 2번 충돌 한 것이기 때문에 거리 d 가 충돌 2지점에 따른 각각의 d 값이 나오기 때문이다. 여기서 구체는 타원이 아닌것으로 한다.
- nabla == 0 1번 충돌 한 것 이기에 d 값이 1가지만 나온다.
- 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 |