2012-06-25 110 views
7

我已经使用glsl成功实现了一个cel着色器。但我的问题是概述一切,因特网上的每一个opengl例子都很老旧,与当前的技术不匹配,所以技术太慢等等......所以我无法找到在glsl中做到的。我想到了一些想法,比如将最不密集的区域着色为黑色,但对于gl_Vertex,gl_Position和眼睛位置还没有足够的解释。所以,由于每种技术都太旧了,我终于决定向某人询问这个轮廓问题。OpenGL GLSL Cel着色和轮廓算法

回答

9

我将使用某种类型的边缘检测滤波器对zbuffer然后调节与(逆向)结果帧缓冲器(可能与在滤色缓冲边缘检测进行组合)。其中最常见的边缘检测滤波器是Sobel算子:

http://en.wikipedia.org/wiki/Sobel_operator

编辑:这样做的另一种廉价的方式是你渲染普通网绘制网格的黑色副本扑杀面临前倒置,顶点稍微向法线方向移动。这可能是他们在XIII中所做的,我也很确定这是在Jet Set Radio中完成的。

EDIT2:如果您希望轮廓的厚度与观察者之间的距离保持恒定,则应该用这个距离来缩放移动顶点的量。

+1

我认为这是一个简单的轮廓过于昂贵。 – deniz

+0

你瞄准什么样的硬件? –

+0

像x1650pro equivelant。 XIII游戏以某种方式满足真正旧硬件的要求。 – deniz