점의 위치와 면의 연결 정보는 다릅니다
점군(point cloud)은 공간에 있는 점들의 모음입니다. 한 점의 위치를 X·Y·Z 좌표로 기록하며, 점들만 있는 파일에는 어느 점끼리 면을 이루는지 정해져 있지 않을 수 있습니다. 화면에서 점이 촘촘하게 보여도 면이 생긴 것은 아닙니다.
메시(mesh)는 꼭짓점(vertex)과 그 사이를 잇는 면(face)으로 물체 표면을 나타내는 구조입니다. 면은 보통 삼각형으로 나눕니다. 점군에서 메시를 만드는 표면 재구성(surface reconstruction)은 측정한 점을 근거로 그 사이의 표면을 추정하는 작업입니다. 원래 없던 측정 정보를 새로 얻는 과정은 아닙니다.
파일을 불러오기 전에 첫 줄과 열 순서를 봅니다
작업할 파일은 복사본을 만들고 원본은 보관합니다. 텍스트 편집기에서 처음 몇 줄을 열어 숫자를 구분하는 문자와 열의 의미를 확인합니다. 예를 들어 12.5 3.0 -0.2라는 한 줄이 X·Y·Z 순서의 좌표 세 개를 나타낸다면, 공백이 구분 문자(separator)이고 각 열은 위치 좌표입니다. 앞에 시간이나 점 번호가 붙어 있다면 첫 세 열을 무조건 좌표로 읽어서는 안 됩니다.
MeshLab처럼 점군을 다루는 프로그램에서는 파일 가져오기(Import Mesh)로 좌표 파일을 선택한 뒤 다음 항목을 맞춥니다. 메뉴 이름과 지원 형식은 설치한 버전에 따라 다를 수 있으므로 대화상자의 실제 열 설명을 확인합니다.
| 확인할 항목 | 설정과 대조할 내용 |
|---|---|
| 머리글(header) | 첫 줄에 X Y Z 같은 제목이 있으면 그 줄을 건너뛰고, 숫자로 시작하면 제목 줄이 없는지 확인합니다. |
| 구분 문자 | 공백, 쉼표, 세미콜론 중 파일에서 실제로 쓰는 문자를 고릅니다. |
| 열 순서 | X·Y·Z 위치 좌표와 색상·법선·시간 등의 추가 열을 구분합니다. |
| 단위(unit) | 좌표를 기록할 때 사용한 mm·m 등의 단위를 확인합니다. 파일 확장자만 보고 단위를 정하지 않습니다. |
불러온 뒤에는 읽힌 점의 수와 각 축의 최솟값·최댓값을 봅니다. 실제 물체가 50 mm 정도인데 좌표 범위가 0.05라면 m 단위 기록일 수 있습니다. 반대로 50,000이라는 숫자가 보일 때도 곧바로 크기를 줄이지 말고 원래 단위와 변환 이력을 확인합니다. 파일을 읽는 설정이 틀렸다면 가져오기부터 다시 해야 합니다.
면의 수가 0이고 점만 보이는 것은 점군 파일에서는 정상일 수 있습니다. 물체를 여러 방향으로 돌려 축이 뒤바뀌지 않았는지, 멀리 떨어진 점이 섞였는지, 특정 면에 측정점이 없는지 확인합니다. 보기 싫은 점을 모두 지우기보다, 원본과 비교해 측정 대상이 아닌 것으로 확인한 점만 복사본에서 정리합니다.
포아송 재구성에는 점마다 표면 방향이 필요합니다
법선(normal)은 해당 위치에서 표면에 수직인 방향입니다. 위치 좌표가 ‘점이 어디 있는가’를 나타낸다면 법선은 ‘그 지점의 표면이 어느 쪽을 향하는가’를 나타냅니다. 좌표 세 개만 들어 있는 파일에는 법선이 저장돼 있지 않습니다.
포아송 표면 재구성(Poisson surface reconstruction)은 방향이 정해진 점들을 이용해 표면을 추정하는 방법입니다. MeshLab의 Screened Poisson도 법선이 있는 점군을 입력으로 사용합니다. XYZ 좌표를 불러왔다는 이유만으로 필요한 입력이 모두 준비됐다고 판단하지 않습니다.
법선이 없는 점군은 점군용 법선 계산(Compute normals for point sets) 기능 등으로 방향을 추정합니다. 이때 이웃 점 수(neighbour count)는 한 점의 주변을 얼마나 넓게 참고할지 정하는 조건입니다. 너무 적은 점만 참고하면 측정 잡음에 민감해질 수 있고, 너무 넓게 잡으면 얇은 물체의 반대편이나 날카로운 모서리의 다른 면까지 섞일 수 있습니다. 하나의 기본값을 모든 물체에 그대로 적용하지 않습니다.
법선을 화살표로 표시해 같은 면의 방향이 일관되는지 확인합니다. 안팎이 섞였다면 표면 생성부터 반복하지 말고 방향을 정리해야 합니다. 측정 위치를 이용해 방향을 정하는 기능은 실제 측정 위치가 알려져 있을 때 사용합니다. 여러 방향에서 얻은 점을 합친 파일에 임의의 한 위치를 지정하면 전체 방향이 올바르게 정해진다고 보장할 수 없습니다.
원래 점군을 남겨 두고 면을 만듭니다
표면 재구성을 실행할 때는 작업할 점군을 선택하고, 다른 점군까지 함께 처리하는 옵션이 켜져 있지 않은지 확인합니다. 원본 점군은 별도 레이어(layer, 작업 데이터를 나누어 보관하고 표시하는 단위)로 남겨 결과와 번갈아 볼 수 있게 합니다.
MeshLab에서는 포아송 계열의 표면 재구성 기능을 선택할 수 있습니다. 예전 버전의 Poisson과 Screened Poisson은 항목과 기본값이 같지 않으므로, 이름이 비슷한 설정에 예전 숫자를 그대로 옮기지 않습니다. 처음에는 사용한 버전·기능 이름·설정값을 기록하고 한 조건씩 바꾸어 결과를 비교합니다.
한 작업 사례에서는 MeshLab 1.3.4 BETA로 XYZ 좌표 파일을 열면서 머리글 건너뛰기를 0줄, 구분 문자를 SPACE(공백), 위치 열을 X·Y·Z로 지정했습니다. 가져온 점군에는 꼭짓점 2,108개와 면 0개가 표시됐습니다. 이는 점의 위치를 읽었지만 아직 면은 만들지 않은 상태입니다. 이 숫자만으로 좌표 단위나 누락된 측정 영역까지 확인된 것은 아닙니다.
이 점군에 Surface Reconstruction: Poisson을 적용할 때 기록된 설정은 아래와 같습니다. 옥트리(octree)는 3차원 공간을 여덟 부분으로 거듭 나누는 방식이며, 표의 node는 그 분할 공간의 한 칸을 가리킵니다. 아래 숫자는 해당 파일과 프로그램 버전에서 사용한 사례값이지 다른 점군에도 그대로 맞는 권장값은 아닙니다.
| MeshLab 1.3.4 BETA의 항목 | 항목의 의미 | 사례값 |
|---|---|---|
| Octree Depth | 공간을 나눌 수 있는 최대 깊이입니다. | 6 |
| Solver Divide | 표면 재구성 방정식을 블록으로 나누어 풀 때 쓰는 깊이입니다. | 6 |
| Samples per Node | 분할 공간 한 칸에 요구하는 최소 표본 점 수입니다. | 1 |
| Surface offsetting | 표면을 추출할 위치의 보정 계수입니다. 1은 위치 보정을 하지 않습니다. | 1 |
적용 후에는 꼭짓점 2,570개와 면 5,136개인 메시가 표시됐습니다. 점군의 꼭짓점 수와 새 메시의 꼭짓점 수는 서로 다른 구조의 개수이므로, 2,108 → 2,570을 측정점 증가나 정확도 향상으로 해석하면 안 됩니다. 면 5,136개도 면이 만들어졌다는 기록이지 치수 오차의 측정값은 아닙니다. 이 가져오기 설정과 결과만으로는 법선이 어떻게 준비됐는지 알 수 없습니다. 작업할 파일에 법선이 있는지 먼저 확인하고, 없다면 앞에서 설명한 법선 계산과 방향 확인을 거친 뒤 원래 점군 및 실제 치수와 결과를 대조합니다.
표의 Octree Depth에 해당하는 재구성 깊이(reconstruction depth)는 계산 공간을 얼마나 잘게 나눌 수 있는지 정하는 상한입니다. 깊이를 높이면 더 작은 형상을 표현할 여지가 생기지만 계산량과 메모리 사용이 늘 수 있습니다. 점 사이에 실제 측정 정보가 없는 부분까지 정확해지는 것은 아닙니다. 깊이를 바꿔도 같은 곳이 찌그러진다면 원래 점의 분포와 법선부터 다시 봅니다.
메워진 면을 실제 측정한 표면으로 착각하지 않습니다
포아송 계열 재구성은 틈이 닫힌 표면을 만들 수 있습니다. 닫힌 표면(watertight surface)은 면의 연결에 열린 경계가 없다는 뜻이지 물체 전체를 빠짐없이 측정했다는 뜻이 아닙니다. 바닥을 측정하지 않았는데 프로그램이 바닥 면을 만들거나, 실제 구멍이 막힐 수 있습니다.
검사는 다음 순서로 진행합니다.
- 원래 점군만 표시해 측정한 영역과 비어 있는 영역을 확인합니다.
- 생성한 메시만 표시하고 여러 방향에서 구멍, 돌출, 얇은 부분과 바닥을 봅니다. 매끈한 정면만 보고 끝내지 않습니다.
- 점군과 메시를 겹쳐 표시하거나 같은 시점에서 번갈아 보며, 점에서 크게 벗어난 면과 빈 영역을 임의로 잇는 면을 찾습니다. 음영과 색이 달라 생기는 인상 차이도 구분합니다.
- 사용할 목적에 필요한 실제 치수와 대조합니다. 끼워 맞출 부품을 만들려면 외형뿐 아니라 구멍 간 거리, 두께 등 중요한 치수가 맞아야 합니다. 화면에서 비슷해 보인다고 해서 치수 정확도를 판단할 수는 없습니다.
- 기록한 단위와 좌표 방향을 유지해 내보내고, 저장한 파일을 다시 열어 확인합니다. 원래 점군과 재구성 결과는 서로 다른 이름으로 보관합니다.
측정되지 않은 곳은 설정만 높여 복원했다고 할 수 없습니다. 그 부분이 제품의 기능이나 치수에 중요하다면 추가 측정이 필요합니다. 시각화 목적으로 임시로 메운 면이라면 작업 기록에 그 범위를 남깁니다. ‘모델이 만들어졌다’는 단계와 ‘그 모델을 제작·검사에 써도 된다’는 단계를 구분해야 잘못된 형상을 다음 작업에 넘기지 않을 수 있습니다.