使用blender优化模型

介绍

自从上周分享了如何在地图上加载大量gltf模型之后,很多网友留言问是如何做模型优化的,今天就来解答一下。做这件事前我问了AI在three.js场景中加载更多GLTF模型的优化方法,它给我的回答是这样的:

  • 使用instanceMesh加载相同的网格。实例化网格允许您在场景中复制单个网格,而只需要存储一次网格的顶点数据。这可以显着提高场景中的性能。
  • 使用低分辨率的网格。如果您不关心模型的细节,您可以使用低分辨率的网格来提高性能。
  • 使用纹理压缩。纹理压缩可以减少纹理所占用的空间,从而提高性能。
  • 使用延迟加载。延迟加载允许您延迟加载模型,直到它们进入视口。这可以提高性能,因为您不必加载您看不到的模型。
  • 使用合并着色器。合并着色器允许您将多个模型的着色器合并到一个着色器中。这可以提高性能,因为您不必为每个模型渲染一个着色器。

总结一下就是减少的绘制次数,优化模型的面数和纹理,下面我们讲讲具体如何做模型优化。本文用到的建模工具是blender。为啥选blender?因为它是免费的...

优化步骤

优化模型可以从以下几方面入手:

  1. 合并模型网格
  2. 精简面数
  3. 模型展UV贴图
  4. 删除模型中看不见的点线面

1. 合并模型网格

选中所有的Mesh后做合并, 常规做法下图所示,选择相关联的Mesh后Ctrl+J直接合并。

但这里的"合并"操作相当于模型组合,事实上还是没有把几个几何体的内部网格融合,我们按Tab切换到编辑模式之后可以发现,通过手动拖拽还是直接把Mesh分开。

正确的做法是使用bool tool插件,在物体模式下选择相关联的Mesh,按Ctrl+shift+B 打开bool tool,点击Union实现合并。

2.精简面数

物体模式下,选择模型对象,点击修改器属性-添加修改器-精简,就可以在面板左下角看到当前模型的面数,比如下图的模型共1412个面,通过"塌陷、反细分、平面"三种方式可以针对不同模型进行减面,最常用的是第一个"塌陷"。

通过调节 塌陷 - 比率的数值小于1.0,可以直观地看到面数变化,如下图所示。如果你不想将整个模型减面,则可以使用已选的顶点组的方式缩小减面范围。

减面完毕记得要点击"应用"才算生效,这个是重要知识点。

3.模型展UV贴图

编辑模式下,点击顶部菜单 UV Editing 打开UV编辑器,在右侧模型页面点A键全选所有顶点,编辑器会自动生成展UV图。如下图所示完美展开。

点击UV编辑器头部的UV-导出UV布局图,就可以直接在图上加贴图了。完了导出图像,回到编辑器头部,点击打开图像,就可以看到如下效果。

UV贴图做好就可以添加材质贴图了,步骤如下所示:

1.选中模型,点击材质属性(小红地球图标) 2.点击新建 3.点击"基础"色后面的黄色点图标,打开的面板里选择"图像纹理" 4.点击下图所示的"关联图像"图标,选择刚刚做好的材质贴图,就OK了。

以上步骤做完,应该可以看到如下效果,记得修改查看方式,选编辑器右上角"视图着色方式":

3.模型展UV贴图 Extend

以上步骤适用于比较规则的模型,对于比较复杂的模型可能自动展开会有各种奇奇怪怪的UV面。

这时候可能需要人为干预展UV结果,我们可以通过"标记缝合边"的方式调整UV图最终的展开形态,如果要求某几个面在展开后是连在一起的,那么可以选中它们并集的边然后标记一下。

另外在做展开的时候可以试试 UV-智能UV投射,再选择"UV-孤岛比例平均化",再手动调节一下各种孤岛,就可以用了。譬如像下面这个模型,展UV时破破烂烂,经过缝缝补补之后变成这样。

4.删除看不见的点线面

这一步有2种做法: 手动删除或者使用插件自动删除。

手动删除大概有这些技巧:

  • 选择处于同一个平面上的面,右键"融并",就可以直接合并为1个面;
  • 选择整个模型所有面,右键"有限融并",就可以将所有在同个平面的面合并;
  • 将多条边融合,可以选择关联的连接点,右键"融并"。

如果安裝步骤1使用bool tool插件做合并的话,内部那些看不见的面会自动被剔除的。文末链接里也有其他用于做类似优化的插件。

安装插件

本文使用到的Bool Tool 是 Blender 的插件,它允许您使用布尔运算来合并两个或多个对象。可以进行以下四种运算:

  • 交集:合并两个对象的共同部分。
  • 差异:从第一个对象中减去第二个对象。
  • 并集:合并两个对象。
  • 剪切:将第二个对象应用于第一个对象。

插件安装方法如下图:打开编辑-偏好设置-插件,搜bool,打钩后重启即可。

相关链接

如何删除模型中多余的点 线 面

www.bilibili.com/video/BV1vL...

blender插件 网格清理布线优化神器

www.bilibili.com/video/BV1cN...

相关推荐
Myli_ing9 分钟前
考研倒计时-配色+1
前端·javascript·考研
余道各努力,千里自同风11 分钟前
前端 vue 如何区分开发环境
前端·javascript·vue.js
软件小伟20 分钟前
Vue3+element-plus 实现中英文切换(Vue-i18n组件的使用)
前端·javascript·vue.js
醉の虾42 分钟前
Vue3 使用v-for 渲染列表数据后更新
前端·javascript·vue.js
张小小大智慧1 小时前
TypeScript 的发展与基本语法
前端·javascript·typescript
hummhumm1 小时前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j
asleep7011 小时前
第8章利用CSS制作导航菜单
前端·css
hummhumm1 小时前
第 28 章 - Go语言 Web 开发入门
java·开发语言·前端·python·sql·golang·前端框架
幼儿园的小霸王2 小时前
通过socket设置版本更新提示
前端·vue.js·webpack·typescript·前端框架·anti-design-vue
疯狂的沙粒2 小时前
对 TypeScript 中高级类型的理解?应该在哪些方面可以更好的使用!
前端·javascript·typescript