渲染管线是计算机图形中最基础最核心的部分,它是将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渲染管线后如下

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

第二十章 Unity 渲染管线相关推荐

  1. 鸟哥的Linux私房菜(服务器)- 第二十章、WWW 伺服器

    第二十章.WWW 伺服器 最近更新日期:2011/08/05 我們最常講的『架站』其實就是架設一個 Web 網站啦!那麼什麼是 Web 呢?那就是全球資訊廣播的意思 (World Wide Web), ...

  2. 数字图像处理:第二十章 视频编码与压缩

    第二十章 视频编码与压缩 目录 1.    引言 2.    有运动补偿的预测编码 3.    运动估计算法 作业 1. 引言 视频信号具有巨大的数据量,例如:在不做任何压缩的条件下,对于NTSC视频 ...

  3. 鸟哥的Linux私房菜(基础篇)- 第二十章、启动流程、模块管理与 Loader

    第二十章.启动流程.模块管理与 Loader 最近升级日期:2009/09/14 系统启动其实是一项非常复杂的程序,因为核心得要侦测硬件并加载适当的驱动程序后,接下来则必须要呼叫程序来准备好系统运行的 ...

  4. activiti高亮显示图片_【正点原子FPGA连载】第二十章SD卡读BMP图片HDMI显示实验领航者 ZYNQ 之嵌入式开发指南...

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  5. 修改dts后重编译_「正点原子FPGA连载」第二十章另一种方式编译ZYNQ镜像

    1)摘自[正点原子]领航者 ZYNQ 之linux驱动开发指南 2)实验平台:正点原子领航者ZYNQ开发板 3)平台购买地址:https://item.taobao.com/item.htm?& ...

  6. Unity渲染管线-百人计划笔记

    Unity渲染管线是什么? 渲染流水线,渲染的过程,是线性的.它涉及cpu和gpu.分为应用阶段.几何阶段.光栅化阶段.像素处理阶段.上一阶段的输出是下一阶段的输入. 应用阶段 应用阶段包括准备基本数 ...

  7. 《Reids 设计与实现》第二十章 监视器

    <Reids 设计与实现>第二十章 监视器 文章目录 <Reids 设计与实现>第二十章 监视器 一.简介 二.成为监视器 三.向监视器发送命令信息 四.重点回顾 一.简介 通 ...

  8. 【Java数据结构与算法】第二十章 Dijkstra算法和Floyd算法

    第二十章 Dijkstra算法和Floyd算法 文章目录 第二十章 Dijkstra算法和Floyd算法 一.Dijkstra算法 1.介绍 2.代码实现 二.Floyd算法 1.介绍 2.代码实现 ...

  9. 羊皮卷的实践-第二十章

    第二十章 你可以在任何一个星期一开始填写你的成功记录表.一旦开始,就不能中断,除非严重的疾病. 还有一个例外.如果在你执行这项计划的过程中,碰巧有一次休假,那么尽管让自己去享受假日的轻松.然后,一旦假 ...

最新文章

  1. python中是干嘛的-你都用Python来做什么,它对你来说有什么作用?
  2. Table 'xxxxx' is marked as crashed and last 解决办法
  3. CTFshow 信息收集 web20
  4. JavaScript页面校验
  5. 15个最受欢迎的Python开源框架(转载)
  6. 设置路由器端口转发功能如何操作
  7. NAS新突破,仅需半个 GPU day 即可训练出高性能架构!阿里提出 Zen-NAS
  8. 指标公式c语言源码下载,自用60分钟指标源码
  9. matlab数据栅格化,新手求卫星降水数据CMORPH_V1.0数据完整处理方法,有matlab打开的代码但是不会处理...
  10. MCMC算法大统一: Involutive MCMC
  11. Activity启动流程(二)system_server进程处理启动Activity请求
  12. 普通IO口红外线接收(不用外部中断)
  13. 品牌该如何做好软文营销?软文营销怎么规避风险?
  14. 如何在Excel中的每个打印页面上重复特定的行或列
  15. 窑尾烟室气体分析仪常见故障及处理
  16. 学生认证免费领取——使用阿里云服务器的Ubuntu版本,并进行图形化
  17. (三)dubbo工作原理
  18. RenderTexture 橡皮檫 电筒效果
  19. 全自动生成、设置课表壁纸【完结】
  20. java字符转成ncr_NCR字符编码(形如中国)转换为汉字 in JAVA

热门文章

  1. web前端 - Vue常见问题汇总及解决方案
  2. 基于VU9P+C6678 的 4 路 FMC 接口基带信号处理板(支持 8 路 1G 瞬时带宽 AD+DA)
  3. AppleXml.Framework(02)-通过框架搭建Demo环境
  4. 网络基础-IP、端口等
  5. 小程序兼容苹果底部安全距离
  6. matlab rand randn 每次生成的随机数都一样的解决方案
  7. error: Failed dependencies: mysql-community-common(x86-64) >= 5.7.9 is needed by mysql-commu
  8. HTML中Table标签的属性及应用
  9. Android 8.1 Audio框架(二)AudioPolicy路由策略实例分析
  10. STM32物联网项目-双极性步进电机