Found 20 posts.
Search results Show results as topic list.
Technical Discussion » Aligning rotation manipulators to stamped geometry
- misterbk
- 20 posts
- Offline
Technical Discussion » Cache SOP: What does "Index Param Name" actually d
- misterbk
- 20 posts
- Offline
What does the “Index Param Name” parameter actually do in the cache SOP?
The only documentation I can find is the phrase, “A stampable parameter set to the index during caching.”
It defaults to the letter i. I tried changing “Index Param Name” to ‘q’ and to “I_like_pizza”, and nothing seemed to change.
I've got a cache node with a stamped value for ‘Index’ that is working as far as I can tell.
Is this so that other nodes can stamp in the current index the cache is looking up, or something?
The only documentation I can find is the phrase, “A stampable parameter set to the index during caching.”
It defaults to the letter i. I tried changing “Index Param Name” to ‘q’ and to “I_like_pizza”, and nothing seemed to change.
I've got a cache node with a stamped value for ‘Index’ that is working as far as I can tell.
Is this so that other nodes can stamp in the current index the cache is looking up, or something?
Technical Discussion » Aligning rotation manipulators to stamped geometry
- misterbk
- 20 posts
- Offline
Another long shot question, just in case someone has an answer…
I have a (manually created and positioned) point P that is next to some geometry GEO. I transfer the normals from GEO onto P, and then use a copy sop to stamp some INST geo on to P.
I want to have a manipulator handle on P that lets the user apply an additional tweak rotation to INST, after it has been stamped on P. That's all well and good, I've created a persistent xform handle and linked its (rx, ry, rz) to a transform node that rotates INST before it gets stamped.
My problem is I can't figure out how to set the xform handle's (rprex, rprey, rprez) so that the rotation handle is correctly lined up to where the user sees the geometry. Is there a nice ‘Houdini’ way to do this, or do I just need to keep bashing my head against writing some horrid attribute scripts to try and convert N into Euler angles the same way that the copy sop does, and feed them into the xform's (rprex, rprey, rprez)?
———————————————-
For a visual example, say INST is a nail and it's being stamped several times (in a specific static way, not scattered) on GEO which is a tree. After being aligned to N during stamping, I want there to be rotation manipulators so the user can tweak the orientation of each nail.
I have a (manually created and positioned) point P that is next to some geometry GEO. I transfer the normals from GEO onto P, and then use a copy sop to stamp some INST geo on to P.
I want to have a manipulator handle on P that lets the user apply an additional tweak rotation to INST, after it has been stamped on P. That's all well and good, I've created a persistent xform handle and linked its (rx, ry, rz) to a transform node that rotates INST before it gets stamped.
My problem is I can't figure out how to set the xform handle's (rprex, rprey, rprez) so that the rotation handle is correctly lined up to where the user sees the geometry. Is there a nice ‘Houdini’ way to do this, or do I just need to keep bashing my head against writing some horrid attribute scripts to try and convert N into Euler angles the same way that the copy sop does, and feed them into the xform's (rprex, rprey, rprez)?
———————————————-
For a visual example, say INST is a nail and it's being stamped several times (in a specific static way, not scattered) on GEO which is a tree. After being aligned to N during stamping, I want there to be rotation manipulators so the user can tweak the orientation of each nail.
Technical Discussion » How to clear specific index of a Cache SOP from script?
- misterbk
- 20 posts
- Offline
Hello again.
I'm trying to solve a slow user interaction problem in an OTL by using a Cache SOP and putting in my own values for its Index. I can store and retrieve the cached data just fine, the problem is how to tell that Cache SOP that index K has changed and needs to recalculate.
Is there a way to do this using either hscript or Python? The problem is there is no button on the Cache SOP GUI that clears a specific index. There's a button for “Clear All Cache” and for “Clear Current Frame Cache”, but I don't want to clear the current frame cache, I want to clear the cache at my specific index K. (Since this is happening within a Copy SOP and ‘index’ is stamped.)
I was thinking I would put a Python SOP upstream that checks if any stamped attributes for point number K have changed since last cook, and tells the downstream Cache SOP to clear the cache for index K. This should keep stamped geo for points other than K loading from cache, so that the user can interact more quickly. But I can't seem to find any exposed API functions to do that. (Even tried using Python's ‘dir’ on the hou.Node object for the Cache SOP, finding nothing so far.)
Anyone know if there's a way to do this?
(Edit) Note: The “Cache Stamping Geometry” option on the Copy SOP appears to do nothing in my case. Changing one instance still causes all others to also recalculate.
I'm trying to solve a slow user interaction problem in an OTL by using a Cache SOP and putting in my own values for its Index. I can store and retrieve the cached data just fine, the problem is how to tell that Cache SOP that index K has changed and needs to recalculate.
Is there a way to do this using either hscript or Python? The problem is there is no button on the Cache SOP GUI that clears a specific index. There's a button for “Clear All Cache” and for “Clear Current Frame Cache”, but I don't want to clear the current frame cache, I want to clear the cache at my specific index K. (Since this is happening within a Copy SOP and ‘index’ is stamped.)
I was thinking I would put a Python SOP upstream that checks if any stamped attributes for point number K have changed since last cook, and tells the downstream Cache SOP to clear the cache for index K. This should keep stamped geo for points other than K loading from cache, so that the user can interact more quickly. But I can't seem to find any exposed API functions to do that. (Even tried using Python's ‘dir’ on the hou.Node object for the Cache SOP, finding nothing so far.)
Anyone know if there's a way to do this?
(Edit) Note: The “Cache Stamping Geometry” option on the Copy SOP appears to do nothing in my case. Changing one instance still causes all others to also recalculate.
Technical Discussion » Copy/paste attribute expression replaces , with .?
- misterbk
- 20 posts
- Offline
This is kind of funny, since I live literally 20 minutes from SideFX.
I'll try a newer build, thanks!
I'll try a newer build, thanks!
Technical Discussion » dynamic ice fracturing
- misterbk
- 20 posts
- Offline
Fake the gradual cracking in comp?
Does sound challenging. Maybe a guru will swing by with a better suggestion.
Does sound challenging. Maybe a guru will swing by with a better suggestion.
Technical Discussion » dynamic ice fracturing
- misterbk
- 20 posts
- Offline
What about the ice nature prevents pre-fracturing?
You can always use the old bait-and-switch. Pre-fracture the geometry of the ice, as it is on the frame you want it to fracture. Sim up to that point, swap out whatever ice sim you've got with pre-fractured geo that was created from the shape of the ice as it is on the swap-out frame.
You can always use the old bait-and-switch. Pre-fracture the geometry of the ice, as it is on the frame you want it to fracture. Sim up to that point, swap out whatever ice sim you've got with pre-fractured geo that was created from the shape of the ice as it is on the swap-out frame.
Technical Discussion » Copy/paste attribute expression replaces , with .?
- misterbk
- 20 posts
- Offline
I'm having the weirdest problem here.
When I copy an attribute expression like this:
stamp(“../copystamp_postrigs”, “inst_offsetx”, 0)
… and paste it in a channel in another node (both set to hscript), it pastes this:
stamp(“../copystamp_postrigs”. “inst_offsetx”. 0)
I then have to go through and change all of the appropriate periods back to commas.
OR, I can go back to the node I copied from, copy the same text again and paste it again, and suddenly it comes through just fine.
Do I have gremlins? Did I sacrifice the wrong kind of goat? Is this a known issue, and I need to install a newer build?
Houdini 14.0.201.13, Windows 7, both 64-bit.
When I copy an attribute expression like this:
stamp(“../copystamp_postrigs”, “inst_offsetx”, 0)
… and paste it in a channel in another node (both set to hscript), it pastes this:
stamp(“../copystamp_postrigs”. “inst_offsetx”. 0)
I then have to go through and change all of the appropriate periods back to commas.
OR, I can go back to the node I copied from, copy the same text again and paste it again, and suddenly it comes through just fine.
Do I have gremlins? Did I sacrifice the wrong kind of goat? Is this a known issue, and I need to install a newer build?
Houdini 14.0.201.13, Windows 7, both 64-bit.
Technical Discussion » Caching within copy/stamp when point attrs drive copy geo?
- misterbk
- 20 posts
- Offline
Hi! Hopefully I'm able to explain this clearly:
I have a homemade Python SOP ‘MKPOINTS’ that drops points with point attributes controlled by the user. There are 15-ish attributes on each point.
I also have a large network ‘BIGNET’ that constructs a complex geometry using those point attributes. This network takes about 2 seconds to cook.
These plug in to a Copy SOP that uses the point attributes in MKPOINTS to stamp attributes into BIGNET.
This is for procedural modeling. It works great for one or two points, but each additional point the user creates adds 2 seconds to the total cook time of the Copy SOP. This would be expected if every point had changed, but e.g. if the user has dropped 11 points and wishes to change one attribute on one of those points, that user has to wait 22 seconds for the Copy SOP to cook even though 10 of those 11 points have not changed.
Turning on “Cache Stamping Geometry” does not change the cook time in this situation.
One of the stamped attributes is the point number $PNUM of the point the user is working on. I tried adding a Cache node indexed to $PNUM, which does cache each stamp of the network. Unfortunately the Cache node doesn't notice when the other attributes have changed, so all attributes except Position stop working until the Cache is cleared.
Is there another type of cache node I haven't found that's suited for copy/stamp scenarios? Any other way to speed this up?
(Edit: Houdini 14.0)
(Edit 2): Just tried a Null with an additional attribute, which is stamped from one of the point values, plugged in to the second input of the Cache SOP, as a string. When the attribute changes and gets stamped in to the Null, it does not trigger invalidation of that index of the cache. :? So, no luck that route either.
Also thought, I could “hash” all of the inputs to an integer within MKPOINTS. Then set the cache index to that hash value. Problem there is, that would cause a new cached geo to be created and stored forever on every single edit, either growing the RAM footprint until either until Houdini is restarted or forcing the user to occasionally push a ‘Clear Cache’ button.
I have a homemade Python SOP ‘MKPOINTS’ that drops points with point attributes controlled by the user. There are 15-ish attributes on each point.
I also have a large network ‘BIGNET’ that constructs a complex geometry using those point attributes. This network takes about 2 seconds to cook.
These plug in to a Copy SOP that uses the point attributes in MKPOINTS to stamp attributes into BIGNET.
This is for procedural modeling. It works great for one or two points, but each additional point the user creates adds 2 seconds to the total cook time of the Copy SOP. This would be expected if every point had changed, but e.g. if the user has dropped 11 points and wishes to change one attribute on one of those points, that user has to wait 22 seconds for the Copy SOP to cook even though 10 of those 11 points have not changed.
Turning on “Cache Stamping Geometry” does not change the cook time in this situation.
One of the stamped attributes is the point number $PNUM of the point the user is working on. I tried adding a Cache node indexed to $PNUM, which does cache each stamp of the network. Unfortunately the Cache node doesn't notice when the other attributes have changed, so all attributes except Position stop working until the Cache is cleared.
Is there another type of cache node I haven't found that's suited for copy/stamp scenarios? Any other way to speed this up?
(Edit: Houdini 14.0)
(Edit 2): Just tried a Null with an additional attribute, which is stamped from one of the point values, plugged in to the second input of the Cache SOP, as a string. When the attribute changes and gets stamped in to the Null, it does not trigger invalidation of that index of the cache. :? So, no luck that route either.
Also thought, I could “hash” all of the inputs to an integer within MKPOINTS. Then set the cache index to that hash value. Problem there is, that would cause a new cached geo to be created and stored forever on every single edit, either growing the RAM footprint until either until Houdini is restarted or forcing the user to occasionally push a ‘Clear Cache’ button.
Technical Discussion » How to find currently selected tab in multiparm folder?
- misterbk
- 20 posts
- Offline
That would be unfortunate…
There must be a better way to correlate tab number to object it controls. All I can think of is having text float next to each object so the user can look up the correct tab number.
There must be a better way to correlate tab number to object it controls. All I can think of is having text float next to each object so the user can look up the correct tab number.
Technical Discussion » How to find currently selected tab in multiparm folder?
- misterbk
- 20 posts
- Offline
Hello,
I have a Multiparm Block (tabs) that allows users to position objects within my Digital Asset. The objects have a fairly large stack of attribs, and I'd like to give the user a visual indication of which object their currently selected tab refers to. Is there any way to read the currently selected multiparm tab?
When dealing with regular (non-multiparm) folders, you can open a Python shell and do:
hou.node('/obj/myhda1').parm('tabfolder').eval()
… and it tells you which (non-multiparm) tab is selected by index.
But, when you call eval() on a multiparm folder parameter, you do not get the index of the currently selected folder. Houdini returns the integer total count of multiparms created.
Seems this question has been asked before [sidefx.com], a couple of years ago, and was never answered. (On the ODForce boards too, [forums.odforce.net] but the replies were all misunderstanding the multiparm block part.) I have the exact same question as that guy. I don't suppose a way of doing this has surfaced since then?
Maybe there is a way to query some hidden GUI element that's responsible for showing the multiparm tabs? Or maybe a fancy way to use callback scripts?
I have a Multiparm Block (tabs) that allows users to position objects within my Digital Asset. The objects have a fairly large stack of attribs, and I'd like to give the user a visual indication of which object their currently selected tab refers to. Is there any way to read the currently selected multiparm tab?
When dealing with regular (non-multiparm) folders, you can open a Python shell and do:
hou.node('/obj/myhda1').parm('tabfolder').eval()
… and it tells you which (non-multiparm) tab is selected by index.
But, when you call eval() on a multiparm folder parameter, you do not get the index of the currently selected folder. Houdini returns the integer total count of multiparms created.
Seems this question has been asked before [sidefx.com], a couple of years ago, and was never answered. (On the ODForce boards too, [forums.odforce.net] but the replies were all misunderstanding the multiparm block part.) I have the exact same question as that guy. I don't suppose a way of doing this has surfaced since then?
Maybe there is a way to query some hidden GUI element that's responsible for showing the multiparm tabs? Or maybe a fancy way to use callback scripts?
Houdini Lounge » Houdini on a tablet
- misterbk
- 20 posts
- Offline
I have used Houdini for basic stuff on an even older tablet. It's not a MS Surface Pro, but it's the knockoff pseudo-tablet “ultrabook” that Sony makes. (Vaio Duo 11.) It has a very slow CPU, but 64-bit OS and plenty of RAM.
The Intel video hardware sets you back a bit. I found a few of the fluid visualization types didn't display well, or were too heavy for the gpu hardware to display. It would work, but unusably slow even for very small sims when using fluid data visualization modes other than points. That may be better in newer models.
There were a few odd graphics glitches, but nothing deal-breaking. Can't think of specifics, but I do remember they were really just oddities. Things that didn't really get in my way, just was used to them looking different on fully qualified boxes. I didn't try all features, not by a long shot, but the basic everyday display necessities worked well enough to get things done with little hindrance. The more picky and demanding visualization stuff for sim data was the only thing I found that was a no-go. Procedural modeling stuff works great. High poly counts don't seem to bother it much. Not silky smooth, but not slow either.
Simming was of course slower than it could have been, but it would do it. The tiny form factor isn't very good at managing the heat, so I would not recommend it as a good solution for simming things overnight. Simple stuff is fine, but anything complex you'll want to farm out to your main box back home.
What's fantastic about the Houdini / Surface combo is you can set it up with cloud sync for your project files, and if a client wants something while you're on the go you can load up your scene and do some network tweaking right there on your hotel bed. Even on that underpowered 1.9ghz CPU, I always found I had enough CPU power to make some tweaks and see whether they were working. Not nearly as fast as the main workstation of course, but hey I'm doing Houdini work on an airplane, in coach. The thing fits on the tray, and doesn't even sacrifice screen real estate.
So, all said and done, it's a really great combo unless you're doing very complex geometry or more than basic complexity fluid sims. The experience isn't perfect, but the ability to carry everything you need for work in a device the size of a thick magazine more than makes up for it.
One warning though. Do not get the ones from Sony. This Vaio Duo 11 has been, by far, the worst device I have ever purchased. (The keyboard double-taps keys, the built in mouse nub has a loose solder joint or something that makes it randomly fail for a few weeks at a time, the screen burns in images after only 10 minutes, I had to factory reset it five times in eight months due to their bloatware killing the OS, the stylus is not Wacom and mostly useless, and those are just the main complaints.) So, stay away from Sony. Love the portability with Houdini, but I really regret not waiting for the actual Microsoft-brand Surface Pro when I purchased.
The Intel video hardware sets you back a bit. I found a few of the fluid visualization types didn't display well, or were too heavy for the gpu hardware to display. It would work, but unusably slow even for very small sims when using fluid data visualization modes other than points. That may be better in newer models.
There were a few odd graphics glitches, but nothing deal-breaking. Can't think of specifics, but I do remember they were really just oddities. Things that didn't really get in my way, just was used to them looking different on fully qualified boxes. I didn't try all features, not by a long shot, but the basic everyday display necessities worked well enough to get things done with little hindrance. The more picky and demanding visualization stuff for sim data was the only thing I found that was a no-go. Procedural modeling stuff works great. High poly counts don't seem to bother it much. Not silky smooth, but not slow either.
Simming was of course slower than it could have been, but it would do it. The tiny form factor isn't very good at managing the heat, so I would not recommend it as a good solution for simming things overnight. Simple stuff is fine, but anything complex you'll want to farm out to your main box back home.
What's fantastic about the Houdini / Surface combo is you can set it up with cloud sync for your project files, and if a client wants something while you're on the go you can load up your scene and do some network tweaking right there on your hotel bed. Even on that underpowered 1.9ghz CPU, I always found I had enough CPU power to make some tweaks and see whether they were working. Not nearly as fast as the main workstation of course, but hey I'm doing Houdini work on an airplane, in coach. The thing fits on the tray, and doesn't even sacrifice screen real estate.
So, all said and done, it's a really great combo unless you're doing very complex geometry or more than basic complexity fluid sims. The experience isn't perfect, but the ability to carry everything you need for work in a device the size of a thick magazine more than makes up for it.
One warning though. Do not get the ones from Sony. This Vaio Duo 11 has been, by far, the worst device I have ever purchased. (The keyboard double-taps keys, the built in mouse nub has a loose solder joint or something that makes it randomly fail for a few weeks at a time, the screen burns in images after only 10 minutes, I had to factory reset it five times in eight months due to their bloatware killing the OS, the stylus is not Wacom and mostly useless, and those are just the main complaints.) So, stay away from Sony. Love the portability with Houdini, but I really regret not waiting for the actual Microsoft-brand Surface Pro when I purchased.
Technical Discussion » Can't get 'opdef' syntax to work in File node?
- misterbk
- 20 posts
- Offline
Progress.
You can't use obj. It only works with bgeo. If you add the file as obj, I think it interprets it as a script or something, making the contents unavailable to nodes.
I finally tried converting the OBJs into bgeos, and they show up, but only when using the explicit syntax that the docs I linked above said not to use.
So this works: opdef:Object/myotl?t_12.bgeo
This also works: opdef:..?t_12.bgeo
This does not work: opdef:.?t_12.bgeo
This also does not work: opdef:../..?t_12.bgeo
I notice that when I import bgeos using the Extra Files tab, the script window shows “Contains binary information.” I can't tell any other difference though. I see no user-modifiable flag that gets set for an OBJ, or anything like that. Maybe it's just hard-coded that extra files can only be certain things?
In any case, I wish I knew why the different syntaxes are recommended and why they do/don't work, but this is solved for me.
You can't use obj. It only works with bgeo. If you add the file as obj, I think it interprets it as a script or something, making the contents unavailable to nodes.
I finally tried converting the OBJs into bgeos, and they show up, but only when using the explicit syntax that the docs I linked above said not to use.
So this works: opdef:Object/myotl?t_12.bgeo
This also works: opdef:..?t_12.bgeo
This does not work: opdef:.?t_12.bgeo
This also does not work: opdef:../..?t_12.bgeo
I notice that when I import bgeos using the Extra Files tab, the script window shows “Contains binary information.” I can't tell any other difference though. I see no user-modifiable flag that gets set for an OBJ, or anything like that. Maybe it's just hard-coded that extra files can only be certain things?
In any case, I wish I knew why the different syntaxes are recommended and why they do/don't work, but this is solved for me.
Technical Discussion » Can't get 'opdef' syntax to work in File node?
- misterbk
- 20 posts
- Offline
Hi all,
I am trying to get a File node within a digital asset to load an OTL Extra File via the opdef: syntax, and nothing is working. Anyone have any ideas what I might be doing wrong here?
I've defined a digital asset, and one of the things it has to do is read in an .obj file. To keep things clean, I used Type Properties->Extra Files to add the relevant OBJ files to the OTL. They appear in the list on the left, and the script panel on the right fills in with the usual OBJ syntax. The section names are t_1.obj, t_2.obj, t_3.obj, etc. All of the files load correctly if I point to them directly on disk instead of through the OTL.
Inside the OTL, I have a single File node by itself, set visible, and all I'm trying to do is make it load one of those .obj's I added in the Extra Files section.
I've done Save Operator Type, quit Houdini, restarted, dropped a new instance of the OTL, and verified the sections are still present in the Extra Files tab and still contain the text they should.
In my File node, I've tried the following syntax in the ‘Geometry File’ field:
opdef:Object/myotl?t_2.obj
opdef:Object/myotl/?t_2.obj
opdefObject/myotl?t_2.obj
opdefObject/myotl/?t_2.obj
(all of the above with ‘object’, ‘obj, or ’Obj' instead)
opdef:../..?t_2.obj <- the one suggested by The Docs [orbolt.com] (scroll to ‘Extra Files’ section)
opdef:../../?t_2.obj
opdef:.?t_2.obj
opdef:./?t_2.obj
(and in final desperation, all of the above without the question mark.)
The path to the File node is /obj/myotl1/file1. I also verified the OTL file being saved to in Type Properties is the correct one, and there are no duplicates of that OTL definition in the Operator Type Manager.
Doesn't seem to matter what I enter in the text field, the File node can't find any of the OBJ's in Extra Files. The error on a middle-click is "Unable to read file ." I'm out of ideas. Any idea what I'm doing wrong?
I am trying to get a File node within a digital asset to load an OTL Extra File via the opdef: syntax, and nothing is working. Anyone have any ideas what I might be doing wrong here?
I've defined a digital asset, and one of the things it has to do is read in an .obj file. To keep things clean, I used Type Properties->Extra Files to add the relevant OBJ files to the OTL. They appear in the list on the left, and the script panel on the right fills in with the usual OBJ syntax. The section names are t_1.obj, t_2.obj, t_3.obj, etc. All of the files load correctly if I point to them directly on disk instead of through the OTL.
Inside the OTL, I have a single File node by itself, set visible, and all I'm trying to do is make it load one of those .obj's I added in the Extra Files section.
I've done Save Operator Type, quit Houdini, restarted, dropped a new instance of the OTL, and verified the sections are still present in the Extra Files tab and still contain the text they should.
In my File node, I've tried the following syntax in the ‘Geometry File’ field:
opdef:Object/myotl?t_2.obj
opdef:Object/myotl/?t_2.obj
opdefObject/myotl?t_2.obj
opdefObject/myotl/?t_2.obj
(all of the above with ‘object’, ‘obj, or ’Obj' instead)
opdef:../..?t_2.obj <- the one suggested by The Docs [orbolt.com] (scroll to ‘Extra Files’ section)
opdef:../../?t_2.obj
opdef:.?t_2.obj
opdef:./?t_2.obj
(and in final desperation, all of the above without the question mark.)
The path to the File node is /obj/myotl1/file1. I also verified the OTL file being saved to in Type Properties is the correct one, and there are no duplicates of that OTL definition in the Operator Type Manager.
Doesn't seem to matter what I enter in the text field, the File node can't find any of the OBJ's in Extra Files. The error on a middle-click is "Unable to read file ." I'm out of ideas. Any idea what I'm doing wrong?
Technical Discussion » Any way to script handles on a Digital Asset?
- misterbk
- 20 posts
- Offline
Wonderful, thank you!
I was having a hard time finding things in the hscript documentation. I don't think I ever would have seen ‘pomadd’ and realized that was what I was looking for.
I was having a hard time finding things in the hscript documentation. I don't think I ever would have seen ‘pomadd’ and realized that was what I was looking for.
Technical Discussion » Any way to script handles on a Digital Asset?
- misterbk
- 20 posts
- Offline
I'm creating a digital asset, and hitting a roadblock with what looks like not-yet-implemented functionality. Here's the situation I'm trying to solve:
The user of the digital asset will be placing a number of objects. (Let's say they're spheres.) The number of spheres is not known in advance. The user might place one, three, maybe even 12 of them, but it is guaranteed to never be more than 20 or so. (I mean, they could try, but it wouldn't make sense for this application. The number is expected to stay small.)
The Digital Asset's job is to take those placed spheres and create something around them.
The way I wanted it to work was this:
1: User sets an integer parameter to be the number of spheres he wants. (Let's say there are 5.)
2: Digital asset sees this change and creates 5 manipulator handles and 5 attributes, and links them together. User now sees a sphere at each handle, and can move them around with minimal hassle.
3: When finished, the user turns the asset from “Preview” to “Final” mode and the complex geometry around the spheres is created as output.
It's looking like that method won't work though, because all Python functions related to interacting with handles are “not yet implemented.” (hou.HandleBinding, hou.HandleListPane, hou.HandleNodeTypeParmBinding, hou.HandleType, hou.PersistentHandle, anything in hou with ‘handle’ in the name is not yet implemented.)
Can this be done with hscript as a fallback? I can't find those functions so far.
I could also use one handle and provide an interface to change which sphere it's controlling, but the Python functionality for changing what a handle controls is also not yet implemented. If I can't do it the other way, maybe there's a way to do it this way?
I'm on 12.5, but I checked the docs for 13.0 and these functions are not implemented in that version eiither.
The Catch: The Digital Asset is to be used by someone with practically no Houdini training. It is to be a tool for use by a trained expert in a non-CG field, allowing them to use Houdini's powerful math skills to create a shape that would otherwise be very difficult to program from scratch. This person will have assistance from someone with more Houdini skills. That person will set everything up, then the expert will come in, use manipulators to place the spheres, and the assistant will handle the geo export.
The user of the digital asset will be placing a number of objects. (Let's say they're spheres.) The number of spheres is not known in advance. The user might place one, three, maybe even 12 of them, but it is guaranteed to never be more than 20 or so. (I mean, they could try, but it wouldn't make sense for this application. The number is expected to stay small.)
The Digital Asset's job is to take those placed spheres and create something around them.
The way I wanted it to work was this:
1: User sets an integer parameter to be the number of spheres he wants. (Let's say there are 5.)
2: Digital asset sees this change and creates 5 manipulator handles and 5 attributes, and links them together. User now sees a sphere at each handle, and can move them around with minimal hassle.
3: When finished, the user turns the asset from “Preview” to “Final” mode and the complex geometry around the spheres is created as output.
It's looking like that method won't work though, because all Python functions related to interacting with handles are “not yet implemented.” (hou.HandleBinding, hou.HandleListPane, hou.HandleNodeTypeParmBinding, hou.HandleType, hou.PersistentHandle, anything in hou with ‘handle’ in the name is not yet implemented.)
Can this be done with hscript as a fallback? I can't find those functions so far.
I could also use one handle and provide an interface to change which sphere it's controlling, but the Python functionality for changing what a handle controls is also not yet implemented. If I can't do it the other way, maybe there's a way to do it this way?
I'm on 12.5, but I checked the docs for 13.0 and these functions are not implemented in that version eiither.
The Catch: The Digital Asset is to be used by someone with practically no Houdini training. It is to be a tool for use by a trained expert in a non-CG field, allowing them to use Houdini's powerful math skills to create a shape that would otherwise be very difficult to program from scratch. This person will have assistance from someone with more Houdini skills. That person will set everything up, then the expert will come in, use manipulators to place the spheres, and the assistant will handle the geo export.
Technical Discussion » Make Unreadable Digital Assets !
- misterbk
- 20 posts
- Offline
I agree, being able to blackbox a digital asset has real industry value. If you only think from the perspective of DAs being created by a lead or dev and used within that company, then yes it's a people problem. But if you think from the perspective of creating a DA for sale or as contract work, you definitely want to lock that down for multiple reasons.
1: If you expose your methods, the client can simply look at your work and say “oh THAT'S how you do that” and then your expertise may no longer be needed.
2: If you consider any of those methods to be your trade secret, maybe a fantastic way of doing something that reduces computation time and gives a better result, once you've given a DA with that IP to one company your R&D on that trick has lost its value.
3: If the client dives into the DA and screws it up, you can bet they'll be calling you for support on “your busted work”.
I'd also like a way to do this and may need it soon. I'll look in to Orbolt, but any details from someone with experience blackboxing assets would be nice to have.
: Looks like Orbolt will protect the asset, but only if I sell it through the Orbolt store. This won't do, because the asset I may be selling is wrapped around a very specific niche pipeline in an industry that 99% of Orbolt users won't be interested in (not CG), and also because the company I'm selling to believes they have a patent on the process my work is driving.
So, I need to sell a locked digital asset to exactly one client.
1: If you expose your methods, the client can simply look at your work and say “oh THAT'S how you do that” and then your expertise may no longer be needed.
2: If you consider any of those methods to be your trade secret, maybe a fantastic way of doing something that reduces computation time and gives a better result, once you've given a DA with that IP to one company your R&D on that trick has lost its value.
3: If the client dives into the DA and screws it up, you can bet they'll be calling you for support on “your busted work”.
I'd also like a way to do this and may need it soon. I'll look in to Orbolt, but any details from someone with experience blackboxing assets would be nice to have.
: Looks like Orbolt will protect the asset, but only if I sell it through the Orbolt store. This won't do, because the asset I may be selling is wrapped around a very specific niche pipeline in an industry that 99% of Orbolt users won't be interested in (not CG), and also because the company I'm selling to believes they have a patent on the process my work is driving.
So, I need to sell a locked digital asset to exactly one client.
Houdini Indie and Apprentice » Syntax / functions to get world x,y,z into an attribute?
- misterbk
- 20 posts
- Offline
BACKTICKS!
It was the backticks. It didn't like them.
For whoever cares, this worked great:
in /obj/my_geometry:
Grid (rows=1 cols=1)
|
group (group name = windtarget)
|
merge (merged with rest of geometery)
|
xform (animated rotating)
|
delete (delete nonselected, group ‘windtarget’)
|
Null (named ‘windtarget’)
In dopnet, in the pyro node:
X = prim(“/obj/arrow_origin_ref/windtarget”,0,“P”,0)
Y = prim(“/obj/arrow_origin_ref/windtarget”,0,“P”,1)
Z = prim(“/obj/arrow_origin_ref/windtarget”,0,“P”,2)
It was the backticks. It didn't like them.
For whoever cares, this worked great:
in /obj/my_geometry:
Grid (rows=1 cols=1)
|
group (group name = windtarget)
|
merge (merged with rest of geometery)
|
xform (animated rotating)
|
delete (delete nonselected, group ‘windtarget’)
|
Null (named ‘windtarget’)
In dopnet, in the pyro node:
X = prim(“/obj/arrow_origin_ref/windtarget”,0,“P”,0)
Y = prim(“/obj/arrow_origin_ref/windtarget”,0,“P”,1)
Z = prim(“/obj/arrow_origin_ref/windtarget”,0,“P”,2)
Houdini Indie and Apprentice » Syntax / functions to get world x,y,z into an attribute?
- misterbk
- 20 posts
- Offline
So far I've tried these with no luck… I don't get errors or anything, but the channel stays at value ‘0’ even though ‘windtarget’ is transformed.
`chsop(“/obj/arrow_origin_ref/windtarget.position.x”)`
`origin(“”,“/obj/arrow_origin_ref/xform3”,“TX”)`
`origin(“”,“/obj/arrow_origin_ref/xform3”,“TX”)`
`vorigin(“”,“/obj/arrow_origin_ref/windtarget”).x`
`vorigin(“”,“/obj/arrow_origin_ref/windtarget”).x`
Also tried ‘vtorigin’.
I'm guessing it doesn't work because these are sops and not objects. I'll try with a point and ‘prim’, see if that works better.
`chsop(“/obj/arrow_origin_ref/windtarget.position.x”)`
`origin(“”,“/obj/arrow_origin_ref/xform3”,“TX”)`
`origin(“”,“/obj/arrow_origin_ref/xform3”,“TX”)`
`vorigin(“”,“/obj/arrow_origin_ref/windtarget”).x`
`vorigin(“”,“/obj/arrow_origin_ref/windtarget”).x`
Also tried ‘vtorigin’.
I'm guessing it doesn't work because these are sops and not objects. I'll try with a point and ‘prim’, see if that works better.
Houdini Indie and Apprentice » Syntax / functions to get world x,y,z into an attribute?
- misterbk
- 20 posts
- Offline
Hi, I have a situation like this:
/obj/Geometry:
Sphere (or some dummy object)
|
xform (rotating arbitrarily)
/obj/AutoDopNetwork:
pyro node - (attributes) - Wind Tunnel
I want to get the direction the xform node is facing to be the wind tunnel direction for the pyro sim, but I'm getting stuck on how. In Maya, I would drop a locator parented under the node, offset it by one unit in X, and send its WorldPosition where I want it to go.
I imagine there's an elegant way to do this in Houdini, so what would you recommend?
/obj/Geometry:
Sphere (or some dummy object)
|
xform (rotating arbitrarily)
/obj/AutoDopNetwork:
pyro node - (attributes) - Wind Tunnel
I want to get the direction the xform node is facing to be the wind tunnel direction for the pyro sim, but I'm getting stuck on how. In Maya, I would drop a locator parented under the node, offset it by one unit in X, and send its WorldPosition where I want it to go.
I imagine there's an elegant way to do this in Houdini, so what would you recommend?
Edited by - July 17, 2012 15:50:24
-
- Quick Links