当前位置:   article > 正文

游戏开发中 Sprite 和 Image 的区别_sprite image

sprite image

在开发中,有的时候会遇到一些奇奇怪怪的问题,比如说在3D游戏开发中需要制作一个 主角血条或者 敌人血条的时候,一般来说有两种方式,一个是 使用 Canvas 制作一张 Image 进行渲染,一个是使用 SpriteRenderer 进行渲染,如果使用 Image进行渲染的话每一个敌人都得引用一个 Image进行实时的渲染,那么可能效果上没有区别,但是本质上却又很多的差异;
Image:使用 Canvas Renderer进行渲染,
Sprite Renderer:本质是一张半透明的 texture。在导入的时候被设置成为 Sprite,是被渲染到 2D / 3D 场景或者其他界面的图片。
两者在视觉上没有任何区别(都使用默认材质时)。它们默认的渲染也都是在Transparent Geometry队列中。
在场景中,你 的 Sprite 可以随便的进行摆放,但是你 的 Image 不得不放在 Canvas 下边,这样来看的话,Image 有了一些的局限性,继续往下边走,Sprite和Image的一个最重要的区别在于Sprites支持网格的自动构造,而UI Image的网格始终由矩形构成。
在这里插入图片描述
                                                                       Sprite                                   Image

上图中可以看到,UI Image创造了一个紧密的矩形来包裹Sprite,而SpriteRenderer创造了一个能更好匹配将要渲染的sprite的网格。
Sprite由于顶点数据更加复杂,在进行顶点计算时会比Image效率更低;
Sprite会比Image执行较多的顶点着色器运算;
Image会比Sprite执行更多的片段着色器运算
由于片段着色器是针对每个像素运算,Sprite通过增加顶点而裁剪掉的部分减少了相当多的运算次数,在绝大多数情况下,反而比Image拥有更好的效率(尤其是场景中有大量的2D精灵时)。SpriteRenderer会创建额外的几何体来裁剪掉多余的透明像素区域,从而减少了大量的片段着色器运算,并降低了overdraw;而Image则会创建简单的矩形几何体。随着2D元素数量的增加,这种差别会慢慢明显起来。
因此在2D游戏开发中,游戏场景中的元素,应该尽量使用它去渲染。而Image应该仅用于UI显示(实际上即使不考虑性能原因,由于屏幕分辨率的变化,Image可能会被Canvas改变显示位置和实际大小,如果用于游戏内元素的显示,可能会造成跟预期设计不一致的显示结果,也应该避免使用)。
回到主题,SpriteRenderer和UI Image之间的区别是什么?显而易见,sprites的开销更大,因为它的几何数据更复杂。但是如果我告诉你顶点操作通常比片元操作开销小的多呢?尤其对于移动设备和半透明对象。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/106623
推荐阅读
相关标签
  

闽ICP备14008679号