完整的项目可以到这里到这里下载:UnitySpecialEffectWithDepth 0x05 边缘检测
边缘检测的目的是标识数字图像中属性显著变化的点。图像属性中的显著变化通常反映了属性的重要变化。这些包括:
需要注意的是边缘可能与观察方向有关——也就是说边缘可能随着观察方形的不同而变化,例如上文中的描边实现;也可能与观察方向无关——这通常反映被观察物体的属性如表面纹理和表面形状。在这个部分,我们的关注点主要是后者。
因此,根据不同的属性变化也有很多种策略来处理边缘检测,例如利用深度、利用法线、利用深度+法线、利用颜色等等。边缘是灰度值不连续的结果,这种不连续常可利用求导数方便地检测到,一般常用一阶和二阶导数来检测边缘。其中一阶导数的幅度值来检测边缘的存在,幅度峰值一般对应边缘位置。
不过为了简化计算,在实际中常用小区域模板卷积来近似计算偏导数。对Gx和Gy各用1个模板,所以需要2个模板组合起来以构成1个梯度算子。最简单的梯度算子是罗伯特交叉(Roberts cross)算子。
其实在unity的image effect中就包含了描边这个效果,而其中又有5种不同的方式,其中的一种叫做RobertsCrossDepthNormals便是利用了罗伯特算子,各位如果有兴趣的话可以参考。
0x06 小结以上便是常见的几种利用深度信息来实现的视觉效果。
完整的项目可以到这里到这里下载:UnitySpecialEffectWithDepth
各位如果觉得有趣的话,欢迎点个赞。
ref:
【1】Siggraph2011_SpecialEffectsWithDepth_WithNotes。“Special Effects with Depth” talk at SIGGRAPH – Unity Blog
【2】Unity Shaders - Depth and Normal Textures (Part 2)
【3】题图来自《杀手5:赦免》
-华丽的分割线-
最后打个广告,欢迎支持我的书《Unity 3D脚本编程》
欢迎大家关注我的公众号慕容的游戏编程:chenjd01
posted @