模型结构

一个3D模型文件通常由以下几个主要部分组成,具体结构可能因文件格式(如OBJ、FBX、GLTF、STL等)而有所不同

1. 几何数据

  • 顶点 (Vertices):定义模型的三维空间坐标点,通常是 (x, y, z) 的形式。

  • 法线 (Normals):表示每个顶点或面的方向向量,用于计算光照效果。

  • 纹理坐标 (UV Coordinates):定义模型表面如何映射到二维纹理图像上,通常为 (u, v) 坐标。

  • 多边形/面 (Polygons/Faces):定义顶点如何连接形成三角形或多边形,构成模型的表面。

2. 材质信息

  • 材质属性:包括颜色、反射率、透明度、粗糙度等。

  • 漫反射贴图 (Diffuse Map):定义模型的基本颜色。

  • 法线贴图 (Normal Map):模拟细节和凹凸效果。

  • 高光贴图 (Specular Map):控制反射强度。

  • 环境遮挡贴图 (AO Map):模拟间接光照效果。

  • 其他贴图:如金属度、粗糙度、高度贴图等。

  • 材质库:某些格式(如OBJ)会通过外部材质库文件(`.mtl`)来存储材质信息。

3. 动画数据

  • 骨骼结构 (Skeleton/Bones):定义角色的骨骼层级关系。

  • 蒙皮权重 (Skinning Weights):指定顶点与骨骼之间的关联权重,用于实现平滑变形。

  • 关键帧动画 (Keyframe Animation):记录骨骼在不同时间的关键姿态。

  • 动作曲线 (Animation Curves):描述动画参数随时间的变化。

4. 摄像机与灯光

  • 摄像机数据:定义虚拟摄像机的位置、方向、焦距等。

  • 灯光信息:包括光源类型(点光源、聚光灯等)、颜色、强度等。

5. 附加信息

  • 层次结构 (Hierarchy):描述对象之间的父子关系。

  • 物理属性:如刚体、碰撞体、质量等,用于物理模拟。

  • 自定义属性:一些格式支持用户定义的元数据,例如标签、注释等。

  • 压缩与优化:为了减小文件大小,可能会对几何数据进行压缩或简化。

6. 文件格式特定的内容

  • OBJ:以文本形式存储,包含顶点、法线、UV坐标和面信息。

  • FBX:支持复杂的动画、材质和层级结构,通常为二进制或ASCII格式。

  • GLTF/GLB:专注于高效传输和渲染,支持嵌入纹理和动画。

  • STL:主要用于3D打印,仅包含几何数据(顶点和面),无材质或动画信息。

Obj文件结构

# 顶点数据(顶点坐标)
v 0.0 0.0 0.0
v 1.0 0.0 0.0
v 0.0 1.0 0.0

# 纹理坐标
vt 0.0 0.0
vt 1.0 0.0
vt 0.0 1.0

# 法线
vn 0.0 0.0 1.0

# 面数据(使用顶点、纹理坐标和法线的索引)
f 1/1/1 2/2/1 3/3/1

渲染管线

渲染流水线

GPU和CPU之间的通信

GPU流水线

Unity Shader

光照

纹理

透明效果

屏幕后处理

Shader Graph

Shader Toy