第060封“情书”:相对论 Signed Distance Outlines Houdini
第060封“情书”:相对论 20180507 Quicktip- Signed Distance Outlines<Entagma>Houdini 2018 |
▉ 中国是地球上的C位,所以叫China。— 每天翻译一篇教程,这就是我写给houdini的情书。【首发于同名公众号:“致houdini的情书”】
█没有绝对的C位:太阳是太阳系的C位,但在银河系里也是边缘地。
前言不搭后语:
心理学上说过,人类有种本能的渴望,那就是:被看见。20岁左右曾非常向往过这种感觉,万众瞩目众星捧月的感觉。
后来在行业内也曾意气风发过一段时间,也有种C位的感觉。但是也是在严重透支精力和体力的情况下。之后各种原因慢慢的淡出了各种圈子,直到完全与整个圈子脱节。住的地方从三环边到四环边,从四环边再到五环边,现在到六环边上。
空间上,职业上似乎越来越偏离了中心。但有些东西只有我知道,自己从未偏离过方向,一直在向着心中那个舞台中心走去。
因为通往罗马的道路不止一条,有的人早早出发,有的人睡过了头。有的人成群结队,也有的人孤身一人。有的人翻山越岭,有的人跋山涉水。路上会发生很多事情。谁都不能保证,自己的方式就是通向心中之城的唯一方式,我们同是人生的探索者,没有高低之分,对错之别。
今天这节内容:
如何快速在一平面建立物体的轮廓圈或涟漪
▉今天是42岁第035天周四
这是写给houdini的
第061封“情书”
我是geo流程图
1
如何快速在grid上用体积场置换轮廓圈
1) 首先建立几何体的体积场:
使用isooffset把几何体转成SDF体积场
2) 然后把“体积场”数值映射到grid上。
通过attributefromvolume节点映射成Cd属性(一个从中心向外扩散的线性颜色渐变)
3) 将Cd渐变转换成y轴的位移置换:
a)Cd转浮点:分量1输出给quareroot平方根节点,使数值有种抛物线变化效果。
b)再fit扩大映射一下输出最大值
c)sin节点,取得涟漪效果;
d)浮点转矢量,接Y接口;然后加到P上;
此时是没有衰减且幅度过大;
e)通过Cd转浮点给fit,映射输出从0.037~0,结合multiply,得到向外扩散振幅逐渐衰减效果。
2
更有效率的对体积场进行空间转换
1) 在创建 volume之后加入transform2。
2) 再在外部加入另一个transform3连接建立volume之前的transform,关联控制transform2。
3) 然后两者合并。这样操作transform3会及时反馈。
3
利用涟漪波峰在材质中作为蒙版
1)直接sin节点输出bind:命名mask
2)在材质中调用这个属性。
开始正式制作
使用软件houdini16.5
1)font1 // 随便一个字母
2)divide1 // 分割 多边形
3)polyextrude1 // 挤压 = 0.2 ;勾选背面
4)transform1 // x选择90;缩小为0.5
5)isooffset1 // 转为场;类型:SDF Volume
场的棕色框:为后面计算 与网格的相交范围。
扩大一下边框的范围。
勾选 √ Override Bounds
6)volumeslice1 // 视觉化场;plane:xz平面
勾选overrides:之前
之后:这就是整个体积的大小
1 颜色显示的是刚刚创建的体积,颜色编码体积的值,
2 距离场是围绕物体表面的函数,它编码每个点到表面的距离。
3 红色代表值非常大,越靠近字体表面的点值越小;
4 在表面上的值=0,字体内部体积值为负值;
7)grid1 // size:2*2; 长宽网格:200*200
原因)因为,我们希望用SDF的值置换Gid。
所以)需要,将volume的值转移到grid上;
8)attributefromvolume //
默认:转移Cd属性
1现在创建轮廓,使用Cd来置换Grid。创建很多一圈圈的轮廓。
2 我们这里只有“梯度”使用pointvop来处理volume场。
3 使用浮点值,替换颜色矢量。
8)pointvop //
8-1) vectofloat1 // 矢量转浮点
因为这里“距离场”的值是线性增长的,不使用这种渐变方式。
需求)我们希望产生轮廓圈效果,并且靠近字母的“轮廓圈”间隔小,越远离间距越大。
方案)
1)使用“平方根”函数重新映射这个范围值得到一个有层次的变化过程 。
平方根函数的起始位置速度很快,然后慢慢趋于平缓,是一个旋转过的抛物线,
2 )使用sin函数,得到周期性的多层轮廓效果。
8-2)Square Root // 连接矢量输出接口1
8-3)Fit // 重映射体积场的取值范围
a)最小值从距离表面0.08处开始 ;
b)最大值重新映射更大范围;
c)我们需要的最大值要远远大于1,比如=90
8-4)sine // 正弦sin节点来置换grid表面
8-5)floattovec1 //浮点转矢量
8-6 )add //输出连接Cd
输出范围-1~1,置换距离太大
8-7)mulconst1
8-8)constant //乘0.02
问题)涟漪置换效果没有衰减。
解决)使用fit节点,替换常数节点
8-9) fit2 // 连接Cd的一个浮点分量
重映射输出范围
a)最小值=0.123 ;
b)最大值=0;
c)降低最小值=0.037;
d)增加grid的分辨率:500*500;
1)如果改变transform来产生动画等等效果,isooffset每帧都要进行计算,会非常缓慢。
2)而如果改变volume,则会快很多。
3)所以在isooffset之后,进行transform,它就会实时更新。
10)transform2 //
11) transform3 // 关联“位移”&“旋转”通道给节点<10>来控制它。
12) merge //
13)color1 //
14) smooth // 平滑;strength = 100
8)pointvop
利用gradient属性,使sin节点直接连接输出Cd,可以看到sin影响效果;
8-9) bind // 连接sin输出;Name:mask
在shading中使用这个mask属性 作为蒙版;这个mask属性和gradient合并制作shading。
今天就到这儿了,收功
教程翻译自entagma的网络教程
下一节:20180521 Building Constraint Networks For Rigid Body Simulations
本文图片全部原创,版权归原作者所有