第二十章 Unity 渲染管线

article/2025/7/24 3:18:20

渲染管线是计算机图形中最基础最核心的部分,它是将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://chatgpt.dhexx.cn/article/irekW7Ib.shtml

相关文章

OpenGL 图形渲染管线

学习笔记,自用 ヾ(•ω•)o 参考:《细说图形管线》、games101等等 Unity 中的渲染优化技术 大致流程细说图形渲染管线顶点数据:VS (顶点着色器Vertex Shader):TS(triangle shader)GS (几何着色器Geometry …

Unity URP/SRP可编程渲染管线

URP是unity推出的,用于替代Unity原来传统build-in管线。 URP是Unity可编程渲染管线(SRP)的一种,所以了解URP之前需要先了解SRP是什么 SRP是什么? SRP全称为Scriptable Render Pipeline(可编程渲染管线/脚本化渲染管线&#xff0…

GPU渲染管线概述

在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,大多译为…

Unity渲染管线详解

1.UnityBuild-in渲染管线 当双摄像机的时候,注意Camera中的Clear Flags 和 Depth。 其中Clear Flags在摄像机在渲染时,会进行清屏的操作。选择skybox是除了天空盒都会被清除。 Depth数值越小越先被渲染。 层级剔除:culing mask选择被剔除的…

渲染管线详细概念讲述

1、渲染简单的理解可能可以是这样:就是将三维物体或三维场景的描述转化为一幅二维图像,生成的二维图像能很好的反应三维物体或三维场景。 2、渲染管线也称为渲染流水线,是显示芯片内部处理图形信号相互独立的的并行处理单元。一个流水线是一序…

渲染管线概论

什么是渲染管线 渲染管线(渲染流水线)是将三维场景模型转换到屏幕像素空间输出的过程。图形渲染管线主要包括两个功能:一是将物体3D坐标转变为屏幕空间2D坐标,二是为屏幕每个像素点进行着色。 渲染管线的流程 渲染管线的一般流…

unity默认渲染管线切换到URP渲染管线并切换材质

先简单介绍一下渲染管线(URP)是什么,最初的名称是LWRP(Lightweight Render Pipeline),从2019.3版本以后改名为URP(Universal Render Pipeline),提供了对美术师友好的工作…

渲染管线

概述 (Introduction) 图形渲染管线是实时渲染的核心组件。渲染管线的功能是通过给定虚拟相机、3D场景物体以及光源等场景要素来产生或者渲染一副2D的图像。如上图所示,场景中的3D物体通过管线转变为屏幕上的2D图像。渲染管线是实时渲染的重要工具,实时渲…

Unity渲染流程(渲染管线)(渲染流水线)

Unity渲染流程(渲染管线)(渲染流水线) 一 渲染的任务二 三个概念阶段三 应用阶段1 准备好需要被渲染的场景数据,做粗粒度剔除2 设置每个对象的渲染状态。3 发送DrawCall。 四 几何阶段1 顶点着色器2 裁剪3 屏幕映射 五…

UE4渲染管线学习笔记

菜鸡入门学习笔记,各种不足还请大佬指点 CSDN传上来的图会变糊,将就看了只有,理解就行。。 个人比较推荐的学习顺序: 1.UE官方渲染介绍: Epic Games 2.UE是如何渲染一帧的: 原文 Unreal – Interplay of Light 译 译:UE4是如…

Render Pipeline渲染管线概述

渲染(Render)定义 渲染在电脑绘图中是指软件从模型生成图像的过程,通俗讲就是在计算机里面给虚拟世界"拍照"。渲染主要分为两种,一种是预渲染(pre-rendering),它的计算强度很大,通常用于电影制作;另一种是实…

【Unity】Unity Shader学习笔记(二)渲染管线

文章目录 渲染管线(Randering Pipeline)渲染流程可编程渲染管线应用阶段把数据加载到显存中设置渲染状态调用DrawCall 几何阶段、光栅化阶段 渲染管线(Randering Pipeline) 渲染管线是将网格、纹理等信息从加载到展现在屏幕上的整…

Unity渲染管线简介

unity渲染管线分为 Build in Render(内置渲染管线)和Scriptable Render Pipline(可编程渲染线) 1.Build-In Render 内置渲染器(默认)兼容太多,反而不能面面俱到,效果不好 2.Scriptable Render Pipline 可编…

Unity3D 渲染管线全流程解析

目录 渲染管线(流水线,流程) 一、渲染任务 二、三个阶段 1、应用阶段 1-1:数据的准备 1-2:设置渲染状态 1-3:发送DrawCall 2、几何阶段 2-1:顶点着色器 2-2:裁剪 2-3&#xff1a…

unity渲染管线及升级URP

unity渲染管线及升级URP 一,unity渲染管线简介二,通用渲染管线URP三,shader升级URP1,Builtin RP和URP中内置Shader 的对应2,总体结构3,include4,光照模式LightMode5,变体Variants6&a…

Unity2020高清渲染管线

一、高清渲染管线加载与环境配置 这里使用2019.3.0f6版本 1、加载高清渲染管线(High Definition RP) 2、创建高清管线脚本文件 3、配置高清渲染管线环境(把色彩空间改为线性空间) 4、把高清渲染管线脚本添加到图形(G…

渲染管线流程

应用阶段--->几何阶段---->光栅化阶段---->逐片元操作----->后处理 1,应用阶段:粗粒度剔除,进行渲染设置,准备基本数据,输出到几何阶段。 2,几何阶段:顶点着色器,曲面细…

渲染管线入门

渲染管线中一些技术名词大部分是英文直译,光看中文很容易被误导。所以我们必须在了解一个技术的具体作用之后,才能了解它到底是什么。这篇博客我主要翻译自Minh Tri Do Dinh的GPUs - Graphics Processing Units一文。也就是一些论坛里推荐给新手阅读的图…

【OpenGL ES】渲染管线

1 前言 渲染管线是指图形渲染流程,涉及到的概念非常多,主要包含图元、片段、光栅化、空间、变换、裁剪、着色器、片段测试、混合等。渲染管线主体流程如下: 为方便读者理解渲染管线,本文将先介绍顶点数据、图元与片段、空间与变换…

渲染管线----通俗易懂向面试官介绍

本文通过简短的语言解释渲染管线,无论是第一次了解渲染管线,还是回顾,都有帮助。 一、完整渲染流程 在介绍渲染管线之前,先全局视角了解一下整个渲染引擎。 整个渲染分为五个阶段,如图 工具阶段、资产调节阶段、应用程…