欢迎光临散文网 会员登陆 & 注册

[Houdini] VDB from Polygons

2022-06-16 03:57 作者:pandahgt  | 我要投稿

VDB from Polygons节点把多边形表面或者表面上的属性转换成VDB。

VDB form Polygons

VDB和Houdini的原生volume最大的不同是VDB只在特定的voxel里存储数据。其他voxel里的值是backround value(背景值),基本不占内存。


为了方便理解,把组成VDB的最小单元voxel看做包含属性的方块。Voxel Size是方块的大小,单位是Houdini的一个标准单位,米。

Distance类型的VDB和Fog类型的VDB本质上也都是由voxel组成,只不过voxel里的属性值不同。软件显示他们的方式也不同,Distance类似多边形的表面,Fog类型是烟雾。

Distance类型Distance类型方块里存储的属性默认叫surface。

首先在几何体的内表面填充一层方块,这层的属性值将会是 -voxel size(负的方块大小值),如果继续向内填充一层,这层的属性值会是 -2*voxel size(负的2层方块大小值),填充x层,x层的属性值是 -x*voxel size,也就是这层方块到表面层的距离乘以负一。在外表面向外填充也是一样的道理,但是值是正值。也就是说voxel的属性值和方块到表面的距离有关,内部是负数,外部是正数。对于未激活的voxel,它们也有一个统一的值,外部的和最外层方块的属性值一样,内部的和最内层方块的属性值一样。(为了了解voxel包含的属性值的大小,用VDB Visualize Tree把VDB转换成包含属性值的点,用Clip从中间切开,再复制box上去,最后用属性值染色(下图1)。下图2蓝色是铺满内表面的一层方块,黄色是铺满外表面的一层方块。下图3是内外各填充三层的效果,颜色稍微改了下,红蓝层交界的地方就是原几何体的表面。)

图1  切开VDB
图2  内外各一层
图3  内外各三层

这样填充方块的过程实际上就是激活更多的volex来存储数据的过程,填充层数由Exterior Band VoxelsInterior Band Voxels控制(下图)。

填充层数

如果勾选Fill interior,方块会一直向内填充直到填满。如果勾选Unsigned Distance  Field,方块会同时向内和向外填充,填充层数都由Exterior Band Voxel控制,值都是正值。

最后,Houdini会在属性值是0的地方建立表面。

Fog类型Fog类型方块里存储的属性默认叫density。

首先在几何体的内表面填充一层方块,这层的属性值会是1。如果填充第二层,第二层的属性值是1,如果填充10层,第十层的属性值是1,中间层的属性值是过渡值。也就是说Fog类型的属性值永远是从0到1的过渡,最外层是0,最内层是1。向外填充在这里没有太多意义,大概只能填一层,属性值是0。勾选Fill interior的话,方块会直接填满内部,最靠内的方块属性值是1。Unsigned Distance Field参数在这个模式下没有意义。

注意Fog类型向内填充层数不同,烟雾的显示效果也不同。层数少的话,烟雾最厚重最多,也就是density等于1的层比较靠外,烟雾会显得更不透光(下图,层数由少到多)。

层数由少到多

Use World Space for Narrow Band上面都是用填充了多少层来描述激活了多少voxel,填充的距离是voxel size乘以填充层数。当勾选Use World Space for Narrow Band时,填充层数的选项变成了填充距离,用填充距离来描述激活多少voxel。

Surface Attributes:在激活voxel后,还可以复制一份voxel,添加几何体包含的其他属性,生成另一个VDB。



OpneVDB官网的Houdini Examples是一个很好的学习VDB的资料。本文参考了前两个例子。

https://www.openvdb.org/download/
examples


[Houdini] VDB from Polygons的评论 (共 条)

分享到微博请遵守国家法律