探索 Unity 中的后处理

Posted pxr007

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了探索 Unity 中的后处理相关的知识,希望对你有一定的参考价值。

作为游戏开发者,我们通常希望我们的游戏具有良好的外观和感觉。 我们可以使用一些技巧来让我们的游戏更加闪耀。 这些技巧之一是后处理。

如果你玩过任何游戏,你可能知道后处理,即使你不知道它叫什么。 后期处理在制作游戏中发挥着重要作用,因为它有助于改善游戏的视觉效果,从而使其玩起来更有趣。

不仅如此,后期处理还解决了色彩校正、效果等问题。 Unity 游戏引擎内置了其后处理堆栈。在本教程中,我们将了解如何在 Unity 中使用后处理以及如何使用它,包括:

  • 什么是后处理?

  • Unity 中的后处理

  • 如何在 Unity 中使用后处理

    • 在 Unity 的内置管道中使用后处理

    • 在 URP 和 HDRP 中设置后处理

  • Unity 中的后处理效果工具

    • 绽放效果

    • 晕影效果

    • 色差效果

    • 景深效果

    • 胶片颗粒效果

    • 色调映射效果

    • 白平衡效果

    • 镜头畸变效果

  • 在 Unity 中组合后处理效果

  • Unity 中的其他后处理效果

首先,让我们快速了解一下什么是后期处理。

什么是后处理?

后处理描述了我们可以应用于游戏场景的图像效果。 场景包含游戏的环境 和菜单。

您可以考虑游戏场景设计的一种方法是将每个场景的文件视为一个单独的关卡。 您在每个场景中放置环境、障碍物和装饰,本质上是分段设计和构建游戏。

您可以应用后期处理效果作为游戏视觉效果的最后润色。 有时,您甚至可以使用后期处理为您的游戏创建完全不同的外观。

例如,您可以通过使用自动曝光和 Bloom 效果来描绘日光,将黑暗的场景变成明亮的场景。 您还可以使用白平衡效果将明亮的一天变成寒冷多云的一天。

我们在游戏中感知到的许多几乎完美的东西主要是通过我们所谓的后期处理效果来实现的。 后处理包括在屏幕上显示图像之前在相机的图像缓冲区上执行的全屏滤镜和效果。

后处理通常用于通过模拟胶片相机特有的某些品质(例如运动模糊)来为我们的场景添加电影品质。 Unity 使用以下示例来展示使用和不使用后处理的游戏场景的外观:


超过 20 万开发人员使用 LogRocket 来创造更好的数字体验 了解更多 →


没有(之前)后处理 :

使用(之后)后处理 :

Studying both images, we can see the change in colors as well as a brighter glow in some parts of the image scene. This means effects like tonemapper and the bloom effect have been applied to the scene, although there could be more.

上面的图片显示了后期处理在改变我们的游戏图形以显示在屏幕上的重要性。

后期处理改善了游戏的视觉效果,使画面更加逼真生动。 它还微调了游戏的渲染,使图形更加真实。 您甚至可以使用后期处理效果来改变场景的情绪。

现在让我们继续讨论 Unity 中的后处理。

Unity 中的后处理

处理 Unity 游戏引擎通过提供多种可以立即显着改善游戏外观的效果来支持后 。 我们可以使用这些效果来提供漂亮的图形并改进我们的游戏。

请务必注意,您可以使用 Unity 后处理包的方式取决于您的 Unity 项目的渲染管道。 我们可以使用三种后处理方式:内置渲染管线、通用渲染管线和高清渲染管线。

Built-in Render Pipeline 是默认不附带后处理包的渲染管道。 我们必须使用包管理器安装它。

通用渲染管道 (URP) 是一个渲染管道,当您使用 URP 模板创建项目时,它的后处理解决方案默认安装在 Unity 中。

当您使用 HDRP 模板创建项目时,与 URP 一样,高清渲染管线 (HDRP) 也默认由 Unity 安装其后处理解决方案。

尽管在使用 URP 或 HDRP 时后处理略有不同,但它们的工作流程几乎相同——尽管 HDRP 提供了一些更高级的效果。 本文将重点介绍最常用的 URP,它也应适用于 HDRP。

如何在 Unity 中使用后处理

首先,我们将看看如何在内置管道中使用后处理。 之后,我们将研究如何在 URP 或 HDRP 中设置后处理。

在 Unity 的内置管道中使用后处理

由于内置管道默认没有内置后处理,我们必须通过选择安装它 window> Package Manager.

它应该打开一个新的弹出窗口; 如果没有,请检查您是否将包管理器设置为 Unity Registry。

In this pop-up window, search for and install your required package — in this case, Post Processing. You’ll see the window as shown below:

Click on the “Install” button at the bottom right corner of the window.

现在我们已经安装了 Post Processing 包,我们需要配置我们的游戏和场景以利用该包。 为此,我们将需要一个 后处理体积组件 来确定我们将应用效果的区域。 所以让我们建立一个。

选择您的主摄像头。 在默认选项卡中,我们必须创建一个新层,命名它 post-process layer,并将其指定为我们的默认层,如下所示:

接下来,向下滚动,单击“添加组件”按钮,搜索 post-process我们在上一步中创建的图层,然后选择它。 这将使我们添加的每个效果都可见。

完成后,我们将再次单击“添加组件”按钮并创建一个后处理卷组件。

勾选“Is Global”框以将此组件设置为全局; 这将使应用于我们场景的效果在整个屏幕上可见。

勾选此框后,现在让我们通过单击 new按钮。 然后我们可以继续添加我们想要的效果。

在 URP 和 HDRP 中设置后处理

由于 URP 和 HDRP 具有相似的工作流程,因此我们将只研究如何在 URP 中为此设置后处理。 我将创建一个 3D URP 示例场景 ,以便我们可以使用它来解释下一节中的后处理效果工具。

首先,让我们创建一个带有 Volume 组件的 GameObject。 我们的音量有不同的选项。


More great articles from LogRocket:

  • Don't miss a moment with The Replay, a curated newsletter from LogRocket

  • Learn how LogRocket's Galileo cuts through the noise to proactively resolve issues in your app

  • Use React's useEffect to optimize your application's performance

  • Switch between multiple versions of Node

  • Discover how to animate your React app with AnimXYZ

  • Explore Tauri, a new framework for building binaries

  • Compare NestJS vs. Express.js


The Global Volume applies effects to the entire screen, whereas the Box, Sphere, and Mesh Volumes define a boundary in their respective shapes and apply post-processing effects when the camera enters the boundary.

在我们创建之后,我们的检查器选项卡对于我们的卷应该如下所示:

然后我们需要创建一个 Volume 配置文件,它就像一个容器,用于保存您的后期处理效果及其设置。 如上图所示,您需要此音量配置文件才能开始应用场景效果。

在我们的音量配置文件下的检查器选项卡中,单击“新建”按钮。 添加卷 配置文件后,我们将单击“添加覆盖”按钮。

Select “Post-processing,” and we should see a list of effects. Let’s see how they work in the next section.

Post-processing effect tools in Unity

In this section, we will explore various post-processing effect tools in Unity and how they can affect your images.

Before we continue, here’s what our sample image scene looks like without post-processing:

现在让我们为这个示例图像场景添加一些后期处理效果。 对于每种效果,您可以修改各种属性以实现您想要的确切外观。

绽放效果

在使物体发光或看起来更亮时,Bloom 效果会派上用场。 它通过为我们的图像添加更多光线,使我们对象中的区域更加可见或独特地突出。 如果我们添加绽放效果,如下所示:

我们将得到以下结果:

您可以使用 Bloom 效果来给人一种明亮、阳光明媚的一天的印象,或者可能用于具有幻想或超凡脱俗主题的游戏。

晕影效果

Vignette 是一个后处理效果属性,它在我们的图像显示的屏幕周围添加一个深色边框。 这经常出现在使用低质量相机镜头拍摄的图像中,但现在经常被有意使用以增加戏剧效果。 如果我们在图像中添加一个小插图,如下所示:

我们将得到以下结果:

如您所见,晕影效果增加了场景的深度,可以在恐怖场景中使用,因为它增加了一种令人毛骨悚然的感觉。

色差效果

当我们希望我们的场景看起来像是通过无法在边缘会聚光线的镜头记录时,我们使用色差效果。 如果我们在图像中添加色差,如下所示:

我们的结果将如下所示:

You may have seen a similar effect used in games where the character you’re playing gets injured or hurt.

Depth Of Field effect

The Depth Of Field effect blurs anything beyond a specified distance to keep the focus on certain things in the scene. It is one of the commonly used post-processing effects and can make your game scene look like it has more depth. An example of when If we add this to our image, like so:

We will get the result below:

何时可以使用此效果的一个示例是给人一种非常炎热的一天的印象,这会使远处的事物显得朦胧和模糊。

胶片颗粒效果

胶片颗粒效果用于为我们的图像或场景添加类似粒子的粗糙感,使其看起来像一部老式电影。 如果我们将 Film Grain 效果添加到我们的图像中,如下所示:

我们将得到以下结果:

我们可以使用胶片颗粒效果的一个例子是,如果我们想要一个场景看起来像一部经典电影。

色调映射效果

The Tonemapping effect remaps the High Definition Range (HDR) color values, giving the appearance that a scene with a lower dynamic range has a wider range of colors.

In other words, this effect broadens the color range in order to increase contrast and make the scene appear more realistic.

If we add tone mapping to our image, like so:

我们的结果将如下所示:

我们可以在 Unity 中选择两种色调映射模式。 中性色调映射对颜色的影响最小,当您想要更好的颜色校正控制时,这是一个很好的开始。 我们在上面使用的 ACES 色调映射是实现更具电影感的外观的行业标准。

白平衡效果

白平衡效果通过在保持白色区域的同时改变温度或色调来改变场景的整体色调。 如果我们将它添加到我们的图像中,如下所示:

我们将得到以下结果:

在这种情况下,我们将温度调高,使图像看起来更暖和。 如果你想让图像看起来更冷,你可以降低温度。

镜头畸变效果

镜头失真效果模拟现实生活中相机镜头造成的失真。 使用正确的值可以获得更宽的视野。 如果我们将它添加到我们的图像中,如下所示:

我们的结果将如下所示:

镜头失真效果非常适合水下场景、从鱼的角度发生的场景或狙击视图场景。

在 Unity 中组合后处理效果

我们还可以组合两个或多个效果。 让我们看看如何通过结合 Bloom 效果和色差效果来做到这一点,如下所示:

我们的结果将如下所示:

镜像油管免翻,无限制看油管视频,超高画质支持在线下载!

Unity 中的其他后处理效果

我们上面回顾的后处理效果在所有 Unity 渲染管道中都可用。 还有其他我们没有在上面评论过的后处理效果工具。 根据您选择的渲染管道,可用的后处理效果数量及其行为可能会有所不同。

您可以查看 Unity 的官方后期处理概述 ,以获取可能可用的后期处理效果列表。 您还可以阅读 优化 Unity 项目 和其他有用的文章,以帮助增强您使用此游戏引擎制作的游戏。

结论

本文讨论了后期处理以及它在我们的游戏中的重要性。 我们还研究了 Unity 中后处理的工作原理,展示了对示例图像的各种效果的示例。 如果您觉得这有帮助,请分享。

LogRocket :全面了解您的网络和移动应用程序

LogRocket 是一个前端应用程序监控解决方案,可让您重现问题,就好像它们发生在您自己的浏览器中一样。 无需猜测错误发生的原因,或要求用户提供屏幕截图和日志转储,LogRocket 可让您重播会话以快速了解问题所在。 无论框架如何,它都可以完美地与任何应用程序配合使用,并且具有用于记录来自 Redux、Vuex 和 @ngrx/store 的附加上下文的插件。

除了记录 Redux 操作和状态之外,LogRocket 还记录控制台日志、javascript 错误、堆栈跟踪、带有标头 + 正文的网络请求/响应、浏览器元数据和自定义日志。 它还检测 DOM 以记录页面上的 html 和 CSS,即使是最复杂的单页和移动应用程序也能重新创建像素完美的视频。

csharp 用于从csproj unity 2018中排除着色器文件的后处理器生成

using SyntaxTree.VisualStudio.Unity.Bridge;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
using UnityEditor;
using UnityEngine;

// Post processor for excluding shader files from the csproj unity 2018 generates
[InitializeOnLoad]
public class CsprojPostProcessor : MonoBehaviour {
    static CsprojPostProcessor() {
        ProjectFilesGenerator.ProjectFileGeneration += ModifyProjectFile;
    }

    private static string ModifyProjectFile(string name, string content) {
        XDocument document = XDocument.Parse(content);

        var itemGroups = document.Root.Descendants()
            .Where(node => node.Name.LocalName == "ItemGroup");

        IEnumerable<XElement> shaderGroups = itemGroups.Select(group => {
            var child = group.Descendants()
                .FirstOrDefault();

            if (child != null && child.Name.LocalName == "None")
                return group;

            return null;
        });

        foreach(XElement group in shaderGroups) {
            group?.RemoveAll();
        }

        return document.ToString();
    }
}

以上是关于探索 Unity 中的后处理的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Unity 游戏引擎平台上的单元测试中实例化 MonoBehaviour 对象

Unity 2D精灵

Unity技能学院——Inputsystem第一期

如何使用Unity做游戏中的寻路导航

Unity 优化篇 | 优化专栏《导航帖》,全面学习Unity优化技巧,让我们的Unity技术上升一个档次

如何在unity3D游戏引擎中写波斯语?