抗凝血剂GLSL冒名顶替者

时间:2014-04-30 09:56:49

标签: glsl antialiasing

如果您使用基于冒名顶替者的光线追踪方法绘制球体,例如此处所述

http://www.arcsynthesis.org/gltut/Illumination/Tutorial%2013.html

您通常会绘制一个四边形然后使用“discard”来跳过距离四边形中心的距离大于球体半径的像素。

当您打开消除锯齿时,GLSL将对您绘制的图元的边框进行反锯齿 - 在本例中为四边形 - 但不是绘制和丢弃像素之间的边框。

我附上两个屏幕截图,显示球体和边界的爆炸。除了位于四边形边界的最顶部像素外,球体边界显然没有消除锯齿。

Impostor based sphere Sphere border zoom-in

有什么技巧可以让冒名顶替球体有一个很好的抗锯齿边界?

最好的考虑,

的Mads

2 个答案:

答案 0 :(得分:1)

不要只丢弃像素,而是将球体设置为具有内半径和外半径。 内半径内的所有内容都是完全不透明的,外半径之外的所有内容都被丢弃,中间的任何内容都在0到1个alpha值之间进行线性插值。

float alpha = (position - inner) / (outer - inner);

答案 1 :(得分:1)

Kneejerk反应将为您自己进行多重采样:渲染到例如纹理。是实际输出的四倍,然后确保生成mip贴图并从该纹理渲染回屏幕。

或者直接在着色器中执行此操作,让OpenGL继续担心几何边缘:每个像素采样四条光线并对它们求平均值。