本文主要是介绍HDRP 自定义DecalGraph,以实现AlphaCutoff等功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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
-
创建变量如下"
_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都可以采用这种判断
-
EmissionNode:
HDRP中存在一个EmissionNode,只有使用这个节点并配置参数才能真正开启Emission.使用之前定义的变量为节点赋值,最终结果输出给DecalMaster的Emission就好.
此外Metal,Smooth等参数也有影响,需要微调. -
最终结果如下:
文件链接(修改至Github):
https://github.com/123455151/Unity-HDRP-SharedAssets/tree/main/Decal%20Shadergraph
2. Decal根据Layer判断是否接受投影,而不是Lit.ReceiveDecal
这个问题在HDRP 9.x/10.x版本中会得到解决,当前版本暂时没有解决办法,先留个坑。
Ps:
2022-3-25:已修改下载链接至Github
这篇关于HDRP 自定义DecalGraph,以实现AlphaCutoff等功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!