持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第22天,点击查看活动详情。
你可以简单浏览一下目录,有需要的阅读,写文章不易,阅读之前请给我点个赞吧~
继上一篇文章的内容这里补充一个Unity 中新的概念,通用渲染管线URP,并带大家一起使用它
一、通用的渲染管线(Universal Render Pipeline)
除了默认的渲染管线,Unity 还有通过和高清渲染管道(High-Definition),简称URP和HDRP。两种渲染管线都有不同的特性和限制。当前默认的渲染管线仍然有效,但是它的特性集被冻结了。在几年内,URP可能会成为默认的。让我们让我们的图也适用于 URP。
如果你还没有使用URP,请到包管理器安装最新的通用RP包,以验证你的Unity版本。在我的例子中是 10.8.1。
这并不会自动让 Unity 使用 URP。我们首先必须为它创建一个资产,通过 Assets --> Create --> Rendering --> Universal Render Pipeline --> Pipeline Asset (Forward Renderer) 。我把它命名为“URP”。这也将自动为渲染器(Renderer)创建另一个资产,在我的例子中命名为URP_Renderer。
创建成功后,如下所示。
Next, go to the Graphics section of the project settings and assign the URP asset to the Scriptable Renderer Pipeline Settings field.
接下来,转到项目设置的 Graphics 部分。
并将 URP 资产分配到 Scriptable Renderer Pipeline settings 字段。
稍后要切换回默认渲染管道,只需将 Scriptable Renderer pipeline Settings 设置为 None。这只能在编辑器中完成,渲染管线不能在构建的独立应用中更改。
HDRP是一个更加复杂的渲染管道。我不会在教程中讲到它。
二、使用URP创建一个着色图
我们目前的材料只能在默认渲染管线下工作,不能在 URP 下工作。所以当 URP 被使用时,它被 Unity 的错误材质替换,也就是固体洋红色材质。
我们必须为 URP 创建一个单独的着色器。我们可以自己编写一个,但目前这是非常困难的,并且在升级到更新的 URP 版本时可能会崩溃。最好的方法是使用Unity 的着色器图形包(Unity's shader graph package)来可视化地设计一个着色器。URP 依赖于这个包,因此它是随 URP 包一起自动安装的。
创建一个新的着色器图(shader graph)通过 Assets --> Create --> Shader --> Universal Render Pipeline --> Lit Shader Graph ,并命名为 Point URP。
可以在项目窗口中双击它的资产,或者在检查器中按下Open Shader Editor按钮来打开图形。
这将为它打开一个着色器图形窗口,它可能会被多个节点和面板(panels)打乱。它们 blackboard、图形检查器和主预览面板(main preview panels),可以调整大小,也可以通过工具栏按钮隐藏。还有两个链接节点:顶点节点和片段节点。这两个用于配置着色器图的输出。
着色器图由表示数据或操作的节点组成。目前,Fragment 节点的Smoothness 值设置为 0.5。要使它成为一个可配置的着色器属性,按下 Point URP blackboard 面板上的加号按钮 ,选择 Float
并将新条目命名为Smoothness。这将在黑板(blackboard)上添加一个表示属性的圆角按钮。
选择它并将图形检查器切换到它的 Node Settings 选项卡以查看该属性的配置。
这里的 Reference 是在内部知道的属性名称。这对应于我们在表面着色器代码中如何命名属性字段 _Smoothness ,所以让我们在这里也使用相同的内部名称。然后将默认值设置为0.5。确保它的 Exposed 切换选项是启用的,因为这个选项控制材质是否获得一个着色器属性。最后,要使它显示为一个滑块改变它的模式(Mode)为滑块(Slider)。
接下来,从黑板上拖动圆角的“平滑度”按钮到图形中的一个空白区域。这将向图中添加一个 smoothness 节点。将它连接到 PRB Master 节点的 Smoothness 输入,通过拖拽一个点到另一个点。这在它们之间创建了一个链接。
现在您可以通过 Save Asset 工具栏按钮保存图形,并创建一个名为 Point URP 的材质使用它。着色器的菜单项选择 * shader Graphs / Point URP* 。
然后让 Point 的 prefab 使用该材料而不是 Point Surface。
三、用节点编程
为了给点上色,我们必须从位置节点开始。通过在图(graph)的空部分打开一个上下文(context)菜单并从中选择 Create Node 来创建一个。选择 Input --> Geometry --> Position 或只搜索 Position。
现在我们有了一个位置节点,它默认设置为世界空间。当您将光标悬停在它上面时,您可以通过按下向上的箭头来折叠它的预览可视化。
使用相同的方法创建 Multiply 和 Add 节点。使用这些缩放位置的XY分量 0.5,然后添加 0.5,同时设置 Z 为零。这些节点根据所连接的对象调整其输入类型。首先连接节点,然后填充它们的常量输入。然后将结果连接到Fragment 的 Base Color 输入。
如果您将鼠标悬停在 Multiply 和 Add 节点上,您可以通过按下它们右上角出现的箭头来缩小它们的视觉大小。这隐藏了所有没有连接到其他节点的输入和输出。这样可以去除很多杂物。你也可以通过它们的上下文菜单删除Vertex和Fragment节点的组件。通过这种方式,您可以隐藏保持默认值的所有内容。 You can compact the visual size of the Multiply and Add nodes by pressing the arrow that appear in their top right corner if you hover over them. That hides all their inputs and outputs that aren't connected to anther node. This removes a lot of clutter. You can also delete components of the Vertex and Fragment nodes via their context menu. This way you can hide everything that keeps its default value.
After saving the shader asset we now get the same colored points in play mode that we got when using the default render pipeline. Besides that, a debug updater appears in a separate DontDestroyOnLoad scene in play mode. This is for debugging URP and can be ignored.
rom this point you can use either the default render pipeline or the URP. After switching from one to the other you'll also have to change the material of the Point prefab otherwise it will be magenta. If you're curious about the shader code that is generated from the graph you can get to it via the View Generated Shader button of the graph's inspector.