Unity渲染3D模型原理
.OBJ文件介绍
obj文件是3D模型文件格式。由Alias|Wavefront公司为3D建模和动画软件"Advanced Visualizer"开发的一种标准,适合用于3D软件模型之间的互导,也可以通过Maya读写。
顶点数据(Vertex data)
v (几何体顶点 Geometric vertices)
vt (贴图坐标点 Texture vertices)
vn (顶点法线 Vertex normals)
vp (参数空格顶底 Parameter space vertices)
自由形态曲线(Free-form curve)/表面属性(surface attributes)
deg (度 Degree)
bmat (基础矩阵 Basis matrix)
step (步尺寸 Step size)
cstype (曲线或表面类型 Curve or surface type)
元素(Elements)
p (点 Point)
l (线 Line)
f (面 face)
curv (曲线 Curve)
curv2 (2D曲线 2D curve)
surf (表面 Surface)
自由形态曲线(Free-form curve)/表面主题陈述(surface body statement)
parm (参数值 Parameter values)
trim (外部修剪循环 Outer trimming loop)
hole (内部整修循环 Inner trimming loop)
scrv (特殊曲线 Special curve)
sp (特殊的点 Special point)
end (结束的点 End point)
自由形态表面的连接(Connectivity between free-form surfaces)
con (连接 Connect)
成组(Grouping)
g (组名称 Group name)
s (光滑组 Smoothing group)
mg (合并组 Merging group)
o (对象名称 Object name)
显示(Display)/渲染属性(render attributes)
bevel (导角插值 Bevel interpolation)
c_interp (颜色插值 Color interpolation)
d_interp (溶解插值 Dissolve interpolation)
lod (细节层次 Level of detail)
usemtl (材质名称 Material name)
mtlib (材质库 Material library)
指向.mtl的独立文件夹中
shadow_obj (投射阴影 Shadow casting)
trace_obj (光线跟踪 Ray tracing)
ctech (曲线近似技术 Curve approximation technique)
stech (表面近似技术 Surface approximation technique)
unity组件介绍
在一个unity的3d模型当中,往往存在着一些必要的组件
- Transform
- MeshFilter
- MeshRenderer
- Material
Transform用来宣告模型的位置角度以及缩放,这里我们就不深究,那么下面的三个组件到底是起什么作用的呢?
MeshFilter
它通过读取mesh资源,通过MeshRender渲染到屏幕上
mesh=====>网格
在mesh中,包括的资源也就是网格上的一些东西,和.obj文件的内容相似
具体内容可以查看源码
名称 | 类型 | 介绍 |
---|---|---|
vertices | Vector3[] | 顶点数据数组 |
trianges | int[] | 三角形顶点索引数组 |
normals | Vector3[] | 法线向量数组 |
uv | Vector2[] | 纹理坐标数组 |
当拿到这样一些资源赋值给Mesh对象后,我们就获得了一个可以使用的网格对象。
Mesh mesh = new Mesh();
mesh.vertices = new Vector3[];
...类似的代码
然后就可以选择使用MeshFilter 来进行渲染,不论是动态添加或者是本身组件上就拥有MeshFilter,这个组件是一定要挂载到我们应用的对象本身上去才会起作用
//这里采用动态挂载组件
MeshFilter meshFilter = gameObject.AddCompoent<MeshFilter>();
mashFilter.mesh = mesh;
MeshRenderer Material
挂载完成Mesh后,你的场景中的物体就有了一个基本的形状,但是它还没有皮肤,这个时候就轮到MeshRenderer和Material来起作用了
给模型添加材质球
MeshRenderer meshRenderer = gameObject.AddComponent<MeshRenderer>();
meshRenderer.material = //你的材质球
参考链接
参考链接
https://blog.csdn.net/hyy_sui_yuan/article/details/104885628
https://baike.baidu.com/item/obj文件/3574019?fr=aladdin
https://blog.csdn.net/zphshiwo/article/details/81368344
https://blog.csdn.net/gaofei12300/article/details/78595605