原文
原文创作于 2018-10-08 17:34 Unity 所以有些东西不一样了
本文将介绍使用高清晰渲染管线HDRP渲染我们所创作场景的过程,以及重点介绍内置渲染管线和高清晰渲染管线HDRP之间的区别。
我们将会新建一个HDRP项目并升级所有导入资源的材质,以及学习使用材质检视窗口中的新参数来创建逼真的玻璃材质。
高清晰渲染管线HDRP
在Unity 2018.1中,Unity引入了可编程渲染管线SRP,它能让你根据项目需求创建自定义渲染管线。
可编程渲染管线SRP包含二个可直接使用的渲染管线,轻量级渲染管线LWRP和高清晰渲染管线HDRP。其中高清晰渲染管线HDRP旨在提供高级视觉保真度,适用于PC和主机平台。
设置HDRP
请使用Unity Hub,它可以帮助你管理项目和已安装Unity版本的信息。使用Unity Hub创建新项目时,在Template下可以看到High-Definition RP (Preview)选项。
由于HDRP仍处于预览阶段,建议不要在项目制作中期将项目切换为HDRP。你可以通过资源包管理器为项目安装HDRP,从而将项目升级。
请注意:一旦将项目升级至HDRP,就无法恢复原有项目,所以请确保在项目更新前做好备份。HRDR目前仍处于预览阶段,因此相关功能可能在未来发生一些变化。
将项目从内置渲染管线升级至高清渲染晰管线HDRP,请点击打开Window > Package Manager。在资源包管理器中,我们可以看到当前Unity项目中已安装的所有资源包。
在All标签页下找到“HD Render Pipeline”,即“Render-pipelines.high”,安装最新版本。安装该管线的过程中还会自动安装Render-pipelines.core、Shader Graph着色器视图和Post Postprocessing资源包。
安装HDRP资源包后,点击打开Edit > Project Settings > Graphics,指定用于HDRP的可编程渲染管线资源。
该检视窗口会将当前已安装的渲染管线资源(Render Pipeline Asset)显示在“Scriptable Render Pipeline Settings”字段中。
如果是在Unity Hub中安装HDRP,将自动指定为HDRP渲染管线资源。如果是将项目从内置渲染管线升级为HDRP,该字段会设为“None”。指定管线资源时,可以点击Asset Selection资源选择方框右边的按钮,或是将资源从Settings文件夹拖入该字段。
HDRP使用C# Scriptable Render Pipeline API。该API提供各种不同的设置,可用于自定义项目的渲染内容。渲染设置保存在渲染管线资源中,这意味着你可以修改渲染设置,只要将新的渲染管线资源指定到该字段即可。
创建新渲染管线资源时,在Project窗口空白处点击右键,选择Create > Rendering > High Definition Render Pipeline Asset。
升级材质
使用HDRP项目时,任何Unity的内置材质、标准材质或无光材质将不会被渲染,这是Unity使用粉色无光着色器显示这些不兼容的材质。
当尝试升级现有项目或集成旧资源,例如:不使用HDRP兼容着色器的Asset Store资源商店中的资源时,会发生这种情况。为了能够被HDRP渲染,我们需要升级材质。
Unity 2018.1提供了Built-in Material Conversion Tool(内置材质转换工具)。它会从Unity标准着色器获取材质属性,然后将材质转换为新的HDRP材质。
请注意:该功能不适用于自定义着色器,我们需要手动升级自定义着色器以兼容HDRP。
点击Edit > Render Pipeline,可访问材质转换工具。
Unity在该菜单中提供多个升级选项,我们将重点介绍前二个选项。
Upgrade Project Materials to High Definition Materials:更新项目中所有可更新的材质。
Upgrade Selected Materials to High Definition Materials:从项目窗口中选取需要更新的材质。
到了这一步,我们建议你创建项目的一个备份。
当材质被转换后,材质的着色器会被称为“HDRenderPipeline/Lit”。现在我们可以完全使用材质检视窗口中HDRP LitShader的全新功能。
在材质的Shader选项“HDRenderPipeline”下拉菜单中,你可以选择应用各种着色器类型,例如:LitTesseleation或Unlit等。
下面将介绍高清晰渲染管线HDRP中的新功能,我们将使用这些新功能来提升厨房场景的效果。
HDRP光照
HDRP中的光照使用Physical Light Units(PLU)物理光单位系统。使用PLU意味着光照单位基于真实可测量数值,就像商店中电灯泡包装上的数值,或是摄影测光表测量光照时的数值。
我们将勒克斯(LUX)用作定向光(Directional Light)的单位,因为在真实世界中,勒克斯用于测量太阳光的强度,使用勒克斯计可对太阳光强队进行测量。其它真实世界光源使用流明(Lumen)来测量光强度,它可用作场景里小型光发射器的参考单位。
实时线条光
实时线条光(Realtime Line Light)会保持无缝恒定的光线输出,用户可以自行定义线条光的长度。这些光照类型通常用于动画影片,从而实现逼真的光照效果,为场景光照增加影视质量。在光线放入场景后,可以在检视窗口选择形状类型来创建线条光。
大量现代厨房使用线条光来照明厨房工作区,所以线条光在此不仅能产生逼真的光照,而且准确符合真实厨房的效果。
此外,Light检视窗口还可以通过调整温度数值来决定发射出的光线的颜色。温度范围从1000~20000开尔文,数值越低就发射越少热量,光线呈现越多红色。反之,提高温度值会显示更多蓝色。
类似地,Rectangle(矩形)形状的灯光类型会基于自定义X和Y轴数值发射光线输出。请注意,目前Line或Rectangle光线形状类型不支持阴影。
光线浏览器
使用Light Explorer(光线浏览器)可以轻松管理项目中任意光线类型。你可以修改数值、更改光线类型和甚至控制阴影类型,而不必先到场景中找到这个光源并选中它。反射探针、光照探针和静态发射也可在该窗口管理。
使用Light Explorer,请点击Window > General > Light Explorer。
体积设置
Volume Settings(体积设置)允许你可视化修改环境设置并调整各类元素,例如:Visual Environment(可视环境),Procedural Sky(程序化天空)和HD阴影设置。该设置还允许你创建自定义体积配置文件并进行切换。
我们可以在创建游戏对象后,通过添加Volume组件来管理Volume Settings。该工作流程类似Post-Processing Stack v2创建体积时的工作流程。HDRP中,在层级窗口默认有一个体积设置。
1
HD阴影设置
HD阴影设置(HD Shadow Settings)允许你决定体积中阴影的总体质量。Max Distance字段会根据摄像机和阴影间的距离,计算阴影质量。
2
可视环境
Visual Environment(可视环境)中有Sky Type和Fog Type二个下拉菜单。Sky Type提供三个选项:Procedural Sky、Gradient Sky和HDRI Sky。
Procedural Sky会根据Procedural Sky组件中的数值生成环境。
HDRI Sky会根据HDRI Sky组件所关联的图像集构建环境贴图。默认情况下,HDRISky组件不会指定到Volume Settings中。点击检视窗口标签页底部的“Add component overrides…”,选择“HDRI Sky”后,就可以使用该组件。
现在可以指定HDRI Sky Cubemap,修改数值以实现准确的真实的光照。
你可以在Asset Store资源商店免费获取Unity HDRI Pack,该资源提供7个预转换的HDR Cubemap,可在项目中直接使用。
下载Unity HDRI Pack :
https://assetstore.unity.com/packages/essentials/beta-projects/unity-hdri-pack-72511
对于厨房场景,Unity HDRI Pack 中的“TreasureIslandWhiteBalancedNoSun”很适用,因为它能提供足够的光线照亮厨房,同时光线不会过于强烈。通过使用该组件内的修改器,例如:Exposure和Multiplier,可以自行修改和调整亮度。选取能够衬托场景的HDRI贴图非常重要。
最后,Fog Type提供了三个选项:Linear、Exponential和Volumetric。为了确定数值,重复之前的组件操作步骤,选择“Add Component Override”,应用相关组件到检视窗口。
材质检视窗口
在引入高清晰渲染管线HDRP之前,制作玻璃材质的过程并不简单。为了创建逼真的玻璃材质,必须进行广泛研究并掌握着色器编程方法,或是从Asset Store资源商店寻找并使用定制着色器。
现在有了材质检视窗口中HDRP Lit Shader的新功能,你可以制作出外观精致而且能根据设置折射光线的玻璃。
首先,我们新建一个HDRenderPipeline/Lit Material,这是在HDRP中创建材质时默认使用的着色器。
创建新材质时,在所选择的文件夹上单击右键,选择Create -> Material。材质检视窗口此时会展示全新的HDRP材质检视窗口。
在此窗口会有一些明显的变化,下面介绍一下这些变化。
表面选项
你可以在该选项决定材质的表面效果。
1
表面类型
表面类型(Suface Type)中有二个选项:
Opaque(不透明):模拟出完全为固态的材质,它无法透过光线。
Transparent(透明):应用了Alpha混合,能模拟半透明表面,效果很实用,但该表面类型在渲染时会消耗更多性能。
HDRP的一个重要功能是对透明对象和不透明对象应用了统一的光照效果。本文示例中,我们选择Transparent,其中的参数在后面会介绍。
2
双面渲染
双面渲染(Double Sided)允许对材质的二个面进行渲染。默认情况下,Normal Mode会设为Mirror(镜像),但在下拉列表中,我们可以选择Flip或None。
如果未启用双面渲染,Unity只会渲染材质面向摄像机方向的那一面。
材质类型
材质类型选项会创建新行为,从而实现更逼真的材质。启用这些选项后,它们各自会在检视窗口提供额外参数设置。
1
标准
标准(Standard)选项使用基础参数,它是默认的材质类型。
2
次表面散射(SSS)
次表面散射(Subsurface Scattering )会模拟光线交互和穿透半透明对象时的效果,例如:植物。
该选项还可用于渲染皮肤。如果你曾经透过指尖观察光线,你会看到光线颜色会随着在表面下散射而变化,这样的现象可以使用该表面类型模拟出来。
启用该选项后,会出现Transmission参数,使用该参数可以通过厚度图(Thickness Map)确定对象的半透明度。
这些功能都可以通过使用散射配置文件(Diffusion Profiles)进行控制。该选项提供二个默认配置文件,分别名为Skin和Foliage,可以用作SSS材质类型的基础。额外的13个配置文件可以使用以下配置文件设置进行定制。
3
各向异性
各向异性(Anisotropy)选项会模拟出根据朝向进行配置修改的表面材质,例如:模拟拉丝铝的效果。你不必创建具有干净整洁反射效果的金属表面,通过使用切线(Tangent)和各向异性贴图(Anisotropy Map),可以直接修改反射的强度和方向。
4
晕彩
晕彩(Iridescence)选项提供参数设置用于在材质表面创建晕彩效应,该效果类似光线在浮油上的效果。输出效果由晕彩贴图(Iridescence Map)和晕彩图层厚度图(Iridescence Layer Thickness Map)决定。
5
高光颜色
高光颜色(Specular Color)用于控制材质上镜面反射的颜色和强度。该选项可以让你使用与漫反射颜色不同的颜色来产生镜面反射效果。
6
半透明
半透明(Translucent)选项能非常有效地模拟植被的光线交互。该材质类型会使用配置文件,类似次表面散射SSS,但与示例中不同的是,它会使用厚度图(ThicknessMap)来决定如何传输光线。
启用贴花
Enable Decal这个参数启用以后可以让该材质支持贴花功能。该功能适用于二个工作流,既可以通过Decal Projector使用,又可以作为游戏对象的组件来使用。
输入
1
基色和不透明度
此时的玻璃材质仍表现为不透明的效果,这是因为需要在Inputs中修改不透明度数值,从而允许光线穿透材质。为此,请点击“Base Color + Opacity”旁边的色样窗口。
红色、绿色和蓝色通道会用作基色,Alpha通道会决定不透明度。当前材质的不透明度由范围在0到255之间的数值决定,255是完全不透明,0是完全透明。
本示例中,我们会将材质颜色设置为浅绿色,不透明度设为30,因为这样会使材质大体上透明。使用的颜色参数是RGB(201,255,211)或十六进制值 :C9FFD3。
请记住重要的一点是,当表面类型为Opaque时,即使你将材质的Alpha设为较小数值,该材质还是不会呈现透明效果,并会保持原来的不透明度。
2
基色和不透明度
这些选项可以通过滑块调整,数值范围从0到1,这二个数值和输出会从下方检视窗口中Mask Maps Alpha和红色通道生成。指定Mask Map后,该滑块将用于重新映射最小值和最大值。
3
法线贴图
应用法线贴图时,可以在调整参数滑块时修改强度,范围在0到2之间。通过应用法线,例如:压痕或划痕等效果,我们可以为玻璃材质增加额外的细节和深度。
4
遮罩贴图
在HDRP中,遮罩贴图由以下内容组成:
红色通道:金属参数范围从0到1
绿色通道:环境遮蔽
蓝色通道:细节贴图遮罩
Alpha通道:光滑度
默认情况下,导入Unity的纹理使用sRGB。在纹理检视窗口中,取消勾选“sRGB (Color Texture)”会将纹理转换为使用线性格式的纹理。因为遮罩贴图使用数学方法生成输出内容,该纹理必须为线性。
5
涂层遮罩
涂层遮罩(Coat Mask)会模拟材质上的清漆层效果,提高光滑度。默认情况下,涂层遮罩数值为0。清漆层遮罩可用于模拟汽车油漆或塑料等材质。
6
细节输入
细节贴图是HDRP中加入的全新贴图,它会合并其它贴图,为材质带来微妙的细节。细节贴图使用以下通道:
红色:使用叠加混合的灰度值
绿色:法线贴图Y通道
蓝色:光滑度
Alpha:法线贴图X通道
透明度输入
通过修改着色器的透明度输入(Transparency Input)属性,可以决定总体透明效果。透明度输入只在表面类型设为Transparent时可用。
本示例中,下面的属性将使你能为玻璃材质创建折射效果。
1
折射模型
折射模型(Refraction Model)定义如何模拟透过材质的光线弯曲效果。它具有二个选项:Plane和Sphere。
选择折射模型取决于材质应用对象的形状和大小:
球体(Sphere):对于实心的物体,请使用球体模型。折射厚度(Refraction Thickness)值对应物体的大小来设置。
平面(Plane):对于中空的物体,请使用平面模式。折射厚度(Refraction Thickness)应设置的较小。
折射率(Index of Refraction)和折射率厚度(Index of Refraction Thickness)选项允许你控制折射模型的行为。
2
折射率
折射率(Index of Refraction)范围在1~2.5之间,调整该参数会得到不同折射强度。默认情况下,该数值为1,不会生成折射效果。数值在1.1~1.2之间时,折射会翻转画面,透过该材质会看到颠倒的环境。
现在已经设置好玻璃材质的基础,我们可以添加调整设置来组合出最适用于对象的材质。
结语
我们希望本文能帮助开发者和艺术家更好理解如何在项目中使用高清晰渲染管线HDRP。
你也可以访问Github的文档,了解如何学习使用:
https://github.com/Unity-Technologies/ScriptableRenderPipeline/wiki/Getting-started-with-HDRP
HDRP会不断进行更新,我们期待看到社区中使用它制作的更多作品。如果有相关问题和反馈请访问Unity官方中文论坛(UnityChina.cn) !