FBX from HDAprocessor saves as ascii instead of binary

   4302   9   0
User Avatar
Member
9 posts
Joined: March 2021
Offline
Quick question about exporting FBX's using the "Write Outputs" on the HDA processor node in PDG.

When I specify a FBX file as the output from the hda processor node, it saves each fbx in ascii format instead of fbx binary format. 3dsmax isn't able to read the fbx ascii format.

Any way to get this to work?

Thanks,
Colin
User Avatar
Member
9 posts
Joined: March 2021
Offline
bump
User Avatar
Member
10 posts
Joined: Oct. 2014
Offline
Hi!

I'm facing this problem and I contacted directly SideFX support at support@sidefx.com, which specially if you have any kind of proper license you are able to do as well. They will answer.

They got back to me with this response:

The HDA Processor TOP doesn't explicitly handle any geometry file types. It just calls`hou.Geometry.saveToFile(path)` on the geometry produced by cooking the SOP, using the path specified on the TOP node. Unfortunately that approach does not allow for any customization out of the output file format, and uses the default behavior of the GEO IO module for the file type (e.g. bgeo, fbx, obj, etc). The same behavior can be seen using a File Cache SOP that's configured to write to an .fbx file. You'll have to use an FBX ROP to customize the settings used to write out an .fbx file, such as choosing binary over ASCII.

As an RFE, we can look into extending the HDA Processor so that its worker script internally creates an FBX ROP and uses that to write out the output file. However that's not supported out of the box right now.

This means that for a batch process like the one I and probably you need, we have to end up with the FBX ROP in a way that is convenient for our purposes.

I see this as a huge limitation. I will be sharing what we I ended up doing as I need to solve this.

Hope this helps.
Edited by lobachevscki - Sept. 21, 2021 18:25:05
User Avatar
Member
10 posts
Joined: Oct. 2014
Offline
Hi!

I consulted the Think Procedural Discord (Edit on the name of the Discord, I misnamed it originally), that you might want to check out if you dont know about it, it is a good forum for questions and consultation.

Find attached a very barebones example of a workaround for this problem.

Im attaching only the HIP file out of simplicity, but the HDA the TOP network requires is just a simple Cube SOP where you change the scale, nothing else.

This approach shown here can be scaled and adapted to other more complex workflows, which is my case, but in fact if you are just only exporting stuff this might be enough (mind you the attributes name can be a problem).

Without getting into much detail (the HIP is here for that), what you do is to write to a cache using the hdaprocessor or even the very ROP Geometry node (if you instead of using and HDA are directly batch editing from the a geo environment) and then recast that cache with a ropfetch. The ropfetch node will write to disk with whatever options you have in the ROP FBX Output if you correctly set up the parameter references (again, in the HIP).

If this is not enough it probably will help you anyway.
Edited by lobachevscki - Sept. 27, 2021 11:11:21

Attachments:
hdaprocessor_ropfbx.hip (223.9 KB)
top.jpg (133.2 KB)

User Avatar
Member
9 posts
Joined: March 2021
Offline
@lobachevscki, Thanks so much for your replies.

In the future for support, like this, I figured a forum post would be more ideal than contacting via email so it could help future users.

I didn't know about the discord either, so thanks for that reference. I'll try this out later today and see if it works for my pipeline setup.

Best,
Colin
User Avatar
Member
9 posts
Joined: March 2021
Offline
lobachevscki
Hi!

I consulted the Everything Procedural Discord...

I couldn't find this discord community, I did find this one though, is this the one you were referring to?

https://twitter.com/thinkprocedural [twitter.com]
User Avatar
Member
9 posts
Joined: March 2021
Offline
lobachevscki
Hi!

I consulted the Everything Procedural Discord, that you might want to check out if you dont know about it, it is a good forum for questions and consultation.

Find attached a very barebones example of a workaround for this problem.

Im attaching only the HIP file out of simplicity, but the HDA the TOP network requires is just a simple Cube SOP where you change the scale, nothing else.

This approach shown here can be scaled and adapted to other more complex workflows, which is my case, but in fact if you are just only exporting stuff this might be enough (mind you the attributes name can be a problem).

Without getting into much detail (the HIP is here for that), what you do is to write to a cache using the hdaprocessor or even the very ROP Geometry node (if you instead of using and HDA are directly batch editing from the a geo environment) and then recast that cache with a ropfetch. The ropfetch node will write to disk with whatever options you have in the ROP FBX Output if you correctly set up the parameter references (again, in the HIP).

If this is not enough it probably will help you anyway.

This works splendidly, thank for you taking the time to create the .hip file and everything. The only issue I'm having now and am trying to figure out is how to have the object names transfer as well from my input.

e.g.
in the file `art.fbx` I have a mesh named "art_LOD0", "art_LOD1" when I export from the ROP it names my new objects after the last node in the chain which in my case is "autouv1". I'm still pretty new to houdini so I'm checking if I need a "name" attribute or something like that.



Best,
Colin

Attachments:
SNAG-0485.jpg (54.4 KB)

User Avatar
Member
9 posts
Joined: March 2021
Offline
Alright I figured it out. Here's the very simple solution that I'm posting here in case anyone else googles for the answer and can't quite find it.

Problem:
When exporting fbx from ROP FBX node, the model is named whatever the last node in the chain is.

Solution:
In my case, my model has a 'name' attribute which is the correct name for each primitive, toggling the option in "ROP FBX Output" "Build hierarchy from Path Attribute" and setting the "Path Attribute" to 'name' works great.

Here's my setup





Thanks all,
Colin

Attachments:
SNAG-0489.jpg (302.2 KB)

User Avatar
Member
10 posts
Joined: Oct. 2014
Offline
colinsenner
lobachevscki
Hi!

I consulted the Everything Procedural Discord...

I couldn't find this discord community, I did find this one though, is this the one you were referring to?

https://twitter.com/thinkprocedural [twitter.com]

Yeah, that one, I actually misnamed it, my bad. That's the one



colinsenner
@lobachevscki, Thanks so much for your replies.

In the future for support, like this, I figured a forum post would be more ideal than contacting via email so it could help future users.

I didn't know about the discord either, so thanks for that reference. I'll try this out later today and see if it works for my pipeline setup.

Best,
Colin

This is true, but as much as the forum is indeed an official channel and it gets checked by the developers and the community, SideFX's direct support is just too good. You will think that an email might be a weird or inconvenient way to offer support, but in the case of SideFX it isnt, they are just way too effective. They really are. See that I got to the same problem as you, I found your post that had two months without answer, wrote SideFX with all the details and an example, they answered the next day. In my case I wrote from the email of the company I work for, but it is the same for me indie license (that is from my personal email).

Also, the Think Procedural Discord is very active so I complemented with it.

That's how I usually solve my problems when Im really lost like it was in this case. The forum is more like an archive to me.

What I would recommend is to do both: publish the problem in the forum and write to support, if you find the solution through support first then share it like I did. I have done that myself before (and of course this time).

Again, this might sound like a weird system to you, but in my case I would go to support and not risk waiting two months for an answer from the community, and go the extra step to share to the community when I found the answer.



And yes, that naming part is what I meant you needed to take care of the attribute name, I wasnt sure of the solution when I wrote because Im working in Houdini 18 and it is not straightforward there, but the solution is exactly the one you published for Houdini 18.5
Edited by lobachevscki - Sept. 27, 2021 13:26:13
User Avatar
Member
9 posts
Joined: March 2021
Offline
Thanks again lobachevscki for your sage advice.
  • Quick Links