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 里调整组件和分段的选项,来得到高度图的尺寸。

高度图尺寸

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

问题2:世界尺寸

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

分辨率,宽,高

高度

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

问题3:地形材质

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

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

Weight-Blend(normal), No Weight-Blend

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

No Weight-Blend 的层单独计算权重

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

LB_WeightBlend,LB_AlphaBland,LB_HeightBland

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

HeightBland

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

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

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

blend 公式

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

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

时间: 2024-10-05 16:39:45

ue4 Worldmachine 结合使用的相关文章

UE4高级功能--初探超大无缝地图的实现LevelStream

前言 好吧,这次总结的还是UE4,在这里要向CE3的朋友们道一声歉,因为本人水品有限,对于CE3的探索学习陷入了一个非常大的瓶颈,暂时抽不出一块儿大的单独的时间去解决,另外,自己也有一点小小的私念,就是期盼Cryteck官方能够推出新的版本,至少能完善一下现在的文档,所以只能暂时把CE3搁置下来,但是我并不会放弃CE3,CE3对我来说,绝对是个非常大的挑战,我不会轻易放弃他的. 好了回归正题,先来简单说一下写这篇文章的背景吧,这两天我试着看了一下UE4官方提供的实例"2014功能介绍"

Houdini技术体系 基础管线(三) :UE4 Landscape Component的多选支持 下篇

背景 上篇中,我们介绍了如何修改Houdini Enigne来设置单个Landscape Compnent的Height和Layer的数据,但原生Houdini Engine并不支持多选Component的写回功能,下篇中,我们来解决这个问题. Component多选支持的修改 Houdini Engine虽然支持多个Landscape Component的选择,但是并不支持写回到Landscape Component,需要自己来实现这个功能.单个Component的实现方法上文已经接受. 多选

[工作积累] Tricks with UE4 PerInstanceRandom

最近在用UE4的Instancing, 发现限制很多. Unity有instancing的attribute array (uniform/constant buffer),通过InstanceID来访问每个instance的数据,实现每个实例的不同的参数(通常的一种做法). 然而Unreal没有这样的功能,只有一些instancing的vertex buffer. shader: 1 #if USE_INSTANCING && !USE_INSTANCING_EMULATED 2 flo

中国VR人才需求占全球18%排名第二,UE4技术美术人才万金难求

虚拟现实持续火爆,行业市场规模也随之水涨船高,未来医疗.娱乐.房地产.教育.旅游等领域还将继续拓展VR技术的应用.资本的入局和技术的发展已经相对稳定,VR行业必将迎来更为迅猛的发展阶段. VR在中国的快速发展有目共睹,短短两年时间已经形成了较为完善的产业链,令人惊叹.而与产业链的快速发展形成鲜明对比的,却是人才的远远落后.近期,全球最大的职场社交平台领英针对全球VR人才进行了一次全面扫描.数据显示,美国VR人才占全球40%,需求占比48%,而中国人才仅为2%,需求却占全球18%,人才短缺现象十分

ue4 c++ 接口

使用UE4接口比起普通的高级语言,要多做很多工作,是因为要兼容蓝图的使用,有一些小坑需要注意,开始吧. 1.新建接口类 打开UE4编辑器,与往常一样,新建C++类,然后选择Object继承,然后取名字,这里我使用工作中我的接口名,作为例子说明,"ITrackTeam" 然后修改继承的类,而且你没有看错,就是写2个class,一个叫UTrackTeam,一个叫ITrackTeam,类名和头文件名可以不一样的,我这边命名没有遵守虚幻的规则,本来应该命名为"UITrackTeam&

ue4 SNew背后的逻辑

ue4的ui库Slate体系非常庞大,即使是在创建对象这一小事上,也是相当复杂: SLATECORE_API TSharedRef<SWidget> SNullWidget::NullWidget = SNew(SNullWidgetContent).Visibility(EVisibility::Hidden); 所有SWidget体系内的对象,都要用SNew这个宏来创建,它的内容是: #define SNew( WidgetType, ... ) \ MakeTDecl<Widget

Ue4的GitHUB版本版本管理探索

GitHUB是学生党或者业余爱好者不错的选择,如果大家都处在一个局域网一下还是推荐用SVN,毕竟GitHUB的私有仓库要钱,而且网速难以忍受. 首先说一下:Ue4 4.10 默认生成一下文件与文件夹 文件夹 .vs        备用工程文件 config        游戏设置,一些内部属性 content        游戏资源 Intermediate     缓存文件 Source                C++代码文件 文件 Ue4工程文件 Vs工程文件 首先说一下Ue4的版本管

用UE4来做Zego即构的房间列表

Zego即构是一家做直播的服务商,Zego即构自己的房间列表,本文只是测试功能用,相应代码并没完全测试,请选择性参考. 我们在UE4中来实现一下,我感觉这个过程有点意思,UE4中C++与蓝图和UI的互相通信基本全部用到了. Zego即构没有专门的UE4插件,所以我们主要逻辑全部在C++中,蓝图只是辅助. 首先,我们定义一个房间结构,因为要想UE4中C++和蓝图可见可用,我们要用C++实现,并实现特定的写法让蓝图知道. USTRUCT(BlueprintType) struct FRoomBlue

[工作积累] UE4 TAA ReProjection的精度处理

先贴一个UE4 TAA的slidehttps://de45xmedrsdbp.cloudfront.net/Resources/files/TemporalAA_small-59732822.pdf 里面细节问题很多,先记录一下目前想到和遇到的问题,便于备忘,后面有空的话再记录. TAA用到的Velocity和抖动对精度要求比较高, 特别是大场景下误差容易比较大,UE4做了一系列的处理来保持精度. 投影矩阵的精度 1 static const FMatrix InvertProjectionMa