Houdini Data Interface for UE4's Niagara

   52738   38   20
User Avatar
Member
394 posts
Joined: May 2017
Offline
This thread is for the legacy Houdini Niagara plugin.
Please refer to this thread for all future updates.
Houdini Niagara Plugin Unreal Engine 4.25 and beyond. [www.sidefx.com]

Hi folks,

We're getting closer to an official release of the Houdini plugin for Niagara. I'd love to get some feedback on the tools and suggestions for improvements. I'll use this thread to post example files and videos for anyone interested in testing this stuff out.

You will need to download the latest gamedev tools to access the extra nodes in Houdini.

The plugin comes with the latest preview release of UE4 - 4.20 preview 3

https://vimeo.com/276129245/d0d180d953 [vimeo.com] - This quick start video will get you setup and ready to go with the more involved stuff.

https://vimeo.com/276145729/ad5f1dc611 [vimeo.com] - There are currently 5 content examples available with the plugin. This video will give you a run down of what's going on.

https://vimeo.com/276129739/5aa8e05a88 [vimeo.com] - Niagara ROP walkthrough.

I've attached 2 files. niagara_examples.hip includes the setups used in the content examples.
niagara_destruction_example.hip is a basic rbd setup using some gamedev tools to simplify the rbd workflow [vimeo.com].

Mike
Edited by mikelyndon-sesi - May 7, 2020 17:32:14

Attachments:
niagara_examples.hip (177.9 KB)
niagara_destruction_example.hip (565.1 KB)

User Avatar
Member
394 posts
Joined: May 2017
Offline
Hi folks! Just a quick note. Change your file extension to hcsv instead of csv or you'll get a window popping up at import time in ue4 asking what kind of data table the file is.

Mike
User Avatar
Member
28 posts
Joined: Nov. 2015
Offline
I had a look at the HoudiniCSV.cpp file for supported fields:

P, Px, X, pos
N, Nx
T, time
#, id
alive
life
Cd, color
alpha, A
v, Vx
type
impulse

And proceeded to export a cube with A (alpha) attrib to it. But the resulting CSV has no A field:

#,P
0,“(0.5, -0.5, 0.5)”
1,“(-0.5, -0.5, 0.5)”
2,“(0.5, 0.5, 0.5)”
3,“(-0.5, 0.5, 0.5)”
4,“(-0.5, -0.5, -0.5)”
5,“(0.5, -0.5, -0.5)”
6,“(-0.5, 0.5, -0.5)”
7,“(0.5, 0.5, -0.5)”

I probably haven't done something obvious. Forgive me, I'm picking up Houdini again after a long hiatus, so I'm kind of rusty.

Update: Yep! I forgot to update the export node in the csv rop. *facepalm* Working now.
Edited by aoakenfo - June 27, 2018 02:07:11

Attachments:
simpl.png (8.1 KB)

User Avatar
Member
394 posts
Joined: May 2017
Offline
Hi folks. The production build of 4.20 is now out. There were a couple of changes that didn't make it into the build. If you set your emitters to local space you need to make changes to 3 modules:
  • HandleSpawnedHoudiniParticles
  • HandleSpawnedHoudiniParticlesByType
  • UpdatePosFromHoudiniArray
We'll add these changes as soon as we can.
HandleSpawnedHoudiniParticles

HandleSpawnedHoudiniParticlesByType

UpdatePosFromHoudiniArray
Edited by mikelyndon-sesi - July 20, 2018 13:22:56

Attachments:
localHandleSpawnedHoudiniParticles.jpeg (766.9 KB)
localHandleSpawnedHoudiniParticleByType.jpeg (668.3 KB)
localUpdatePosFromHoudiniArray.jpeg (552.5 KB)

User Avatar
Member
4 posts
Joined: Sept. 2017
Offline
edit - Just solved it. All I needed to do was change the condition to check the DataInstance.alive variable





Hey Mike,

I am having a few issues with the Generate Spawn Location Event when using the Spawned Houdini Particles by Type.

If I have more than one type exported in the csv file, the Generate Spawn Location Event looks as if it is creating locations for all types, even though its only creating particles for one type.

Would I need to make adjustments so that the event condition checked the Type variable as well?




Cheers,
Mark
Edited by SlaterGT - July 25, 2018 04:04:07

Attachments:
HoudiniNiagara.JPG (37.0 KB)
HoudiniNiagara2.JPG (15.3 KB)

User Avatar
Member
59 posts
Joined: March 2015
Offline
This is great! I'd suggest adding built-in support for mapping a rotation (rot) -> MeshOrientation

As well a default N -> MeshOrientation (there isn't a way to convert Particles.Normal to Particles.MeshOrientation right now without editing or making a new module because you seem to need “inputsAreNormalized” checked which isn't exposed in the UE4 Quat module.

I modified the houdini module and bit and works great now for my purposes but always nice to have this kind of thing built in for everyone

Thanks, keep up this awesome work!!!!
Edited by Barrett Meeker - Sept. 28, 2018 17:23:16

Attachments:
Capture.PNG (297.7 KB)

User Avatar
Member
37 posts
Joined: Jan. 2017
Offline
hey all,

I'm just starting to look at the content and plugin demos/videos. This is within UE4.21. However, the example map is blank (a black void with locators for particle systems). the individual particle systems do not spawn anything either in teh niagara UI or in a user created level. My other niagara systems are working.

I also see this error in the log. Is this a known issue? I am admittedly new, but i haven't even had a chance to generate a user error yet. Any tips in the right direction are much appreciated.

Image Not Found
User Avatar
Member
394 posts
Joined: May 2017
Offline
Looks like there are some gremlins with the Niagara plugin and 4.21. We're looking into it.
User Avatar
Member
138 posts
Joined: March 2018
Offline
Has this been resolved?
User Avatar
Member
37 posts
Joined: Jan. 2017
Offline
Well, as of the UE hotfix update, the scene loads correctly and the individual systems do create particles. However they do not loop on playback outside of the Niagara interface so if you aren't paying attention on the demo scene you can miss them. Not sure what the desired behavior is in there but essentially you have what you need to get back into it afaict.
Edited by peternicolai - Dec. 21, 2018 14:34:35
User Avatar
Member
20 posts
Joined: Dec. 2018
Offline
en…..so is there a way to pass a customized houdini attribute to Niagara?
For example, I create an attribute “f@angle =30”

how to get this value it in Niagara…I find out there are only certain type of attribute in unreal:
getposiition, getimpulse and more..but can I get my own attribute?
User Avatar
Member
394 posts
Joined: May 2017
Offline
You can export the point attributes with the csv ROP and then in Niagara you can use getFloatValue to access that value.

https://www.sidefx.com/docs/unreal/_niagara.html#GetFloatValue [www.sidefx.com]
User Avatar
Member
8 posts
Joined: Oct. 2010
Offline
@mikelyndon-sesi
Thanks a lot for your tips!!!!
User Avatar
Member
17 posts
Joined: Nov. 2008
Offline
Mike hey there!

So I'm doing some FX Animation using Houdini and Unreal currently and bringing some Vellum grains simulations into Unreal via Vertex Animation Textures. It's a functional workflow minus the long import times in Unreal, the strange disappearance of points, and the very restrictive point count. I'm pushing a lot of points through it (for realtime) so I'm tediously finding the right amount of points to make it through the export / import process. To Upres I was thinking of just baking 10x sims with different seed values.

BUUUUT what'd be even better is to actually be able to use a csv file as a point cache and actually get niagara particles mapped to each point for each frame. Very much just like a traditional particle cache! I could then use meshes or sprites via Niagara which gives me a ton of nice control on the rendering over the sprites of the Vertex Animation Textures.

So I seem to have hit a roadblock that's left me scratching my head. I've watched all these videos and am really left with little idea how to use the CSV rop as a particle cache. There's all this cool functionality for doing RBD setups that seems neat but all require a dop net for some reason and I'm not sure if my use case matches to the “interpolate” workflow.. I can't really tell - but I suck at Houdini still.

SO I can basically get a single CSV file representing a nice cache of my particles.. But does the CSV Rop not provide animation functionality? Can I not say, write out these particle positions and IDs for frame 1, these for frame 2, etc etc.

I really wan't a caching solution for going from Houdini to Unreal for simple grains sims like this and the vertex textures work but are limited to about 5k points for a long animation length so it's just a horrendous workflow to get anything of quality (30k points or so?). The Niagara approach makes alot more sense but I can't tell if the Houdini side just isn't finished or I'm missing a document or if my knowledge just isn't there?

The examples in these videos are very cool and novel and I love seeing all sorts of neat data come out of houdini and go to Unreal. But I gotta say just being able to bring cached point / velocity locations over and get them playing back so it can sync to animation would be the killer feature. Is there no way to do this via .csv currently?

examples:



*sniff… if only it could do more than one frame!


Image Not Found


so here is me using vertex animation textures.. it works but it decides to drop like 3/4 of them and its so painful to do this long import process.


save me Houdini gods!

Matt Radford
Edited by mradfo21 - Aug. 15, 2019 18:51:02

Attachments:
grainsSolverTest.mp4 (4.8 MB)
houdiniGrains_niagara.JPG (128.0 KB)
houdiniGrains.JPG (90.0 KB)

User Avatar
Member
1 posts
Joined: Sept. 2019
Offline
i cant download the latest gamedev tools to access the extra nodes in Houdini.

Can you provide an address
User Avatar
Member
394 posts
Joined: May 2017
Offline
Have you tried this? https://www.sidefx.com/tutorials/game-dev-toolset-installation/ [www.sidefx.com]
User Avatar
Member
33 posts
Joined: July 2017
Offline
I see the post from mradfo21 above. Is there a way to have Niagara use a CSV and play more than one frame?
User Avatar
Member
394 posts
Joined: May 2017
Offline
Have you looked at the example file? https://www.sidefx.com/forum/topic/56573/ [www.sidefx.com]

The interp_words example shows how the attributes are laid out. Time should be global time. Life should be set on the first instance of a particle with every other instance given a value of 0.
User Avatar
Member
33 posts
Joined: July 2017
Offline
Thanks Mike!
Myself and our lead technical artist are still working on this. Is there a “Lazy Artist” breakdown or some kind of example using pops or something?
User Avatar
Member
394 posts
Joined: May 2017
Offline
Unfortunately, there isn't. Mainly because I think it's a bad idea. The system was never designed as a way to pass entire particle caches across. The data interface can handle a lot of points but there are no optimisations done to the memory or sampling. It's better suited to generating spawn points or doing something else that would lead to minimum data in but create a lot of variations in Niagara. That being said, I might have a file lying around somewhere. This week is a little crazy so I might not get to it until next week.
  • Quick Links