我正在尝试为我的实时着色器创建一个闪闪发光的效果,但我找不到任何好的资源来帮助我。
以下是一个例子:
是否有关于此类影响的白皮书或教程?
这种效果的原理是什么?
答案 0 :(得分:1)
这不可能像使用法线贴图和高光贴图的纹理贴图一样简单。当光线处于必要的角度时,法线贴图会给闪光带一些“高度”和镜面反射贴图以使它们“闪耀”?
答案 1 :(得分:1)
有一篇有趣的文章AMD - Getting Procedural。
闪闪发光似乎比我想象的更难。 体面解决方案:使用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);
答案 2 :(得分:0)
之前我已经做了这个,然后是一个阈值,接着是一些模糊,然后是混合。在我的例子中,它是一个用于风格化视频的交互式着色器,因此控件是可调整的,但对于像游戏这样的东西,你可以静态地设置它们。
首先阈值输入图像,因此亮度低于阈值的所有内容都设置为透明黑色(RGBA = 0,0,0,0)。亮度等于或大于阈值的所有内容保持不变。
接下来,将方向模糊应用于阈值图像。
然后将与前一个指向90°的方向模糊应用于阈值图像。 (注意 - 不要将它应用于已经模糊的图像。这很重要!最终应该有3个图像 - 阈值图像,模糊图像和另一个模糊图像,模糊图像与第一个图像成90°。)
最后,使用简单的添加剂混合,将2个模糊图像添加到原始输入。 (你现在可以抛出阈值图像。)结果将是每个亮度高于阈值的像素现在都会有一个闪亮的交叉。如果你想要你可以使用超过2个模糊并调整它们的角度,你可以得到3或5个或更多点,但这意味着更多的传球。
编辑:有一件事我忘了提及 - 在你的视频中,看起来他们在对象上添加了随机白点的纹理,使其具有闪光般的外观。
此外,上述过滤过程应该应用于屏幕空间。