볼륨 광선 추적(Voluem Ray Casting) 이해
- 사전학습 : 선형보간법에 대한 간단한 이해
- 참고 출처 :
선형 보간법 - https://ko.wikipedia.org/wiki/선형_보간법
Volume Ray Casting - https://en.wikipedia.org/wiki/Volume_ray_casting
지난 시간에 배운 선형보간법을 이여서 Ray Casting에 대해서 이야기를 할까 합니다.
선형보간법에서 두 평면에서 구한 꼭지점을 기준으로 특정 위치의 꼭지점을 구하는 방식을 3차 선형 보간법으로 3D 공간 좌표의 물체의 값을 추출해 낼 수 있습니다. Ras Casting은 이 선형 보간법을 이용하여 쉽게 광선을 추적할 수 있게 됩니다. 이 Ray Casting에 대해 알아보고자 합니다.
1. Ray Casting 이해
광선 추적이란 광선과 물체 표면의 교차검사를 통해 물체를 가려내는데 사용하는 기법입니다.

위 그림에서 보 듯이 물체의 특정 좌표 x,y,z로 광선 추적을 하게 되면 물체 표면의 위치와 색값을 얻을 수 있습니다. 오른쪽 그림에서 보는 것처럼 Ray Casting은 컴퓨터 화면의 하나의 특정 픽셀에서 직선의 광선 추적을 하게 되고 빨간코로 보이는 위치로 광선이 도달하면 물체의 빨간코 위치의 값을 픽셀의 값으로 결정하게 됩니다.
더 쉽게 살펴보면 아래 그림과 같습니다.

위 그림을 보는 것처럼 특정 위치의 픽셀에서 출발하는 광선이 일정 간격으로 검사추적을 하게 됩니다. 이때 빨간코 위치에 도달하면 광선 추적이 멈추게 되고 그 위치에 값인 빨간색이 픽셀의 값으로 결정이 됩니다.
참고로 일정 간격으로 광선이 추적되기 때문에 광선이 추적하는 위치 선상에 불투명도 값을 계산해 내면 물체로 인식하는 불투명도 값에 도달할 시에 광선 추적을 멈추게 하면 가상 공간의 물체가 위치한 좌표를 구할 수 있게 됩니다. 여기에서는 물체를 가상공간의 그림으로 표현했지만 실제 비파괴식 센서를 이용하여 이미지 데이터를 얻을 수 있게 되면 실제 물체의 크기나 형태를 정교하게 계산해 낼 수 있습니다.
예로 의료영상들을 들 수 있습니다. 엑스레이 영상 데이터 CT영상 데이터를 통해 얻은 이미지를 종합하여 Ray Casting를 이용하면 컴퓨터상으로 실제 물체나 사람의 데한 정보를 정확하게 추출해 낼 수 있게 됩니다.
2. Ray Casting의 문제
Ray Casting의 문제는 아니고 어려운 부분이 있습니다. 단순위 위에서 설명한대로 픽셀에서 출발하는 광선이 물체 표현에 도달하면 물체 표현값을 그냥 픽셀로 결정한다고 생각하면 무지 단순해 보입니다.
하지만 여기에서 어려움이 있습니다. 아래 그림과 같은 문제가 있습니다.

보시면 특정 위치의 픽셀에서 출발한 광선이 일정 간격으로 조사되는데 물체의 표면을 향할 때 물체도 각 꼭지점으로 배치가 됩니다. 그런데 그 물체의 꼭지점을 지나는 것이 아니라 그 사이를 지나가면 해당 위치의 값을 물체의 정보가 없기 때문에 알 수 없습니다. 그래서 그 위치가 값을 찾기 위해서 보간법을 이용합니다.
아래와 같이 선형보간법을 이용하여 빨간점의 위치값을 구하게 됩니다.

위와 같이 광선이 지나가는 위치의 물체의 각 꼭지점의 값을 이용하여 3차 선형보간법을 이용하여 x,y평명의 위치값을 구하고 두 평면 z값을 보간하여 빨간점의 3D가장공간의 위치값을 계산해 내면 광선 추적하는 픽셀의 값을 구할 수 있게 됩니다. 이런식으로 물체를 추적하면 데이터 정보를 컴퓨터상의 3D형태로 랜더링을 할 수 있게 됩니다.
3 추억의 한 컷
전문 서적에서 공부했던 프로그램이 있어서 한번 추억을 떠올리면 돌려봤네요. 이 영상은 엔진 데이터인데 비파괴 단층 찰영 된 영상인데 꽤 비싼 서적이였던 걸로 아는데 영상 데이터까지 제공되고 소스까지 제공되는 전문 전공서적이였는데 그 영상을 공부할 때 코딩했던 .프로그램이 있어 한번 엔진 데잍터를 돌려 봤네요.

이것이 바로 3D Volume Rendering 입니다.
마무리
오늘은 지난 시간에 이야기한 선형보간법 생각하면서 과거 3D Volume Rendering를 공부했던 추억이 떠올라서 그때 입문 용으로 배운 Ray Casting이 생각나 간단히 최대한 전공적인 이야기를 빼고 공식도 빼고 알고리즘도 빼고 의미만 전달해 보았네요.

짱짱맨 호출에 응답하여 보팅하였습니다.
짱짱맨 방문 감사해요.
포스팅 올라고 바쁘고 해서 몇칠 못 첮아 뵙더니,

삐에로 스마일이 있네요^^
오늘 부산에 눈아 내렸어요. 이 행복함을 전해요
새벽 헬스장 갈 때 날씨가 눈 올 것 같았는데 여기는 안왔네요.
그곳에는 눈와서 즐거우셨겠어요.
3D 그림을 coding으로 가능한건가요? 신기하네요.
데이터가 단층2D 이미지로 만들어진 수백장의 정보를 가지고 시각화 하기 때문에 가능하지요.
병원에 가면 의료 영상들 있잖아요.
그런 것들이 대표적인 예로 보시면 돼요.
하드웨어적으로, 반사될 때 값이 정확히 측정은 가능한가요?
반사는 아니고요.
광선추적을 일정간격으로 했을 때 불투명도 값이 쌓이고 이 값을 물체의 표면이라고 생각되는 불투명도 값에 도달하면 광선 추적이 멈추게 됩니다.
즉, 근사값으로 보시면 돼요. 그 오류값을 얼마나 줄이느냐에 따라서 정밀 측정이 가능하지요.
참고로 단층 데이터는 비파괴식으로 이루어지기 때문에 우리 몸을 촬영할 때에 촬영 된 데이터는 Ray 선으로 쏘고 우리몸을 통과 할 때 우리몸에 부딪치고 나온 값들을 누적해서 한장의 이미지를 만들어요.
그래서 단층 이미지를 보면 경계선에서는 라인이 불이 번진 겇같은 모습으로 나타나지요.
원본 데이터 자체가 약간은 뭐랄까 오류값을 담고 있기 때문에 그 값을 얼마나 잘 교정하여 측정하느냐에 따라 정밀도을 높이게 되지요.
아아. 그렇군요. 재밌네요. 파괴와 비파괴는 뭐가 다른거죠? 물체의조직구성을 파괴하지 않는다는건가요.
파괴는 원본 물체를 촬영을 하기 위해서 그 부분을 절단하거나 자르는 거라고 생각하시면 돼요.
CT 촬영을 하면 우리 인체를 절단해서 촬영하면 안되잖아요.
측정할 물체에 대해서 손상을 시키면 파괴이고 손상을 안시키면 비파괴로 구분하지요.
아하. 그렇군요. 일하면서 맨날 들었는데도 비파괴가 뭔지 몰랐는데. 오늘 배웠네요. ㅎㅎ 감사합니다.
결국 3D에서는 2D 보간법을 2번 써서 위치를 맞추는 방식이군요. (이해한 게 맞는지요?)
더 정교하게 3D 공간의 특정 좌표의 값을 구할 때에는 3차 선형보간법이고요.
2차 선형 보간법에서 3D Rendering 해도 같은 결과를 얻을 수 있어요.