用UE4/UE5的ddx/ddy做描边

2022-09-28 20:46:13 浏览数 (2)

无论是用法线图/深度图或其他的图做后处理描边,本质都是求当前像素和上下左右像素的差值,差值较大的像素就是边缘。正好虚幻材质里有ddx/ddy这两个节点,可以直接算相邻像素的差值,而且有硬件的Buff加持,所以比自己手动偏移UV再采样贴图要省很多开销,除此外连连看也比传统描边做法简单很多,下面是具体做法。

ddx/ddy 文档上的说明如下:

虚幻引擎工具类材质表达式 | 虚幻引擎5.0文档 (unrealengine.com)

ddx是右减左的差值,ddy是下减上的差值。所以对于上面这张虚幻logo图,左边缘和上边缘是差值为正数的像素,右边缘和下边缘是差值为负数的像素,纯色的区域差值为0,因此分别取绝对值后加一起,不为0的像素就是边缘。

ddx/ddy为什么速度快呢?内部硬件怎么实现的我也不清楚,查各种资料看到是说因为ps通过SIMD指令一次算完一个quad里的所有像素,其实就是2x2的格子,因为quad内的所有像素都在同一个寄存器内,另外又因为GPU为了计算mips一定会计算ddx/ddy,所以顺便把这个信息暴露出来给shader用,无论怎样ddx/ddy内部都会做一次,所以shader复用这个结果是免费的。

0 人点赞