浅谈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 | 爬虫)
Unity Shader使用法线贴图(Normal Map)的Shader
Unity3d VFX 采用skinned mesh sampling(蒙皮采样)发射粒子效果时fbx模型是否优化(Optimized)带来的问题记录