작년에 언리얼 5 에 대한 웨비나를 할 때 질문으로 언리얼 5 는 어떻게 쿼드 오버드로우를 극복했는가 에 대해서 질문을 했었는데
답변을 하는 사람이 쿼드 오버드로우와 일반 오버드로우를 구분 못하는 걸 보고 기겁했습니다.
심지어는 언리얼 4 에 쿼드 오버드로우 확인 윈도우가 따로 있는데도 말입니다.
사실 쿼드 오버드로우에 대해서 에픽 만큼이나 빡세게 준비하는 곳도 없습니다.
이게 부하가 LOD 를 빡세게 걸어주면 별 문제가 안 되기 때문에
AAA 급 회사들은 그냥 우리가 알아서 할게 입니다.
먼저 쿼드 오버드로우 라는 개념에 대해서 말씀드릴까 합니다.
저 삼각형을 그릴때 우리는 녹색 픽셀만 그리면 될 거 같지만 실제로 여러분의 그래픽 카드는 빨간색도 같이 그리게 됩니다.
왜야하면 반드시 4 픽셀씩 그리기 때문입니다.
여러가지 이유가 있지만 가장 큰 이유는 텍스쳐 샘플링 때문입니다.
텍스쳐 샘플링은 부하가 큰 작업이고 그래서 픽셀 수에 딱 맞는 해상도의 텍스쳐를 미리 여러개 준비해 놓고 픽셀 수에 맞는 준비된 레벨의 텍스쳐만을 사용해서 랜더링을 하게 됩니다.
이걸 우리는 텍스쳐의 mip level 이라고 합니다.
근데 이 밉레벨 계산이 만만치가 않기 때문에
4 픽셀 씩 그리면서 ddx , ddy 라는 미분 명령을 이용해서 정확한 텍스쳐의 밉레벨을 계산하게 됩니다.
그러다 보니
저렇게 삼각형의 크기가 작아지면 작아질 수록
낭비되는 픽셀이 증가합니다.
이런 식으로 폴리곤의 화면상의 크기가 작아지면 이 낭비되는 픽셀은 점점 더 증가합니다.
근데 더 큰 문제는
이렇게 뭘 어떻게 만들든 멀어지면 폴리곤은 작아진다는 것입니다.
그래서 이것을 극복하기 위해서 멀어지면 폴리곤 숫자를 줄여서 삼각형의 크기를 키워주게 됩니다.
우리는 이것들 LOD 라고 합니다.
한국 게임 회사의 자칭 전문가들은 폴리곤의 버텍스 숫자 때문에 LOD 를 만들어 준다고 잘못 알고 있습니다만
LOD 는 쿼드 오버드로우 때문에 만들어 주는 것입니다.
따라서 LOD 는 폴리곤의 숫자를 줄여주는게 중요한게 아니라 엣지와 엣지의 간격을 벌이는 것이 중요합니다.
하지만 결국 이런 방식의 문제도 한계가 있습니다.
그럼 이 문제를 해결하려면 어떻게 해야 할까요?
당연히 한 픽셀 씩 그려주면 됩니다.
그럼 왜 그렇게 안 하는 걸까요? 그렇게 되면 텍스쳐를 못 쓰게 됩니다. 밉레벨을 계산할 수 없게 되니까요.
그러면 텍스쳐를 안 쓰면 되잖아..
어차피 저렇게 멀어지면 보이지도 않는데...
네 이게 바로 나나이트의 기본 원리입니다.
나나이트는 그래서 색깔을 텍스쳐가 아닌 버텍스에 막 바로 저장해 버립니다.
한 픽셀씩 그려주기 때문에 ( 라스터라이저를 안 씁니다. ) 굳이 삼각형이 작아져도 일반적인 상황처럼 급격하게 느려지지 않습니다.
이걸 질문 한 이유는 몰라서 질문한게 아니라..
너희들 대단한 일 했으니 좀 자랑 좀 해봐라 한 겁니다.
근데 쿼드 오버드로우랑 오버드로우를 구분 못합니다.
그 사람들이 한국 게임 개발사들의 기술지원을 하는 사람들입니다.
자기들이 파는 물건 제대로 공부도 못하는 사람들이 기술 지원을 받아가면서 제대로 된 무엇인가를 만들 수 있을까요?
(IP보기클릭)61.74.***.***
(IP보기클릭)223.194.***.***
(IP보기클릭)222.114.***.***