这是系列文章的第二篇,介绍了开发人员和技术艺术家如何在 Unity 中设置和使用高清渲染管线 (HDRP) 来实现高端图形真实感。HDRP 代表了 Unity 实时渲染技术的飞跃,因此您可以像在现实世界中一样处理光线。
请务必阅读我们关于高端照明的其他文章:
点亮着色器模式下的渲染路径会影响您如何使用抗锯齿从渲染中去除锯齿边缘。HDRP 提供多种抗锯齿技术,具体取决于您的生产需求。
多重采样抗锯齿
多重采样抗锯齿 (MSAA) 是 PC 游戏玩家中流行的抗锯齿方法。这是一种高质量的硬件方法,可以平滑单个多边形的边缘,并且仅适用于 Unity 中的前向渲染。大多数现代 GPU 支持 2x、4x 和 8x MSAA 样本。
在活动的 Pipeline Asset中,将 Lit Shader Mode 设置为 Forward Only。接下来,为 多重采样抗锯齿质量选择 MSAA 2x、MSAA 4x或 MSAA 8x。值越高,抗锯齿效果越好,但速度越慢。当我们放大 相机视图时,我们可以更清楚地看到这一点。
MSAA 有几个值得注意的限制:
- MSAA 与延迟着色 G 缓冲区不兼容,后者将场景的几何形状存储在纹理中。因此,延迟着色需要一种后期处理抗锯齿技术。
- 由于 MSAA 仅处理多边形边缘混叠,因此它无法防止受到尖锐镜面反射光照的某些纹理和材质上出现的混叠。如果存在问题,您可能需要将 MSAA 与另一种后期处理抗锯齿技术相结合。
要将抗锯齿作为后处理技术应用,请使用 后抗锯齿设置:
- 时间抗锯齿 (TAA) 结合过去帧和当前帧的信息来消除当前帧的 锯齿 。您必须启用 运动矢量 才能使其正常工作。TAA 通常可以产生很好的效果,但在某些情况下会产生重影现象(例如,游戏对象在对比表面前快速移动)。HDRP10 进行了改进,以减少典型的 TAA 伪影。Unity 的实现减少了重影,提高了清晰度,并防止了其他解决方案中发现的闪烁。
- 快速近似抗锯齿 (FXAA) 是一种 屏幕空间抗锯齿 算法,可混合高对比度区域之间的像素。这是一种相对较快的技术,不需要大量的计算能力,但会降低图像的整体清晰度。
- 子像素形态抗锯齿 (SMAA) 可检测图像中的边界,然后寻找特定的图案进行混合。这可产生比 FXAA 更清晰的效果,并且适合平面、卡通或清晰的艺术风格。
注意:当结合后期处理和多重采样抗锯齿时,请注意渲染成本。与往常一样,优化您的项目以平衡视觉质量和性能。
HDRP 使用 Volume 框架。该系统允许您分割场景并根据摄像机位置启用某些设置或功能。例如,HDRP 模板级别包含三个不同的部分,每个部分都有自己的照明设置。因此,每个房间都有不同的体积。
Volume 只是一个带有 Volumecomponent 的占位符对象。您可以通过 GameObject > Volume 菜单选择一个预设来创建一个。否则,只需手动制作一个具有正确组件的游戏对象 (GameObject)。
由于 Volume 组件可以添加到任何 GameObject,因此在 Hierarchy 中找到它们可能很困难。灯光浏览器 (窗口 > 渲染 > 灯光浏览器 > 体积)可以帮助您在已加载的场景中定位体积。使用此界面进行快速调整。
根据相关上下文,将 Volume 组件的 Mode 设置为 Global 或 Local。
全局体积 就像一个没有任何边界的“总括”,它会影响场景中的所有相机。在 HDRP 示例场景中,VolumeGlobal 定义了整个级别的 HDRP 设置的整体基线。
本地卷 定义了其设置生效的有限空间。它使用 Collider 组件来确定其边界。如果您不希望碰撞器妨碍任何物理体(如 FPS 玩家控制器)的运动,请启用 “Is Trigger”。
在示例场景中(参见“体积”部分下的图像),每个房间都有一个局部体积,其中有一个可覆盖全局设置的 BoxCollider。
2 号房间有一个小的球形体积,位于玻璃柜旁边的明亮中心,3 号房间的入口走廊和吊灯下方的座位区也有更小的体积。
在模板中,局部体积覆盖白平衡、曝光和/或雾。任何未明确覆盖的内容都会返回到全局设置。
当你的相机在场景中移动时,全局设置将会生效,直到你的玩家控制器碰到那些设置接管的本地体积。
性能提示:不要使用大量的卷。评估每个体积(混合、空间化、覆盖计算等)都会产生一些 CPU 成本。
Volume 组件不包含实际数据。相反,它引用了体积 配置文件(Volume Profile)——磁盘上的包含渲染场景设置的 ScriptableObject 资源 。
使用 “配置文件”字段 通过 “新建” 或 “克隆” 按钮创建一个新的 体积配置文件 。您还可以切换到已保存的另一个配置文件。
将卷配置文件用作文件可以更轻松地重用以前的设置并在卷之间共享配置文件。
请注意,离开播放模式时对音量配置文件所做的更改不会丢失。
由于您通常每个级别需要多个体积,因此 HDRP 允许您混合体积。这使得它们之间的转换不那么突然。
在运行时,HDRP 使用摄像机位置来确定哪些体积影响 HDRP 设置。
混合距离 (Blend Distance) 决定了在何处或在体积碰撞器外部多远的地方开始淡入或淡出。混合距离的值为 0 表示即时转换,而正值表示仅当相机进入指定范围时体积覆盖才会混合。
卷框架非常灵活,允许您根据需要混合和搭配卷和覆盖。如果多个卷与同一空间重叠,HDRP 会依靠优先级来决定哪个卷优先。值越高,优先级越高。
一般来说,明确设置 优先级 值以消除任何猜测。否则,系统将使用创建顺序作为优先级的“决胜局”,这可能会导致意外的结果。
曝光值越大,进入相机的光线越少,这适合光线较明亮的情况。此处,13 至 16 之间的 EV 值适合阳光明媚的白天外景。相比之下,黑暗、没有月亮的夜空可能会使用 -3 到 0 之间的 EV。
您可以改变实际相机设置中的多种因素来修改曝光值:
- 快门速度:图像传感器曝光的时间
- f 值:光圈或镜头开口的大小
- ISO:胶片/传感器对光的敏感度
摄影师称之为 “曝光三角”。在 Unity 中,与真实相机一样,您可以使用这些数字的不同组合来获得相同的曝光值。HDRP 以 EV100表示曝光值,将敏感度固定为 100 国际标准化组织 (ISO) 胶片的敏感度。
上述公式计算曝光值。
请注意,它是以 2 为底的对数刻度。当曝光值增加一个单位时,进入镜头的光量就会减少一半。
HDRP 允许您匹配真实图像的曝光。只需使用相机或智能手机拍摄数码照片即可。从图像中获取元数据以识别 f 数值、快门速度和 ISO。
使用公式计算 曝光值。如果在 曝光覆盖 中使用相同的值(参见以下部分),则渲染的图像应该与真实世界的曝光一致。
您可以使用数码照片作为照明时的参考。尽管目标不一定是完美地重现图像,但匹配实际的照片可以消除您对照明设置的猜测。
在 HDRP 中, 曝光 是一种 体积覆盖 (Volume Override)。将其添加到 本地 或 全局卷 以查看可用属性。
在 模式 下拉列表中,选择下列选项之一:固定, 自动, 自动直方图, 曲线映射和 物理相机。
补偿 允许您转移或调整 曝光。您可以使用此功能进行微调,并稍微上下“停止”渲染的图像。
固定模式
固定模式 允许您手动设置 曝光值 。按照 固定曝光 滑块上的刻度标记获取提示。虽然右侧的图标有一个预设下拉列表(例如,阳光照射场景的预设为 13,无月场景的预设为 -2.5),但您可以将该字段直接设置为任意值。
请记住,固定模式相当简单,但不太灵活。仅当您拥有一个具有相对均匀光照的体积或场景时,它才会起作用,其中一个曝光值可以始终起作用。
自动模式 根据屏幕亮度级别范围动态设置曝光。其功能类似于 人眼 如何适应不同程度的黑暗,重新定义人们所认为的黑色。
虽然自动模式可以在许多光照条件下工作,但当将相机对准场景中非常暗或非常亮的部分时,也可能会无意中导致图像曝光过度或曝光不足。使用 “最小限制” 和 “最大限制” 将曝光水平保持在理想范围内。进行游戏测试以验证限制在整个关卡中是否保持在您预期的范围内。然后使用 测光模式,结合 蒙版 选项,指示要对画面的哪些部分应用自动曝光。
自动曝光 会随着相机在黑暗与光明之间转换而变化,并可选择调整 速度。就像眼睛一样,将相机从非常暗的区域移动到非常亮的区域,或反之亦然,可能会让人短暂地迷失方向。
自动、 自动直方图和 曲线映射 使用 测光模式 来确定在计算曝光时使用画面的哪一部分。您可以将测光模式设置为:
- 平均的:相机使用整个画面来测量曝光。
- 点:相机仅使用屏幕的中心来测量曝光。
- 中心重点:相机优先考虑图像中心的像素,并向画面边缘逐渐扩展。
- 面罩加权:提供的图像(权重纹理蒙版)指示哪些像素对于控制曝光最重要。
程序蒙版:相机根据程序生成的纹理评估曝光。您可以更改中心、半径和柔软度的选项。
自动直方图模式比自动模式更进了一步。最终,它会计算图像的直方图,并在设置曝光时忽略最暗和最亮的像素。
通过从曝光计算中拒绝非常暗或非常亮的像素,每当画面上出现非常亮或暗的像素时,您可能会体验到更稳定的曝光。这样,强烈的发射表面或黑色材料就不会严重地曝光不足或过度曝光您的渲染输出。
使用 自动直方图模式 下的 直方图百分比设置 丢弃直方图中给定百分比范围之外的任何内容(想象从直方图的最左边和最右边部分剪切最亮和最暗的像素)。然后使用 曲线重映射 重新映射曝光曲线(更多信息请参见下一节)。
曲线映射是自动模式的另一种变体。
在 曲线映射模式下,曲线的 x 轴表示当前曝光,y 轴表示目标曝光。重新映射曝光曲线可以提高精度。
虽然与曝光无关,但其他 物理相机 属性可以帮助您匹配真实世界相机的属性。
例如,我们通常使用 Unity(以及许多其他 3D 应用程序)中的视野来确定相机一次可以看到世界的多少部分。然而,在真实的相机中, 视野 取决于传感器的大小和镜头的焦距。
与直接设置视野不同, 物理相机设置 允许您从实际相机数据中填写 传感器类型、 传感器尺寸和 焦距 。然后 Unity 会自动计算相应的视野值。
尝试匹配真实照片参考时,依赖图像文件中包含的相机元数据。Windows 和 macOS 都可以从数字图像中读取 Exif 数据。然后您可以将相应的字段复制到虚拟相机。
请注意,从元数据中得出相机品牌和型号后,您可能需要在制造商的网站上搜索确切的传感器尺寸。本文 包括对常见图像传感器格式的估计。底部的几个参数会影响景深体积。
在 Unity 2021 LTS 中,您可以从相机的检查器控制 焦距 。在 景深体积 组件中,将 对焦模式 和 焦距模式 设置为 物理相机。
使用 叶片数量、 曲率和 镜筒剪裁 来改变相机光圈的形状。这会影响 景深体积 组件产生的散景外观。