새소식

인기 검색어

게임 개발/그래픽스

레스터화(rasterization)가 빠른 이유

  • -

역방향 광추적

여태까지 구현했던 역방향 광추적은 픽셀당 하나씩 ray를 쏴 줘야 하고 안티에일리어싱까지 하려면 더 많이 쏴야 한다.

게다가 물체가 많아지면 각 ray가 각 물체랑 모두 충돌여부를 따져야 한다.

만약 물체가 10개라면? 각 ray 당 물체 10개랑 모두 충돌 확인해야 한다. 그러면 1개일때보다 10배는 느려진다.

만약 물체가 1000개라면? 10000개라면?...

자료구조를 잘 활용하면 좀 빨라지긴 하지만, 아무리 그렇게 해도, 반사와 굴절 등을 모두 구현한 순수 ray tracing을 실시간 그래픽스 렌더링하기는 어렵다.

레스터화(rasterization)

레스터화의 장점은, 여러개의 삼각형을 따로따로 그리기 적합하다는 것.

삼각형은 vertex(정점) 세개로 정의할 수 있다.

레스터화 방식에서는 이 삼각형은 화면으로 투영(project)시킨다.

즉, 세 개의 정점들을 각각 하나씩 화면으로 옮긴다는 의미.

이 세개의 정점들을 정확한 위치에 옮기기만 하면 삼각형을 그릴 수 있다.

픽셀의 색 결정

투영시킨 삼각형을 보자.

각 필셀에 삼각형이 있나 없나를 판단해서 삼각형이 있으면 삼각형의 색을 가져와서 그 픽셀을 칠하면 된다.

그런데, 그러면 모든 픽셀에 대해 다 돌아서 확인해야 되는것 아닌가?

바운딩 박스 (Bounding Box)

아니다. 필요한 부분만 보면 된다.

세 vertex(정점)을 모두 담을 수 있는 가장 작은 직사각형(박스)을 찾으면 된다.

좌측상단 좌표, 우측하단 좌표만 찾으면 이 박스를 찾았다고 할 수 있다.

이 박스 안의 픽셀에 대해서만 loop하며 확인하면 된다.

엄청나게 연산량을 줄일 수 있다.

'게임 개발 > 그래픽스' 카테고리의 다른 글

원 그리기  (0) 2023.11.07
삼각형 레스터화  (0) 2023.11.05
벡터와 포인트  (0) 2023.11.04
투명한 물체와 빛의 굴절  (0) 2023.11.02
빛의 반사  (0) 2023.11.02
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.