unity游戏开发——(细)深入解析 Unity 地形系统:从基础到高级应用

Unity游戏开发


“好读书,不求甚解;每有会意,便欣然忘食。”

本文目录:

Unity游戏开发

  • Unity游戏开发
  • 前言
    • 深入解析 Unity 地形系统:从基础到高级应用
    • 一、初识 Unity 地形系统
        • 1. 地形尺寸与分辨率
    • 二、地形编辑工具详解
          • 1. 高度工具(Raise/Lower Terrain)
          • 2. 平滑工具(Smooth Height)
          • 3. 平整工具(Set Height)
          • 4. 纹理绘制工具(Paint Texture)
    • 三、植被与细节物体的添加
          • 1. 树木与草丛
          • 2. 细节物体
        • 四、优化地形性能
          • 1. LOD(层级细节)
          • 2. 地形分块
          • 3. 植被与细节的优化
        • 五、与其他系统的集成
          • 1. 光照与阴影
          • 2. 水体效果
          • 3. 环境效果
        • 六、第三方工具的增强
          • 1. Gaia
          • 2. TerrainComposer
          • 3. CTS(Complete Terrain Shader)
  • 总结


前言

嗨,我又来啦。一天不见,甚是想念~

Unity 的地形系统是一个非常强大的工具,专为创建大规模、自然环境的游戏场景而设计。它不仅能够让开发者创建高度复杂的地形,还能将这些地形与Unity的其他系统无缝整合,如光照、物理、植被等。 搞游戏开发可能很多时候不需要自己动来绘制地形,或者建模,但是我们可以有一个详细的了解,在以后提出需求时也能更好的交流和沟通。


以下是本篇文章正文内容

深入解析 Unity 地形系统:从基础到高级应用

Unity 作为一个强大且灵活的游戏引擎,其地形系统为开发者提供了创建大规模自然环境的便捷工具。无论你是在制作开放世界的冒险游戏,还是需要一个逼真的自然场景,Unity 的地形系统都能满足你的需求。本文将详细解析 Unity 的地形系统,从基础功能到高级应用,全面掌握这一重要工具。

一、初识 Unity 地形系统

Unity 的地形系统是通过 Terrain 组件来实现的。创建地形对象非常简单,只需在场景中选择 GameObject > 3D Object > Terrain,就会在场景中生成一个新的地形对象。

由于本人也是初学者,又苦于没有系统的课程,很多时候也是在网上自己找资源来进行学习。所以本文通过Satndard Assets这个标准资源包里的教程内容来学习。

关于如何找到这个包,请参考我昨天发布的博客。

右键我们的项目面板导入包

在这里插入图片描述
注意:我们今天只了解地形的所以只导入environment这个包就行。

等待加载过后,直接右键层级面板,新建3D项目创建一个地形(Terrain
在这里插入图片描述

1. 地形尺寸与分辨率
  • 地形大小:可以通过 Terrain 组件的属性面板设置地形的物理尺寸(宽度、长度、高度)。默认的地形大小为 1000×1000 单位,适合中等规模的场景。

  • 我们可以在右侧面板中查看一些基本的信息在这里插入图片描述

  • 高度图分辨率(Heightmap Resolution):决定地形高度图的细节等级,影响地形的平滑度和精细度。

  • 控制点距离(Control Texture Resolution):用于设置地形纹理的分辨率,直接影响地表材质的清晰度。

此处一个地形和一个层级面板内的项目是一一对应的

二、地形编辑工具详解

Unity 提供了一整套地形编辑工具,可以帮助我们根据需求雕刻和绘制地形。

1. 高度工具(Raise/Lower Terrain)

通过高度工具,大家可以使用笔刷在地形上增加或减少高度。不同的笔刷形状和尺寸提供了更精细的控制,可以创造出如山脉、丘陵和山谷等多种地形形态。
在这里插入图片描述

特别需要注意的是,
我们的笔画粗细决定了地形的宽度,而透明决定了我们在绘制时的高度变化的快慢。
以下几个工具中也会有一些需要注意的,我们可以尝试着不同的选项对应不同的功能,
摸索着来,记得更加牢固。
在这里插入图片描述
笔刷的形状也可以自己更改。

2. 平滑工具(Smooth Height)

在创建复杂地形时,常常会产生一些不自然的尖锐边缘。使用平滑工具,可以平滑这些边缘,使地形过渡更加自然。

3. 平整工具(Set Height)

当你需要为建筑物或道路创建平坦区域时,平整工具非常有用。你可以将地形的某个区域设定为固定高度,从而确保平整度。

4. 纹理绘制工具(Paint Texture)

地形的表面材质可以通过纹理绘制工具进行定制。也可以在地形上应用多种纹理(如草地、泥土、岩石等),并通过调整混合比例实现不同材质间的自然过渡。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

如图便可以添加一个纹理。
也可以创建多个图层实现不同效果。
在这里插入图片描述


在这里插入图片描述
此外我们还可以设置高度,然后展开瓦片。将地平面抬升再消去可以得到类似峡谷的地形。

通过这些工具的组合,我们试着创作一篇包含自然山水的地形:
在这里插入图片描述

三、植被与细节物体的添加

在地形上添加树木、草丛等植被,以及一些小型细节物体,如石头、花朵,可以显著增强场景的真实感。

1. 树木与草丛

通过 Paint Trees 工具,你可以在地形上散布树木。Unity 提供了一些预设的树木模型,当然你也可以导入自己的树木资源。可以调整树木的密度、大小和颜色,以创建多样化的植被覆盖。
在这里插入图片描述
在这里插入图片描述

2. 细节物体

细节物体工具允许开发者在地形上添加诸如草丛、岩石和其他小物体。这些元素虽然体积小,但能极大提升场景的细节表现,使其更加逼真。
在这里插入图片描述
所谓细节,摄像机拉近时,才能看清哦
在这里插入图片描述

四、优化地形性能

在处理大规模地形时,优化性能是一个重要的考虑因素。Unity 提供了多种优化手段,以确保即使在大型场景中,游戏也能流畅运行。

1. LOD(层级细节)

Unity 地形系统支持 LOD(Level of Detail)技术,这意味着地形在远处会显示较低的细节,以减少渲染负担。随着玩家接近,地形细节会逐渐提高。

2. 地形分块

对于超大型的地形,可以将其分割成多个小块(Chunks),每个地块可以独立渲染。这不仅有助于提高渲染效率,还能减少内存消耗。

3. 植被与细节的优化

草丛通常采用 billboarding 技术,树木则可以通过 LOD 简化模型,在远处显示低多边形模型,以减少渲染压力。

五、与其他系统的集成

Unity 的地形系统与光照、水体、物理等其他系统可以无缝集成,从而实现更丰富的场景效果。

1. 光照与阴影

Unity 地形系统与全局光照系统兼容,支持实时光照和预计算光照,使得地形在不同时间和天气条件下都能展现真实的光影效果。

2. 水体效果

通过 Unity 的水体系统,而我们可以在地形中添加湖泊、河流和海洋。水体效果与地形自然结合,提供逼真的反射和波动效果。

3. 环境效果

通过配置天空盒或环境探针,可以为地形添加环境反射,使地形材质在不同光照条件下展现不同的反光特性。

六、第三方工具的增强

我们今天的例子可能有点老了,我们可以在资源商店中找最新的或付费的,效果会更好。

除了 Unity 自带的地形工具外,Unity Asset Store 中还有许多强大的第三方插件,能够进一步增强地形系统的功能。
Unity Asset Store中有许多优秀的第三方工具可以增强地形系统的功能,例如:

1. Gaia

Gaia 是一个功能强大的地形生成工具,提供了自动化生成地形的功能,非常适合快速创建复杂的自然场景。

2. TerrainComposer

TerrainComposer 一个高级地形编辑工具,支持更细致的控制和自动化生成。提供了更加精细的地形控制和生成工具,适合那些需要高度定制化地形的开发者。

3. CTS(Complete Terrain Shader)

CTS 提供了高质量的地形着色器,使得地形纹理在各种光照条件下都能表现出色。提供高质量的地形着色器,使地形纹理更真实。

总结

文章总结:

希望这篇文章能帮助大家更好地理解和应用 Unity 的地形系统。相互交流,相互学习,如有错误,恳请斧正。欢迎在评论区留言讨论!
今天的更新就到这里,我们明天再见!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kafka发送消息-自定义消息发送的拦截器

1、自定义拦截器 创建自定义拦截器类,实现ProducerInterceptor接口。对消息进行拦截,可以在拦截中对消息做些处理,记录日志等操作… package com.power.config;import org.apache.kafka.clients.producer.ProducerInterceptor; import org…

【Spring Boot】全局异常处理

目录 背景 前言 设计步骤 1.定义异常信息类: 2.自定义异常: 3.创建全局异常处理类 4.在控制器中抛出异常 5.输出 捕获 Valid 校验异常 背景 去面试的时候被问到SpringBoot项目中,如何处理全局异常的,也就是如何捕获全局异…

vue2 part2

数据代理 通过defineProperty里面传入obj2和x&#xff0c;然后get和set下读取接收下然后再接收set中给对象x用value接收下&#xff0c;这样就能两个数据读取和接收了 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>何…

浅谈【数据结构】链表之单链表

目录 1、什么是数据&#xff1f; 2、什么是结构 3、什么是数据结构&#xff1f; 4、线性结构(线性表&#xff09; 4.1线性表的物理结构的实现 5、链表 5.1无头结点的单链表 5.2新内容、老面孔 5.3数组和链表的优缺点 5.4链表的概念 5.5链表的创建步骤 5.5.1创建过程…

芯片后端之 PT 使用 report_timing 产生报告 之 -input_pins 选项

今天,我们再学习一点点 后仿真相关技能。 那就是,了解 report_timing 中的 -include_hierarchical_pins 选项。 如果我们仅仅使用如下命令,执行后会发现: pt_shell> report_timing -from FF1/CK -to FF2/d -delay_type max -include_hierarchical_pins 我们使用命…

【数据库】Mysql 批量变更所有字段类型为varchar的字符集

生成变更语句 SELECT CONCAT(ALTER TABLE , TABLE_NAME, MODIFY , COLUMN_NAME, , COLUMN_TYPE, , CHARACTER SET utf8 COLLATE utf8_general_ci , CASE WHEN IS_NULLABLE YES THEN NULL DEFAULT NULL WHEN IS_NULLABLE NO AND ISNULL(COLUMN_DEFAULT) THEN NOT NULL EL…

什么是持续集成(持续交付、部署)

文章目录 1 持续集成1.1 持续集成的好处1.2 持续集成的目的1.3 没有持续集成的状况 2 持续交付3 持续部署4 持续交付和持续部署的区别 1 持续集成 持续集成&#xff08;Continuous integration&#xff0c;简称CI&#xff09;&#xff0c;简单来说持续集成就是频繁地&#xff…

数字孪生网络 (DTN)关键技术分析

数字孪生网络 (DTN): 概念、架构及关键技术 摘要 随着5G商用规模部署和下一代互联网IPv6的深化应用&#xff0c;新一代网络技术的发展引发了产业界的广泛关注。智能化被认为是新一代网络发展的趋势&#xff0c;为数字化社会的信息传输提供了基础。面向数字化、智能化的新一代网…

【Linux篇】Linux命令基础

目录 1. Linux的目录结构 1.1 Linux的目录结构 1.2 /在Linux系统中的表示 2. linux命令基础 2.1 什么是命令和命令行 2.2 Linux命令的通用格式 2.3 ls命令 2.3.1 ls命令的参数的作用&#xff1a; 2.3.2 ls命令的选项 2.3.3 命令的选项组合使用 2.4 cd切换工作目录 2…

【微信小程序】使用 npm 包 - API Promise化-- miniprogram-api-promise

1. 基于回调函数的异步 API 的缺点 默认情况下&#xff0c;小程序官方提供的异步 API 都是基于回调函数实现的&#xff0c;例如&#xff0c;网络请求的 API 需要按照如下的方式调用&#xff1a; 缺点&#xff1a;容易造成回调地狱的问题&#xff0c;代码的可读性、维护性差&a…

HTML简单了解和基础知识记录

参考视频 html的用途 超文本标记语言&#xff08;英语&#xff1a;HyperText Markup Language&#xff0c;简称&#xff1a;HTML&#xff09;&#xff0c;用来显示网页的文字和框架结构&#xff0c;可以认为是网页的骨架。 标签/元素 用于定义文字图片连接等&#xff0c;分…

VLDB 2024 即将来袭!创邻科技将带来精彩分享

8月26-30日&#xff0c;数据库领域最权威、影响力最大的顶级盛会之一&#xff0c;VLDB 2024 来了&#xff01; VLDB&#xff08;International Conference on Very Large Databases&#xff09;是数据管理、可扩展数据科学和数据库研究人员、厂商、应用开发者以及用户广泛参与…

能实现可算不可见的同态加密技术详解

目录 同态加密的基本概念 同态加密示例 同态加密的原理 同态加密的类型 同态加密的应用场景 同态加密的挑战 小结 同态加密&#xff08;Homomorphic Encryption&#xff0c;HE&#xff09;是一种满足密文同态运算性质的加密算法&#xff0c;可以在加密数据上直接执行特定…

WiFi的IP和电脑IP一样吗?怎么更改wifi的ip地址

在数字化时代&#xff0c;网络连接已成为我们日常生活和工作中不可或缺的一部分。无论是通过手机、电脑还是其他智能设备接入互联网&#xff0c;IP地址作为网络设备的唯一标识&#xff0c;扮演着至关重要的角色。然而&#xff0c;很多用户对于WiFi的IP地址与电脑&#xff08;或…

3.4-CoroutineScope/CoroutineContext:coroutineScope() 和 supervisorScope()

文章目录 coroutineScope()supervisorScope()总结 coroutineScope() coroutineScope() 和我们创建协程时的 CoroutineScope 名字是相同的&#xff0c;实际上它们也确实有所关联&#xff0c;为了方便理解我们先说下 coroutineScope() 是怎样的效果。 我们在使用 coroutineScop…

计算机网络常见面试题总结

文章目录 1 计算机网络基础1.1 网络分层模型1.1.1 OSI 七层模型是什么&#xff1f;每一层的作用是什么&#xff1f;1.1.2 TCP/IP 四层模型是什么&#xff1f;每一层的作用是什么&#xff1f;1.1.3 为什么网络要分层&#xff1f; 1.2 常见网络协议1.2.1 应用层有哪些常见的协议&…

MySQL主从复制之GTID模式

目录 1 MySQL 主从复制 GTID 模式介绍 2 传统复制模式与GTID复制模式的区别 3 GTID模式核心参数 4 GTID 实现自动复制原理 4.1 GTID基本概念 4.2 GTID复制流程 5 GTID 实现自动定位 5.1 配置 my.cnf 5.2 配置 SLAVE 实现自动定位 5.3 测试 6 GTID 模式 故障转移的方法流程 6.1…

记一次NULL与空字符串导致的分组后产生重复数据

目录 一&#xff0c;场景说明二&#xff0c;实现功能三&#xff0c;修改原实现方法四&#xff0c;说明 一&#xff0c;场景说明 想实现这样一个功能&#xff0c;统计人员信息中不同性别的人的总工资。 实现方式&#xff1a;将数据group by 分组后累加。 二&#xff0c;实现功…

SpringMVC核心机制环境搭建

文章目录 1.SpringMVC执行流程1.基础流程图2.详细流程图 2.安装Tomcat1.下载2.解压到任意目录即可3.IDEA配置Tomcat1.配置Deloyment2.配置Server 3.创建maven项目1.创建sun-springmvc模块&#xff08;webapp&#xff09;2.查看是否被父模块管理3.pom.xml引入依赖4.目录5.SunDis…

npm阿里云制品仓库

配置 配置仓库地址&#xff0c;可以再在仓库指南看到 npm config set registryxxxxx#登录&#xff0c;帐户密码可以在仓库指南看到 npm login注意&#xff1a;npm>9的版本npm login目前有问题 verbose web login not supported, trying couch&#xff0c;暂时没试验到解决…