Gauge 모델링
bmesh/데이터 API로 빌드하고 (UI 컨텍스트 불필요), 평가된 메시를 게이트하여 모디파이어와 지오메트리 노드가 적용된 상태를 검사합니다.
빌드
scripts/kit.py (옆에 있는 스크립트에서 임포트):
| 함수 | 생성 결과물 |
|---|---|
rounded_box(name, size, bevel, segments, loc, rot, collection) | 실제 베벨이 적용된 박스, 각도 기반 스무딩 |
cylinder(name, radius, depth, segments, bevel, ...) | 베벨 처리된 캡이 있는 실린더 |
bolt_head(name, radius, height, sides, bevel, ...) | 육각 (또는 원형) 볼트 헤드 |
cut_holes(target, [(u, v, r), ...]) | 가장 얇은 축을 따라 원형 구멍을 뚫음 (불리언 후 베이크) |
bake_modifiers(ob) | bpy.ops 없이 전체 모디파이어 스택 적용 |
assign(ob, material) | 단일 머티리얼 슬롯 할당 |
빌더는 동일한 이름의 오브젝트를 대체하므로 스크립트를 재실행할 수 있습니다. scripts/build_prop.py는 JSON 부품 목록 (또는 데모 크레이트)에서 전체 프로프를 자체 컬렉션으로 빌드하고 게이트합니다:
run_blender_script path=skills/gauge-modeling/scripts/build_prop.py args={"name": "crate", "spec": "parts.json"}
게이트
scripts/mesh_gate.py -> mesh-health 게이트.
| 검사 항목 | 실패 조건 | 일반적인 수정 방법 |
|---|---|---|
loose_verts, zero_area_faces, `duplicate_verts`` | 하나라도 있으면 | fix_mesh.py |
non_manifold_edges | 3개 이상의 면이 공유하는 모서리 | 해당 영역 재구성 |
inverted_volume | 닫힌 메시에서 음수 부피 | fix_mesh.py (normals) |
ngons | max_ngons 초과 (옵트인) | fix_mesh.py (triangulate_ngons) 또는 재쿼드 |
triangles | max_tris 초과 (옵트인) | 디시메이트, 베벨 세그먼트 줄이기 |
closed_meshes | require_closed인데 구멍 존재 | 채우기 |
has_uv, texel_density_cv | require_uv / 지정된 제한 위반 | 언랩, 아일랜드 스케일 균일화 |
fix_mesh.py는 apply=true가 될 때까지 드라이 런(dry run)입니다. 선택 영역 외부에서 공유되는 메시 데이터는 절대 건드리지 않습니다.
규칙
- 실제 크기(미터) 우선, 그 다음 베벨: 베벨은 가장 작은 치수의 1-4%입니다. 베벨이 없는 하드 엣지는 빛을 받지 못합니다.
- 베벨 후 스무딩: 면별 플래그 대신 각도(35도) 기반 스무딩.
- 불리언은 절단면에 n-gon을 남깁니다: 스틸 이미지에는 문제없지만, 엔진으로 내보내기 전에 삼각화하세요.
- 파트는 끝까지 별도의 명명된 오브젝트로 유지하고, 내보내기 직전에만 결합하세요.
- 변경 후에는 항상 게이트를 실행하고, 클레이 쉐이딩에서
angles의look으로 형태를 평가하세요.