벨린도르트히테크 대학이 BWFormer와 Point2Building을 비교: 건물 AI가 '닫힌 입체'를 만들게 하려면
요약
본 기사는 LiDAR 점군을 활용하여 3D 도시 모델을 재구성하는 두 가지 AI 모델(BWFormer와 Point2Building)을 비교 분석합니다. BWFormer는 정점과 변(edge) 예측에 강점을 보여 입체화 과정이 필요하며, Point2Building은 면(surface)까지 생성할 수 있습니다. 성공적인 건물 AI를 위해서는 단순히 선이나 면을 넘어 '닫힌 입체' 형태의 성립 여부를 보장하는 모델 설계가 중요함을 강조합니다.
핵심 포인트
- AI 출력물의 수준: 선(line), 면(surface), 닫힌 입체 중 어느 정도인지 확인해야 합니다.
- 모델 선택 기준: 건물의 부피를 다루는 후처리 과정에 적합한 출력을 제공하는 모델을 선정해야 합니다.
- BWFormer의 특징: 점군에서 모서리를 예측하여 정점과 변 정보를 얻고, 면은 별도의 처리가 필요합니다.
- Point2Building의 특징: 정점을 생성하고 이를 참조하는 번호열로 면(폴리곤)을 조립하는 방식으로 입체성을 확보합니다.
점군(Point Cloud)에서 3D 도시 모델을 만드는 분들께. AI가 지붕과 벽을 출력한 후, 누가 건물을 완성하고 있습니까?
2026년 9월 28일, 벨린도르트히테크 대학의 Lilli Kaufhold 씨와 Martin Kada 씨가 건물 재구성 AI에 대한 비교 연구를 공개했습니다. 대상은 선 골격(wireframe)을 예측하는 BWFormer와 면까지 생성하는 Point2Building입니다.
조사한 것은 출력이 기하학적으로 유효한 입체 형태인지 여부입니다. 건물의 부피를 다루는 처리로 연결하려면, 이곳은 모델 선정에 직결됩니다.
생성 모델이 담당하는 범위와, 입체의 성립을 보장하는 범위를 별도로 결정해야 합니다.
BWFormer는 정점(vertex)과 변(edge)을 만들기 때문에, 면의 복원과 입체화가 필요합니다. Point2Building은 면도 만들지만, 그것만으로는 틈새, 자기 교차, 면의 방향까지 해결되는 것은 아닙니다.
자신의 파이프라인에서 먼저 확인하고 싶은 점은 다음 세 가지입니다.
- AI의 출력은 선(line)・면(surface)・닫힌 입체 중 어느 정도인가.
- 후처리 과정에서 어떤 형태를 움직이고, 어떤 면을 삭제할 것인가.
- 하류로 전달하는 형식으로 무엇을 검증한 후에 채택할 것인가.
이 차이를 두 모델의 처리 순서에서 추적합니다.

선・면・닫힌 입체의 차이를 나타낸 AI 생성 일러스트. 실제 재구성 결과는 아닙니다.
항공기에서 얻은 LiDAR 점군은 위에서 본 지붕 정보를 많이 포함합니다. BWFormer는 이 성질을 이용합니다.
개발사 측의 방법 설명에 따르면, 점군을 높이 맵(height map)에 투영하여 먼저 2D 모서리를 검출합니다. 그 위치를 초기값으로 트랜스포머(Transformer)로 3D 정점을 예측하고, 마지막으로 정점 사이의 변을 판정합니다.
항공 LiDAR 점군
↓ 지면으로 투영
높이 맵
...
처음부터 3D 공간 전체에서 모서리를 찾는 것보다 탐색 범위를 좁힐 수 있는 설계입니다. 어떤 정점과 어떤 정점이 연결되는지도 출력물로 얻을 수 있습니다.
여기서 데이터 구조를 보세요.
vertices = 정점의 좌표
edges = 연결하는 정점의 조합
이 두 가지 정보만으로는, 어느 변의 고리가 하나의 지붕 면을 만드는지에 대한 정보가 없습니다. 화면에 지붕 윤곽을 그릴 수 있어도, 면적이나 부피 처리에 전달하려면 한 단계 더 필요합니다.
예를 들어, 교차하지 않는 4개의 변이 사각형처럼 보여도, 4개 정점이 동일 평면에 있다는 보장은 없습니다. 면으로 채택하는 단계에서는 연결과 좌표 둘 다를 다루게 됩니다.
선의 예측을 채택한다면, 면을 만드는 처리 또한 시스템의 일부입니다.
Point2Building은 다른 경로를 택합니다.
원 논문의 모델 구성에서는 점군을 Sparse 3D CNN으로 특징량에 변환하고, 트랜스포머로 정점 좌표를 순차적으로 생성합니다. 이어지는 모델은 그 정점을 참조하는 번호열을 생성하여 면을 조립합니다.
항공 LiDAR 점군 → 특징 추출
↓
정점 좌표를 순차적으로 생성
...
설명용으로 간략화하자면, 면은 다음과 같이 표현할 수 있습니다. 실제 토큰열을 옮긴 것은 아닙니다.
정점: 0, 1, 2, 3, ...
면A: [0, 1, 2]
면B: [0, 3, 1]
...
이 방식이라면, 와이어프레임에서 면을 다시 찾는 필요가 없습니다. 모델이 면의 조합까지 출력합니다.
그렇다면 원하는 번호를 자유롭게 생성하는 것일까요?
실제로는 생성 중에도 생성 후에도 규칙이 있습니다.
동 논문의 생성 절차에는, 정지 토큰(stop token)의 위치나 면 내부의 정점 중복 등을 제한하는 마스크가 있습니다. 게다가 바닥면이 점군의 지면 투영을 덮는지, 바닥면과 벽의 연결이 제대로 되어 있는지 등을 검사하고, 조건을 충족하지 못하면 재생성을 합니다.
즉, 비교해야 할 것은 '규칙이 있느냐'만은 아닙니다.
그 규칙이 입체 전체의 어떤 성질을 지키고 있는가입니다.
이 차이는 CityJSON 2.0.2 사양을 보면 정리할 수 있습니다. 면의 집합을 나타내는 MultiSurface와, 바깥쪽 껍질이나 안쪽 공함을 나타내는 껍질(shell)을 가진 Solid는 서로 다른 기하학적 형태입니다.
| 출력 | 표현하는 것 | 다음에 결정할 것 |
|---|---|---|
| 와이어프레임 | 정점과 변의 연결 | 어떤 고리를 면으로 할지 |
| ... | ||
| 데이터에 ` |
:한 변에 3개 이상의 면이 접하는 등, 면의 연결성이 비다양체(non-manifold)가 되어 있다. - 305
: 외피(shell)가 여러 개의 연결 성분으로 나뉘어 있다.
지붕 좌표를 조금 움직이는 처리로 평면성은 개선될 수 있습니다. 하지만 그것만으로는 떨어진 건물 부품들이 반드시 연결된다고 보장할 수는 없습니다.
이것이 수정 처리의 입력과 출력을 오류 종류별로 설계하는 이유입니다.
Berlin工科大学의 논문 3.2절은 BWFormer 뒤에 다음 공정을 배치하고 있습니다.
선 복구 → 면 추출 → 평면성 제약으로 최적화
→ 지면까지 밀어내 입체를 결합 → 삼각형을 원래 면에 통합
평면성 최적화에서는 정점의 높이, 면의 평면도, 각의 수평 이동을 동시에 조정합니다. 공유하는 정점이 소속된 모든 면의 평면 위에 놓이는 것을 필수 조건으로 합니다.
같은 독립 평가 지역인 Vaihingen의 110개 건물에서, 이 공정까지 포함한 BWFormer는 57.3%, 추가 후처리 없는 Point2Building은 0%의 입체 타당률을 보였습니다. val3dity의 기본 허용치(면으로부터의 거리 1cm, 법선 편차 20도)로 판정했으며, 탈락한 건물도 실패에 포함했습니다.
BWFormer 측은 벽면점을 제거하여 입력하고, Point2Building 측은 입력 포인트 클라우드에서 정규화하여 생성한 조건입니다. 학습 데이터도 다르기 때문에, 아키텍처만의 우열을 가리는 실험은 아닙니다. 본 기사에서는 모델 추론을 재실행하지 않았습니다.
또한 같은 연구가 조사한 Zurich의 정답 메쉬 2,691개 건물에서도 유효한 입체는 2.9%였습니다. 지붕 돌출부를 하나의 면으로 표현하는 관습 등이 외피 폐쇄에 영향을 주고 있습니다.
복구에도 대가가 따릅니다. 논문의 Figure 2에는 매달린 변을 잘라낸 결과, 중요한 지붕 면까지 손실된 사례가 있습니다. 형식을 갖추는 과정에서 남기고 싶었던 형태를 깎아낼 가능성이 있는 것입니다.
여기서 얻을 수 있는 설계상의 교훈은 명확합니다. 입체의 성립을 요구한다면, 학습 데이터, 생성 시의 제약, 후처리, 최종 검증 중 어디에서 이를 보장할지 결정해야 합니다.
지붕 선을 학습시킨 모델에 그대로 폐쇄된 건물을 기대할 수는 없습니다. 면을 학습시키는 경우에도, 교사의 표현을 먼저 확인해야 합니다.
자신의 구현으로 처음 시도해 본다면, 모델을 구동하기 전에 작은 메쉬를 부숴서 검사 처리의 반응을 보는 것이 도움이 됩니다.
아래는 면이 정점 ID의 루프(ring)로 주어지고, 같은 정점이 같은 ID를 공유한다는 전제를 바탕으로 한 설명용 Python 코드입니다. 사면체에서 면 1개를 빼내 각 변을 사용하는 면의 수를 셉니다. 이 코드는 실행 확인은 되었으나, 완전한 입체 검증기는 아닙니다.
from collections import Counter
def non_two_sided_edges(faces):
counts = Counter()
...
출력은 다음과 같습니다.
closed []
missing_face [((0, 2), 1), ((0, 3), 1), ((2, 3), 1)]
flipped_face []
면을 빼낸 경우, 한쪽에만 면이 있는 3개의 변이 발견됩니다. 반면, 면의 방향만 뒤집은 경우는 통과합니다. 변 사용 횟수가 변하지 않기 때문입니다.
이 예시라면, 테스트에 추가할 부분이 구체화됩니다. 면의 방향, 정점 근처의 연결성, 자기 교차, 평면성, 분리된 성분을 각각 검사해야 합니다. 좌표가 중복되어 있어도 ID가 다르면 이 간이 코드로 같은 정점으로 취급할 수 없습니다.
생성 후에 하나의 조건을 추가했다고 해서 입체 전체를 보장한다고 여겨서는 안 됩니다. 그에 대한 작은 고장 사례입니다.
CityJSON을 다룬다면, val3dity의 공식 CLI 설명에 따라 형태와 검증 결과를 분리하여 저장할 수 있습니다. 아래는 미실행 사용 예시입니다. 입력 좌표 단위가 미터일 경우, 0.01은 1cm에 해당합니다.
val3dity --planarity_d2p_tol 0.01 \
--report validation.json buildings.city.json
여기서 알아야 할 것은 검증의 순서입니다. val3dity는 면에서 외피, 입체로 단계적으로 조사합니다. 면이 부정확하면 그 상위 검증으로 진행하지 않을 수 있습니다.
평면성을 고쳤다면, 다시 전체를 검증해야 합니다.
첫 번째 리포트에 구멍이나 연결 오류가 없었다는 것이, 수정 후의 보장에는 사용될 수 없습니다.
이번 두 가지 방식을 도입 여부를 판단에 연결하려면, 다음과 같이 책임을 분리하는 것이 실용적입니다.
<table><thead><tr><th>채택하는 방식</th><th>구현 시 책임</th></tr></thead><tbody><tr><td>BWFormer로 면을 구성</td><td>면 추출 실패, 정점 이동, 변 또는 면 삭제를 건물 ID와 함께 기록합니다.</td></tr></tbody></table> 이는 본 기사에서의 운영 제안입니다. 복원 후만 남기게 되면, 형태가 개선된 것인지 아니면 중요한 지붕을 깎아 조건을 통과시킨 것인지를 추적하기 어려워집니다.마지막으로, 처음의 질문으로 돌아갑니다.
당신의 건물 AI는 선을 출력하고 있습니까? 면을 출력하고 있습니까? 그리고 그 다음 단계에서 입체를 성립시키고 있는 것은 어떤 처리입니까?
모델을 선택할 때는 출력이 끝나는 지점까지 설계해야 합니다. 건물을 닫는(closing) 처리까지 포함하는 재구성 파이프라인입니다.
Lilli Kaufhold, Martin Kada — Towards AI-Generated 3D City Models: Bridging Research and Practice (2026년 9월 28일)
비교 연구 전체 PDF (실험 조건: 3.3–3.4절, 입체 타당성: 4.4절)
BWFormer — 공식 구현 및 방법 설명 (CVPR 2025)
Point2Building: Reconstructing Buildings from Airborne LiDAR Point Clouds (2024년, 모델 구성과 생성 제약)
CityJSON Specifications 2.0.2 — Geometry Objects
val3dity — 에러 정의
val3dity — CLI 및 검증 절차
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기