- 用户指南
- 资源商店 (Asset Store)
- 资源服务器 (Asset Server)(仅限团队许可证)
- 缓存服务器(仅限团队许可证)
- 幕后场景
- 创建游戏
- 运行时实例化预设 (Prefabs)
- 变换 (Transforms)
- 物理
- 添加随机的游戏元素
- 粒子系统(Particle Systems)
- Mecanim 动画系统
- 旧动画系统
- 导航网格 (Navmesh) 和寻路 (Pathfinding)(仅限专业版 (Pro))
- Sound (音频侦听器)
- 游戏界面元素
- 多玩家联网游戏
- iOS 开发入门
- Android 开发入门
- Blackberry 10 开发入门
- Metro:入门指南
- 本地客户端开发入门
- FAQ
- Advanced
- Vector Cookbook
- 资源包(仅限专业版)
- Graphics Features
- 资源数据库 (AssetDatabase)
- 构建播放器管道
- 分析器(仅限专业版)
- 光照贴图快速入门
- 遮挡剔除(仅限专业版)
- 相机使用技巧
- 运行时加载资源
- 通过脚本修改源资源
- 用程序生成网格几何体
- 富文本
- 在 Unity 工程 (Project) 中使用 Mono DLL
- 事件函数的执行顺序
- 移动优化实用指南
- Unity XCode 工程结构
- 优化图形性能
- 减少文件大小
- 理解自动内存管理
- 平台依赖编译
- 泛型函数
- 调试
- 插件(专业版/移动版特有功能)
- 文本场景文件格式(仅限专业版)
- 流媒体资源
- 启动时运行编辑器脚本代码
- 网络模拟
- VisualStudio C 集成
- 分析
- 检查更新
- 安装多版本 Unity
- 故障排除
- Unity 中的阴影
- Unity 中的 IME
- 对集成显卡进行优化
- 网络播放器 (Web Player) 部署
- 使用网络播放器中的信任链系统
网格剖析
网格由排列在三维空间中的三角形组成,产生一种固体对象的感觉。三角形由三个角点或顶点构成。在网格 (Mesh) 类中,顶点都存储在单一数组中,每个三角形使用对应于顶点数组索引的三个整数来指定。三角形也集合在一起,形成一个单一的整数数组;数组从一开始以三个整数为一组,因此元素 0、1 和 2 定义第一个三角形,3、4 和 5 定义第二个三角形,并以此类推。任何给定的顶点可以根据需要在尽可能多的三角形中予以重复使用,但也有多个原因表明您不希望这么做,解释如下。
照明和法线
三角形足以确定对象的基本形状,但在大多数情况下,需要额外的信息来显示网格。要为对象正确着色以便照明,必须提供 每个顶点的法线向量。法线是向外指的向量,在与之相交的顶点位置垂直于网格表面。在着色计算中,将每个顶点法线与入射光方向进行对比,后者也是一个向量。如果两个向量方向一致,那么表面上的那一点正面接受光照,光的全亮度将用于着色处理。完全从法线向量侧面入射的光没有到达表面上的该位置。通常情况下,光与法线形成一个角度,所以着色处理会在完全明亮和完全黑暗之间,具体依角度而定。
由于网格是由三角形组成,所以似乎拐角处的法线仅仅垂直于三角形的平面。然而,法线实际上内插在三角形当中,提供 拐角之间中间位置的面方向。如果全部三根法线指向同一方向,那么三角形将被均匀完全照亮。将单独的三角形均匀着色的效果是边缘变得非常清晰而独特。这就是立方体模型或其他边缘锐利的固体模型所需的效果,但是法线插值可用来创建平滑着色,以近似曲面。
为获得清晰的边缘,需要翻倍每个边缘的顶点数,因为两个相邻的三角形需要各自独立的法线。 对于曲面,顶点通常沿着边缘予以共享,但往往需要通过一点直觉来确定共享法线的最佳方向。法线可能只是周围三角形平面的法线平均值。然而,对于球体这样的对象,法线应该直接由球体的中心向外指。
通过调用 Mesh.RecalculateNormals,您可以假设网格几何体的“意义”,让 Unity 算出法线方向;假设三角形之间共享的顶点表示光滑表面,而翻倍的顶点表示一个清晰的边缘。虽然在大多数情况下这不是一个太坏的近似,但 RecalculateNormals 会受到一些纹理状况影响,其中顶点必须增加一倍,即使在表面光滑的情况下。
纹理
除照明之外,模型也常常使用纹理来在表面上创建精致细节。纹理有点像是印在可拉伸橡胶板上的图像。对于每个网格三角形,纹理图像的三角形区域已定义,纹理三角形已拉伸和“固定”来配合网格三角形。要实现该效果,每个顶点需要存储将固定到其身上的图像位置的坐标。这些坐标为二维坐标,缩放范围为 0..1(0 表示图像的底部/左边,1 表示右边/顶部)。为避免将这些坐标与三维世界的直角坐标混淆,我们将其称为 U 和 V,而不是熟悉的 X 和 Y,所以它们通常被称为 UV 坐标。
像法线一样,每个顶点的纹理坐标都是唯一的,所以在有些情况下,纯粹为了获得整个边缘的不同 UV 值,您需要翻倍顶点数。一个明显的示例是两个相邻三角形使用纹理图像的不连续部分(比如说,面部纹理上的眼睛)。此外,大多数是完全封闭卷的对象需要一条“缝”,以便将一个区域的纹理环绕卷起并连接在一起。缝一边的 UV 值与另一边的不同。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论