具有 Unity Terrain 功能的简单环境设计

编程入门 行业动态 更新时间:2024-10-28 06:27:24

Unity Terrain是用于关卡和环境设计的Unity 原生、强大且通用的工具。它提供了简单的机制来使用高度图的概念来塑造和修改地形。

在本文中,我们将了解如何使用此工具及其主要功能的基础知识。我们从使用高度图如何生成地形的理论开始。然后我们将讨论修改地形的主要机制。在文章的最后,我介绍了使用免费资源和 Unity Terrain 工具制作精美 Unity 场景的典型工作流程。

  • 从高度图到地形

  • Unity 地形设置

  • 雕刻和改变地形的选项

  • 种树、种草和……石头?

  • 具有 LOD 组的更多功能树

  • 建议的地形工作流程以获得更好的结果

    • 制作洞穴入口

    • 手动环境遮挡

    • 真正的环境光遮蔽和光照烘焙

    • 放置天空盒并应用后处理

从高度图到地形

高度贴图是一种改变玩家查看特定网格的方式的纹理,类似于法线贴图的工作方式。更具体地说,高度图信息会移动网格的顶点以显示海拔、悬崖、平原和陨石坑等特征。

由于其 2D 特性,单个高度图一次只能干扰顶点的一个轴。值得注意的是,Unity Terrain 高度图会改变 y 轴上顶点的位置。

当我们通过升高或降低其部件来处理 Unity Terrain 时,我们在技术上改变了它的高度图。改变立即起作用,我们可以看到我们改变地形的结果。电视电台直播App,新版本直播资源修复更流畅,喜欢大屏的支持一键投屏!或者,也可以直接在 Unity 外部更改高度图并将高度图导入引擎。

例如,网站Cities: Skylines Height Map Generator提供了从现实世界中提取高度图信息的机制。尽管该网站旨在用于Cities: Skylines 游戏,但地图在 Unity 中也同样适用。但请考虑,它们将包含真实世界的距离,并且可能需要在外部工具中进行调整以在 Unity 中实现最佳使用。

下图显示了从网站中提取并导入 Unity Terrain 的高度图。

Unity 地形中的高度图。

高度图可视化(调整值以提高可见性)。

Unity 地形设置

选中后,可以使用地形工具栏编辑 Unity 地形。工具栏包含地形的主要功能,分为 5 个部分:相邻地形图块;雕刻和绘画;添加树;添加详细信息;和一般设置。

相邻地形图块允许您在当前地形附近以类似网格的格式创建其他地形。当您已经拥有完善的地形但旁边需要更多空间时,使用它是有益的。

这是比增加地形大小更合适的解决方案。改变大小将影响高度图的读取方式,并且比例比例因子将应用于地形及其所有元素。

关于高度图,创建一个新的相邻地形将创建一个带有高度图的新地形游戏对象。新创建的高度图将尝试匹配其边界中的值,将其无缝耦合到之前连接的地形。

Sculpt and Paint选项直接与高度图一起使用。电视电台直播App,超多频道超清画质无限制尽享,秒播不卡支持投屏!此选项包含其地形工具,我们将在下一节中介绍。简而言之,这个选项允许我们变形高度图并隐藏它的一部分以创建孔和入口,例如。

添加树木和添加细节的两个选项都用于使用 Unity 自动处理的元素填充地形,例如树木、灌木、灌木、石头、草地等。与在场景中使用用户放置的游戏对象相比,使用 Unity Terrain 的一个优势是 Unity 管理了许多针对地形元素的优化技术。在可见性剔除相关的算法和广告牌中会自动考虑树木和细节。

最后,General Settings 选项包含与地形游戏对象有关的所有相关信息,例如优化技术(细节距离、广告牌距离、阴影等)和地形大小。

常规设置分为基本人族、树和细节对象、草风设置、网格分辨率、孔设置、纹理分辨率、照明和光照贴图。广泛涵盖每个选项超出了本文的范围,但我们将介绍最常用的选项。

Basic Terrain部分涵盖了地形的主要渲染方面,例如地形材质、阴影属性和使用的绘制模式。请注意,如果您希望使用自制的后处理着色器或脚本渲染通道,则需要禁用Draw Instanced选项。

网格分辨率值确定地形的大小。更改地形的宽度和长度将立即改变读取高度图信息的方式。地形宽度、长度和高度决定了地形在 x、y 和 z 轴上的大小。


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


纹理分辨率部分处理更具体的高度图纹理信息。您可以在此处设置高度图和导入/导出高度图的分辨率。爱看电影网(www.ikandy.fun),轻松看片追剧刷动漫,蓝光画质多线路任意换!使用导入功能,您可以将从其他来源(例如前面介绍的来源)获取的数据用于您的地图。导出当前高度图,在外部工具中对其进行更改,然后将其导入回来也是很常见的。

雕刻和改变地形的选项

如前所述,雕刻和绘画选项允许我们通过改变高度图来改变地形。这些选项有六个工具:升高或降低地形、油漆孔、油漆纹理、设置高度、平滑高度和标记地形。

Raise or Lower Terrain、Set Height和Smooth Height的选项都用于通过增加或减少其值来直接影响高度图。设置高度用于更改高度图以满足特定的期望结果,而平滑高度则可以柔化地形,就像模糊高度图中的选定区域一样。所有这些选项都是通过使用地形画笔完成的(如上图所示)。

地形画笔类似于画笔在其他图像编辑软件(如 GIMP 和 Photoshop)中的工作方式。刷子以灰色和 alpha 的阴影呈现图案,将其应用于地形以使用其值对其进行塑造。清理君VIP版App,专业实用的安卓清理工具,手机内存拯救者!笔刷的透明区域不会影响地形,较暗的区域对地形的影响要大于较亮的区域。Unity 的默认地形笔刷集包含十多个笔刷。

Paint Texture选项用于在地形中应用纹理层,主动为其添加颜色和其他纹理属性。使用与其他雕刻和绘画工具相同的地形画笔应用纹理层。然而,Unity 的默认地形没有纹理层。

地形图层列表。

一个地形图层的属性。

每个地形层都是它自己的资产,可以被多个地形重用,即使在不同的场景中也是如此。添加的第一个地形图层将自动覆盖整个地形。使用它作为设置基色的快速方法。每个地形层都可以有漫反射、法线和蒙版贴图。

漫反射贴图是地形显示的纹理。设置后,更改其色调的选项变得可见。更改色调是创建地形变化的一种快速有效的方法,无需使用更多纹理或在外部程序中编辑资源。

虽然法线贴图用于传达图层上的法线信息,并且通常与常规法线贴图一样工作,但遮罩贴图明确用于高清和通用渲染管道以传达更多信息,例如金属、环境光遮蔽、高度和平滑度。

最后,平铺设置是地形图层的便捷选项。大小和偏移值会改变纹理在地形中平铺的频率以及每次重复的基本偏移量。

一般来说,对于大地形,最好有几个地形层的变化,它们的大小值不同,因为它可以帮助打破地形地板上的可见重复。


来自 LogRocket 的更多精彩文章:

  • 不要错过来自 LogRocket 的精选时事通讯The Replay

  • 了解LogRocket 的 Galileo 如何消除噪音以主动解决应用程序中的问题

  • 使用 React 的 useEffect优化应用程序的性能

  • 在多个 Node 版本之间切换

  • 了解如何使用 AnimXYZ 为您的 React 应用程序制作动画

  • 探索 Tauri,一个用于构建二进制文件的新框架

  • 比较NestJS 与 Express.js


如前所述,Unity 的地形默认带有地形画笔,但在创建新地形对象时没有地形图层。

此外,必须有地图和纹理来创建地形图层。在本文中,我使用了资源商店中的几个新的免费画笔(Flaming Sands 的Generic Terrain Brushes和StampIT! Rowlan Inc 的收藏示例)以及地形图层的免费纹理包(手绘草和地面) Chromisu 的纹理)。

带有一些纹理的基础地形的结果如下所示:

在地形上工作时,我通常会尝试平衡高峰区域和平原区域。这往往会给我足够的空间来散布植被,而不会使空间过度拥挤。此外,我尝试在地形中使用一个关键元素来保持其主要组成部分和焦点,例如山、林间空地或河流。

拥有一个主要组件有助于决策使用哪些资产以及如何分配它们。在这种情况下,我们将制作一个带有洞穴状入口的小山丘,以探索更多的地形选择和一些感兴趣的小区域,以使视图多样化。

另外,请注意,我试图探索多个地形图层以打破它们倾向于产生的视觉重复。在这个阶段,我尝试只遮挡主要的斑点,将山丘与普通的草地和平原区分开,并在各处散布一些多样性,一些沙子和较暗的草地。

种树、种草和……石头?

可以通过两种方式添加植被,使用“添加树”选项或使用“添加细节”选项。添加树非常简单,允许您放置具有树状特征的对象。

为了获得更好的协同效果,应该使用 Unity 工具(例如Speed Tree或Tree Editor)或使用特定的地形树材质来创建树。但这不是强制性的,在接下来的部分中,我将展示另一种产生类似结果并允许更多创作自由的方法。

在任何情况下,地形树的每个网格最多只能使用 2 种材质(一种用于树皮,另一种用于叶子)。如果您的网格有两种以上的材质,它可能无法正确渲染。解决此限制的一个常见方法是使用纹理图集。此外,通常将叶子材质与树皮材质分开以获得更有趣的效果,这允许我们仅为叶子编写着色器(例如假装风运动)。

与地形图层类似,树木也必须单独添加到地形中,然后使用地形的画笔放置。树可以添加为裸网格,也可以添加为预制件。

请注意,将树添加为预制件不一定会添加所有预制件元素,也不一定会完全按照您的预期预制件行事。例如,放置带有动画师的树预制件将忽略动画师并充当静态树。

以类似的方式,细节是可以放置在地形中以使其视觉效果多样化的元素。细节可以有两种类型:细节网格和草纹理。细节网格的工作方式类似于在场景中保持静态的常规网格,例如石头、鹅卵石甚至灌木。

细节网格仅限于一种材料。如果您尝试使用具有多种材质的网格,它们将无法正确渲染。

细节网格也可以渲染为 Vertex Lit 或 Grass。Vertex Lit 会将网格渲染为常规光照游戏对象,并且不会对风做出反应,这适用于石头和树桩。草渲染的工作方式类似于草纹理,允许地形的风影响网格。

但是,根据经验,只有当风弯曲属性设置为低值(在Terrain General Settings下)时,草渲染才会产生视觉上令人愉悦的结果。否则,细节网格可能会不切实际地四处移动。

草纹理是在地形中渲染的精灵,根据地形的风来表现。如 Unity 文档中所述,术语“草纹理”具有误导性,因为您可以使用任何通用纹理,例如花朵或树枝,使用相同的工具。与渲染为草的细节网格不同,草纹理将保持其在地面上的轴心并随风移动并保持相同的位置——正如您所期望的草的行为。

在本文中,我使用了资源商店中的树木和其他网格(JustCreate 的Low-Poly Simple Nature Pack和 Broken Vector 的 Low- Poly Rock Pack)。对于草纹理,我使用了来自 Kenney 的优秀Foliage Sprites,它是无版权、高质量资产的重要来源。最后,作为额外的装饰资产,我使用了JustCreate 的Low Poly Dungeons Lite。

将这些应用于我们的地形,我们得到以下结果:

具有 LOD 组的更通用的树

如前所述,由于地形系统的优化,Unity 的树在某种程度上受到了限制。如果您使用自定义材质或其他变体,可能会忽略某些树放置选项,从而导致非常平淡和重复的场景。

但是,该系统还允许我们绕过它的一些限制,以在材料使用和风格方面实现更高水平的多功能性。为此,我们必须遵循特定的流程。

首先,您必须为树创建一个新的预制件,其中根游戏对象(层次结构中的第一个)是具有LOD 组组件的空游戏对象。然后,您可以将树预制件放置在根游戏对象下方的层次结构中。之后,将树预制添加到 LOD 组,就是这样。

树预制件将与您的自定义着色器一起使用,并从地形接收常规的树放置属性,例如更改树的宽度、高度和旋转。对于颜色变化,需要更改着色器以读取 _TreeInstanceColor 属性,但此步骤超出了本文的范围。

当然,您可以使用已经使用的 LOD 组功能来处理树的其他级别的细节。但是,如果您只是想在树上使用更通用的材质,同时仍使用地形放置属性,您可以将 LOD 的数量更改为 1 并仅使用单个树预制件。

完成这些步骤应该会让您获得类似于以下的结果:

建议的地形工作流程以获得更好的结果

现在我们已经介绍了如何使用地形工具的主要方面,我想提供一个简单的工作流程,我可以使用它来轻松获得相当好的结果,同时还介绍一些可以改善环境的其他渲染方面。

制作洞穴入口

让我们从我之前提到的洞穴开始。Unity Terrain 不允许我们创建入口或水平雕刻高度图(在 xz 平面中应用高度信息)。但是,它将使我们能够在其上画孔。

Unity Terrain 中的洞隐藏了地形网格的一部分,就好像我们正在切割碎片一样。可以使用地形笔刷像雕刻地形工具中的其他元素一样绘制孔洞。

为了制作一个视觉上令人兴奋的洞穴入口,我建议您提高地形,将仰角保持在 40 到 60 度之间。不仅如此,可能会过度拉伸地形网格,使其更难被其他元素和预制件覆盖。通过这样做,我们应该得到如下结果:

如您所见,地形洞以二进制方式隐藏了部分地形:它们要么完全消失,要么完全可见。为此,有必要用资产和其他元素覆盖接缝以实现更好的视觉质量。

使用前面提到的相同免费资源,我在洞穴入口周围缩放和旋转不同的石头,以隐藏洞和可见地形之间的接缝。我还尝试添加比必要的更多的岩石和鹅卵石,以创造更自然的外观。调整高度图以更好地适应与岩石的连接是很常见的。

此外,在感兴趣的区域周围添加额外的道具总是有助于增加玩家的注意力。为此,我添加了一些半埋在地上的罐子和一个在洞穴前的柱子,这有助于创造一些神秘和叙事。我在洞穴入口旁边添加了一个小灯,以引导眼睛更远。

如前所述,这个洞还允许用户看穿地形。为避免这种情况,我使用了具有忽略照明(无光照)的特定材质的平面。这很重要,因为否则,场景光线的变化会将这些暗墙显示为实心,而我们想要的视觉结果是让它看起来像一个暗/阴影区域。

此外,我使用了 Low Poly 包中的一些网格作为洞穴的地面,因为我们不能使用迄今为止一直使用的相同地形。

需要注意的是,如果您希望您的玩家进入并在其中导航,那么到目前为止我们所做的洞穴并不理想。为此,您需要在洞周围正确设置网格,从各个方面模拟洞穴内部。使用新的地形对象可以实现这一点,但我认为所需的工作可能不是最佳的。

另一方面,此解决方案非常适合您用作将玩家移动到专用于洞穴内部的新场景的点。

手动环境遮挡

我用来改善 Unity Terrain 中照明的常用技术是在放置在地面上的对象下手动使用更暗的地形层变化。这有助于提升地形元素的凝聚力,因为某些光照效果(例如环境光遮蔽)不会应用于地形对象,尤其是在您使用自定义着色器和其他技术时。

请注意,这与投射阴影不同。Unity 地形将正确地从对象投射阴影,但这可能仍会造成对象漂浮或未真正连接的印象。在某些地点使用深色地形图层有助于使物体和地面更接近,而无需更多资源或昂贵的照明计算。

此外,我经常将其应用于不是地形对象的其他对象和预制件的底部。如上图所示,我在书本和大锅下方使用了一些较暗的色调,以帮助使元素更加靠近。

真正的环境光遮蔽和光照烘焙

较暗的层在一定程度上有助于假照明,但可以通过烘焙场景中的光来放大。关于光照烘焙的完整讨论超出了本文的范围,但将讨论其中的一些主要元素,以了解如何使用它们来改善地形的视觉效果。

首先,Light Baking是一个过程,我们预先计算场景中的灯光并存储数据,然后将其应用到场景中的对象之上。Unity 专门使用Lightmapping,它在纹理贴图中烘焙对象表面的亮度。

但是,这些纹理不能在运行时更改,并且需要针对场景中的每次更改重新进行预先计算,例如将对象移动到不同的位置或更新灯光的变换。此外,它仅适用于标记为静态的对象。

光照烘焙可以在 Lighting 选项卡中完成(您可以通过Window菜单访问它,然后是Rendering,然后是Lighting)。Unity 的光照烘焙默认值相当高,处理时间可能太长。为此,我建议您将所有Direct Samples、Indirect Samples和Environment Samples减少到较低的数量,例如 16 或 32。

这些属性与 Lightmapper计算场景中任何给定点的光照的步数直接相关(对于静态元素)。增加其中任何一个都会产生更好和更真实的结果,但会大大增加烘烤时间。

我通常从低值开始评估场景中的第一印象,然后在我认为合适的时候逐步增加它们。对于更多的风格或自定义材料,使用较低的值通常足以实现良好的视觉效果。

此外,第一次烘焙可能会显示对象放置的不一致和其他应在应用更彻底和更逼真的光照贴图程序之前修复的错误。

我还建议在烘焙的光照属性中打开光照烘焙环境光遮蔽。环境光遮蔽是当表面彼此靠近时发生的视觉效果,在它们的交叉点遮挡光线并投射阴影,使它们看起来更暗。我们之前使用较深的地形图层颜色来伪造它,但光照贴图实际上可以计算出适当的环境光遮蔽并将其烘焙到纹理中。

下图显示了有和没有光烘烤的结果。

无需轻烤。

轻烤。

如您所见,树干和地面之间没有环境遮挡。然而,大锅的底部和图像背面的板条箱之间的交叉点比没有烘烤的版本更暗,更逼真。

放置天空盒并应用后处理

最后,为了进一步改善视觉效果并将元素联系在一起,这两个步骤必不可少:放置更好的天空盒并应用一些后期处理效果。

在本文中,我使用了来自 Yuki2022的Free Stylized Skybox 。这些天空盒非常适合低多边形风格的卡通外观。

可以在Lighting选项卡(与 Light Baking 相同)下的Environment选项卡下添加天空盒。

后处理效果需要更多步骤。首先,您必须根据安装的渲染管道将后处理包添加到您的项目中。使用内置渲染管道,您需要使用包管理器在项目中安装后处理堆栈。

否则,如果您使用的是通用渲染管线或高清渲染管线,则您已经安装了等效的后处理系统。我在本文中使用的是通用渲染管道,但效果和配置与其他管道类似。

下图显示了我用于地形最终版本的最终后处理体积:

使用的效果是:

  • 晕影:使屏幕的角落变暗,将玩家的注意力集中在中心元素上

  • Bloom : 扩展场景中的高光元素,用相邻对象模糊它们的区域,这是一种假的(但很好的)全局照明替代方案

  • 景深:模仿我们眼睛和真实相机的焦点,使离我们更近的元素(在焦点处)清晰,而其他元素根据它们的距离模糊

  • 颜色曲线:更改渲染的最终颜色以匹配更理想的外观。在这种情况下,我增加了红色而不是其他颜色并稍微增加了蓝色

  • Lift Gamma Gain:改变渲染的整体颜色,并增加对暗色调、中色调和高光的控制

更多推荐

具有 Unity Terrain 功能的简单环境设计

本文发布于:2023-06-13 07:09:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1354306.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:环境设计   简单   功能   Unity   Terrain

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!