Skip to main content

一般我们可以用xyzdistant节点,在材质中找到两个模型的相接位置,拿这个数据去做一些其他操作,比如围绕模型周围给地面做一个凹凸,做一个类似模型插入泥地里的效果。

或者使用一根曲线,用xyzdistant寻找曲线与地面接触的位置,可以很方便的编辑曲线动画做一些纹理上的效果。

但是如果我们只有点的位置,使用xyzdistant就不行了,因为点不算是primtive。

比如现在我们有一个1×1面的grid,在上面撒点,给点一个noise颜色值,删除黑色的点,只留下白色的。然后想通过材质的方式将点的位置映射出来。

就像这样,我们不需要面特别的多,在材质中是使用像素作为精度的,这样就可以用点来映射出有过渡细节的数据。

首先我们要先把点使用filecache缓存出去,如果是动态的点数据,就缓存序列帧,静态的就单帧。然后再自定义材质中引入这个缓存。

材质中需要使用pcfind而不是xyzdistant了,pcfind得到的数据是当前位置能找到缓存中点的数量,得到的是一个数组。

首先需要一个缓存的点,使用filename来连入,P则是连的渲染的模型,这里使用了一个rest属性。

使用pcfind得到数组后,连入array length,可以得到这个数组内的组员数量,也就是查找到的点的个数。然后使用fit节点来重新映射数据范围。

这里一般将fit节点的source max与pcfind的max points相关联。因为pcfind寻找到的值最小是0,最大则是限制的max points数,我们用这个范围重新映射到0-1的数值。

调整pcfind的source radius可以限定映射的精度。有可能映射出来的颜色最大只到了灰色,那么就是pcfind找不到那么多的点,最大的点数量也没有到max points限定的数量,这时候可以降低max points的数量。或者提高缓存的点的数量,这个就看具体情况了。

(完)

Leave a Reply