我正在尝试实现类似于“内在光辉”的东西。
也就是说,我有一个图像,它定义了一个物体的形状,然后我想要创建一个覆盖,它是一个渐变,从形状的边缘延伸到形状本身。在Photoshop和Krita这样的程序中,这被称为内在的发光。
如果我能首先产生一个纹理,其中包含的值,代表沿内部旅行路径的距离,从边缘,其余的将是容易的。
我希望这种情况发生在阴影中,但我想,任何关于这个问题的一般性见解都是有帮助的。我的一个想法,就是模糊轮廓,把边缘周围的阴影称为“距离”,但这可能是GPU上不必要的昂贵操作,也许不是,我不知道。

一种天真的方法是检查到所有其他像素的所有距离,对于256x256像素图像,其结果类似于256个⁴平方根计算。我认为这不是最理想的。而且我也不知道在着色器里这是否可能。
发布于 2020-09-29 18:15:45
像您描述的那样,将形状边缘的距离存储起来的纹理称为“距离字段”(如果你搜索这个短语,你会发现很多结果)。利用跳泛算法 (JFA)可以有效地计算GPU上的距离场。
这是一种多通算法,它的工作方式是先采样像素的距离为图像大小的1/5,然后是1/4,然后是⅛,等等,直到单个像素。最后是一个纹理,从每个像素到你输入的任何初始“种子”像素的最短距离(这将沿着你的形状的边缘)。有关更多细节,请参阅论文,也可以查看艾伦·沃尔夫的这篇博客文章,它还有一些带有示例实现的着色器。
您可能感兴趣的另一篇文章是Ben的寻找非常宽的轮廓,它解决了这个问题,讨论了各种GPU实现(并讨论了JFA),并讨论了一些实现细节,例如在反别名边缘上使用JFA。
https://computergraphics.stackexchange.com/questions/10272
复制相似问题