使用不同纹理多次渲染对象。什么更高效?多种材质或多次调用SetTexture?

时间:2016-12-21 17:30:20

标签: c# unity3d unity5

我需要使用不同的纹理多次渲染一个对象。我想知道最有效的方法。我的第一种方法是使用一个Material,并在OnRenderImage()中调用SetTexture(),以获得给定数量的纹理。现在我想知道如果我在Start()中为每个纹理设置一个材质并在OnRenderImage()中的材质之间进行更改,这是否会有明显改善。然后我不需要SetTexture()调用。但是我找不到SetTexture()实际上做的事情。它只是设置一个标志还是复制或上传纹理?

1 个答案:

答案 0 :(得分:1)

从广泛使用低端设备开始,性能来自批处理。在明确了解范围的情况下,很难确定哪些可以改善您的环境中的表现:

  • 多少个对象
  • 图片数量
  • 目标平台
  • 图像是打包还是外部运行
  • ...

但作为一般规则,您希望使用最少量的材料和单个纹理。如果预处理是一个选项,我建议在单个图像上创建尽可能多的图像的spritesheets。然后使用UV偏移,您可以在多个对象上显示多个图像,以进行1次绘图调用。

我广泛使用了支持Unity的TexturePacker解决方案。它并不便宜,有购买的应用程序和Unity的插件,但它最终可以节省时间和绘制电话。

比如将数百张图像打包成几个4k纹理,然后打到3或4次绘制调用,而不是100s之前。

在您的情况下,这可能不是一个解决方案,但这个概念仍然有效。

整体预制件也不会保存Draw Calls,但会减少内存使用量。

第h

学家