我上传了片尾字幕的加速版本,以查看烟雾动态。
http://streamable.com/n3309 49s x6加速了学分视频
我知道着色器如何工作并且可以轻松地实现简单的GLSL片段着色器,但从这个角度看,我似乎找不到开始的方法。
我考虑的出发点:
使用噪音函数:我能找到的每个噪声函数看起来都不自然且不平滑。不是我所需要的。
创建2D / 3D粒子模拟:这似乎有些过头了,即使如此,我仍然需要看起来似乎没有计算的函数。
只使用一些精灵和随意地将它们转换:那很la脚,看上去仍然是“假”。
如果您可以引导我开始学习如何完成外观相似的GLSL着色器实现的起点,那将是很棒的! >
#1 楼
噪声函数绝对是您的朋友-FBM将是一个不错的选择。没错,它本身看起来可能太统一了,但是如果将它的多个图层混合在一起,对每个图层使用不同的速度/方向,甚至可能扭曲它们的域,那么您应该能够非常接近外观这些镜头。 Shadertoy上有很多巧妙地使用噪音功能的功能;有关上述方法的示例,请查看此方法。#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
评论
$ \ begingroup $
谢谢您的指导。 FBM似乎是用于重新创建素材的合适噪声函数。
$ \ endgroup $
–西蒙·基斯滕
17年2月12日在11:55