第二十章 渲染管线

news2024/9/21 20:43:26

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/480545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】面试常问知识点(Java基础)

JVM java 栈:线程私有,生命周期和线程,每个方法在执行的同时都会创建一个 栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。方法的执行就对应着栈帧在虚拟机栈中入栈和出栈的过程;栈…

Photoshop如何使用蒙版之实例演示?

文章目录 0.引言1.给单调的天空添加蓝天白云2.清除头发边缘的杂色3.制作景深效果4.制作枯荣共存的树5.制作双重曝光肖像 0.引言 因科研等多场景需要进行绘图处理,笔者对PS进行了学习,本文通过《Photoshop2021入门教程》及其配套素材结合网上相关资料进行…

【Linux内核解析-linux-5.14.10-内核源码注释】内核启动kernel_init解释

源码 解释1 static int __ref kernel_init(void *unused): 声明一个静态整型函数kernel_init(),该函数不会被其他文件访问,使用__ref标记表示该函数是可重定位的,并且该函数不需要任何参数。 wait_for_completion(&kthreadd_done);: 等待…

FL Studio 2023中文高级版水果编曲软件下载

FL Studio 2023中文版是一款非常经典的音乐制作软件,这款软件除了可以为用户提供全面的音乐制作功能之外,还有丰富的主题和皮肤供用户选择,让用户不但做出的音乐具有自己的风格,连制作的音乐的过程也个性十足,非常适合…

荔枝派Zero(全志V3S)驱动开发之串口

系列文章目录 文章目录 系列文章目录前言一、修改及编译设备树1、修改设备树文件2、编译 kernel 二、移植 minicom1、配置buildroot2、编译 buildroot 三、拷贝到 SD 卡四、测试验证1、确认 minicom 是否正常2、确认串口3、发送测试4、接收测试 前言 修改设备树打开 uart1 和 …

14-4-进程间通信-共享内存

之前学习了无名管道,命名管道,消息队列。 还剩下:共享内存,信号,信号量。 本章讨论的是共享内存。 一、共享内存的应用场景 A进程有自己的存储空间; B进程也有自己的存储空间; A进程和B进…

使用物联网技术进行肥胖管理是可行的吗?

在物联网和可穿戴设备的帮助下,个人现在可以监测自己的健康指标,如心率、血糖水平和身体活动。这些个性化的见解帮助人们对自己的生活方式做出明智的决定,从而带来更好的体重管理结果。 利用物联网技术成功管理肥胖症 肥胖是一个全球性的健…

还在挣扎文件

由于在老式打印机里面每打下一行都要进行回车和换行,在windows系统里面也延续了这个惯例,但是c语言是只有换行,但是为了兼容,会自动进行转换;比如,它在写入文件的时候换行会自动转换为回车加换行&#xff0…

加强网络风险生命周期

当今业务环境中云原生应用程序的激增帮助组织简化了运营。 企业现在可以近乎实时地监控数据、与客户互动并分享见解,帮助他们克服曾经阻碍生产力的低效率问题。 然而,使用云也极大地扩展了企业可利用的攻击面。 CSPM、CWPP、CNAPP、SAST、SCA、IaC、D…

网络基础3【网络层、数据链路层】

目录 一.网络层 1.IP协议 (1)基本概念 (2)协议头格式 2.网段划分 3.特殊的IP地址 4.IP地址的数量限制 5.私有IP地址和公网IP地址 6.路由 二.数据链路层 1.以太网 2.以太网帧格式 3.MAC地址 4.对比MAC地址和IP地址 …

【图】邻接矩阵

图的存储结构分为邻接矩阵和邻接表两种,带权的图叫做网。 邻接矩阵 邻接矩阵适合边多的图 无向图 两个顶点之间的连线是双向的,一个一维数组存顶点,一个二维数组存边 若有边则值为1,反之为0 邻接矩阵需要知道点数、边数、一个二维…

ARM微处理器的指令集概述

ARM处理器是基于精简指令集计算机(RISC)原理设计的,指令集和相关译码机制较为简单。ARM微处理器的指令集是加载(Load)/存储(Store)型的,也即指令集仅能处理寄存器中的数据&#xff0…

【论文笔记】Attention和Visual Transformer

Attention和Visual Transformer Attention和Transformer为什么需要AttentionAttention机制Multi-head AttentionSelf Multi-head Attention,SMA TransformerVisual Transformer,ViT Attention和Transformer Attention机制在相当早的时间就已经被提出了&…

Word2vec原理+实战学习笔记(二)

来源:投稿 作者:阿克西 编辑:学姐 前篇:Word2vec原理实战学习笔记(一) 视频链接:https://ai.deepshare.net/detail/p_5ee62f90022ee_zFpnlHXA/6 5 对比模型(论文Model Architectur…

锐捷(十七)锐捷单臂路由的配置

一 实验拓扑 二 实验需求 用单臂路由实现不同vlan间的通信,即要求vlan10的主机和vlan20的主机之间通过三层实现互访 三 实验分析 路由器的物理接口可以被划分成多个逻辑接口,这些被划分后的逻辑接口被形象的称为子接口。值得注意的是这些逻辑子接口不能…

Redis高级——键值对设计

1、Redis键值设计 1.1、优雅的key结构 Redis的Key虽然可以自定义,但最好遵循下面的几个最佳实践约定: 遵循基本格式:[业务名称]:[数据名]:[id]长度不超过44字节不包含特殊字符 例如:我们的登录业务,保存用户信息&a…

AIGC迈向通用人工智能时代

一、AIGC“起飞”的背后 2023年1月30日,AIGC概念股突飞猛涨。一时间,AIGC再次站上风口浪尖。 AIGC(AI Generated Content)是指利用人工智能技术来生成内容,被认为是继UGC、PGC之后的新型内容生产方式,常见…

哈希的应用 -- 布隆过滤器与海量数据处理

文章目录 布隆过滤器概念布隆过滤器设计思路布隆过滤器的应用布隆过滤器模拟实现布隆过滤器的基本框架布隆过滤器的插入布隆过滤器的探测布隆过滤器的删除 布隆过滤器优点布隆过滤器缺陷布隆过滤器模拟实现代码及测试代码海量数据处理哈希切割哈希切分 布隆过滤器概念 布隆过滤…

【机器学习】HOG+SVM实现行人检测

文章目录 一、准备工作1. 下载数据集2. 解压数据集 二、HOG特征简介1. 梯度(Gradient)2. 格子(Cell)3. 块归一化(Block Normalization)4. HOG特征(HOG Feature)5. 使用skimage.featu…