- 渲染上:
(1)Image 通过UGUI的Image和CanvasRenderer组件组件来渲染;
(2)Sprite 通过SpriteRenderer组件来渲染;
(3)两者在视觉上没有任何区别(都使用默认材质时)。它们默认的渲染也都是在Transparent Geometry队列中。 - 原理上:
(1)GPU接收到DrawCall指令后,通过一系列流程生成最终要显示的内容并进行渲染,其中大致的步骤包括:
a. CPU发送Draw Call指令给GPU;
b. GPU读取必要的数据到自己的显存;
c. GPU通过顶点着色器(vertex shader)等步骤将输入的几何体信息转化为像素点数据;
d. 每个像素都通过片段着色器(fragment shader)处理后写入帧缓存;
e. 当全部计算完成后,GPU将帧缓存内容显示在屏幕上。
(2)通过上面的认知,我们可以推断:
a. Sprite由于顶点数据更加复杂,进行顶点计算时在第1、2步会比Image效率更低;
b. Sprite会比Image执行较多的顶点着色器运算;
c. Image会比Sprite执行更多的片段着色器运算; - 使用上:
(1)Hierarchy窗口,可以把sprite随便放在哪,通过Transform移动其它游戏物体那样移动sprite; Image必须放在Canvas下面, 且只能通过RectTransform在UI界面中移动;
(2)sprite和Image的一个最重要的区别在于sprite支持网格的自动构造,而UI Image的网格始终由矩形构成;SpriteRenderer会创建额外的几何体来裁剪掉多余的透明像素区域,从而减少了大量的片段着色器运算,并降低了overdraw。SpriteRenderer确实是经过优化以显示更多的元素的。所以在2D游戏开发中,游戏场景中的元素,应该尽量使用它去渲染,尤其时复杂的几何图像;
(3)Image仅用于UI显示;
SpriteRenderer和Image组件的区别
于 2022-08-24 15:57:41 首次发布