整体思路:通过轨迹线规定藤曼位置,生成藤曼分支,再对藤曼生长进行细节处理
- 如何导入模型
建设geo并在其中添加file(文件夹),在选择处添加不同类型的模型 - 模型减面并变换与对齐
polyreduce(减面)—Percent To Keep 调整
remesh(重新布线)—Target Size调整面的大小
matchsize(对齐到世界中心)
transform(对模型进行变化) - 创建藤曼轨迹
curve(钢笔)选中吸附到模型,进行绘制
resample(对轨迹进行编辑) - 获取模型法线并让轨迹线段获取法线方向
normal(法线)获取模型法线—Add Normals to points(让法线在点生成)-(如果法线位置不对,勾选Reverse Normal)
attribtransfer(让轨迹线段获取模型的法线方向)
pointwrangle(代码,使得轨迹向法线方向偏移(@P+=@N*0.06;(@是属性,@P是点的坐标@N是法线坐标)))(上述代码:@P=@P+@N*0.06) - 平滑轨迹,并添加动画
smooth(平滑)
carve(轨迹动画)—first,scend是轨迹起点与终点
alt选中,添加动画 - 给与轨迹线噪点增加细节
mountain(添加噪波) - 增加轨迹线分支
scatter(在轨迹线上生成点)
pointjitter(随机分布点)
ray吸附到模型表面)
(吸附到表面的点与轨迹线相连)
—创建enumerate(选择成控制点的组(创建一个新的属性))
与ray(吸附在模型上的点)和scatter(轨迹线上的点)相连
将两个enumeratel连接到mergel同时显示
将mergel连接到add,在polygons(线,多边形)添加index的属性在mergel前通过index获取了轨迹线与随机分布点的序号信息,通过add让两个序号信息相同的生成了线
- 轨迹线细节,在藤曼生成的同时,进行藤曼分支的生成
问题:如何把轨迹线上的属性传递到撒出的点上
使用timeshift固定画面
创建出triger的属性,定义为float,初始值为1(f@triger=1;)
将上述代码和timeshift进行合并并赋予triger属性,并添加颜色
(@P+=fit01(vector(rand(@ptnum)),-1,1)*0.2*@triger;)使用此代码解决撒点的随机值代替pointjitter
((fit01(将0,1投射到))(vector(矢量))(rand(随机生成随机数))((规定新的范围-1,1)(数值)(上述属性))
与ray相连得到最后输出
- 让藤曼分支生成更加自然
插入solver(通过上一帧的内容可计算出下一帧内容)
在内输入代码:
(if(point(1,'triger',@ptnum)>0) f@growth+=0.08;)//
(f@growth=clamp(f@growth,0,1);)//给新创建的growth规定范围(0,1)
solver内
之前的随机值部分修改代码为:
@P+=fit01(vector(rand(@ptnum)),-1,1)*chf("rand_scale")*@growth;
ch(f(float))——在面板中形成可调参 , 修改属性为growth
可调参数
给后续节点修改属性为growth,即可使用growth所规定的值
10.解决随机与噪波抖动
原有节点(planA)可以放弃,较为繁琐,运算量大
*planA
创建新的代码(no-growth)使其不受growth属性影响
(@P+=fit01(vector(rand(@ptnum)),-1,1)*chf("rand_scale")*;)
将ray的scale修改为常数1,也使其不受growth属性影响(ray受growth影响会出现抖动)
创建新代码,与(rand_p)连接(传递@growth)
vector pos = point(5,"p",@ptnum);//创建变量,不会进行传递(读取点的位置)
@P = lerp(@P,pos,f@growth);//计算前两位的差,进行平滑过渡
planA
PLANB:使用代码实现吸附效果
在rand_p后添加timeshift(固定整体撒点的位置)
添加代码
vector pos = point(2,"P",@ptnum);//读取点的位置(2接口向上连接模型法线信息)
vector min_pos = minpos(1,pos);//计算和模型距离最短的点坐标(并锁定在min_pos)
@P= lerp(@P,min_pos,f@growth);//让min_pos中的值和当前点位置进行过渡
11.生成藤曼模型并给予噪波抖动
使用polywire对线与点生成模型(进行调参)
对藤曼分支给予噪波
利用resample对分支进行细分(增加细节),并开启curveu属性(对分支给予0-1)
创造pointvop
curlnoise(控制噪波)bind(获取curveu属性) ramp(进行噪波大小的控制)
pointvop内
添加代码(对分支的大小进行设定)
@pscale=chramp("pscale_con",f@curveu)*0.01*@growth;
(ch(ramp(“命名”,控制的值)*0.01*@growth(不添加@growth会在最后生成圆片,使其受@growth影响)))
上半部分
下半部分
最终效果
至此,整个藤曼的基础生成就完成了
原作者:Clown_丑