背景
- 最近看到太极图形举办了一个体素创意的比赛
- 正好我在实现一个任意网格体转体素的小程序,Genvoxel.py
- 算法的原型来自gpu-gems3中的刚体仿真示例
主要步骤
- 先构建三角网格的加速结构,如bvh,kdtree等
- 计算出网格的aabb,得到网格的最大最小边界
- 根据想要的体素最小单位,将aabb(长方体)空间切割成众多的小立方体
- 从长方体空间的任意一个面出发,向对面射出光线,使用raymarching判断每个体素是否在网格之中
- 上图用了光栅化的方式,从两面渲染,得到两个深度图,从而计算出了哪些深度在体素内
- 但实际上如果存在复杂的中空结构,就只能用raymarching了
效果
- 拿了一个复杂的模型,生成了一下它的体素
可以应用的场景
-
体素制作
-
流体仿真时的初始液体条件,每个体素都是一个粒子,就可以把小兔子变成液体了
- 固体边界条件的生成,复杂的网格体边界用体素(粒子)填充,从而实现刚体仿真(后面有时间了,单独开一个话题)