用Houdini实现substance的warp节点

看同事在substance演示warp节点感觉比较牛逼,推了下方程:

SDF图:

变形的图:

结果:

Houdini里实现,第一步实现二维的gradient(sdf),形成二维的梯度场,因为一定要在uv空间操作,所以得在sop映射个uv.

把求出来的梯度放到N属性上。为了方便的观看向量.节点网络:

<1>

grad节点是求二维的sdf的梯度

这里面的map 用的上面的sdf贴图.

// sample sdf texture
float f_tex(string map;float u;float v){
    vector ret = texture(map,u,v);
    return (ret.x+ret.y+ret.z)/3;
}

float du,dv;
du = dv = 0.01;
string map = chs("map");

float u = @uv[0];
float v = @uv[1];

// cal df/du
float offul = clamp( u+du,0,1);
float offur = clamp( u-du,0,1);

float ul = f_tex(map,offul,v);
float ur = f_tex(map,offur,v);
float dfdu = (ur-ul)/ (2*du);

// cal df/dv
float offvl = clamp( v+du,0,1);
float offvr = clamp( v-du,0,1);
float vl = f_tex(map,u,offvl);
float vr = f_tex(map,u,offvr);
float dfdv = (vr-vl)/(2*du);

@N = set(dfdu,0,dfdv);

这一步可以得到grad向量:

<2>

advect_warp节点 是对你的颜色贴图 执行对流变形的过程:

这里面的map用的上面的棋盘格贴图.

string map = chs("map");
float amp = -ch("amp")/100;  //这里的amp是变形强度,如果过大,会跟substance一样得到uv纹理重复的效果,这个值比较敏感,毕竟uv->[0,1]区间

float u = @uv.x + @N[0]*amp;
float v = @uv.y + @N[2]*amp;

vector ret =  texture(map,u,v);
@Cd = ret;

结果:

原文地址:https://www.cnblogs.com/gearslogy/p/10972540.html

时间: 2024-10-15 15:08:27

用Houdini实现substance的warp节点的相关文章

Houdini 快速点云连线以及避免重采样的技巧

今天和挪威的同事讨论点云的vex函数pcunshaded(),结果两个人都没搞太明白倒是转到了另一个话题,就是点云采样制作连线怎样避免重复计算,这里做一下记录. 如果采用严格的避免重复连接的方法,我们可以在每个点上增加两个点属性,一个是确定自己是否已经建立连线的判断属性,另一个是存储连线对应的另一端点的点数,同时使用setattrib()函数在对应点上标记自己的点数.但由于setattrib()的局限性,这种方法只能从一个点上生出一根(int or float),三根(vector), 四根(v

Houdini 节点参数读取输入节点的数据列表

今天做了一个在点级别的smooth工具,因为houdini默认的smooth是基于primitive的.工具能够根据输入节点的点组(point groups)或者特定的点属性(attributes)来smooth特定范围的点,这里讲一讲制作过程中一个很值得在意的细节问题,那就是读取输入节点的特定属性列表,这里讲的就是point group list和attribute list. 这个问题相当于用自己的方法实现很多节点里面的选择点组或者面组的功能,这个问题大家也许觉得非常简单,不就是从子节点上拽

在Houdini里固定半径范围内改变权重中心点的方法

大家都知道如果使用点云或者使用类似attribTransform这样的节点来采样或者传值的时候,都是以点为圆心一定半径均匀的采样,近几天为了做一些比较特殊的牵引效果所以好好琢磨了一下非均匀的线性采样方法,这个词有点太绕,我先上两张对比图看一看: 权重改变前                       权重改变后 要求是在上面第一张图限定的半径范围内,改变权值为1的中心点位置该点到圆的边缘还是从1到0的线性渐变过度(如果用指数运算就不是线性了,但还是连续过渡的渐变). 这里的方法其实也不算特别复杂

Houdini中给火花渲染准确的运动模糊 - 给运动模糊做非线性差值的方法以及固定粒子点数的方法

估计大家都知道使用运动速度来进行运动模糊的渲染,但是往往这个方法得到的运动模糊都是线性变化的,虽然乍一看没什么问题,但是如果想要每一帧的模糊轨迹也是有曲线变化的而不是僵硬的直来直去的话,使用trail算个速度来做的运动模糊是永远做不到这一点的. 这里我想通过常用的火花(spark)的运动模糊来讲一讲我所了解的一些比较好的方法. 所谓渲染中的运动模糊无非就是差值算法.目前使用的比较多的主要有两种.第一种就是上面说到的直接使用速度来线性差值,这种方法会计算每一个点的速度方向,计算出前一帧或者后一帧的

Houdini中总结Volume Lattice的方法

这两天挪威大神不在,感觉有点寂寞.刚刚学习完他的一个牛逼工具Volume Lattice.鉴于他直接把这个工具已经拿到Orbolt里面卖钱了,我在这就只讲讲自己的学习理解,代码什么的就不在这上了,何况要是理解了方法其实零代码也能够自己实现出来.这里是他的工具连接,给这位牛逼的外国师傅做做广告:Volume Lattice 效果图: 这个工具的思路主要是使用点云来代替voxel,通过拉伸点云之后,求出每个点的位移向量,再把这个向量值转变为体积,最后使用这些向量来计算density新的位置. 制作步

Houdini + TouchDesigner + leapmotion 分分钟做出钢铁侠的体感交互效果

接触touchdesigner已经有一段时间了,虽然教程确实非常有限而且很难找到深入的主题,但好在和houdini同根同源很多思路都是可以直接套用的,学习过程目前还没遇到特别难理解的问题. 今天我来讲一讲最近尝试的一个交互实验,目的是想了解touchdesigner到底有多灵活,结果很明显它的能力和Houdini形同手足.如果说Houdini是一个城府很深,每一步都要深思熟虑的老大哥的话,Touchdesigner则有点像一个事事都急于表现,任何精彩的点子都藏不住的小弟.一个是用时间精雕细琢,一

Houdini FX 14 重磅推出!(附下载方式)

SideFX于2015年1月在官网发布Houdini FX 14,喜爱尝鲜.充满好奇心的我迫不及待的装上Apprentice版,但是刚打开就提示 hkey.exe无响应,没法启动...后来发现原来是win7系统区域的问题,只要在管理中更改为英语(美国)再重启就可以打开了: 从2010年开始接触Houdini,从Hooudini 9用到Houdini FX 14,虽然身为Houdini的忠实粉丝,但我还是忍不住把它的Licence给Crack了一下...Houdini 原谅我,作为弥补,我会把你推

DOM节点的复制和替换(jQuery)

1DOM拷贝clone() 克隆节点是DOM的常见操作,jQuery提供一个clone方法,专门用于处理dom的克隆 .clone()方法深度 复制所有匹配的元素集合,包括所有匹配元素.匹配元素的下级元素.文字节点. clone方法比较简单就是克隆节点,但是需要注意,如果节点有事件或者数据之类的其他处理,我们需要通过clone(ture)传递一个布尔值ture用来指定,这样不仅仅只是克隆单纯的节点结构,还要把附带的事件与数据给一并克隆了 例如: HTML部分 <div></div>

叶脉图案以及藤蔓生长算法在houdini里面的实现 Leaf Venation

继续跟着CGworkshops里面的Shawn Lipowski大神学习在houdini里面写Vex,昨天简单看了一下他做植物生长的那一课,了解了一下思路于是开始自己着手写,本人不太习惯一步一步跟着学,一方面是觉得效率不高而且自己的思路很容易被视频打断从而很难在做出效果的同时也掌握它的核心,充其量就是一个照猫画虎的过程,画出了形却不知其意.写程序什么的思路最重要了不是么. 实现效果: 要自己写算法,当然一些相关的学术文章作参考是绝对少不了的,这个算法我直接拿的shawn用的那篇文章,但过程中因为