Hacker News웹 · 프론트엔드

지도 폴리곤 삼각분할 6배 가속, earstrip 공개

원제 Faster than earcut: triangulating 3.7M map polygons in 489 ms

130 포인트댓글 22
Key Point

지도 렌더링 성능의 병목인 폴리곤 삼각분할을 6배 가속하고 오픈소스로 공개해 웹 지도 서비스의 성능 개선에 직접 활용 가능하다.

핵심 요약

  • 지도 엔진의 폴리곤 삼각분할 라이브러리 earstrip을 ISC 라이선스로 공개했으며, C++ 헤더 파일과 WebAssembly npm 빌드를 제공한다.
  • C++에서는 earcut.hpp보다 14% 빠르고, 브라우저 환경에서는 earcut.js보다 1.4~2.1배 빠르다.
  • GPU는 삼각형만 그리므로 건물·공원 등 다각형 지도 요소들을 먼저 삼각형으로 잘라야 한다.
  • 기존 방식은 Delaunay 삼각분할을 사용했는데, 폴란드 마조비아 지역 지도의 370만 개 폴리곤 처리에 2.93초가 걸렸다.
  • 개선된 귀 깎기(ear clipping) 알고리즘으로 다단계 최적화를 적용했다: 움푹한 꼭짓점(dent)만 검사, 볼록 폴리곤 단축, 삼각형 스트립 작성, 버킷 정렬, 분기 제거, 표시된 움푹점 검사 등이다.
  • 최종적으로 동일 폴리곤 처리를 489ms로 단축했으며, Delaunay 대비 6배 빠르다.
  • 구멍이 있는 폴리곤은 브리지로 외곽과 연결하는데, 다각형이 단순하지 않은 경우(그리드 반올림으로 자기 자신과 교차)는 Delaunay로 폴백한다.
  • 마조비아 데이터에서 76개 폴리곤이 귀가 없어 폴백되었으나, 맵 생성기가 GEOS의 스냅 반올림을 적용하면 모든 폴리곤을 귀 깎기로 처리 가능하다.
  • 구멍이 128개 이상인 폴리곤(세계 지도에서 구멍 11,675개인 사례)은 Delaunay가 더 빠르므로 해당 임계값 이상은 Delaubay로 보낸다.
  • WebAssembly 컴파일 시 earstrip은 V8에서 23% 느려지지만, 폴리곤당 호출 오버헤드를 포함한 npm 패키지 형태로는 earcut.js보다 여전히 1.4배 빠르다.
  • 직접 호출 방식(모든 폴리곤을 한 번에 메모리로 전달)으로는 earcut.js보다 1.7~2.1배 빠르며, earstrip 저장소에 테스트 폴리곤과 벤치마크 코드가 공개되어 있다.
AI 요약 안내

AI가 한국어로 정리한 내용입니다. 정확한 정보는 원문을 확인해 주세요.

요약 원칙 ↗