【教程】vex种实现turbulence vop的功能
—— 微资讯 · 微课程 ——
利用零碎时间,走上超神之路!
简介
我们在使用noise的时候大部分都是使用vop而不是vex,主要原因在于vop在的noise类型节点提供了大量便捷的控制参数,而默认的noise vex函数只有最基本的noise形态,如果要实现vop种功能还有手动增加特定的控制。当然,有些时候我们必须在wrangle中实现noise的设置,那么本小节就使用wrangle还原turbulencenoise中的参数控制。
第一步 最核心的点要清晰的知道对应的参数的真正意义(而不是表面翻译)
noise type 就是基本的noise的形态,这个对应vex中就是不同的noise类型函数。
Position 位置,也就是输入的三维矢量(一般作为驱动量),在noise中大部分情况使用@P作为输入的参数。
剩下就是需要还原的参数类型
Frequency 翻译是频率,实际上就是对@P这个量的倍增
Offset 翻译是偏移,这个主要是指的是X轴的横向偏移,也就是对@P的叠加
Ampitude 翻译是强度,实际上是对noise()结果的倍增缩放,是y轴的缩放量
当然,这里还可以添加一个y轴的偏移或者是fit range适配,这个可以还原uniform noise的部分参数控制功能。
上面这个其实和houdini之道vopvex卷基础数学卷中讲解y=sin(ax+b)*c+d这个三角函数的终极变体是一样的。
这里最让人困惑的是roughness和turbulence
当然,这里还有一个隐藏的变量,就是每次叠加noise的时候frequency会做固定倍增,以及offset会做固定位移,对于turbulence vop中,这两个量是一样的,默认是是2.01234,我们可以简化为2。这个在vop中是内置的,无法控制,但是我们使用wrangle就可以单独设置这个变量,包括让frequency和offset的这个变化不一样都可以。
第二步 在wrangle中实现
1找到对应的noisetype类型,关于houdini中的noise类型完全讲解以及对应的noise vex函数都在houdini之道 vopvex卷的第九章完全讲解。这里我们选择perlin noise类型。
2wrangle中的设置 @P.y=noise(@P);
基本搭建对比,绿色为左边使用turbulence vop,蓝色为右边wrangle函数,transform向下偏移0.2个单位作为对比
turbulence参数都提取出去,noisetype=perlin noise,turbulence=1
3设置Frequency,offset和amplitude的控制
vector freq=chv("frequency");//定义了频率
vector offset=chv("offset");//定义了偏移
float amp=chf("amplitude");//定义 了强度
@P.y=noise(@P*freq-offset)*amp;
这里需要注意两点 1 frequency和offset是矢量,amplitude是浮点。2 offset要和vop中完全匹配用的是减法而不是加法。这时候vop和wrangle同时改变对应的参数结果完全是一样的
4 处理turbulence叠加的问题,这里涉及三个参数 1叠加次数turublence 2每次叠加turbulence的强度倍增roughness 3frequency和offset的变化量n。由于要重复叠加控制,我们使用的是for循环。
vector freq=chv("frequency");
vector offset=chv("offset");
float amp=chf("amplitude");
int turbulence=chi("turbulence");//定义迭代次数
float rough=chf("roughness");//定义每次叠加强度缩放值
float n=chf("n");//定义了每次叠加offset和frequency的倍增量
float sum=0; //初始化叠加结果值为0
for(int i=0;i<turbulence;i++){
sum+=noise(@P*freq*pow(n,i)-offset*pow(n,i))*amp*pow(rough,i);
}
@P.y=sum;
得到与vop完全一样的结果。
注意点:
1noise类型要一样,并且不同的noise类型紊乱初始迭代次数值不一样,有的是0,有的是1,那么这个直接决定了for循环中 i 的初始值。
2对于频率和offset 的倍增值默认值设置为2,当然,使用wrangle设置noise我们可以让他们两者不一样,而且可以调整这个倍增量(不为2),自由度比turbulencevop更高。
3基于这种学习方法,对于更加复杂的uniform noise节点(mountain sop和hf noise sop的本质节点),我们在后面的课程里面也会通过这种基本算法进行还原,比如fold,bias,complement等等,让大家不只是停留在字面翻译层面,学习目的是不仅正确理解和运用,还可以通过自定义拓展,自定义获得更加大的自由。
视频展示
教程编号CGhunter_houdini_04_09_003_noise(vex卷第九章random,noise完全讲解章节第三集)
重要信息