****

完整代码我已经上传到了我的Github上,需要的话可以直接去下载https://github.com/xdedzl/RunTimeTerrainEditor,里面有一个TerrainModilfyDemo的场景,我做了一个简单的UI用来测试,工程版本目前使用的是2019.2,但2018.3之后的版本应该都没问题,但Unity貌似不支持从2019回滚到2018,需要新建工程后将资源复制过去。注意编译环境需要是.net4.x,用3.5会报错。

高度编辑请参考 https://blog.csdn.net/xdedzl/article/details/85268674

自定义笔刷参考 https://blog.csdn.net/xdedzl/article/details/85546694

植被编辑参考    https://blog.csdn.net/xdedzl/article/details/85850159

****

1.Unity2018关于地形贴图的更新

在Unity2018之前的版本中,地形贴图的修改有一个重要的类叫做SplatPrototype,这个类是用来管理贴图信息的,但是,它在2018中被抛弃了,取而代之的是TerrainLayer。下图为两个类的一些属性

TerrainLayer的加入改变了地形贴图的工作流程,原来需要为每个地形添加贴图层,现在可以直接在目录中创建TerrainLayer,每个地形只需要按需附加TerrainLayer。

对于贴图的动态编辑来说,TerrainLayer的出现也让地形贴图层的初始化变得更加方便,之前需要加载不同的贴图并创建SplatPrototype,现在可以直接在编辑器中创建TerrainLayer,在代码里直接加载TerrainLayer就可以了。

2.贴图编辑

和高度编辑类似,地形贴图层的数据TerrainData提供了获取数据和设置数据的方法

float[,,] map = terrain.terrainData.GetAlphamaps(mapIndex.x, mapIndex.y, 1, 1);

terrain.terrainData.SetAlphamaps(mapIndex.x, mapIndex.y, map);

这里获取的map数据是一个三维数组 ,第一维和第二维度同高度编辑,代表的是地形贴图网格的索引,第三维代表的是TerrainLayer的索引。我觉得用当前贴图层在当前网格的强度来理解这个值比较恰当,如果对应网格所有贴图层的强度值加起来和为1,那么用比例来描述这个值也很合适。

对于这个三维数组的值的设置要十分谨慎,小了太暗,大了太亮,建议值得范围设置在0到1且一个网格所有贴图层强度的和为1。

相对高度编辑,贴图的讲的较少,github工程中有简单的示例,就没有向高度图一样做跨地图的处理了,但其实地形的几种数据编辑都大同小异,掌握一种之后其余的也可以照搬了。

关于地形贴图我还想说点别的,近期的项目中,我们需要在上百公里的地形当中动态生成道路,桥梁,水体,树木等信息,而且由于我们的视角需要俯瞰整个地形,所以也不能将数据进行一块一块切分。一开始,道路水体我们都是在程序运行时绘制的Mesh,但由于数据量太过庞大,导致unity无法支持如此多的网格实体,而且项目更加看重在整体上的表现,不需要特别精细的信息,于是将水体信息以及除高速公路以外的道路信息全部改为贴图,下图是我更改了数据之后的效果。所以如果需求允许,地形贴图也不失为一种优化手段。

   

后来看到了一篇GDC关于地形技术的文章,感触颇深(对,其实就是我做不出来) ,

在此贴上链接【GDC2017】Terrain Technology and Tools

Unity 动态编辑Terrain地形(五)贴图相关推荐

  1. Unity动态编辑Terrain地形(四)植被编辑

    **** 完整代码我已经上传到了我的Github上,需要的话可以直接去下载https://github.com/xdedzl/RunTimeTerrainEditor,里面有一个TerrainModi ...

  2. Unity 动态编辑Terrain地形(二)地势

    如果理解了HeightMap,对一块地形某一块区域的地势更改将会是一件很容易的事,但由于需要实现跨多块地图,四块地图之间的修改就会比较麻烦.从这一篇开始的几篇文章,会逐步完善一个地形编辑工具类Terr ...

  3. Unity中动态修改Terrain地形

    以下类实现了在Unity中动态的修改Terrain的功能,可以在运行时升高.降低以及平滑地形高度.在Unity的Play Mode修改地形后退出Play Mode仍然会保留修改:当游戏打包成独立的可执 ...

  4. 如何自制地形纹理贴图

    介于目前部分WE玩家不知道怎样修改地形纹理,今日发表此贴,本教材部分内容为翻译,并加入本人尽可能详尽的讲解,希望对地形区的玩家们有所帮助,本人正在研究如何自制悬崖贴图的问题,此教材意在抛砖引玉,望高人 ...

  5. UNITY 使用代码更换地形中草的贴图

    正确写法: 暂不知道为什么不能直接赋值,或许和粒子动态改参数的方式一样吧,但粒子参数是结构类型的,这里是引用类型的.未来得及深究,有谁明白其道理感谢告知一下. 另很重要的一点: 仅在代码中使用 pub ...

  6. 动态加载烘培贴图与Terrain转mesh

    前言 unity加载烘培贴图是需要加载场景才可以使用,但如果项目只使用一个场景或者有许多关卡地形时,明显通过加载场景来达到更换烘培贴图的这种做法是不妥当的.而terrain地形在有些安卓机上的支持并不 ...

  7. 《UnityAPI.Terrain地形》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Unity+Terrain+AddTreeInstance+立钻哥哥++OK++)

    <UnityAPI.Terrain地形> 版本 作者 参与者 完成日期 备注 UnityAPI_Terrain_V01_1.0 严立钻 2020.09.24 #<UnityAPI.T ...

  8. unity与Gaea互导(介于高度图)在制作好的unity地形之上用gaea添加自动化地型细节

    unity与Gaia互导(介于高度图) 问题:当在unity中制作的地型基本已经完成,但是由于地形是手刷,当跑地图时发现角色走在场景中时会感觉整个场景很空旷,整体效果不够丰富.则需要对地形进行细节调整 ...

  9. 【蓝鸥Unity开发基础三】课时3 Terrain地形系统【未完】

    [蓝鸥Unity开发基础三]课时3  Terrain地形系统[未完] 推荐视频讲师博客:http://11165165.blog.51cto.com/ 一.Terrain地形系统 Terrain地形系 ...

  10. Unity地形材质贴图随高度变化

    地形材质贴图随高度变化 1. 导入Amplify Shader Editor插件 2. 进行可视化Shader编写 3. 给地形赋值材质球进行测试 4. 继续编写Shader 5. 最终效果 PS. ...

最新文章

  1. 楷书书法规则_硬笔书法入门学习“三步法”,让练字不再难
  2. 输入法按照选字频率排序的C语言程序算法,算法与数据结构之选择排序(C语言)...
  3. 人脸关键点 Stasm
  4. SMW0上传文件到数据库层详解
  5. TCP协议-握手与挥手
  6. ssh 连接_Docker实战——使用SSH连接docker容器
  7. SAP License:市场需要双重SAP顾问
  8. [Ext JS 7]7.4 样式主题(Theme)
  9. java jdbc 表存在_JDBC / Java – 如何检查数据库中是否存在表和列?
  10. linux 中文输入鼠标跳动,解决wps for linux 中文输入法光标不跟随的问题
  11. 微信APP支付开发指引
  12. idea解決tomcat乱码问题
  13. CAN总线波特率计算方法
  14. [Github实战]双重认证2FA 如何 设置/更改[手把手][2022]
  15. postgres使用with计算占比,同比和环比
  16. [HLSL]HLSL 入门参考 (dx11龙书附录B译文)
  17. 存储-对象存储、文件存储和块存储
  18. 论文笔记Understanding and Diagnosing Visual Tracking Systems
  19. 医院HIS系统运维工作见闻
  20. Linux命令date日期时间和Unix时间戳互转

热门文章

  1. 推荐一款学习Autosar ecu配置的好工具
  2. cogs——2098. Asm.Def的病毒
  3. pointer在html作用,html-CSS中的“ cursor:pointer”效果为什么不起作用
  4. 互动3D网站已触手可及
  5. 《C程序员:从校园到职场》出版预告(3):从“阳春白雪”到“下里巴人”
  6. Ubuntu20.04安装视频播放器SMPlayer
  7. html 6位数支付密码,支付宝支付密码怎么设置长密码 支付宝支付密码取消6位数字密码设置长密码的方法...
  8. 中国成网络攻击最大受害国之一
  9. 蒙特卡洛方法到底有什么用
  10. DAY8:尚学堂高琪JAVA(70~76)