news 2026/9/14 14:11:59

Hunyuan3D-2 Blender Addon 集成指南:在 Blender 中完成文/图生 3D 与网格贴图

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hunyuan3D-2 Blender Addon 集成指南:在 Blender 中完成文/图生 3D 与网格贴图

Hunyuan3D-2 Blender Addon 集成指南:在 Blender 中完成文/图生 3D 与网格贴图

【免费下载链接】Hunyuan3D-2High-Resolution 3D Assets Generation with Large Scale Hunyuan3D Diffusion Models.项目地址: https://gitcode.com/GitHub_Trending/hu/Hunyuan3D-2

Hunyuan3D-2 仓库官方文档中的 Blender Addon 指南 描述了如何在启动本地 API 服务后,通过随仓库提供的 blender_addon.py 在 Blender 内直接调用 Hunyuan3D 2.0 进行 3D 生成与贴图。读完本文,你将掌握完整链路:API 服务的启动与参数、Addon 的安装与面板配置、四种生成模式(文生 3D、图生 3D、网格贴图、带参考图贴图)的触发条件,以及 Addon 与 api_server.py 之间请求/响应的源码级协作机制。

整体工作流

Add-on 本身不包含模型,而是一个“客户端”:它运行在 Blender 进程内,通过 HTTP 请求把任务转发给独立运行的模型推理服务(api_server.py 中的 FastAPI 应用),服务完成生成后返回 GLB 文件,Addon 再将其导入当前场景。

Blender (blender_addon.py) API 服务 (api_server.py) ┌──────────────────────────┐ POST /generate ┌──────────────────────────────┐ │ 面板:prompt / image / │ ───────────────▶ │ ModelWorker.generate() │ │ octree_resolution 等参数 │ │ ├ rembg 抠图 │ │ 后台线程发起 HTTP 请求 │ ◀─────────────── │ ├ 可选:形状生成 (DiT) │ │ 收到 GLB 后导入场景 │ FileResponse │ └ 可选:贴图 (HunyuanPaint) │ └──────────────────────────┘ (GLB 字节流) └──────────────────────────────┘

这一设计与 README 中 API Server 一节的说明一致:先本地启动 API server,再以 Web 请求方式提交 Image/Text to 3D、Mesh 贴图任务。

准备环境:启动 API 服务

安装依赖

按照 README 的Install Requirements一节,先按 PyTorch 官方指引安装对应平台的 PyTorch,再安装仓库其余依赖:

pip install -r requirements.txt pip install -e . # 若需要贴图(texture)功能,需额外编译两个 C++/CUDA 扩展: cd hy3dgen/texgen/custom_rasterizer python3 setup.py install cd ../../.. cd hy3dgen/texgen/differentiable_renderer python3 setup.py install

其中 requirements.txt 包含fastapiuvicorntrimeshrembgdiffusers等 API 服务运行所需的库;后两个 setup.py 分别安装custom_rasterizerdifferentiable_renderer,是贴图管线Hunyuan3DPaintPipeline的底层光栅化依赖。

启动 api_server.py

api.md 与 README 给出的标准启动命令为:

python api_server.py --host 0.0.0.0 --port 8080

若需要网格贴图能力(即 Addon 面板中的Generate Texture),必须追加--enable_tex。从 api_server.py#L300-L315 可以看到全部命令行参数及默认值:

参数默认值说明
--host0.0.0.0监听地址
--port8081监听端口(README 示例显式指定8080,与 Addon 默认一致,见“常见注意事项”)
--model_pathtencent/Hunyuan3D-2mini形状生成 DiT 模型
--tex_model_pathtencent/Hunyuan3D-2贴图模型(Paint)
--devicecuda推理设备
--limit-model-concurrency5并发信号量
--enable_tex关闭加载Hunyuan3DPaintPipeline以启用贴图

ModelWorker.__init__(api_server.py#L146-L171)中会实例化BackgroundRemover(rembg 抠图)与Hunyuan3DDiTFlowMatchingPipeline(形状生成,且开启enable_flashvdm);仅当enable_tex=True时才额外加载Hunyuan3DPaintPipeline

显存方面,README 说明形状生成约需 6 GB VRAM,形状加贴图全流程合计约 16 GB,规划硬件时以此为前提。

安装与使用 Blender Addon

安装 Addon

仓库根目录的 blender_addon.py 即完整插件(bl_info声明blender: (3, 0, 0),即要求 Blender 3.0 及以上)。安装方式为 Blender 标准流程:Edit → Preferences → Add-ons → Install…,选择blender_addon.py并勾选启用。其bl_info中声明的入口位置为View3D > Sidebar > Hunyuan3D-2 3D Generator(blender_addon.py#L15-L23)。

面板参数

Addon 在 3D 视图侧边栏(快捷键 N)的Hunyuan3D-2分类下提供Hunyuan3D-2 3D Generator面板(blender_addon.py#L299-L329)。面板属性定义在Hunyuan3DProperties(blender_addon.py#L34-L90),完整参数表如下:

面板字段类型默认值取值范围说明
api_url字符串http://localhost:8080API 服务地址
prompt字符串文本提示词;与image_path至少填一项
image_path文件路径参考图(图生 3D / 贴图参考)
octree_resolution整数256128–512八叉树分辨率,决定网格几何精度
num_inference_steps整数2020–50形状生成推理步数
guidance_scale浮点5.51.0–10.0引导强度
texture布尔False是否生成/应用贴图

四种生成模式

Hunyuan3DOperator.invoke会先读取选中对象(context.selected_objects中的MESH),再按参数组合分派到四条请求分支(blender_addon.py#L181-L253)。四种组合如下:

  1. 文生 3D(Text to 3D):只填prompt,不选图、不选网格。Addon 发送{"text": ...}及生成参数,服务侧做形状生成;texture=False时得到白模,texture=True时服务侧先做形状再生成贴图(此时参考图由服务内部的 text2image 链路承担,见下文)。
  2. 图生 3D(Image to 3D):选择image_path并勾选或不勾选texture。Addon 将图片读为二进制并 Base64 编码后发送{"image": ...}。图片不存在时直接报Image path does not exist错误并终止(blender_addon.py#L222-L224)。
  3. 网格贴图(Mesh Texturing):在视口中选中一个 Mesh 对象并勾选texture,Addon 通过临时文件 +bpy.ops.export_scene.gltf(use_selection=True)将其导出为 GLB 并 Base64 编码,以{"mesh": ...}字段提交(blender_addon.py#L145-L153)。服务侧跳过形状生成,直接对已有网格贴图。
  4. 网格贴图 + 参考图:在模式 3 基础上再提供image_path,请求同时携带meshimage,面板日志显示Post Texturing with Image;未提供图片则显示Post Texturing with Text,仅以text作为贴图语义条件。

注意:texture=True要求服务端以--enable_tex启动,否则ModelWorker中没有pipeline_tex,贴图分支不可用。

源码级协作机制

请求构造与后台线程

invoke中启动threading.Thread(target=self.generate_model, ...)后进入RUNNING_MODAL(blender_addon.py#L174-L179),使耗时的 HTTP 等待不阻塞 Blender UI;modal循环中按右键或 ESC 可取消 UI 等待态(注意这只结束客户端等待,服务端的生成任务不会因此中断)。处理期间props.is_processing=True,面板按钮禁用并逐行显示status_message,完成后恢复。

所有请求统一POST {api_url}/generate,JSON 体最多包含以下字段:textimage(Base64 图片)、mesh(Base64 GLB)、octree_resolutionnum_inference_stepsguidance_scaletexture。其中api_url会先做rstrip('/')处理,避免拼接出双斜杠。

图片路径支持 Blender 的//相对路径写法:若image_path//开头,Addon 会剥掉前缀并相对于当前 .blend 文件所在目录解析(blender_addon.py#L157-L163),便于在素材库中组织工程。

服务端处理链

ModelWorker.generate(api_server.py#L186-L229)的处理顺序:

  1. 若带image字段,先 Base64 解码为 PIL 图像;若带text,走 text2image 得到参考图;二者皆无则抛ValueError
  2. 对图像执行self.rembg(image)自动抠除背景。
  3. 形状分支:仅当请求中没有mesh时执行。此时取seed(默认 1234)构造随机数生成器,参数缺省值为octree_resolution=128num_inference_steps=5guidance_scale=5.0mc_algo='mc',然后调用形状管线self.pipeline(**params)得到trimesh网格。由于 Addon 面板会显式发送这三个参数,实际生效值以面板为准(面板默认256 / 20 / 5.5)。
  4. 贴图分支:若texture为真,依次执行FloaterRemover(去浮点噪声)、DegenerateFaceRemover(去退化面)、FaceReducer(max_facenum=40000)(面数压缩),最后self.pipeline_tex(mesh, image)输出带贴图的网格。
  5. 结果经临时文件规范化后导出为 GLB,存入gradio_cache/{uid}.glb,并调用torch.cuda.empty_cache()释放显存。

/generate端点(api_server.py#L244-L274)捕获到ValueError、CUDA 错误或未知异常时统一返回 404 与错误文案;成功时以FileResponse直接返回 GLB 文件字节流。

GLB 回传与场景导入

Addon 收到 200 响应后把字节写入临时.glb文件,再通过bpy.app.timers.registerbpy.ops.import_scene.gltf调度回主线程执行(bpy 操作必须在主线程,blender_addon.py#L263-L287):

  • 导入后自动选中新对象;
  • 若本次是“选中网格贴图”流程,新网格会继承原网格的locationrotation_eulerscale,并把原网格hide_set(True)hide_render=True隐藏,视觉上相当于原位替换;
  • 临时文件在导入完成后删除,is_processing复位。

补充:异步提交接口

除 Addon 使用的/generate(同步等待完整文件)外,服务还提供一对异步接口:POST /send立即返回任务uidGET /status/{uid}轮询状态,完成后返回model_base64(api_server.py#L277-L297)。从 Addon 源码看它只使用了同步接口;如果你在集成自己的工具链,这对接口可作为不阻塞连接的替代方案。

常见注意事项

  • 端口要对齐:Addon 的api_url默认是http://localhost:8080,而api_server.py--port代码默认值是8081。README 与 api.md 的示例都显式传了--port 8080;若你启动时未指定端口,需手动把面板api_url改为http://localhost:8081
  • 贴图功能前置条件:勾选texture前,确认服务端带了--enable_tex,且已编译custom_rasterizerdifferentiable_renderer两个扩展(见上文安装步骤)。
  • 面板与服务端默认值不同:面板默认octree_resolution=256num_inference_steps=20guidance_scale=5.5,均会显式发送;服务端仅在字段缺失时回退到128 / 5 / 5.0
  • 参数合法性由 UI 约束:面板对octree_resolution(128–512)、num_inference_steps(20–50)、guidance_scale(1.0–10.0)设置了 min/max;直接构造 HTTP 请求时则不受这些范围约束,需自行保证合理取值。
  • 客户端依赖:Addon 使用requests库发起 HTTP 请求(blender_addon.py#L30),请确保 Blender 运行环境可用(通常随 Python 分发,缺失时可用 Blender 内置 pip 安装)。
  • 模型路径--model_path/--tex_model_path缺省指向 Hugging Face 上的tencent/Hunyuan3D-2minitencent/Hunyuan3D-2,首次运行会拉取权重;也可指向本地已下载目录。

小结

Hunyuan3D-2 的 Blender 集成采用“Blender 插件 + 独立推理服务”的解耦架构:插件负责参数收集、网格导出与结果导入,api_server.py 负责抠图、形状生成与贴图的完整管线。掌握POST /generate的请求字段与四条分支逻辑后,既可以照面板操作,也可以脱离 Blender 直接用curl(参考 api.md 的示例)或自研工具调用同一接口。相关入口:docs/source/started/blender.md、blender_addon.py、api_server.py、examples 目录(更多形状/贴图用法示例)。

【免费下载链接】Hunyuan3D-2High-Resolution 3D Assets Generation with Large Scale Hunyuan3D Diffusion Models.项目地址: https://gitcode.com/GitHub_Trending/hu/Hunyuan3D-2

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 14:09:24

免费开源版IDEA到底值不值得用?IntelliJ IDEA Community Edition详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 14:08:17

用Python批量获取网站标题:解析原理与并发提速实战

简介:“批量获取网站标题1.3”是一款面向开发者与网络数据分析人员的轻量级抓取工具,核心用途是批量采集网站标题,同时支持域名、IP和端口识别,并能在网页多次跳转时自动跟随重定向,减少人工逐个访问的繁琐操作。工具底…

作者头像 李华
网站建设 2026/9/14 14:07:06

STM32C552 ADC电压采集精度实战指南

1. 项目概述:为什么STM32C552的ADC电压采集不是“接上线就出数”那么简单你手头有一块STM32C552开发板,想测个电池电压、电源轨电压或者传感器输出——看起来就是配置一下ADC通道、启动转换、读取寄存器值,三步搞定。但现实往往是&#xff1a…

作者头像 李华
网站建设 2026/9/14 14:06:53

基于STM32的图书馆环境监测系统:从原理图到代码仿真全解析

自己一直在折腾嵌入式项目,手头也有不少STM32开发板,但真正把一整套需求、原理图、代码、仿真串起来的项目,还是这个图书馆环境监测系统让我收获最大。一方面是它贴近真实场景,另一方面它把传感器采集、数据处理、控制执行、人机交…

作者头像 李华