Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 着色器-镜面反射闪烁闪烁效果_Opengl_Directx_Glsl_Shader_Hlsl - Fatal编程技术网

Opengl 着色器-镜面反射闪烁闪烁效果

Opengl 着色器-镜面反射闪烁闪烁效果,opengl,directx,glsl,shader,hlsl,Opengl,Directx,Glsl,Shader,Hlsl,我试图为我的实时着色器创建一个闪光效果,但我没有找到任何好的资源来帮助我 下面是一个例子: 有没有关于这种效果的白皮书或教程 这种效果的原理是什么?我以前使用过阈值,然后是一些模糊,然后是混合。在我的例子中,它是一个用于设置视频样式的交互式着色器,因此控件是可调的,但是对于像游戏这样的东西,您可能可以静态地设置它们 首先对输入图像设置阈值,使亮度低于阈值的所有对象都设置为透明黑色(RGBA=0,0,0,0)。亮度等于或大于阈值的所有对象都保持原样 接下来,对阈值图像应用方向模糊 然后对阈值图像

我试图为我的实时着色器创建一个闪光效果,但我没有找到任何好的资源来帮助我

下面是一个例子:

有没有关于这种效果的白皮书或教程


这种效果的原理是什么?

我以前使用过阈值,然后是一些模糊,然后是混合。在我的例子中,它是一个用于设置视频样式的交互式着色器,因此控件是可调的,但是对于像游戏这样的东西,您可能可以静态地设置它们

首先对输入图像设置阈值,使亮度低于阈值的所有对象都设置为透明黑色(RGBA=0,0,0,0)。亮度等于或大于阈值的所有对象都保持原样

接下来,对阈值图像应用方向模糊

然后对阈值图像应用一个方向模糊,该方向模糊指向上一个方向的90°。(注意-不要将其应用于已经模糊的图像。这一点很重要!您应该得到3个图像-阈值图像、模糊图像和另一个模糊图像,其中模糊与第一个图像成90°)

最后,使用简单的加法混合,将2个模糊图像添加到原始输入。(您现在可以扔掉阈值图像。)结果是,亮度高于阈值的每个像素现在都会有一个闪亮的十字。如果需要,可以使用2个以上的模糊并调整它们的角度,以便获得3、5个或更多点,但这意味着需要更多的过程

编辑:有一件事我忘了提——在你的视频中,看起来他们在对象上添加了随机白点的纹理,使其看起来闪闪发光


此外,上述过滤过程应该应用于屏幕空间。

这难道不能像使用法线贴图和镜面反射贴图的纹理贴图那样简单吗。当光线处于所需的角度时,法线贴图为闪光提供一定的“高度”,镜面贴图使其“发光”?

有一篇有趣的文章

看起来火花比我想象的要难。 体面的解决方案:使用3D位置索引3D噪波函数,添加视图向量,使用frac函数进一步随机化

闪耀:

float specBase = saturate(dot(reflect(-normalize(viewVec), normal),
lightDir));
// Perturb a grid pattern with some noise and with the view-vector
// to let the glittering change with view.
float3 fp = frac(0.7 * pos + 9 * Noise3D( pos * 0.04).r + 0.1 * viewVec);
fp *= (1 - fp);
float glitter = saturate(1 - 7 * (fp.x + fp.y + fp.z));
float sparkle = glitter * pow(specBase, 1.5);

你可能会在gamedev.stackexchange,com上找到答案,而不是在这里。这不是我想要的效果。我试图创造的效果是在物体上分布的白点,使其看起来像闪光一样。我相信白点只是一种纹理,其中有随机的白点,然后他们在屏幕空间中应用了一个类似上面的过滤器作为后期处理。我改变了示例来展示这种效果。白点是我试图重现的效果。