无缝金属管线(Seamless Metal Pipeline)
把一组矢量 shape(车标/图标)渲染成整体一块金属实心的质感版本,彻底消除多部件拼接处的白色线条/接缝。
何时调用
- 用户已有一套矢量标志(纯黑/单色正标),想要「金属质感」衍生版用于提案、展示、小红书配图。
- 出现「重叠/交叉处露出白色描边、标志被切碎成多片」的问题——本技能就是为修这个而生。
- 用户说「金属质感一体化」「无缝金属」「消除接缝白线」「给车标加金属感」等。
核心原理(为什么白线会消失)
- 布尔并集:用 shapely 把所有 shape 拆环 → Polygon →
unary_union,得到一张完整剪影。重叠/交叉处不再是各自独立的两片。 - 连续渐变只填一次:金属反射渐变(多色标竖直+轻微对角)整张只填充并集一次 → 重叠/交叉处颜色天然连续,无任何内部白线。
- 仅外轮廓高光:白色描边只描并集最外轮廓一条(低透明度),内部零线条。
- 效果:标志呈「整块金属实心」,而非多片拼贴。
前置依赖
- Python:
shapely(做布尔并集,对自交多边形会自动buffer(0)修复)、matplotlib、numpy。 - 源矢量:提供每个标志的 shape 列表
[ (path_like, "fill"), ... ],path_like需有.to_mpl()返回matplotlib.path.Path。(本项目由hist_v1.P2提供;其它项目只要能拿到 matplotlib Path 即可。)
附带资源({SKILL_ROOT}/scripts/)
| 文件 | 作用 |
|---|---|
metal_lib.py |
引擎库(引擎无关):build_union / bounds / render_all 等,输入 shape 列表 → 输出金属版。直接拷到目标系列 04-脚本即可用。 |
sample_driver.py |
示例驱动:演示如何把引擎接入你的源模块,只需改 3 处(import 源模块 / 注册表 / 输出目录)。 |
使用步骤
- 把
metal_lib.py拷到目标系列(如XX-系列/04-脚本/)。 - 写一个驱动(参考
sample_driver.py):
-from metal_lib import build_union, bounds, render_all
- 遍历你的注册表:geom = build_union(fn())→bnd = bounds(geom, pad=0.22)→render_all(name, geom, bnd, out_dir) - 运行驱动。每个标志输出 5 件:
-<字>车标_金属质感.png— 主推:银铬 · 深底
-<字>车标_金属_黄金.png— 黄金 · 深底
-<字>车标_金属_青铜.png— 青铜 · 深底
-<字>车标_金属对比.png— 银铬深/浅 + 黄金 + 青铜 四变体
-<字>-金属.svg— 带linearGradient的 SVG 金属源(可缩放、浏览器预览)
三个材质色标
metal_lib.metal_stops(kind) 支持 silver / gold / bronze,均为竖直反射带+轻微对角(光自左上)。要换材质/调反射带,改这里即可。
注意事项
- 金属版是展示/提案衍生。正式商标注册与第 12 类近似比对,一律以 v1 单色正标(剪影)为准——金属渐变只是让提案图更像「车标该有的样子」。
- 每字自动按并集几何计算正方形构图框(带 padding),渐变方向、投影、描边都随框缩放,多字批量时构图一致。
- ribbon/弧带等可能自交的填充几何,引擎已用
buffer(0)自动修复,不会因TopologyException中断批量。 - 标志本身的负空间(部件间本来就分开的间隙)会露深色背景——这是设计造型,不是金属接缝;金属管线只消除「同一实心上的白线」。
真实案例
本项目「09-甲骨文车标」系列:17 字纯黑 v1 正标 → 用 metal_oracle.py(驱动)+ metal_lib.py(引擎)批量出无缝金属版,覆盖纯多边形(山/鼎/中)、ribbon(风/龙/水/驰)、圆盘(日/月/马首)全部几何类型,重叠/交叉处白线全部消除。