목록으로
디지털 트윈
전체공개
한국어

현장 스캔 × BIM 비교로 시공 진척·오차를 자동 판정하기 — Scan-vs-BIM 프로토타입

정답을 아는 가상 현장(디지털 트윈)에서 점군과 설계 BIM을 비교해 부재별 시공 상태, 위치 오차, 층별 공정률을 자동으로 판정해 봤습니다.

게시글 대표 이미지

왜 시작했나

건설 현장의 공정률과 시공 품질은 지금도 대부분 사람이 현장을 돌며 눈으로 보고 줄자로 재서 판단합니다.

  • 공정률 보고가 부정확합니다. 담당자 감에 의존하므로 기성(공사비 지급)을 산정할 때 분쟁이 생깁니다.
  • 오차를 늦게 발견합니다. 벽·기둥 위치 오차나 누락을 늦게 찾으면 철거·재시공 비용이 커집니다.
  • 설계 BIM이 시공 단계에서 쓰이지 않습니다. BIM 적용은 늘고 있지만 실제 시공 상태와 비교하는 도구는 거의 없습니다.

이번 프로토타입은 현장 3D 스캔(점군)을 설계 BIM과 자동으로 비교해 부재별 시공 여부, 위치 오차(mm), 층별 공정률을 판정하는 방식이 통하는지 확인했습니다. 실제 현장 데이터 대신 정답을 알고 있는 합성 데이터(디지털 트윈) 를 만들어 모든 판정을 채점했습니다.

데이터와 모델

정답을 아는 가상 현장

항목

내용

기준 BIM

uBuilder에서 모델링해 IFC로 내보낸 건물. 50 m × 50 m, 3개 층(지하 1층/1층/2층), 부재 198개(벽·기둥·슬래브·보·계단)

공정 회차

공사 중 스캔 시점 4번(1~4회차). 층 → 바닥 슬래브 → 기둥·벽 → 보·지붕 슬래브·계단 순서로 공정표상 부재 30 / 55 / 80 / 100%까지 착수. 누락·부분 시공을 반영한 체적 기준 실제 공정률(정답)은 28 / 58 / 68 / 82%

심어 둔 문제

위치 오차(부재 10%, 5~40 mm), 기둥 수직도 오차(1/300~1/100), 누락(5%), 부분 시공, 잡물(층당 3~8개)

가상 스캐너

각해상도 0.1°, 사거리 30 m, 노이즈 σ = 2 mm + 0.1 mm/m, 층당 스테이션 4~6개, 현장 좌표는 임의 회전 ±5°·이동 ±0.5 m

점군 규모

1회차 97만 점 → 4회차 470만 점

회차마다 "어느 부재가 완료·진행 중·미시공·누락인지, 오차를 얼마나 넣었는지"가 정답 파일로 남습니다. 분석 코드는 이 정답을 보지 못하고 점군과 BIM만 받습니다.

3회차 시공 상태 (회색 완료, 주황 진행 중, 빨강 오차를 넣은 부재, 파랑 잡물)3회차 시공 상태 (회색 완료, 주황 진행 중, 빨강 오차를 넣은 부재, 파랑 잡물) 3회차 가상 스캔 점군3회차 가상 스캔 점군

판정 모델

방법

내용

규칙

설계 표면 중 점이 덮은 비율(커버리지) 임계값으로 완료 / 진행 중 / 미시공 판정

규칙 + 가시성

커버리지 분모를 "스캐너에서 보일 수 있었던 면적"으로 바꾼 규칙

학습

부재별 특징(가시 면적, 커버리지, 시공 방향 덮인 범위, 점 밀도, 공종) → Gradient Boosting 분류기

학습 데이터는 같은 평면에서 회차 일정·결함·스테이션·현장 좌표·스캔 노이즈(2~5 mm)를 바꾼 변형 6개 × 4회차로 만들었고, 평가에 쓰는 변형은 학습에 넣지 않았습니다.

핵심 구현

판정 파이프라인

점군과 BIM을 정합한 뒤 상태 판정(①~⑤)과 위치 편차(⑥) 두 갈래로 나뉜다.점군과 BIM을 정합한 뒤 상태 판정(①~⑤)과 위치 편차(⑥) 두 갈래로 나뉜다.
  1. 좌표 정합 — 벽 법선 방향 히스토그램으로 회전 후보를 잡고, 평면 위치 상호상관으로 이동을 맞춘 뒤 점-면 ICP로 다듬습니다.
  2. 점-부재 할당 — 설계 표면에서 50 mm 이내이고 법선 방향이 맞는 점만 그 부재에 붙입니다. 나머지는 잡물 후보입니다.
  3. 가시성 판정 — 스캐너 위치에서 각 부재 표면이 원래 보일 수 있었는지를 광선으로 계산합니다. 이번 프로토타입의 핵심입니다. 벽 뒷면처럼 처음부터 보일 수 없는 면을 "점이 없다 = 미시공"으로 읽지 않게 합니다.
  4. 상태 분류 — 보일 수 있던 면적 중 실제로 점이 덮은 비율로 완료 / 진행 중 / 미시공을 정합니다. 보일 수 있는 면적이 0.2 m² 미만이면 "판정 불가"로 남깁니다.
  5. 공정률 — 부재 체적 가중. 진행 중 부재는 시공 방향으로 덮인 범위 비율을 시공 비율로 씁니다.
  6. 편차 — 부재별로 점-면 정합을 다시 풀어 이동량과 기둥 기울기를 구합니다. 점이 한 면에만 있으면 그 방향만 측정합니다.

4회차 전체 분석은 약 1분 30초 걸립니다. 결과는 .ply로 내보내 uBuilder 점군 겹쳐 보기로 바로 확인할 수 있습니다.

uBuilder에 4회차 판정 결과 점군을 겹친 화면. 주황은 진행 중(2층 지붕 슬래브), 파랑은 어느 부재에도 할당되지 않은 점이다. 완료 부재의 회색 점은 모델 면과 겹쳐 보인다.uBuilder에 4회차 판정 결과 점군을 겹친 화면. 주황은 진행 중(2층 지붕 슬래브), 파랑은 어느 부재에도 할당되지 않은 점이다. 완료 부재의 회색 점은 모델 면과 겹쳐 보인다.

구현하며 막힌 점과 조치

현상

원인

조치

1회차 점군이 한 층 위(z +3.0 m)에 정합됨

층마다 평면이 같아 지하 1층 점군이 1층 설계에도 똑같이 잘 맞음

현장 대략 위치(기준점·GNSS 수준, ±1 m)를 사전값으로 받음. 실제 현장에도 필요한 입력

기둥 점 대부분이 어떤 부재에도 할당되지 않음

폭 0.35 m 기둥에서 법선을 추정하면 두 면이 섞여 모서리 대각 방향(약 45°)이 나옴

법선 각도 조건 30° → 60°

누락된 벽 하나가 방 전체를 "가린다"고 판정됨

바닥 슬래브와 맞닿은 벽 밑면에 바닥 점이 붙어, 점이 있는 부재를 가림체로 썼더니 없는 벽이 가림체가 됨

다른 부재와 맞닿은 면을 빼고, 규칙 판정이 미시공이 아닌 부재만 가림체로 사용. 판정이 바뀌지 않을 때까지 반복

4회차 2층 공정률이 12 %p 과대

진행 중으로 맞게 판정한 지붕 슬래브(2층 체적의 61%, 실제 33% 시공)를 50%로 계산

진행 중 부재의 시공 비율을 덮인 범위 비율로 추정. 2층 오차 +12.2 → +0.8 %p

다 지어진 기둥이 "판정 불가"

겹친 설계 부재(벽 끝이 기둥 속, 직교 벽과도 겹침)에서 씬 전체 안/밖 검사가 틀려 맞닿은 면이 노출면으로 남음

맞닿음을 부재마다 따로 판정. 판정 불가 1~4회차 각각 1~3개 감소

지붕 슬래브 근처 점이 표면에서 18~32 mm 떨어져 보임

측정 라이브러리(Open3D, float32)가 길고 가는 삼각형에서 최근접점을 틀림. 실제 거리는 5 mm 이내

판정 결과에는 영향이 없음을 확인. 지표를 잴 때만 다른 라이브러리로 교차 확인

공통점은 "점이 있다/없다"를 그대로 믿으면 틀린다는 것입니다. 무엇이 보일 수 있었는지, 무엇이 무엇과 맞닿아 있는지를 BIM으로 먼저 계산해야 점군을 바르게 읽을 수 있었습니다.

성능 비교

정합·할당·편차

회차

정합 오차 (모델 모서리 최대)

할당 정확도

오프셋 RMSE

20 mm 경고 검출 / 누락 / 오경보

1회차

0.71 mm

99.3%

2.3 mm

2 / 0 / 0

2회차

0.78 mm

99.6%

0.9 mm

3 / 0 / 0

3회차

0.68 mm

99.5%

1.9 mm

6 / 0 / 0

4회차

0.37 mm

99.8%

1.3 mm

4 / 0 / 0

20 mm를 넘는 위치 오차는 4회차 합계 15건 모두 경고했고, 오경보는 없었습니다.

4회차 위치 오차 히트맵4회차 위치 오차 히트맵

상태 판정 — 세 방법 비교

판정 가능한 부재 기준 정확도입니다. 판정 불가 비율은 1~4회차 7.6 / 15.2 / 15.2 / 23.7%(가시성을 쓰는 두 방법 공통)입니다.

회차

규칙

규칙 + 가시성

학습

누락 검출 (학습)

1회차

0.793

0.967

0.995

5/5

2회차

0.535

0.940

0.994

3/4

3회차

0.384

0.929

1.000

6/6

4회차

0.152

0.940

0.987

7/7

가시성을 빼면 공정이 진행될수록 정확도가 떨어집니다(0.79 → 0.15). 벽이 많아질수록 한쪽 면만 보이는 벽과 바닥이 늘어나는데, 이를 "덜 지어졌다"고 읽기 때문입니다. 가시성을 넣으면 모든 회차에서 0.93~0.97을 유지하고, 학습 분류기는 규칙이 자주 틀리던 진행 중 → 완료 오분류까지 줄였습니다.

4회차 정답(위) vs 학습 판정(아래)4회차 정답(위) vs 학습 판정(아래)

보라색 "판정 불가"는 스캐너 위치에서 충분히 보이지 않은 부재입니다. 보이지 않는 부재를 추측해서 채우지 않고 따로 표시하는 것이 의도된 동작입니다. 실제 현장에서는 "다음 스캔 때 이 위치를 더 찍으세요"로 안내할 수 있습니다.

공정률

회차

정답

규칙

규칙 + 가시성

학습

1회차

28%

−1.9 %p

−0.8 %p

−1.1 %p

2회차

58%

−4.2 %p

−0.5 %p

−0.8 %p

3회차

68%

−4.5 %p

−0.4 %p

−0.7 %p

4회차

82%

−14.2 %p

+0.4 %p

−0.4 %p

회차별 공정률 오차회차별 공정률 오차 2층 지붕 슬래브 근접. 실제로 33%만 시공된 슬래브를 진행 중으로 판정했고, 점이 덮은 범위를 시공 비율로 써서 공정률에 반영한다.2층 지붕 슬래브 근접. 실제로 33%만 시공된 슬래브를 진행 중으로 판정했고, 점이 덮은 범위를 시공 비율로 써서 공정률에 반영한다. 회차별 판정 변화(학습, 1회차 → 4회차)회차별 판정 변화(학습, 1회차 → 4회차)

남은 과제

확인한 것

  • 가시성 판정을 넣으면 규칙만으로도 상태 정확도 0.93~0.97, 학습 분류기로 0.99 수준.
  • 전체 공정률 오차 ±1.1 %p 이내, 20 mm 위치 오차 경고 15/15 검출.
  • uBuilder의 IFC 내보내기와 점군 겹쳐 보기를 그대로 입출력으로 쓸 수 있음(uBuilder 코드 수정 없음).

한계

  • 합성 데이터입니다. 실제 스캐너 노이즈, 반사·투과 재질, 사람·장비에 의한 가림은 아직 없습니다.
  • 평면이 1종이라 학습·평가를 같은 평면의 무작위 변형으로 나눴습니다. 다른 평면에서 일반화되는지는 확인하지 못했습니다.
  • 맞닿은 같은 평면(벽 밑면 ↔ 슬래브 윗면)의 점이 어느 부재 것인지는 여전히 정하지 못합니다.

다음 단계

  • 실제 현장 스캔 2~3회차 + 해당 BIM으로 PoC(골조 공사 중 현장 1곳 또는 1개 층)
  • 스캐너 종류(지상 레이저, 드론, 스마트폰 LiDAR)별 노이즈·밀도 반영
  • 판정 불가 부재 기반 "다음 스캔 위치 추천"

느낀 점

막혔던 점과 잘못 생각했던 점

진행하면서 가장 많이 배운 것은 그럴듯한 첫 가설이 자주 틀린다는 점이었습니다. AI가 내놓은 원인 추정도, 제가 설계 단계에서 세운 가정도 마찬가지였습니다.

처음 생각

실제

설계 문서: "가시성은 점군과 무관하게 BIM과 스캐너 위치만으로 계산한다"

아직 안 지은 벽까지 가림체로 두면 뒤가 다 가려지고, 점이 있는 부재만 가림체로 두면 누락된 벽이 방 전체를 가렸습니다. 결국 가림체 선택에 판정 결과를 쓰고, 판정이 바뀌지 않을 때까지 반복해야 했습니다

정합은 평면 특징 + ICP면 충분하다

층마다 평면이 같아 지하층 점군이 한 층 위 설계에 그대로 맞아 버렸습니다. 현장 대략 위치라는 입력 하나가 더 필요했습니다

법선 각도 30°면 면 구분이 된다

폭 0.35 m 기둥은 법선이 모서리 대각으로 나와 점 대부분이 버려졌습니다

마지막 회차의 최상층 공정률이 12 %p 높게 나온 것은 판정 불가 부재를 분모에서 뺀 탓이다

수치를 나눠 보니 판정 불가 제외는 오히려 −3.9 %p였고, 원인은 맞게 판정한 진행 중 지붕 슬래브를 50%로 센 것(+11.3 %p)이었습니다

다 지어진 기둥이 판정 불가인 것은 부분 시공 메시의 가짜 면 때문이다

부분 메시는 정상이었고, 설계 부재끼리 겹친 자리에서 안/밖 검사가 틀린 것이 원인이었습니다

지붕 슬래브 근처의 18~32 mm 점은 실제 시공 오차다

거리 측정 라이브러리가 길고 가는 삼각형에서 거리를 잘못 잰 것이었고, 실제로는 5 mm 이내였습니다

입력 데이터에서도 막혔습니다. 테스트 모델에 최상층 바닥 슬래브가 없고 계단 메시가 열려 있어서 Python 쪽에서 보정했습니다. 평면이 1종뿐이라 학습·평가를 같은 평면의 무작위 변형으로 나눌 수밖에 없었던 것도 아쉬운 부분입니다.

틀린 가설을 빨리 버릴 수 있었던 것은 정답을 아는 합성 데이터 덕분입니다. "그럴 것 같다"에서 멈추지 않고 오차를 원인별로 나눠 채점할 수 있었고, 그래서 바이브 코딩에서 사람이 할 일은 코드를 쓰는 것보다 AI의 설명을 숫자로 검증하는 것이라고 느꼈습니다.

시간 효율

  • 분석: 4회차 전체(정합 → 할당 → 가시성 → 분류 → 공정률 → 편차)가 약 1분 30초입니다. 점이 가장 많은 마지막 회차(470만 점)도 정합·할당·편차는 13초입니다. 스캔이 끝나면 부재 198개의 상태와 위치 오차, 층별 공정률이 바로 나옵니다.
  • 현장 업무: 사람이 할 일이 "현장을 돌며 전부 보고 재기"에서 "스캔하고, 20 mm 경고 부재와 판정 불가 부재만 확인하기"로 바뀝니다. 다만 실제 현장의 스캔 시간과 기존 점검 시간은 이번에 재지 못했습니다. 절감 폭은 PoC에서 측정할 첫 번째 항목입니다.

현장 적합성

바로 쓸 수 있다고 본 점

  • 입력이 IFC와 일반 점군(.ply)이고 결과도 uBuilder 겹쳐 보기로 바로 확인됩니다. 새 장비나 uBuilder 수정 없이 기존 흐름에 붙일 수 있습니다.
  • 보이지 않은 부재를 추측하지 않고 "판정 불가"로 남깁니다. 기성 산정처럼 분쟁이 생기는 곳에서는 틀린 숫자보다 "모른다"가 낫고, 이를 다음 스캔 위치 안내로 바꿀 수 있습니다.
  • 정합에 필요한 대략 위치(±1 m)는 현장 기준점이나 GNSS로 충분히 줄 수 있는 수준입니다.

실제 현장에서 걸릴 점

  • 노이즈가 이상적입니다. 실제 스캐너의 반사·투과 재질, 사람·장비·자재 적치에 의한 가림은 아직 넣지 않았습니다. 지금도 잡물 점의 1.7%가 부재에 잘못 붙는데, 실제 현장에서는 더 늘어날 것입니다.
  • 공정이 끝나 갈수록 판정 불가가 늘어 마지막 회차에서는 부재의 24%였습니다. 층당 스테이션 4~6개로는 부족하므로, 실제 현장에서는 스캔 계획(스테이션 수·위치)부터 같이 정해야 합니다.
  • 평면 1종에서만 학습·평가했습니다. 다른 건물에서도 0.99가 나온다고 말할 수 없습니다. 규칙 + 가시성(0.93~0.97)을 기본값으로 두고, 학습 분류기는 현장 데이터로 다시 확인해야 합니다.
  • 설계 변경으로 일부러 다르게 지은 부재와 시공 오차를 구분하지 못합니다. 기준 BIM이 최신이어야 한다는 전제가 있습니다.

정리하면, "점군과 BIM을 자동으로 비교해 공정률과 오차를 낸다"는 방향은 합성 데이터에서 충분히 통했습니다. 다음 질문은 실제 현장 노이즈에서도 가시성 판정이 버티는가이고, 골조 공사 중인 현장 1곳의 2~3회차 스캔으로 확인하고 싶습니다.