게임/라이브러리

Recast & Detour

MAKGA 2021. 11. 11. 23:30
320x100

C++용 NaviMesh 생성(Recast)과 길 찾기 알고리즘(detour) 라이브러리

언리얼 내에서 쓰인다고 하며, 길 찾기 알고리즘으로 A* 알고리즘을 사용한다.

 

공식 홈페이지

https://github.com/recastnavigation/recastnavigation

 

GitHub - recastnavigation/recastnavigation: Navigation-mesh Toolset for Games

Navigation-mesh Toolset for Games. Contribute to recastnavigation/recastnavigation development by creating an account on GitHub.

github.com

 

다운로드 하고 솔루션 파일이 없으므로 VS에서 폴더로 열어 빌드 가능하게 만들어야 한다.


Demo UI 옵션 설명

  • Cell - Size
    복셀 필드를 구성하는 Cell의 넓이
    낮은 값으로 생성하면 퀄리티 높은 네비메쉬를 생성할 수 있다(처리비용 증가, 메모리 필요)


  • Cell - Height
    복셀 필드를 구성하는 Cell의 높이
    낮은 값으로 생성하면 지형 메쉬에 근접한 높이를 가지는 네비메쉬를 생성할 수 있다(처리비용 증가)

  • Agent - Height
    가상 객체(캐릭터) 높이
    가상 객체가 통과할 수 있는 부분에 대해서 네비메쉬를 생성할 수 있다.

  • Agent - Radius
    가상 객체(캐릭터) 둘레
    가상 객체가 통과할 수 있는 지역에 대해서 네비메쉬를 생성한다

  • Agent - Max Climb
    가상 객체(캐릭터)가 올라갈 수 있는 높이
    값을 높일 수록 더 높은 지형에 네비메쉬를 생성한다.

  • Agent - Max Slope
    가상 객체(캐릭터)가 올라갈 수 있는 경사도
    높은 값일 수록 고각의 경사에 네비메쉬를 생성한다

  • Region - Min Region Size
    연결되어 있지 않은 지형에 대해 독립적인 네비메쉬를 생성한 최소 크기

  • Region - Merged Region Size
    지역 병합의 최소 크기
    작은 영역에서 발생하는 대각선 경로의 문제를 해결해준다
    값이 작을수록 일부분에서 얇고 긴 삼각형이 생성된다

  • Polygonization - Max Edge Length
    네비메쉬의 경계를 나타내는 다각형 가장자리의 최대 길이(0이면 비활성화)

  • Polygonization - Max Edge Error
    네비메쉬의 가장자리를 최대한 지형에 따라 만들어준다
    값이 낮을 수록 다각형의 개수가 많아진다(0은 비권장)

  • Polygonization - Verts Per Poly
    다각형을 이루는 정점들의 수
    높은 값은 좀 더 나은 네비메쉬를 생성한다(처리비용 증가, 6이상은 권장 하지 않음)

  • Detail Mesh - Sample Distance
    지형의 표면에 네비메쉬를 일치시킬 때 사용하는 샘플링 거리 설정
    낮은 값을 사용할수록 지형에 디테일하게 삼각형 생성(연산 증가)

  • Detail Mesh - Max Sample Error
    Sample Distance에서 발생할 수 있는 부족한 부분을 좀 더 디테일하게 만들어 준다
    값이 낮을 수록 디테일이 높아짐(연산량 증가, 0은 권장하지 않음)

  • 주의 사항
    각 메쉬당 버텍스 수가 65536개로 제한되어있다.
    -4000 ~ 4000 사이이 좌표 안에 해당하는 메쉬에 대해 높은 정확성을 가진다.
    너무 디테일하게 네비메쉬를 생성하려고 하면 많은 메모리가 필요해서 생성이 안되거나 오류가 날 수 있다.

  • 작업
    사용 확장자: *.obj
    2021.11.10 - [게임/Unity] - Unity NaviMesh에서 obj 파일용 Mesh 데이터 뽑기

  • 사용 순서
    지형 툴에서 정점 데이터 추출
    .obj 파일 생성
    Recast에서 렌더링(Build)
    네비메쉬 생성
    생성된 네비메쉬 정점 데이터 추출(.bin)
    사용

  • Tile Mesh
    넓은 지형을 일정한 크기의 타일로 나눠 부분 타일마다 네비메쉬 생성
    부분적으로 연산이 필요하기 때문에 메모리 사용량도 부분적이다.

출처: https://www.slideshare.net/KooKyeongWon/0903-recast

 


함수 설명

Sample::saveAll() - Build한 NaviMesh를 *.bin 파일로 저장


320x100

'게임 > 라이브러리' 카테고리의 다른 글

flatbuffer  (0) 2021.10.23
glog  (0) 2021.08.29
rapidjson  (0) 2020.07.04