UE5学习笔记(五)——地形及地表材质

这篇UE5学习笔记详细介绍了如何涂抹地形、创建地形贴图笔刷、实现远近贴图混合以及根据地形倾斜度进行材质混合,深入探讨了UE5中地形和地表材质的高级技巧。

目录

涂抹地形

建立地形贴图笔刷

远近贴图混合

判断倾斜度进行混合


涂抹地形


1、切换到地形编辑模式,新建一张地形
2、切换到刷地形页签,调整刷笔大小和程度,就可以随心所欲的开始改造地形了。
3、根据地形的需求,可以使用不同的笔刷,这里介绍几种常用笔刷
Sculpt雕刻:常用笔刷,鼠标左键上升,Shift+鼠标左键下降
Smooth平滑:让画出来的地形更柔和圆滑
Flatten压平:在顶部或底部拉出一块整齐平面
Erosion腐蚀:让山地像被腐蚀一样凹下去
Hydro水力:模拟出被水流冲刷的效果
Mirror对称:可以做出完全对称的地形


建立地形贴图笔刷


先记录三个文件格式:
Material :母材质,是某种材质的模板,包含了绝大部分该材质特性,以及调节参数,可以实例化出子材质,微调成不同的材质。
Material Instance: 创建好Material后,右键母材质创建Material Instance调整Param变量后实时起效,不需要重新编译。
Material Function: 材质函数,将一些基础的功能封装成材质函数,在不同的材质中可以使用这个公用的函数,可以被直接应用于蓝图中。
1、新建一个 Material Function,将对应贴图放入。右键搜索make,加入MakeMaterialAttribute,将三张素材转化为材质对应属性。
2、由于地面不会只有一种质地,所以先新建两个材质方法grass和rock。
3、新建一个Material,需要把这两种质地混合,搜索layerblend,添加LandscapeLayerBlend。
4、新建的layerblend是空的,需要手动为其添加layer,并将之前创建好的材质方法挂上去。
5、混合好层的节点需要输出材质对应的数据,添加BreakMatierialAttributes,连好后该材质的预览图变为天空的样子
6、连好后放入地形中,使用时如牛奶般丝滑,这似乎不是我们想要的效果。
7、根据网格网格比例,对贴图的大小进行了调节,使用了常见的multiply节点,调整参数到0.005之后,效果变得正常了

远近贴图混合


希望可以达到远处使用大贴图,近处使用小贴图的效果
1、首先复制上面的节点,调整参数之后我们拥有了一份小贴图和一份大贴图
2、使用distance_blend可以通过 与摄像机的距离,生成一个遮罩,用来混合近处和远处的效果。
BlendRange:控制混合的大小,给值10000
StartOffset:控制混合的起点位置,给值-3000
效果如图:(以下图这个效果感觉不太好,这么复杂的效果大可不必,可能别的贴图会有奇效吧)

判断倾斜度进行混合


很多岩石山的顶部植被,雪山的顶部积雪,都会因为山体过斜,露出山体,这里想模拟大自然的鬼斧神工。
1、在母材质中添加BlendMaterialAttributes材质混合节点。并为其添加WorldAlignedBlend世界对齐混合。
blend sharpness 混合过度值 -10
blend bias 混合高度偏移位置 30
这里的参数可以帮助我们取到地形上有斜面的区域,在斜面上和平面上可以使用不同的材质铺设,效果如下:
### 如何在 Unity 中导出地形贴图 为了实现在Unity中导出地形贴图的目标,可以采用特定的方法来处理地形数据并将其转换成图像文件。虽然官方并没有直接提供用于仅导出地形纹理的功能,但通过一些间接手段和第三方工具的帮助能够实现这一需求。 #### 方法一:利用脚本自定义导出功能 可以通过编写C#脚本来提取当前场景中的地形信息,并将这些信息渲染到一张新的纹理上,之后再保存该纹理为图片文件。这种方法灵活性较高,允许开发者完全控制输出的质量与格式。 ```csharp using UnityEngine; public class TerrainTextureExporter : MonoBehaviour { public void ExportTerrainToPNG() { int width = 2048; // 设置想要的宽度 int height = 2048; // 设置高度 RenderTexture rt = new RenderTexture(width, height, 24); Camera cam = GetComponent<Camera>(); Texture2D screenshot = new Texture2D(width, height, TextureFormat.RGBA32, false); cam.targetTexture = rt; cam.Render(); RenderTexture.active = rt; screenshot.ReadPixels(new Rect(0, 0, width, height), 0, 0); screenshot.Apply(); byte[] bytes = screenshot.EncodeToPNG(); System.IO.File.WriteAllBytes(Application.dataPath + "/../SavedImages/TerrainMap.png", bytes); DestroyImmediate(rt); cam.targetTexture = null; RenderTexture.active = null; } } ``` 此代码片段展示了如何捕捉相机视角下的地形视图并将其编码为PNG文件存储于项目目录之外的一个子文件夹内[^1]。 #### 方法二:借助外部插件或资产包 对于那些希望简化流程而不愿深入编程的人来说,市场上有许多现成的解决方案可供选择。例如,“Terrain Composer” 插件不仅支持复杂的地形编辑操作,同时也提供了丰富的导出选项,包括但不限于地形网格、材质球以及高程图等重要组成部分[^2]。 值得注意的是,在考虑使用任何付费或开源库之前,请务必仔细阅读其文档说明,确保所选工具有能力满足个人项目的具体要求。 #### 方法三:手动截图拼接法 如果上述两种方式都不适合,则还可以尝试最原始的手动方法——即先调整摄像机角度至理想位置,然后截取多张高质量的画面快照,最后依靠图形编辑软件(如Photoshop)把这些碎片组合起来形成完整的地图影像。不过这种方式效率较低且难以保持精度一致,通常只适用于临时测试用途而非正式发布版本准备阶段[^3]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值