【发布时间】: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