마인크래프트 짭겜 개발노트 #3 "버텍스"

개발노트

2018. 10. 26. 20:28

정육면체는 꼭지점이 8개이다.

하지만 블록을 그리기 위해서는 버텍스 8개로는 부족하다.

왜냐하면 블록 텍스쳐들을 아틀라스에 단순히 나열만 해 두었기 때문에

각 면에 서로 다른 텍스쳐를 매핑하려면 한 꼭지점에 여러개의 텍스쳐 좌표 정보가 필요하기 때문이다.


버텍스 하나에는 하나의 텍스쳐 좌표만 저장할 수 있기 때문에

모든 면에 각각 다른 텍스쳐를 매핑하려면 어쩔 수 없이 각 꼭지점마다 3개의 버텍스가 필요하다.

따라서 블록 하나당 최대 8 x 3 = 24 개의 버텍스가 필요하다.



여기서 최대라고 한 이유는, 

가려진 면을 그리지 않음으로써 버텍스 수를 줄일 수 있기 때문인데,

일단은 블록 당 24개의 버텍스가 필요한 최악의 경우만 생각해 보자.


그러면 블록으로 꽉 찬 16 x 256 x 16 크기의 청크를 그리려면 

24 x 65536 = 3 x (2^19) = 1,572,864 개의 버텍스가 필요하다.


그런데 유니티는 메쉬 하나당 최대 버텍스 수를 65535로 제한하고 있기 때문에

경우에 따라서는 청크를 그릴 수 없는 상황이 생기므로 청크 크기를 마인크래프트와 똑같이 정할 수가 없다.



그래서 청크 하나의 크기를 16 x 16 x 16 으로 하고, 

여러개를 세로로 쌓아서 하나로 취급하는 방법을 사용했다.


청크 크기가 16 x 16 x 16 이면

들어갈 수 있는 블록의 수는 2^12 개,

최대 버텍스 수는 24 x (2^12) = 98,304 개로 역시 65535 개를 초과하긴 하는데

실제로는 접한 면은 그리지 않기 때문에 

최대 버텍스 수는 98,304 / 2 = 49,152 개라고 생각하고 그렇게 결정했었던 것 같다.


하지만 지금 생각해 보니 나뭇잎 같은 반투명 블록들은 접한면도 그려야해서

여전히 이론상 최대 버텍스 수를 넘는 게 가능하다...

현실적으로 정말 최대 버텍스 수를 넘기기는 쉽지는 않겠지만 (여태 그런 적도 없었고)

그래도 나중에 다시 한 번 검토는 해 봐야할 듯.