HDRP,自定义DecalGraph,以实现AlphaCutoff等功能
- 综述
-
- 1. Emission无法AlphaCutoff
- 2. Decal根据Layer判断是否接受投影,而不是Lit.ReceiveDecal
综述
HDRP自带了多种Shader,如Lit,Decal,Unlit,LayeredLit,TerrainLit等,可实现多种效果,具体参数可查询UnityLearn或官方文档。在笔者的使用过程中(Unity 2019.4.10f, HDRP7.3.1),遭遇了某些Decal表现上的问题,所以尝试以其他方式实现。
1. Emission无法AlphaCutoff
普通Decal | 开启Emission后 |
---|---|
![]() | |
| |
很明显,BaseMap上部分Alpha为0,直接Decal上去也进行了Cutoff,但是对于Emission,用相同贴图进行采样就没有进行CutOff,导致圆周外围部分也进行了Emission,与需求效果不符。
经过多番测试,自定义一个DecalGraph,自行实现Cutoff可以解决问题。
- 首先,创建一个DecalGraph, Create/Shader/HDRP/Decal Graph
- 创建变量如下"
HDRP 自定义DecalGraph,以实现AlphaCutoff等功能综述 _BaseMap :对应Decal的贴图
_BaseColor: BaseMap采样后Multiply的颜色
_EnableEmission: 是否开启Emission
_EmissionColor: Emission颜色(默认采用BaseMap,可自行修改)
_EmissionIntensity:Emission强度
_EimissionWeight: Emission权重(用于混合BaseColor + EmissionColor)
-
核心思路:
通过BaseMap采样的Alpha进行Branch操作,如果>0才输出Color/Emission,否则不输出. BaseMap输出BaseColor和BaseColor Opacity都可以采用这种判断
HDRP 自定义DecalGraph,以实现AlphaCutoff等功能综述 -
EmissionNode:
HDRP中存在一个EmissionNode,只有使用这个节点并配置参数才能真正开启Emission.使用之前定义的变量为节点赋值,最终结果输出给DecalMaster的Emission就好.
此外Metal,Smooth等参数也有影响,需要微调.HDRP 自定义DecalGraph,以实现AlphaCutoff等功能综述 - 最终结果如下:
HDRP 自定义DecalGraph,以实现AlphaCutoff等功能综述
文件链接:
https://download.csdn.net/download/weixin_53766553/13820131
2. Decal根据Layer判断是否接受投影,而不是Lit.ReceiveDecal
这个问题在HDRP 9.x/10.x版本中会得到解决,当前版本暂时没有解决办法,先留个坑。