Unity可编程渲染管线系列(一)自定义管线(控制渲染)

本文是Unity可编程渲染管线系列的第一部分,介绍了如何创建和实例化管线资产,处理剔除、过滤、排序和渲染,并讨论了内存管理和编辑器集成。教程以Unity 2018.3.0f2为例,讲解了如何实现一个简单的渲染管线,以绘制不受光的形状,逐步构建渲染流程,最终能够正确渲染不透明和透明的Unlit对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文重点:

1、创建管线资产和实例

2、剔除、过滤、排序、渲染

3、保持内存干净

4、提供良好的编辑体验

这是涵盖Unity可编写脚本的渲染管线的教程系列的第一部分。本教程假定您首先阅读了Unity基础系列教程。Unity基础渲染系列的前几部分也很有用。

本教程使用Unity 2018.3.0f2制作。

本教程是CatLikeCoding系列的一部分,原文地址见文章底部。“原创”标识意为原创翻译而非原创教程。

那么其他SRP系列呢?

我还有另一个教程系列,涉及可编写脚本的渲染管线。它是为Unity 2019及更高版本而设计的,而此版本使用仅适用于Unity 2018的实验性SRP API。另一系列采用了一种不同且更现代的方法,但将涉及许多相同的主题。如果你不想等到新系列赶上它,那么完成本系列的阅读仍然非常有用。

(新渲染管线的新生)

1 创建一个管线

要渲染任何物体,Unity必须确定要绘制哪些形状,在何时何地以及使用什么设置。这可能会变得非常复杂,具体取决于所涉及的效果。灯光,阴影,透明度,图像效果,体积效果等都必须以正确的顺序处理,以得到最终的图像。此过程称为渲染管线。

Unity 2017支持两个预定义的渲染管线,一个用于正向渲染,一个用于延迟渲染。它还支持Unity 5中引入的较旧的延迟渲染方法。这些管线是固定的。你可以启用,禁用或覆盖管线的某些部分,但是不可能完全偏离其设计。

Unity 2018增加了对可脚本化渲染管线的支持,尽管你仍然必须依靠Unity进行许多单独步骤(例如剔除),但仍可以从头开始设计管线。Unity 2018引入了两种使用这种新方法制作的新管线,即轻量级管线和高清管线。这两个管线仍处于预览阶段,可编写脚本的渲染管线API仍被标记为实验技术。但现在,它足以让我们继续创建自己的管线。

在本教程中,我们将设置一个最小的渲染管线来绘制不受光的形状。一旦可行的话,我们可以在以后的教程中扩展我们的管线,添加照明,阴影等更多高级功能。

1.1 项目设置

打开Unity 2018并创建一个新项目。我正在使用Unity 2018.2.9f1,但任何2018.2版本或更高版本也适用。创建一个禁用分析功能的标准3D项目。我们将创建自己的管线,因此请不要选择任何管线选项。

打开项目后,通过Window / Package Manager进入软件包管理器,并删除默认情况下包含的所有软件包,因为我们不需要它们。只保留无法删除的Package Manager UI。

(开始工程)

我们将在线性色彩空间中工作,但Unity 2018仍将gamma空间用作默认值。因此,请通过“Edit/ Project Settings / Player”转到播放器设置,然后将“Other Settings”部分中的“Color Space”切换为“Linear”。

(线性色彩空间)

我们需要一些简单的材质来测试我们的管线。我创建了四种材质。首先,默认的标准不透明材质具有红色反照率。其次,相同的材质,但“渲染模式”(Rendering Mode)设置为“Transparent ”(透明),蓝色反照率,透明度降低。第三,使用使用“Unlit/Color”着色器的材质,其颜色设置为黄色。最后,使用“Unlit/Transparent”着色器的材质没有任何更改,因此显示为纯白色。

(测试材质)

用所有四种材质,在场景中实例化一些对象。

(场景显示4个材质)

1.2 管线Asset

当前,Unity使用默认的前向渲染管线。要使用自定义管线,我们必须在图形设置中选择一个,可以通过“Edit/ Project Settings / Graphics.”找到。

(使用默认管线)

要设置自己的管线,必须将管线资产分配给“Scriptable Render Pipeline Settings”字段。这些资产必须继承自RenderPipelineAsset,它是ScriptableObject类型。

为我们的自定义管线资产创建一个新脚本。将管线命名为My Pipeline。因此,其资产类型将为MyPipelineAsset,并且必须继承自RenderPipelineAsset,该属性在UnityEngine.Experimental.Rendering命名空间中定义。

它将始终处于试验性名称空间中吗?

它将在某个时候移出实验性名称空间,移至UnityEngine.Rendering或另一个名称空间。发生这种情况时,除非API也被更改,否则只需更新using语句即可。

管线资产的主要目的是为Unity提供一种获取负责渲染的管线对象实例的方法。资产本身只是句柄和存储管线设置的地方。我们还没有任何设置,因此我们要做的就是为Unity提供一种获取管线对象实例的方法。这是通过重写InternalCreatePipeline方法来完成的。但是我们还没有定义管线对象类型,因此现在只返回null。

InternalCreatePipeline的返回类型为IRenderPipeline。类型名称的I前缀表示它是接口类型。

什么是接口?

现在,我们需要将这种类型的资产添加到项目中。为此,请将CreateAssetMenu属性添加到MyPipelineAsset。

这在“Asset / Create menu”菜单中放置一个条目。让我们保持整洁并将其放在“Rendering”子菜单中。为此,我们将属性的menuName属性设置为“Rendering/My Pipeline”。可以在属性类型之后直接在圆括号中设置属性。

使用新菜单项将资产添加到项目中,将其命名为“My Pipeline”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值