2014-10-12 98 views
1

我一直在尝试创建具有可增长厚度的内部轮廓着色器。内部轮廓着色器算法

我尝试了几件事。

  1. 检查周围像素,如果它们是透明的,则将当前像素着色为黑色(或所选轮廓颜色)。如果我想控制轮廓的厚度,我需要检查当前像素(北,南,东,西,西北,东北等等)的每个方向上的n个像素,其中n是所需的厚度。尽管如此,我仍然遇到性能问题。

  2. 复制图像,并缩小图像以控制轮廓厚度。这个较小的副本之外的任何东西都是黑色的(轮廓颜色),并且里面的内容被设置为原始图像。这只适用于基本的形状,但想象一个中心为空心的甜甜圈形状的图像,缩小图像将勾勒出外圈,而不是内圈。

  3. 与(2)相同,但不是缩小副本,只需模糊副本(控制厚度),然后修剪任何alpha!= 1的像素。这种方法效果最好,但对于复杂形状。当我希望它一致时,某些区域会比其他区域更厚。

可能我尝试其他什么算法?一般的做法是什么,Photoshop如何实现它?我的第一个算法是三者中最精确的算法,但由于它需要循环,所以我无法使它适用于像素着色器2。

+1

可否给我一个解释的downvote,这样我至少可以提高我的问题? – Infodayne 2014-10-12 06:09:01

+1

也许你不清楚你要求什么。听起来你对你尝试过的方法的结果感到不满意,并且想要一个替代方案(我不是downvoter)。 – GuyRT 2014-10-12 09:07:19

回答

0

您可以创建另一个网格,即“孔”或“网内”。即在原始网格内无处不在所需半径的网格。

然后将其渲染到模板缓冲区,然后在未设置模板位的情况下使用轮廓颜色渲染原始网格。 Like in the stencil outlining.

您将需要一个新的“内网”为每个不同的“内边框的宽度,因此‘可增长’是很难达到的。