文章目录
一、技术概述
1.1 为什么会有这样的需求
在我们的项目《福大模拟器》中,为真实展示福州大学的校园风采,对各类具体事物建模的真实程度提出了较高的要求。植物作为校园中随处可见的事物,自然成为了模型的重要组成部分,所以有必要对各种植物进行模型的构建。
1.2 学习该技术的原因
为使所建的模型更符合在现实生活中的模样,也为了玩家能如身临其境地体验福大校园,需要这样的技术来增加真实性。
1.3 实现的难点
难点在于植物的种类繁多,各类植物的根枝存在差别;而且不像建筑物有棱有角,叶子的位置和方向的规律难以捉摸。
1.4 实现效果展示
灌木丛
行道树
二、技术详述
2.1 实现思路概述
把植物大致分为两种:
- 第一种是低矮的灌木,它们基本呈现为方形或是圆形等规则图形,所以直接创建规则物体,并使树叶附着于其上
- 第二种是普通的行道树,它们枝叶分明,且二者都有比较大的随机性,所以求助于Blender中的特殊插件来辅助
2.2 树叶的处理
虽然植物的形态各有差异,但是对不同植物的树叶的处理却是相同的。
首先在网上找到合适的素材,用PS将其的背景抠掉并导出为.psd文件
然后在Blender中,将这张图片作为平面导入
对其进行适当修改,是平面曲折有致,更符合叶子的真实情况
将做好的叶子导入Unity会发现图片存在白色的背景,此时叶子材质Shader属性为默认的Standard
这时将叶子材质的Shader属性调整为Sprites/Default,可以看到白色背景消失,但是还有白边,导致镜头拉远后,植物整体发白
点击Tint属性的取色器,选择合适的颜色。这一步直接修改了整张图片的色调,从而使白边消失
到此,叶子处理结束
2.3 灌木的建模
以制作方形灌木为例,先创建一个立方体,为其加上粒子系统,粒子选为发射体。调整粒子数量到合适值(因为在导入Unity后,每个粒子都会被认为是一个单独的物体,所以及其占用运行内存,导致卡顿甚至闪退)并将起始帧和结束点均设为0
将该粒子系统的渲染属性设为渲染物体,并选择已经处理好的叶子平面,调整其缩放属性值为合适大小
勾选旋转属性,调整随机值到合适位置,使叶子看起来较为无序
为立方体添加一个材质,将该材质的Alpha值设为0,混合模式设为Alpha混合,阴影模式设为无
到此,灌木丛建模完成
2.3 行道树的建模
借助Blender自带的树根建立工具,可以直接创建该工具中所有的树形。选择合适的树形并创建
将整棵树转换为网格并进入权重模式
权重模式中选择渐变工具,用径向方式从正、侧、俯视位置,为树枝的顶点添加权重,保证树叶出现的位置合理
行道树的叶子与灌木不同,前者的叶子是从顶点出发,所以要把叶子的顶点设在根部。选择根部顶点,将3D游标吸附于次,再将原点移动到3D游标处
为树加上粒子系统,粒子选为毛发。设置合适的数量、长度和段数,将发射源选为顶点,取消随机顺序
与灌木同样,将该粒子系统的渲染属性设为渲染物体,并选择已经处理好的叶子平面,调整其缩放属性值为合适大小,此时的树叶还是随机出现的
将其顶点组的密度属性设为群组,这时,树叶已经出现在了该出现的位置
为树干添加如图材质
到此,行道树建模完成
三、技术使用过程中遇到的问题和解决过程
3.1 遇到的问题
树叶素材在Blender中是通过插件作为平面导入的,这使得在最后模型导入Unity时出现不兼容,导致前文所述的白底和白边问题。
3.2 解决过程
将模型文件和素材一起导入Unity后,发现虽然素材文件在Unity中确实显示的是无背景的状态,但是材质却有白色背景
这时我想到可能的原因是制作模型时,无论是灌木还是行道树都对其材质的Alpha相关属性进行过调整,遂把树叶材质的Shader属性也调整为Alpha混合,但是效果并不好,仍存在白边
存在白边的主要原因是PS处理不够精细,会把本属于背景的部分白边算作叶片本身,所以当图片足够小,即Unity中视角拉远的情况下,白边会非常明显。故解决此问题的思路是:在去除背景的前提下,改变图片的整体色调,使白边自然消失。最终找到了Shader属性的Sprites方式解决了这个问题,效果如上2.1叶片的处理中所示。
四、总结
- 对于树叶素材的处理步骤为:先使用PS去除图片背景导出.psd文件,再将其作为平面导入Blender;建模完成导入Unity后,为去除白边白底,需将叶子材质的Shader属性调整为Sprites/Default,并选择合适的色调;
- 灌木的建模可以根据具体植物的形状选择方形或圆形等,在Blender中创建对应立体图形,添加发射体粒子系统,渲染为树叶平面,按照实际情况改变叶片的大小、方向等,最后将该立体图形材质设为透明;
- 行道树的建模借助Blender自带的树干生成器,根据要求生成想要的树形,为其枝头部分添加权重后,添加毛发粒子系统,同样渲染为树叶平面,此时要将树叶对象的原点设在根部;在将顶点组的密度设为群组确保树叶出现位置正确,最后为树皮添加仿真材质。