구멍 지름만 바꿨는데 판이 달라졌다: Text-to-CAD 수정 검증
치수 변경의 기대 부피를 계산하고 변경 대상이 아닌 외곽을 함께 검사한다. 화면 유사도와 파라미터 재생성·STEP 재열기가 다른 검증인 이유를 설명한다.

Text-to-CAD 결과물은 외형만 봐서는 안 된다. 형상이 유효한지, 치수를 바꿔 다시 생성할 수 있는지, 독립된 도구에서 다시 열리는지까지 확인해야 한다. 이 글에서는 공개된 연구와 실무 운영을 위한 검증 제안을 구분해 평가 항목을 정리한다.
겉보기 실루엣이 같더라도 스케치 구속 조건이나 형상 트리가 다르면 이후 수정 단계에서 다른 결과가 나온다. 따라서 생성, 수정, 내보내기 단계를 각각 나누어 검사해야 한다.
| 검증 대상 | 확인할 내용 |
|---|---|
| 파싱·형상 | 명령 유효성·솔리드·치수 |
| 설계 의도 | 구속 조건·파라미터 재생성 |
| 수정 범위 | 요청하지 않은 형상의 보존 |
| 내보내기 | 독립 도구에서 STEP 다시 열기 |
평가의 범위와 한계
파싱, 형상, 구조화 출력, 수정, 내보내기 검사는 각기 다른 영역을 평가한다. 통과율을 보고할 때는 사용한 모델, 문제 집합, 반복 횟수, 허용 오차를 함께 공개해야 한다. 또한 형상 검증을 통과했다고 해서 GD&T/PMI, 공차 누적, 소재, 가공성, 구조·유체·열 해석이나 인증 규격까지 검증된 것은 아니다.
렌더 이미지 평가의 한계
서로 다른 두 CAD 모델이 같은 실루엣을 가질 수도 있다. 하나는 원과 돌출로 만든 깔끔한 파라메트릭 모델이고, 다른 하나는 수백 개의 면을 억지로 이어 붙인 결과물일 수 있다. 최종 렌더링된 PNG 이미지만 비교하면 두 모델의 차이는 드러나지 않는다.
Text2CAD (https://arxiv.org/abs/2409.17106 (새 창))는 시각적 품질뿐만 아니라 파라미터 정밀도와 기하학적 정확도를 함께 평가했다. 최근 공개된 Text2CAD-Bench (https://arxiv.org/abs/2605.18430 (새 창))는 기본 형상부터 복잡한 토폴로지와 자유 곡면까지 난이도를 세분화하고, 비전문가의 설명 방식과 전문가의 절차적 설명 방식을 함께 다룬다. 이처럼 Text-to-CAD 평가는 이미지 유사도 비교만으로 끝낼 수 없다.
다섯 단계 평가 항목
명령을 파싱하고 실행할 수 있는가
첫 관문에서는 생성된 CAD 명령이나 스크립트가 문법적으로 유효한지 확인한다.
- 명령 시퀀스를 끝까지 파싱할 수 있는가 - 참조하는 스케치와 피처가 실제로 존재하는가 - 단위와 좌표계가 일관적인가 - 실행 중 예외 없이 모델을 생성할 수 있는가
이 단계에서 실패한 결과물은 렌더링 평가로 넘기지 않는다. 평가 파이프라인은 실패 원인과 문제가 발생한 명령 위치를 자동으로 기록해야 한다.
형상이 유효한 솔리드인가
렌더러가 화면에 무언가를 그렸다고 해서 모두 유효한 CAD 모델은 아니다. 열린 셸, 자기 교차 면, 0에 가까운 두께, 뒤집힌 법선처럼 실제 제조나 후속 편집에서 문제를 일으키는 형상이 숨어 있을 수 있다.
- B-Rep 또는 STEP 파서 통과 여부 - 유효한 솔리드 개수 - 자기 교차 및 비정상 면 존재 여부 - 부피와 표면적이 유한한 값인지 여부 - 입력에서 요구한 구멍, 대칭, 평행, 동심 조건 만족 여부
기하학적 제약 조건은 자연어 요구사항을 실행 가능한 assertion으로 변환하면 검증하기 쉬워진다. 예를 들어 “지름 10 mm의 관통 구멍을 중앙에 만든다”라는 문장은 구멍 지름, 중심축 거리, 관통 여부를 확인하는 세 가지 테스트로 나눌 수 있다.
치수와 구속 조건을 바꿔 재생성할 수 있는가
CAD의 핵심 장점은 파라미터를 수정해 설계를 재사용할 수 있다는 점이다. 최종 메시가 목표 형상과 비슷하더라도 치수가 하드코딩되어 있거나 피처 간 관계가 끊어져 있다면 좋은 결과물로 보기 어렵다.
이를 확인하기 위해 다음 질문을 던져 본다.
- 입력에 제시된 치수가 명시적 파라미터로 남아 있는가 - 대칭이나 동심 같은 관계가 구속 조건으로 표현됐는가 - 피처 순서가 편집 의도를 잘 반영하는가 - 핵심 파라미터를 변경한 뒤에도 모델이 정상적으로 재생성되는가
이 항목을 평가할 때는 단일 정답 시퀀스와 문자열을 단순 비교하지 않는 편이 좋다. 동일한 형상을 만드는 올바른 설계 순서는 여러 가지일 수 있기 때문이다. 대신 결과물의 구조적 속성과 변경 가능성을 검사하는 편이 현실적이다.
요청하지 않은 형상은 유지되는가
Text-to-CAD를 실무에 도입하면 신규 생성보다 수정 요청이 더 자주 발생한다. “구멍 지름만 10 mm에서 12 mm로 바꿔 줘”라고 요청했는데 외곽 치수나 다른 피처까지 함께 바뀐다면 수정에 성공했다고 보기 어렵다.
수정 전후를 비교할 때는 다음 세 가지 값을 기록할 수 있다.
- 요청한 파라미터의 변화량 - 변경 대상이 아닌 치수와 피처의 변화량 - 형상 트리에서 추가·삭제·재작성된 노드 수
Edit Locality는 표준화된 단일 지표는 아니지만, 수정 범위를 평가하는 운영 지표로 활용한다. 변경 대상은 충분히 바뀌고 나머지 영역은 변화가 적을수록 좋다. CADGenBench (https://github.com/huggingface/cadgenbench (새 창)) 역시 생성과 편집을 별도 과제로 구분해 STEP/B-Rep 결과를 평가한다.
독립 도구에서 내보낸 파일을 다시 열 수 있는가
생성 도구 외부 환경에서도 결과물을 확인한다.
- STEP 또는 지정된 포맷으로 내보낼 수 있는가 - 독립된 CAD 커널에서 다시 열리는가 - 표준 시점으로 렌더링할 수 있는가 - 내보내기 전후에 부피, 경계 상자, 주요 치수가 유지되는가
이 단계는 특정 CAD 라이브러리의 내부 상태에만 맞춘 결과물을 걸러 낸다. 렌더 이미지는 이 단계에서도 유용하지만, 앞서 설명한 구조적 검사를 모두 통과한 뒤 보조 증거로 활용해야 한다.
CADTests로 요구사항을 실행 가능한 검사에 연결하기
CADTestBench (https://arxiv.org/abs/2605.07807 (새 창))는 생성된 모델이 자연어로 기술된 기하·토폴로지 요구사항을 만족하는지 실행 가능한 소프트웨어 테스트로 평가한다. 이 방식의 장점은 실패 원인을 설명할 수 있다는 데 있다. 단순히 전체 점수만 낮게 나오는 대신, “구멍 위치는 맞지만 관통하지 않았다”처럼 구체적인 실패 원인을 파악할 수 있다.
이때 CAD 생성 모델과 동일한 모델로 테스트를 만들면 잘못된 가정을 공유할 위험이 있다. 따라서 평가용 요구사항은 사람이 직접 검토하거나, 최소한 별도의 생성기와 규칙 기반 검사로 분리해야 한다.
이해를 돕기 위해 40×30×8 mm 크기의 직육면체 판 중앙에 지름 10 mm의 관통 구멍이 하나만 있는 경우를 가정해 보자. 판의 원래 부피는 9,600 mm³이고 구멍의 부피는 π×5²×8=200π mm³이므로, 구멍을 뚫고 남은 부피는 9,600−200π mm³다. 여기서 구멍 지름만 12 mm로 바꾸면 남은 부피는 9,600−288π mm³가 되어, 수정 전후 부피 차이는 88π mm³가 된다. 이는 실제 CAD 커널을 실행한 결과가 아니라 이상적인 형상을 가정한 기대값 계산이다.
수정 후 구멍 지름과 부피 차이가 기대값과 일치하더라도, 외곽 치수가 바뀌었을 가능성은 별도로 확인한다. 다른 위치에 같은 크기의 구멍을 뚫어도 전체 부피는 같으므로 중심축 위치와 관통 여부도 함께 검사해야 한다. 서로 다른 오류가 우연히 같은 집계값을 만들어 낼 수 있기 때문에, 부피 비교 하나만으로 요구사항 충족 여부를 판단할 수는 없다.
허용 오차는 비교를 시작하기 전에 미리 정한다. mm와 inch 단위 변환, 커널의 수치 정밀도, 내보내기 형식에 따라 계산 값이 조금씩 달라질 수 있으므로, 결과를 먼저 본 뒤에 임계값을 임의로 넓히지 않는다. 수정 전후의 주요 치수와 피처 관계를 확인하고 독립된 도구에서 STEP 파일을 다시 열어 대조해 보면, 실패 원인이 생성 단계에 있는지 내보내기 단계에 있는지 구분할 수 있다.

입력: 40 × 30 × 8 mm 판의 중앙에 지름 10 mm 관통 구멍을 만든다.
assert solid_count == 1
assert bbox == (40, 30, 8) ± tolerance
assert hole_count == 1
assert hole_diameter == 10 ± tolerance
assert hole_axis passes_through plate
assert hole_center == plate_center ± tolerance
생성·수정·내보내기를 나눠 비교할 실험안
모델과 프롬프트를 비교할 때는 다음 지표를 함께 기록한다.
- Parse Success Rate: 파싱과 실행에 성공한 비율 - Solid Validity Rate: 유효한 솔리드로 판정된 비율 - Constraint Pass Rate: 요구사항 테스트를 통과한 비율 - Parametric Regeneration Rate: 파라미터 변경 후 재생성에 성공한 비율 - Edit Locality: 요청하지 않은 영역의 변화량 - Export Success Rate: 독립된 도구에서 STEP 파일을 다시 연 비율 - Repair Count: 유효한 결과를 얻기까지 필요한 수정 횟수 - Latency and Cost: 생성, 실행, 검증에 소요된 시간과 모델 비용
평가 과정에서는 실패한 결과도 함께 보존한다. 명령 시퀀스, 커널 오류, 실패한 assertion, 렌더 이미지를 한 묶음으로 남겨 두면 생성 모델 자체의 문제인지, 아니면 변환기나 CAD 커널의 문제인지 구분할 수 있다.
| 축 | 구분 예시 |
|---|---|
| 형상 난이도 | 기본 돌출 / 다중 피처 / 복잡한 토폴로지 |
| 입력 방식 | 비전문가의 형상 설명 / 전문가의 절차 설명 |
| 작업 종류 | 신규 생성 / 치수 수정 / 피처 추가·삭제 |
| 요구 정밀도 | 정성적 모양 / 명시적 치수와 공차 |
자주 놓치는 실패 케이스
- 화면상으로는 닫힌 것처럼 보이지만 실제로는 열린 셸이다. - 치수 수치는 맞지만 단위가 mm가 아닌 inch로 해석됐다. - 형상은 맞지만 스케치가 과소 또는 과다 구속됐다. - 사소한 치수 변경 후 피처 참조가 끊어진다. - Boolean 연산의 허용 오차에 따라 실행 환경별로 결과가 달라진다. - STEP 내보내기 과정에서 이름과 파라미터 관계가 사라진다. - 수정 요청이 모델 전체 재생성으로 처리되어 기존의 설계 의도가 사라진다.
실패 위치가 남는 평가 구성
평가 결과에는 렌더 이미지뿐만 아니라 파싱, 형상, 파라미터 재생성, 수정 범위, 내보내기 검사 결과를 함께 남긴다. 외형이 같은 결과물이라도 어느 단계에서 실패하는지 확인할 수 있어야 후속 편집이 가능한지 판단할 수 있다.
후속 실험에서는 동일한 프롬프트에 대해 단일 생성, 오류 기반 자동 수정, CADTests 기반 수정 방식을 비교할 수 있다. 성능 개선 여부는 유효한 설계 비율과 추가 검증에 드는 비용을 함께 측정해 판단한다.
참고 자료
Text2CAD: Generating Sequential CAD Models from Beginner-to-Expert Level Text Prompts (https://arxiv.org/abs/2409.17106 (새 창))
Text2CAD-Bench: A Benchmark for LLM-based Text-to-Parametric CAD Generation (https://arxiv.org/abs/2605.18430 (새 창))
Text-to-CAD Evaluation with CADTests (https://arxiv.org/abs/2605.07807 (새 창))
CADGenBench: A Benchmark for AI-driven CAD Generation and Editing (https://github.com/huggingface/cadgenbench (새 창))
