高清晰渲染管线:专注视觉质量

在《可编程脚本渲染管线SRP》中,我们介绍了可编程脚本渲染管线SRP(Scriptable Render Pipeline)。在Unity 2018.1中,我们已为用户提供了二个渲染管线:轻量级管线Light Weight Pipeline和高清晰渲染管线High Definition Pipeline。在本文中,我们将聚焦高清晰渲染管线或HD RP。

可编程脚本渲染管线SRP项目,Github地址:
https://github.com/Unity-Technologies/ScriptableRenderPipeline

012633bi9ffg9i79f27z79.jpg.thumb

HD RP介绍

  • HD RP旨在为开发人员提供实现高清晰视觉效果渲染的工具。它的设计遵循以下三个原则:
  • 基于物理的渲染
  • 统一且一致连贯的光照
  • 独立于渲染路径的特征

基于物理的渲染依赖三大要素:光照、材质和摄像机。光照和材质的效果依赖于物理的相互作用,它们之间应有明确的解耦,能在各种光照条件下获得一致的效果。摄像机决定光照会怎样在屏幕上显示出来。渲染的目标是让艺术家更轻松地实现近乎真实的效果。

统一光照意味着场景中所有对象和参与介质都会得到相同的光照。对象的不透明度、透明度或体积材质不应有任何区别。一个材质必须与任意光照产生正常交互,不管该光照的光源是什么,例如反射探头、区域光等。甚至当被贴花修改时,交互也要正常发生。这样才能得到更为一致的外观效果。

在实时渲染中,有很多渲染通道:延迟/正向、单程/多程、平铺/集群等。在游戏开发中,所选取的渲染路径经常会限制可使用的图形功能。对于HD RP,我们尝试在不同渲染路径下增加相同的一组图形功能。这样的结果是,在选择渲染路径时只需要考虑性能,而不必考虑游戏需要哪些功能。

在HD RP的开发过程中,我们尽可能紧密地遵循这一原则。

HD RP的用途
HD RP针对高端PC和主机开发,可以提供惊艳的高清晰视觉效果。我们希望让小型团队也能使用AAA级图形功能。HD RP运行环境至少需要DX11级别的功能集,并大量使用计算着色器(Compute Shader)。但这样一来,HD RP就不会在功能较弱的平台上运行。HD RP支持的目标API是D3D11、D3D12、GNM(PlayStation 4)、Metal和Vulkan。我们也计划增加对VR支持,但还没在当前可用的预览版中实现。

HD RP具有一套全新的功能和行为,需要再学习和二次开发。我们提供了一个转换工具来将项目从Unity内置模式转为HD RP,但这只会帮助你快速重新设置材质和纹理。所有的光照、后期处理效果、场景设置、图形设置和自定义着色器都需要重做。

012735wxqxhtf13z2tujq3.png.thumb.jpg
Viking Village项目升级示例

最后,HD RP目前仍在预览阶段,这意味它还不适合用于正式创作流程。

光照改进
HD RP拥有一个全新的光照架构:它使用混合延迟/正向-平铺/集群渲染器。这意味着,在场景中有大量光照时,它比Unity内置渲染效果更好。这种新型光照架构更为注重性能。

012806ielflbzsejbw22om.png.thumb.jpg
在调试模式下可视化平铺光照列表

此外,HD RP还有大量额外的光照属性以及一个全新的光照编辑器。它可以淡化光照,仅影响漫反射光或镜面反射光,或是使用色温来设置光的颜色。聚光灯现在可以控制内部角度,而且可以拥有不同的形状,例如:椎体、立方体或金字塔体。HD RP还支持Colored cookies。

012806rzjjjyzl18jtcoc3.png.thumb.jpg

HD RP允许使用实时区域光,当前无阴影或烘焙。例如:柱形光。

012807a7594i9wb8wwb5b4.png.thumb.jpg

最后,光线遵循物理学平方反比衰减,使用的是物理光的单位。光照的控制完全是线性的,去除了Unity内置“Gamma mode”。太阳光强度使用的单位是勒克斯(lux),而点光源和聚光灯所用的单位是流明(Lumen)。

012808rtj88zy3rfrfdbft.jpg.thumb

在处理基于图像的光照方面,反射探头在HD RP中得到了更大提升。现在可以使用定向边界方框或球体形状,代理形状(近似场景几何的区域)和影响形状(像素受影响的区域)是分离的,而且加入了很多影响衰减选项(基于法线方向分平面等)。

材质渲染
HD RP有自带的标准着色器,名为受光着色器(Lit Shader)。Lit Shader有不少不错的功能,可以使用比Unity内置渲染中更为丰富的材质。双面选项也可以使用,会自动连接全局照明,加入了很多映射选项,例如单平面和三平面映射。诸如视差遮罩映射或曲面细分等高级功能也已经支持,只需一键便可使用!

012933perifueiqqddeczf.jpg.thumb

不过,加到材质渲染的功能中,最强大的则是其光照模型。

HD RP使用以下BRDF(双向反射分布函数):对镜面反射层使用各向同性多重散射GGX,对漫反射层使用Disney漫反射功能。HD RP与内置Unity在这方面的区别则在于多重散射部分。

金色金属球从平滑(左)到粗糙(右):

012959jlrm7mg8ln70dp0m.png.thumb.jpg
各向同性单散射GGX(类似Unity内置功能)

 

012959hdy42cjh3mctedtm.png.thumb.jpg
HDRP的各向同性多重散射GGX意味着更为粗糙的材质颜色不会更暗,而会更饱和。

默认参数为金属/光滑(Metallic/Smoothness),但也可以在同一着色器中切换为镜面色/光滑(SpecularColor/Smoothness)。

HD RP能增强或替换这个初始模型。它有大量选项可以使用:

用各向异性GGX替换各向同性GGX
增加次表面散射到Disney漫反射中
加入透射效果
加入彩虹效果
加入清漆层GGX

 

013056lafjv91niaa1sai1.png.thumb.jpg

通过调整光照模型能让我们实现多种复杂的外观。

013056fgoss1bezqsf1sv1.jpg.thumb
通过透射和次表面散射实现的蘑菇画面

HD RP也能对透明材质使用一组全新选项。例如:通过先背面再前面渲染来帮助排序,用深度后期通道来对景深效果实现透明或其它功能。

013057kmai23im2ar8i72c.png.thumb.jpg
使用双面透明渲染先背面再前面,渲染实现的彩虹效果示例

基于受光着色器(Lit Shader),HD RP提供了一个分层受光着色器(Layered Lit shader),能够混合多个受光着色器。

012933perifueiqqddeczf.jpg.thumb

HD RP还加入了对贴花的支持。贴花在不透明和透明材质都可以使用,可以正确影响全局光照光照贴图或光照探头的采样。

013239jal1i0u5711o10o6.png.thumb.jpg
使用贴花在地板上绘制的粉笔画示例

调试
HD RP中加入的最重要功能是调试工具。调试功能对理解数据创作和性能问题极其重要。

HD RP带有一个全新的自定义调试窗口,能控制调试视图模式和渲染管线设置。这个调试窗口既可以在Unity编辑器中使用,也可以在任意播放器中使用。它现在可以在PlayStation 4等任意目标设备上拥有所有调试功能。

013313lku9eub1f9cf8gw3.png.thumb.jpg
在Unity编辑器中的调试窗口示例,展示了通用属性

调试窗口允许显示透明材质和不透明材质的任意材质属性,无论它们使用的是延迟渲染路径还是正向渲染路径。

它允许光照调试视图:仅适用漫反射光或仅适用镜面反射光模式。它还能为整个场景修改属性,例如:法线、反射率、光滑度。它也能显示例如动态向量和深度缓冲区的中间渲染目标。它可以根据属性突出对象,例如:突出显示使用光照贴图或曲面细分的对象,还带有NaN检查器等。

012633crs4cwzuqhaq857e.png.thumb.jpg
播放器中的调试窗口示例,带有漫反射光模式,并改写了反射率

它还有一个有意思的模式-颜色选择器模式,用于在应用后期处理功能前读取当前屏幕上的数值或HDR值。调试窗口可以被轻松扩展以支持游戏所需要的任意调试工具,例如:AI或动画调试工具。

新的行为
HD RP具有与 Unity内置的渲染管线完全不同的新行为。

延迟和渲染路径支持的功能是一样的。次表面散射、屏幕空间环境遮罩和贴花的处理功能在二种渲染路径中是一样的。没有必要为使用特定功能选择特定渲染路径。

HD RP使用摄像机相关渲染。这意味着即使远离世界的原点,也可以有不错的渲染精度。这对所有使用HD RP的着色器都有影响。摄像机可以控制所使用的光照架构,可以在同一场景混合使用延迟渲染路径和正向渲染路径,也可以控制为这次渲染使用哪些功能。它还可以禁用烟雾、阴影和后期处理等效果。

013421kh7c7h7i5xpt9htl.png.thumb.jpg

为了调整场景设置,还加入了一个基于体积设置的全新系统,它类似当前后期处理效果中的设置。现在可以对每个体积设定场景设置,例如:天空、阳光级联阴影、屏幕空间阴影接触等。还可以通过插入参数在体积间获得平滑的过渡效果。

013455hy23d2k4234412dk.png.thumb.jpg

对于天空和烟雾还增加了新选项,例如:基于高度的烟雾效果或是用天空颜色着色的雾。烟雾会影响透明材质和不透明材质。

最后,HD RP使用一个专用渲染目标分配系统。它能避免在调整屏幕大小时反复重新分配目标。从而避免了在处理动态分辨率时,产生额外的渲染目标分配。

局限
我们仍在开发HD RP,所以它的一些功能还在制作中。HD RP将在 Unity 2018.1作为预览版发布,目前还不适合用来进行正式的创作。

其中一个重要局限是,HD RP还不支持使用Unity粒子系统制作的Lit Particle,只支持Unlit Particle。此外,内置地形系统还存在一些瑕疵。对于所有SRP,之前在Overlay图层渲染的任何对象,例如:镜头光斑特效,都不支持。Grabpass功能也已经不存在了。

未来的开发计划
我们目前专注于增强稳定性和平台支持。但仍会推出一些炫丽的功能,例如:体积光照。

013604inzk6znrrb21nakj.png.thumb.jpg

区域光将基于Unity Labs团队的研究进行改进。为了得到更为一致的光照和后期处理效果,基于物理的摄像机是下一步要开发的内容。我们还有多个正在制作的角色渲染工具原型。

013628yl8wqsmqlj98ek63.jpg.thumb
《Windup》项目中的小女孩角色渲染

结语
HD RP为Unity带来了全新的渲染管线,能够将当下游戏的视效水准提到尽可能的高。但它也有缺点,那就是其学习曲线,因为HD RP和当前内置的渲染管线有显著的区别。

013653ki5qau2qb2u5n57f.jpg.thumb
使用HD RP和复杂材质制作的风格化游戏环境示例

所有这些功能都有一定的复杂性。统一光照和一致光照本身就很难实现,所以拥有强大的调试工具非常重要。对于摄像机相关渲染的使用则需要更多考量。你也可以为HD RP编写自定义着色器,但这需要更多的额外知识。

你也可以在GitHub上跟踪HD RP的开发进展。如果你有任何问题,欢迎访问SRP在 Github上的频道或者在Unity 官方中文论坛(Unitychina.cn)反馈给我们。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>