Opengl 模糊边的着色器,或如何绘制光线

Opengl 模糊边的着色器,或如何绘制光线,opengl,3d,shader,render,irrlicht,Opengl,3d,Shader,Render,Irrlicht,我正在尝试使用GLSL顶点和片段着色器使我的3D对象具有模糊的边。我想我得用高斯模糊来做这个 目前,它只是一种TGA纹理,使用blendFunc blend和rgbGen identity进行半透明填充。此纹理也不受灯光影响(surfaceparm nolightmap)。而且,是的,这是地震3 BSP@Irrlicht引擎。:) 这是一张我试图使它看起来像的图像(这实际上不是一个灯光,只是一个模拟光线的画笔): 我尝试应用了许多着色器,但都不起作用。我在哪里可以找到类似的东西?或者有其他方法可

我正在尝试使用GLSL顶点和片段着色器使我的3D对象具有模糊的边。我想我得用高斯模糊来做这个

目前,它只是一种TGA纹理,使用
blendFunc blend
rgbGen identity
进行半透明填充。此纹理也不受灯光影响(
surfaceparm nolightmap
)。而且,是的,这是地震3 BSP@Irrlicht引擎。:)

这是一张我试图使它看起来像的图像(这实际上不是一个灯光,只是一个模拟光线的画笔):

我尝试应用了许多着色器,但都不起作用。我在哪里可以找到类似的东西?或者有其他方法可以做到这一点


p.S.也许还有其他聪明的方法来绘制光线?

我想到了一些想法

  • 我没有任何使用引擎的经验,但一种方法可能是计算对象的轮廓并将其挤出,对挤出的部分应用渐变。可以使插值保持线性,从每个顶点进行插值,或者使用片段着色器使其具有更像高斯的衰减。我做过的最接近挤压的事情是,有点类似。虽然这里我想从相机的角度,而不是光线的角度,挤出轮廓,但是轮廓是需要的

  • 另一种方法是先将其添加到场景中,然后再将其添加回场景中。在这里处理深度测试可能很棘手。也许是用广告牌放回现场

  • 一个非常便宜的方法可能是只使用预先模糊的纹理广告牌。或者可能是几层纵横交错的固定几何体,带有模糊的纹理和添加的混合。对于添加剂混合,在边缘处逐渐变黑的亮光颜色-alpha是不必要的。像这样的

  • 我刚找到。再次使用添加混合的静态几何体,但使用您所追求的较软的边。使用圆锥体几何体的法线和距尖端的距离来猜测厚度。深度缓冲区还用于绑定圆锥体内事件对象的厚度

  • 转到更基于物理的照明模型,您可以绘制一些边界几何体,并为每个像素计算出观察光线通过灯光圆锥体的距离。然后根据距离添加灯光。如果不计算多次散射和吸收近似值,按距离缩放的简单加法可能就足够了。这是非常接近的。特别是聚光灯

    顺便说一句,如果你想通过一个模型计算出每像素的距离,我记得在GPU gems或nvidia的一篇演示论文中读到了我认为很好的方法。只需将所有背面的眼睛空间深度通过添加混合渲染到纹理,然后仅对正面使用减法混合。纹理将包含每像素距离

  • 延伸上面的内容,一路走,一步一步通过阴影贴图,积累光线。看起来这是一个令人印象深刻的加速方式

  • 仅供参考,因为我认为它在灯的情况下不起作用:

来自随机谷歌搜索的链接和图像,不确定