sand3D: 코드로 읽고 편집할 수 있는 3D 에셋
sand3D 는 컴팩트한 Python 어휘를 사용해 언어 모델이 Blender 의 bpy 를 활용하여 파라메트릭 모델링으로 편집 가능한 3D 에셋을 생성할 수 있도록 지원합니다.

주요 내용 및 결과
sand3D는 언어 모델이 Python에서 3D 객체를 만들 수 있도록 간결한 어휘를 제공합니다. Sandflow의 Thibault Neveu와 Andréa Loy가 개발한 이 도구는 Blender의 bpy를 통해 프로그램을 이름이 지정된 부품, 재료 및 관절형 조립체로 변환합니다. 치수를 변경하고 프로그램을 다시 실행하면 에셋이 재구축됩니다. 공개 릴리스는 모델링 라이브러리와 데이터셋을 결합한 것이며, 독립적으로 학습된 텍스트-투-3D 모델을 제공하지는 않습니다. 공식 저장소.
5개의 데이터셋 카드에는 Objaverse 객체 66,887개, CAD 객체 24,495개, Articraft 객체 9,209개, SimReady 객체 2,334개, AutoMate 레코드 3,169개가 나열되어 있습니다. 총 106,094개이며, 이 중 관절형 객체는 10,456개입니다. AutoMate의 수에는 개별 부품 2,297개와 조립체 872개가 포함됩니다. 각 레코드는 실행 가능한 코드와 렌더링 결과 및 내보낸 OpenUSD 에셋을 연결합니다. 이는 새로 설계된 메커니즘 100,000개가 아니라 재구성된 원본 에셋 모음입니다. 공식 데이터셋.
저장소의 토큰 비교는 o200k_base를 사용하며 주석과 독스트링을 제외합니다. 기준선/sand3D 비율의 중앙값은 30개 CAD 부품에 대한 LLM 작성 Blender Python에서 4.0배, 17개 CadQuery 프로그램에서 2.3배, 13개 FeatureScript 프로그램에서 6.0배, 12개 Articraft 프로그램에서 2.0배입니다. 이는 엄선된 sand3D 프로그램과 비교한, 출처가 서로 다른 소규모 비교입니다. Blender 기준선은 30개 중 9개만 올바른 부품을 생성하며, Articraft는 동역학도 나타냅니다. 따라서 이 결과는 간결성에 대한 주장을 뒷받침할 뿐, 범용적인 생성 품질 향상을 의미하지는 않습니다. 평가 세부 정보.
작동 방식
작성 과정은 다음과 같습니다. API를 LLM에 제공하거나 Python을 직접 작성하고, 조립체와 그 매개변수를 설명하며, 개별 부품을 만들고 배치하고, 조인트와 재료를 선언한 다음, bpy에서 프로그램을 실행하고, 검사·수정·내보내기를 수행합니다. 약 3,600개 토큰으로 구성된 API는 프롬프트에 들어갑니다. 권장 프로그램 구성은 먼저 조립 계획을 명시한 다음 각 부품을 개별적으로 구현하여 치수와 배치 관계를 쉽게 파악할 수 있도록 합니다. 편집 가능한 표현은 실행 가능한 기하 코드와 장면 계층 구조이며, 이 라이브러리는 잠재 인코딩이나 확산 디노이징을 구현하지 않습니다. 작성 지침; API.
기하 어휘는 2D 프로파일에서 솔리드로 이어집니다. rect와 circle은 단면을 정의하고, extrude, revolve, sweep 및 loft는 부피를 만들며, cut, pocket, shell 및 fillet은 이를 편집합니다. Frame 객체는 위치와 방향을 설명하므로, 구성 요소를 긴 세계 좌표 목록 대신 이름이 지정된 면이나 로컬 앵커에 배치할 수 있습니다. group은 하나의 부모 아래에서 별도의 메시와 재료를 유지하고, join은 융합을 수행하며, assembly는 그룹화된 루트에 이름이 지정된 앵커를 추가합니다. 이러한 구분은 어떤 조각이 함께 속하고 어떤 조각이 별도로 편집 가능한 상태로 유지되는지를 보존합니다. 조립체 구현.
세탁기 예제는 메커니즘을 구체적으로 보여 줍니다. 캐비닛은 드럼, 링·유리·손잡이가 포함된 도어, 서랍 및 다이얼을 지지합니다. 이 부품들을 정지 상태에 배치한 후 joint는 부모, 피벗, 축, 유형 및 허용 범위를 기록합니다. 도어는 0–143° 범위로 회전하고, 서랍은 0–200 mm 범위로 이동하며, 드럼과 다이얼은 연속적으로 회전합니다. pose는 요청된 값을 검증하고 순방향 운동학을 통해 변환을 전파하며, 기하를 재생성하지는 않습니다. seat은 삽입된 부품이 정지 상태에서 차지하는 부피를 제거하며, 전체 동작 범위를 계산하지는 않습니다. 예제; Joint 구현.
데이터셋 제작에는 에이전트형 재구성 루프가 추가됩니다. 코드를 작성하고, 실행하고, 결과 표면을 기존 원본 에셋과 비교한 다음, 수정합니다. 저자들은 아직 해당 파이프라인의 전체 방법을 공개하지 않았습니다. 데이터셋 F-score는 바운딩 박스 대각선의 1% 허용 오차를 사용합니다. 허용 기준은 Objaverse와 정적 SimReady에서 0.70, CAD와 강체 Articraft에서 0.90, 관절형 에셋에서 각 이동 부품당 0.90 및 올바른 조인트입니다. 이는 파이프라인이 보고한 품질 필터이며, 독립적으로 측정된 테스트 결과가 아닙니다. 실행 실패 또는 정적 검사를 통과하지 못한 프로그램은 제외됩니다. 데이터셋 방법론.
애플리케이션, 사용 가능성 및 향후 방향
이 표현 방식은 편집 가능한 에셋 변형, 대화형 메커니즘 및 LLM 기반 3D 작성 연구에 적합합니다. GLB는 현재 포즈, 재료 및 조인트 메타데이터를 노드 extras에 내보내며, 일반 뷰어가 해당 조인트를 작동하려면 추가 로직이 필요합니다. URDF와 USDA는 정지 상태의 메커니즘을 보존하며, USDA는 UsdGeom과 UsdPhysics를 사용합니다. OBJ/STL은 메시만 포함합니다. 내보내기 과정에서 길이는 미터 단위로 조정됩니다. 질량, 마찰 및 작동 매개변수는 라이브러리의 동역학 설명에 포함되지 않으므로 시뮬레이션 통합에는 여전히 작업이 필요합니다. 내보내기 구현.
라이브러리는 Apache-2.0 라이선스를 따르며, 데이터셋 릴리스는 원본 라이선스와 저작자 표시를 유지하면서 CC BY 4.0을 사용합니다. 현재 지원 범위는 강체 표면 객체를 중심으로 하며, 재구성 과정에서 작은 세부 사항이 누락될 수 있습니다. 저자들은 유기적 형태를 향후 작업으로 제시했으며, 후보 추가 기능으로 암시적 블렌딩, 제어 케이지 세분화, 가변 단면 스윕 및 로프트, 스키닝이 적용된 스켈레톤, 절차적 변위를 언급합니다. 또한 더 많은 도메인과 곧 공개될 프리프린트를 약속했지만, 이는 아직 계획에 머물러 있습니다. 이 리뷰는 2026년 11월 6일에 커밋 0d589a5 및 버전 1.6.2의 공식 문서와 소스 코드를 검토했으며, 벤치마크를 독립적으로 실행하지는 않았습니다. 공식 릴리스 및 한계.
FAQ
sand3D를 설치하면 텍스트-투-3D 모델을 얻을 수 있나요?
Python 모델링 라이브러리가 설치됩니다. LLM 또는 사용자가 해당 API를 사용해 프로그램을 작성해야 하며, bpy가 이를 실행해 에셋을 만듭니다. 데이터셋은 코드 예제를 제공할 뿐, 독립적으로 학습된 생성기를 제공하지는 않습니다. 출처.
다른 크기의 에셋은 어떻게 만들 수 있나요?
프로그램에 노출된 치수를 편집한 후 다시 실행합니다. 배치 관계와 이름이 지정된 부품을 통해 이러한 변경 사항을 확인할 수 있습니다. 프로그램에 실제로 인코딩된 관계만 자동으로 업데이트되므로, 재구축된 결과를 확인해야 합니다. 출처.
내보낸 메커니즘은 즉시 물리 시뮬레이션에 사용할 수 있나요?
URDF와 USDA는 조인트 구조를 포함하지만, 시뮬레이션에는 질량, 마찰 및 작동과 같은 동역학 매개변수가 여전히 필요합니다. GLB는 extras에 조인트 메타데이터를 저장하며, 애플리케이션이 이를 해석해야 메커니즘을 애니메이션할 수 있습니다. 출처.




