All Houdini Unreal Engine 4

Houdini Unreal 支持输出碰撞体

 
 

官方文档:https://www.sidefx.com/docs/unreal/_collisions.html

 
 

官方预设了很多的标记,主要实现了两种功能。【不加打组标记生成得模型是默认不带碰撞体的,因此需要碰撞体的模型都需要参考这里的设置】

 
 

第一种就是,生成StaticMesh模型的同时,通过标记设定这个模型的简单碰撞体或者复杂碰撞体如何生成。要注意的是,这边支持的是设定碰撞体生成的方式,不是设定碰撞体的模型。

所有 rendered_ 开头的标记作用都是这个。

rendered_collision_geo

使用模型本身作为复杂碰撞体

rendered_collision_geo_ucx

使用模型的凸包作为复杂碰撞体

rendered_collision_geo_simple

使用默认的简单碰撞体

rendered_collision_geo_simple_box

使用Box作为简单碰撞体

rendered_collision_geo_simple_sphere

使用Sphere作为简单碰撞体

rendered_collision_geo_simple_capsule

使用Capsule作为简单碰撞体

rendered_collision_geo_simple_kdop10x

根据10DOP-X生成简单碰撞体

rendered_collision_geo_simple_kdop10y

根据10DOP-Y生成简单碰撞体

rendered_collision_geo_simple_kdop10z

根据10DOP-Z生成简单碰撞体

rendered_collision_geo_simple_kdop18

根据18DOP生成简单碰撞体

rendered_collision_geo_simple_kdop26

根据26DOP生成简单碰撞体.

 
 

第二种就是生成碰撞体模型。标记这个组以后,这个模型的输出结果就是碰撞体本身,而不包含可见模型。

所有的不带 rendered_ 开头的标记作用都是这个。

Prefix

Collider

collision_geo

Complex Collision (invisible).

collision_geo_ucx

Convex Hull Collision (invisible).

collision_geo_simple

Default Simplified Collision (invisible).

collision_geo_simple_box

Box Simplified Collision (invisible).

collision_geo_simple_sphere

Sphere Simplified Collision (invisible).

collision_geo_simple_capsule

Capsule Simplified Collision (invisible).

collision_geo_simple_kdop10x

10DOP-X Simplified Collision (invisible).

collision_geo_simple_kdop10y

10DOP-Y Simplified Collision (invisible).

collision_geo_simple_kdop10z

10DOP-Z Simplified Collision (invisible).

collision_geo_simple_kdop18

18DOP Simplified Collision (invisible).

collision_geo_simple_kdop26

26DOP Simplified Collision (invisible).

 
 

因此这里一般的使用方法就是两种:

  1. 生成模型的同时,标记生成模型的碰撞体是什么,采用的就是上面的第一种方法。

 
 

例:

Houdini内标记好简单碰撞模型和复杂碰撞模型的生成方式

Unreal生成结果

简单模型:X轴投影

复杂模型:凸包

 
 

 
 

 
 

  1. 生成模型的同时,生成碰撞模型作为生成模型的自定义碰撞模型。

 
 

例:

Houdini里面准备好两个模型,第一个是Staticmesh,第二个是Staticmesh的碰撞体模型,我们用collision_geo来做标记,同时输出。

Unreal里面会生成两个模型,一个可见的staticmesh,一个是不可见的staticmesh的碰撞体模型。

这里可以将不可见的碰撞体模型挂到staticmesh上面实现碰撞体的自定义模型。

 
 

挂载的这一步确实不够自动化,后续我们要实现的就是将第二种使用方式自动化。

 
 

实现:

首先要解决的是生成的mesh的命名的问题,实现了SetCustomName函数。

实现获取正确的名字:

然后解决Bake的时候根据名字来处理。

根据标签忽略生成actor:

根据名字实现挂载:

 
 

 
 

使用:

Houdini实现如下,有三个要求。

对于每个mesh自定义了名字;

使用 collision_geo 标签来标记自定义碰撞模型;

自定义碰撞模型的命名,必须以 collision_ 开头。

这个HDA拖近场景得到生成结果:

点击 BakeActor 实现生成package以及actor对象。

注意的是这里只会生成不是collision_标记命名的模型,不可见的碰撞体模型不会生成actor。

同时这个对象会自动挂载其对应的自定义碰撞体,这个由命名约定。

比如上图普通模型 testmesh 会自动挂载 collision_testmesh 这个自定义碰撞体,效果如下: