Unity版本:2022.3.45fc1

原理

将片元uv朝8个方向偏移,然后叠加,减去原图,得到描边效果,然后与主纹理相加。

预先准备

新建一个Ulit Shader Graph,命名为Edge。Surface Type设置为Transparent




随便准备一张png图片,记得要留有进行描边的空间。




添加两个外部变量,texture2D类型的MainTex和float类型的EdgeWidth,代表主纹理图和描边宽度。

平移

使用Combine节点进行x方向和y方向的组合,使用Tilling and offset节点进行nv偏移,右下方的偏移如下:




其他七个方向的偏移也是相同的方法,不再过多赘述。

将这些偏移之后的uv各自在MainTex上进行采样,如下图所示




将采样后的alpha值进行叠加,叠加后的值会很大,而alpha值的取值必须在0到1之间,因此需要一个clamp节点进行归一化




归一化后的alpha值会作为最终的alpha值,连接到片元着色器的alpha节点。

将归一化后的alpha值减去主纹理采样后的alpha值,然后将得到的值与主纹理采样的grba值相加,传给片元着色器的Base Color节点

最终结果

Shader Graph下载链接

edge.shadergraph