blender 体素化为固定大小方块

Posted on Sun 28 November 2021 in Blender

remesh的blocks模式可以进行效果比较好的体素化,但是不能指定大小。配合geometry nodes做程序化生成会导致这种现象:

img

scale缩放,然后ctrl+a应用缩放,房子就散架了:

img

同样的,直接拉长房子也会导致散架

img

这是因为remesh出的块大小不固定,有时是近似于1x1x1,有时等比更大,有时可能是1x1x2。

方案1:

用remesh修改器,blocks模式

img

建一个固定大小的box 和要体素化的图形join起来,不能乱改最外层box的大小。

https://blender.stackexchange.com/questions/41665/is-it-possible-to-make-the-remesh-modifier-block-size-constant

方案2:

不用修改器。

直接在gn中随机生成足够多的点,然后通过snap选点

https://lesterbanks.com/2021/03/how-to-voxelize-objects-with-geometry-nodes/

方案3:

直接使用voxel模式的remesh

img

但是边角会被弄成圆滑过渡

img

以至于这样

img

最佳方案:

用remesh修改器,blocks模式。

此时当前的单位体素大小和当前mesh的bounding box size以及scale相关,因此实际上是可以计算出来的。

反过来想,我们已知bounding box size和单位体素大小,那么可以求出一个scale赋给当前mesh,从而达到目的。

已经有大佬做好了成品:

https://blender.stackexchange.com/questions/128191/how-can-i-use-a-block-size-of-1m-for-different-sized-models-using-the-remesh-mod

img

但是这个例子有一个问题就是必须 每个对象修改一次driver。如果想一个driver应用于所有,需要打开一个选项,同时driver表达式改为:

max(self.id_data.dimensions[0], self.id_data.dimensions[1], self.id_data.dimensions[2])/(2 ** self.octree_depth)

选项是:

img

此外,可以等待这个提案实装:

https://developer.blender.org/T89052