需求:区分 Foliage 对象是由哪个 Houdini HAD 生成的 或者 是否是人工刷出来的。
使用:
所有的 Houdini HDA 在 Bake Foliage 这一步骤的时候,都会给生成的Foliage打上标记。这一步是用户无感知的,也不可以不打标记。
但是在 Bake Foliage 这一步骤的时候,用户可以选择是否删除场景内已存在的相同标记的 Foliage。
选项:
勾上表示会删除场景内已存在的相同标记的Foliages;
不勾表示不会删除场景内已存在的相同标记的Foliages;【默认】
要注意的是:
-
删除场景内已存在的相同标记的Foliages,场景内的定义是当前激活的Level。
比如图示激活的就是 GE_001_Basin_0_1 场景。
- 标记不等于 HDA 的名字,因此支持区分一个场景内多个同名的 HDA 生成的内容。
-
标记等于 HDA 的名字 + HDA加入场景的顺序,以每次重启项目为准。
例:
你向场景内拖入了 HDA_A 的第一个并生成BakeFoliage,然后又拖入了 HDA_A 的第二个并生成BakeFoliage,然后删除HDA_A的第一个,再拖入了 HDA_A 的第三个并生成BakeFoliage。
结果:
勾选Delete的情况下,三个生成结果都会保留;
勾选Delete的情况下重启项目后,再依次拖入三个 HDA_A,则相同顺序的 HDA_A 生成结果会删除并重新生成。
该功能支持 BakeFoliageLevels 使用,在这种情况下会删除所有Foliage Bound内的相同标记Foliage对象。
实现:
核心就是给 FFoliageInstance 对象加上一个标记信息:
然后 FHoudiniEngineBakeUtils::BakeHoudiniActorToFoliage 里面的实现就是:
第一步获取当前在处理的标记;
第二步就是删除当前场景内的该标记FoliageInstance对象
最后就是在新的Bake的时候给每一个新生成的FoliageInstance对象打上标记