news 2026/9/11 12:18:18

用Shader Graph定制Driven Decals:子图与12个Shader属性的贴花着色器开发完全手册

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用Shader Graph定制Driven Decals:子图与12个Shader属性的贴花着色器开发完全手册

用Shader Graph定制Driven Decals:子图与12个Shader属性的贴花着色器开发完全手册

【免费下载链接】driven-decalsA mesh-based PBR decal system for Unity's universal render pipeline.项目地址: https://gitcode.com/gh_mirrors/dr/driven-decals

Driven Decals是一款面向 Unity 通用渲染管线(URP)的PBR 贴花系统:它把贴图"投影"到场景网格上,生成一块真正的投影网格,再交给Shader Graph自定义着色器来渲染。本文带你读懂项目中 8 个贴花着色器与 5 个子图(SubGraph)的职责,并给出 12 个 Shader 属性的完整速查表,帮助你快速定制属于自己的 Driven Decals 贴花材质 🎨。

为什么贴花系统离不开 Shader Graph?

Driven Decals 的工作方式是"两步走":

  1. MeshProjection 投影:把贴花的 UV 信息"打"到目标网格上,生成投影网格(MeshProjection.cs);
  2. 着色器渲染:由材质上的 Shader Graph 着色器消费这些 UV、边界、淡出等参数,完成最终的 PBR 渲染。

因此,只要你的自定义着色器能正确处理这套参数,就能自由控制贴花的最终外观。下面是官方演示:贴花让圆柱体呈现出开裂混凝土的效果,裂缝下还露出亮色图案。

快速安装:获取 Driven Decals 资产包

  1. 打开 Unity(2019.3.0f6+ / URP 7.2.1+),进入Window → Package Manager
  2. 点击左上角+,选择Add package from git URL...
  3. 粘贴仓库地址并添加:
git clone https://gitcode.com/gh_mirrors/dr/driven-decals

安装完成后即可在项目窗口看到 Driven Decals。全部内置着色器位于 Runtime/Shaders/,随包免费使用(MIT 协议),详见 package.json。

资产清单:8 个贴花 Shader 与 5 个子图

打开 Runtime/Shaders/ 目录,你会看到按"光照复杂度"分层的一组成品着色器,都可以直接复制到 Inspector 的 Shader 下拉框中使用(输入decal可过滤):

着色器适用场景文件
Decal Diffuse仅漫反射 + 全局 Metallic/Smoothness/AmbientDecal Diffuse.shadergraph
Decal Diffuse Normal漫反射 + 法线贴图Decal Diffuse Normal.shadergraph
Decal Diffuse Emissive漫反射 + 自发光Decal Diffuse Emissive.shadergraph
Decal Diffuse Unlit无光照、纯贴图Decal Diffuse Unlit.shadergraph
Decal Full PBR完整 PBR(MSO + 法线)Decal Full PBR.shadergraph
Decal PBR Metallic Unity StyleUnity 风格 Metallic 工作流Decal PBR Metallic Unity Style.shadergraph
Decal PBR Specular Unity StyleUnity 风格 Specular 工作流Decal PBR Specular Unity Style.shadergraph
Decal Untextured Unlit纯色贴花Decal Untextured Unlit.shadergraph

配合它们工作的还有5 个子图(.shadersubgraph),这是定制时的核心积木:

  • Decal UV.shadersubgraph—— 处理 UV 的第一关:按_Bounds采样正确的纹贴区域,并自动完成_FlipU/_FlipV翻转。切记:不要直接使用网格自带的 UV0 通道,必须先经过它。
  • Fade near z bounds.shadersubgraph—— 根据_ZFadeStart让贴花在接近自身 z 边界时柔和淡出,避免生硬截断。
  • Fade by angle.shadersubgraph—— 根据_MinAngleFadeRadians/_MaxAngleFadeRadians对大角度变形的区域做淡出。
  • Flip normal.shadersubgraph—— 翻转法线,用于修正贴花在特定朝向下的光照异常。
  • Offset in viewspace.shadersubgraph—— 按_OffsetViewZ把贴花顶点向相机方向偏移一小段距离,防止 z-fighting(所有内置着色器都使用了它)。

官方示例贴花"紧固件"就是一套完整的 PBR 纹理组(DiffuseAlpha + MSO + Normal),可直接观察各贴图通道的渲染效果:

![Driven Decals 贴花纹理组示例:紧固件 DiffuseAlpha 漫反射贴图](https://raw.gitcode.com/gh_mirrors/dr/driven-decals/raw/d334d4b6aa4e080a9cf911eab591cbcebd59e0e7/Runtime/Sample Decals/Fasteners/Material/fasteners - DiffuseAlpha.png?utm_source=gitcode_repo_files)

5 个子图的实际效果:z 淡出与角度淡出

角度淡出(Angle Fade)是最能体现子图价值的功能——当贴花投影到与视角夹角很大的曲面时,边缘会严重拉伸变形,Fade by angle 会按角度区间把它淡掉。两个参数差得越多,过渡越柔和:

核心速查表:12 个 Shader 属性

定制着色器时,Driven Decals 会按名称在材质上查找以下属性(DecalAsset.cs 的 Inspector 会实时提示缺失项)。所有内置着色器都包含这 12 个属性:

#属性类型级别作用
1_DiffuseAlphaTexture✅ 必需漫反射+Alpha;用于 DecalAsset 预览图与缩略图生成
2_BoundsVector4✅ 必需定义贴花在纹理上的矩形区域(uMin, vMin, uMax, vMax)
3_OpacityFloat 0–1推荐整体不透明度,运行时可经 PropertyBlock 修改
4_FlipUBool推荐水平翻转纹理区域,Decal UV 子图可直接消费
5_FlipVBool推荐垂直翻转纹理区域
6_ZFadeStartFloat 0–1推荐靠近 z 边界时的淡出强度,由 Fade near z bounds 实现
7_MinAngleFadeRadiansFloat推荐角度淡出下限(弧度)
8_MaxAngleFadeRadiansFloat推荐角度淡出上限,与下限之差决定过渡软硬
9_OffsetViewZFloat推荐视空间向相机的偏移量,防 z-fighting
10_MetallicFloat可选金属度(PBR 着色器)
11_SmoothnessFloat可选光滑度(PBR 着色器)
12_AmbientFloat可选环境遮蔽强度(PBR 着色器)

⚠️ 必需属性缺失时贴花系统无法工作;推荐属性缺失时对应功能(淡出、翻转)会失效,但整体仍可运行。

高级着色器还会扩展更多属性,例如 Decal Full PBR 增加了_MetallicSmoothnessOcclusion合并贴图与三个 Multiplier;Decal PBR Specular Unity Style 则引入_SpecularSmoothness_EmissionMap_OcclusionMap等,按需参考即可。

三步上手:复制、改造、验证

第 1 步:复制模板。打开 Decal Diffuse Normal.shadergraph(官方推荐的定制起点),另存为自定义 Shader Graph。

第 2 步:保留关键节点。确认图中包含Decal UV子图(接在 UV 采样前)与Offset in viewspace子图(接在顶点位移上),再按需要挂接 Fade 类子图、增删贴图与光照节点。

第 3 步:用 DecalAsset 验证。创建材质并指定新着色器,然后在 DecalAsset Inspector 中拖入材质——若属性缺失会列出清单,贴图预览正常即代表兼容 ✅。

最后把贴花对象(Hierarchy 右键3D Object → Driven Decal)的灰色包围盒对准目标网格,点击Project mesh即可看到投影结果,例如把贴花精确打到模板场景的安全帽上:

常见问题与最佳实践

  • 不要用 Legacy 的Decal着色器Legacy Shaders/Decal与本系统不兼容;DecalOverlayBoundsDecalThumbnail仅供编辑器 Inspector 使用(Editor/Resources/Shaders/)。
  • 远距离/掠射角出现闪烁?调大_OffsetViewZ,或修改Offset in viewspace子图的偏移算法。
  • 运行时切换外观:修改_Opacity、切换 DecalAsset 都很廉价,改动后调用贴花上的SetupMaterialPropertyBlock()生效;参考 DecalSpawner.cs 示例脚本。
  • 投影完成后贴花即成"普通网格":不会跟随目标变形,不适合骨骼动画目标;运行时动态投影会造成掉帧,适合静态场景细节。
  • 完整属性说明与进阶技巧见官方文档 Documentation~/DrivenDecals.md 的Custom Shaders章节。

小结

Driven Decals 把"投影"与"渲染"解耦:网格投影负责形状,Shader Graph 着色器负责外观。吃透 5 个子图(Decal UV、两个 Fade、Flip normal、Offset in viewspace)和 12 个属性后,你就可以复制任意内置着色器,几分钟内造出专属的 PBR 贴花材质 🚀。

【免费下载链接】driven-decalsA mesh-based PBR decal system for Unity's universal render pipeline.项目地址: https://gitcode.com/gh_mirrors/dr/driven-decals

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 12:18:09

亚马逊广告费越来越贵?这4类工具帮你精准识别浪费钱的关键词

2026年,亚马逊广告平均点击成本(CPC)持续走高,部分品类CPC同比上涨超过30%。对于跨境电商卖家而言,广告预算的每一分钱都比以往更需精打细算。然而,很多卖家面临的现实是:广告支出在涨&#xff…

作者头像 李华
网站建设 2026/9/11 12:16:48

必藏干货:Qwen3-VL硬核实测:从2D图片到3D模型的惊人转变

硬核实测:Qwen3-VL如何实现2D到3D的惊艳飞跃,预判AI未来形态! 大家好!最近各大媒体和外网对通义千问3-VL(Qwen3-VL)的测试,大多集中在扫描发票或描述图像/视频内容等场景。然而,我最…

作者头像 李华
网站建设 2026/9/2 20:54:20

节点异常时先确认调度和驱逐路径

节点异常时先确认调度和驱逐路径节点进入 NodeNotReady 时,先检查条件事件、磁盘水位和驱逐记录,再判断是否需要迁移工作负载。不要直接把单个症状归因于某个服务。 使用 kubectl 调取节点的 Event 事件与 Kubelet 日志进行分析: kubectl des…

作者头像 李华
网站建设 2026/8/31 7:49:45

BitScope Blade+CM4打造口袋示波器:GPIO引脚与实战解析

干这行久了,工具箱里最怕的不是缺螺丝刀,而是缺一台能随手抓出来就看波形的示波器。台式的太占地方,USB的又要拖着电脑跑,直到我上手了BitScope Blade for Raspberry Pi这套组合,才发现原来“口袋实验室”这个词不是营…

作者头像 李华