Unity中用Natrue Renderer做自己的地形Terrain.
创始人
2024-03-12 14:31:16
0

效果图

一、下载与导入Nature Renderer

Nature Renrderer是个强大的插件,它本身就可以作为地形编辑的工具取代Unity的地形细节和树木的渲染系统。

nature-renderer官网

1.下载链接

推荐(已经购买的许可证,可直接使用):NatureRenderer2021PerpetualLicense2021.1.6已添许可证,可直接使用!

从Unity资产商店下载Nature Renderer:

Nature Renderer・Subscription | Terrain | Unity Asset Store(免费试用版,实测效果不如付费版,主要功能无法使用)

Nature Renderer 2021・Perpetual License | Terrain | Unity Asset Store(付费版,自行购买)

将下载的unity包导入到你的Unity项目中,开始安装过程。

2.导入包

在导入Nature Renderer包到你的项目后,你会被提示导入其他包,这是为了安装Nature Renderer的依赖和演示场景。请确保导入所有这些包。

依次导入以下软件包:

1.初始包 com.vdc.nature-renderer.installer.unitypackage

它包含了我们的包管理器和Nature Renderer的包以及它的依赖项。

2.自然着色器要点 com.vdc.nature-shaders.embedded.unitypackage

一个基本的植被着色器集合,帮助你设置Assets和材料。

3.自然渲染器 com.vdc.nature-renderer.unitypackage

这个包包含Nature Renderer本身。

4.自然渲染器演示 com.vdc.nature-renderer-demo.unitypackage

自然渲染器的演示场景和演示资产。如果你不希望在你的项目中拥有额外的演示资产,可以跳过。

 二、创建和编辑地形

Nature Renderer的工作原理是取代Unity的地形细节和树木的渲染系统。为了能够使用Nature Renderer,你首先需要在你的场景中添加一个地形,或者打开一个已有地形的场景。

1.创建地形

菜单中选择 GameObject > 3D Object > Terrain,即可创建地形。

地形对象默认有三个组件Transform组件、Terrain组件和Terrain Collider组件。其中Terrain组件中的5个横排按钮即为绘制地形工具。分别为创建相邻地形、绘制地形、绘制树、绘制细节、地形设置。其中第二个,绘制地形工具,包含6种绘制状态:升降地形高度、绘制孔洞、绘制纹理贴图、绘制目标高度、平滑高度、stamp地形。

2. 编辑地形

  • Raise or Lower Terrain:使用画笔工具绘制不同高度的地形。使用 Brush Size 滑动条可控制工具的大小以创建从大山到微小细节的不同效果。Opacity 滑动条可确定将画笔应用于地形时的强度。
  • Paint Holes:绘制孔洞,隐藏地形的某些部分。
  • Paint Texture:添加地形表面纹理。第一个纹理图层会自动铺满地形,添加其它图层后,选中图层时可以使用笔刷在地形上绘制选中的地形图层的纹理。
  • Set Height:将地形高度调整为特定值。
  • Smooth Height:平滑地形,以柔化地形特征。
  • Stamp Terrain:在当前高度贴图之上标记画笔形状。

关于地形的更多细节,请参见Unity文档。创建和编辑地形 - Unity 手册

3. 添加地形纹理

Terrain组件中,选择编辑地形,选择选项栏中的Paint Texture(编辑纹理),点击Edit Terrain Layers...,在弹出菜单中选择Add Layers...(添加图层)。注意:添加的第一种纹理,会自动地作用在整片地形上。你要确保你添加的第一种纹理是地形的主要纹理。

可以添加草地贴图,山体岩石贴图,土路贴图。

三、启用Nature Renderer与注册植被

1. 启用Nature Renderer

Nature Renderer是通过添加自然渲染器组件到你的地形来启用的。

1.选择你场景中的地形游戏对象。

  • 点击Inspector底部的添加组件。
  • 输入 "Nature Renderer",找到Nature Renderer组件,并点击将其添加到地形中。

Nature Renderer将在组件被添加到地形后自动设置。

2. 注册植被

植被会自动从地形加载,并在自然渲染器组件的植被部分可见。新的树木和细节对象可以通过植被部分的这个列表添加。

建议通过植被列表添加物体,而不是直接在地形组件中添加,因为Unity不允许用LOD组添加物体。

点击Add,在Prefab栏点击小圆圈,选择植被后,点击Apply。 此时在地形组件中的绘制树与绘制细节中,能看到添加的植被,方便直接使用。

 

四、绘制树和细节 

1. 绘制树

在工具栏选择绘制树,在添加的Trees中,选择一种树,设置Brush Size与Tree Density,即可在Terrain中“涂刷”树。

属性功能
Mass Place Trees创建一批整体覆盖的树,但不绘制在整个地形上。批量放置树后,仍然可以使用绘制功能来添加或移除树,从而创建更密集或更稀疏的区域。
Brush Size控制可添加树的区域的大小。
Tree Density控制 Brush Size 定义的区域中绘制的树平均数量。
Tree Height使用滑动条来控制树的最小高度和最大高度。将滑动条向左拖动绘制矮树,向右拖动绘制高树。如果取消选中 Random,可以将所有新树的确切高度比例指定为 0.01 到 2 的范围内。
Lock Width to Height默认情况下,树宽度与其高度锁定,因此始终会均匀缩放树。然而,可以禁用 Lock Width to Height 选项,然后单独指定宽度。
Tree Width如果树宽度未与其高度锁定,则可以使用滑动条来控制树的最小宽度和最大宽度。将滑动条向左拖动绘制细树,向右拖动绘制粗树。如果取消选中 Random,可以将所有新树的确切宽度比例指定为 0.01 到 2 的范围内。
Random Tree Rotation如果为树配置 LOD 组,请使用 Random Tree Rotation 设置来帮助创建随机自然的森林效果,而不是人工种植的完全相同的树。如果要以相同的固定旋转来放置树,请取消选中此选项。
Color Variation应用于树的随机着色量。仅在着色器读取 _TreeInstanceColor 属性时有效。例如,用 Tree Editor 创建的所有树的着色器将读取 _TreeInstanceColor 属性。
Tree Contribute Global Illumination启用此复选框可向 Unity 指示树影响全局光照计算。

2. 绘制细节

在工具栏选择绘制细节,在添加的Trees中,选择一种“草丛”,设置Brush Size,即可在Terrain中“涂刷”“草丛”。

属性

功能
Detail Texture草的纹理。这里的“草”(Grass) 是一个通用术语;纹理可以表示花朵或人造物体(如铁丝网)。

Min Width

Max Width

指定生成的草丛的宽度上限和下限。

Min Height 

Max Height

指定生成的草丛的高度上限和下限
Noise Spread控制着裸露与草丛斑块的近似大小,值越高表示给定区域内的变化越大。
Billboard启用 Billboard 选项时,草的图像将旋转,草丛始终面向摄像机。

地形设置中,有部分参数可用于调整草丛:Detail Distance:草丛的可视距离   Detail Density:看见草从的密度。

 一些植被对象可能在默认情况下不被支持,因为它们使用的是2D草地纹理或不支持的着色器。对于这些对象,在植被列表中会显示一个错误信息。

草地纹理:Nature Renderer要求细节对象使用预制板,不可能直接使用2D草地纹理。这是因为渲染设置是从预制板中的Mesh Renderer和Nature Renderer Object Settings组件中加载的,而草地纹理不能有组件。你可以为草地纹理自动创建一个新的预制件和材料,或者指定一个现有的预制件。

着色器:自定义着色器需要进行修改,以支持Nature Renderer基于GPU的渲染管道和程序性实例。包括一个自动着色器修补器来为你修改着色器。在植被列表中选择一个对象,然后点击 "修补着色器 "来自动修改着色器和材料,以增加对Nature Renderer的支持。

五、添加风

1. 风

如果您的植被使用包含的“自然着色器基本”(Nature Shaders Essentials),则可以按照手册中的“风”设置风动画。https://v3.visualdesigncafe.com/nature-shaders/docs/2020/wind

游戏对象并添加一个 "Global Wind "组件。全局风组件控制场景中的风设置。在这个组件中,你可以调整风的强度、方向等等。

属性功能
Wind Strength场景中风的强度。主要影响阵风。
Wind Speed场景中的风速。
Turbulence应用于场景中的植被的湍流量。
Gust Noise用于风的行为的纹理。这个纹理被覆盖在场景上,并按风的方向滚动。纹理的白色部分代表阵风,灰色代表平静的风,而黑色代表无风。

旋转游戏对象来改变风向。

六、运行查看效果

这里可以实现第一人称视角,在场景中漫游,来实现对地形渲染效果的观看。教程如下:

Unity3D中实现Player的第一人称视角_行秋的博客-CSDN博客

最后可以运行查看。

七、问题总结

问题1 Terrain无法凹陷,只能降低已经抬升地形的高度

问题描述

Unity使用Terrain组件时,没办法做到地形凹陷,只能抬高。

问题解决

Unity的Terrain组件在【Set Height】分页下,Height高度为0时,可理解为该地形的海平面高度,此时就不能地Height调到20,点击【Flatten Tile】,然后就能做地形凹陷,深坑的深度最多即可达到20。

问题2 脚本挂载不上,出现error CS0619: 'GUITexture'...

问题描述

我们在使用脚本的时候有时会出现以下错误:

Assets\Standard Assets\Utility\ForcedReset.cs(6,27): error CS0619: ‘GUITexture’ is obsolete: ‘GUITexture has been removed. Use UI.Image instead.’

问题解决

1.修改SimpleActivatorMenu脚本

using System;
using UnityEngine;
using UnityEngine.UI; //在此处添加namespace UnityStandardAssets.Utility
{public class SimpleActivatorMenu : MonoBehaviour{// An incredibly simple menu which, when given references// to gameobjects in the scenepublic Text camSwitchButton; //在此处修改public GameObject[] objects;
......

2.修改ForcedReset脚本

using System;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityStandardAssets.CrossPlatformInput;
using UnityEngine.UI; //在此处添加[RequireComponent(typeof (Image))] //在此处修改
public class ForcedReset : MonoBehaviour
{private void Update(){// if we have forced a reset ...if (CrossPlatformInputManager.GetButtonDown("ResetObject")){//... reload the sceneSceneManager.LoadScene(SceneManager.GetSceneAt(0).name);}}
}

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...