效果图
一、下载与导入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 scene
public 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 scene
SceneManager.LoadScene(SceneManager.GetSceneAt(0).name);
}
}
}