尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

深度解析 srt-whiteboard-animation 的 contour-wipe 上色:阻力场与双频正弦波前沿算法

深度解析 srt-whiteboard-animation 的 contour-wipe 上色:阻力场与双频正弦波前沿算法 深度解析 srt-whiteboard-animation 的 contour-wipe 上色阻力场与双频正弦波前沿算法【免费下载链接】srt-whiteboard-animation将 SRT 字幕做成暖米黄纸张底的流式笔迹白板手绘动画 skillmask 分区遮罩编排 stream 连续笔迹ink→color。项目地址: https://gitcode.com/gh_mirrors/sr/srt-whiteboard-animationsrt-whiteboard-animation 是一个把 SRT 字幕变成暖米黄纸张底白板手绘动画的开源项目笔尖先沿线稿落墨ink再自动添彩color。其中最像人画的部分就是默认的contour-wipe轮廓扫描上色算法——颜色不是机械地涂满而是沿着线条蔓延。本文用通俗的方式拆解它的两个核心阻力场与双频正弦波揭示前沿并给出 3 个可调参数帮你把上色节奏调到满意。先看效果颜色如何顺着线流淌在整条白板动画流水线上每个区域分两段作画起笔段铺线稿添彩段还原原色。contour-wipe 就是添彩段的默认策略--color-fill默认值另一个备选brush是沿笔迹轨迹刷色。上图中可以看到颜色像潮水一样从画面上方漫下来遇到轮廓线会明显减速越过去后再加速——这正是阻力场在起作用。原始线稿输入如下16:9 手绘插图、大量留白核心机制一阻力场Resistance Field问题如果用一条平直的水平线从上往下擦出颜色轮廓上方的色块会整块跳出来非常机械。解法把线稿墨迹转换成一张 0~1 的阻力图颜色前沿到达阻力高的地方就被扣住几像素从而产生先卡在轮廓上、再缓慢越过的观感。阻力场的构建在 scripts/stream_render.py_build_resistance_field中共 5 步步骤做什么效果1. 墨线二值化原图自适应阈值得到墨迹像素找出所有轮廓位置2. 椭圆核膨胀按画面尺寸取 3~17px 结构元细线变粗形成阻挡带3. 高斯模糊半径 ≈ 短边/220硬边变渐变过渡自然4. 归一化除以峰值阻力统一映射到 [0, 1]5. 逐行向下传播resistance[row] max(自身, 上一行 × decay)每条轮廓向下方投出指数衰减阴影第 5 步是精髓衰减系数wipe_decay默认 0.86意味着轮廓正下方的阻力每行只剩约 86%半衰期约 4.6 行——所以卡住只发生在轮廓附近一小段距离内再往下颜色恢复匀速形成慢—快的自然节奏。整个阻力场是静态的与上色进度无关所以每个区域只算一次、全程复用性能开销可以忽略。核心机制二双频正弦波揭示前沿如果前沿是一条完美水平线扫描依然显得生硬。项目用一个双频正弦波把前沿变成水波起伏实现在 scripts/stream_render.py_build_wipe_wavewave[x] sin(x / wave_px1) 0.35 × sin(x / wave_px2 1.7) 其中 wave_px1 max(24, 宽/20)wave_px2 max(8, 宽/72)主波幅值 1.0周期约为画面宽度的 1/20 —— 大的波浪次波幅值 0.35 且带 1.7 弧度相位差周期约为宽度的 1/72 —— 叠加的细碎涟漪两个频率不可通约波形不会周期性重复前沿看起来就像水面被风吹出的不规则波纹而不是正弦摆拍。两者如何合成每帧的阈值公式在 scripts/render_stream_whiteboard.py_wash_contour中每一帧都计算一张全区域的阈值图threshold[y, x] lead wave[x] − resistance[y, x] × delay_px三个项各有分工lead总进度lead ease_in_out_sine(progress) × sweep − delay_px配合正弦缓动起止慢、中间快从画面上方一路扫到下方wave[x]横向波动让前沿左右上下起伏resistance × delay_px纵向扣减delay_px由区域高度 × 0.04 钳制在 12~52px阻力越大前沿被压得越低——颜色就在线条处停顿。某像素满足y ≤ threshold即被揭示把原图颜色写入共享画布。整图版实现见 scripts/stream_render.pywash_color_contour。笔尖的涂色感同样来自数学笔尖横向按wipe_blocks默认 18趟来回扫动每趟用同一个正弦缓动奇数趟反向纵坐标取当前列已揭示像素的最底部行——于是手部素材看起来真的在跟随色面边缘涂抹另一组示例中香蕉被大猴抢走的片段同样使用 contour-wipe 上色可以对照观察颜色越过轮廓时的减速效果3 个可调参数如何调出理想节奏contour-wipe 暴露了 3 个命令行参数定义见 scripts/stream_render.py参数默认值调大调小--wipe-decay0.86轮廓阴影更厚颜色在线条处黏得更久更快越过轮廓趋于平扫--wipe-delay-ratio0.04轮廓处扣减更多像素停顿感更强停顿变短节奏更急--wipe-blocks18笔尖来回趟数变多涂抹更细碎笔尖大幅横移接近挥扫单幕渲染时配合使用--color-fill contour-wipe为默认值参数说明见 scripts/render_stream_whiteboard.pyENV_PY scripts/render_stream_whiteboard.py 图片 标注.json 输出.mp4 assets/drawing-hand.png \ --color-fill contour-wipe --wipe-decay 0.9 --wipe-delay-ratio 0.05调参建议线条密集的场景如复杂插画--wipe-decay 0.9--wipe-delay-ratio 0.05让颜色在密集轮廓处多停留简约构图、希望节奏明快保持默认或--wipe-decay 0.8让扫描更利落。小结contour-wipe 用两个轻量数学构件低成本换来了人味儿阻力场膨胀→模糊→归一化→向下指数衰减让颜色前沿垂直方向上遇到轮廓会减速双频正弦波让前沿水平方向上水波起伏二者叠加进同一个阈值公式再配合 18 趟正弦缓动的笔尖扫动就得到颜色沿着线蔓延、手在跟着涂的白板动画效果。完整的标注格式、分镜流程与质量检查清单可继续阅读 README.md 和 SKILL.md示例素材在 examples/ 目录拿来对照算法效果最直观。【免费下载链接】srt-whiteboard-animation将 SRT 字幕做成暖米黄纸张底的流式笔迹白板手绘动画 skillmask 分区遮罩编排 stream 连续笔迹ink→color。项目地址: https://gitcode.com/gh_mirrors/sr/srt-whiteboard-animation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表