本系列文章主要介绍:
1、Houdini中的地表制作过程。
2、如何将Houdini中制作的地表在UE4中重建。
3、如何利用Houdini中提供的信息,在UE4中自动创建地表材质。
注:此处以熟悉Houdini为前提,不会介绍Houdini的基本操作
Houdini制作地形,个人感觉有几个先天的优势:
1、程序化生成方式,方便随时对各种细节进行调节。
![8625e2f2a689f7865e3347dc49bb515f.png](https://i-blog.csdnimg.cn/blog_migrate/891475a906c2583c63598880cf780ebd.jpeg)
一个比较复杂的地形创建
2、强大的高度场(Houdini中的地形Terrain工具都称为HeightField)程序节点。可以通过简单的拖拽和调节来实现很高细节精度的地形。
![37982b19d75968b3294ff1e3fbec7a44.png](https://i-blog.csdnimg.cn/blog_migrate/5f8530a08d8b4bda3af16f75fd8de1f4.jpeg)
几个常用的且强大的高度场节点
3、方便的地形创建方式,可以通过高度图、模型创建或直接创建地形。
![13a9dfe25c796bcf6e757a5ab31518eb.png](https://i-blog.csdnimg.cn/blog_migrate/55eaa81bd55cf3460b9ec9ff2c388ee2.jpeg)
直接通过高度图创建地形
4、多种资源输出方式,方便引擎以此来实现各种各样的地形效果。
![a9908d31c1eb1af225f626268d74e25a.png](https://i-blog.csdnimg.cn/blog_migrate/20f500e22f4e7dfc9ff3b0b0ba0815dd.jpeg)
地形数据的几种资源导出方式
5、以很方便的方式生成各种Mask图,来对地形进行针对性的材质赋予和调节。
![8e61ffcc713456c87767e7a1d608e300.png](https://i-blog.csdnimg.cn/blog_migrate/a540cd56d150e8ac11b84d8224864a96.jpeg)
可手动绘制,导入Mask图,函数生成等,且很多Mask也都可以导出
6、配合地形的撒点方式,可以很简单的实现很自然的地形植被或物品的分布。且支持引擎的GPU Instance渲染。
![6a0ad6b26e122067b019a8f441934376.png](https://i-blog.csdnimg.cn/blog_migrate/0459a0c420a43a157632102914ce7776.jpeg)
可以将植被数据导出并在引擎中替换
本次先介绍Houdini美术部分的地形创建过程。
Houdini中的地形创建,大体遵循这几个步骤:
![83e1c2935aa6212e32c2a46ea3e7e84e.png](https://i-blog.csdnimg.cn/blog_migrate/bfdc2e1c9b8900c977d311d5a3453520.jpeg)
基本流程
1、基本塑性:用来创建地形及调整地形的大体形状。
根据关卡或美术设计,简单绘制高度图。
![929abac77ad5a0dc524e6fa2622eb2ce.png](https://i-blog.csdnimg.cn/blog_migrate/98ff7b1576f2aa31911762c3dcd58ada.jpeg)
简单区分大体的高度即可
用HeightField_File来导入高度图,进行必要的参数调节,自动生成地形。
![c2728b3e7bc12d85e0f92e0a4fd2458e.png](https://i-blog.csdnimg.cn/blog_migrate/1b1620f9782498a75701f5ecf6076570.jpeg)
注意这里的选项,选择Mask的话,会将该图当作Mask导入
2,绘制Mask:配合各种遮罩,更精确的调整地形的形状。
这里使用了特征遮罩来创建Mask。该节点功能很强大,可以根据坡度、高度、曲率、方向、环境遮蔽来创建不同种类的遮罩。
![47d2ccedf34cadec4e1d8042e262ddea.png](https://i-blog.csdnimg.cn/blog_migrate/d329d8ec8dd4e2a315d7c6150555bda1.jpeg)
MaskFeature来创建遮罩
也可以使用HeightFieldPaint或者DrawMask等节点来进行遮罩的创建。红色部分既为之后的操作会生效的部分,可以通过勾选InvertMask来简单的进行遮罩的反转。遮罩也可以与之前的遮罩进行叠加、相乘等各种操作。
3、加入随机:对地形进行细节上的随机创建。
这里配合前面生成的Mask来进行地形的随机高度调节。相比过去美术用笔刷进行高度的绘制,配合Mask进行Noise的高度调节速度和效果都会有很大提升。这里注意,Noise的高度叠加方式有多种,如替换、相加、相减、差异、相乘、取大、取小等等,选择适合的即可。下面还有多种Noise的类型可供选择。配合HeightFieldLayer,可以制作很多个性化的地形效果。
![ad2aabb3b0ba0bbb7df60965c34e3361.png](https://i-blog.csdnimg.cn/blog_migrate/b54c232760cda0738325842982a06cef.jpeg)
配合Mask,两侧山体进行Noise高度调节
4、重映射:重新映射地形(或遮罩层)的高度字段中的值。
就是将地形的高度值重新映射到一个合适的高度。点击ComputerRange,会计算出地形的最低和最高点。之后填入映射目标最低最高点数值即可。例如,可以把随机生成的地形在保证整体相对起伏不变的情况下,限定在高度为0~255之间,即地形最低点为0,最高点为255。并非只能线性映射,下面有多种映射类型可选择并且可以调整映射曲线。
![2952be2607ab5abfa0d3d6d219531def.png](https://i-blog.csdnimg.cn/blog_migrate/a592f33b0ee69aa02583daefb73e376c.jpeg)
上图为将25~362的地形高度映射为0~150的高度区间
5、升采样:即将地形网格的密度加大,进行更进一步的细节雕刻。
基本就类似于Zbrush中的高模雕刻。先在较低面数下,调整地形的大体形状,然后增加面数,进行细节的进一步添加。
![890ae98907c1056367833a543d4380e3.png](https://i-blog.csdnimg.cn/blog_migrate/8bb72ddb68cd670147609aec739dd64a.jpeg)
变为2倍采样率后,体素(面数)从25升到了100万
然后重复2~3的步骤,对地形的细节进行雕刻。在地形基本满意后,开始进行地貌侵蚀操作。
9、加入侵蚀:模拟地貌的水流和热侵蚀,生成更自然的地貌景观。
用Houdini进行自然地貌制作的最强大工具,我认为就是地貌侵蚀了。即使什么参数都不进行调整,只要挂上该节点,并进行侵蚀计算,地形的地貌特征就会变得相当自然。而且通过该侵蚀节点,可以生成陆地,泥沙,水流的不同地貌Mask,后期可导出为贴图进行不同地形材质的区分参考。
侵蚀主要分两种,水流和热侵蚀,且都有大量参数进行调节。具体作用可以参看Houdini的帮助。
![2864d08bdfd4e58e1c982ec7a6c8e586.gif](https://i-blog.csdnimg.cn/blog_migrate/d8183a7853adf7200aa66c807da91fba.gif)
对地形进行地貌侵蚀前后对比
之后,一个基本的地形就制作完成了。地形制作过程中的技巧还有很多,比如映射几何体可以利用几何体的形状来修改地形。再比如地形层混合,可以将多种地形根据Mask进行层混合,组合出更丰富的地形地貌。大家有兴趣可以将HeightField中的各个节点都试一下,保证会有很多很新奇的发现。
下面讲讲如何将Houdini与引擎联动,获取地形数据。
先介绍我知道的几个可用于Terrain的Houdini数据输出吧:
1、高度图输出节点
![b7e7df4acb49d00f73f66f9837cf7be8.png](https://i-blog.csdnimg.cn/blog_migrate/5f6e3f990cc8b6c5d80932964a103f3e.jpeg)
这个节点不仅可以将刷好的地形的高度进行导出,还可以自定义导出的图片格式,对各个地形的模板参数进行导出:
![183ef51c705fb0d42e3110f462c7943d.png](https://i-blog.csdnimg.cn/blog_migrate/5572dc97ccbd4f6dc6959be40ce4b637.jpeg)
例如导出泥地Mask,水Mask,如果水中设置了湍流,还可以导出FlowMask,等等。这些Mask会被分别放入不同的通道,供引擎材质进行导入使用。
2、简模导出。
![1a09f3115bc59132298a924aee63447e.png](https://i-blog.csdnimg.cn/blog_migrate/0f948febecb10e0a349805f203c5ac62.jpeg)
可以将生成的Terrain高度场,先转化为多边形,然后进行减面操作,并导出模型进行使用。主要是解决一些没有Terrain系统或不太适合用Terrain系统的引擎进行使用。
3、数字资产导出。
![9f12be07b234e85ed1859173b716c898.png](https://i-blog.csdnimg.cn/blog_migrate/8729e7151972a13fe3c8416e5c487934.jpeg)
这个我自己没试过,据说一些高版本的引擎本身就支持或者自己开发一些Houdini的工具插件来进行支持。我直接选择并导出数字资产以后,引擎里面也只能看到地表,并没有可以进行笔刷编辑或节点调节的参数(即使我导出的时候,设置了要暴露的一些节点和笔刷)。
好了,下面说一下UE4中的地表重现操作:
1、新建一个场景,选择“景观”标签,切换到“管理”。下面的新景观选择“从文件导入”标签。
![c02bd576b6c02d0824db2aff222b42c1.png](https://i-blog.csdnimg.cn/blog_migrate/07f2df0c90e53d0bf9e337d8f9590047.jpeg)
大体说一下这边的设置项吧:
Heightmap File:就是选择你要导入的高度图,可以导入png或者raw等格式,位数可以是8~16位图,尽量选择高位图,8位可能会有锯齿或噪点。
高度图分辨率:显示你导入的高度图的图片分辨率。
Material:给新创建的地表添加景观材质。
Layer Alphamap Type和Layers:为地形添加的地形材质层的混合模式和各层。两种混合模式,Add,叠加模式,UE4默认,就是权重永远以网上叠加的方式绘制。Layer模式就是正常的层模式,权重绘制可以正常的相互替换。
Location,Rotation,Scale:就是正常的地形矩阵变换,位置,旋转,缩放。
SectionSize:地形渲染最小单位棋盘格里的顶点数量。
Sections Per Component:设置每个景观单位中的渲染和剪裁的基本单位Component中含有的Section数量(分段数)。粒度越细剪裁越精确,渲染性能越好但剪裁负担越重。
Number of Components:景观整体大小。
总分辨率:就是场景的顶点数量,等于以上三个单位的乘积。
总组件数量:就是Components的数量,所以就是Number of Components里面的两个数的乘积。
都设置完成以后,点击创建,不出意外的话,就得到如下显示的地形了。
![d8d779cd078c28dc77b0452e24bec636.png](https://i-blog.csdnimg.cn/blog_migrate/d775ffb85daa8e22b939c141ce149c98.jpeg)
和我们Houdini中创建的是不是一毛一样?
好了,下面说一下材质,也就是那些Mask图的用法:
这些图都是我们预先生成好的,并不是在UE4里面刷的,所以景观材质节点中的landscapeblend啥的应该就没法用了。
1、没关系,我们先创建一个材质函数,将雪,山体,草地,泥沙,水的材质都创建出来。
2、山体和雪的,通过地形高度来做mask,并开放参数作为调整,用高度来自动创建雪和普通山体材质。
![7f29bf90486c3d55e21f0497220d5a49.png](https://i-blog.csdnimg.cn/blog_migrate/df14d0c3c2b72f6de3859ec906b000d1.jpeg)
其中纹理参数输入高度图,然后叠加一个参数常数来调整雪线,power来调整过度的硬度。当然,为了过度自然,还可以叠加一个Noise来使用。
3、山体和草的材质,通过一张Noisemask,配合高度Mask来进行过度,海拔低的地方,草权重高,高的地方,草皮减少。做法基本同上。
4、使用我们Houdini中输出来的那几个Mask图通道,作为泥沙和水的可见Mask,叠加到雪线以下的材质上。
最后一步,将该材质函数像链接通常景观材质的方式一样的连接到LayerBlend节点的默认层上(预设权重为1)。OK,一个能根据高度和Mask自动匹配纹理又能通过笔刷进行细部调整的景观材质就连好了(至于每种地貌的材质怎么制作会更好看,后面有时间再讲吧,当然,去网上找点儿可商用材质素材库,不是更简单。昨天听一位有13年3A大作制作经验的技术特效师分享时,也说到这事儿,他们就是通过公司购买数字资源的形式来获取素材,而且公司规定,不能自己制作任何其他素材,只能使用购买的素材库,简直棒 )。
![974f0d244cea679b30fe17ff82b244c7.png](https://i-blog.csdnimg.cn/blog_migrate/05e941fbfb840efc004165b35bf2c9fc.jpeg)
好了,好了,我节点都连的很随意,效果也是单色代替的-_-。讲解功能嘛,大家明白那个意思就好了。