我想重新创建这种烟雾/云效果,将其用于“到达(2016)”电影片尾字幕中。

我上传了片尾字幕的加速版本,以查看烟雾动态。



http://streamable.com/n3309 49s x6加速了学分视频

我知道着色器如何工作并且可以轻松地实现简单的GLSL片段着色器,但从这个角度看,我似乎找不到开始的方法。

我考虑的出发点:




使用噪音函数:我能找到的每个噪声函数看起来都不自然且不平滑。不是我所需要的。

创建2D / 3D粒子模拟:这似乎有些过头了,即使如此,我仍然需要看起来似乎没有计算的函数。

只使用一些精灵和随意地将它们转换:那很la脚,看上去仍然是“假”。

如果您可以引导我开始学习如何完成外观相似的GLSL着色器实现的起点,那将是很棒的! >

#1 楼

噪声函数绝对是您的朋友-FBM将是一个不错的选择。没错,它本身看起来可能太统一了,但是如果将它的多个图层混合在一起,对每个图层使用不同的速度/方向,甚至可能扭曲它们的域,那么您应该能够非常接近外观这些镜头。 Shadertoy上有很多巧妙地使用噪音功能的功能;有关上述方法的示例,请查看此方法。

评论


$ \ begingroup $
谢谢您的指导。 FBM似乎是用于重新创建素材的合适噪声函数。
$ \ endgroup $
–西蒙·基斯滕
17年2月12日在11:55

#2 楼

在线有良好的glsl噪声源(简单噪声)可产生实时噪声。除此之外,如本视频所示,要使移动的雾/烟效果还可以使3D FBM功能生效。这是我的功能:

float default3DFbm(vec3 P, float frequency, float lacunarity, int octaves, float addition)
{
    float t = 0.0f;
    float amplitude = 1.0;
    float amplitudeSum = 0.0;
    for(int k = 0; k < octaves; ++k)
    {
        t += min(snoise(P * frequency)+addition, 1.0) * amplitude;
        amplitudeSum += amplitude;
        amplitude *= 0.5;
        frequency *= lacunarity;
    }
    return t/amplitudeSum;
}


其中snoise是来自链接的3D噪声函数,而P用于播种噪声,例如

P = vec3(texcoord, uniform_speed)


uniform_speed是统一变量,每帧以一定的值递增。

评论


$ \ begingroup $
谢谢您的指导。您链接的代码库和提供的示例帮助我理解和实现了自己的功能。
$ \ endgroup $
–西蒙·基斯滕
17年2月12日在11:57