Re: Setting data on a particle based off data from another particle in the same cloud
Hey guys, Thank you all who responded first of all. I had a crazy week and didn't get a chance to stop and attempt to understand your suggestions until today, which is why I didn't reply sooner. I concur with Julian; great tip Grahame! Thanks for that. And thank you Julian and Leonard for sending wonderful example scenes that both worked great. :D Love this list, -- Alan ps: I owe you all beers if we meet happen to meet at a future Siggraph! (or if you don't drink, an alternative beverage of your choosing.) On Thu, Jul 18, 2013 at 12:49 AM, Julian Johnson jul...@exch.demon.co.ukwrote: On 17/07/2013 17:03, Grahame Fuller wrote: 3. Use Build Array from Set to put ParentID into an array. Find the parent’s ParentID in the array. You should get an array with two indices, the one that isn’t the parent is the cloned child (safe to say it will be the second one). That step is genius, gray. Works both ways - children to parent, parent to children - and couldn't be more direct, simple or unambiguous. Definitely one for the cookbook.
Re: Setting data on a particle based off data from another particle in the same cloud
Hi Alan, https://dl.dropboxusercontent.com/u/69741069/cross_querying.rar Not sure if this is what you're after but it establishes a relationship between the parent and the clone which enables the parent to later query the clone's attributes and set data on itself. It's quite hacky in that the only way I could quickly get a parent to know which particles it had cloned was via Get Closest Points on instantiation of the clones. In this scene the parent looks up the second strand position in the clone and shows you the resulting vector. I tried to figure out the ID allocation (making assumptions, for example, that the cloned particle would have the next ID along from its parent but that didn't seem to work) and it would be interesting to understand better how ICE allocates IDs to clones. On the other hand, I think it would be more elegant to do your stuff the other way round - it's always much easier to give a clone the id of its parent since it can directly inherit a custom attribute based on the original particles ID and then always find it again using ID to Location. So, in your case, maybe have the strand on the original particle and querying that from the cloned one (using the easier ID to Location stuff)? Julian
Re: Setting data on a particle based off data from another particle in the same cloud
Maybe you're not getting the right ID to look up the strandpoints on? On Wed, Jul 17, 2013 at 2:34 AM, Alan Fregtman alan.fregt...@gmail.comwrote: I thought that too, but it's not cutting it. :( The do stuff part doesn't get any StrandPosition data for the points without strands. (Tried both ID to Location Point Index to Location.) On Tue, Jul 16, 2013 at 9:27 PM, Ciaran Moloney moloney.cia...@gmail.comwrote: Point ID to location get strand positions do stuff Set Self.Orientation Ciaran On Wed, Jul 17, 2013 at 1:54 AM, Alan Fregtman alan.fregt...@gmail.comwrote: Hey guys, Scratching my head over this... So, I have two sets of particles. One is emitted then a second particle is born (via Clone Point) and this one gets some strand stuff. This one follows the original's motion. I wanna align the first particle to the strands' tangent from the second particle. I got this working when it was all with one set of particle, but now that I separated them, I'm a little lost with the context. Getting self.StrandPosition to work out the tangents sets the context to per-point and so if I set any data it does it to that original point I read the StrandPosition from, therefore I end up affecting my strandy particles, not the original. Any idea how I can get the StrandPosition from the strandy particles and have it so when I set the Orientation I do so on the original first set of particles? Any help appreciated. Cheers, -- Alan
Re: Setting data on a particle based off data from another particle in the same cloud
If you clone the points clone the id into a new attribute, then you know which particle is the parent. And add a attribute that it's a clone. You can use that later to decide not to put orientation values on. Build a set from you tangent, whatever values and then you can select the corresponding value from that set. I'm not in front of a computer right now, but I'll have a quick look at it if you don't get it working. Chris -- christian keller visual effects|direction m +49 179 69 36 248 f +49 40 386 835 33 chris3...@me.com gesendet von meinem iDing Am 17.07.2013 um 12:02 schrieb Ciaran Moloney moloney.cia...@gmail.com: Maybe you're not getting the right ID to look up the strandpoints on? On Wed, Jul 17, 2013 at 2:34 AM, Alan Fregtman alan.fregt...@gmail.com wrote: I thought that too, but it's not cutting it. :( The do stuff part doesn't get any StrandPosition data for the points without strands. (Tried both ID to Location Point Index to Location.) On Tue, Jul 16, 2013 at 9:27 PM, Ciaran Moloney moloney.cia...@gmail.com wrote: Point ID to location get strand positions do stuff Set Self.Orientation Ciaran On Wed, Jul 17, 2013 at 1:54 AM, Alan Fregtman alan.fregt...@gmail.com wrote: Hey guys, Scratching my head over this... So, I have two sets of particles. One is emitted then a second particle is born (via Clone Point) and this one gets some strand stuff. This one follows the original's motion. I wanna align the first particle to the strands' tangent from the second particle. I got this working when it was all with one set of particle, but now that I separated them, I'm a little lost with the context. Getting self.StrandPosition to work out the tangents sets the context to per-point and so if I set any data it does it to that original point I read the StrandPosition from, therefore I end up affecting my strandy particles, not the original. Any idea how I can get the StrandPosition from the strandy particles and have it so when I set the Orientation I do so on the original first set of particles? Any help appreciated. Cheers, -- Alan
Re: Setting data on a particle based off data from another particle in the same cloud
I guess I don't understand the problemwhy not do just ID to Location strand positions ? It's quick and gives you the array you need right away. On Wed, Jul 17, 2013 at 1:29 PM, Leonard Koch leonardkoch...@gmail.comwrote: Hm somehow my first email didn't get through. The trick is to turn the per point data into arrays, use a lot of find in array nodes and to calculate the direction vector on the strand particles instead of trying to get the strand data from them and then calculating it on the other particles. Hope this helps. Here you can download the scene: https://leonard-koch.squarespace.com/s/SeparatingStrandsAndParticlesForAlan.scn And here is the image of the ice tree used in the scene On Wed, Jul 17, 2013 at 2:07 PM, Christian Keller chris3...@me.comwrote: If you clone the points clone the id into a new attribute, then you know which particle is the parent. And add a attribute that it's a clone. You can use that later to decide not to put orientation values on. Build a set from you tangent, whatever values and then you can select the corresponding value from that set. I'm not in front of a computer right now, but I'll have a quick look at it if you don't get it working. Chris -- christian keller visual effects|direction m +49 179 69 36 248 f +49 40 386 835 33 chris3...@me.com gesendet von meinem iDing Am 17.07.2013 um 12:02 schrieb Ciaran Moloney moloney.cia...@gmail.com: Maybe you're not getting the right ID to look up the strandpoints on? On Wed, Jul 17, 2013 at 2:34 AM, Alan Fregtman alan.fregt...@gmail.comwrote: I thought that too, but it's not cutting it. :( The do stuff part doesn't get any StrandPosition data for the points without strands. (Tried both ID to Location Point Index to Location.) On Tue, Jul 16, 2013 at 9:27 PM, Ciaran Moloney moloney.cia...@gmail.com wrote: Point ID to location get strand positions do stuff Set Self.Orientation Ciaran On Wed, Jul 17, 2013 at 1:54 AM, Alan Fregtman alan.fregt...@gmail.com wrote: Hey guys, Scratching my head over this... So, I have two sets of particles. One is emitted then a second particle is born (via Clone Point) and this one gets some strand stuff. This one follows the original's motion. I wanna align the first particle to the strands' tangent from the second particle. I got this working when it was all with one set of particle, but now that I separated them, I'm a little lost with the context. Getting self.StrandPosition to work out the tangents sets the context to per-point and so if I set any data it does it to that original point I read the StrandPosition from, therefore I end up affecting my strandy particles, not the original. Any idea how I can get the StrandPosition from the strandy particles and have it so when I set the Orientation I do so on the original first set of particles? Any help appreciated. Cheers, -- Alan
Re: Setting data on a particle based off data from another particle in the same cloud
@ Julian Leonard, Thank you guys. I will check your scenes and explanations when I get home later. @Ciaran, It does, but only so for the particles with strands. Particles without strands get filtered out of the logic. So even though I can work out the orientation I need from the location StrandPosition's, when I set self.Orientation, it only sets it for the strandy particles, not the others. That's my main problem. How do I force my set on self.Orientation to be on the original particle IDs? On Wed, Jul 17, 2013 at 9:28 AM, Ciaran Moloney moloney.cia...@gmail.comwrote: I guess I don't understand the problemwhy not do just ID to Location strand positions ? It's quick and gives you the array you need right away. On Wed, Jul 17, 2013 at 1:29 PM, Leonard Koch leonardkoch...@gmail.comwrote: Hm somehow my first email didn't get through. The trick is to turn the per point data into arrays, use a lot of find in array nodes and to calculate the direction vector on the strand particles instead of trying to get the strand data from them and then calculating it on the other particles. Hope this helps. Here you can download the scene: https://leonard-koch.squarespace.com/s/SeparatingStrandsAndParticlesForAlan.scn And here is the image of the ice tree used in the scene On Wed, Jul 17, 2013 at 2:07 PM, Christian Keller chris3...@me.comwrote: If you clone the points clone the id into a new attribute, then you know which particle is the parent. And add a attribute that it's a clone. You can use that later to decide not to put orientation values on. Build a set from you tangent, whatever values and then you can select the corresponding value from that set. I'm not in front of a computer right now, but I'll have a quick look at it if you don't get it working. Chris -- christian keller visual effects|direction m +49 179 69 36 248 f +49 40 386 835 33 chris3...@me.com gesendet von meinem iDing Am 17.07.2013 um 12:02 schrieb Ciaran Moloney moloney.cia...@gmail.com : Maybe you're not getting the right ID to look up the strandpoints on? On Wed, Jul 17, 2013 at 2:34 AM, Alan Fregtman alan.fregt...@gmail.comwrote: I thought that too, but it's not cutting it. :( The do stuff part doesn't get any StrandPosition data for the points without strands. (Tried both ID to Location Point Index to Location.) On Tue, Jul 16, 2013 at 9:27 PM, Ciaran Moloney moloney.cia...@gmail.com wrote: Point ID to location get strand positions do stuff Set Self.Orientation Ciaran On Wed, Jul 17, 2013 at 1:54 AM, Alan Fregtman alan.fregt...@gmail.com wrote: Hey guys, Scratching my head over this... So, I have two sets of particles. One is emitted then a second particle is born (via Clone Point) and this one gets some strand stuff. This one follows the original's motion. I wanna align the first particle to the strands' tangent from the second particle. I got this working when it was all with one set of particle, but now that I separated them, I'm a little lost with the context. Getting self.StrandPosition to work out the tangents sets the context to per-point and so if I set any data it does it to that original point I read the StrandPosition from, therefore I end up affecting my strandy particles, not the original. Any idea how I can get the StrandPosition from the strandy particles and have it so when I set the Orientation I do so on the original first set of particles? Any help appreciated. Cheers, -- Alan
RE: Setting data on a particle based off data from another particle in the same cloud
It would be easier to do this with two separate clouds. If you clone the first cloud's points on emission, then the creation order and therefore the point indices will be the same so you can use Switch Context. You can set the cloned particles' size to 0 if you want to hide them and then trigger them some time after emission. Otherwise... 1. Store the ID as a custom attribute, say ParentID, before cloning. This will get cloned and establishes a correspondence between parent and child. 2. Clone. 3. Use Build Array from Set to put ParentID into an array. Find the parent's ParentID in the array. You should get an array with two indices, the one that isn't the parent is the cloned child (safe to say it will be the second one). 4. . Use Build Array from Set again to put the tangents into an array. Use the child's index to get the tangent you want. gray From: softimage-boun...@listproc.autodesk.com [mailto:softimage-boun...@listproc.autodesk.com] On Behalf Of Alan Fregtman Sent: Wednesday, July 17, 2013 9:45 AM To: XSI Mailing List Subject: Re: Setting data on a particle based off data from another particle in the same cloud @ Julian Leonard, Thank you guys. I will check your scenes and explanations when I get home later. @Ciaran, It does, but only so for the particles with strands. Particles without strands get filtered out of the logic. So even though I can work out the orientation I need from the location StrandPosition's, when I set self.Orientation, it only sets it for the strandy particles, not the others. That's my main problem. How do I force my set on self.Orientation to be on the original particle IDs? On Wed, Jul 17, 2013 at 9:28 AM, Ciaran Moloney moloney.cia...@gmail.commailto:moloney.cia...@gmail.com wrote: I guess I don't understand the problemwhy not do just ID to Location strand positions ? It's quick and gives you the array you need right away. On Wed, Jul 17, 2013 at 1:29 PM, Leonard Koch leonardkoch...@gmail.commailto:leonardkoch...@gmail.com wrote: Hm somehow my first email didn't get through. The trick is to turn the per point data into arrays, use a lot of find in array nodes and to calculate the direction vector on the strand particles instead of trying to get the strand data from them and then calculating it on the other particles. Hope this helps. Here you can download the scene: https://leonard-koch.squarespace.com/s/SeparatingStrandsAndParticlesForAlan.scn And here is the image of the ice tree used in the scene On Wed, Jul 17, 2013 at 2:07 PM, Christian Keller chris3...@me.commailto:chris3...@me.com wrote: If you clone the points clone the id into a new attribute, then you know which particle is the parent. And add a attribute that it's a clone. You can use that later to decide not to put orientation values on. Build a set from you tangent, whatever values and then you can select the corresponding value from that set. I'm not in front of a computer right now, but I'll have a quick look at it if you don't get it working. Chris -- christian keller visual effects|direction m +49 179 69 36 248tel:%2B49%20179%2069%2036%20248 f +49 40 386 835 33tel:%2B49%2040%20386%20835%2033 chris3...@me.commailto:chris3...@me.com gesendet von meinem iDing Am 17.07.2013 um 12:02 schrieb Ciaran Moloney moloney.cia...@gmail.commailto:moloney.cia...@gmail.com: Maybe you're not getting the right ID to look up the strandpoints on? On Wed, Jul 17, 2013 at 2:34 AM, Alan Fregtman alan.fregt...@gmail.commailto:alan.fregt...@gmail.com wrote: I thought that too, but it's not cutting it. :( The do stuff part doesn't get any StrandPosition data for the points without strands. (Tried both ID to Location Point Index to Location.) On Tue, Jul 16, 2013 at 9:27 PM, Ciaran Moloney moloney.cia...@gmail.commailto:moloney.cia...@gmail.com wrote: Point ID to location get strand positions do stuff Set Self.Orientation Ciaran On Wed, Jul 17, 2013 at 1:54 AM, Alan Fregtman alan.fregt...@gmail.commailto:alan.fregt...@gmail.com wrote: Hey guys, Scratching my head over this... So, I have two sets of particles. One is emitted then a second particle is born (via Clone Point) and this one gets some strand stuff. This one follows the original's motion. I wanna align the first particle to the strands' tangent from the second particle. I got this working when it was all with one set of particle, but now that I separated them, I'm a little lost with the context. Getting self.StrandPosition to work out the tangents sets the context to per-point and so if I set any data it does it to that original point I read the StrandPosition from, therefore I end up affecting my strandy particles, not the original. Any idea how I can get the StrandPosition from the strandy particles and have it so when I set the Orientation I do so on the original first set of particles? Any help appreciated. Cheers, -- Alan attachment: winmail.dat
Re: Setting data on a particle based off data from another particle in the same cloud
On 17/07/2013 17:03, Grahame Fuller wrote: 3. Use Build Array from Set to put ParentID into an array. Find the parent's ParentID in the array. You should get an array with two indices, the one that isn't the parent is the cloned child (safe to say it will be the second one). That step is genius, gray. Works both ways - children to parent, parent to children - and couldn't be more direct, simple or unambiguous. Definitely one for the cookbook.
Setting data on a particle based off data from another particle in the same cloud
Hey guys, Scratching my head over this... So, I have two sets of particles. One is emitted then a second particle is born (via Clone Point) and this one gets some strand stuff. This one follows the original's motion. I wanna align the first particle to the strands' tangent from the second particle. I got this working when it was all with one set of particle, but now that I separated them, I'm a little lost with the context. Getting self.StrandPosition to work out the tangents sets the context to per-point and so if I set any data it does it to that original point I read the StrandPosition from, therefore I end up affecting my strandy particles, not the original. Any idea how I can get the StrandPosition from the strandy particles and have it so when I set the Orientation I do so on the original first set of particles? Any help appreciated. Cheers, -- Alan
Re: Setting data on a particle based off data from another particle in the same cloud
Point ID to location get strand positions do stuff Set Self.Orientation Ciaran On Wed, Jul 17, 2013 at 1:54 AM, Alan Fregtman alan.fregt...@gmail.comwrote: Hey guys, Scratching my head over this... So, I have two sets of particles. One is emitted then a second particle is born (via Clone Point) and this one gets some strand stuff. This one follows the original's motion. I wanna align the first particle to the strands' tangent from the second particle. I got this working when it was all with one set of particle, but now that I separated them, I'm a little lost with the context. Getting self.StrandPosition to work out the tangents sets the context to per-point and so if I set any data it does it to that original point I read the StrandPosition from, therefore I end up affecting my strandy particles, not the original. Any idea how I can get the StrandPosition from the strandy particles and have it so when I set the Orientation I do so on the original first set of particles? Any help appreciated. Cheers, -- Alan
Re: Setting data on a particle based off data from another particle in the same cloud
I thought that too, but it's not cutting it. :( The do stuff part doesn't get any StrandPosition data for the points without strands. (Tried both ID to Location Point Index to Location.) On Tue, Jul 16, 2013 at 9:27 PM, Ciaran Moloney moloney.cia...@gmail.comwrote: Point ID to location get strand positions do stuff Set Self.Orientation Ciaran On Wed, Jul 17, 2013 at 1:54 AM, Alan Fregtman alan.fregt...@gmail.comwrote: Hey guys, Scratching my head over this... So, I have two sets of particles. One is emitted then a second particle is born (via Clone Point) and this one gets some strand stuff. This one follows the original's motion. I wanna align the first particle to the strands' tangent from the second particle. I got this working when it was all with one set of particle, but now that I separated them, I'm a little lost with the context. Getting self.StrandPosition to work out the tangents sets the context to per-point and so if I set any data it does it to that original point I read the StrandPosition from, therefore I end up affecting my strandy particles, not the original. Any idea how I can get the StrandPosition from the strandy particles and have it so when I set the Orientation I do so on the original first set of particles? Any help appreciated. Cheers, -- Alan