Houdini Data Interface for UE4's Niagara
52738 38 20- mikelyndon-sesi
- 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
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
- mikelyndon-sesi
- Member
- 394 posts
- Joined: May 2017
- Offline
- aoakenfo
- 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.
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
- mikelyndon-sesi
- 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
- HandleSpawnedHoudiniParticles
- HandleSpawnedHoudiniParticlesByType
- UpdatePosFromHoudiniArray
HandleSpawnedHoudiniParticles
HandleSpawnedHoudiniParticlesByType
UpdatePosFromHoudiniArray
Edited by mikelyndon-sesi - July 20, 2018 13:22:56
- SlaterGT
- 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
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
- Barrett Meeker
- 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!!!!
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
- peternicolai
- 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.
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
- mikelyndon-sesi
- Member
- 394 posts
- Joined: May 2017
- Offline
- filipw
- Member
- 138 posts
- Joined: March 2018
- Offline
- peternicolai
- 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
- JIn_
- Member
- 20 posts
- Joined: Dec. 2018
- Offline
- mikelyndon-sesi
- 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]
https://www.sidefx.com/docs/unreal/_niagara.html#GetFloatValue [www.sidefx.com]
- lunasoul
- Member
- 8 posts
- Joined: Oct. 2010
- Offline
- mradfo21
- 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!
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
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
- huaclearlove
- Member
- 1 posts
- Joined: Sept. 2019
- Offline
- mikelyndon-sesi
- Member
- 394 posts
- Joined: May 2017
- Offline
Have you tried this? https://www.sidefx.com/tutorials/game-dev-toolset-installation/ [www.sidefx.com]
- NotSure
- Member
- 33 posts
- Joined: July 2017
- Offline
- mikelyndon-sesi
- 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.
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.
- NotSure
- Member
- 33 posts
- Joined: July 2017
- Offline
- mikelyndon-sesi
- 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