image-to-figure은(는) 무엇을 하나요?
목표
하나의 캐릭터 이미지(일러스트, 컨셉 시트 또는 피규어 사진)로부터 모든 면에서 캐릭터와 일치하는 텍스처가 적용된 3D 피규어를 생성합니다: Blender 마스터 파일, 깨끗한 GLB, 턴어라운드 뷰에 대한 리뷰 렌더, 그리고 턴테이블 비디오. 소유자는 지출을 승인하고 룩을 판단합니다. 당신은 단계를 진행하고 비용이 발생하기 전에 문제를 발견합니다.
범위 외: 리깅 및 애니메이션, 소유자가 사용 권한이 없는 캐릭터, Blender에서 캐릭터를 수동 모델링하는 작업.
완료 조건
views/view_front.png,view_left.png,view_back.png,view_right.png가 모두 동일한 크기로 존재하며,img2fig crop이 종료 코드 0으로 완료되어야 합니다.- 네 개의 뷰를 참조 이미지 및 서로와 비교하고, 모든 액세서리가 모든 뷰에서 신체의 올바른 측면에 있는지, 참조 이미지에 없는 것이 나타나지 않는지(뒷면, 주머니, 벨트, 헤어 장식에 특히 주의), 포즈와 지면 선이 모든 뷰에서 일치하는지 서면으로 보고해야 합니다. 차이점은
img2fig edit으로 수정하고 모델 단계 전에 시트를 다시 크롭해야 합니다. models/<provider>/model.glb가img2fig model --execute로 인해 존재해야 합니다.img2fig prep이 0으로 종료되고,orientation이ambiguous가 아니어야 하며(또는 전면 렌더가 카메라를 향하는 것을 확인),prep.dimensions_units[2]가 2.9의 0.01 이내여야 하고,prep.faces_out이--faces이하(삼각형 입력, 예: 제공자 GLB)여야 합니다.renders/compare.jpg(상단 입력 뷰, 하단 렌더) 및renders/face.png를 확인하고, 뷰별로 일치하는 것과 일치하지 않는 것을 보고해야 합니다.- 소유자가 비디오를 원한 경우
turntable/turntable.mp4가 존재해야 합니다(img2fig turntable, 종료 0). img2fig spend가 소유자가 승인한 총계 내의 금액을 표시해야 합니다.
지출 규칙
- 유료 API를 호출하는 명령(
lookdev,turnaround,edit,model)은--execute가 제공되지 않으면 계획과 견적만 출력합니다. 계획의 견적을 소유자에게 보여주고 승인을 받거나, 소유자가 설정한 예산을 받으십시오. 그런 다음 해당 예산을--budget으로 전달하거나IMG2FIG_BUDGET_USD를 설정하십시오(둘 다 없으면 상한선은 $5). 예산은 유료 호출 전에 작업 디렉터리의 원장(spend.json,img2fig spend로 요약)과 비교되며, 초과하면 호출이 거부됩니다(종료 3). 실패한 호출은 견적 금액으로 기록됩니다(일부는 제공자가 청구한 후에 실패하기 때문). img2fig estimate --stages lookdev,turnaround,edit,model은 전체 실행의 가격을 산정합니다. 일반적인 규모: 이미지 호출당 $0.30 미만, Tripo 모델당 $0.60, 4제공자 베이크오프의 경우 약 $4. 견적은 다소 높게 책정됩니다. 이미지 호출의cost_from_usage_usd는 토큰 기반 수치입니다.- 베이크오프(
--provider all)는 약 7번의 Tripo 실행 비용이 듭니다. 소유자가 요청하거나 Tripo가 이 캐릭터에 대해 명확히 실패한 경우에만 수행하십시오.
워크플로우
img2fig doctor # 키가 있는가? Blender, ffmpeg가 발견되었는가?
img2fig lookdev --ref character.png --description "..." # 계획 수립; 승인 후 --execute 추가
img2fig turnaround --ref character.png --description "..." # 최신 룩데브 이미지 사용
img2fig crop # views/view_{front,left,back,right}.png
img2fig edit --fix "Back view: remove the round tail under the bow; plain skirt there." # 필요한 경우에만
img2fig crop # 재크롭: 가장 최신 시트 또는 편집본 선택
img2fig model # Tripo, 계획 수립; 승인 후 --execute
img2fig prep # 방향 정렬, 정규화, 디시메이트, 그레이드, 렌더, compare.jpg
img2fig turntable # turntable/turntable.mp4
모든 명령은 --workdir DIR(기본값 $IMG2FIG_WORKDIR 또는 ./figure_work)을 공유합니다. 입력은 기본적으로 해당 디렉터리의 이전 단계 최신 파일로 설정됩니다. 모든 명령은 stdout에 하나의 JSON 객체를 출력합니다. ok, 경로, warning/warnings, next, 그리고 실패 시 error.type, error.message, error.detail(제공자 HTTP 상태 및 본문, Blender 또는 ffmpeg 종료 코드 및 stderr 마지막 부분, 로그 경로)을 읽으십시오.
종료 코드: 0 정상(드라이런 포함), 1 제공자 오류, 2 사용법 오류, 3 예산 초과, 4 키/바이너리/패키지 누락, 5 Blender 또는 ffmpeg 실패, 6 결과 확인 실패(시트가 예상 뷰로 분할되지 않음), 7 내부 버그.
--description 작성
피규어가 유지해야 할 것을 캐릭터 관점과 시청자 관점을 대괄호 안에 표기하여 나열하십시오: "그녀의 왼쪽에 있는 녹색 클로버 헤어 클립(전면 뷰에서 시청자의 오른쪽)". 참조 이미지가 실제로 보여주는 것을 설명하고, 생성하려는 의도를 설명하지 마십시오. 이미지 모델이 가끔 액세서리를 반대쪽으로 옮기기도 하며, 참조가 우선합니다.
중요한 Prep 옵션
--rot auto(기본값)은 모델을 0/90/180/270도에서 플랫 셰이딩으로 렌더링하고 각각을view_front.png와 비교합니다. 결과가 모호하면 알려진 제공자 방향으로 대체합니다(Tripo에 대해서만 알려짐. 그렇지 않으면 출력에서 전면 렌더를 확인하라고 알립니다).--rot DEG를 전달하여 재정의합니다.--grade matte(기본값),light(창백한 의상: 흰색이 깨끗하게 유지됨),dark(어두운 천을 더 어둡게 함),none.--keep-gloss 0.3은 원래 거칠기와 금속성을 소스에서 광택이 있던 부분에 유지합니다.--blush=X,Z(반복 가능)은 피규어 분수로 주어진 지점에 부드러운 볼 블러셔를 칠합니다. X,Z는renders/front.png에서 볼을 측정하고img2fig point --x PX --y PY를 실행하여 얻습니다. 음수 값은=와 함께 작성하십시오(--blush=-0.08,0.6). 그렇지 않으면 argparse가 이를 옵션으로 읽습니다.--faces(기본값 350000)은 면 수를 제한합니다. 법선 및 컬러 텍스처는 세부 사항을 유지합니다.
알려진 함정 (모두 관찰됨)
- 이미지 모델이 세부 사항을 발명하고, 3D 모델이 이를 구축합니다. 턴어라운드에서 한 번 뒷면에 폼폼 꼬리와 재킷 주머니에 캐릭터가 전혀 가지고 있지 않은 배지가 추가되었습니다. 3D 모델은 둘 다 충실히 재현했습니다. 이미지 단계에서 수정하십시오(문제당 하나의
--fix로edit, 그런 다음crop및model을 다시 실행). 메시를 패치하지 마십시오. 첫 번째 편집 후에 다른 발명이 남을 수 있으므로(배지가 컵케이크 모양 장식이 됨), 매 편집 후에 다시 비교하십시오. - 작은 특징이 흐려집니다. 3840x2160 시트의 각 뷰는 폭이 약 1000px에 불과하므로, 봉제 인형의 얼굴이나 손가락은 모델에서 부드럽게 나옵니다. 더 큰 시트는 사용할 수 없습니다. 얼굴 렌더를 판단하고 날카로운 작은 세부 사항을 약속하는 대신 소유자에게 알리십시오.
- 제공자들이 방향에 대해 의견이 일치하지 않습니다. Tripo의 GLB는 가져오기 후에 +X를 향합니다(-90도 필요). 자동 검사가 처리합니다. 그래도 전면 렌더를 확인하십시오.
- 올매트 그레이드는 크리스탈과 광택 부분을 죽입니다. 캐릭터가 크리스탈, 금속 또는 광택 부분이 있을 때
--keep-gloss또는--grade none을 사용하십시오. - 수동으로 제작된 절차적 캐릭터는 피규어 품질에 도달하지 못합니다. Blender에서 기본 요소로 모델링된 캐릭터는 유기적인 헤어를 제대로 구현하지 못했습니다. 이미지-3D 모델이 더 잘했습니다. 유기적 형태에 대해 절차적 모델링으로 되돌아가지 마십시오.
- AgX 대 Standard. 렌더는 기본적으로 AgX를 사용합니다. 하이라이트가 클리핑되지 않지만, 창백하고 흰색 재료는 회색빛이 돌고 채도가 떨어집니다. 이것이 그레이드가 채도를 높이는 이유입니다.
--view-transform standard는 참조 색상과 더 가깝게 일치하지만 밝은 영역을 클리핑합니다. 방향 확인 렌더는 Standard를 사용하여 색상이 공정하게 비교되도록 합니다. - Blender의 sRGB 대 선형. Blender 내에서 PNG의 픽셀 색상(
Image.pixels)을 읽으면 인코딩된 sRGB 값이 반환되고 선형 값이 아닙니다. Blender 스크립트를 확장하는 경우 선형 색상으로 사용하기 전에 디코딩하십시오.
리소스 및 경계
- 키는 환경 변수에서만 제공됩니다:
OPENAI_API_KEY(이미지 단계) 및FAL_KEY(모델 단계). 절대 출력하거나 파일에 기록하지 마십시오. - 외부 바이너리 Blender(5.2에서 테스트됨; 4.2 이상에서 작동 예상)(PATH에
blender또는IMG2FIG_BLENDER); 턴테이블용 ffmpeg. - 작업 디렉터리는 소유자 캐릭터의 생성된 이미지, 모델 및 렌더를 보관합니다. 소유자가 요청하지 않는 한 게시, 업로드 또는 커밋하지 마십시오. 소유자가 다른 사람으로부터 라이선스한 캐릭터는 비공개로 취급하십시오.
- 프롬프트는
src/image_to_figure/prompts.py에 있습니다.--prompt-file은 한 번의 호출에 대해 템플릿을 대체합니다.
3D 인쇄
img2fig print는 모델(기본값 figure/figure_clean.glb; --model로 모든 GLB, STL, OBJ 또는 PLY; --up auto로 GLB/glTF/OBJ는 Y-up, STL/PLY는 Z-up으로 읽음)을 인쇄 준비가 된 솔리드로 변환합니다. print 추가 기능이 필요합니다(uv pip install -e '.[print]'). pymeshlab도 설치하면(GPL, 종속성 아님) 보고서에 명시적 자기 교차 면 수가 추가됩니다.
img2fig print --height 100 --base pedestal # 솔리드, FDM 또는 레진
img2fig print --height 130 --base pedestal # 얇은 부분이 있는 FDM: 두껍게 하기보다 크게 인쇄
img2fig print --height 100 --base pedestal --hollow 2.0 # 레진: 2mm 벽, 배수 구멍
img2fig print --model raw_tripo.glb --rot -90 --height 80 # 원시 Tripo GLB는 +X를 향함
완료 조건: 명령이 0으로 종료되고 checks.printable이 true(watertight, manifold3d에 의한 유효한 2-manifold, 양수 체적)이고, checks.parts가 1(느슨한 부품을 의도적으로 유지하지 않은 경우)이고, checks.self_intersecting_faces가 측정 시 0이고, output.height_mm이 --height에 받침대를 더한 값과 1복셀 이내로 같고, print/figure_section.png(벽, 공동 및 배수 구멍) 및 figure_preview_*.png 렌더를 확인하고, warnings의 모든 항목, 특히 얇은 부분(checks.wall_thickness: thin_part_volume_fraction, 위치가 mm 단위인 largest_thin_parts; relief_volume_fraction은 미세 표면 디테일로, 보고되지만 절대 두껍게 하지 않음)과 그 처리 방법을 보고해야 함. --thicken이 사용된 경우, 두껍게 하지 않은 실행과 미리보기 렌더를 비교하여 얼굴, 머리카락 또는 액세서리에 새로운 돌출부가 없는지 확인하십시오. Blender가 없으면(미리보기 없음), thicken.added_mm3이 wall_thickness_before.thin_part_volume_mm3과 같은 차수인지 확인하고(돌출부는 추가된 체적으로 나타나며 이를 훨씬 초과함) 단면 이미지를 확인하십시오.
작동 방식: 표면이 복셀화되고(기본 복셀 = 높이 / 500), 간격이 내부를 둘러싸는 가장 작은 형태학적 폐쇄(최대 8복셀; voxelize 단계는 gap_closing_voxels를 보고)로 밀봉되고 내부가 채워져 열린 가장자리, 겹치는 쉘 및 자기 교차가 사라집니다. 그런 다음 부호 거리 필드가 베이스 절단, 받침대, 중공화 및 배수 구멍을 수행합니다. 마칭 큐브, Taubin 평활화 및 manifold3d가 최종 메시를 생성합니다. 약 1복셀보다 작은 세부 사항은 손실되고, 폐쇄 간격보다 가까운 부분은 융합됩니다.
옵션: --min-wall(기본값 1.0mm; 레진은 더 낮을 수 있고, FDM은 일반적으로 1.2 이상 필요)은 얇은 것으로 간주하는 기준을 설정합니다. --thicken(기본값 꺼짐)은 얇은 부분을 해당 두께로 성장시킵니다(아래 참조). --fragments merge|remove|keep와 --merge-gap(기본값 2mm)은 떠 있는 부분을 결정합니다. 병합 모드에서는 간격 내의 부분이 브리지로 연결되고 더 먼 부분은 유지 및 보고되며, 자동으로 삭제되지 않습니다. 1mm3 미만의 부스러기는 항상 제거됩니다. --base flat|pedestal|none. --hollow WALL과 --drain-hole은 각 공동에 대해 아래에서 하나의 구멍을 뚫습니다(20mm3 미만의 주머니는 솔리드로 유지). --color는 전체 색상 서비스를 위해 모델 텍스처에서 정점 컬러 PLY를 작성합니다. STL 및 3MF는 단색입니다.
얇은 부분. 보고서는 얇은 부분(두꺼운 본체에서 --min-wall 이상 돌출되고 두 표면이 가까운 시트, 핀, 가닥, 리본 및 코드)을 표면 릴리프(엠보싱 라인, 가닥 가장자리, 작은 점 및 두꺼운 본체의 볼록 가장자리)와 분리합니다. FDM의 경우 더 크게 인쇄하는 것을 선호하십시오. 모든 얇은 부분은 피규어와 함께 크기가 조정되며(100mm에서 0.9mm 리본은 130mm에서 1.17mm), 아무것도 모양이 변경되지 않으며, 슬라이서의 얇은 벽 처리(Arachne 벽, "얇은 벽 감지")가 나머지 대부분을 인쇄합니다. 체적의 극히 일부가 벽 미만인 것은 정상이며 괜찮습니다. 크기가 고정되어 있고 몇 개의 얇은 부분이 단단히 인쇄되어야 할 때(리본 고리, 아호게, 늘어뜨린 코드, 치마 밑단) --thicken을 사용하십시오. 얇은 부분만 각각 약 --min-wall까지 성장시키고 끝을 무디게 합니다. 릴리프는 절대 성장되지 않습니다. --thicken 후에도 얇은 부분이 남아 있으면 경고가 이를 알리고 더 크게 인쇄하거나 슬라이서 설정을 제안하며, 다른 실행을 제안하지 않습니다. 정의의 가장자리: 본체에서 --min-wall 이상 올라간 릴리프(키가 크고 좁은 볏, 깊은 엠보싱 가닥)는 얇은 부분으로 간주되어 무뎌집니다. 두꺼운 부분 사이의 간격을 가로지르는 짧고 얇은 웹(약 --min-wall의 두 배 이하)은 릴리프로 보고되며, 슬라이서가 이를 삭제하고 구멍을 남길 수 있으므로 슬라이서 미리보기에서 웹을 확인하십시오. 성장은 모든 방향으로 진행되므로 --thicken은 끝을 약간 늘리고 --min-wall보다 가까운 얇은 부분을 융합할 수 있습니다.
구축 중 관찰된 사항: 이진 거리 필드는 결과가 평활화되지 않으면(Taubin, --smooth, 기본 10회 반복, 체적 유지) 눈에 띄는 테라스를 남깁니다. 정점을 소스 표면에 다시 투영하는 대신 얇은 시트가 접혀서 폐기되었습니다. 평활화 및 메시 단순화는 모두 얇은 영역에서 자기 교차를 유발할 수 있습니다. 명령은 검사가 깨끗해질 때까지 더 적은 평활화와 더 엄격한 허용 오차를 시도하고 최종적으로 선택한 것을 보고합니다(smooth_and_simplify 단계). 중공화는 배수할 수 없는 주머니를 솔리드로 남겨두지 않으면 밀봉된 공극이 됩니다. 실제 이미지-3D 피규어에서 두 개의 대칭인 120mm3 조각이 본체에서 1.3mm 떨어진 별도 쉘로 모델링되었습니다. 초기 버전은 1mm 병합 간격 바로 너머에 있었기 때문에 이를 제거했습니다. 따라서 이제 먼 부분은 유지되고 보고됩니다. 실제 100mm 피규어에서 --min-wall 1.2로, 초기 --thicken은 얼굴, 머리카락, 리본 및 봉제 액세서리를 작은 둥근 돌기로 덮었습니다. 1.2mm 공이 도달할 수 없는 모든 것을 얇은 것으로 처리했습니다. 여기에는 가닥 가장자리, 엠보싱 속눈썹 및 점과 같은 얕은 릴리프가 포함되었고, 각각을 모든 면에서 0.6mm씩 성장시켰습니다(5.5% 더 많은 부피). 두껍게 하지 않고 동일한...
… (원문이 잘린 부분까지 번역)