How is "unreal_bake_actor" attribute used?

   2267   7   2
User Avatar
Member
146 posts
Joined: Aug. 2012
Offline
I'd like to set the name of the Actor that is created on baking a HDA. However, when the HDA creates instances using the `unreal_instance` attribute, the `unreal_output_name` attribute does not seem to apply to the Actor's name. I thought perhaps the `unreal_bake_actor` attribute would work instead, but setting it does not seem to do anything.
User Avatar
Member
146 posts
Joined: Aug. 2012
Offline
I found out you can use unreal_bake_actor to determine the name of Actors with InstancedStaticMeshComponents if you also set the unreal_level_path, i.e. baking to a different level.

Seems like a bug.
User Avatar
Member
45 posts
Joined: Dec. 2010
Offline
Hi did you ever get this to work?
I'm having the same problem and can't get a baked blueprint to generate with a specific name
MC
User Avatar
Member
25 posts
Joined: Oct. 2018
Offline
I just spent quite some time trying to figure this all out 🙂 Unfortunately it seems like the Houdini Engine is a bit buggy, especially when dealing with generic uproperties, I still want to email support about it... But these basic properties seem to work (after you bake the HDA's output). The unreal_output_nameshould control the name of the file on the disk and unreal_bake_foldershould set the folder while unreal_bake_actorsets the name of the actor. Have a look at this HDA, it should all properly bake in Unreal into one actor with multiple components and different settings/properties on each of them.

P.S. There was a bugfix in 20.5.445 that made the actor/level naming work properly

Attachments:
Screenshot_2025-02-04-14-02-36.jpg (1.1 MB)
Screenshot_2025-02-04-14-16-58.jpg (895.9 KB)
yaakTest-uproperties.hda (29.1 KB)

User Avatar
Staff
555 posts
Joined: Sept. 2016
Offline
Hi,

You're setting mesh attributes on Points - I'd recommend setting them on primitives instead.

As a rule of thumb
- Set attributes for a mesh you're generating on the primitives
- If instancing, (unreal_instance for example) you can set the attributes on points.
- If using pack primitives - where the attributes is placed matters as well:
Before the pack, and it applies to the generated static mesh,
After the pack, it applies to the generated Instancer component (ISMC, HISMC or SMC)
- If you want to apply attributes to the Houdini Asset Component itself - (change default values of the HDA) - always use detail attributes.

For generic properties, rather than guessing names, just type "Houdini.DumpGenericAttribute CLASSNAME" in the output logs / commands to get a list of all the property that the plugin can see on a given class - with the matching attribute name/type to use in H.

ie:
Houdini.DumpGenericAttribute HoudiniAssetComponent

or

Houdini.DumpGenericAttribute StaticMeshComponent

In your case - switching the wrangle to run on primitive did fix the bake_actor/folder for me.
User Avatar
Member
25 posts
Joined: Oct. 2018
Offline
Thanks for the reply @dpernuit, it makes it a bit clearer 🙂

The attached example works completely fine for me, including setting the bake_actor/folder.

There is however one issue that I think is a bug:
- "Hidden In Game" has to be the first component to be merged with the rest in Houdini or the whole actor will have the property set (see screenshots)

If it's not the first component:
- it doesn't matter if it's written on primitives or points
- if it's set only before packing it does nothing
- if it's set after packing it propagates to the whole actor

And here are some other observations:
- only the spline component is named after @unreal_output_name, ideally all components would have nice names
- not setting default BlockAll collision profile on all components will result in strange custom collision setting
- not setting default collision complexity will result in one setting on all static meshes
- "bake one actor per HDA" will result in 2 actors with strange names (spline + rest)
- some @unreal_* properties work only before packing, some only after packing (safest to use both, but confusing)
-- @unreal_bake_actor has to be set after packing for static meshes, but before packing for splines, ISMs and HISMs

Attachments:
Screenshot_2025-02-04-17-05-48.png (301.3 KB)
Screenshot_2025-02-04-17-03-48.png (312.2 KB)

User Avatar
Staff
555 posts
Joined: Sept. 2016
Offline
Well, HiddenInGame will be a special case - as it's one of the properties that the plugin controls by default,
if the mesh is visible/invisible/tempalted etc.. in Houdini will control that property - it's also one that we change when switching between proxy / refined meshes etc..

You're basically applying an extra layer by manually overriding this property on top of it - and this could either apply to the whole actor - or individual components...

Your example is also not the best - if you have multiple clearly distinct outputs - why pack and merge everything into a single output instead of using multiple outputs? The plugin does its best to sort that out - but Houdini Engine still see all of this as a single output.

As mentioned above - some attribute working before/after pack is expected
as some properties exist on the static mesh - other on the component/actor - if you want to modify mesh properties place the attribute before the pack - if you want to modify comp/actor properties, place it after.

The spline being separate when baking as one actor is likely to be a bug.
User Avatar
Member
25 posts
Joined: Oct. 2018
Offline
We have a city block generator which we use to build a whole city with (using PDG). We want to have one actor per city block, with multiple different components (static meshes, instanced meshes, splines, etc) and each of these components need to have different properties (hidden in game, custom collision geometry, LODs, draw distance, etc).

One of these components need to be a static mesh (a single triangle) that stores a custom collision geometry for the whole city block. Only this component then needs to be hidden in game, what would be the best way to do it? Yes there are different approaches of not using these kind of hidden blockers, but that's what we'd like to go with.

I also tried using multiple outputs in my example and nothing really changed. If the "Hidden In Game" is not on the first output, then it's propagated to the whole actor.

It's also interesting that the internal name for "Hidden In Game" is "bHiddenInGame" for the component, but "bHidden" for the whole actor. I'm only using "bHiddenInGame" so it shouldn't really affect the actor.

Thanks for your time, I love Houdini and would really like to figure this out 🙂

Attachments:
Screenshot_2025-02-05-11-28-53.jpg (810.4 KB)
Screenshot_2025-02-05-11-09-01.png (253.5 KB)

  • Quick Links