全部文章

把一张图做成会发光的卡:HOLO·ID

客户给一张图,我做成一张能反光、能翻面、能用手捏住的 3D 闪卡网页。说说它是怎么做出来的,以及前两版为什么不行。

在小红书刷到一条视频:一张动漫卡被手捏着,在摄像头画面里转来转去,一千多赞。

我想做一个能卖的版本。客户给一张图,我做成一张只属于对方的全息闪卡,交付一个网址和一张二维码海报,扫码就能看。这就是 HOLO·ID。

网站:holo.voidcraft-dev.com。所有案例卡都在首页,手机打开倾斜一下最直观。

HOLO·ID 珍藏卡:青丘九尾狐

上图是青丘 · 九尾狐,点开就是这张卡。

前两版为什么不行

最开始我让 GPT 和 Gemini 各做了一版,效果都不行,问题集中在三处:

  • 没有摄像头手势。 原视频火的是「卡在真手里」,它们做的都是黑背景上用鼠标拖。
  • 闪光铺满整张卡。 人脸也在反彩虹,画面发白,像加了滤镜。真闪卡只有背景、边框和特效区反光。
  • 卡面像网页拼的。 文字是半透明的 HTML 块,冲出卡框的部分是手抠的,边缘很硬。

后来交给 Claude 重做,一个会话做完了样品,这三处都解决了。

一张图怎么变成一张卡

合成脚本吃一张竖版插画,大约 10 秒出卡:

  1. 深度图:用 Depth Anything V2 算出画面里每个点的远近。立体感靠它做视差,不用手抠图层。
  2. 人物分割:自动把人物和背景分开。人物不反光,只有背景、边框和特效区闪彩虹。
  3. 破框:取人物里离镜头最近的一块,通常是伸出来的手,放大一点往前挪,倾斜时它会冲出卡框。
  4. 排版:边框、文字、卡背都由程序排,不让 AI 在图上写字。

网页端用 three.js 自己写着色器。电脑上动鼠标、手机上倾斜,就能看到闪光跟着角度走。

用手捏住它

打开「AR 手势」后,MediaPipe 识别 21 个手部关键点:

  • 拇指尖到食指尖的距离除以手掌长度,小于一个阈值就算「捏住」,卡的握持点对准捏合点。
  • 转手腕调角度,张开手掌左右一挥就翻面。
  • 拇指那一块从摄像头画面里再画一遍,盖在卡上,看起来像拇指真的压着卡。

阈值一开始定得太严,手离摄像头远一点就判定不了,实测之后放宽了。真机上还发现很多人不会玩,又补了首次引导:手机立起来,手离 30 到 50 厘米,屏幕上实时画出手指关键点。

防白嫖

卡是网页,截图很容易,所以每张卡都带着主人的信息:

  • 卡背印拥有者、编号和签名哈希。
  • 正面藏一行激光防伪字,正对着看不到,倾斜到一定角度才以彩虹色出现。
  • 页面底部写着「这张卡属于 XX」,第一次打开有「正在为 XX 解封」的动画。

现在能做什么

除了最基础的人物卡,后来又加了几种,每种都能点开看样卡:

  • 网名卡:不需要图,网名做成发光的书法字。
  • 全息名片:横版,背面放联系方式二维码,适合漫展上交换。
  • 双形态卡:左右倾斜,整张卡面从一个形态换到另一个,过渡时能看到光栅条纹。
  • 活动邀请函:每位客人一张印自己名字的入场卡,卡背二维码就是入场码,主办人用手机扫码签到。

出卡流程我写成了一份手册,让便宜的模型照着做。试了 5 单,宠物卡、名片、双形态卡都能直接交付,不用改代码。

接下来

先在小红书发案例,看有没有人买。现在只卖数字卡。如果跑通了,下一步是把同一个链接写进 NFC 贴纸,贴在亚克力卡砖背面,手机一碰就打开这张卡。

想要一张的话,先去 holo.voidcraft-dev.com 挑个样式,再到闲鱼、小红书、抖音搜「宇宙工坊」下单。