Unity技术美术(TA)指北——Render Pipeline渲染管线
原文指路:通过Unity中灵活的图形功能,我们可以非常精细地对各种平台的上的视觉效果进行优化。渲染管线所做的操作就是获取到场景中的内容,并将它们显示到屏幕上,用更具体的说法,这些操作就是Culling剔除,rendering渲染以及post-processing后处理
Unity提供了三种渲染管线以满足不同的需求:较早期的Built-in渲染管线,以及两条更现代的可编程渲染管线(Scriptable Render Pipeline,SRP),分别是通用渲染管线(Universal Render Pipeline,URP)和高清渲染(High Definition Render Pipeline ,HDRP)。你也可以创建自己的SRP。对于渲染管线的选择,通常是取决于你的目标平台以及你所需要的视觉效果和定制化程度。
渲染路径Rendering paths
渲染路径是用来渲染光照和着色的一系列操作的集合,不同的渲染路径有着不同的性能特性和兼容性,Unity支持以下两种渲染路径
前向渲染Forward rendering
前向渲染是内置渲染管线和URP的默认渲染路径。它是一条多功能的渲染路径,但是会限制能够影响物体的像素的实时光源的数量
每一个影响到物体的光源都会产生开销,当光源超过一定数量时,就会通过一种近似的方式来产生影响(在URP中所有光源都是逐像素的,并且可以修改限制的数量)。如果你的项目并没有用到大量的实时光(移动端或者VR项目),前向渲染就是个不错的选择,因为对于场景中的每一个光源来说它并不需要进行全屏的Pass(移动端通常使用的是tile-based GPU,全屏Pass的开销很大)
不过,tile或者cluster的架构在HDRP中仍然能够使一定数量的光源在前向渲染路径中影响到每一个物体,并且提供了两种渲染路径中对等的功能(the tile/cluster architecture in HDRP still allows for a number of lights to affect each object in Forward rendering, and generally, offers feature parity between the two rendering paths),相比于延迟渲染,它还提供了细微的渲染品质的提高,其适用于那些需要高视觉质量优先于性能的HDRP项目。更多请参考HDRP's rendering path documentation
延迟渲染Deferrred Shading rendering
延迟渲染需要更高级别的GPU功能的支持,这些功能通常是在桌面设备,主机以及高端移动设备(在某些渲染功能上还是有限制)上才有。如果你的项目在这些平台上,并且需要许多高品质的实时光,使用Built-in或URP的延迟渲染路径应该就是正确的选择
延迟渲染是HDRP的默认渲染路径,因为HDRP在预期中就是要使用许多光源和全屏特效。在HDRP中,通过延迟渲染可以获得性能和品质的正确平衡
通用渲染管线Universal Render Pipeline(URP)
URP在广泛的平台上(包括手机,PC,主机,Web和VR)都提供了良好的图形性能表现。其通过围绕光照和着色作一些权衡,以及在低端设备上限制某些功能来达成这一点。通过URP,开发者可以花更少的时间去关心如何进行优化,从而把更多时间花在开发项目上
URP的另一个优点就是可扩展。高级的开发者可以自定义控制渲染以达成他们项目中某个特定的目标。正如前面所说,URP将会取代Built-in成为Unity的默认渲染管线
URP默认情况下在light loop中进行渲染,这使得前向渲染只需要一个单独的Pass(即所有光源都使用同一个Pass)。相比之下Built-in的前向渲染是对一定范围内的逐像素光源执行额外的pass(URP renders in a light loop by default, making it possible to perform Forward rendering in a single pass . In comparison, Forward rendering in the Built-in Render Pipeline performs an additional pass per-pixel light within range . This means that using URP results in fewer draw calls .)
URP几乎是Unity中2D游戏开发的最好解决方案,因为它提供了2D Renderer,2D Light以及lighting effects,并且有用于实现像素化视觉风格的2D Pixel Perfect Camera。
要开始使用URP,请查看文档,并在Unity Hub中下载2021 LTS或更新的版本
高清渲染管线High Definition Render Pipeline
HDRP是为那些兼容compute shader的现代目标平台使用的高保真度可编程渲染管线。其功能特性可以帮助开发者快速获得高清晰度的视觉效果。HDRP可以用来制作3A游戏,汽车演示,建筑学应用,视觉产品,电影,或者其他需要高保真图形的内容
HDRP遵循三条准则:基于物理的渲染(PBR),统一且连贯的照明(unified and coherent lighting)以及独立的渲染路径。为了实现这三点,其构建了新的渲染流程以及着色器,还有对场景内照明的巨大改进
该管线使用了Deferred / Forward – Tile / Cluster混合的Renderer,所以相较于其他管线可以使用更大规模的光照。在HDRP中,前向渲染和延迟渲染之间有一些对等的功能,其在效果的质量和准确性上只有很小的区别。我们还可以通过Custom Pass和Custom Post Processing来自定义HDRP
HDRP设计的目标是为小型开发团队在PC和主机上获得高品质的3D视觉质量提供支持。其并不适合移动平台
你可以阅读文档以及观看(66) Lighting & rendering tutorial for HDRP | Unite Now 2020 - YouTube来获得HDRP更详细的介绍
创建自定义的渲染管线
你可以创建自定义的SRP或者URP和HDRP的自定义版本来对你项目中的渲染进行更多的控制
要创建SRP,你需要使用Unity提供的SRP Core API,其包含了能够帮助你创建自己的渲染管线的可复用代码,包括在特定平台的图形API上工作的样例代码(boilerplate code for working with platform-specific graphic APIs),执行普通渲染操作的实用函数,还有URP和HDRP共用的shader library
自定义SRP需要编写C#脚本来规划与配置渲染命令。ScriptableRenderContext类在其中扮演了C#脚本以及Unity底层图形代码的交互接口
SRP渲染通过延迟执行(delayed execution)来进行操作。首先使用ScriptableRenderContext来构建渲染命令(rendering commands)的列表,然后让Unity在底层图形架构(low-level graphics architecture)将指令(instructions)发送给图形API之前执行这些渲染命令
Unity文档提供了自定义渲染的介绍,包括创建自定义的URP和HDRP版本。SRP的源代码也可以在GitHub - Unity-Technologies/Graphics: Unity Graphics - Including Scriptable Render Pipeline中获取
URP中的自定义Render Pass
在URP中,你可以使用Layer Mask来定义如何用自定义的pass来指定渲染一系列的物体
在Unity 2021 LTS及更高版本中,URP中的Render Objects Renderer允许你基于layer过滤到需要渲染的GameObject,然后用自定义的render pass来渲染它。这能够允许艺术家创建高级的特效或者游戏机制,比如绘制墙后角色的轮廓,可以在此查看教程
(其实就是Render Feature,在涉及到需要用到Render Texture的功能时,官方的Render Objects可能就不太够用了,最好还是学习一下自定义Render Feature,可以看看百人计划还有知乎上的教程)
自定义Pass在HDRP中的实现方式有一点区别,可以在文档和样例工程中了解更多信息
动态分辨率以及上采样方法(upscaling methods)
动态分辨率是一个比较流行的游戏性能优化方法,在Unity中其作为一个相机设置项,在Built-in,URP和HDRP中都能使用。当应用的帧率因为GPU瓶颈下降时,分辨率会逐渐下降来保持恒定的帧率,你还可以通过脚本手动触发它
我们可以利用HDRP中先进的上采样方法,比如NVIDIA GPU才支持的NVIDIA Deep Learning Super Sampling (DLSS),AMD FidelityFX Super Resolution (FSR)和Temporal Anti-Aliasing (TAA) Upscale。AMD FSR在URP中也支持
NVIDIA DLSS
NVIDIA DLSS在Unity 2021 LTS和更高版本的HDRP中已经原生支持
其使用了先进的AI渲染来获得能与原生分辨率相近的图像质量,同时只需要渲染一部分的像素。凭借实时光线追踪和NVIDIA DLSS,你可以在NVIDIA RTX GPU上创建一个在运行时具有高帧率和高分辨率的beautiful world(好像广告)。DLSS对于传统的光栅化图形也有着实质性的性能提升
查看更多信息请浏览Unity Engine 3D Development Platform | NVIDIA Developer,NVIDIA DLSS Natively Supported in Unity 2021.2 | NVIDIA Technical Blog,或者文档
还有永劫无间技术博客:The impact of DLSS on the stunning world of Naraka: Bladepoint | Unity Blog
AMD FidelityFX Super Resolution (跨平台)
AMD FidelityFX Super Resolution (FSR)在Unity 2021 LTS中可用,It includes built-in FSR support for HDRP and URP alike.要使用FSR,需要在HDRP资产和相机中启用dynamic resolution然后在Upscale filter选项下选择FidelityFX Super Resolution 1.0
FSR是一个开源,高品质的从低分辨率输入创建高分辨率的画面帧的解决方案。其使用了一组着重于创建高品质边缘的算法,这显著提高了相同分辨率下的性能
同时,FSR允许对高消耗渲染操作(比如光线追踪)的“practical performance”。更多信息请浏览Unity - GPUOpen以及Official - AMD FidelityFX Super Resolution (FSR) preview now available! - Unity Forum
电子书:面向高级Unity开发者的URP简介
https://resources.unity.com/games/introduction-universal-render-pipeline-for-advanced-unity-creators
更多资料
Level up your game graphics with these URP tutorials
Harnessing Light with URP and the GPU Lightmapper | Unite Now 2020 - YouTube
Create jaw-dropping graphics with these HDRP tutorials
Explore, learn, and create with the new HDRP template
页:
[1]