화면 속 빛은 어떻게 계산될까
요즘 게임이나 영화 CG를 보면 유리잔에 비친 반사, 물웅덩이에 어른거리는 빛, 부드러운 그림자가 정말 실제 같잖아요. 이런 사실적인 빛 표현의 핵심에 레이트레이싱(Ray Tracing, 광선 추적) 이 있어요. 이게 뭐냐면, 화면의 픽셀 하나하나마다 '가상의 빛줄기(광선)'를 쏴서 그 빛이 어떤 물체에 부딪히는지를 따라가며 색을 계산하는 방식이거든요.
그런데 막상 '광선을 쏜다'는 게 코드로는 뭘 의미할까요? 결국은 수학 문제예요. 광선은 '시작점 + 방향 × 거리'라는 직선의 방정식이고, 화면에 그릴 도형(구, 평면, 삼각형)도 각각 방정식이 있어요. 이 둘을 연립해서 '빛줄기가 도형과 만나는 지점이 어디냐'를 푸는 게 레이트레이싱의 가장 밑바닥 작업이에요.
도형마다 다른 교차 계산
가장 기본은 구(sphere) 예요. 광선이 구를 뚫고 지나가는지 계산하려면 2차방정식 하나만 풀면 돼요. 광선 식을 구의 방정식(중심에서 거리가 반지름과 같은 점들의 집합)에 대입하면 at² + bt + c = 0 꼴이 나오는데, 여기서 판별식(b²-4ac)을 봐요. 판별식이 음수면 '안 만남', 0이면 '스치듯 한 점에서 만남', 양수면 '두 점에서 만남(들어가는 면, 나오는 면)'이 되는 거죠. 둘 중 더 가까운 교차점을 골라서 그 지점의 색을 칠하면 돼요.
평면(plane) 은 더 간단해요. 광선 방향과 평면의 법선 벡터(평면에 수직인 화살표)를 내적해서, 이 값이 0이면 광선이 평면과 나란해서 안 만나는 거고, 아니면 딱 한 점에서 만나요. 삼각형(triangle) 은 한 단계 더 들어가서, 평면과 만나는 점을 구한 뒤 '그 점이 삼각형 세 변 안쪽에 있는지'를 추가로 확인해요. 여기서 유명한 게 뫼러-트럼보어(Möller–Trumbore) 알고리즘 인데, 무게중심 좌표(barycentric coordinate)라는 걸 이용해서 평면 교차와 내부 판정을 한 번에 처리하는 똑똑한 방법이에요.
삼각형이 중요한 이유는, 3D 모델이 결국 수백만 개의 삼각형으로 이루어져 있기 때문이에요. 그래서 '광선 하나당 삼각형 교차 계산을 얼마나 빠르게 하느냐'가 전체 성능을 좌우하죠.
왜 이게 다시 뜨거울까
예전엔 레이트레이싱이 영화 렌더링처럼 '한 프레임에 몇 시간씩' 걸리는 오프라인 작업이었어요. 그런데 NVIDIA가 RTX GPU에 RT 코어라는 전용 하드웨어를 넣으면서 상황이 바뀌었어요. 이 교차 계산을 칩 차원에서 가속해주고, 거기에 수백만 삼각형 중 광선 근처의 것만 빠르게 추려내는 BVH(Bounding Volume Hierarchy, 경계 부피 계층 구조) 라는 공간 분할 자료구조까지 더해지면서, 이제는 게임에서 실시간으로 돌아가게 됐거든요.
비교하자면 전통적인 래스터라이제이션(rasterization) 은 '도형을 화면에 투영해서 칠하는' 방식이라 빠르지만 반사·굴절·그림자를 가짜로 흉내 내야 했어요. 반면 레이트레이싱은 빛의 물리를 직접 따라가니 결과가 자연스럽죠. 요즘은 둘을 섞은 하이브리드 렌더링 이 대세예요.
한국 개발자에게
게임 클라이언트나 그래픽스, WebGL/WebGPU 쪽을 노린다면 이 광선-기하 교차의 수학은 꼭 한 번 직접 짜보길 권해요. 셰이더 코드를 읽을 때 '아, 이 내적이 그 법선 판정이구나' 하고 보이기 시작하거든요. 셰이더토이(Shadertoy)에 구 하나 띄우는 것부터 해보면, 그래픽스 파이프라인이 더 이상 블랙박스로 안 느껴질 거예요.
핵심은 이거예요: 레이트레이싱은 거창해 보여도 결국 '직선과 도형이 만나는 지점을 푸는 방정식'의 반복이라는 것. 여러분은 사실적인 그래픽을 만들 때 물리 기반 렌더링을 직접 구현하는 쪽인가요, 아니면 엔진이 주는 기능을 잘 활용하는 쪽인가요?
🔗 출처: Hacker News
TTJ 코딩클래스 정규반
월급 외 수입,
코딩으로 만들 수 있습니다
17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공