Unity,原始图像上的菲涅耳着色器

时间:2019-04-29 21:38:37

标签: user-interface unity3d shader

您好,我正在尝试在下面的图像中保存效果(就像闪光一样,但仅在原始图像的顶部) 不幸的是,我不知道该怎么做,在资产商店尝试了一些着色器和资产,但是到目前为止,没有人工作过,而且我对着色器的了解也不多。

原始图像是一个ui元素,它渲染由相机捕获的渲染纹理。

我在这里完全迷失了,任何帮助将不胜感激,如何实现这种效果?

a busy cat

1 个答案:

答案 0 :(得分:2)

菲涅尔着色器使用表面法线和视图矢量之间的差异来检测哪些像素面向观察者,哪些不面向观察者。 UI平面将始终面对用户,因此没有运气。

使用着色器解决此问题可以通过两种方式完成-烘焙外边缘想象的“曲率”的法线贴图(example),或者创建一个有符号的距离场({{3} }),或将距离映射到边缘的类似方法。法线贴图可能会考虑到最复杂的效果,并且我确信某些菲涅耳着色器也可以使用该效果。但是,它确实需要您制作形状的模型并从中烘焙法线。

另一方面,可以使用脚本从图像生成有符号距离字段,因此,如果您有很多图像,这可能是最快的方法。实时获取着色器内部的边缘距离实际上是行不通的,因为您必须对大量相邻像素进行采样,这可能会使着色器的速度慢10到20倍,具体取决于所需边缘的厚度。

如果您不需要动态图像,那么也许只需在Photoshop中创建内部辉光黑色/白色纹理,然后使用附加着色器将其覆盖即可。如果您不知道如何编写着色器,那么上面的两种方法可能有点困难。