카테고리 없음

3D Polygon Processing Libs & Tools

leonhong 2023. 4. 17. 19:20

Library

OpenMesh

이 무료 오픈 소스 라이브러리는비주얼 컴퓨팅 연구소RWTH 아헨 대학에서. 메쉬 처리 알고리즘을 개발하기 위한 기본 사항을 제공하며 최신 버전에는 메쉬 데시메이션, 스무딩 및 세분화를 위한 구현도 포함됩니다. 메쉬 정보를 저장하기 위한 하프 에지 기반 데이터 구조(Kobbelt et al., 2002)와 메쉬 속성을 저장하기 위한 일부 인프라를 구현합니다. 이것은 메쉬를 순회하거나 새로운 지오메트리를 생성하기 위해 빠른 쿼리가 필요한 모든 작업에 적합하지만 고급 메쉬 처리 알고리즘은 포함하지 않습니다. OpenMesh는 C++ 라이브러리이지만 Python 바인딩도 제공됩니다.

 

VCGLib

VCGlib(Cignoni et al., 2004)에 의해 개발된 대부분의 도구의 기반입니다.비주얼컴퓨팅 연구실따라서 Meshlab의 핵심입니다. C++ 오픈 소스 라이브러리로 조작이 가능합니다.삼각형 및 사면체 메쉬의 처리 및 표시. 기능에는 단순화, 평활화, 매개변수화, 재구성 및 기타 여러 기능이 포함됩니다. 이 도서관은 The Digital Michelangelo Project에서 사용되었기 때문에 잘 알려져 있습니다.

 

CGAL

계산 기하학 알고리즘 라이브러리(CGAL)은 계산 기하학의 맥락에서 지금까지 가장 광범위한 개방형 라이브러리입니다. 이 프로젝트는 연구 기관, 대학 및 회사에서 일하는 개발자 커뮤니티의 공동 노력을 통해 개발되었으며 100개가 넘는 모듈을 포함하며 모두 이 거대한 생태계에 일부 알고리즘 또는 핵심 기능을 제공합니다.
메쉬 처리는 전체 계산 기하학 범위의 일부일 뿐이므로 메쉬 처리 프로그램을 개발할 때 CGAL 모듈의 하위 집합만 실제로 유용하다는 점을 명심하는 것이 중요합니다. 그럼에도 불구하고 CGAL은 기본적으로 구현된 가장 많은 양의 기하학 처리(Loriot et al., 2019b) 기술과 알고리즘을 보유하고 있습니다. 이 알고리즘 중 일부에는 메쉬 세분화(Shiue, 2019), 단순화(Cacciola, 2019), 변형(Loriot et al., 2019a) 및 매개변수화(Saboret et al., 2019)가 포함됩니다.

 

PMP

“Polygon Mesh Processing library”(PMP)(Sieger and Botsch, 2019)는 MIT 라이센스 메시 처리 툴킷입니다.
 "OpenMesh"에 기원을 두고 있고, halfedge로 구현이지만 그것에서 많이 발전했습니다. 최신 메쉬 처리 라이브러리의 모든 일반적인 도구를 제공합니다(코어 메쉬 데이터 구조와 함께 작동하는 유명한 알고리즘 세트들).
그리고 깔끔하고 간단한 3D 뷰어를 제공합니다.

 

PCL

PCL(Rusu and Cousins, 2011)는 대규모 기업 및 대학 그룹에서 개발한 강력한 포인트 클라우드 처리 라이브러리입니다. 라이브러리는 포인트 클라우드의 기능 감지, 필터링, 등록, 재구성, 분할 및 시각화를 위한 알고리즘을 구현합니다. 개발 단순화를 목표로PCL더 작은 모듈 세트로 나뉩니다. 이는 기능이 축소된 플랫폼에서 라이브러리의 공간을 줄이는 데 도움이 됩니다.

 

libigl

libigl(Jacobson and Panozzo, 2017)은 다양한 구현이 있는 형상 처리 라이브러리입니다.기반으로 하는 알고리즘소유하다(Guennebaud 외, 2010). 따라서 모델 정보가 행렬로 인코딩될 것으로 예상합니다. 이를 통해 많은 기하학적 문제를 희소 이산 미분 기하학 연산자 및 유한 요소 행렬로 쉽게 표현할 수 있습니다.libigl또한 이 언어로 지오메트리 처리 작업을 표현할 수 있는 Python 바인딩이 있습니다. 이 라이브러리를 사용하여 여러 이산 기하학적 수량 및 연산자를 계산하고, 모양 변형을 적용하고, 모델을 매개변수화하고, 매끄럽게 하는 등의 작업을 수행할 수 있습니다.

 

PyMesh

PyMesh는 형상 처리 스크립트의 신속한 프로토타이핑을 위한 Python 라이브러리입니다. 여러 최신 오픈 소스 패키지를 통해 일반적인 메시 처리 작업을 제공합니다. PyMesh는 우리처럼 코드 단순성에 중점을 두지만 기본 Python 데이터 구조를 사용합니다. 플랫폼에는 연결된 뷰어가 없으므로 마우스 기반 선택과 같은 대화형 작업이 지원되지 않습니다.

 

Geogram

Geogram은 기하학적 알고리즘의 다중 플랫폼 C++ 프로그래밍 라이브러리입니다. 메쉬 데이터 구조, 공간 검색 데이터 구조, 표준 기하학적 술어 및 Delaunay 삼각 측량과 같은 기하학적 알고리즘을 제공합니다. Geogram은 점 집합, 표면 메시 및 체적 메시(4면체 및 하이브리드 메시)를 지원하는 실험적인 3D 모델러인 Graphite에서 사용됩니다. 메쉬 수리, 재메시 및 재구성을 위한 최첨단 알고리즘이 특징입니다.

 

Geometry-central

Geometry-central(Sharp et al., 2019)은 기하학 처리를 위한 데이터 구조 및 알고리즘의 또 다른 C++ 라이브러리입니다. 표면의 다양한 기하학적 수량을 계산하는 알고리즘과 측지선 거리 및 방향 필드 계산과 같은 고급 기하학 처리 알고리즘이 특징입니다.

 

Py3DViewer

Py3DViewer(Cherchi et al., 2019)는 기하 처리 알고리즘을 신속하게 프로토타이핑하기 위한 새로운 연구 지향 Python 라이브러리입니다. 표면 및 체적 메쉬 모두 편집 및 보기를 지원합니다. MeshPipe와 달리 Py3DViewer는 컴퓨팅에는 Numpy, 시각화에는 PyThreeJS와 같은 Python 라이브러리를 사용합니다.

 

Tools

Meshmixer

메쉬 믹서가 소유한 폐쇄 소스 소프트웨어입니다.오토데스크. 주요 초점은 메시 처리 및 "점토와 같은" 조각을 위한 도구를 제공하는 것입니다. 여기에는 사용자가 메쉬 속성을 시각화하고 모든 종류의 수정 작업을 수행하는 데 도움이 되는 매우 강력한 도구 세트와 3D ​​뷰포트가 있습니다.
지난 1년 동안 인쇄를 시작하기 위한 원클릭 설정을 제공하기 위해 제조 프로세스를 위한 지원 생성 및 다양한 3D 프린터 모델과의 통합과 같은 3D 인쇄와 관련된 많은 기능을 통합했습니다. 그러나 어떤 종류의 자동화나 스크립팅도 지원하지 않습니다.

 

MeshLab

메쉬랩(Cignoni et al., 2008)은 기반으로 구축된 무료 오픈 소스 도구입니다.VCGlib2.2 뛰어난메쉬의 획득 및 재구성. 3D 스캔 데이터로 작업하고 여기에서 깨끗하고 사용 가능한 메시를 얻기 위한 훌륭한 도구가 있습니다. 또한 다음과 같은 웹 기반 변형이 있습니다.MeshLabJS, 웹 브라우저 환경의 원래 소프트웨어에 있는 많은 기능을 복제하므로 로컬 설치가 필요하지 않습니다.
같지 않은메쉬 믹서, 이 도구는 사용자가 필요한 만큼 많은 메시에서 재사용할 처리 파이프라인을 정의할 수 있는 "필터 스크립트" 개념을 도입합니다. 그러나 이러한 파이프라인은 고정되어 있으며 사전 정의된 단계 및 매개변수 목록만 포함하고 메시의 속성에 따라 변경할 가능성이 없습니다.

 

OpenFlipper

오픈플리퍼(Mo¨bius and Kobbelt, 2010)은 매우 강력한 메시 처리 제품군입니다. 메시 처리 소프트웨어의 모든 기본 요소인 뷰어, 선택, 기본 도구 및 데이터 구조를 제공합니다(기반오픈메시, 섹션 2.2 참조), 완전한 플러그인 개발 API를 노출합니다.
이 플러그인 시스템은 C++ 및 Python 플러그인을 모두 로드하여 필요에 따라 기능을 확장할 수 있습니다. 그러나 도구에 대한 명확한 공통 인터페이스가 없으며, 예를 들어 모든 대화형 작업이 API 호출과 일대일 매핑되는 것은 아니므로 일부 작업을 자동화하기 어렵습니다.

 

Easy3D(홈페이지 발췌)

Easy3D는 3D 모델링, 지오메트리 처리 및 렌더링을 위한 오픈 소스 라이브러리입니다. C ++로 구현되며 단순성과 효율성에 중점을두고 설계되었습니다. Easy3D는 연구 및 교육 목적으로 사용되지만 정교한 3D 응용 프로그램을 개발하기 위한 좋은 출발점이기도합니다.
Easy3D는 알고리즘 측면에 중점을 둔 기존 지오메트리 처리 라이브러리 (예 : PMP 및 libigl)와 비교하여 사용자 상호 작용 및 렌더링을위한 광범위한 기능을 제공합니다. 즉 지오메트리 처리뿐만 아니라, 랜더링 모듈도 함께 제공해 줌.

 

MeshPipe(참조한 Paper의 필자가 제작한 3D 도구)

개요 : 다양한 파이프라인 테스트, 비교 및 ​​공유, 빠른 반복 지원 및 사용자에게 동적 피드백 제공(데모). 사용자의 관점에서 이 도구는 내부 또는 외부 Python 코드를 실행할 수 있는 통합 Python 콘솔이 있는 3D 뷰어입니다. 요소 선택 및 형상 처리를 위해 사용하기 쉽지만 강력한 API를 제공합니다. 주요 알고리즘은 Python-C++ 바인딩을 통해 뷰어에 노출되는 상위 수준 C++ 라이브러리에서 제공됩니다. 경쟁 오픈 소스 대안과 달리 우리 도구는 최소한의 학습 곡선을 가지고 있으며 몇 줄의 Python 코드로 일반적인 파이프라인을 작성할 수 있습니다.

구현에 사용한 방식 : 우리는 파이프라인에 사용하기 쉬운 스크립팅 언어를 원했지만 동시에 핵심 데이터 구조 및 알고리즘의 강력하고 성능이 뛰어난 구현을 원했습니다. 이러한 이유로 우리는 C++를 핵심 언어로 사용하고 Python을 파이프라인 스크립팅에 사용하기로 결정했습니다.
C++는 메쉬 처리 분야에서 널리 사용되는 언어입니다. 네이티브 코드로 직접 컴파일된다는 사실은 이러한 유형의 성능 의존 작업에 대한 훌륭한 후보가 됩니다. 그 외에도 메시 처리 개발을 위한 C++ 기반 툴킷이 이미 많이 있으므로 그 중 하나를 시스템의 기반으로 사용하고 그 위에 누락된 기능이나 알고리즘을 추가할 수 있습니다.
우리의 경우에는 다음을 사용하기로 결정했습니다. “Polygon Mesh Processing library”(Sieger and Botsch, 2019)는 두 가지 주된 이유가 있습니다. 매우 유연한 메쉬 데이터 구조를 가지고 있고 구축할 수 있는 기본 3D 뷰어가 포함되어 있습니다. 이 라이브러리는 기본 역할만 하며 포인트 클라우드 API 또는 전체 선택 시스템과 같은 많은 알고리즘과 기능이 다른 사람이나 당사에 의해 구현됩니다.
Python에 모든 기능을 노출하기 위해 다양한 가능한 솔루션을 평가하기 시작했습니다. 인터페이스 Python 및 C++에 필요한 접착제를 생성하는 많은 도구가 있으며, 그 중 다수는 편집되지 않은 C++ 소스에서 바인딩을 자동으로 생성합니다. 우리는 그것을 원하지 않았고 API의 어떤 부분이 Python에 노출되고 어떤 부분이 노출되지 않는지 제어할 수 있기를 원했습니다.PMP다양한 기본 메쉬 처리 알고리즘을 포함하지만 경우에 따라 구현이 우리의 요구에 완전히 부합하지 않습니다. 사용자에게 최상의 경험을 제공하기 위해,겹치는 외부 라이브러리를 추가했습니다.PMP의 기능. Python API에 모든 것을 노출하면 일부 기능이 중복되어 API를 사용하기가 더 어려워집니다.
그런 이유로 우리는 다음을 활용하기로 결정했습니다.파이바인드11도서관(Jakob et al., 2017). 그것은 우리에게 필요한 제어를 제공하는 동시에 상대적으로 작업하기 쉽습니다. 바인딩 코드는 매우 간단합니다. Python API에서 사용할 수 있는 메서드를 정의하기 위한 클래스 선언과 일련의 메서드 호출만 있으면 됩니다. 또한 Python과 C++ 개체 간의 자동 형 변환뿐만 아니라 기본 Python 목록으로 C++ 벡터의 정의도 지원합니다.
이 자동 주조는 매우 편리하지만 성능 비용도 있습니다. 변수가 Python 객체에서 C++ 객체로 또는 그 반대로 변환될 때마다 글루 코드는 캐스팅을 수행하는 데 약간의 시간이 걸립니다. 단일 변환에서는 거의 눈에 띄지 않지만 긴 루프의 모든 반복에서 변환이 발생하면 실행 속도가 느려질 수 있습니다. 이러한 이유로 우리는 자동 주조를 최소화하기 위해 매우 주의를 기울였습니다. 가능할 때마다 상수 참조를 사용함으로써 객체가 전적으로 C++ 측 또는 Python 측에 존재하도록 할 수 있지만 때로는 변환이 불가피합니다. 우리의 경우 람다 함수를 인수로 사용하는 모든 메서드는 변환을 피할 수 있는 유사한 메서드보다 훨씬 느립니다.
뷰어 사용PMP상용구 뷰어 구현. 다양한 선택 유형(그림 4 참조)을 표시하는 코드와 다음을 사용하여 구현한 Python 콘솔을 추가했습니다.임구이, 간단하고 확장성이 뛰어난 "즉시 모드" UI 라이브러리.

 

참조 : MeshPipe: a Python-based tool for easy automation and demonstration of geometry processing pipelines