近期热门
粉丝2497
关注 0
获赞 9494
教程|在Unity 5中如何减少Draw Call

[U3D] 教程|在Unity 5中如何减少Draw Call

[复制链接]
6826 4 0 0 8年前 举报
本文为大家分享Unity 5中标准着色器的简单概念,并分析如何减少Draw Call(Unity 5中显示为SetPass calls,下文的Draw Call皆表示SetPass calls)。

标准着色器是基于物理的着色器,可以正确渲染各种光照条件下的效果,支持跨平台,拥有可以启用不同功能着色器的纹理字段。

正文开始前先来看一段标准着色器效果的视频:https://www.cgjoy.com/forum.php?mod=attachment&aid=NDgxMTE4fDJmOGQ5MGEwMmNlZmUyNWMzZmE4ZmEyNDBiYjZiYzA0fDE3MjY5Mzk1NDc%3D&request=yes&_f=.mp4
标准着色器会根据纹理字段所选用的纹理改变自身包含的功能,从而影响这个Shader的执行速度。尽管他们都是使用的标准着色器,但最终生成的着色器是不同的,如下图:
01.jpg

这两个着色器在渲染场景时是完全不同的(尽管都是“标准着色器”),因此如果想减少Draw Call,就要以完全不同的方式来处理这两个着色器。

先介绍通用的减少Draw Call的方法,然后再讲解在Unity 5中使用标准着色器时如何减少Draw Call。

手动减少Draw Call
不论是Unity或其它引擎,减少Draw Call无非就是尽可能少用材质。

所以减少材质基本上有以下几步:
  • 按照所用的着色器类型对材质进行分类及整合。
  • 将使用同一着色器的材质的纹理合并为纹理集。
  • 创建一个材质,让其包含着色器及第二步创建的纹理集。
  • 重新对用到该着色器的网格进行纹理映射以匹配纹理集中的纹理坐标。
  • 将第三步创建的材质赋给重新编辑后的网格。


第一步  按照所用的着色器类型对材质进行分类及整合


尽量使用最简单的场景来说明,这里只有4个材质,每个材质都使用Bumped Diffuse着色器,如下图:
02.jpg

注意上图的SetPass calls是4。

对于此场景要处理的材质如下图:
03.jpg


第二步  将使用同一着色器的材质的纹理合并为纹理集

这里每个着色器有两张纹理,一张基本纹理和一张Bumped Diffuse要用的法线纹理,所以需要的纹理贴图如下:
04.jpg

将纹理保存到工程以供后续使用:
05.jpg

第三步  创建材质,让其包含着色器及第二步创建的纹理集

创建材质,并设置好两个纹理和着色器(本例是“Bumped Diffuse”)如下图:
06.jpg

第四步  重新对网格进行纹理映射以匹配纹理集中的坐标

这一步可在任意3D编辑器中完成(Maya、3D studio 、Max 、Blender 等)。

该步骤比较耗时,需要重新设置网格的UV坐标以对齐到第二步所创建的纹理集中的像素。如下图:
07.jpg

对所有使用同一着色器的网格重复以上步骤。

第五步  将第三步创建的材质赋给重新编辑后的网格

还要进行以下两个步骤:
  • 用所有重新映射后的网格替换之前的网格,并禁用旧的网格。
  • 将第三步创建的材质赋给重新映射后的网格。

如下图:
08.jpg

运行效果如下图:
09.jpg

回到第一步,优化之前的SetPass calls是4,而优化后减少至1,本例中Draw Call减少了75%。

在Unity 5中使用标准着色器时减少Draw Call
如之前所说,标准着色器会根据所用到的纹理变得更快或更慢,与此同时渲染方式也会不同。所以如果材质的纹理使用同一标准着色器,就可以将材质合并。例如,合并所有只有颜色的网格、合并所有只有Albedo(反射率)纹理的网格等等。按照纹理整合好对象后对于任意着色器都只需进行上面五个步骤进行优化,其中的着色器就是标准着色器的纹理字段。

使用标准着色器的场景优化前后对比图如下:
10.jpg

可以看到Draw Call从91减少至22,约降低了75%,如果尽可能的合并网格效果还可以更好。

在Unity中自动减少Draw Call
本文作者Juan制作了插件Pro Draw Call Optimizer,可以自动根据用到的着色器类型来整合对象,并自动对所有未优化的场景进行“加工”。另外如果场景只用到Diffuse和Bumped Diffuse着色器,还可以使用Juan制作的免费版插件Pro Draw call Optimizer Light。


本文来源于:pencilsquaregames 原作者:Juan




0
点赞
0
打赏
0
添加到收藏夹

0

点击复制链接

使用微信扫码分享
一次扣10个券
全部评论4
您需要登录后才可以回帖 登录

nice.good..........
8年前
回复

使用道具 举报

good........
8年前
回复

使用道具 举报

资源甚好,且阅且珍惜!
8年前
回复

使用道具 举报

............

8年前
回复

使用道具 举报

您当前使用的浏览器IE内核版本过低会导致网站显示错误

请使用高速内核浏览器或其他浏览器