案例 22.9综合:弹孔、脚印与血迹进阶
目标:在一个场景里混合使用三种贴花,各取所长。
- 墙上的弹孔:自写屏幕空间贴花,开启受光与法线贴图,每个弹孔绕投影轴随机旋转、随机大小。它们共用一个材质,可以用 GPU Instancing 合批。
- 地上的一串脚印:同样是屏幕空间贴花,Alpha 混合的深棕色,左右脚交替偏移。脚印这种大量、短暂、贴在任意地形上的贴花,正是投影盒的强项。
- 墙角的血迹:一个投影盒同时覆盖地面和墙根,角度衰减(55°–85°)让它在墙面上自然收住,而不是被拉成竖条。
- 地面箭头:URP Decal Projector,与自写贴花在同一画面中共存。
- 油桶上的警示标签:网格贴花,由
DecalMeshBuilder从圆柱上裁出,随油桶移动时不需要任何重新计算。

性能与工程建议
- 屏幕空间贴花的开销与屏幕覆盖面积成正比。一个贴在相机脚下的大投影盒会让整个屏幕下半部分都执行贴花片元着色器;盒子尽量贴身,深度只覆盖需要的范围。
- Overdraw:大量贴花互相重叠(比如密集弹孔),每个像素会被每个盒子都处理一次。可以把一组弹孔合并到一张图集、一个投影盒里。
- 绘制顺序:同为 Alpha 混合的贴花,重叠时谁在上面取决于绘制顺序(透明队列按距离排序)。需要固定顺序时调整材质的
renderQueue,或者 URP Decal Shader Graph 的 Draw Order。 - 不该被贴的物体:投影盒会贴到盒内的所有不透明物体上,包括走过的角色。URP 的方案是 Rendering Layers(Feature 勾选 Use Rendering Layers,投影器设置 Rendering Layer Mask);自写贴花可以用模板测试:让角色写入一个模板值,贴花 Pass 用
Stencil { Ref 1 Comp NotEqual }跳过这些像素(模板测试见第 16 章)。 - 与 Built-in 管线的差异:Built-in 没有内置的贴花系统,常用的 Projector 组件在 URP 中不受支持;HDRP 的 Decal Projector 与 URP 的接口相似但实现不同,迁移项目时需要重新配置材质。