ue4 Worldmachine 结合使用

最近项目需求制作一个场景的远景部分。正好可以尝试使用一下UE4的 Landscape。不过直接在 Editor 里刷地形工作量太大,刷出的地形也不真实,最关键的是 Landscape 的工具并不是那么好用。

所以我们决定使用 WorldMachine 作为地形的生成工具,将地形的高度图导入 Editor,再在 Editor 中对细节进行修改。WorldMachine 生成的高度图相对人工算出来的要真实,最重要的是快,用它找坡度,沟壑更加准确。

在 UE4 中使用 WorldMachine 还要解决几个问题。官方有篇 wiki 将的很清楚。World Machine to Unreal Engine 4 - In Depth Guide

问题1:高度图尺寸

UE4 的高度图有一些限制,这与 UE4 地形系统的组织有关。高度图中每一个像素对应着地形系统的一个顶点。UE4 的地形组织分为3层:组件 component,分段 section,四边形 quadsLandscape Technical Guide

四边形是地形系统最小单位,每个四边形对应4个顶点。

分段由四边形组成,是 drawcall 和 LOD 的最小单位。因为要对每个分段单独做 LOD,高度图需要做 mipmap,所以每个分段的高度图都是2的整数次幂,可以是 8x8 到 256x256 中间的一个。分段中每个四边形共享顶点,所以每边四边形的个数是 x-1。

组件由分段组成,每个组件只能有 1x1 个或者 2x2 个分段。组件是渲染、可视性和碰撞的基本单元。每一边组件的数量可以是1到32中的一个,长和宽可以不相同。组件越多,CPU 消耗越大。

了解了以上的关系,高度图的尺寸就可以计算出来了。但是这里推荐的方法是在 Editor 里调整组件和分段的选项,来得到高度图的尺寸。

ue4 Worldmachine 结合使用
高度图尺寸

上图中的高度尺寸就是 505x505。

问题2:世界尺寸

第二个问题就是要弄清地形系统中的距离表示的实际世界尺寸。正常地形系统中顶点之间距离是1ued,代表实际中的1cm,但是在创建时可以看到 Scale 是 (100, 100, 100)。所以顶点间距离是1m。地形系统的高度范围是 -255 到 257,同样在 Scale = 100 时,单位是 m。如果希望上图中的设置,高度图1像素对应1m,那么 WorldMachine 的设置是,分辨率 505x505,宽是505m,高是505m。海拔的设置,由于world machine从0开始,所以要设成512m。

ue4 Worldmachine 结合使用
分辨率,宽,高
ue4 Worldmachine 结合使用
高度

之后的操作就是在 WorldMachine 里做图并导入 Editor。WorldMachine 默认都是 km 级别的,可以放大 100 倍,方便在 WorldMachine 里操作。

问题3:地形材质

地形材质方面主要要搞清 LayerInfo 的2两种混合模式和材质中的3种混合类型的含义。

LayerInfo 的2两种混合模式:Weight-Blend(normal), No Weight-Blend

ue4 Worldmachine 结合使用
Weight-Blend(normal), No Weight-Blend

Weight-Blend 的层权重和为1,增加一个层的权重,其他层的权重就会减少。No Weight-Blend 的层单独计算权重,不对其他层有影响。

ue4 Worldmachine 结合使用
No Weight-Blend 的层单独计算权重

图中,红色和蓝色部分为 Weight-Blend,绿色部分为 No Weight-Blend。先刷红色,再刷蓝色,绿色。蓝色部分覆盖红色部分的区域,红色部分的权重变成了0。而绿色部分覆盖的区域红色部分权重没有变。

LB_WeightBlend,LB_AlphaBland,LB_HeightBland

WeightBlend 和 HeightBland 都是权重混合。在同一像素上不同层的权重和为1。但是 HeightBland 提供高度图。在边界产生下图效果。

ue4 Worldmachine 结合使用
HeightBland

WeightBlend 和 HeightBland 都是无序的, 减少一个层的权重,其他层的权重会增加,但是增加那个并不确定。

AlphaBland 是有序的,好像一层覆盖一层,减少一层会露出下一层。这里官方文档说的也不详细。查了一下代码
int32 UMaterialExpressionLandscapeLayerBlend::Compile(class FMaterialCompiler* Compiler, int32 OutputIndex, int32 MultiplexIndex)

他们的关系应该是这样的。

ue4 Worldmachine 结合使用
blend 公式

w是权重,color 是这个点的颜色, AlphaBland 在最后才混合,每个 Alpha 层都会 lerp 一次,顺序不定。

原文链接:http://www.jianshu.com/p/f0feccb546f2

上一篇:MYSQL进阶学习笔记十二:MySQL 表分区!(视频序号:进阶_29,30)


下一篇:phpstrom 激活