blender 体素化为固定大小方块
Posted on Sun 28 November 2021 in Blender
remesh的blocks模式可以进行效果比较好的体素化,但是不能指定大小。配合geometry nodes做程序化生成会导致这种现象:
scale缩放,然后ctrl+a应用缩放,房子就散架了:
同样的,直接拉长房子也会导致散架
这是因为remesh出的块大小不固定,有时是近似于1x1x1,有时等比更大,有时可能是1x1x2。
方案1:
用remesh修改器,blocks模式
建一个固定大小的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
但是边角会被弄成圆滑过渡
以至于这样
最佳方案:
用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
但是这个例子有一个问题就是必须 每个对象修改一次driver。如果想一个driver应用于所有,需要打开一个选项,同时driver表达式改为:
max(self.id_data.dimensions[0], self.id_data.dimensions[1], self.id_data.dimensions[2])/(2 ** self.octree_depth)
选项是:
此外,可以等待这个提案实装:
https://developer.blender.org/T89052