Unity3D自带功能:树物体(Tree)
通过菜单GameObject
> 3D Object
> Tree
可以为当前场景创建一个Tree (树),同时还会把相应的Tree asset资源存放在项目文件夹中。
Tree是标准的Fractal(分形)结构,按“第一层主干上长出数根枝干,然后枝干上又各自长出数根细枝,……最后细枝上长出多片树叶”这样一层层搭建而来。Maya中的笔刷树也是用的这种构成方法,但Unity3D相对来说更简化了一些。
TreeStructureDiagram.png树编辑器及节点
Unity3D提供一个简单的树编辑器,让我们可以从主干开始创建一颗完整的树。这个树编辑器很像Xfrog(Maya中集成了一个简化版的Xfrog插件)。
一颗比较完整的树的结构至少要如下图所示,有多个层级,最下方是1个树节点,然后接一层枝节点当树干,然后再接1~2层枝节点当树枝,最后接一层叶节点来生成树叶。
unity_tree_00.png编辑器中间的结构图示代表了不同层级的节点,Unity3D的Tree只有3个不同类型的节点:树节点(Tree)、枝节点(Branch)、叶节点(Leaf)。每个节点上的数字代表该节点中总共有多少根“树枝”或者多少片“树叶”。
选择一个枝节点,我们可以通过右下角的图标为它创建一个下级枝节点或者叶节点,或者复制/删除任意枝节点或叶节点,叶节点之下不能创建别的节点。
树节点只能有一个,不可删除。
树节点(Tree)
树节点是最底部的节点,用来控制整棵树的参数设置
unity_tree_02.png- Distribution
-
Tree Seed
:这是一个“种子数”,所谓“种子数”是计算机中控制“假随机数”的一个关键参数,大家只需要知道我们如果做好了一棵树以后想得到另一棵类似但不要完全一样的树,就可以直接复制这棵树,什么调整都不用做,只修改一下新树的“种子数”就好了。做好的树样子不太理想,改改“种子数”也许就能获得一个好看些的结果 -
Area Spread
:区域散布距离,值越大,刷出来的树离笔刷路径距离越远 -
Ground Offset
:这棵树离地面的高度
-
- Geometry
-
LOD Quality
:设置LOD(随距离变化而改变模型精细度),因为Tree物体的mesh都是由程序根据参数来自动生成的,所以天生就有LOD属性 -
Ambient Occlusion
:环境自遮罩阴影设置 -
AO Density
:AO的程度
-
- Material
-
Translucency Color
:透明区域颜色 -
Trans. View Dep.
:透明区域渲染深度 -
Alpha Cutoff
:贴图上半透明区域的切除程度,leaf通常都用透明贴图来呈现,但Tree物体会将透明通道做Cutoff处理,也就是不呈现半透明的效果 -
Shadow Strength
:阴影强度 -
Shadow Offset
:阴影偏移 -
Shadow Caster Res.
:阴影分辨率
-
枝节点(Branch)
枝节点是创建枝干的节点,枝干是一根可以扭曲的长圆锥体,通常会贴上树皮的贴图,用来作为树干或者主要分叉树枝。
unity_tree_03.png- Distribution
-
Group Seed
:这个“种子数”是控制这一“群”枝条如何随机分布的 -
Frequency
:在一根上级枝条上会出现多少根本级枝条,对于主树干来说这个值设置为1,其他的枝干这个值通常大于1 -
Distribution
:这些枝条如何分布 -
Growth Scale
:通过一根曲线控制这些枝条从长出点到尖端的截面粗细,通常是会设置成越靠近尖端越细 -
Growth Angle
:通过一根曲线控制这些枝条从长出点到尖端的弯曲程度,大部分树越靠近尖端会越指向天空
-
- Geometry
-
LOD Multiplier
:LOD的设置,次级枝条的LOD会读取上级枝条的LOD然后用这个倍乘数来调整 -
Geometry Mode
:几何体模式,可以是branch(枝条)模式,那就是一个长圆锥;也可以是一个fronds(蕨类复叶结构),那就是一个扁平的长条双面片;还可以是branch+fronds,那就是两者都有 -
Branch Material
:指定枝条的材质球 -
Break Material
:指定枝条断口(顶端)的材质球
-
- Shape
-
Length
:枝条长度,会随机在指定范围内取值 -
Relative Length
:是否使用相对长度 -
Radius
:枝条的最大直径 -
Cap Smoothing
:断口处的光滑度 -
Crinkliness
:枝条的扭曲度,0代表笔直的枝条,1代表弯弯扭扭的枝条,可以用曲线来控制从根部到顶端使用不同的Crinkliness
值 -
Seek Sun
:枝条尖端朝向太阳的程度,如果做向日葵的话当然就设成1咯 -
Noise
:给枝条根部到顶端的粗细变化添加一个噪波随机紊乱,值越大越紊乱 -
Noise Scale U
:噪波贴图的大小U值 -
Noise Scale V
:噪波贴图的大小V值 - Flare:只有主干(紧跟树节点的那个枝节点)才能设置Flare,Flare可以让主干底部变得很粗,且最底部截面根据Noise值而变得形状不规则,用来模拟树根有一部分突出在地面以上的效果
-
Flare Radius
:主干根部变粗程度 -
Flare Height
:主干根部变粗部分高度 -
Flare Noise
:主干根部截面
-
- Weld:非主干的枝节点上出现的是下面3个属性,用来模拟长出数值的接口处的过渡效果
-
Weld Length
:衔接区域长度 -
Spread Top
:向上方扩展程度 -
Spread Bottom
:想下方扩展程度
-
-
Break Chance
:枝条断裂的可能性,值越大,越多该层级的枝条出现断裂,断裂的枝条会有断口,而且也不会有次级枝条或叶片产生 -
Break Location
:断裂的位置,会随机在指定范围内取值
-
- Wind
-
Main Wind
:风力大小 -
Main Turbulence
:(非主干的枝节点上才会出现)主要紊乱场力度大小
-
我们可以手动对branch进行调整:
- Move Branch:branch的中轴控制曲线及其节点会显示在Scene View里,选择一个节点然后移动可以改变整个枝条的形状
- Rotate Branch:branch的中轴控制曲线及其节点会显示在Scene View里,选择一个节点然后旋转,可以旋转自这个节点开始以后的枝条部分
- Free Hand:可以手动在Scene View中画出枝条形状
注意:手动调整之后,很多参数就不可用了,编辑器中的节点图示上也会多出一个笔形符号做为提示。
叶节点
叶节点是创建叶片的节点,叶片是一个Quad面片,通常会贴上树叶贴图,但一般不会用奢侈到用单个面片做1片树叶,常见的用法是单个面片上贴上一枝带若干叶片的细小树枝的贴图,来模拟枝繁叶茂的样子。
unity_tree_04.png- Distribution
-
Group Seed
:这个“种子数”是控制这一“群”叶片如何随机分布的 -
Frequency
:在一根上级枝条上会出现多少叶片 -
Distribution
:这些叶片如何分布 -
Growth Scale
:通过一根曲线控制这叶片的大小 -
Growth Angle
:通过一根曲线控制这些叶片的弯曲
-
- Geometry
-
Geometry Mode
:几何体模式-
Plane
:单个Quad面片 -
Cross
:十字交错的2个Quad面片 -
TriCross
:十字交错的3个Quad面片 -
Billboard
:单个Quad面片,但永远面朝摄像机 -
Mesh
:指定一个多边形mesh作为叶片形状
-
-
Material
:指定叶片的材质球
-
- Shape
-
Size
:叶片大小 -
Perpendicular Align
:叶片垂直方向对齐程度 -
Horizontal Align
:叶片水平方向对齐程度
-
- Wind
-
Main Wind
:风力大小 -
Main Turbulence
:主要紊乱场力度大小 -
Edge Turbulence
:边缘紊乱场力度大小
-
我们可以手动对leaf进行调整,leaf没有中轴线,所以只能移动或者旋转:
- Move Leaf:沿着上级brunch移动leaf
- Rotate Leaf:绕leaf和上级branch的接触点旋转leaf
注意:手动调整之后,很多参数就不可用了,编辑器中的节点图示上也会多出一个笔形符号做为提示。
关于风场和动力学解算:
要产生树被风吹动的效果,需要创建一个Wind Zone(风区),我们可以点击Create Wind Zone
按钮创建,或者从菜单栏创建。
树物体的“主干”、“枝条”、“叶片”三种不同的结构部分面对风场的动力学表现是不同的:
- “主干”很粗,所以只受到风场风强的影响,会被风吹弯;
- “枝条”比较细,除了跟着主干运动并被风强吹歪以外,还会受到一个紊乱场的影响,具有一定的震颤抖动效果;
- “叶片”最轻,尤其在边缘部分的叶片,震颤抖动效果愈发明显,所以多了一个
Edge Turbulence
的参数。
大家可以下载一些Asset Store里提供的免费的Tree资源,看看别人是怎么设置的: