- 1:基础平面创建
- 2:UE4 材质引用 (在制作材质资产最后一个节点添加)
- 3:大型创建(多次迭代)
- 4:提升 (悬崖)
- 5:侵蚀(风化)
- 6:梯田
- 7:下降 (泥石流沉降)
- 8:中间 采样 侵蚀
- 8.1:削弱过于崎岖的位置
- 9:利用 最终 侵蚀 添加 细节
- 10:湖泊
- 11:创建子网络
- 12:创建数字资产
- 13:调用参数
- 14:导入 UE4
- 15:拖动导入的文件到视图窗
- 15.1:归零变换
- 15.2:验证控制参数
- 15.3:添加额外的控制参数
- 15.4:验证mask匹配
- 15.5:Bake模型
- 16:给需要上材质的位置分层
- 17:小技巧
- 17.1:Tips01 避免出现 层信息 未完全覆盖地形 而导致的 某部分没有材质,解决如下图
- 18:创建材质资产
- 19:材质资产使用
- 19.1:Bake上级模型
- 19.2:导入houdini材质资产
- 19.3:归零变换
- 19.4:更新输入源地形的数据
- 20:制作简单低质量混合材质
- 20.1:每个分层材质的制作
- 20.2:混合分层材质(多种方法,经测试结果基本一致)
- 20.3:存在的问题
- 21:制作高质量通用混合材质
- 21.1:地形UV控制
- 21.2:材质基础部分
- 21.3:法线凹凸
- 21.4:置换凹凸
- 21.5:UE4 中通过材质 实现实例化模型
- 22:Bake材质
- 23:实例化资产包简单制作步骤大纲
- 24:(多种树等模型随机分布)
- 25:(在树的附近长草)
- 26:(进UE4 自动替换 模型)UE4 实例化模型 位置引用
- 26.1:本质
- 26.2:添加 标签名
- 26.3:二、将 点属性中属性名为 tag 且值为 cao 的点打到一个组里
- 26.4:三、其他模型步骤同上 (石头、树等)
- 26.5:四、将 houdini 中的实例化模型的连线断开
- 26.6:其他可能的问题
- 27:实例化资产使用
- 27.1:Bake材质到模型上
- 27.2:导入houdini实例化资产
- 27.3:问题
制作地形
地形制作的基本思路:
基础平面创建——大型创建(多次迭代)——提升(悬崖)——侵蚀(雨水冲刷等)——梯田——泥石流(下降)——中间采样侵蚀——利用最终侵蚀添加细节——湖泊
基础平面创建
与 UE4 协同工作需要注意,按照UE4标准 对 heightfield 进行设置
否则导入 UE4 后地形边缘一圈会出现拉伸
Overall size /vertices | Quads/section | Sections/component | Component size | Total component |
总体尺寸(顶点) | 四分之一/切片 | 切片/组件 | 组件尺寸 | 组件 总数 |
8129*8129 | 127 | 4(2*2) | 254*254 | 1024(32*32) |
4033*4033 | 63 | 4(2*2) | 126*126 | 1024(32*32) |
2017*2017 | 63 | 4(2*2) | 126*126 | 256(16*16) |
1009*1009 | 63 | 4(2*2) | 126*126 | 64(8*8) |
1009*1009 | 63 | 1 | 63*63 | 256(16*16) |
505*505 | 63 | 4(2*2) | 126*126 | 16(4*4) |
505*505 | 63 | 1 | 63*63 | 64(8*8) |
253*253 | 63 | 4(2*2) | 126*126 | 4(2*2) |
253*253 | 63 | 1 | 63*63 | 16(4*4) |
127*127 | 63 | 4(2*2) | 126*126 | 1 |
127*127 | 63 | 1 | 63*63 | 4(2*2) |
Size(地形的面积) | 再切块的 单位边长 | 每块切块再切块
切成几份 |
每块切块的面积 | 将地形切成多少块 |
Gridspacing 网格间距(对应UE4中地形的精度(细节多少)) |
如:
UE4 材质引用 (在制作材质资产最后一个节点添加)
在UE4中创建一个地形材质,作材质引用
右键材质 复制引用
Attribcreate 属性创建
将引用在attribcreate节点里面设置给unreal_material 属性,记得路径要去头去尾 即 /Game/NewMaterial3.NewMaterial3
这样设置好之后 地形被导入UE4就会自动赋予指定材质
大型创建(多次迭代)
主要节点 heightfield_pattern 独立的山体
heightfield_distort 给独立的山体添加扭曲
heightfield_layer 将独立的山体融合成连绵的山体 模式选择 maximum
提升 (悬崖)
heightfield_maskbyfeature 根据特征 对需要提升的区域进行选区
heightfield_maskblur 模糊选区
heightfield_distort 扭曲选区
heightfield_noise 对选区提升 noise 类型 选 worley(cellular)F2-F1
heightfield_maskclear 清除mask
侵蚀(风化)
heightfield_resample 重采样 降低网格精度 侵蚀节点耗资源 用低网格精度 模拟
heightfield_erode 侵蚀模拟
heightfield_resample 侵蚀完成后 拉高网格精度
heightfield_resample 将原地形精度拉高
heightfield_layer 将两者形态混合 模式选择blend
梯田
heightfield_maskbyfeature 根据特征选区
heightfield_distort 选区扭曲
heightfield_terrace 梯田制作
heightfield_maskclear 清除mask
同样的步骤制作另一种形态的梯田
对需要融合的区域选区
heightfield_masknoise 对选区加一个noise
heightfield_layer4 融合两种形态的梯田根据mask 方式选blend
下降 (泥石流沉降)
heightfield_distort7 对山体进行扭曲
heightfield_maskbyfeature4 根据特征 对需要进行泥石流的位置选区
heightfield_slump1 泥石流沉降
heightfield_maskclear4 清除mask
中间 采样 侵蚀
heightfield_resample4 降低精度
heightfield_erode2 侵蚀
heightfield_resample5 提高精度
削弱过于崎岖的位置
heightfield_wrangle1 选区
heightfield_maskblur2 模糊选区
heightfield_blur1 对地形选区位置模糊
heightfield_layer5 将原形态与侵蚀过得地形混合
利用 最终 侵蚀 添加 细节
heightfield_distort8 对地形扭曲
heightfield_erode3 侵蚀
heightfield_layer6 原地形与侵蚀过的地形混合
湖泊
heightfield_maskbyfeature6 选区 湖泊生成区域
heightfield_blur2 根据选区 对形态模糊
heightfield_blur3 收缩选区 模式选择 收缩
heightfield_blur4 模糊选区
heightfield_remap1 重映射 根据mask 重映射高度
heightfield_maskclear5 清除mask
heightfield_resample6 重采样 提高精度
以上 地形部分制作完成
制作地形数字资产
以另一个简单的地形为例:
创建子网络
选中所有节点
点击 从选择的节点创建子网络
重命名
创建数字资产
右键 子网络包 创建数字资产
更改资产存放路径
调用参数
方便在UE4里继续修改 以山脉高度、位置举例 保存为hda文件
调用方法 参数栏-根据节点-子网包-节点-属性-添加调用-更改标签名(支持中文)-确认
以上为模型的数字资产
HDA数字资产的使用
导入 UE4
将 houdini 中的hda地形数字资产 导入到 UE4中
导入UE4
拖动HDA文件到内容浏览器窗口 或者
导入+路径
拖动导入的文件到视图窗
观察视图 大纲视图 houdini参数
归零变换
在UE4的内容浏览器中将houdini的资产拖动到场景中,HDA会自动把houdini中创建的地形COOK出来,然后把houdini资产文件 在 UE4中的变换属性 归零
Houdini generated meshes 翻译为 Houdini生成的网格
验证控制参数
山脉高度拉到特别低之后 验证有效果
添加额外的控制参数
当所需的控制参数不够 回到houdini-选择包-内容物-参数信息面板-继续添加-保存
UE4内更新 进UE4 内容浏览器 右键houdini资产 重新导入
右键选择-重建所选择
验证mask匹配
注意将houdini中的layer名 和UE4中材质的layer名匹配上,UE4找不到layer信息会显示全黑
其中 一、bedrock 是 基岩层
三、sediment 是 沉积物层
二、Debris 是 碎片层
四、Water 是 水层
Bake模型
确认模型没问题之后 在houdini generated meshes中将地形bake出来 ,之后大纲里的资产文件就可以删除了
制作材质数字资产
给需要上材质的位置分层
- 当分层区域精度不够时 可以 提高精度 并且 加一个 blur 节点
- 将所有的分层做一次重映射,并将参数提取到资产文件中,以备在UE4 中继续调整
三、heightfield_copylayer1 拷贝层信息 为在UE4 中上材质使用
heightfield_maskbyfeature 根据特征画mask
heightfield_copylayer7 将 mask信息 拷贝为 层信息
以这三个为例
小技巧
Tips01 避免出现 层信息 未完全覆盖地形 而导致的 某部分没有材质,解决如下图
第一层 第二层 层信息合并
所有有用的层 合并完
反转层信息 并给此层命名
此时所有自定义的层信息全部保留下来
并且自定义层信息未覆盖到的位置也创建了一个层信息
在UE4中给材质时就可以解决不完全覆盖的问题
创建材质资产
全选节点
将这些节点打包成数字资产
注意 留一个输入端连接模型资产
此资产为材质资产
材质资产使用
Bake上级模型
导入houdini材质资产
归零变换
更新输入源地形的数据
再输入里选择风景画输入 选择bake出来的地形 勾选 更新输入源地形的数据,不勾选会创建一个新的
制作简单低质量混合材质
每个分层材质的制作
选择需要的材质包
根据需要选择材质包 以 UE4 内置的石头 草地 水 木头 为例
找到内置的草地材质包 双击打开
创建带输出端的材质 make material attributes
创建一个 make material attributes 节点(制作材质属性)
将端口分一条线(双击连线创建分支)连接到新节点上
全选节点 ctrl+a 复制所有节点
创建材质表达式
在内容浏览器右键新建一个 材质表达式 双击打开
将之前复制的节点粘贴到 材质表达式 里 并连接输出 然后保存
将所有的texcoord 替换为 Landscapecoords 并将 Landscapecoords UV类型
改为 LCCT Weight Map UV
根据原来的 texcoord UV缩放量 乘一个倍增
同方法制作其他的材质包
其他材质同样操作 做好 草地 木头 石头 水 等材质备用
目的
内置的材质包没有输出端口 需要改成带输出端口的材质 然后用来混合材质
混合分层材质(多种方法,经测试结果基本一致)
拖入
打开地形上之前上好的材质 将修改完毕的材质包全部拖入
混合材质 Landscape layer blend
方法一 连接方式最繁琐 混合前打断
打断材质 break material attributes
目的: 材质输出的材质信息的数据类型不一样(basecolor roughness) 必须把他们分开 分别混合 所以需要用到此节点
创建break material attributes 节点(打断 材质属性) 连接拖入的材质
混合材质
根据需要 将用到的材质信息混合到对应层
比如 地形的水痕层需要 上一个水材质
那么 将水材质的 基础颜色 金属度 粗糙度 normal (水材质包中只有这几个有信息)
输出分别连到 water(水痕层)
然后 再把 层混合节点 的 输出端 连接到对应的属性上
石头 木头 草地 材质包同理
全部完成后 保存 即可看到 场景中 材质已经更新完毕
方法二 连接方式最简洁 混合前后都不需要打断
输出 勾选 使用 材质属性 use material attributes
将 材质结果节点 模式改为 使用材质属性
或者 不勾选 使用 材质属性 直接连接
混合前后都不需要打断
方法三 复杂度中等 混合后打断
存在的问题
边缘处材质出现莫名其妙的错误
选区精度不够 接缝边缘马赛克
制作高质量通用混合材质
地形UV控制
材质基础部分
法线凹凸
置换凹凸
应用曲面细分的模式
曲面细分时出现皲裂时勾选此项
模型UV信息
通过混合的高度图信息得到表面各个位置的0—1的值
与顶点法线方向相乘得到表面各个位置的不同大小的凹凸
与模型自身的缩放倍数相乘得到一个随模型缩放大小变化的凹凸信息值
整体乘一个倍增控制一下凹凸强度
对原模型进行细分的精度
通过使用 静态网格体 自身的顶点 进行置换
通过使用 对静态网格体 曲面细分后的顶点 进行置换
对静态网格体曲面细分 时的 细分精度
UE4 中通过材质 实现实例化模型
Bake材质
上完材质之后 bake 出来,如果地形没有bake 调整材质资产中的参数会直接应用到地形上
制作实例化数字资产
实例化资产包简单制作步骤大纲
绘制实例化模型分布位置的选区
将选区转为层信息
将这些节点打包成数字资产
注意 留一个输入端连接材质资产
此资产为实例化资产
(多种树等模型随机分布)
(在树的附近长草)
四种撒点方式 使用 mask 层的覆盖面积
使用 mask 层 的 密度
使用 mask层的 总点数
撒点前计算 使用来源点的位置(在树的附近长草)
来源点 标签 选择 自定义的树的标签
还包括 数量控制 位置控制(半径、距离等)
(进UE4 自动替换 模型)UE4 实例化模型 位置引用
本质
添加虚幻能识别的一个属性和值
添加 标签名
(实际就是 撒点
并且给点创建一个 叫 tag 的字符串属性
值为cao (本示例中 可自定义) )
二、将 点属性中属性名为 tag 且值为 cao 的点打到一个组里
操作层级为 点层级
如果 随机属性(根据点序号做的0—1的随机值(可加一个种子值)) 小于0.6
(即 在这个点组中60% 的点 表达为真)
那么 虚幻中的实例物体用这个引用(UE4中复制引用 掐头去尾);
否则
那么 虚幻中的实例物体用另一个引用(UE4中复制引用 掐头去尾);
适用于多个模型 不同比例分布
三、其他模型步骤同上 (石头、树等)
四、将 houdini 中的实例化模型的连线断开
如果未断开 在UE4中将优先执行这些连接的模型 导致未能正确自动替换模型
其他可能的问题
UE4 中的实例引用路径中 存在 中文路径 可能导致不识别(未测试)
进UE4 依次点选 重新导入 重建所有实例 重建所选择 防止未正确更新资产
保存hda 导入UE4
实例化资产使用
Bake材质到模型上
导入houdini实例化资产
UE4 中添加 雾 和 后期效果(后处理场)
Ue4地形和层信息给回到houdini继续修改
网格缩放值=ue XY缩放值/100
高度缩放值=ue Z缩放值/100
高度偏移值=ue Z位置值/100
位移X =手动调
位移Y =手动调
旋转Y=90
问题
边缘有拉伸