Blender에서 재질, 조명 및 렌더링
사용자는 BlenderLab 연결을 통해 Blender에서 작업합니다. 뷰포트 캡처와 최종 렌더는 서로 다릅니다. 캡처는 뷰포트의 쉐이딩 모드를 그대로 보여주지만, 렌더는 렌더 엔진, 조명 및 월드를 사용합니다. 대부분의 "뷰포트에서는 괜찮은데 렌더가 이상해요" 문제는 이 차이에서 비롯됩니다.
Blender 연결
BlenderLab(공식 Blender Lab 서버)을 통해 작업하며, 도구는 blenderlab_… 형식입니다:
- 장면에 있는 객체:
get_objects_summary; 특정 객체 상세:get_object_detail_summary(name으로). 저장 여부와 경로를 포함한 파일 정보:get_blendfile_summary_path_info. - Python 실행:
execute_blender_code. 호출 간 데이터가 유지되지 않으므로(도우미 함수를 각 스크립트에 포함), 스크립트의 출력이 반환되며,result딕셔너리에 할당된 값이 데이터로 반환됩니다. 가드가 일부 연산자(Blender 종료, 공장 초기화)를 차단합니다. - 3D 뷰포트 보기:
get_screenshot_of_area_as_image(area_ui_type: "VIEW_3D"사용). 전체 창:get_screenshot_of_window_as_image; 특정 객체로 이동:jump_to_view3d_object_by_name. - Python API 확인:
get_python_api_docs(bpy.types.BevelModifier와 같은 식별자),search_api_docs; 매뉴얼:search_manual_docs. - 빠른 렌더:
render_thumbnail_to_path,render_viewport_to_path; 이미지는 Blender의 임시 폴더에 저장되며 결과에 실제 경로가 반환됩니다. - 내보내기: 코드 (
bpy.ops.export_scene.gltf,bpy.ops.export_scene.fbx). - 에셋 라이브러리 및 3D 생성기: 없음. 객체를 직접 만들거나 사용자에게 가져올 파일을 요청하세요.
이러한 도구를 사용할 수 없으면 작업을 중단하고 그 사실을 알리세요. 사용자는 BlenderLab 연결(도구 → 연결)을 설치하고, 이 에이전트에게 연결을 부여하며, 애드온 서버가 시작된 Blender를 열어야 합니다. 실제로 수행할 수 없는 작업을 완료한 것처럼 설명하지 마세요.
작업 순서
- 확인: 장면 도구를 사용하여 객체, 이미 할당된 재질, 카메라, 조명, 월드가 있는지 확인합니다.
bpy.app.version_string과 현재 렌더 엔진을 읽습니다. - 재질: 표면당 하나씩, 이름을 설명적으로 지정(
Oak_Wood,Brushed_Steel)하고 객체 간에 재사용합니다. - 조명과 월드: 재질을 평가하기 전에 조명과 월드를 설정합니다. 재질은 어둠 속에서 평가할 수 없습니다.
- 카메라: 피사체를 중심으로 적절한 초점 거리로 구성합니다.
- 테스트 렌더: 작은 크기(해상도 25-50%, 적은 샘플 수)로 렌더링하고, 결과를 확인한 후 수정합니다.
- 최종 렌더: 파일로 저장하고 경로, 엔진, 해상도 및 소요 시간을 보고합니다.
각 단계에 대한 코드는 references/shading-and-render.md에 있습니다. 첫 번째 스크립트를 작성하기 전에 이 파일을 여세요.
재질: 흔한 문제
- 잘못된 위치에 색상 설정.
material.diffuse_color와object.color는 뷰포트 표시 색상일 뿐이며, 렌더링되지 않습니다. 렌더링되는 색상은 Principled BSDF 노드의 Base Color 입력입니다. 솔리드 모드 뷰포트와 일치시키려면 둘 다 설정하세요. - Blender 4.0에서 입력 이름 변경.
Transmission은Transmission Weight로,Emission은Emission Color로,Specular는Specular IOR Level로,Clearcoat는Coat Weight로,Subsurface는Subsurface Weight로 변경되었습니다. 입력을 이름으로 조회하고 설정하기 전에 존재하는지 확인하세요. 확실하지 않으면 연결의 API 도구를 사용하세요. - 재질이 생성되었지만 할당되지 않음. 재질을
obj.data.materials에 추가하세요. 하나의 메시에 여러 재질을 적용하려면polygon.material_index를 할당하세요. - 노드를 이름이 아닌 타입으로 찾기. 노드 이름은 영어 인터페이스에서만 "Principled BSDF"입니다.
next(n for n in nodes if n.type == 'BSDF_PRINCIPLED')를 사용하세요.
| 표면 | Principled BSDF 설정 |
|---|---|
| 페인트, 플라스틱 | Base Color; Roughness 0.3-0.6; Metallic 0 |
| 금속 | Metallic 1.0; Base Color = 금속 색상; Roughness 0.15-0.5 |
| 유리 | Transmission Weight 1.0; Roughness 0-0.05; IOR 1.45; 굴절할 대상(월드 또는 조명) 필요 |
| 발광 | Emission Color + Emission Strength (1-20) |
| 고무, 천, 매트 | Roughness 0.8-1.0 |
| 자동차 페인트, 바니시 | Coat Weight 1.0; Coat Roughness 0.05 |
Metallic은 0 또는 1이며, 중간 값은 거의 사용되지 않습니다. 순수 검정(0, 0, 0)과 순수 흰색(1, 1, 1) Base Color는 조명 아래에서 부자연스러우므로 약 0.03-0.9 범위 내로 유지하세요.
조명과 월드
- 월드도 조명도 없으면 검정색 렌더가 생성되며, 빈 월드에서 유리나 크롬을 렌더링하면 조명이 있어도 반사 또는 굴절할 대상이 없어 검정색으로 나옵니다. 월드에 색상과 강도를 설정하거나 HDRI를 적용하세요.
- 신뢰할 수 있는 시작 구성: 큰 면광원을 키 조명(한쪽 45° 위), 반대쪽에 약한 필 조명, 뒤쪽에 림 조명, 그리고 낮은 강도(0.2-0.5)의 월드.
- 면광원의 출력은 와트 단위이며 크게 설정해야 합니다: 작은 객체에서 2m 떨어진 1m 면광원은 약 100-500W가 필요합니다. 태양 광원의 강도는 다릅니다(2-5).
- 객체 아래에 지면을 추가하면 접촉 그림자가 생깁니다. 지면이 없으면 객체가 공중에 떠 있는 것처럼 보입니다.
- HDRI는 한 번에 사실적인 조명과 반사를 제공합니다. Blender(MCP for Blender) 연결은 Poly Haven에서 HDRI를 다운로드할 수 있습니다. 이는 타사 콘텐츠이므로 HydraOps에서 승인이 필요하므로 먼저 요청하세요. BlenderLab에서는 사용자에게 HDRI 파일을 요청하세요.
엔진
| EEVEE | Cycles | |
|---|---|---|
| 속도 | 몇 초 | 몇 초에서 몇 분 |
| 용도 | 미리보기, 스타일라이즈드, 애니메이션 | 최종 정지 이미지, 유리, 정확한 조명 |
| 주의 사항 | 반사와 굴절에 레이 트레이싱 활성화 필요; 비활성화 시 유리와 광택 표면이 평면 또는 거칠게 보임 | 노이즈: 샘플 증가 및 디노이저 유지; 사용자가 설정한 경우에만 GPU 사용 |
EEVEE의 엔진 식별자는 버전에 따라 다릅니다(4.2-4.5: BLENDER_EEVEE_NEXT, 이전 및 이후: BLENDER_EEVEE). 참조 파일에 추측 없이 설정하는 방법이 나와 있습니다. 사용자의 렌더 장치나 환경 설정을 변경하지 마세요.
카메라
- 카메라가 없으면 생성하고 장면 카메라로 설정하세요. 사용자가 이미 배치한 카메라는 요청하지 않는 한 이동하지 마세요.
- Track To 제약 조건을 사용하여 피사체 또는 빈(Empty) 객체를 향하도록 조준하세요. 객체에는 50-85mm, 방이나 환경에는 24-35mm를 사용하세요.
- 작은 테스트 렌더로 프레이밍을 확인하세요. 뷰포트 스크린샷으로는 확인하지 마세요(카메라 뷰로 전환하지 않으면 뷰포트는 카메라가 아닙니다).
렌더링
- 사용자가 찾을 수 있는 폴더(.blend 파일이 저장된 경우 그 옆, 그렇지 않으면 사용자의 임시 폴더에 요청)의 절대 경로로 파일에 렌더링하고 전체 경로를 보고하세요. 기존 파일을 덮어쓰지 말고 반드시 알리세요. 코드로 수행하세요(참조 파일에 있음). BlenderLab 자체 렌더 도구는 빠른 확인용이며, 제공된 경로와 관계없이 Blender 임시 폴더에 기록합니다. 결과가 명명하는 경로를 보고하세요.
- 먼저 작게 테스트하세요. 전체 해상도 Cycles 렌더는 몇 분이 걸릴 수 있으며 실행 중 Blender가 차단됩니다. 긴 렌더를 시작하기 전에 사용자에게 알리세요.
- 성공을 선언하기 전에 결과를 확인하세요. 뷰포트 캡처는 렌더를 보여주지 않습니다. 렌더링된 파일을 직접 볼 수 없다면, 이미지가 "어떻게 보이는지" 설명하지 말고 설정한 내용을 명확히 설명하세요.
- 색상 관리: 기본 뷰 변환(AgX 또는 Filmic)은 사실감을 위해 강한 색상을 탈색합니다. 정확히 일치해야 하는 평면 그래픽 색상에는
Standard를 사용하세요.
문제 해결
| 증상 | 일반적인 원인 |
|---|---|
| 렌더가 검정색 | 조명과 월드 없음; 카메라가 객체 내부에 있음; 객체가 렌더에서 숨겨짐 |
| 객체가 회색 또는 흰색 | 재질이 할당되지 않았거나, diffuse_color에 색상이 설정됨 (Base Color가 아님) |
| 유리가 검정색 | 빈 월드; EEVEE에서 레이 트레이싱 꺼짐 |
| 분홍색 또는 자홍색 | 이미지 텍스처 파일 누락 |
| 거친 노이즈 | Cycles: 샘플 수 부족 또는 디노이저 없음. EEVEE: 레이 트레이싱 꺼짐 또는 적은 샘플의 소프트 섀도우 |
| 평면적, 깊이감 없음 | 월드 조명만 있음: 키 조명과 지면 추가 |
| 색상 희미함 | 뷰 변환: Standard 시도 또는 노출 낮춤 |
| 블록 형태의 곡면 | 플랫 쉐이딩: 스무스 쉐이딩 활성화 |
완료 전 확인 사항
- 모든 보이는 객체에 재질이 할당되었으며 Base Color가 노드에 설정되어 있습니다.
- 조명 또는 조명이 있는 월드와 피사체를 구성하는 카메라가 있습니다.
- 렌더가 파일로 작성되었으며 경로, 엔진 및 해상도를 제공했습니다.
- 요청된 내용만 변경했습니다: 객체 삭제 없음, 환경 설정 변경 없음.