浅谈unity模型

Posted 左右...

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈unity模型相关的知识,希望对你有一定的参考价值。

(不重要的前言:该博文为系列博文,每一篇有前后文关系,例如基类、组件的集成,如果发现有陌生组件和基类,请查看前面文章,本系列文章单纯应用unity的mesh来绘制模型,并未使用任何三方插件,文章内容、代码都是纯手打,望支持)

最近准备写一组unity模型渲染分析的文章,记录一下这两年的心得。

unity模型渲染核心部分是网格和材质,为什么说是渲染的核心,因为模型的表现需要结合碰撞器和刚体等物理引擎元素,以更好的呈现3d场景,所以网格和材质只是渲染的核心。

网格描述了模型的顶点、三角面、uv、法线等基本元素;材质描述了物体的皮肤表现。 通常模型具有网格和材质之后,可以在场景中正常呈现:

1.Mesh:

给一个模型定义了顶点、三角面、uv后,调用相关接口就可以绘制出一个模型:

 meshFilter.sharedMesh.vertices = vertices.ToArray();
 meshFilter.sharedMesh.triangles = triangles.ToArray();
 meshFilter.sharedMesh.uv = uvs.ToArray();

 meshFilter.sharedMesh.RecalculateBounds();
 meshFilter.sharedMesh.RecalculateNormals();
 meshFilter.sharedMesh.RecalculateTangents();

2.顶点vertices:

        unity模型实际上是一层蒙皮,模型只有表皮部分,内部都是中空的,网格(mesh)就是用来描述蒙皮基础属性的组件,而顶点vertices就是蒙皮个各个顶点,通常顶点越密集,模型品质越高,如图:网格线每一个交点都是顶点,顶点互相连在一起构成网格。

2.三角面triangles:

        上文说到,顶点互相连在一起构成网格,但是依赖什么规则相连,就依赖triangles,这是一个int数组,数组每个子项是某个顶点的index,每三个子项构成一个三角面,所以triangles的长度一定是3的倍数。上图可以看到很多个三角面组成了一个帽子形状的模型。

3.uv:

        uv是描述每个顶点在纹理上的位置,范围是0-1,按照模型的特性设置uv就可以得到想要的渲染方式,所以uv数组的长度和顶点数组的长度一样。

4.法线normals:

        normals描述每个顶点的法线,数组长度和顶点数组长度一样,法线决定光照对模型的矩阵运算。

基于以上基本元素,后续出一些绘制模型的教程。

        

以上是关于浅谈unity模型的主要内容,如果未能解决你的问题,请参考以下文章

带你玩转模型法线,实验一下大胆的想法(法线贴图 | shader | Unity | python | 爬虫)

怎么通过程序控制unity3d人物动作

Unity Shader使用法线贴图(Normal Map)的Shader

ue4导入模型后法线贴图不正常,如图片显示?

Unity3d VFX 采用skinned mesh sampling(蒙皮采样)发射粒子效果时fbx模型是否优化(Optimized)带来的问题记录

Unity角色换装问题