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

news2024/10/3 2:24:04

效果图

一、下载与导入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);
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/54221.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计原则和设计模式01

一:软件设计原则 1.单一职责原则: 有且只有一个原因引起类的变化(类或者接口的职责单一化) 2.里氏替换原则: 子类可以扩展父类的功能,但不能改变父类原有的功能 3.依赖倒置原则: 1.高层模块不应该依赖于底层模块&#xff0c…

Java注解

Java注解(Annotation) Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 注解也叫元数据,一种代码级别的说明,说明程序的是给计算机看的,与类,接口…

事件绑定(onsubmit)表单提交

事件绑定(onsubmit)表单提交 学习路线:JavaScript基础语法(输出语句)->JavaScript基础语法(变量)->JavaScript基础语法(数据类型)->JavaScript基础语法(运算符&#xff09…

Python笔记 · Python语言的“动态性”

尽管对于Python程序员来说已经司空见惯,但是当那些从非动态语言转过来的程序员初次看到形如self.xxxxxx的语句就是在定义对象属性时往往会感到“离奇”:一个未经声明的(类似private int a;那样)变量,直接从self中“点”…

java知识回顾笔记(对象、反射、内省、实例、父类、构造方法、封装、泛型、super())

类&对象 在创建了一个类时,只声明但不赋值,其默认值为: 理解下图含义,即可理解对象和类: 实例 对象又被称为实例,实例变量被创建时,系统默认会赋值,例如: Studen…

什么知识库工具适合小团队?看看文档管理系统+NAS的最新解决方案

编者按:还在为团队选那款网盘而发愁吗?试试文档管理系统和NAS结合吧,高效率低成本,适合小团队。 关键词:免维护,免安装,大容量,在线编辑,文档共享,数据安全 对于企业或…

LeetCode-66-加一

1、从后向前遍历 我们可以从后向前遍历数组,针对不同的情况进行操作:1、若当前数字不为9,则我们直接将数字的值加一并返回即可;2、若当前数字为9,我们将当前数字置为0并对前一位执行加一操作;3、若所有数字…

后端接口时通时不通,团队全链路排查实战

背景: 1 最近团队做了一套系统,已经临近上线了; 2 后端的服务和前端的代码都是新写的,两边的服务器,数据库也都是新申请的; 3 本来测试的时候用的测试服务器,一切都挺好的,但部署到线…

基于分发与计算的GRTN全球实时传输网络

一张能同时满足「分发」与「计算」需求的网。 从直播趋势看「分发」与「计算」 阿里云直播产品架构图中,主要分为端和云两个部分:在端侧,主要包含推流端和播放端;在云侧,一是基于分布式节点构建的传输网,二…

mosquitto部署mqtt broker 并测试订阅与发布

mosquitto部署mqtt broker 并测试订阅与发布 1,MQTT协议介绍 MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型…

如何使用phpstudy在服务器上发布Discuz_X3.4_SC_UTF8_20220811和zzcms2023

Web-ZZCMS: 源码下载:http://www.zzcms.net/about/6.html Web-Discuz: 源码下载:https://www.discuz.net/ 首先安装phpstudy,傻瓜式安装教程,如果中途 遇到报错比如我遇到的是Apache未启动,80端…

Ansible自动化部署安装openGauss3.1企业版单机

文章目录一、背景二、环境准备三、具体实施步骤3.1、安装ansible3.2、配置主机清单3.3、测试主机连通性3.4、创建相关目录3.5、下载openGauss软件包到files目录3.6、创建变量文件3.7、创建安装时需要的xml模板3.8、创建任务文件四、执行自动化安装4.1、校验语法4.2、自动化安装…

CAD新手必练图形三

这次说的这个CAD新手必练图形,用到了CAD直线、圆、多边形、修剪和旋转等多个CAD功能命令,一起跟着操作一下吧 目标图形 操作步骤 1.使用CAD直线命令绘制一条垂直的直线和两条水平的直线,两条水平的直线之间的距离为15,并将他们修…

【CSDN竞赛第11期】编程竞赛总结

文章目录前言/背景题目与解题代码1. 圆小艺2. K皇把妹3. 筛选宝物4. 圆桌CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16 前言/背景 目前已经连续参加10次CSDN的编程竞赛了,这种比赛挺有意义,希望一直举办下去! 题…

JDBC 访问数据库

文章目录一、实验目的二、实验要求三、实验内容1、设计数据库表2、定义实体类3、定义数据库连接类4、实现数据库的增删改查5、测试用例一、实验目的 理解 JDBC 的工作原理,掌握 JDBC 访问数据库; 掌握常见数据库 MYSQL ; 二、实验要求 理解…

【华为上机真题 2022】字符串序列判定

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

中断系统中的设备树__中断号的演变与irq_domain

1 中断号与硬件相关_号码固定 当我们的系统中只有一两个中断控制器时,上面的方法很有用,可以给每一个中断预先确定好他的虚拟中断号,但是当中断控制器越来越多、当中断越来越多,上述方法(virq和hwirq固定绑定)有缺陷: a. 增加工作…

马克思的手稿-第11届蓝桥杯Scratch选拔赛真题精选

[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第92讲。 蓝桥杯选拔赛每一届都要举行4~5次,和省赛、国赛相比,题目要简单不少,再加上篇幅有限,因此我精挑细选…

23软考备考已开始,网络工程师知识点速记~(2)

新一轮软考备考来啦~ 为了帮助大家提高备考效率,将2023上半年软考网络工程师知识点速记分享给大家,快来跟着一起打卡学习吧! 指令系统 指令系统是中央处理器所有指令的集合,通常一条指令可分解为操作码和地址码两部分&#xff…

python 从一道作业题到制作一个图形界面的“诈金花”游戏

题目很简单:就是自己写一个程序,实现诈金花游戏的发牌、判断输赢。 规则: 一付扑克牌,去掉大小王,每个玩家发3张牌,最后比大小,看谁赢。 牌型: 豹子:三张一样的牌&am…