I'm trying to recreate some of the things I've done in ICE and I'm finding some roadblocks.
Let's say I want to do a simple smooth, per point get the neighbors positions and average them. Here's a way to do it in ICE.
In VOP I'm a bit lost atm since even though I can access the neighbors ID, unlike ICE there's no “locations” here, so I dunno how to get the point positions of said neighbors.
Also apparently I can't create an array by selecting from an array with an array of indices instead of a single value.
More over, these very handy array operations don't seem to exist.
If I'm going to have to loop to get these, I wonder how much overhead these put into Houdini and also if it's better to do them directly in VEX or in an “inline code” node. (?)
And even if I loop to create my arrays, will they be created per vertex? Isn't that wasteful?
What's the “context” of the attribute VOP? Is it always point?
I'm guessing many of you went through this “rewiring”, eh.
Arrays in Houdini. Wondering...
12956 11 4- probiner
- Member
- 361 posts
- Joined: June 2013
- Offline
- anon_user_37409885
- Member
- 4189 posts
- Joined: June 2012
- Offline
- amm
- Member
- 98 posts
- Joined: Aug. 2014
- Offline
probiner
If I'm going to have to loop to get these, I wonder how much overhead these put into Houdini and also if it's better to do them directly in VEX or in an “inline code” node. (?)
And even if I loop to create my arrays, will they be created per vertex? Isn't that wasteful?
What's the “context” of the attribute VOP? Is it always point?
I'm guessing many of you went through this “rewiring”, eh.
Hello Probiner, nice to see you there
About overhead with loops, of course loop takes more to evaluate, however let's say that you shouldn't hesitate to use them. I wouldn't go into comparisons with ICE, I'll stay just with that: “you shouldn't hesitate to use them”.
BTW in Houdini world, closest thing to ICE Context is “class”, vertex, point, primitive, detail ('vertex' is just a polygon corner). Context in H belongs to words like SOP, DOP and so on.
In some cases, like working with curves/strands, you can utilize modes of Attribute Promote SOP (average, min, max, sum and so) for really fast, ‘modified transferring’ from curve to points on curve, or back - because curve is primitive class, point is… point class.
- anon_user_37409885
- Member
- 4189 posts
- Joined: June 2012
- Offline
- probiner
- Member
- 361 posts
- Joined: June 2013
- Offline
Hey guys, thanks for the insights
@Artye
My goal is to use Vop. The picture below shows something more in light of the smoothing I'm trying to do. You've shown me some interesting avenue with “pcopen”, but this not for this:
@amm
Hey hey Thanks for the inputs. I've uses Loops then even ended up setting up a HDA to do those summarizing operations:
As seen in the first image, I just didn't grasp how to do all the looping inside the VOP, I had to have the ICE equivalent to “Repeat” done on SOP level.
So much to learn
Cheers
@Artye
My goal is to use Vop. The picture below shows something more in light of the smoothing I'm trying to do. You've shown me some interesting avenue with “pcopen”, but this not for this:
@amm
Hey hey Thanks for the inputs. I've uses Loops then even ended up setting up a HDA to do those summarizing operations:
As seen in the first image, I just didn't grasp how to do all the looping inside the VOP, I had to have the ICE equivalent to “Repeat” done on SOP level.
So much to learn
Cheers
Edited by probiner - May 22, 2017 20:41:54
- NNois
- Member
- 174 posts
- Joined: March 2014
- Offline
- amm
- Member
- 98 posts
- Joined: Aug. 2014
- Offline
probiner
As seen in the first image, I just didn't grasp how to do all the looping inside the VOP, I had to have the ICE equivalent to “Repeat” done on SOP level.
If I'm correct your solution is almost the same as in loop masterclass examples [www.sidefx.com], so that's ‘it’, probably.
By the way I've played with some ‘practical cases’ of cumulative calculations, when I was working on ‘rewrite’ of Kristinka Hair for Houdini, things like Frenet Frame for orientation, or transferring one axis scale of pattern into equivalent distribution along curve, so on. Worked well with satisfactory speed, considering that thing is still, loop. Firstly I've tried to ‘misuse’ the behavior of some SOPs like Sweep and that worked too, but, doing everything in VOPs was a way faster.
Hope I'll find a little bit of time to post as much generic examples of these ‘researches’.
Edited by amm - May 24, 2017 15:34:31
- probiner
- Member
- 361 posts
- Joined: June 2013
- Offline
NNois
Cool !
Can you just share that here ? https://github.com/fxnut/siLib [github.com]
Hey NNois, I didn't reply right away but I kept this in mind. What is it?
I want to do a VOP library with some subnets that echo some XSI workflows so I'm wondering what is this library of yours.
Cheers
- NNois
- Member
- 174 posts
- Joined: March 2014
- Offline
Hi, that's not mine at all.
That's a outgoing effort to rebuild in Houdini the most used ICE nodes.
This project started on the softimage mailing list by Andy Nicolas and other “big names” of the list.
Although I don't have time now to participate, I think building a lib for softies is a very good idea
https://groups.google.com/forum/m/# [groups.google.com]!msg/houdini-silib/1EDy4VBE_48/6F_DWkK_CgAJ
That's a outgoing effort to rebuild in Houdini the most used ICE nodes.
This project started on the softimage mailing list by Andy Nicolas and other “big names” of the list.
Although I don't have time now to participate, I think building a lib for softies is a very good idea
https://groups.google.com/forum/m/# [groups.google.com]!msg/houdini-silib/1EDy4VBE_48/6F_DWkK_CgAJ
Edited by NNois - June 12, 2017 19:06:35
- Benoit Robert
- Member
- 1 posts
- Joined: Jan. 2014
- Offline
Hi, I'm a Senior FX artist coming form Softimage XSI and I've switched to Houdini FX 3 years ago.
There are many ICE nodes that are missing in Houdini that stops me in my day to day work. I think it would be important to have someone from SideFX to port them to Houdini in an official way so they would be part of the default Houdini nodes.
Here's some examples:
- Get array min - Get array average - Get array max - Get array sum - Get array median - …
but also nodes like:
- Select in array - Find in Array - Get element index - Get Array Sub Indices - Sort Array with key - Push on Array - Pop from array - …
and those concerning the set (as if you would Attribute Promote to Details):
- Build Array from Set - Get Set Min - Get Set Max
and:
- Select SubArray in Array - Build 2D Array - Build Index Array - Build array from constant -
I truly believe it would be useful to the community. Any XSI users missing these nodes as well?
Here's the Autodesk's list: http://docs.autodesk.com/SI/2015/ENU/# [docs.autodesk.com]!/url=./files/iceref_nodes.htm
There are many ICE nodes that are missing in Houdini that stops me in my day to day work. I think it would be important to have someone from SideFX to port them to Houdini in an official way so they would be part of the default Houdini nodes.
Here's some examples:
- Get array min - Get array average - Get array max - Get array sum - Get array median - …
but also nodes like:
- Select in array - Find in Array - Get element index - Get Array Sub Indices - Sort Array with key - Push on Array - Pop from array - …
and those concerning the set (as if you would Attribute Promote to Details):
- Build Array from Set - Get Set Min - Get Set Max
and:
- Select SubArray in Array - Build 2D Array - Build Index Array - Build array from constant -
I truly believe it would be useful to the community. Any XSI users missing these nodes as well?
Here's the Autodesk's list: http://docs.autodesk.com/SI/2015/ENU/# [docs.autodesk.com]!/url=./files/iceref_nodes.htm
- Jgaspari
- Member
- 2 posts
- Joined: April 2018
- Offline
I have a solution to find the min and max of an array! If you promote your array to detail you can use this attribute wrangle to find the min and max
int my_array = detail(0, "my_array");
int len = len(my_array);
foreach(int val; my_array){
int first_comp = getcomp(my_array, 0);
if(val == first_comp){
i@min = 99999999;
}
else{
i@min = min(@min, val);
i@max = max(@max, val);
}
}
int my_array = detail(0, "my_array");
int len = len(my_array);
foreach(int val; my_array){
int first_comp = getcomp(my_array, 0);
if(val == first_comp){
i@min = 99999999;
}
else{
i@min = min(@min, val);
i@max = max(@max, val);
}
}
Edited by Jgaspari - Jan. 20, 2023 17:52:19
- AslakKS
- Member
- 185 posts
- Joined: Feb. 2016
- Offline
-
- Quick Links