在这里插入图片描述

一、缘起:一个盲盒爱好者的发癫想法

抽盲盒是很多年轻人的喜好,我这个中老年人也不例外。

我桌上常年摆着各式各样的盲盒和手办,通常都是主题系列的比如精灵宝可梦、数码宝贝、奥特曼等等。每次拆盒时那种"不知道会是什么"的期待感,总让人欲罢不能啊!有天晚上我在整理这些小玩意儿,想自己做一个抽奖的游戏该多好。

混元生3D?文生3D、图生3D、草图生3D?

我的脑子里"叮"地一声,恭喜宿主!——,啊不是想岔了,是冒出一个念头:

能不能用 AI实时通过玩家的喜好选择 生成 3D 模型来做"虚拟盲盒"?

想想看——咱们输入一个主题,比如"赛博朋克猫咪",系统像盲盒一样在主题范围内注入随机元素,给你生成一个独一无二的 3D 角色模型。

完全都不知道会搞出来什么造型,是机械耳朵还是霓虹尾巴,全靠运气。再靠 TTS 给角色配一段自我介绍的语音,这样搞每个盲盒就是一个有声音、有故事、有 3D 形象的数字收藏品了!

这个想法让我兴奋了一整晚。第二天就打开WorkBuddy开始动手了。最终效果如下:
在这里插入图片描述

二、3D 虚拟盲盒工坊

我有一个伟大的计划,简单来说,用户选择一个主题(或上传一张草图),后台在主题内注入随机"基因"——颜色变体、配件组合、风格微调——然后调用混元3D生成独一无二的3D角色模型。

同时为角色生成姓名、性格、稀有度和背景故事,最后用 TTS 合成角色的"自我介绍"语音。整个体验模拟真实盲盒的"拆箱"过程:选主题、开盒、等开奖。这样内容可以无穷无尽啊。

与物理盲盒不同,每个虚拟盲盒都是 AI 实时生成的,理论上不会有完全相同的两个。而且你不仅能看到 3D 模型,还能听到角色"说话"。我设计了五个主题系列:

系列名称 风格定位
赛博朋克 霓虹机械、未来都市
古风仙侠 飘逸仙气、东方韵味
萌宠乐园 Q弹可爱、治愈系
星际探索 太空科幻、外星生物
暗黑奇幻 哥特暗影、神秘生物

除了预设主题,用户也可以输入自定义关键词,甚至上传手绘草图来生成盲盒——草图模式会调用混元3D的 Sketch 生成类型,把涂鸦变成 3D 模型。这个功能在我测试时尤其有趣,我画了个歪歪扭扭的"四不像",结果生成了一个还挺有设计感的小怪兽。

三、技术架构与 Skills 选型

我们首先要和Workbuddy充分沟通设计过程,从小白视角让它一步步摸清我们的需求,指导我们完成。
对话内容提示词如下:

我是个新手小白,啥都不懂。我想做一个盲盒网站,就像抽盲盒那种感觉!点一下按钮,就出来一个3D的小角色,每个都不一样,越稀有的越好看,最好还能让它开口说话做个自我介绍,像抽卡游戏那样有稀有度就更棒啦!你帮我想想办法,一步步教我做呗

在这里插入图片描述

WorkBuddy做了很多初级工作,还提示了我们需要用到腾讯的一些skill来获取真实的3D效果,这时继续让它调用它想用的skill就行。

在这里插入图片描述

整个应用的架构围绕"盲盒生成流水线"展开,Skills 使用了:hy-3d-generation、tencentcloud-tts、tencentcloud-ocr和tencentcloud-yt-segment-portrait,真正用到的主要是3D,混元的,没有它就没有3D盲盒。TTS 可以让盲盒"会说话",从视觉扩展到听觉,是多模态体验的关键一环。OCR 处理用户上传的图片输入——比如有人拍了一张手写概念图的草图,OCR 能提取文字辅助 prompt 构建。人像分割则用于图片输入场景,把照片里的角色抠出来再喂给图生3D,生成效果比直接传整张图好不少。

Skill slug 在本项目中的角色
混元生3D hy-3d-generation 核心引擎,生成3D角色模型(GLB/OBJ)
腾讯云TTS tencentcloud-tts 角色语音合成,生成自我介绍音频
通用文字识别 tencentcloud-ocr 图片输入场景的文字提取
图片人像分割 tencentcloud-yt-segment-portrait 图片预处理,角色抠图

我使用Workbuddy将四个腾讯云 AI Skill 编排为一条完整的多模态生成流水线,覆盖了从输入解析到三维建模再到语音合成的全链路:

```
用户输入(主题 / 草图 / 图片)
▼
Skill 1: OCR — 如果输入是图片,先识别文字内容作为 prompt 参考
▼
Skill 2: 人像分割 — 如果图片含人物/角色,抠图后作为图生3D输入
▼
盲盒随机引擎 — 在主题内注入随机基因,组装最终 prompt
▼
Skill 3: 混元3D — 文生3D / 图生3D / 草图生3D,生成 GLB 模型
▼
角色 DNA 生成 — 姓名、稀有度、性格标签、背景故事
▼
Skill 4: TTS — 将角色自我介绍文本合成为语音
▼
盲盒开箱展示 — 3D 预览 + 语音播放 + 角色卡片

四个 Skill 串联形成闭环:OCR 读图 → 人像分割抠图 → 随机引擎组 prompt → 混元3D 生模型 → TTS 配音,单独每个 Skill 各自为战,组合后实现了"选主题→开盲盒→3D模型亮相+角色语音自我介绍"的完整收藏品体验。

hy-3d-generation(混元生3D) 作为核心引擎,根据盲盒随机引擎组装的 prompt 调用文生3D/草图生3D接口生成 GLB 三维模型,并按稀有度分级选用 3.0/3.1 模型版本、PBR 材质与面数参数(N/R 用 3.0 快速出模,SSR/UR 用 3.1+PBR+80万面数追求极致精度),让稀有度不仅体现在概率上,更体现在模型质量上;
tencentcloud-tts(语音合成) 将系统自动生成的角色自我介绍文本合成为语音,并按稀有度映射不同音色(N→智瑜、SR→智侠、SSR→智美、UR→智白),实现每个盲盒角色"开盒即说话"的多模态体验;
tencentcloud-ocr(通用文字识别) 处理用户上传的图片输入场景——当用户拍下手写概念图或设计草图时,OCR 先提取图中文字辅助构建3D生成 prompt,将非结构化的图片输入转化为可用的文本线索;
tencentcloud-yt-segment-portrait(人像分割) 在草图/图片输入场景中做预处理,将主体从杂乱背景中抠出生成透明 PNG 再喂给图生3D,显著提升了草图模式的生成稳定性和模型质量。

四、环境准备与 Skill 安装

在Workbuddy中可以直接找到并添加这些技能,如下直接搜就行:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
完成!可以在对话框中看到我们的技能已经在列表中,可以随时选取添加!
在这里插入图片描述

4.1 腾讯云密钥配置

四个 Skill 都需要腾讯云 API 密钥。去 腾讯云 API 密钥管理 页面创建 SecretId 和 SecretKey。
在这里插入图片描述

然后在环境变量里配置:

# Windows PowerShell
$env:TENCENTCLOUD_SECRET_ID = "你的SecretId"
$env:TENCENTCLOUD_SECRET_KEY = "你的SecretKey"

# Linux / macOS
export TENCENTCLOUD_SECRET_ID="你的SecretId"
export TENCENTCLOUD_SECRET_KEY="你的SecretKey"

同时需要开通对应的服务:3D 视觉创作(ai3d)、语音合成(tts)、文字识别(ocr)、图像处理(image)。每个服务首次开通都有免费额度,先领取,做这个项目基本够用。

3D这块需要额外买一点资源包不然不太够。毕竟生成一次都非常烧积分。
在这里插入图片描述
在这里插入图片描述

4.2 Skill 安装

在 SkillHub(https://skillhub.cn)搜索对应 slug 安装。安装后 Skill 的脚本会放在本地目录,后续可以直接在代码里调用。也可以直接 pip install tencentcloud-sdk-python 安装 SDK,手动调用 API。

下面就直接让它继续调用完成开发就行。

在这里插入图片描述
整个项目代码量不到 1000 行,借助 Skill 封装将四个腾讯云 API 的对接复杂度大幅降低,将 Skill 协同效能发挥到最佳。

4.3 项目结构

blindbox-workshop/
├── app.py                 # Flask 主应用
├── engine/
│   ├── random_engine.py   # 盲盒随机基因引擎
│   ├── dna_generator.py   # 角色 DNA 生成
│   ├── skill_3d.py        # 混元3D 调用封装
│   ├── skill_tts.py       # TTS 调用封装
│   ├── skill_ocr.py       # OCR 调用封装
│   └── skill_segment.py   # 人像分割调用封装
├── static/
│   ├── css/style.css
│   └── js/viewer.js       # 3D 模型查看器(Three.js)
├── templates/
│   ├── index.html         # 主页
│   └── box.html           # 盲盒开箱页
└── requirements.txt

五、实现的一些核心要点

5.1 盲盒随机基因引擎

盲盒的灵魂在于"随机"。但纯随机会生成乱七八糟的东西,所以我的做法是:每个主题预设一个"基因池",包含颜色、配件、材质、风格修饰词等维度,每次从池子里随机抽取组合,拼成结构化的 prompt 喂给混元3D。这样既保证结果在主题范围内,又保证每次都有惊喜。

用预设的基因池约束随机范围,用稀有度系统控制 prompt 复杂度。UR 级别的 prompt 会自动加上更多细节描述词,让混元3D生成更精致的模型。实测下来,这种分层 prompt 策略对生成质量的影响非常明显——N 和 UR 的模型精度差距肉眼可见。

5.2 混元3D模型生成

混元3D Skill 安装后,最简单的用法是直接调用它提供的 main.py 脚本。但为了在 Flask 应用里灵活控制,我封装了一个调用层,直接使用腾讯云 SDK:

# engine/skill_3d.py
import json, time, os
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.ai3d.v20250513 import ai3d_client, models

class Hunyuan3DEngine:
    def __init__(self):
        secret_id = os.getenv("TENCENTCLOUD_SECRET_ID")
        secret_key = os.getenv("TENCENTCLOUD_SECRET_KEY")
        cred = credential.Credential(secret_id, secret_key)
        http_profile = HttpProfile(endpoint="ai3d.tencentcloudapi.com")
        client_profile = ClientProfile()
        client_profile.httpProfile = http_profile
        self.client = ai3d_client.Ai3dClient(cred, "", client_profile)
    
    def generate_from_text(self, prompt: str, rarity: str = "N") -> dict:
        """文生3D,根据稀有度调整参数"""
        req = models.SubmitHunyuanTo3DProJobRequest()
        
        # 高稀有度用3.1模型 + PBR + 高面数
        if rarity in ("SSR", "UR"):
            req.Model = "3.1"
            req.EnablePBR = True
            req.FaceCount = 800000
        else:
            req.Model = "3.0"
            req.EnablePBR = False
            req.FaceCount = 300000
        
        req.Prompt = prompt
        req.GenerateType = "Normal"
        
        # 提交任务
        resp = self.client.SubmitHunyuanTo3DProJob(req)
        job_id = resp.JobId
        
        # 轮询等待结果(通常1~5分钟)
        result = self._poll_result(job_id)
        return result
    
    def generate_from_sketch(self, image_url: str, prompt: str = "") -> dict:
        """草图生3D"""
        req = models.SubmitHunyuanTo3DProJobRequest()
        req.ImageUrl = image_url
        req.GenerateType = "Sketch"
        req.Prompt = prompt
        req.Model = "3.0"
        
        resp = self.client.SubmitHunyuanTo3DProJob(req)
        return self._poll_result(resp.JobId)
    
    def _poll_result(self, job_id: str, interval: int = 10, timeout: int = 600) -> dict:
        """轮询查询任务状态"""
        req = models.QueryHunyuanTo3DProJobRequest()
        req.JobId = job_id
        
        elapsed = 0
        while elapsed < timeout:
            resp = self.client.QueryHunyuanTo3DProJob(req)
            status = resp.Status
            
            if status == "DONE":
                files = []
                for f in resp.ResultFile3Ds:
                    files.append({
                        "type": f.Type,
                        "url": f.Url,
                        "preview": f.PreviewImageUrl,
                    })
                return {"status": "success", "files": files, "job_id": job_id}
            elif status == "FAIL":
                return {"status": "fail", "error": resp.ErrorMessage}
            
            time.sleep(interval)
            elapsed += interval
        
        return {"status": "timeout", "job_id": job_id}

由于混元3D生成的文件 URL 有效期只有 24 小时。我的做法是拿到 URL 后立即下载 GLB 文件存到本地,在应用里提供本地访问。一开始没注意这个,第二天打开发现模型全 404 了。

另一个值得分享的经验是模型版本和面数的选择。3.0 版本速度快(通常 1-2 分钟),但细节相对粗糙;3.1 版本质量明显更好,但等待时间会到 3-5 分钟。我的策略是 N/R 级别用 3.0 快速出,SR 以上用 3.1 + PBR + 高面数,让稀有度不仅体现在 prompt 上,也体现在模型精度上。这样用户抽到 SSR/UR 时能明显感受到"物有所值"。

5.3 角色 DNA 生成与 TTS 配音

光有 3D 模型还不够,盲盒角色得有"灵魂"。我设计了一个角色 DNA 系统,为每个盲盒生成姓名、稀有度、性格标签和一段自我介绍文本,然后调用 TTS 合成语音搞定。

考虑到用户上传的手绘草图质量参差不齐——有用手机拍的、有光线偏暗的、有背景杂乱的。直接传给混元3D的 Sketch 模式,生成效果很不稳定。我的解决方案是加入人像分割 Skill 做预处理:先用 tencentcloud-yt-segment-portrait 把草图主体从背景中分离出来,生成透明背景的 PNG,再传给3D生成。这一步对草图质量的提升非常明显,尤其是一些背景杂乱的手绘稿。

六、效果展示与体验

完成后效果如下。
在这里插入图片描述

打开首页会看到五个主题系列的选择界面。
在这里插入图片描述

选中一个后点击"开盒",进入等待页面(约1-3分钟)

然后"叮——!"盲盒咔嚓一下打开,3D模型旋转亮相,角色语音响起,旁边展示角色卡片——姓名、稀有度、性格、背景故事。

在这里插入图片描述
在这里插入图片描述
最后还可以在收藏架上看到已经抽取到的角色。
在这里插入图片描述

角色是混元3D生成不仅可以360度自动旋转展示,还能全方位无死角旋转,并且支持导出模型功能,易于鉴赏和二次加工。
在这里插入图片描述

我连续测试了 50 次开盒,统计了一些数据:

稀有度 出现次数 平均生成耗时 模型质量评价
N(普通) 21 1.2 min 基础造型,纹理简单
R(稀有) 14 1.5 min 增加配件,颜色更丰富
SR(超稀有) 10 2.8 min 双配件,PBR材质
SSR(传说) 4 3.5 min 精细细节,粒子特效
UR(神秘) 1 4.2 min 3.1模型,最高质量

整体出率与预设概率基本吻合吧,UR 略高于预期,可能是样本量不够,毕竟说实话烧得都是我的混元3Dtoken啊!

回顾一下

我在做这个项目时候最大的感受是:腾讯云 AI Skills 把多模态 AI 能力的使用门槛拉得非常低。

混元3D、TTS、OCR、人像分割,每一个 Skill 单独拿出来都能做一个独立应用,但组合在一起的化学反应远大于简单相加——3D 让盲盒"有形",TTS 让盲盒"有声",OCR 让盲盒"能读图",人像分割让盲盒"能识人"。

整个项目从想法到可运行的原型,大概花了2天左右。代码量不到 1000 行,如果没有这些封装好的 Skill,从零对接四个腾讯云 API 的复杂度至少要翻几倍。

我觉得Skill 的价值就主要体现在这里了——它不是简单的封装API ,还包括一些用法层面的东西,比如混元3D Skill 里关于模型版本选择、面数配置、生成类型推荐的说明,帮我少走了很多弯路。

后续我打算做几个扩展:比如一是加入"盲盒图鉴"功能,把收集到的角色做成 3D 展示柜;二是可以接入人脸融合 Skill,让用户能把自己的脸贴到 3D 角色上;三是做一个"盲盒交换"功能,不同用户之间可以交易角色。如果说再大胆一点,甚至可以做成一个 3D 虚拟展厅,用 WebXR 在 VR 里看盲盒!等我下个月有闲钱了再继续。

本期的实践就到这里,目标实现,完美收工!谢谢大家收看!

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐