点画风格着色器:URP-LWRP-Shaders 中 Stipple 抖动技术与 Bayer 矩阵原理
点画风格着色器:URP-LWRP-Shaders 中 Stipple 抖动技术与 Bayer 矩阵原理
【免费下载链接】URP-LWRP-ShadersA Collection of Shader For URP(LWRP) Render Pipeline项目地址: https://gitcode.com/gh_mirrors/ur/URP-LWRP-Shaders
点画风格着色器(Stipple Shader)是URP-LWRP-Shaders项目中辨识度最高的特效之一。它借助 Stipple 抖动技术,把物体表面按距离"拆解"成密密麻麻的离散小点,呈现出类似报纸印刷网点的半调风格,再配合Bayer 矩阵(有序抖动矩阵)控制点阵密度,实现了从实体模型到点状消散的丝滑过渡。这套着色器运行在 URP(LWRP) 渲染管线(Unity 2020.3 / URP V10.3)之上,适合新手学习"如何用着色器实现点画风格"。
什么是点画风格着色器?Stipple 抖动的核心概念
Stipple(点画)源于传统绘画与印刷:用无数小点的疏密来表现明暗与轮廓。在实时渲染中,点画风格着色器把这一理念搬进 GPU——每个像素不再"完整"绘制,而是根据某个阈值决定保留还是丢弃,大量像素叠加后就形成了点阵化的图案。
URP-LWRP-Shaders 中的这个点画着色器还有一个特殊之处:它把"点化"与距离绑定。物体离相机越近,点阵越完整;越远,点越稀疏,直到完全消散。这正是 README 里提到的 "Steplling distance fade Shader",视觉上像科幻游戏里常用的"传送消散"或"扫描淡出"效果。
Stipple 着色器的 Bayer 矩阵原理:4×4 阈值矩阵如何工作
Bayer 矩阵是有序抖动(Ordered Dithering)的核心工具,本质是一张预先算好的阈值表。这个着色器的核心算法位于 Stiplle Unlite Shader.shader 的MakeStippling函数中,用的是经典的 4×4 矩阵:
1, 9, 3, 11, 13, 5, 15, 7, 4, 12, 2, 10, 16, 8, 14, 6这段"随机数"矩阵正是 Bayer 矩阵的变体。它的工作流程如下:
- 把屏幕坐标换算成像素坐标,再对 4 取模,定位到矩阵的某个格子;
- 取出对应阈值并除以 17,归一到 0~1 区间;
- 用
clip()把"透明度值小于阈值"的像素直接剔除——被剔除的像素变成空洞,留下的像素组成点阵。
因为每个像素落在矩阵的不同位置,同一帧内不同像素拥有不同阈值,于是产生了均匀分布、又有规律的网点图案。想直观理解"阈值矩阵"的样子,可以对照项目里的网格纹理 Squares Grid.png——规则的小方格阵列正是这种有序结构的可视化。
在 URP 中快速使用点画着色器的步骤
项目已经准备好可直接使用的材质,新手无需写一行代码:
- 克隆仓库:
git clone https://gitcode.com/gh_mirrors/ur/URP-LWRP-Shaders; - 用 Unity 2020.3 打开项目,等待 URP(LWRP) V10.3 包导入完成;
- 打开场景 Stepllin effect.unity,即可看到点画消散效果;
- 若想自己接入,把材质 Custom_Stiplle Unlite Shader.mat 拖到任意模型上即可。
关键参数调节技巧:Camera Threshold 与 Transparency
点画效果由两个参数控制,都在材质的 Inspector 面板中:
| 参数 | 默认值 | 作用 |
|---|---|---|
Camera threshold | 1.8 | 点画生效的距离阈值,数值越大,消散开始的越早 |
Transparency Power | 0.9 | 点阵密度随距离衰减的速度,越小点越稀疏 |
Color | 红色 HDR | 基色,可换成任何发光色增强科技感 |
项目默认材质把基色调成了 HDR 红色,配合深度写入的 DepthOnly Pass,即使模型"点化"到只剩零星几点,仍能正确参与深度测试,不会穿帮。想调出"渐隐渐显"的节奏,核心思路是让Camera threshold与Transparency两个数值互相配合,例如:阈值加大、透明度幂次减小,点阵会更"细碎"。
点画着色器的源码结构解析
整个着色器只有两个 Pass,结构非常清晰,适合当作 URP 自定义着色器的入门模板:
- 主 Pass:CG 语言编写,包含顶点变换、雾效、以及上文的核心
MakeStippling点画函数; - DepthOnly Pass:引用 URP 自带的
DepthOnlyPass.hlsl,保证点化后的物体仍能正确写入深度,用于阴影与深度预处理。
源码还示范了两个实用技巧:用_WorldSpaceCameraPos计算片元到相机的距离;用i.vertex.xy / i.vertex.w * _ScreenParams.xy把裁剪坐标换算成像素坐标。这两行代码在后续很多屏幕空间特效里都能复用。
总结
点画风格着色器把Stipple 抖动技术与Bayer 矩阵这两个经典图形学概念封装进了不到 200 行的 URP 着色器里,效果却相当惊艳。无论你是想学习有序抖动原理、研究屏幕空间像素计算,还是单纯想给项目加一个"像素消散"的入场特效,都可以直接参考 Stiplle Unlite Shader.shader 的源码,把它作为你第一个"看得懂、改得动"的自定义 URP 特效着色器。
【免费下载链接】URP-LWRP-ShadersA Collection of Shader For URP(LWRP) Render Pipeline项目地址: https://gitcode.com/gh_mirrors/ur/URP-LWRP-Shaders
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
