핵심은 이렇습니다. 네 이미지가 모두 같은 수준으로 ‘원본 파일의 사실’을 보여주는 것은 아닙니다. 1·2·3번은 실제 3D 데이터에서 비교적 직접적으로 뽑아낸 결과이고, 4번은 실제 측정값이 없어서 다른 특징으로 대신 추정한 이미지입니다.
먼저 아주 기본적인 용어부터 풀면, 3D 스캔 파일은 보통 수많은 점과 면으로 이루어져 있습니다. 점들을 연결하면 삼각형 같은 작은 면들이 생기고, 이 면들이 모여 물체의 겉표면을 만듭니다. 이 겉표면 전체를 메시(mesh)라고 부릅니다. 쉽게 말하면 아주 촘촘한 철망으로 물체의 표면을 만든 것과 비슷합니다.



1. 경계(구멍) 시각화는 그 철망이 어디에서 끊어져 있는지를 찾은 이미지입니다. 정상적인 표면이라면 대부분의 선은 양쪽에 면이 붙어 있어야 합니다. 그런데 한쪽에만 면이 붙은 선은 그곳에서 표면이 끝났다는 뜻이고, 이런 선들이 모이면 구멍이나 찢어진 가장자리가 됩니다. 그래서 “한 면에만 속한 엣지 = 경계”라는 방식으로 구멍을 찾습니다. 여기서 엣지(edge)는 삼각형 면과 면 사이의 선이라고 생각하시면 됩니다.
처음에는 한 가지 의심이 있었습니다. 3D 모델에서는 텍스처를 입히기 위해 같은 위치의 점을 여러 개로 나눠 저장하는 경우가 있는데, 이것 때문에 실제로는 멀쩡한 표면이 컴퓨터상에서 찢어진 것처럼 계산될 수도 있습니다. 그래서 같은 위치에 있는 점들을 다시 합친 뒤 계산해봤는데, 경계 비율이 92.2%에서 거의 변하지 않았습니다. 즉 프로그램상의 착시가 아니라, 실제 파일 자체가 매우 불완전한 메시라는 뜻입니다. “전체 선의 92.2%가 경계”라는 숫자는 상당히 극단적입니다. 쉽게 말하면 천 조각을 촘촘히 이어 만든 표면이 아니라, 거의 모든 곳의 봉제선이 풀려 있는 천에 가깝습니다. 그래서 이미지가 노이즈투성이처럼 보이는 것도 과장이 아닙니다.
2. Voxel body 분포는 물체를 아주 작은 정육면체 블록으로 바꿔서, 서로 연결된 덩어리가 몇 개인지를 보는 방식입니다. 여기서 voxel(복셀)은 2D 이미지의 픽셀을 3차원으로 만든 것이라고 생각하면 쉽습니다. 레고 블록처럼 공간을 작은 큐브로 나누고, 물체가 있는 위치에 블록을 채우는 겁니다.
그다음 서로 붙어 있는 블록들을 하나의 덩어리로 묶습니다. 이것이 connected-component labeling, 즉 “서로 연결된 부분을 같은 집단으로 묶는 계산”입니다. 계산 결과 “99.92%가 메인 바디”라고 나왔다면, 현재 설정에서는 거의 모든 복셀이 하나의 큰 덩어리에 속하고, 아주 조금만 떨어진 파편으로 존재한다는 뜻입니다.

다만 중요한 조건이 있습니다. 계산을 빨리 하기 위해 해상도를 낮췄습니다. 작은 레고 대신 좀 큰 레고를 썼다고 생각하시면 됩니다. 그러면 가까이 붙어 있는 작은 파편들이 하나로 합쳐지거나, 너무 작은 파편은 아예 없어질 수 있습니다. 따라서 99.92%라는 숫자는 절대적인 진실이라기보다 ‘현재 복셀 크기로 보았을 때’의 결과입니다. 그래도 “큰 본체 하나와 소수의 작은 파편이 있다”는 전체 구조를 보는 데에는 신뢰도가 높습니다.
3. UV 아틀라스는 조금 낯선 개념입니다. 3D 물체의 표면에 사진이나 색을 입히려면, 둥글고 입체적인 표면을 평면으로 펼쳐야 합니다. 지구본을 잘라서 세계지도로 펼치는 것과 거의 같습니다. 이렇게 펼쳐진 2차원 좌표를 UV 좌표, 펼쳐진 조각들을 모아놓은 것을 UV atlas라고 합니다.
그래서 UV 아틀라스 이미지를 보면 원래 물체가 무엇이었는지 거의 알아보기 어렵습니다. 얼굴이나 의자가 이상한 조각들로 찢겨 평면에 놓여 있는 것처럼 보일 수 있습니다. 하지만 컴퓨터 입장에서는 각 조각의 어느 위치에 어떤 사진을 붙일지 알려주는 지도입니다.
이번 이미지는 실제 파일에 들어 있던 UV 좌표를 사용했기 때문에 형태를 임의로 만든 것은 아닙니다. 다만 데이터가 너무 많아서 모든 면을 다 그리지 않고, 각 부분에서 최대 4,000개 정도만 골라 보여줬습니다. 따라서 “이런 식으로 펼쳐져 있다”는 전체 구조는 실제 데이터에 근거하지만, 화면에 보이는 모든 작은 조각이 전체 데이터와 일대일로 대응하는 완전한 지도는 아닙니다. 쉽게 말하면 전체 숲을 보여주기 위해 나무 일부만 추려 그린 것입니다.
마지막 4. 곡률 기반 노이즈는 앞의 세 이미지와 성격이 다릅니다. 여기서 곡률(curvature)은 표면이 얼마나 평평하거나 급하게 휘어 있는지를 나타내는 값입니다. 평평한 판은 곡률이 작고, 뾰족하거나 심하게 휜 부분은 곡률이 큽니다.
문제는 우리가 정말 알고 싶었던 것이 “스캔이 어느 부분에서 정확했고 어느 부분에서 불안정했 는가”, 즉 스캔 신뢰도였다는 점입니다. 그런데 원본 파일 안에는 실제 신뢰도 값이 들어 있지 않았습니다. 그래서 대신 “표면이 급하게 요동치는 부분은 스캔 노이즈가 많을 가능성이 있지 않을까?”라는 가정 아래 곡률을 사용한 것입니다.
따라서 이건 신뢰도를 직접 측정한 이미지가 아닙니다. 곡률이 높은 곳이 반드시 스캔이 잘못된 곳이라는 뜻도 아닙니다. 원래 물체가 뾰족하거나 복잡하게 생겼을 수도 있기 때문입니다.
게다가 원본이 약 75만 개의 정점으로 매우 복잡해서, 계산을 위해 약 4만 면 정도로 단순화한 뒤 곡률을 구했습니다. 쉽게 말하면 고해상도 사진을 아주 작은 크기로 줄인 다음 미세한 주름을 분석한 것과 비슷합니다. 큰 형태는 남지만 섬세한 요철은 사라질 수 있습니다. 그래서 4번은 실제 파일을 출발점으로 만든 이미지이긴 하지만, 파일이 가진 어떤 측정값을 그대로 보여준다고 말하기는 어렵습니다.
정리하면 이렇게 이해하시면 가장 정확합니다.
1번은 “이 3D 표면이 실제로 어디서 끊겨 있는가”,
2번은 “이 데이터가 큰 덩어리와 작은 파편으로 어떻게 나뉘어 있는가”,
3번은 “3D 표면이 텍스처를 위해 평면에 어떻게 펼쳐져 있는가”를 보여줍니다.
이 셋은 실제 파일 구조를 다른 방식으로 들여다본 것에 가깝습니다.
반면 4번은 “스캔의 불안정성을 이런 식으로 볼 수도 있지 않을까” 하고 만든 해석적 시각화에 더 가깝습니다.
여기서 말한 “신뢰도 값”은 ‘이 점이 얼마나 믿을 만하게 스캔되었는지’를 숫자로 기록해 둔 데이터를 뜻해요.
예를 들어 3D 스캐너가 물체 표면의 한 점을 잡았을 때 내부적으로는 이런 정보가 있을 수 있습니다.
-
점 A: 위치 (x, y, z) + 신뢰도 0.95 → 아주 확실하게 측정됨
-
점 B: 위치 (x, y, z) + 신뢰도 0.42 → 반사나 움직임 때문에 불확실함
-
점 C: 위치 (x, y, z) + 신뢰도 0.10 → 거의 믿기 어려운 측정
-
그런데 최종적으로 저장된 STL·OBJ·GLB 같은 3D 파일에는 이런 ‘측정 당시의 확신 정도’가 반드시 들어가는 게 아닙니다. 대부분은 결과적으로 만들어진 점의 위치, 삼각형 면, 텍스처 같은 정보만 남을 수 있어요.
쉽게 비유하면 사진 파일을 하나 받았다고 해볼게요.
사진은 볼 수 있지만,
“카메라가 이 부분의 초점을 잡을 때 97% 확신했다”
“이 부분은 빛이 부족해서 35% 확신했다”
같은 촬영 당시 카메라의 판단까지 사진 파일에 저장되어 있는 것은 아니잖아요. 3D 스캔 파일도 비슷합니다.
그래서 지금 가지고 있는 파일만 보고는 “이 부분은 스캐너가 확신했고, 저 부분은 스캐너가 불확실해했다”를 직접 알 수 없다는 뜻이에요.
우리가 볼 수 있는 건 그 대신 결과에 남은 흔적입니다. 예를 들어 어떤 곳에 구멍이 많다거나, 표면이 갑자기 울퉁불퉁하다거나, 작은 파편이 떨어져 있다거나 하는 것들이죠. 하지만 그것을 보고 “여기는 신뢰도가 낮았다”라고 단정하면 한 단계 추측이 들어갑니다.
그래서 앞서 4번 이미지에 대해서는 더 정확한 표현이:
‘스캔 신뢰도 시각화’가 아니라
‘표면의 불규칙성/곡률을 이용한 노이즈 추정 시각화’
에 가깝습니다.