MeshLab – recenzja

Osoby mające styczność z danymi pochodzącymi ze skanera z pewnością prędzej czy później natkną się na MeshLab. Program jest dedykowany obróbce nieuporządkowanej siatki, polecany do zastosowania zarówno profesjonalnego jak i amatorskiego. Jest darmowym programem z kategorii open-source. Został stworzony przez studentów uniwersytetu w Pizie w trakcie zajęć dotyczących podstaw grafiki 3D. MeshLab został skonstruowany do obróbki dużych siatek i zapewnia narzędzia do ich edycji, oczyszczania, naprawy błędów, analizy, uproszczania oraz rekonstrukcji. Przedstawiamy poniżej przegląd możliwości tego programu, celem sprawdzenia, jakie faktycznie może mieć zastosowania.

Rys.1 Model poddany skanowaniu

Rys. 1: Model poddany skanowaniu

Opinie programu w większości są dość przychylne, jednak jest parę konkretnie wskazujących na wady programu. Zweryfikujmy więc te opinie. Program teoretycznie jest wciąż rozwijany jednak ostatnia wersja wyszła w kwietniu 2014 (v1.3.3) co może świadczyć o zaprzestaniu prac nad rozwojem programu. W tym miesiącu ukazała się jedynie wersja MeshLabJs działająca w przeglądarce internetowej (http://www.meshlabjs.net/)

Do sprawdzenia funkcjonalności programu przede wszystkim potrzebne nam były dane ze skanera. Posłużyliśmy się w tym celu modelem gwiazdy (Rys. 1) pochodzącego z druku 3D, który został poddany skanowaniu na skanerze David Laserscanner SLS 2 (parametry: rozdzielczość/precyzja: do 0,1% rozmiaru skanu (do 0,06 mm), gęstość siatki: do 1.200.000 punktów na skan; eksport do formatów: OBJ, STL, PLY). Nie jest to najtrudniejszy typ modeli do skanowania, jednak posiada dużo cienkich ścianek i wnęk, które mogą nie zostać poprawnie odwzorowane.

 

MeshLab_pic_2

Rys. 2: Efekt po zeskanowaniu modelu i scaleniu w programie David Laserscanner

Wykonano 16 skanów co 40 stopni po 7 z jednej strony i 7 z drugiej oraz 2 pod kątem nachylenia około 30 stopni. Skany o licznych wadach celowo zostały pozostawione aby umożliwić przeprowadzenie ich modyfikacji w programie. Otrzymaliśmy model (Rys.2) poszarpany, z dużą ilością zanieczyszczeń oraz kilkoma otworami, o ilości trójkątów: 5397522.

 

Program na pierwszy rzut oka wydaje się prosty i jasny w obsłudze, w dużej mierze jednak tak nie jest. Co prawda filtry są poukładane tematycznie, jednak wiele z nich powtarza się w innych blokach w dość chaotyczny sposób. Wiele narzędzi ma określony sposób postępowania, którego należy nauczyć się z samouczków czy dokumentacji. W samym programie ma zbyt wielu wyjaśnien, mamy tak naprawdę podany jedynie typ i opis określonego algorytmu w danym filtrze. Nie pomaga tu również brak opcji undo, co jest ogromnym utrudnieniem, zwłaszcza na etapie zapoznawania się z funkcjonalnością programu. Do oceny intuicyjności programów posługuję się poniższą skalą, według której intuicyjność Meshlab oceniam na 2.

Skala intuicyjności TriPioDi:

1 – (program zdecydowanie nieintuicyjny) program możliwy do użytkowania tylko po uprzednim zapoznaniu sie z dokumentacją techniczną i samouczkami, funkcje ułożone w nielogiczny sposób, brak informacji o sposobie działania narzędzia i jego ustawień

2 – (program raczej nieintuicyjny) w większosci przypadków poprawne wykorzystanie narzędzi możliwe po uprzednim zaznajomieniu sie z dokumentacją techniczną i samouczkami, funkcje ułożone w mało intuicyjne bloki tematyczne

3 – (program o średnim stopniu intuicyjności) program skomplikowany, dla osób średnio-zaawansowanych, istnieje pewna logika w ułożeniu funkcji, niektóre z funkcji są opisane w sposób klarowny, w przypadku innych należy zasięgnąć informacji

4 – (program raczej intuicyjny) program w dużej mierze łatwy do przyswojenia, funkcję są ułożone w logiczny sposób i opisane, działanie większości funkcji da się zrozumieć bez zaglądania do samouczków i dokumentacji technicznej

5 – program latwy do przyswojenia nawet dla laików, logiczny sposób rozmieszczenia narzędzi, dostępne klarowne informacje dotyczące funkcjonowania danego narzędzia

MeshLab_pic_3

Rys. 3: Dane ze skanera po rejestracji i scaleniu w programie MeshLab

Jednym z pierwszych, ważnych elementów pracy z danymi ze skanera jest rejestracja – łączenie pojedynczych skanów w cały model. Jest to etap, który w dużej mierze świadczy o końcowej jakości zeskanowanego modelu. Sprawdźmy więc, jak opcja „Aligment” programu MeshLab poradzi sobie z połączeniem dość zróżnicowanych pod względem jakości skanów (Rys. 3).

 

Rejestracja skanów odbywa się głównie poprzez połączenie dwóch z nich za pomocą nadanych punktów. Mamy również możliwość manualnego poprawienia ułożenia skanu w zakresie tolerancji dopasowania. Porównując jednak z dołączonym do skanera oprogramowaniem, narzędzie Meshlaba wypada zdecydowanie gorzej. (Rys.2 i Rys. 3) Opcja „Aligment – point base glueing” powinna łączyć skany za pomocą minimum 4 nadanych punktów na obu skanach, jednak mimo tej ilości zdarza się, że skany łączą się w zupełnie nielogiczny sposób. W przypadku oprogramowania David mamy tylko jeden punkt, ale algorytmy są w stanie dopasować skan na tej podstawie w poprawny sposób.

Jest to jednak dobre rozwiązanie dla osób nie posiadających specjalnego oprogramowania (na przykład posiadające domowej produkcji skanery). Efekt końcowy jest zadowalający jednak nieadekwatny do poświęconego na to czasu. (Czas w programie David Laserscanner – około pół godziny w trakcie skanowania, czas Meshlab – około godziny) Ponadto napotykamy tu wskazywany w opiniach problem – mianowicie duża ilość błędów. Przycisk służący do scalenia, przetworzenia operacji generuje błąd, który skutkuje wyłączeniem programu.

Otrzymany model ma dużo wad, co nie jest trudne do zauważenia, małe odizolowane zanieczyszczenia, szumy, nierówności, otwory – z tym wszystkim program taki jak MeshLab powinien sobie poradzić. Przede wszystkim potrzebujemy konkretnych informacji jakie błędy w naszym modelu wystepują oraz w jakiej ilości. Głównie należałoby zebrać dane odnośnie ilości otworów, „non-manifold edges” oraz „non-manifold verticles” (czyli krawędzie i wierzchołki, które istnieją tylko wirtualnie – nie mogące powstać w rzeczywistości), przecinające się powierzchnie, trójkąty zbyt małe, o złej orientacji i proporcjach, szczeliny, szpice i wiele innych. Meshlab niestety podaje nam tylko ilość „non-manifold edges” (550) oraz „verticles” (44) I powierzchni wokół nich (328), a także ilość otworów (458). Mimo mnogości filtrów do oczyszczania i naprawiania siatki, pomijając wypełnianie otworów, tak naprawdę tylko 3 („Remove faces over non-manifold edges”, „Split vertexes incident on non manifold faces” oraz „Select non manifold vertexes/edges”) służące do usunięcia powyższych problemów wystarczają programowi aby siatkę uznać za „watertight”, czyli nie posiadającą otworów, przecinających się trójkątów czy odizolowanych powierzchni. Ten sam model sprawdziłam w programie Geomagic Studio. Ilość błędów zdecydowanie przewyższa tę z MeshLab (Rys. 4).

MeshLab_pic_4

Rys. 4: Błędy modelu w programie Geomagic Studio

Jeśli jednak zależy nam jedynie na usunięciu zanieczyszczeń (na przykład w postaci odizolowanych części) i wypełnieniu otworów, program powinien spełnić nasze potrzeby. Do usunięcia wyizolowanych powierzchni mamy kilka opcji: filtry do usuwania odizolowanych części („Remove isolated pieces”), usuwanie elementów o zerowej grubości („Remove zero area faces”), zaznaczanie najmniejszych elementów („Small component selection”), które przy odpowiednich ustawieniach (ilości trójkątów z których składa się powierzchnia czy ich rozmiar) szybko i automatycznie usuwają nam zbędne fragmenty. Możemy również użyć ręcznego zaznaczania odizolowanch fragmentów ale jedynie prostokątem, co utrudnia manualną obróbkę.

MeshLab_pic_5

Rys. 5: Opcja wypełniania otworów w MeshLab

W MeshLab możemy wybierać konkretne otwory i sposób ich łatania, jednak często nie stanowi to kontinuum w odniesieniu do otaczającej powierzchni. Niestety nie ma możliwości poprawy takich źle wypełnionych otworów ręcznie. Program oznacza nam ilość otworów (Rys. 5), w przypadku gwiazdy było ich 458. Uciążliwy w programie jest również brak opcji „zaznacz wszystkie”, w przypadku dużej ilości otworów bardzo dużo czasu poświęca oznaczenie wszystkich do wypełnienia.

 

Program ogólnie rzecz biorąc nie przyda się jako szybkie narzędzie do sprawienia aby siatka była bezbłędna, cechowała się odtwarzalnością w rzeczywistości, posiadała pojedyńcze ścianki, nie nakładające się na siebie, a w szczególności była “watertight”, lepszy w tym przypadku będzie chociażby znany wśród drukarzy 3D Netfabb.

MeshLab_pic_6

Rys. 6: Model przed i po redukcji ilości trójkątów, różnica w jakości niezauważalna

Wartym do stosowania narzędziem jest z pewnością redukcja ilości trójkątów. Zmniejszenie ich ilości skutkuje zmniejszeniem szczegółowości i jakości odwzorowania przedmiotu, jednak pozytywnie wpływa na prędkość obliczeń i działanie programów. Do redukcji ilości trójkątów służą „Quadric Edge Collapse Decimation”, lub „Simplification: MC Edge Collapse”. Oba są skuteczne i działają na chmurze i siatce o różnych formatach. Mamy do dyspozycji wiele parametrów, które pozwolą nam zmniejszyć ilość trójkątów. Wystarczy wpisać liczbę. W przypadku gwiazdy z 5397522 trójkątów stworzyliśmy siatkę o ilości 50000. Te operacje znacznie zwiększają prędkość obliczeń przy małym zubożeniu jakości modelu. (Rys. 6)

Są to jedne z niewielu narzędzi, które działają bez zarzutu i nie generują błędów, które kończą się wyłączeniem programu i zmarnowaniem naszego czasu.

MeshLab_pic_7

Rys. 7: Model po rekonstrukcji powierzchni Poissona

Twórcy i użytkownicy programu jako zaletę programu podają filtr „surface reconstruction” oparty na algorytmie poissona. Po użyciu filtra otrzymujemy zrekonstruowaną powierzchnię. Na naszym modelu efekt nie wygląda dobrze, z powodu dużej ilości błędów i zbyt małego wygładzenia (filtry dostarczone przez program takie jak „Depth smooth” czy „Laplacian smooth” nie naprawiły poszarpanych ścian gwiazdy). (Rys. 7)

Narzędziem które najbardziej mi przypadło do gustu i uznaje jako największą zaletę programu jest nakładanie tekstur. Teksturowanie w MeshLabie odbywa się ręcznie za pomocą zdjęć („Raster layers”, „Parameterization and Texturing from rasters”). Każde zdjęcie z osobna należy dopasować do danego widoku modelu. Jest to dość żmudna praca, brakuje tu opcji automatycznej, a także przycinania zdjęć. W miejscach gdzie pada cień na zdjęciach po nałożeniu tekstury na model pojawiają się nieestetycznie wyglądające ciemne smugi. Jednak mimo pracy w innych programach, zawsze sięgam w przypadku teksturowania do MeshLaba, w mojej ocenie jest to najprostsze i najefektywniejsze narzędzie do teksturowania z jakim miałam do tej pory okazję się zapoznać. Ze względu na to , że gwiazda była biała, dla zaprezentowania efektu posłuże się modelem ceramicznej pokrywki ze zdobieniami wraz z teksturą (Rys. 8)

MeshLab_pic_8

Rys. 8: Model z teksturą

Mimo pozytywnych opinii na forach (http://sourceforge.net/projects/meshlab/reviews) bardziej jestem przychylna zdaniu, iż jest to program złożony z niedokończonych filtrów, które generują bardzo dużo błędów. Z pewnością intencją autorów było stworzenie filtrów opierających się na dobrze im znanych algorytmach matematycznych, jednak nie powstało z tego uniwersalne narzędzie dla zwyczajnego użytkownika operującego na danych ze skanera. MeshLab bez pomocy innego programu nie poradzi sobie z wieloma problemami dotykającymi obiekty zeskanowane. Jednak warte uwagi są pojedyncze algorytmy, które są bardzo sprawne, szybkie i efektywne. Program może stanowić uzupełnienie dla innych programów służących do obróbki zeskanowanych powierzchni.

Autor:  Adrianna Kania, CAD Specialist in TriPioDi