Community이미지github.com

abchiaravalle/cad-studio-renders

CAD 파일(STEP/IGES)을 제품 사진, 투명 PNG, 3D 웹 임베드로 변환합니다.

cad-studio-renders란 무엇인가요?

이 스킬은 CAD 어셈블리 파일(STEP/IGES)을 제품 페이지에 필요한 포토리얼리스틱 스튜디오 샷, 투명 컷아웃, 턴테이블 비디오, 셀프 호스팅 3D 뷰어(휴대폰 AR 지원)로 변환합니다. 전체 과정은 단일 명령어로 실행되며, 모든 작업을 로컬에서 GPU 렌더링을 통해 수행합니다. AI 이미지 생성이 아닌 실제 지오메트리 기반으로 동작합니다. Claude Code, Cursor 등 SKILL.md를 지원하는 모든 AI 에이전트에서 사용할 수 있으며, Blender 4.2+, uv, ffmpeg를 사전 요구사항으로 합니다. 재질 매핑, 프리뷰 렌더링, 최종 렌더링, 웹 임베드 패키지 생성을 자동화하여 디자이너와 개발자의 수작업을 최소화합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/abchiaravalle/cad-studio-renders/tree/HEAD

Installed? Explore more 이미지 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

CAD 스튜디오 렌더스

CAD 어셈블리를 제품 페이지에 필요한 요소들(포토리얼 스튜디오 샷, 투명 컷아웃, 턴테이블 비디오, 휴대폰 AR을 지원하는 셀프 호스팅 3D 뷰어)로 변환합니다. 전체 실행은 단일 명령어로 이루어지며, 모든 작업은 로컬에서 수행됩니다. GPU가 렌더링을 담당하며, AI 이미지 생성은 사용되지 않으므로 픽셀은 실제 지오메트리입니다.

python3 "${CLAUDE_SKILL_DIR}/scripts/studio.py" model.step --name "제품명"

${CLAUDE_SKILL_DIR}은 이 스킬의 폴더입니다(Claude Code가 자동으로 채움). 다른 에이전트에서는 이 SKILL.md 파일이 있는 폴더를 사용하세요. 아래 모든 스크립트 경로는 해당 폴더를 기준으로 합니다.

사용 시점

  • "이 STEP 파일을 렌더링해줘", "CAD로 제품 사진/팩샷 만들어줘", "이 부품의 포토리얼 렌더"
  • "이 3D 모델을 웹사이트에 올려줘", "회전 가능하게 해줘", "제품 AR 뷰"
  • "제품의 투명 PNG", "카탈로그용 컷아웃", "턴테이블 비디오"
  • 3D 아티스트가 수작업으로 마무리할 수 있는 편집 가능한 Blender 씬이 필요할 때

이 스킬이 아닌 경우: 처음부터 부품 모델링(CAD 도구 사용), 텍스트 프롬프트로 이미지 생성, 또는 제품이 아닌 씬(인테리어, 캐릭터) 렌더링.

이 스킬 설치하기

  • Claude Code, 터미널: claude plugin install cad-studio-renders --marketplace abchiaravalle/cad-studio-renders
  • Claude Code, 데스크톱 앱: Claude에게 https://github.com/abchiaravalle/cad-studio-renders를 ~/.claude/skills/cad-studio-renders에 클론하도록 요청하세요(데스크톱 앱과 터미널 모두 해당 폴더를 읽음).
  • 다른 에이전트: 해당 에이전트가 SKILL.md 폴더를 로드하는 위치에 이 폴더를 넣으세요.

요구사항 (먼저 확인)

blender --version       # 4.2 이상. 없으면: https://www.blender.org/download/
uv --version            # CAD 파일을 읽음. 없으면: https://docs.astral.sh/uv/
ffmpeg -version         # --turntable 비디오에만 필요

Blender가 설치되었지만 PATH에 없으면 BLENDER=/path/to/blender를 설정하세요. GPU(Apple Silicon, NVIDIA, AMD)를 사용하면 렌더링 속도가 5-20배 빨라집니다. CPU도 사용 가능하지만 느립니다. 첫 번째 실행 시 CAD 라이브러리(~60MB)와 스튜디오 HDRI(24MB, CC0)가 ~/.cache/cad-studio-renders/에 다운로드됩니다.

워크플로우

  1. 렌더링 전에 재질을 먼저 매핑하세요. CAD 파일에는 실제 마감 처리가 거의 포함되지 않습니다.
    python3 "${CLAUDE_SKILL_DIR}/scripts/studio.py" model.step --map-only
    
    표를 읽으세요. 모든 부품에는 프리셋과 이유가 표시됩니다. (검토 필요)로 끝나는 줄은 추정치입니다. 잘못된 것은 규칙 파일(다음 섹션)로 수정하고 --map-only를 다시 실행하여 올바를 때까지 반복하세요.
  2. 프리뷰 (약 10초): --preview로 1000px 초안을 렌더링합니다. 최종본에 시간을 쓰기 전에 확인하세요. 확인 사항: 올바른 방향, 부품이 조립됨(떠 있는 것 없음), 프레이밍, 재질.
  3. 최종 렌더링: --preview를 제거하세요. 기본값은 배경 위 2400px 히어로 샷, 동일한 샷의 투명 PNG, 편집 가능한 .blend, 웹 임베드 패키지를 생성합니다.
  4. 출력물 확인: 전달하기 전에 전체 크기로(가장 복잡한 영역을 확대) 확인하세요.

재질 수정: 규칙 파일

{"rules": [
  {"match": "frame|base",    "preset": "powder_coat",  "color": "#2b2f33"},
  {"match": "^Cover",        "preset": "plastic_textured"},
  {"match": "motor",         "preset": "motor_housing"},
  {"match": "logo plate",    "preset": "anodised_color", "color": "#c8102e"},
  {"match": "spindle",       "preset": "steel_polished", "params": {"roughness": 0.05}},
  {"match": "safety guard",  "hide": true},
  {"match": "gantry",        "offset_mm": [0, 0, 80]}
]}

match는 부품 이름, 인스턴스 이름 및 어셈블리 경로에 대해 대소문자를 구분하지 않는 정규식으로 테스트됩니다. 첫 번째 일치하는 규칙이 적용됩니다. params는 프리셋 값(roughness, metallic, coat, anisotropic, bevel, bump 등)을 재정의합니다. offset_mm는 폭발도에서 해당 부품의 위치를 설정합니다. 프리셋은 assets/presets/materials.json에 있으며, 새 프리셋을 추가할 수 있습니다.

규칙이 없으면 자동 매퍼는 부품 이름 키워드(패스너, 베어링, 리니어 레일, 볼 스크류, 모터, 고무, 유리 등), 그다음 CAD 색상(채도가 높은 색상은 페인트, 동일한 색상을 공유하는 부품은 동일한 마감 처리), 그다음 크기 순서로 사용합니다.

중요한 옵션

플래그설명
--shots hero,front,side,top,iso,back,square,hero_low,detail카메라 각도 (assets/presets/shots.json)
--lighting studio_soft / high_key / dramatic / hdri_only라이팅 장비 (assets/presets/lighting.json)
--backdrop 0.42 또는 --backdrop "#1d1f22"배경 회색 또는 색상
--size 4000 --aspect 16:9출력 크기 및 비율
--samples 768샘플 수가 많을수록 광택 디테일이 선명해지고 렌더링 시간이 길어짐
--exposure 0.3, --light-scale 1.2, --env-scale 0.8밝기
--hdri photo_studio_01 또는 --hdri my.exr, --hdri-rotation 40반사 환경
--dof 0 / --dof 2배경 흐림 off / 약하게
--bevel-scale 0모서리 라운딩 비활성화 (라운딩은 CAD를 실제처럼 보이게 함)
`--detail-target "spindlechuck"함께--shots detail`
--no-transparent, --no-backdrop, --no-embed, --no-blend산출물 건너뛰기
--clay그레이 클레이 패스 (조명/형태 확인, 디자인 리뷰)
--passes멀티레이어 EXR: 깊이, 노멀, AO, 미스트, 크립토매트 (오브젝트 + 재질 ID)
--exploded 0.4폭발도 (부품이 중심에서 밀려남; offset_mm 규칙이 우선)
--turntable [--turntable-transparent]360° MP4 + WebM (알파 선택 가능) + PNG 프레임
--up y자동 감지가 잘못 추정한 경우 상향 축 강제 지정

산출물

<모델명>_studio/
  hero.png                    16비트, 스튜디오 배경 위
  hero_transparent.png        16비트 RGBA, 부드러운 접촉 그림자 유지 (--shadow none으로 제거)
  hero_clay.png, hero_exploded.png, hero_passes.exr       (요청 시)
  <슬러그>_turntable.mp4 / .webm, turntable_frames/          (요청 시)
  <슬러그>_scene.blend          조명, 카메라, 재질, 배경, 텍스처가 포함됨
  materials_map.json          모든 부품 -> 프리셋 + 이유 (--rules로 편집 후 재실행 가능)
  manifest.json               설정, 시간, 파일 목록(크기 및 해시 포함)
  embed/                      셀프 호스팅 3D 뷰어 패키지 (아래 참조)

.blend는 수작업 마무리를 위해 제작되었습니다. 컬렉션: Product (부품별로 하나의 빈 오브젝트, 부품을 개별적으로 이동/애니메이션 가능) 및 Studio (배경, 조명, 카메라). 모든 카메라는 타임라인 마커에 바인딩되어 있어 타임라인을 스크러빙하면 샷이 전환됩니다. 재질은 일반 Principled BSDF 노드 트리입니다. 모서리 라운딩은 Bevel 셰이더 노드이므로 지오메트리는 정확하게 유지됩니다.

임베드 패키지

embed/는 완전히 정적이며 외부 요청을 전혀 만들지 않습니다. Google <model-viewer> (Apache-2.0) 및 Draco 디코더를 포함합니다. 폴더를 어디에든 업로드하고 snippet.html을 붙여넣거나 embed.html을 iframe으로 사용하세요. 포함 내용:

  • assets/<slug>.glb: Draco 압축, 렌더와 일치하는 재질 포함
  • assets/<slug>.usdz: Quick Look을 통한 iPhone/iPad AR
  • 포스터 이미지
  • 스튜디오 HDRI (반사용)
  • index.html: 복사 버튼 및 렌더 다운로드가 포함된 데모 페이지

WordPress, Shopify, Webflow 등에 대한 호스팅 참고 사항은 embed/README.md에 있습니다.

문제점 (개발 중 각각 한 번씩 발생)

  • 모델이 옆으로 또는 거꾸로 서 있음. SolidWorks, Inventor, Creo 및 Fusion은 Y-up이 기본값입니다. 대부분의 다른 도구는 Z-up입니다. 변환기가 STEP 헤더를 읽어 추정하고 추정값을 출력합니다(up axis: Y (written by Solidworks)). 잘못된 경우 --up z (또는 y, -y, x...)를 전달하세요.
  • 부품이 분리됨 / "의도치 않은 폭발". 원인은 어셈블리 변환이 두 번 적용된 것입니다. 씬 빌더는 이제 그룹화된 부품이 지오메트리를 이동하지 않는지 확인하고, 이동할 경우 중단합니다. 씬 코드를 편집하는 경우 해당 확인을 유지하세요.
  • 평평하고 가짜처럼 보이는 금속. 일반적으로 재질이 아닌 조명 문제입니다. 환경이 없으면 금속이 반사할 것이 없습니다. 영역 조명과 함께 HDRI를 유지하세요(--env-scale, 0 아님).
  • 첫 렌더가 탁함. 조명 강도는 모델 크기에 따라 조정됩니다. lighting.json에 사용자 지정 조명을 추가하는 경우 강도는 (모델 반경(미터))²당입니다. 낮게 시작하고 --preview를 사용하세요.
  • 잘못된 재질 추정. 난해한 부품 이름(P-0042, ASSY_7_REV2, 음역된 비영어 이름)은 키워드 매칭을 무력화시키고 색상/크기로 대체됩니다. 이것이 (검토 필요) 플래그입니다. 해당 부품에 대한 규칙을 작성하세요.
  • OCP 8이 리더를 손상시킴 (TDF_LabelSequence 이동). CAD 리더는 cadquery-ocp-novtk<8을 고정합니다. 재테스트 없이 고정 해제하지 마세요.
  • 웹 모델이 렌더와 다르게 보임. glTF는 절차적 범프, 베벨 또는 러프니스 노이즈를 전달할 수 없으므로 웹 모델은 기본 값만 받습니다. 이는 예상된 현상입니다. 포스터 이미지는 실제 렌더입니다.
  • 대형 어셈블리 (>5M 삼각형): 프리뷰에는 --quality web을 사용하세요. 최종 렌더는 여전히 작동하지만 RAM이 필요합니다(Blender에서 삼각형 2M당 약 1GB).

전달 전 확인

  1. 히어로 PNG를 100%로 열고 가장 밀도가 높은 영역을 검사: 검은 면 없음, 곡선에 패싯 없음, 반짝임(흰색 점) 없음.
  2. 투명 PNG를 어두운 배경과 밝은 배경 위에 열기: 깨끗한 가장자리, 제품 아래에만 그림자.
  3. embed/를 로컬에서 서비스(python3 -m http.server -d embed 8000)하고, 모델이 로드되고 회전하며 콘솔 오류가 없는지 확인하세요. AR이 중요한 경우 휴대폰에서도 확인하세요.
  4. materials_map.json에 여전히 검토 필요 줄이 있으면 전달 시 언급하세요.

파일

  • scripts/studio.py: 진입점 (위 CLI)
  • scripts/cad_to_glb.py: STEP/IGES/BREP를 glTF로 변환 (어셈블리 이름 및 CAD 색상 포함, uv 스크립트)
  • scripts/automap.py: 부품에서 재질 결정 (순수 Python, 단독 실행 가능)
  • scripts/blender_studio.py: 씬, 재질, 조명, 카메라, 렌더, .blend, 웹 내보내기
  • scripts/package_embed.py: 셀프 호스팅 뷰어 패키지
  • assets/presets/*.json: 재질, 라이팅 장비, 카메라 샷
  • examples/make_demo_model.py: 데모 벤치 바이스 제작 (원본 지오메트리, CC0)

관련 스킬