第二十章 Unity 渲染管线

渲染管线是计算机图形中最基础最核心的部分,它是将3D场景显示到2D平面的技术过程。在DirectX课程中,我们就介绍了渲染管线,分为固定渲染管线和可编程渲染管线(Shader)。但是在DirectX 10版本之后统一了渲染架构,就是将顶点着色器和像素着色器被合二为一,成为流处理器,它将同时负责顶点着色和像素着色。这使得GPU的利用率更加高,也避免了传统架构中由于资源分配不合理引起的资源浪费现象。最新的DX11也是采用流处理器的统一渲染架构。Unity开发Windows平台下的游戏时候采用的底层图形API肯定首选DirectX,我们点击菜单栏“Edit” -> “Project Settings”,然后选择 Player 类别并导航到 Other Settings选项,如下所示:

这里Unity会为我们的游戏运行平台自动选择合适的图形API。当我们取消自动勾选框的时候,Unity会给我们一个下拉选择框,让我们可以自定义使用那个图形API。大家应都清楚,最著名的图形API当属DirectX和OpenGL。我们可以看到Unity提供给我们的下拉选择框第一个就是Direct3D11,当然我们也可以选择其他(不建议)。

Unity对渲染管线的支持也经历了不同的发展阶段。

截止Unity2020版本而言,可以分为三种渲染管线,如下所示:

1.内置渲染管线是Unity的默认渲染管线。这是通用的渲染管线,其自定义选项有限。

Unity的内置渲染管线是 Unity 较陈旧的渲染管线。它并非基于可编程渲染管线。

2.通用渲染管线 (URP) 是一种可快速轻松自定义的可编程渲染管线,允许您在各种平台上创建优化的图形。通用渲染管线是由 Unity 制作的预构建可编程渲染管线。URP让您在移动平台、高端游戏主机和 PC 等各种平台上快速轻松地创建优化的图形。

3.高清渲染管线 (HDRP) 是一种可编程渲染管线,可让您在高端平台上创建出色的高保真图形。高清渲染管线是由 Unity 预先构建的可编程渲染管线。借助 HDRP 可以为高端平台创建出色的高保真图形。HDRP 可以用于高品质AAA 级游戏,但需要兼容的 GPU 硬件。

URP专注于性能,偏向移动端和低端机器,它拥有很多HDRP相同的功能,但为了在所有平台达到更好的性能,其做了一定的缩减,但这并不意味着URP做不出漂亮的东西。HDRP专注于高端图形渲染,以画面为主 , 偏向高端机器和影视,但要想得到完成利用HDRP的完美表现能力,需要大量的贴图,漫反射贴图、高光贴图、金属贴图、平滑贴图、AO贴图、法线贴图、凹凸贴图、高度贴图,所以不是对效果有特别大需求的话慎入。

HDRP提供高级和丰富的光照功能,比如实时全局光照(RealTime GI),能够模拟光线反射、体积光、能模拟光穿过空气中的粒子,还有重头戏的光线跟踪,一种新的光线反射和阴影渲染技术,其原理是跟踪光线在场景中放射的路径,模拟光线在真实世界里与物体交互的效果,这技术对硬件性能非常高,但能产生非常逼真的效果,可以直接用来做电影级别的预渲染作品。另外一个区别是Shader,HDRP提供一系列高端的shader特效,例如高度、细节和parallax Maps,分别用于纹理的位移、细节和深度模拟,它还支持子面散射,用于模拟光线穿过很薄的物体,比如皮肤和衣物,它提供了高级的shader,像是stacklit,能够让你同时使用多个材质的属性,比如子面散射、彩虹色、各向异性和模糊参数化。但好东西不是都在HDRP,2D光照和阴影就是URP独占的,所以如果你在做2D游戏,就选URP。

总结:如果是真实地游戏开发,尤其是手机端开发的话,可以考虑使用URP;如果是PC端游戏开发,并且有足够的美术人员支持,可以考虑使用HDRP开发AAA级游戏。很明显,三种渲染管线逐级提升游戏画面的品质,当然也需要高性能的GPU的支持。对于我们学习来讲,Unity的默认渲染管线就已经足够了。

如何在我们工程使用选择那个渲染管线呢?

首先是创建工程的时候,我们就可以进行选择,如下所示:

我们之前选择的“3D”就是Unity的默认渲染管线,其他两个红色线框标注的分别是“HDRP”和“URP”,从他们的名字上我们就能够看出来。下面是一个“URP”的工程,Unity会自动给我们创建一个默认场景,如下所示。

我们直接Play运行后的效果如下

如果忽略一些细节的话,整体的渲染效果还是不错的,场景中的地面,墙面以及木棍等等游戏对象都很栩栩如生,光影效果也非常不错。相比于多年前的一些国内游戏,画面提升很多。

相对于普通的“3D”工程(默认渲染管线)而言,他们之间有什么区别呢?

我们可以从“Package Manger”窗口查看一下,下面是普通的“3D”工程。

下面是“URP”工程的截图

我们发现,增加了一个“Univeral RP”的包,这就是Unity自定义的通用渲染管线。请大家注意的是,渲染管线的选择只是提升我们的游戏画质,模拟更加逼真的三维场景,对于我们的游戏逻辑影响并不是很大,更多的在于美术设计人员的工作内容。

当然,我们还可以继续创建一个“HDRP”工程,Unity也同样给我们提供了一个默认的场景,我们可以运行查看它的效果,如下所示:

我们可以查看它的“Package Manger”窗口

这个HDRP场景是三个房间,我们可以直接Play运行,查看效果。

鼠标可以选择视角,使用WASD进行移动,我们进入下一个房间

我们还可以继续向前移动,进入第三个房间

如果你是NVIDIA GeForce RTX系列的显卡,那么效果比截图更加逼真。

接下来,我们介绍一下如何将默认的渲染引擎升级到通用渲染引擎,首先我们创建一个“U3DProject”的“3D”工程。为了演示升级渲染引擎的效果,我们创建一个平面Plane和一个立方体Cube游戏对象,如下所示

两个游戏对象都位于世界坐标系的原点(0,0,0)位置。这里需要注意的是,由于Cube的轴心位于中心位置,并且Cube的默认尺寸就是一个Unity单位长度(1米)。因此,我们将Cube置于世界坐标系原点的时候,它有一半的部分是在地面的下面的。因此,我们将Cube的Position属性的Y值提高到0.5即可。这样整个Cube就位于平面的上面了。接下来,我们分别创建两个颜色材质,一个名称为CubeMaterial,一个名称为PlaneMaterial。

创建材质的方式为,在Project工程面板空白处右击,然后选择“Create”->“Material”。新创建的材质文件,默认处于重命名状态,我们直接录入材质名称即可。如下所示

接下来,我们分别点击选中两个材质文件,并在其Inspector检视面板中修改颜色值。

点击那个“吸管”旁边的白色矩形颜色框,会弹出一个“色环”窗口。

我们在“环”上选中一个主色系,然后在里面的“矩形”中选择一个具体的颜色值即可。

这样,我们就完成了一个颜色的材质。然后我们将Project工程面板中的“PlaneMaterial”材质拖拽到场景中的Plane平面游戏对象上面。

如果角色颜色不好看的话,还可以继续修改材质颜色,平面颜色会同步显示的。

接下来,我们以同样的方式来给Cube添加一个颜色,最终如下所示

 

设置完毕之后,我们调整一下相机的位置,方便观察平面和立方体。

接下来,我们保持相机选中状态,我们点击菜单栏“GameObject”->“Align View to Selected”

接下来,我们直接Play运行工程

可能大家角色Scene窗口中的游戏对象明显没有Game窗口中的“亮”一些。这是因为Scene窗口中的“灯光”效果没有打开,我们可以点击Scene窗口中的那个“灯泡”的按钮。

现在,即使不Play运行工程,Scene窗口与Game窗口中的亮度都一样了。

接下来,我们添加“Univeral RP”通用渲染管线包。

我们选择打开Window > Package Manager窗口。

点击“Packages: InProject”下拉框,选择“Unity Registry”

在列表中找到“Univeral RP”,然后点击“Install”安装。

然后,我们再切换回“Packages: InProject”查看

已经存在“Univeral RP”通用渲染管线包,同时在我们的“Project”视图中也能看到

接下来,我们在Project工程面板中的Assets目录空白处右键选择Create -> Rendering -> Universal Render Pipeline -> Pipeline Asset(Forward Renderer),点击后生成下面两个文件。

这两个文件分别是

“UniversalRenderPipelineAsset.asset”和“UniversalRenderPipelineAsset_Renderer.asset”。

然后在菜单栏选择Edit -> Project Settings -> Graphics选项。

然后我们要将“UniversalRenderPipelineAsset.asset”拖拽到上面的红框标识的地方。

接下来,我们就会发现场景中的游戏对象的材质全部丢失了。

很明显,这个问题就是我们安装并启用通用渲染管线造成的。

这里,我们需要将材质升级一下就能解决,点击菜单栏:Edit -> Render Pipeline -> Universal Render Pipeline -> Upgrade Project Materials to UniversalRP Materials

很明显,这是升级URP材质的意思,然后会有一个小弹框,如下:

我们选择“Proceed”即可,然后场景中的材质就回来了。

接下来,我们重新Play当前工程,查看运行效果

仔细对比前后两种渲染效果,我们发现灯光打在平面上面的颜色变得更加明显。同时,立方体的的颜色以及阴影效果也有了差异。可能也是因为我们的场景比较单一,如果是稍微复杂的自然场景,可能区分会大一些。我们以之前的“RoleDemoProject”工程来举例。

升级到URP渲染管线后如下

仔细观察,在颜色,明亮,以及一些细节上面,都有很大的区别。

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Do you wish you had debug views in LWRP / URP? Do you wish it was easy to add custom debug views? That it was accessible in game view and in builds? URP Debug Views - A unique plugin that adds debug views support for LWRP / URP and more! TLDR URP Debug Views adds must have features for anyone that uses LWRP / URP: - most of the debug views from the built-in renderer (including Shaded Wireframe!) - works in scene view, game view and in builds - add your own debug view with a single shader Available debug views - Shaded Wireframe - World normals - World tangents - Shadow cascades - Overdraw - Vertex color R - Vertex color G - Vertex color B - Vertex color RGB - Vertex color A - UV0 Checker - UV1 Checker Available everywhere Debug views work in scene view, game view but also in builds. It has been tested on various PCs, Mac, Android and VR. Custom Adding custom debug views is very easy, a single shader is enough! You can then plug the newly created debug view in an editor menu, shortcuts or a custom in-game menu. Time saver Being able to check problems and iterate on them quickly is very important, especially if you are an indie game developper. "Why is this vertex color not working? Is the problem coming from the mesh, Unity or the shader?" "What is this visual bug, is it coming from the geometry or the textures?" Any of theses questions and many more can be answered in one click by using the correct view. Without any debug view, it can take 10 minutes, an hour, or more. Less time fixing problems means more time working on your game. Your time is important, value it! Full source code included! Support I'm dedicated to make this asset a must-have for LWRP / URP. I answer to email and do my best to fix bugs and implement feature request. Please don't hesitate to contact me for feedback, ideas or bug report at ph.graphics.unity@gmail.com You can also come and chat on Discord at https://discord.gg/ksURBah If you are not convinced yet, you can look at reviews for

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咆哮的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值