역방향 광추적
여태까지 구현했던 역방향 광추적은 픽셀당 하나씩 ray를 쏴 줘야 하고 안티에일리어싱까지 하려면 더 많이 쏴야 한다.
게다가 물체가 많아지면 각 ray가 각 물체랑 모두 충돌여부를 따져야 한다.
만약 물체가 10개라면? 각 ray 당 물체 10개랑 모두 충돌 확인해야 한다. 그러면 1개일때보다 10배는 느려진다.
만약 물체가 1000개라면? 10000개라면?...
자료구조를 잘 활용하면 좀 빨라지긴 하지만, 아무리 그렇게 해도, 반사와 굴절 등을 모두 구현한 순수 ray tracing을 실시간 그래픽스 렌더링하기는 어렵다.
레스터화(rasterization)
레스터화의 장점은, 여러개의 삼각형을 따로따로 그리기 적합하다는 것.
삼각형은 vertex(정점) 세개로 정의할 수 있다.
레스터화 방식에서는 이 삼각형은 화면으로 투영(project)시킨다.
즉, 세 개의 정점들을 각각 하나씩 화면으로 옮긴다는 의미.
이 세개의 정점들을 정확한 위치에 옮기기만 하면 삼각형을 그릴 수 있다.
픽셀의 색 결정
투영시킨 삼각형을 보자.
각 필셀에 삼각형이 있나 없나를 판단해서 삼각형이 있으면 삼각형의 색을 가져와서 그 픽셀을 칠하면 된다.
그런데, 그러면 모든 픽셀에 대해 다 돌아서 확인해야 되는것 아닌가?
바운딩 박스 (Bounding Box)
아니다. 필요한 부분만 보면 된다.
세 vertex(정점)을 모두 담을 수 있는 가장 작은 직사각형(박스)을 찾으면 된다.
좌측상단 좌표, 우측하단 좌표만 찾으면 이 박스를 찾았다고 할 수 있다.
이 박스 안의 픽셀에 대해서만 loop하며 확인하면 된다.
엄청나게 연산량을 줄일 수 있다.