본문 바로가기
공허의 유산/표현의 자유

[3DReconstruction] 02.meshroom tutorial review(2)

by 바른생활머시마 2023. 2. 13.
728x90
반응형

지난 시간에 Meshroom sample data를 이용하여 3D Reconstruction을 해보았습니다.

https://learn-and-give.tistory.com/67

 

[3DReconstruction] 01.meshroom tutorial review

3D 프로그램을 만들 때, 관심 있는 3D 오브젝트나 케릭터를 이용해서 만들고 싶을 때가 많은데, 인터넷에서 구할 수 있는 것들 중에는 딱 마음에 드는 것을 찾기가 쉽지 않을 때도 있고, 파일로 구

learn-and-give.tistory.com

정말 별 어려움 없이 뚝딱뚝딱 되니 좋고, 중간 과정도 살펴 볼 수 있어서 관련 된 공부를 하는 분들에게는 참 좋은 툴인 것 같습니다.

 

초보용 tutorial의 남은 부분은 후처리에 대한 내용입니다.

 

 

Mesh Decimation

일반적으로 3D Scanning을 통해서 데이터가 획득되면 Vertex의 밀도가 매우 높습니다. 형상들의 주요 Feature들의 분포를 미리 알 수 없기 때문에 밀도 높게 데이터를 구해야 특성을 잘 나타내는 형상을 만들어 낼 수 있습니다. 그러나, 데이터 양이 커지면 이를 활용하는데 여러가지 어려움이 따르게 됩니다. 그래서, 형상을 유지한 상태로 데이터를 줄이는 방법에 대해서 많은 연구가 되어 왔습니다. Decimation도 그런 경량화 기술입니다. Decimation 기법도 여러가지가 있는데 그것을 여기서 다 설명 할 수도 없고, 저도 잘 모르고~~^^ 대충 주변의 점들과 비교해서 튀어나오거나 들어가지 않은 Vertex는 없어도 외형에 큰 차이가 없으니 그런 Vertex를 줄이는 기법이라는 정도로만 이해 해 둡시다.

 

 노드 그래프에서 어느 지점에서 Decimation을 하면 좋을까요??

 

일단 Meshing이 Mesh를 만드는 것이니 그 뒤에 있어야겠고, MeshFiltering이 뭔지 모르겠지만 그 과정을 통해서 최종적인 메쉬가 만들어지고, 그 다음에 텍스쳐링이 되니, MeshFiltering의 결과를 Decimation하면 될 것 같습니다. Node 편집 화면의 빈 칸에서 context menu를 통해 MeshDecimation 노드를 추가합니다. (Tutorial 이미지가 좋으니 그것을 참고하도록 하죠.) 

 위 그림과 같이 MeshDecimation 노드 추가 후, 여기에 input으로 MeshFiltering의 출력 결과를 넣어줍니다. 노드를 선택하면 그 속성을 설정 할 수 있는데, 최대 Vertex 개수를 작은 값을 주면 Decimation이 많이 됩니다. 기존에 있던 Vertex가 8천개 정도 되니 천개 정도로 설정하겠습니다.

그 다음으로 이 결과에 Texturing을 하기 위해, 기존의 Texturing 노드를 context menu를 통해서 복사를 하고, 여기에 필요한 입력을 연결 합니다. 복사를 하면 입력값의 연결도 그대로 복사가 되는데 입력 mesh는 원래 것을 지우고 Decimation이 된 결과를 넣어주도록 합니다.

 

최종적으로 아래와 같이 만들어 집니다. 보시다시피, 새로 추가한 노드에는 상태바가 검은색으로 아직 실행이 되지 않은 상태라는 표시가 보입니다.

상단의 Start를 눌러 실행 시키면 이전처럼 주황색/하늘색을 거쳐 최종적으로 녹색이 됩니다(문제가 없다면)

반응형

 

 

 

아래와 같이 다 계산 되었습니다. 결과를 확인하는 방법은 결과를 확인하고자 하는 노드를 더블클릭하면 됩니다. 

Texture2노드를 더블클릭!

이렇게 봐서는 얼마다 줄었는지 판단하기 어렵기 때문에, 원래의 Texturing도 DISPLAY에 추가 후, Wireframe으로 비교해 보면 그 차이를 확실히 알 수 있습니다. 먼저 Decimation 전의 메쉬입니다. 거의 픽셀 단위로 vertex가 만들어진 것처럼 촘촘하게 만들어진 것을 볼 수 있습니다.

반면, Decimation이 된 결과는 아래 그림처럼 눈에 띄게 Vertex가 적습니다.

3D 형상도 크게 차이가 나지 않습니다.  다른 곳에 활용하려면 Decimation을 하지 않을 이유가 없겠네요.

그런데 Decimation을 익숙한 외부 툴(ex.MeshLab)을 이용해서 하고 싶다면, 그것도 가능합니다. 아래와 같이 노드 입력을 제거하고, 속성 중 Mesh를 찾아서 거기에 외부 툴에서 처리 된 메쉬의 경로를 넣어주면 됩니다. 

 

 

 

SfM만으로 메쉬 대충 만들어보기

 

사진의 개수가 적은 개수이거나 컴퓨터 사양이 빵빵하다면 별 문제가 없겠지만 그렇지 않은 경우에는 무엇인가 변경하고 다시 확인하는 과정에 시간이 많이 소요 될 것 입니다. 그래서, Dratf mesh로 초안 같은 것을 한번 살펴 볼 수도 있습니다.

다만, 어디까지나 초안이기 때문에 결과물과는 다소 다를 수 있습니다. 

 

노드 편집기에서 DepthMap에서 context 매뉴를 누르면 Duplicate가 있는데, 이 매뉴의 오른쪽에는 오른쪽으로 향하는 화살표가 있으며, 마우스를 이쪽으로 옮기면 from here가 추가 됩니다 .즉, context menu의 왼쪽을 누르면 하나의 노드만, 오른쪽을 누르면 그 이후로 연결 된 모드 노드에 똑같은 노드가 처리 됩니다. 이 기능을 이용하여 DepthMap 이하의 모든 노드를 복사한 후(백업), 원래 그래프 시퀀스에서 PrepareDenseScene에서 DepthMap 관련 노드 두 개를 제외하고 마로 Meshing으로 연결합니다.

 

아래와 같이 되는데요,

 

결과는 뭐 그럭저럭... 중앙부에만 형상이 만들어지는 것을 보니 여러 뷰에서 많이 보이는 부분이 주로 추출되는것 아닐까 대충 한번 찍어봅니다.

 

다음에는 직접 촬영한 사진으로 한번 작업 해 보겠습니다.

https://learn-and-give.tistory.com/69

 

[3DReconstruction] 03.meshroom tutorial review(3)

meshroom을 이용하여 샘플 사진으로부터 3D 오브젝트를 생성하는 과정을 살펴보았습니다. https://learn-and-give.tistory.com/68 [3DReconstruction] 02.meshroom tutorial review(2) 지난 시간에 Meshroom sample data를 이용하

learn-and-give.tistory.com

 

728x90
반응형

댓글