gpt4 book ai didi

opengl - 模糊边缘的着色器,或如何绘制光线

转载 作者:行者123 更新时间:2023-12-04 17:09:16 26 4
gpt4 key购买 nike

我正在尝试使用 GLSL 顶点和片段着色器使我的 3D 对象具有模糊的边缘。我发现我必须为此使用高斯模糊。

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

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

我试过应用许多着色器,但它们都不起作用。关于在哪里可以找到类似实现的任何想法?或者也许有另一种方法可以做到这一点?

附言也许还有其他一些聪明的方法来绘制光线?

最佳答案

想到的一些想法...

  • 我对引擎没有任何经验,但一种方法可能是计算对象的轮廓并将其挤出,对挤出的位应用渐变。你可以保持线性插值,从每个顶点插值,或者使用片段着色器给它一个更像衰减的高斯。我做过的最接近挤出的是 conservative rasterization ,有点相似。 stencil shadows/shadow volumes 需要剪影,虽然在这里我想从相机的角度挤出轮廓,而不是光的。

    enter image description here
  • 另一种方式是rendering to a texture首先,blur it然后将其重新添加到场景中。处理深度测试在这里可能很棘手。也许使用广告牌放回现场。

    enter image description here
  • 一种非常便宜的方法可能是使用预先模糊的纹理广告牌。或者也许是几层具有模糊纹理和附加混合的纵横交错的固定几何图形。对于加法混合,在边缘渐变为黑色的明亮浅色 - 不需要 alpha。像这样的东西?

    enter image description here

    enter image description here
  • 我刚找到 this approach too .静态几何图形再次添加混合,但您追求的是更柔和的边缘。锥体几何形状的法线和距尖端的距离用于猜测厚度。深度缓冲区还用于限制事件对象在锥体内部的厚度。

    enter image description here
  • 转向更基于物理的照明模型,您可以绘制一些边界几何图形,并为每个像素计算出视线穿过光锥的距离 ray-cone intersection test .然后根据距离添加灯光。按距离缩放的简单加法可能就足够了,而无需计算多重散射和吸收近似值。这很接近deferred shading .特别是聚光灯。

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

    enter image description here
  • 扩展上面的内容,一路走下去,逐步通过阴影贴图,积累光线。 1D Min-Max Mipmaps看起来是一种令人印象深刻的加速方式。

    enter image description here
  • 仅供引用,因为我认为它在灯的情况下效果不佳:Volumetric Light Scattering as a Post-Process

    enter image description here

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

    关于opengl - 模糊边缘的着色器,或如何绘制光线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27663618/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com