Unity3D Canvas 的三种渲染模式 Screen Space - overlay, Screen Space - camera, World Space

Canvas 有三种渲染模式(render mode): Screen Space - overlay(覆盖), Screen Space - camera(相机), World Space(世界)

  • Screen Space - overlay

覆盖模式,这种模式,一般用的比较多,它始终位于3D场景的最前面,会挡住3D场景中的物体(如果对应位置有UI)。在通常的渲染管线中,一般都是先画场景中的物体,最后画UI,所以这种模式下的UI会挡住3D场景中渲染出来的画面。

Unity3D Canvas 的三种渲染模式 Screen Space - overlay, Screen Space - camera, World Space_第1张图片

  • Screen Space - camera

相机模式,这种模式,需要搭配一个相机一起使用(假定该相机名字是 UICamera),该UI位于UICamera前方,与相机的距离可以通过Inspector面板上的Plane Distance设定,这个模式下的UI会受到UICamera设置的影响,比如UICamera设置的模式为透视模式(Perspective),那么渲染出的UI也会有远小近大的效果。

Unity3D Canvas 的三种渲染模式 Screen Space - overlay, Screen Space - camera, World Space_第2张图片

  • World Space

世界空间,这种模式比较好理解,可以直接把对应的UI对象当作一个3D对象,会被位置在它前面的其他3D物体挡住,也会挡住位置在它后面的3D物体。

Unity3D Canvas 的三种渲染模式 Screen Space - overlay, Screen Space - camera, World Space_第3张图片


Screen Space - overlay和Screen Space - camera渲染先后顺序:

结论:Screen Space - camera是属于在场景内渲染的结构,它的渲染顺序在常规的3D物体之后,但是在Screen Space - overlay的Canvas的渲染之前,验证的方式如下,第一幅图为UI的结构,有两个canvas,一个的render mode是Screen Space - overlay, 另外一个的render mode是Screen Space - camera。

Unity3D Canvas 的三种渲染模式 Screen Space - overlay, Screen Space - camera, World Space_第4张图片

canvas1 , render mode 是 Screen Space - camera

Unity3D Canvas 的三种渲染模式 Screen Space - overlay, Screen Space - camera, World Space_第5张图片

canvas2 , render mode 是 Screen Space -overlay

然后是frame debuger 的分析截图

Unity3D Canvas 的三种渲染模式 Screen Space - overlay, Screen Space - camera, World Space_第6张图片

frame debuger 的分析截图

所以验证得出Screen Space - camera模式的UI渲染时间是在 Screen Space - overlay模式的UI之前的,所以Screen Space - overlay模式的UI不仅仅会覆盖场景内的3D物体,也会挡住Screen Space - camera模式的UI(如果有重叠)。当然我们用同样的方式,也能测出World Space的UI的渲染顺序,这里简单说下结论,包含3D场景、Screen Space - overlay、Screen Space - camera、World Space的渲染顺序依次是:3D场景 -> World Space -> Screen Space - camera -> Screen Space - overlay, 截图如下:


Unity3D Canvas 的三种渲染模式 Screen Space - overlay, Screen Space - camera, World Space_第7张图片


以上是所有关于Unity3D Canvas的三种渲染模式的介绍,随手点赞,手有余香

你可能感兴趣的:(图形学,Unity,面试题,ui,Canvas,Unity3D,UI)