banner
  1. About
  2. Blog
  3. Contact
초한지 게임 개발 · 

[초한지] Hex Tile Map Boundary Rounding


개발 중인 초한지 게임이 육각형 타일 지도(Hex Tile Map)을 사용합니다. 그런데 정육각형 타일을 사용해서 지도를 만들다 보니 특히 경계선이 너무 딱딱하게 느껴졌습니다.


강을 보시죠. 정육각형 모양으로 너무 울퉁불퉁해서 강처럼 느껴지지가 않습니다.


그래서 육각형 타일의 경계선을 둥글게 만들어 주기로 했습니다. 하지만 구글이나 레딧, 유니티 포럼 등을 돌아다녀 봐도 구현 방법을 찾아볼 수 없었습니다. 어쩔 수 없이 스스로 방법을 찾아야 했습니다.


hextiles.png


강과 맞닿아 있는 육지 타일이 위와 같이 생겼다고 합시다. 지금은 이렇게 육각형으로 각진 모양입니다. 각진 육각형을 어쨌든 둥글게 만들어야 했으므로 일단 각 타일에 내접원을 그려 보았습니다.


hexinnercircles.png


내접원을

그려 보니까 아이디어가 떠올랐습니다. 내접원과 정육각형이 만나는 접점들을 기준으로 안과 밖을 구분하여 원호를 이어주면 육각 타일 좌표계를 유지하면서도 곡선 경계를 만들 수 있을 것 같았습니다.


hexinnerrounding.png


바로 이렇게 말입니다. 타일별로 보았을 때 자신의 내접원에 속한 원호는 빨간 색을, 이웃의 내접원에 속한 원호는 파란 색을 적용했습니다.


hextilepolygon.png

실제 메쉬를 생성할 때는 곡면을 사용할 수 없으니 위 그림처럼 원호 위의 점을 추출해서 생성해 주어야 합니다.


그렇다면 구현 방식은 어떻게 될까요? 원호 위의 점을 알아내는 일반 법칙이 필요합니다. 일단 모든 점은 내접원 위에 있습니다. 하지만 먼저 자신의 내접원을 사용해야 하는 조건과 이웃의 내접원을 사용해야 하는 조건을 알아야겠죠.


지금은 정육각형을 여섯 개 삼각형으로 나눠 생성하고 있습니다. 북동쪽(NE) 방향부터 시계방향으로 동(E), 남동(SE), 남서(SW), 서(W), 북서(NW) 순입니다. 그리고 여섯 개 꼭짓점 순서는 북쪽 방향을 첫 번째로 해서 마찬가지로 시계방향으로 돌아가죠.


맨 왼쪽 위 첫 번째 정육각형 타일의 첫 번째 삼각형부터 따져 봅시다. 이 삼각형은 이제 두 개로 쪼개질 겁니다. 그러면 꼭짓점이 네 개 필요합니다. 모두 자신의 내접원 위에 있는 꼭짓점입니다. 그럴 수 있는 이유는, 현재 바라보고 있는 북동쪽 방향은 물론 이전 방향인 북서쪽 방향에도, 다음 방향인 동쪽 방향에도 같은 종류의 타일이 존재하지 않기 때문입니다.


다음 삼각형은 조금 달라집니다. 바라보고 있는 동쪽 방향은 같은 종류 타일이 이웃하고 있지 않고, 이전 방향인 북동쪽 방향도 이웃하고 있지 않지만, 남동쪽은 같은 종류 타일이 이웃하고 있습니다. 그렇다면 위쪽 꼭짓점은 자신의 내접원 위에 있는 점을 사용할 수 있지만, 아래쪽 꼭짓점은 불가능합니다. 자신이 바라보고 있는 방향으로 이웃한 타일의 내접원에서 반대 방향(서쪽)이 가리키고 있는 꼭짓점을 사용해야 하죠.


diagram.png



inner.png

dsff.png



댓글 0

초한지 게임 개발 카테고리 다른 글