Blueprint Maker은(는) 무엇을 하나요?
BluePrint Maker는 다음 소스 중 하나로부터 완성된 청사진 스타일 시트(PNG, 기본 1920x1080)를 생성합니다:
- 3D 모델 -> 실제 숨은선 직교 투영 뷰: 큰 3/4 뷰와 측면, 평면, 정면 뷰 및 측정된 치수선(3D 파이프라인), 또는
- 2D 이미지 -> 실루엣 외곽선, 경계 상자 치수 및 지시선이 포함된 라인 추출(2D 파이프라인).
두 파이프라인 모두 하나의 레이아웃 엔진(프레임, 패널, 제목 블록, 텍스트 맞춤)을 공유하므로 결과물이 동일하게 보입니다.
할 수 있는 것과 없는 것 (관련 시 사용자에게 이 내용을 알리세요)
- 파일이 없으면 청사진도 없습니다. 말로만 설명된 객체는 정확한 도면으로 변환될 수 없습니다. 3D 모델이나 이미지를 요청하세요. 기하학을 임의로 만들지 마십시오.
- 3D는 실제 직교 뷰를 제공하지만, 2D는 불가능합니다. 단일 사진은 하나의 시점만 있으므로, 2D 파이프라인은 하나의 라인 아트 뷰만 생성하며 정면/측면/평면 뷰를 생성하지 않습니다.
- 라인 품질은 메시/이미지에 따라 달라집니다. 수십만 개의 삼각형으로 이루어진 게임 추출 메시는 빽빽한 라인을 생성합니다. 이는 좋은 자동 베이스일 뿐, 손으로 만든 삽화 품질은 아닙니다.
- 사용자가 제공하지 않으면 축척(scale)을 알 수 없습니다.
scale_ref(실제 측정값)가 제공되지 않는 한, 치수는 모델 단위(u) 또는 픽셀(px)로 표시됩니다. 추측한 실제 세계 크기를 사실로 제시하지 마십시오. - 폰트: 번들 텍스트 렌더링은 DejaVu(라틴, 그리스, 키릴 문자)를 사용합니다. CJK/아랍어/히브리어 텍스트는 올바르게 렌더링되지 않습니다.
- 레이아웃은 16:9 비율로 설계되었습니다(1920x1080, 2560x1440, 1920x1200에서 테스트됨). 다른 종횡비는 패널 레이아웃을 늘리므로 출력물을 확인하십시오.
- 게임/영화에서 추출한 에셋은 타인의 IP입니다. 개인 배경화면으로는 괜찮지만, 재배포하지 말라고 언급하세요.
0단계 - 입력 수집 (누락된 것만 한 번에 질문)
- 파일(모델 또는 이미지).
- 객체의 이름과 설명 - 또는 초안 작성을 제안합니다. 설명은 렌더링에 실제로 보이는 것과 일치해야 합니다 (먼저 확인하세요). 바퀴 달린 차량에 대한 설명을 네 발 달린 생물에 사용하면 시트의 신뢰성을 떨어뜨립니다. 사용자의 텍스트가 기하학과 일치하지 않으면 그렇게 말하고 다시 작성하십시오.
- 출력 해상도와 배경화면인 경우 상단 안전 영역(데스크탑 바가 상단을 덮음). 기본
top_safe= 76(1080p에서 프레임이 76px 아래에서 시작, 랩탑에서 약 1cm 바 여유). 사용자가 센티미터로 제공하면 변환: px_per_cm = 화면_너비_px / 화면_너비_cm (24인치 1080p 모니터에서 약 36px/cm, 15.6인치 랩탑에서 약 56px/cm). 바 높이(px) + 약 12를 사용하십시오. - 스타일:
blueprint(기본, 파란색),graphite(어두운 배경에 주황색 선),paper(밝은, 인쇄 가능). - 텍스트 언어 (기본 영어; 사양 텍스트를 해당 언어로 작성).
사용자를 심문하지 마십시오: 이미 충분히 제공했다면 기본값으로 진행하고 가정을 명시하십시오.
1단계 - 설정
pip install trimesh numpy scipy networkx pillow opencv-python-headless matplotlib --break-system-packages -q
# 선택 사항, 700k 면 이상 메시 전용: pip install fast-simplification --break-system-packages
모든 스크립트는 이 파일 옆의 scripts/ 디렉토리에 있습니다. SKILL_DIR을 스킬 폴더로 바꾸십시오.
2A단계 - 3D 모델
검사 (항상 먼저 수행 - 이미지 하나, 명령어 하나)
python3 SKILL_DIR/scripts/blueprint3d.py inspect MODEL.glb --out /home/claude/insp
view로 inspect.png를 열고(연락처 시트 하나입니다) 출력된 텍스트를 읽으십시오:
- 상단 행 = 원시 축 투영: 어느 원시 축이 위쪽이고 객체가 어느 방향을 향하는지 파악하십시오.
- 하단 = 번호가 매겨진 앵커 후보(노란색)가 있는 3/4 뷰. 콘솔에는 각
cand N이 픽셀 및 표준 위치와 함께 나열됩니다. 희미한 그리드는 1500x860 참조 픽셀입니다(pick으로 사용 가능).
방향 플래그(표준 프레임: +y 위, 객체 정면이 -x 방향):
--up +Y (GLB/glTF의 기본값; 다른 형식은 +Z) 및 --front -X|+X|+Z|-Z|.... 출력된 힌트는 가장 긴 수평 축을 지정합니다. 정면은 측면 뷰의 왼쪽에 있어야 하므로, 머리/정면이 반대쪽에 있으면 부호를 바꾸십시오. 방향이 잘못된 경우 다른 값으로 inspect를 한 번 다시 실행하십시오. 최종 값을 사양에 "up" 및 "front"로 기록하십시오.
inspect는 또한 --az, --el(기본 58 / 20) 및 --k(후보 수, 기본 16)를 사용합니다. 사양에 view az/el을 동일하게 사용하십시오, 그렇지 않으면 후보 번호가 일치하지 않습니다.
사양 작성
spec.json을 생성하십시오(아래 스키마, assets/example_spec_3d.json에 작업 예제). 각 지시선에 대해 제목, 짧은 설명 및 하나의 앵커를 제공하십시오:
"cand": N-inspect.png에서 번호가 매겨진 후보 (가장 저렴함: 픽셀 추측 없음). 후보는 보이는 표면에 분포되어 있으므로 점이 실제로 지명하는 부품에 있는지 확인하십시오. 가까운 후보가 없으면pick을 사용하십시오."pick": [px, py]- 1500x860 참조 뷰(inspect.png의 그리드)의 픽셀"extreme": "+x" | "-x" | "+y" | "-y" | "+z" | "-z"- 표준 프레임의 극점(정면은-x, 기하학 뒤에 숨겨져 있을 수 있음)"point": [x, y, z]- 정확한 표준 좌표
"label"을 설정하지 마십시오 (꼭 필요한 경우 제외): 레이블 위치는 자동으로 선택됩니다(텍스트는 모델 실루엣과 다른 레이블에서 떨어지도록, 패널 측면의 깔끔한 열, 짧고 교차하지 않는 리더선). "label": [x, y] (1920x1080 참조 좌표, 메인 패널 x 40-1290, y 96-826)는 수동 위치를 강제하며 아래 감사에서 확인됩니다.
빌드
python3 SKILL_DIR/scripts/blueprint3d.py build MODEL.glb spec.json --out /mnt/user-data/outputs/blueprint.png
페인팅된 뷰는 디스크(~/.cache/blueprint-maker 또는 $BP_CACHE)에 캐시되며, 모델 + 뷰 + 스타일별로 키가 지정됩니다. 텍스트, 레이블, 지시선 또는 팔레트와 무관한 콘텐츠를 변경하면 다시 페인팅하는 대신 약 2초 안에 재구성됩니다. --no-cache 또는 "cache": false는 이를 비활성화합니다.
레이아웃: "layout": "multi" (기본: 큰 3/4 뷰 + 측면/평면/정면 + 치수) 또는 "single" (3/4 뷰만, 더 넓게).
사양 잠금 (사양과 모델 간 바인딩)
cand, pick 또는 extreme으로 작성된 앵커는 해당 앵커가 선택된 모델, 방향 및 뷰에 대해서만 의미가 있습니다. 첫 번째 빌드 시 사양 옆에 <spec>.lock.json이 생성됩니다: 각 앵커가 확인된 3D 점, 모델의 기하학적 지문, 앵커에 영향을 미치는 설정(up, front, view az/el, candidates, max_faces). 이후의 모든 빌드는 앵커를 다시 확인하고 비교합니다:
- 앵커가 이동함 (다른 모델, 방향 또는 뷰) -> 빌드 실패
error: spec is not bound to this model ...메시지와 함께 각 지시선과 변경 사항을 명시합니다. 사양 설정으로inspect를 다시 실행하고 앵커를 다시 선택한 다음--relock으로 빌드하십시오(또는 원래 모델/설정을 복원). - 모델이 다르지만 모든 앵커가 여전히 같은 위치에 있는 경우(예: 무손실 재내보내기) ->
WARNING: binding: ...; 확인 후--relock. - 의도적으로 앵커를 편집한 경우(동일한 모델/설정) -> 잠금 항목이 자동으로 업데이트됩니다.
--no-lock은 검사를 건너뜁니다(권장하지 않음). 잠금 파일을 사양과 함께 보관하십시오(커밋). 무시하여 바인딩 오류를 "수정"하지 마십시오. 그러면 레이블이 잘못된 부분을 가리키게 됩니다.
2B단계 - 2D 이미지
python3 SKILL_DIR/scripts/blueprint2d.py inspect IMAGE.png --out /home/claude/insp
출력된 마스크 범위(배경 제거는 평평한 배경 또는 투명 PNG에서 작동함; 그렇지 않으면 "none" 보고)를 읽은 다음 view로 inspect.png를 확인하십시오: 왼쪽 = 소스 픽셀(point_px용)로 레이블이 지정된 그리드가 있는 소스, 오른쪽 = 라인 추출기가 보는 것. 지시선 레이블도 여기서 자동으로 배치됩니다("label"은 생략).
spec.json을 작성하고(assets/example_spec_2d.json 참조) 빌드하십시오:
python3 SKILL_DIR/scripts/blueprint2d.py build IMAGE.png spec.json --out /mnt/user-data/outputs/blueprint.png
튜닝: "detail" 0.3(깔끔하고 굵게) ~ 0.8(복잡하게); "mode": "edges" (Canny, 사진/렌더링) 또는 "sketch" (XDoG, 부드러운/저대비 아트); "bg": "none"으로 전체 프레임 유지, 또는 "mask": "path.png"로 수동 실루엣; "crop": [x0,y0,x1,y1]로 대상을 분리; "fill" 0-1로 반투명 몸체 색조.
3단계 - 결과 확인 (건너뛰지 말고, 시간을 적게 들이세요)
빌더가 WARNING: 줄을 출력합니다. 먼저 읽으십시오 - 이는 자동 감사이므로 일반적으로 PNG를 view로 확인하는 것은 마지막에 한 번만 하면 됩니다:
error: spec is not bound to this model- 위의 "사양 잠금" 참조; 경고가 아닌 하드 오류입니다.layout: ...- 지시선 텍스트가 모델과 겹침, 두 레이블이 겹침, 리더선이 다른 레이블의 텍스트 / 다른 리더선 / 자체 텍스트와 교차, 텍스트가 패널 외부, 축 삼중창에 텍스트가 있음. 수동"label"을 제거하거나(배치 프로그램이 결정하도록), 앵커를 변경하거나, 텍스트를 줄여서 수정하십시오.description / specs / notes: shrunk to Npx또는does NOT fit- 읽을 수 없는 텍스트를 수락하지 말고 텍스트를 줄이거나 행을 삭제하십시오.
그런 다음 최종 PNG를 view로 한 번 확인하고 감사가 알 수 없는 것을 검증하십시오:
- 모델이 모든 뷰에서 의도된 방향으로 똑바로 서 있고 치수가 타당한지 확인합니다.
- 각 지시선 점이 실제로 텍스트가 지명하는 부품에 있는지 확인합니다.
- 상단 안전 영역이 비어 있는지 확인합니다(배경화면 사용).
문제가 있으면 사양(앵커, view.az/view.el, 텍스트 길이, feature_deg)을 편집하고 재구성하십시오. 캐시 덕분에 몇 초면 완료됩니다. 일반적인 총 과정: 1회 검사 + 1-2회 빌드, 2-3회 이미지 확인.
4단계 - 제공
/mnt/user-data/outputs/에 저장하고 present_files를 호출한 다음 간략히 응답하십시오. 응답에는 항상 다음을 명시하십시오:
- 당신이 작성한 텍스트(설명, 사양, 비고, 지시선 기능)와 파일에서 측정된 것을 구분하여 - 사용자는 자신이 중요하게 여기는 작성된 기술적 주장을 대체해야 합니다.
- 단위/축척 가정.
- 모든
WARNING또는 눈에 보이는 제한 사항(빽빽한 선, 숨겨진 앵커, 종횡비).
토큰 사용량 낮게 유지하기
- 하나의
inspect이미지, 하나의 최종view; 각 조정 후 다시 확인하는 대신 출력된 감사에 의존하십시오. cand앵커를 사용하고label은 생략하십시오. 픽셀 좌표를 수동으로 조정하지 마십시오.- 사양을 한 번에 완전히(앵커, 텍스트) 작성한 다음 빌드하십시오. 감사나 최종 확인에서 지적된 필드만 편집하십시오.
주석 텍스트 작성
- 렌더링에서 보이는 것만 설명하십시오. 기능적 주장은 그럴듯하고 일반적으로 유지하십시오. 객체가 프랜차이즈에서 온 것이라면 확실하지 않은 설정 정보를 언급하지 마십시오.
- 지시선 제목: 2-4단어. 지시선 텍스트: 짧은 문장 하나(약 70자). 비고: 3-5개의 짧은 항목. 설명: 약 600-700자. 사양 행: 값은 ~45자 미만.
- 표현을 기술적이고 일관되게 유지하십시오: 명칭, 사양 번호, 개정, 단위.
사양 참고
공통 키 (두 파이프라인 모두):
| 키 | 의미 | 기본값 |
|---|---|---|
title | 제목 블록의 큰 제목 | "UNTITLED" |
subtitle | 제목 아래 줄 | "" |
designation | 설명 상자 상단의 굵은 줄 | "" |
description | 설명 상자용 문단 | (상자 생략) |
specs | 사양 테이블용 [["Label","Value"], ...] | (생략) |
notes | 비고 상자용 문자열 리스트 (A, B, C...) | (생략) |
notes_title | 해당 상자의 제목 | "DESIGN REMARKS" / "NOTES" |
callouts | 지시선 객체 리스트 (아래 참조) | 없음 |
spec_no, class, rev, sheet, scale | 제목 블록 필드 (비어 있는 것은 건너뜀) | 시트 "01 / 01", 축척 "AS SHOWN" |
fields | 제목 블록 필드의 전체 재정의: [["KEY","value"], ...] | 자동 |
width, height | 출력 크기(px) | 1920, 1080 |
top_safe | 프레임이 시작되는 y(1080p 기준); 데스크탑 바 영역 확보 | 76 |
palette | blueprint, graphite, paper | blueprint |
scale_ref | 실제 세계 치수를 얻기 위한 {"axis": "length|height|width" (3D) or "width|height" (2D), "value": 3.2, "unit": "m"} | 모델 단위 / px |
3D 전용: up, front, layout (multi/single), view {"az": 58, "el": 20, "margin": 0.045}, candidates (cand에 사용된 k, 기본 16; inspect --k와 일치해야 함), feature_deg (에지 각도 임계값, 기본 38; 선을 줄이려면 50-60으로 높임), feature_deg_small (기본 44, 측면/평면/정면 뷰), max_faces (기본 700000), cache (기본 true).
2D 전용: mode, detail, bg, mask, crop, fill, fit_subject (대상에 맞게 자르기, 기본 true), view_title, view_sub.
지시선 객체: {"title": "...", "desc": "..."} 및 앵커 - 3D: cand / pick / extreme / point; 2D: point_px: [x, y] (소스 이미지 픽셀) - 선택적으로 "label": [x, y]로 수동 위치 강제.
문제 해결
- 모델이 옆으로 / 거꾸로 / 반대 방향:
--up/--front로inspect를 다시 실행하십시오.inspect.png의 상단 행을 확인하십시오. - 선이 회색 덩어리로만 보임:
feature_deg를 높이십시오(50-65). 매우 조밀한 메시의 경우max_faces를 더 낮게 설정하십시오(fast-simplification필요). - 부품 누락 또는 구멍이 뚫려 보임: 메시가 수밀(watertight)이 아니거나 면이 뒤집혀 있습니다. 페인터 알고리즘 렌더러는 이를 어느 정도 허용하지만, 게임 에셋의 내부 부품이 비쳐 보일 수 있습니다.
view.margin을 낮추거나 다른az를 시도하십시오. - 매우 느림: 약 700k 면 이상의 메시는
fast-simplification이 설치된 경우 자동으로 간소화됩니다. 그렇지 않으면 빌드에 몇 분이 걸릴 수 있습니다. - 2D 마스크가 잘못되었거나 조각남: 대상 색상이 배경과 너무 가깝습니다.
"bg": "none",crop을 사용하거나maskPNG(흰색 = 대상)를 제공하십시오. - 텍스트 경고: 텍스트를 줄이십시오. 글꼴 크기를 수동으로 낮추지 마십시오.
- 후보 번호가 그림과 일치하지 않음 /
spec is not bound to this model: 모델 파일,up/front, 사양viewaz/el 또는candidates가 사양이 작성된 것과 다릅니다. 사양 설정으로inspect를 다시 실행하고 앵커를 다시 선택한 다음--relock으로 빌드하십시오. - 자동 레이블 배치가 계속 실패함 ("충돌 없는 위치 없음"): 패널에 비해 지시선이 너무 많거나 깁니다. 설명을 줄이거나, 지시선을 삭제하거나, 더 넓은 패널을 위해
"layout": "single"을 사용하십시오. - 스크립트 편집 후 출력이 예전 것처럼 보임: 캐시 키는 렌더러 코드를 포함하지만, 확실하지 않으면
--no-cache로 한 번 실행하십시오.
파일
scripts/binding.py- 사양 잠금 파일(lockfile) 처리 (spec.lock.json).assets/example_spec_3d.json,assets/example_spec_2d.json- 각 파이프라인에 대한 완전한 사양 예제.scripts/blueprint3d.py,scripts/blueprint2d.py- 메인 진입점.
이 파일의 나머지 부분(3D 렌더링 스크립트 세부 정보 등)은 이 SKILL.md 내의 추가 지침에 포함되어 있습니다.