• Unity中用Natrue Renderer做自己的地形Terrain.


    效果图

    一、下载与导入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用于风的行为的纹理。这个纹理被覆盖在场景上,并按风的方向滚动。纹理的白色部分代表阵风,灰色代表平静的风,而黑色代表无风。

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

    2. 水

    导入已经制作好的水的预制件,将其覆盖湖面,即可。

    水的预制体下载:https://download.csdn.net/download/weixin_43042683/87234153

    把下载好的water文件夹,放在Assets目录下即可。

    海水预制件(WaterBasicDaytime.prefab、WateBasicNightime.prefab)

     透明水体预制件(WaterProDaytime.prefab、WaterProNightime.prefab)

    3. 天宫盒 

    在unity Assets store下载免费的天宫盒。如:Skybox Series Free | 2D Sky | Unity Asset Store

    点击 Window->Rendering->Lighting 选择Environment 改变天空盒材质即可。

     

    六、运行查看效果

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

    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脚本

    1. using System;
    2. using UnityEngine;
    3. using UnityEngine.UI; //在此处添加
    4. namespace UnityStandardAssets.Utility
    5. {
    6. public class SimpleActivatorMenu : MonoBehaviour
    7. {
    8. // An incredibly simple menu which, when given references
    9. // to gameobjects in the scene
    10. public Text camSwitchButton; //在此处修改
    11. public GameObject[] objects;
    12. ......

    2.修改ForcedReset脚本

    1. using System;
    2. using UnityEngine;
    3. using UnityEngine.SceneManagement;
    4. using UnityStandardAssets.CrossPlatformInput;
    5. using UnityEngine.UI; //在此处添加
    6. [RequireComponent(typeof (Image))] //在此处修改
    7. public class ForcedReset : MonoBehaviour
    8. {
    9. private void Update()
    10. {
    11. // if we have forced a reset ...
    12. if (CrossPlatformInputManager.GetButtonDown("ResetObject"))
    13. {
    14. //... reload the scene
    15. SceneManager.LoadScene(SceneManager.GetSceneAt(0).name);
    16. }
    17. }
    18. }

  • 相关阅读:
    Chrome开发自定义右键菜单实现快速跳转到指定页面
    人工神经网络教学视频第三版,人工神经网络教程
    php中register_shutdown_function 函数用法详解
    文件系统里面没有 /dev/input/mice 文件的解决办法
    【JS基础】1.函数、匿名函数、回调函数、IIFE(立即执行函数)
    【操作系统】为什么需要内核
    i.MX6ULL驱动开发 | 36 - 注册spilcd为framebuffer设备并使用lvgl测试
    数码打印流程【方向不干胶、纸卡、瓦楞、单张 {不涉及画册}】
    深度学习名词总结
    使用Android数据恢复恢复已删除的文件[Windows]
  • 原文地址:https://blog.csdn.net/weixin_43042683/article/details/128117283