Ray Tracing - miniRT

JaeGu Jeong·2022년 2월 11일
1

graphics

목록 보기
1/2
post-thumbnail
# 맵 파일 정보
A 0.4    255,255,255
C 0,0,20    0,-0.2,-0.8    90
L 0,0,0    0.3    255,255,255
sp -12,-10,-8    5    0,255,0
sp -5,-10,-8   5    255,0,255
sp 2,-10,-8   5    1,1,1
sp 9,-10,-8   5    255,255,0
sp 16,-10,-8   5    255,0,0
cy -17,-3,-8    0,1,0    5    4    0,255,255
cy -10,-3,-8    0,-1,0    5    4    0,255,255
cy -3,-3,-8    -1,0,0    5    4    0,255,255
cy 4,-3,-8    1,0,0    5    4    0,255,255
cy 11,-3,-8    0,0,-1    5    4    0,255,255
cy 18,-3,-8    0,0,1    5    4    0,255,255
pl 0,-20,0  0,1,0 0,0,255
pl -30,0,0  1,0,0 255,0,255
pl 30,0,0  -1,0,0 255,255,0
pl 0,0,-30  0,0,1 150,150,200
# A : Ambient lightning 주변광 2option(ratio, RGB)
# C : Camera 카메라 3option(view poin, orientation vector,  FOV)
# L : Light 조명 3option(light point, ratio, RGB)
# sp : Sphere 구 3option(center, diameter, RGB)
# cy : Cylinder 원기둥 5option(coordinates, orientation vector, diameter, height, RGB)
# pl : Plane 평면 3option(coordinates, orientation vector, RGB)

Ray Tracing이란

우리가 눈으로 바라보는 시야범위를 2차원 행렬로 구현하였을때 n행n열에 들어오는 빛을 역추적하는 그래픽기술이다.

예시)붉은광선의 시작점(하얀 작은공)에서 광선을 행렬에 쏴서 광원을 추적한다.

발사된 광선이 물체에 부딪친다면(hit), 부딪친지점에서 광원을 추적한다.(phong_lighting)

맵파일에서 설정한 물체들에 하나하나 광선이 닿는지 검사하고 닿는다면 아래 도형공식으로 계산한다.

3차원상의 평면 공식을 이용해서 광선과 표면이 부딪치는지 검사한다. (클릭해서 공식보기)

3차원상의 구의 방정식을 이용해서 광선과 표면이 부딪치는지 검사한다. (클릭해서 공식보기)

3차원 원기둥 방정식을 이용해서 광선이 부딪치는지 검사한다. (클릭해서 공식보기)


만약 카메라광선과 물체가 부딪친 지점에서 나온 광선이 광원추적중에 또다른 물체와 부딪친다면, 검은색 그림자를 출력한다(RGB 0,0,0)

다른 물체없이 광원이 추적이 되었다면 실제로 물체에 손전등을 비췄을 때, 물체의 후면으로 갈수록 점점 어두워진다. 이것을 확산광(diffuse)이라고하는데 광원을 향해 광선이 출발한 지점의 법선과 광선의 벡터가 단위 벡터로 계산하였을 때 오차가 벌어질 수록 점점 어둡게 처리한다.

현실세계에서는 빛이 닿지 않는 사물도 희미하게 윤곽이 보이는데, 이것을 그래픽상에서 모방한 것이 주변광(ambient light)이다. 맵파일에 상수로 넣어서 모든 물체에 약간의 밝기를 넣어주었다.

profile
BackEnd Developer

0개의 댓글