1. 개요
Ray casting가상의 공간에 보이지 않는 빛(Ray)을 투사해 빛에 닿는 표면을 파악하는 기술이다. 실생활에서 흔히 볼 수 있는 초음파 또는 적외선 감지의 원리가 얼추 비슷하다. 레이캐스팅이라는 용어는 Scott D Roth의 'Ray Casting for Modeling Solids'라는 제목의 논문에서 처음 사용되었다. 논문 제목에서 알 수 있듯 원래는 CG중 하나인 솔리드 모델링을 하기 위한 기술 중 하나로 소개되었다. 1990년대 이후에는 이 기술이 게임 등에도 활용되며 일반인에게도 어느 정도 알려진 기술이 되었다.
레이트레이싱과는 다르다. 레이트레이싱은 빛이 해당 물체의 표면에 닿은 후, 현실처럼 빛이 다시 재귀적으로 반사되어 결과물을 렌더링하는 방식이지만, 레이캐스팅은 해당 물체에 닿으면 일회성으로 사용되고 더 이상 연산을 수행하지 않는다.
2. 상세
2.1. 렌더링
레이캐스팅이 게임에 처음 활용된 곳이 바로 FPS 게임이다. 90년대 초에 큰 반향을 일으켰던 울펜슈타인 3D이 화면 렌더링 방식을 레이캐스팅으로 이용하는 가장 잘 알려진 게임이다. 당시에는 컴퓨터 성능이 지금만큼 좋지 않았기 때문에, 3D 게임은 상상조차 할 수 없는 시대였다. 그래서 수학적 계산의 부하를 줄이기 위해 게임 공간은 2D로 구성되었으며, 여기에 3D 같은 사실감을 주기 위해 레이캐스팅 기법을 사용해서 원근감을 더했다.[1]
먼저 화면의 X축으로 모든 픽셀마다 카메라가 바라보고 있는 방향으로 광선을 투사한다. 그리고 벽을 만나면 해당 벽까지의 거리를 얻는다.
- 벽까지의 거리가 멀면 가로 1픽셀 짜리 짧은 세로줄을 해당 X위치에 그린다.
- 벽까지의 거리가 가까우면 가로 1픽셀 짜리 긴 세로줄을 해당 X위치에 그린다.
이러한 기법의 장점은 계산 방법에서 알 수 있듯, 모든 수직선에 대해서만 계산을 하면 되기 때문에 렌더링 속도가 매우 빠르다. 게다가 오로지 정수만으로도 계산이 가능하기에 실수 계산이 전혀 필요 없다. 따라서 역시 계산 속도가 빠른 이점이 있다. 이처럼 레이캐스팅은 4MHz 짜리 계산기에서도 빠르게 수행할 수 있었기에, 당시 시대에도 충분히 사용할 수 있는 기법이었다.
또한 '카메라 평면'이라는 개념을 사용하는데, 3D 게임 등에서도 사용되는 바로 그 카메라 평면이 맞다. 그러나 레이캐스팅에서는 2D 공간에서 이루어지기에, 1차원 벡터만을 이용한다. 레이캐스팅에서는 광선이 항상 이 카메라 평면을 통과하여, 평면에 수직 방향으로 투사된다.
2.2. 게임 로직
유니티3D를 비롯한 상용 엔진에서도 흔히 지원하는 대상 판별 기술이다. 여기서는 흔히 레이캐스트(Raycast) 라고 부른다. 렌더링과 원리는 같으나, 활용이 다르다. 렌더링은 모든 수직선에 대해 광선을 투사하지만, 게임 로직에 활용되는 레이캐스트는 지정된 단 하나의 지점에 단 하나의 광선을 투사하는 것이 일반적이다. 흔히 FPS 게임에서 히트스캔 방식의 무기를 구현할 때 레이캐스트가 이용된다. 광선을 투사하여 벽 또는 물체에 충돌하는 대상을 판별해서 여러가지 로직을 수행한다.디아블로 3나 스타크래프트 2같은 쿼터뷰 게임에서도 레이캐스트가 활용된다. 마우스를 클릭해서 어떤 행동을 처리할 때, 마우스 포인트 위치로 레이캐스트해서 2차원 카메라 평면에 대한 3차원 좌표 값을 구해온 후 그 행동을 진행한다.