李 擘
我们在制作三维动画的过程中,经常会用到软件提供的一些功能,比如毛发系统,粒子的表面发射。在开发游戏制作室外场景的时候,经常会在地面上制作植被,树、花草等覆盖地面,还有常见的地板铺装等。夏天饮料瓶上凝结的水珠,糖葫芦与汉堡上的芝麻等,这些可否不用模型一个个复制而用程序来实现呢?通过制作、分析这些效果不难看出这些效果的制作与模型表面网格相关,对于艺术生来说,基本思路是用程序将一个模型复制分布到另一个模型的表面上。
我先来看地板铺装,来研究表面分布基本的算法。先准备几个测试用的简单模型,一个平面的四边形模型作为地面,作为最大铺装外尺寸的限定,但是要注意最好是长宽都比地板模型大;一个地板模型,给出具体的长、宽、高三个尺寸,也可以把这个参数化、虚拟为代理模型,之后再替换。通常我们生活中铺的地板大都是木头条形板材,横向错半个长度来铺装的。按照这个模式我们写一个简单的循环来实现。
根据地面模型来计算铺装的最大范围,横向X,竖向Z,获得四个点的顺序和位置,得到起始点Pos0《x0,y0,z0》,再与其它点计算,竖向Z长度Depth Max和横向X宽度Width Max;指定一个地板的三维参数,Width宽12cm、Height高1.5cm、Depth长92cm;指定一个偏移值Offset这里为0-1的小数,也可以采用百分比或别的形式。这里我们可以用Width Max/Width算出横向X上能摆放的最大数量NumX0,和用Depth Max/Depth算出竖向Z上能摆放的最大数量NumZ0,也就是铺装的总个数,循环的个数,但是这个数往往是小数,所以需要使用NumZ1=ceil(NumZ0)和NumZ2=trunc(NumZ0)来取比它本身大和小的两个整数。……