【问题标题】:Outline / Silhouette rendering with OpenGL使用 OpenGL 进行轮廓/轮廓渲染
【发布时间】:2012-01-13 14:47:05
【问题描述】:

我知道有几种技术可以实现这一点,但似乎都不够。

  • 使用 sobel / laplace 过滤器无法找到所有正确的边缘(并找到不需要的边缘),速度很慢并且无法控制轮廓宽度。

  • 我现在决定先用纯色渲染对象的背面,并且比实际对象大一点。结果看起来不错,但我真的希望我的轮廓具有恒定的宽度。

  • 我已经尝试使用粗线框线渲染对象的背面。给我一个恒定的轮廓宽度,但不推荐使用线宽,如果轮廓突然改变方向(例如在立方体上),则会产生渲染伪影并留下间隙。由于此技术的其他问题,我还没有尝试使用第三个渲染通道为每个顶点绘制一个线框线大小的点。

有什么想法吗?

edit我什至使用几何着色器自己寻找边缘,如http://prideout.net/blog/?p=54 中所述,但它与线框技术存在相同的差距。

edit 通过在绘制轮廓时禁用GL_DEPTH_TEST,我能够使用线框技术摆脱渲染伪影。不幸的是,我也丢失了重叠物体的轮廓......

我的目标是获得他们在 Dragons Lair 3 游戏中对角色使用的相同效果。有谁知道他们是怎么做到的?

【问题讨论】:

  • 你到底在追求什么?我没有看过 DS3,所以我不知道.. 你想要真正的边缘检测(边缘也在渲染对象内部)还是只是在寻找对象的外部轮廓?我假设您在谈论 3d 对象.. 但也许我错了,您正在使用 2D 图像并且您只想进行 2D 后处理
  • 我试图获得经常与 cel / toon 着色一起使用的轮廓以实现卡通外观。所以我不想要一个完整的线框模型(这很容易),但我也不只想要外部轮廓。尝试使用谷歌搜索“cel shading”或“toon shading”。您还可以使用 Google 图片搜索轻松获取 Dragons Lair 3 的一些图片;)
  • 是的,我是这么认为的,看看我的回答,你得到的结果比编写一个简单的普通卡通着色器要好得多(当法线几乎垂直于观察者时,你不会得到所有的伪影)
  • 我假设“Dragons Lair 3”是指实时渲染的“Dragon's Lair 3D”,而不是Dragon's Lair III(全是手动动画FMV,就像原始的Dragon's Lair和Dragon's巢穴二)。在我看来,Dragon's Lair 3D 实际上是在绘制单像素宽的线框线。沿着人物轮廓和某些预先指定的三角形边缘(背包的翻盖等)。看起来他们并没有做任何特别花哨的事情,但对于他们的平底卡通外观来说,这非常有效。
  • 是的,我认为你的名字是对的 :) 听起来很花哨 - 使用背面剔除方法,我尝试使用深度缓冲看不到单像素宽的线条。如果没有深度缓冲,您可以看到对象背面的线框。所以他们必须以某种方式计算要绘制哪些线。他们在 2002 年有几何着色器吗?

标签: opengl


【解决方案1】:

如果您在进行真正的边缘检测,我发现您可以使用卷积 LoG(高斯上的拉普拉斯算子)5x5 内核获得相当不错的结果,将其应用于深度缓冲区并在渲染对象上混合(可能具有不错的FSAA)。您需要在片段着色器中进行一些调整以钳制混合轮廓,但结果很好。 (顺便说一句,这是你真正想要的问题)

注意:

1) 拉普拉斯过滤和日志过滤是不同的东西,产生不同的结果

2) 如果您在深度缓冲区上应用卷积,而不是渲染图像,您最终会得到完全不同的结果,此外,如果需要轮廓宽度控制,则需要使用扩张过滤器可以应用选择性腐蚀通道,这样您最终将获得与使用标记绘制的手绘草图非常匹配的渲染,并且您可以很好地控制尖端大小,但代价是额外的 2 通道

【讨论】:

  • 老兄,给版主的愤怒留言是怎么回事。他们都是志愿者,请善待他们。
  • -1:给版主的大写锁定注释。您为什么不三遍重新发布相同的答案,而不是更改您的帖子,以便详细解释该技术是什么以及它与 OP 有何不同说他试过了?
  • 另外,我不明白你的方法如何让他明确控制他似乎想要的轮廓宽度。
  • 我不必因为版主不理解而更改一个完全有效的答案。用户并不是真的在抱怨轮廓宽度,而是在抱怨边缘检测的正确性,这样你会得到比在渲染上应用 sobel/lplacian 更正确的边缘。需要注意的是,如果需要对检测到的轮廓进行显式控制,可以应用扩张过滤器,然后是选择性侵蚀过滤器(我几周前做过)。您最终得到的渲染与使用标记绘制的手绘草图非常匹配,并且您可以很好地控制笔尖大小
  • 你是对的,我错了,讽刺不是来自版主,而是来自你,我不明白添加诸如失败、松散或其他任何个人冒犯如何帮助其他人理解。就我而言,我更正了大写字母和注释。如果您不想伤害他人的感觉,请不要使用那种 cmets
猜你喜欢
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 2019-05-22
  • 2018-03-18
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
相关资源
最近更新 更多