Lifetime
Companion

연구개발

RND | 메쉬 Blender add on

2026.04.16 13:30


blender add on

1. 프로젝트 개요 (Project Overview)

  • 연구 코드명: Project J3D-BlenderAddon_MeshTexturing

  • 핵심 기술: Python, Blender Python API (bpy), Cycles 렌더 엔진

  • 해결 과제: 3D 스캐너로 취득한 메쉬 데이터를 파트별로 분리, 머티리얼 적용 후 텍스쳐가 통합된 OBJ 파일로 생성 과정이 분산 된 메뉴기능으로 이루어져 과다한 시간 소모 및 휴먼 에러 빈번히 발생. 

  • Blender 애드온으로 메뉴를 구조화하고 단순화하여 초보자도 쉽게 메쉬에 컬러 텍스쳐링을 할수 있도록 함.

    2. 시스템 설계 (System Architecture)

    • 핵심 방향 :  Blender 사이드바(View3D ▶ Sidebar ▶ J3D)에서 ① Import → ② Separate → ③ Material → ④ Preset → ⑤ Texture & Mapping → ⑥ Merge → ⑦ Export 까지 7단계를 순서대로 실행하는 단일 UI 패널로 구현. 

    초보자도 패널 순서를 따라가면 컬러 매핑 된 Obj 파일이 완성되는 것이 핵심 설계 목표.
    • 기술 스택 : Python 3.x · Blender 4.5+ Python API (bpy) · Cycles 렌더 엔진 · PBR Principled BSDF · Equal-Area UV Grid 알고리즘

    역설계 메쉬 컬러화 add on 파이썬 코드.png

    3. 기술적 도전과 해결 (Technical Challenges and Solutions)

    Challenge #1: Equal-Area UV Grid 베이크 문제

    • Issue:   여러 머티리얼 슬롯을 하나의 텍스쳐 이미지로 베이크할 때, Blender 기본 방식으로는 각 파트가 UV 공간에서 차지하는 면적이 불균등하게 배치됨. 작은 파트는 수 픽셀만 할당되어 외부 3D 뷰어에서 색상이 뭉개지거나 소실되는 현상 발생.

    • Approach: 머티리얼 슬롯 수에 따라 균등 격자(cols×rows)를 계산. 편집 모드에서 슬롯별 Smart UV Project로 0-1 공간 배치 후, 오브젝트 모드에서 uv_layer.data[li].uv 직접 대입 방식으로 각 슬롯을 격자 셀에 재배치. 모든 파트가 동일한 픽셀 영역을 점유하도록 보장.


    Challenge #2: 금속 재질 베이크 색상 소실 문제

    • Issue: PBR Metallic 값이 1.0인 금속 재질은 Cycles DIFFUSE 베이크 시 검정으로 출력됨. 금속 파트의 색상 정보가 텍스쳐에 기록되지 않아 최종 생성 파일의 재질 표현이 불가능한 치명적 문제

    • Approach: 베이크 직전에 각 머티리얼의 Base Color 소켓을 Emission 노드로 라우팅한 뒤 EMIT 타입으로 베이크(Emit Trick). 베이크 완료 즉시 Emission 노드를 제거하고 원본 Surface 연결을 복원. 머티리얼 그래프가 완전히 원상태로 복구되므로 부작용 없음.

    Challenge #3: Blender 버젼 간 API 비호환 문제

    • Issue: Blender 4.x 시리즈에서 임포터(wm.obj_import ↔ import_scene.obj) 스마트파라미터 구조, Principled BSDF 입력 이름(Transmission → Transmission Weight, Specular → Specular IOR Level)이 버전별로 변경. 단일 버전만 지원 시 다른 버전 사용자는 애드온이 즉시 오류로 종료

    • Approach: 헬퍼 함수에 try/except 폴백 체계를 내장. 신규 API를 먼저 시도하고 TypeError/AttributeError 발생 시 구버전 API로 자동 전환. 코드 중복 없이 단일 파일로 Blender 4.x 전 버전 대응

    4. 개발 결과 및 시연 (Development Results and Demonstration)

    실시간 작동 시연

    파트별 PBR 머티리얼이 적용된 스캔 메쉬를 단일 OBJ+MTL+JPG 파일 세트로 원클릭 내보내기 시연

    4 메쉬 분리.png6.메쉬병합.png10.결과물 obj.png

    Before & After 비교

    ❌ Before (기존 방식)

    • 쉬 분리, UV 언랩, 베이크, 내보내기를 별도 도구와 다수 수작업 단계를 수행해야 하는데 분산 되어 있음

    • 초보자는 블랜더의 메뉴가 너무 많아 메쉬에 머터리얼 및 컬러 텍스쳐링을 배우는데 너무 많은 노력과 시간 필요.

    • 베이킹 및 UV 매핑 등 초보자가 이해하기에는 어려운 개념 및 단어로 블랜더를 배우겠다는 시도조차 안함.

    역설계 된 메쉬.png

    ✅ After (개선된 방식)

    • 7단계 순서형 UI 패널로 Import부터 Export까지 단일 패널에서 완결

    • Equal-Area UV Grid 알고리즘으로 모든 파트가 텍스쳐에 균등 면적 보장

    • Emit Trick으로 금속·투명 재질 포함 전체 PBR 재질의 정확한 색상 베이크

    • 한글 Blender 4.x 전 버전 자동 폴백으로 버전 무관 동작

    머터리어 및 텍스처링 된 메쉬.png

    9.uv 매핑 obj의 jpg.png

    주요 성과 및 효과

    • J3D, 구매 고객의 만족도 상승 : 3D스캐너 구매고객에 불편을 듣고 만든 프로그램, 3D스캐너 활용성 높아짐 

    • 학습 곡선 개선: 블렌더를 몰라도 역설계 된 메쉬을 Import 후 순차적으로 버튼을 입력하면 메쉬의 컬러 텍스처링 가능

    • 이미지 베이킹을 통한 UV Map화 된 obj 생성 : 보통 머터리얼 및 컬러텍스처링까지는 어찌 어찌했으나 하나의 map 화 된 obj를 못하였지만 이미지 베이킹 작업까지 추가하여 하나의 obj 파일로 생성


    1. 최초 j3d add on 설치 후 화면.png

     

    2.j3d .add on 메뉴.png

    5. 결론 및 향후 계획 (Conclusion and Future Plans)

    • 3D 스캐너 취득 데이터의 후처리· 그 중 텍스쳐링 단순화라는 핵심 과제를 Blender 내장 Python API만으로 구현함으로써 별도 라이선스 없이 즉시 배포 가능한 워크플로우 도구를 완성. 향후 멀티 오브젝트 일괄 Export, GLTF/FBX 포맷 확장, 노멀맵·러프니스맵 분리 베이크 기능 추가를 통해 생성 포맷 다양화 및 게임·XR 렌더링 파이프라인 대응 검토 중.

    © 2022 J3D Co., Ltd (주식회사 제이쓰리디) | 3D For Automation

    산업현장의 Needs를 계속 청휘하고 피드백 해 드리고 있습니다. 언제든지, 어떤 내용이라고 개선 요구 사항을 메일로 주세요. lee@j3d.co.kr