大家写MPM模拟的时候,在初始化粒子的位置的时候,对于一些复杂形状的问题,有什么好的解决办法吗?
1 个赞
我们通常会先定义一个三维场mask,其中 mask[i, j, k]
为1代表此处有物质,为0代表空气。
然后我们遍历这个mask,如果 [i, j, k]
处为1,则生成n个位于:((i + ti.random()) / res, (j + ti.random()) / res, (k + ti.random()) / res)
的粒子(这里n的大小决定了粒子分布的密度)
使用了mask的好处:不论是球体,方块,只需在外面提前初始化好这个mask即可,而不需要单独去给每一种形状写一个kernel了。
对于OBJ格式网格模型,可以参考 taichi_elements
的 voxelizer模块,他可以把OBJ模型转换成mask,从而应用于粒子的初始化。
这里是我个人的相关实现,希望有所帮助:
-
taichi_three/tina/assimp/obj.py
- 读取OBJ模型 -
taichi_three/melt/voxelizer.py
- 根据OBJ模型生成mask -
taichi_three/melt/mpm.py
- 根据mask生成粒子
4 个赞
导入到taichi的GUI的数据必须要经过归一化处理才行吗?
请问对于复杂的边界如何处理?例如地形
你用taichi做滑坡分析吗?
是的,想做三维滑坡,水沙耦合。但是对三维地形的创建不太清楚。
请问您的问题有解决吗做出来了吗