前言
December 9, 2025 · View on GitHub
前言
划痕全息(Scratch Hologram)是一种通过在反光材料表面刻划特定弧线来创造立体视觉效果的技术。其原理基于光的镜面反射,当观察者移动时,不同位置的划痕反射光线角度变化产生运动视差,从而形成动态3D图像。这项技术制作简单、成本低廉,在防伪标签、艺术创作和教育演示等领域有广泛应用。与传统全息技术相比,它不需要复杂的光学设备,通过手工或机械在亚克力板、金属板等材料上刻划规则圆弧即可实现立体视觉效果。
EZHolo 简介
EZHolodotNet(简称 EZHolo) 是一个基于 .NET 的交互式工具,用 二维图像 + 深度图 自动生成刮擦全息板的轨迹,并提供 3D 预览、后处理和多种导出方式。
它支持开源深度估算模型 Depth Anything v2、自动采样、手动精修、遮挡计算和手刻图纸生成,面向创作者与工程师。
0. 出发点 & 适用条件
0.1 为什么会有 EZHolo?
传统刮擦全息 workflow 通常需要你3D建模、写脚本、用Rhino/Blender等三维软件插件计算轨迹, 这中间包括:
- 根据深度决定每一条刮痕的弯曲程度和方向;
- 避免划得太密、或者局部完全“刮穿板子”;
- 处理遮挡关系,让隐藏在后面的结构不会出现在不该出现的视角里。
EZHolo 想做的是:把这一整套几何与工程细节打包,让你可以更轻易地基于2D图片创建刮擦轨迹
0.2 必要条件 / 不适用情况
-
必须有深度信息
- 强烈建议你下载 Depth Anything v2 系列模型到软件目录下,EZHolo 会在打开原图后自动估算深度图。
- 如果没有下载模型的话,你也可以使用外部工具生成深度图,然后在 EZHolo 中导入。
⚠️ 如果既没有模型、也没有深度图,这个软件无法给你满意的结果。
-
适用于
- 手里有不错的二维图像资源(照片、绘画、3D 渲染图等);
- 想自己做刮擦全息卡片、金属板、亚克力板;
- 需要为数控写字机、刻字机、光刻 / 雕刻流程生成路径;
-
不适用于
- 用3D模型文件创建刮擦全息?
- EZHolo 目前不支持直接导入 3D 模型文件(如 OBJ、STL 等)进行处理。建议用专用的3D模型生成刮擦全息的工具例如Holocraft。或者先用 3D 软件渲染出二维图像和/或深度图,再导入 EZHolo。
- 创建旋转式刮擦全息?
- EZHolo 是圆弧式刮擦全息的生成工具,不支持旋转式刮擦全息的轨迹生成。若你想生成旋转式刮擦全息生成,请参考EZHolo原型设计或旋转式“刮擦全息”代码分享(带遮挡)- @贰鼠 - Bilibili
- 用3D模型文件创建刮擦全息?
1. 安装与环境准备
1.1 下载
- 前往发行页获取最新版本:
👉 windows_anycpu 最新发行版本
解压后直接运行 EXE 即可。
1.2 配置 Depth Anything v2 ONNX 模型
-
下载 Depth Anything v2 的 ONNX 模型(如
depth_anything_v2_vitb.onnx)。 -
将 模型文件 (
.onnx) 和软件 (EZHolodotNet.exe) 放在同一目录。 -
下次启动软件时会自动加载该模型:
- 导入原图后,软件会立即推理并生成深度图;
- 不再需要你手动二次导入深度图。
💡 可选:你也可以下载多个不同体量、动态适配、室内室外微调的模型,放在同一目录,你可以在软件内部调整加载哪个模型。
⚠️ 不推荐:如果你不想下载模型,也可以只导入自己准备好的深度图来使用 EZHolo——但没有深度图时软件无法干活。
2. 标准工作流程
这一节是“从零做一块板”的操作流程教程,给第一次用 EZHolo 的人看。
步骤 1:导入原图(自动/手动生成深度)
- 在左侧图像区域导入原图:
- 菜单“打开图片”;
- 或直接把图片拖拽到原图区域;
- 或复制图片后在主界面按
Ctrl + V粘贴(会在用户图片目录中保存一份副本)。
- 如果目录中已经放好了 Depth Anything v2 的 ONNX 模型,软件会自动载入模型,导入原图后立即生成对应深度图。
- 如果没有模型,则需要你手动提供深度图(菜单“打开深度图”或把深度图拖入深度区域)。
步骤 2:关键点采样——选出要参与轨迹生成的点
核心目标:得到一张“关键采样点图”,后面的轨迹都是围绕这些点生成。
2.1 基础采样:轮廓 + 明度
通常推荐顺序:
- 先基于深度的轮廓采样一遍,抓大轮廓
- 在轮廓采样中启用“基于深度”模式;
- 执行轮廓采样,得到基于深度梯度的大体轮廓;
- 点击“转移到手动采样”,把这批点转到手动采样模式中。
- 关掉“基于深度”,用常规(基于色彩)的轮廓采样补细节
- 关闭“基于深度”选项;
- 再跑一次轮廓采样,用色彩信息补充细节轮廓;
- 再次“转移到手动采样”合入同一套手动点集。
- 明度采样(可选)
- 如果画面里有高光、发光体、特殊纹理,可以再做一次明度采样;
- 同样通过“转移到手动采样”合入。
2.2 手动采样工具精修(推荐套路)
在“手动采样”工具组里,推荐这样打磨点集:
- 橡皮擦清理背景
- 把橡皮的“最浅/最深可擦高度”设置为背景所在的深度区间;
- 在背景区域大致刷一遍,快速清掉不必要的背景点。
- 梯度偏移小步多次
- 使用梯度偏移工具,对全局执行“向梯度方向偏移 1%”;
- 多次重复少量偏移,比一次偏移太多更稳定,能让点分布更贴合深度变化。
- 密度降低工具去重
- 使用密度降低工具控制总点数和局部密度;
- 缓解轨迹过密、可能刮穿板子的区域。
2.3(可选)保存点图以便下次使用
- 在菜单
文件 → 点图中导出:- PNG 点图(合一 / 仅手动);或
- SVG 点图(合一 / 仅手动,所有采样点以
<circle />保存)。
- 下次可以通过“导入点图”重新载入当前这套采样点,不用再从头采一遍。
步骤 3:刮擦轨迹生成
这一阶段是把“点”变成“可刮的轨迹”。
3.1 标准模式(默认)
- 在“轨迹生成模式”中保持 标准模式(默认选中);
- 调整“零高度”参数,让整体“凸/凹”和弧线弯曲程度更像你想要的空间布局;
- 曲率系数、拉伸系数属于进阶调参:
- 初次使用可以先不动;
- 打印出来效果不佳时,再根据实践调整,或者加群问群主。
3.2 遮挡计算模式(可选,v2.0+)
- 在标准模式下确认轨迹大体 OK 后,把轨迹生成模式切换为 遮挡计算模式;
- 软件会根据深度信息做前景遮挡分析和贝塞尔分段裁剪,右下角任务列表会显示进度;
- 完成后得到一套“考虑遮挡”的轨迹,预览和导出都会反映真实的前后关系。
3.3 手刻模式(可选)
如果你打算纯手工刻而且:
- 不需要那么复杂的贝塞尔轨迹;
- 更希望得到结构更规整、可读性更高的线稿;
可以尝试把模式切换为 手刻模式:
- 轨迹不再是三次贝塞尔,而是一系列半径不同的圆弧;
- 为简化结构,没有遮挡计算;
- 更适合作为手刻图纸的基础。
步骤 4:预览
4.1 动态预览
- 打开动态预览窗口,调整步值,观察不同视角下的效果;
- 这个预览只用于交互查看,不会导出图像文件。
4.2 3D 视图(可选)
- 如果你会平行眼 / 斗鸡眼看立体图的技巧,可以点击 3D 视图按钮;
- 生成平行视立体图,支持自动播放和模式切换,方便验证最终空间效果。
步骤 5:导出
根据你在步骤 3 选择的轨迹生成模式不同,导出的内容也不同。
5.1 标准 / 遮挡模式下的导出
- 导出的 SVG 文件包含许多轨迹段,每个采样点对应一段或多段曲线;
- 可以交给:
- 写字机 / 绘图机;
- 激光 / CNC 雕刻机;
- 或者导入到 Blender 等软件中进行光学模拟等自定义工作流。
5.2 手刻模式下的导出
- 导出结果是一个文件夹,包含:
- 多个 SVG 文件(多层手刻图纸);
- 一个 HTML 文件;
- 使用浏览器打开该 HTML,即可进行简单排版与打印输出;
- 打印出来后配合圆规/刻针进行纯手工刮刻。
3. 功能总览(查字典向)
这一节是功能索引,不强调操作顺序,方便查哪些东西“有没有 / 在哪”。
3.1 采样与配置
- 自动采样策略
- 轮廓采样:
- 支持基于色彩的常规轮廓采样;
- 支持“基于深度”的轮廓采样,在深度梯度较大的位置布点,可选二值降噪。
- 明度采样:
- 按亮暗分布采样,适合高光、发光体、纹理区域。
- 轮廓采样:
- 手动采样
- 画笔添加点、橡皮擦删除点;
- 支持按深度范围限制擦除;
- 支持导入/导出点数据。
- 采样结果管理
- 各类采样策略都可“转移到手动采样”;
- 点图导入/导出:
- PNG 点图(合一 / 仅手动);
- SVG 点图(合一 / 仅手动,点用
<circle />表示)。
- 配置管理
- 配置导入/导出;
- 支持“每次启动使用上次退出时的配置”。
3.2 采样后处理与修饰工具
- 涂抹工具:将异常外边缘采样点向内抹平;
- 梯度偏移工具:
- 局部涂抹或全局偏移;
- 沿深度梯度方向或反方向轻微移动点位;
- 高级去重 / 密度降低工具:
- 均匀减少点数,控制局部密度;
- 橡皮工具增强:
- 智能边缘橡皮;
- 最浅/最深可擦高度约束。
3.3 可视化与界面
- 高度指示器(图像两侧 + 右下角);
- 梯度指示器(显示梯度大小与方向);
- 轨迹密度显示:
- 热力图形式揭示重叠密集区域;
- 左上角显示最高重叠次数;
- 三视图联动:
- 原图 / 深度图 / 采样结果同步;
- 鼠标中键拖拽移动视图,
Ctrl+ 滚轮缩放; Shift+ 滚轮可调整采样点图/深度图比例;- 按住
Ctrl移动鼠标时三视图在同一位置显示信息; - 三视图高度可拖动调整;
- 鼠标悬浮时在光标旁显示当前深度值;
- 多语言(机翻)界面:简中、繁中、英语、日语、法语、俄语、德语等。
3.4 轨迹生成与预览
- 轨迹生成模式:
- 标准模式;
- 遮挡计算模式(考虑前景遮挡,进行贝塞尔分段裁剪);
- 手刻模式(不带遮挡,使用半径不同的圆弧简化轨迹)。
- 参数:
- 零高度;
- 曲率系数;
- 拉伸系数;
- 以及其他轨迹形状相关参数。
- 预览:
- 刮擦预览;
- 3D 预览(平行眼 / 交叉眼,支持自动播放)。
3.5 导出与手刻图纸
- 配置导入/导出(JSON);
- 点图导入/导出(PNG / SVG,点为
<circle />); - 轨迹导出(SVG
<path />,可带遮挡信息); - 手刻图纸生成模式:
- 最多 64 层图纸;
- 导出包含多 SVG + HTML 的文件夹;
- HTML 使用
TEMPLATE.html模板,可自行改写排版。
4. 刮擦轨迹生成原理(简要说明)
本节是对底层算法的概览,便于二次开发或自行验证。
4.1 从深度到曲线“弯曲程度”
设深度图为 depthImage,对每个采样点 :
-
归一化高度
以某个基准高度zeroHeight为 0: -
将高度映射为曲率
把深度映射到图像宽度范围:- 深度为正:轨迹向一个方向弯曲(例如“凸出”);
- 深度为负:向相反方向弯曲(“凹入”)。
-
中心偏移补偿
为保证曲线的中点落在原始采样点附近,引入一个基于 的偏移量:
4.2 三次贝塞尔控制点构造
在图像平面上,以补偿后的中心点:
构造起点、终点与两个控制点:
4.3 三次贝塞尔曲线
最终一条刮擦痕迹段由三次贝塞尔曲线表示:
- 为起点 ;
- 为终点 ;
- 控制弯曲形状,
aFactor等参数调节整体曲率。
4.4 SVG 路径生成与遮挡切分
-
基础路径生成
每个采样点会生成一段贝塞尔曲线指令并串联到同一条 SVG
<path>中:<path d="M P0.x,P0.y C P1.x,P1.y P2.x,P2.y P3.x,P3.y ..." /> -
遮挡处理(v2.0)
- 在多个视角下对每条曲线采样;
- 利用深度图比较前后遮挡;
- 当某段落在遮挡物后方时,将对应的贝塞尔段切分并丢弃;
- 最终导出的路径仅保留“能被看到”的划痕部分。
5. 常见问题 & 小贴士
-
Q:没有下载 ONNX 模型可以用吗? A:可以,但前提是你自己提供深度图。没有深度图时软件无法生成 3D 轨迹。
-
Q:SVG 点图和 SVG 轨迹有什么区别?
- SVG 点图:每个点是
<circle />,用于保存/编辑采样点; - SVG 轨迹:使用
<path />描述真实刮擦轨迹,用于实际加工或模拟。
- SVG 点图:每个点是
-
Q:3D 预览可以导出图像吗? 目前不行,只用于交互预览立体效果。
-
Q:多语言支持? v1.6.1 起支持简体中文、繁体中文、英语、日语、法语、俄语、德语等多语言(为机翻初版)。
教程视频
v1.1
v1.5.1
v2.0
新版本的功能见对应版本发行页面
下载 & 版权
-
下载地址: 👉 windows_anycpu 最新发行版本
-
本项目使用 Apache-2.0 许可证开源。欢迎在遵守协议的前提下二次开发或集成到你的流水线中。
© 2025 Yigu Wang
